Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 496bfa11 authored by Claudiu Manoil's avatar Claudiu Manoil Committed by Scott Wood
Browse files

soc/qman: Clean up CGR CSCN target update operations

parent efe848cd
Loading
Loading
Loading
Loading
+23 −14
Original line number Diff line number Diff line
@@ -2248,7 +2248,23 @@ static int qm_modify_cgr(struct qman_cgr *cgr, u32 flags,
}

#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 */
+2 −2
Original line number Diff line number Diff line
@@ -553,8 +553,8 @@ struct __qm_mc_cgr {
	u8 cscn_en;	/* boolean, use QM_CGR_EN */
	union {
		struct {
			u16 cscn_targ_upd_ctrl; /* use QM_CSCN_TARG_UDP_ */
			u16 cscn_targ_dcp_low;	/* CSCN_TARG_DCP low-16bits */
			u16 cscn_targ_upd_ctrl; /* use QM_CGR_TARG_UDP_* */
			u16 cscn_targ_dcp_low;
		};
		u32 cscn_targ;	/* use QM_CGR_TARG_* */
	};