From 50508fc2ee3c90b9e0e64da15560b4f390fa5776 Mon Sep 17 00:00:00 2001 From: Haiying Wang Date: Fri, 24 Oct 2014 17:01:41 -0400 Subject: fsl_qbman: correct the lni shaper disable function LNI shaper is disabled by setting all 1's to both CR/ER Signed-off-by: Haiying Wang Change-Id: I7b680ecbcfcfa41860dddcca34044116719cda08 Reviewed-on: http://git.am.freescale.net:8181/22075 Tested-by: Review Code-CDREVIEW Reviewed-by: Geoff Thorpe Reviewed-by: Richard Schmitt 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; -- cgit v0.10.2