diff options
-rw-r--r-- | drivers/staging/fsl_qbman/qman_high.c | 23 | ||||
-rw-r--r-- | include/linux/fsl_qman.h | 5 |
2 files changed, 20 insertions, 8 deletions
diff --git a/drivers/staging/fsl_qbman/qman_high.c b/drivers/staging/fsl_qbman/qman_high.c index 9b8a924..8d3011e 100644 --- a/drivers/staging/fsl_qbman/qman_high.c +++ b/drivers/staging/fsl_qbman/qman_high.c @@ -3464,10 +3464,11 @@ int qman_ceetm_lni_enable_shaper(struct qm_ceetm_lni *lni, int coupled, lni->shaper_enable = 1; lni->shaper_couple = coupled; + lni->oal = oal; config_opts.cid = CEETM_COMMAND_LNI_SHAPER | lni->idx; config_opts.dcpid = lni->dcp_idx; - config_opts.shaper_config.cpl = (coupled << 7) | oal; + config_opts.shaper_config.cpl = (coupled << 7) | lni->oal; config_opts.shaper_config.crtcr = (lni->cr_token_rate.whole << 13) | lni->cr_token_rate.fraction; config_opts.shaper_config.ertcr = (lni->er_token_rate.whole << 13) | @@ -3480,13 +3481,25 @@ EXPORT_SYMBOL(qman_ceetm_lni_enable_shaper); int qman_ceetm_lni_disable_shaper(struct qm_ceetm_lni *lni) { + struct qm_mcc_ceetm_mapping_shaper_tcfc_config config_opts; + if (!lni->shaper_enable) { pr_err("The shaper has been disabled\n"); return -EINVAL; } + config_opts.cid = CEETM_COMMAND_LNI_SHAPER | lni->idx; + config_opts.dcpid = lni->dcp_idx; + config_opts.shaper_config.cpl = (lni->shaper_couple << 7) | lni->oal; + config_opts.shaper_config.crtbl = lni->cr_token_bucket_limit; + config_opts.shaper_config.ertbl = lni->er_token_bucket_limit; + /* Set CR/ER rate with all 1's to configure an infinite rate, thus + * disable the shaping. + */ + config_opts.shaper_config.crtcr = 0xFFFFFF; + config_opts.shaper_config.ertcr = 0xFFFFFF; lni->shaper_enable = 0; - return 0; + return qman_ceetm_configure_mapping_shaper_tcfc(&config_opts); } EXPORT_SYMBOL(qman_ceetm_lni_disable_shaper); @@ -3540,8 +3553,7 @@ int qman_ceetm_lni_get_commit_rate(struct qm_ceetm_lni *lni, query_opts.dcpid = lni->dcp_idx; ret = qman_ceetm_query_mapping_shaper_tcfc(&query_opts, &query_result); - if (ret | !query_result.shaper_query.crtcr | - !query_result.shaper_query.crtbl) { + if (ret) { pr_err("The LNI CR rate or limit is not set\n"); return -EINVAL; } @@ -3602,8 +3614,7 @@ int qman_ceetm_lni_get_excess_rate(struct qm_ceetm_lni *lni, query_opts.cid = CEETM_COMMAND_LNI_SHAPER | lni->idx; query_opts.dcpid = lni->dcp_idx; ret = qman_ceetm_query_mapping_shaper_tcfc(&query_opts, &query_result); - if (ret | !query_result.shaper_query.ertcr | - !query_result.shaper_query.ertbl) { + if (ret) { pr_err("The LNI ER rate or limit is not set\n"); return -EINVAL; } diff --git a/include/linux/fsl_qman.h b/include/linux/fsl_qman.h index 2306f93..b149bc5 100644 --- a/include/linux/fsl_qman.h +++ b/include/linux/fsl_qman.h @@ -2381,8 +2381,9 @@ struct qm_ceetm_lni { int is_claimed; struct qm_ceetm_sp *sp; struct list_head channels; - u8 shaper_enable; - u8 shaper_couple; + int shaper_enable; + int shaper_couple; + int oal; struct qm_ceetm_rate cr_token_rate; struct qm_ceetm_rate er_token_rate; u16 cr_token_bucket_limit; |