summaryrefslogtreecommitdiff
path: root/drivers/soc/fsl/qbman
diff options
context:
space:
mode:
authorClaudiu Manoil <claudiu.manoil@nxp.com>2016-11-16 17:40:29 +0300
committerScott Wood <oss@buserror.net>2016-11-23 10:23:49 +0300
commit496bfa11de2e6805b63168d45c2f92edbeae54e2 (patch)
tree14cfa18cc5eb54f82ddb2144c91203aa94977e44 /drivers/soc/fsl/qbman
parentefe848cdb724be2d0cc61f6329997f9a7cd7948f (diff)
downloadlinux-496bfa11de2e6805b63168d45c2f92edbeae54e2.tar.xz
soc/qman: Clean up CGR CSCN target update operations
Signed-off-by: Claudiu Manoil <claudiu.manoil@nxp.com> Signed-off-by: Scott Wood <oss@buserror.net>
Diffstat (limited to 'drivers/soc/fsl/qbman')
-rw-r--r--drivers/soc/fsl/qbman/qman.c37
1 files changed, 23 insertions, 14 deletions
diff --git a/drivers/soc/fsl/qbman/qman.c b/drivers/soc/fsl/qbman/qman.c
index 8386acc1d37d..acee99da71a7 100644
--- a/drivers/soc/fsl/qbman/qman.c
+++ b/drivers/soc/fsl/qbman/qman.c
@@ -2248,7 +2248,23 @@ out:
}
#define PORTAL_IDX(n) (n->config->channel - QM_CHANNEL_SWPORTAL0)
-#define TARG_MASK(n) (BIT(31) >> PORTAL_IDX(n))
+
+/* congestion state change notification target update control */
+static void qm_cgr_cscn_targ_set(struct __qm_mc_cgr *cgr, int pi, u32 val)
+{
+ if (qman_ip_rev >= QMAN_REV30)
+ cgr->cscn_targ_upd_ctrl = QM_CGR_TARG_UDP_CTRL_WRITE_BIT | pi;
+ else
+ cgr->cscn_targ = val | QM_CGR_TARG_PORTAL(pi);
+}
+
+static void qm_cgr_cscn_targ_clear(struct __qm_mc_cgr *cgr, int pi, u32 val)
+{
+ if (qman_ip_rev >= QMAN_REV30)
+ cgr->cscn_targ_upd_ctrl = pi;
+ else
+ cgr->cscn_targ = val & ~QM_CGR_TARG_PORTAL(pi);
+}
static u8 qman_cgr_cpus[CGR_NUM];
@@ -2298,13 +2314,8 @@ int qman_create_cgr(struct qman_cgr *cgr, u32 flags,
if (ret)
goto out;
- if ((qman_ip_rev & 0xFF00) >= QMAN_REV30)
- local_opts.cgr.cscn_targ_upd_ctrl =
- QM_CGR_TARG_UDP_CTRL_WRITE_BIT | PORTAL_IDX(p);
- else
- /* Overwrite TARG */
- local_opts.cgr.cscn_targ = cgr_state.cgr.cscn_targ |
- TARG_MASK(p);
+ qm_cgr_cscn_targ_set(&local_opts.cgr, PORTAL_IDX(p),
+ cgr_state.cgr.cscn_targ);
local_opts.we_mask |= QM_CGR_WE_CSCN_TARG;
/* send init if flags indicate so */
@@ -2371,13 +2382,11 @@ int qman_delete_cgr(struct qman_cgr *cgr)
list_add(&cgr->node, &p->cgr_cbs);
goto release_lock;
}
- /* Overwrite TARG */
+
local_opts.we_mask = QM_CGR_WE_CSCN_TARG;
- if ((qman_ip_rev & 0xFF00) >= QMAN_REV30)
- local_opts.cgr.cscn_targ_upd_ctrl = PORTAL_IDX(p);
- else
- local_opts.cgr.cscn_targ = cgr_state.cgr.cscn_targ &
- ~(TARG_MASK(p));
+ qm_cgr_cscn_targ_clear(&local_opts.cgr, PORTAL_IDX(p),
+ cgr_state.cgr.cscn_targ);
+
ret = qm_modify_cgr(cgr, 0, &local_opts);
if (ret)
/* add back to the list */