Commit 5c664ace authored by Madalin Bucur's avatar Madalin Bucur Committed by David S. Miller
Browse files

soc/qman: add return value to interrupt coalesce changing APIs



Check that the values received by the portal interrupt coalesce
change APIs are in range.

Signed-off-by: default avatarMadalin Bucur <madalin.bucur@nxp.com>
Signed-off-by: default avatarRoy Pledge <roy.pledge@nxp.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 830b61ba
Loading
Loading
Loading
Loading
+26 −7
Original line number Diff line number Diff line
@@ -36,6 +36,8 @@
#define MAX_IRQNAME	16	/* big enough for "QMan portal %d" */
#define QMAN_POLL_LIMIT 32
#define QMAN_PIRQ_DQRR_ITHRESH 12
#define QMAN_DQRR_IT_MAX 15
#define QMAN_ITP_MAX 0xFFF
#define QMAN_PIRQ_MR_ITHRESH 4
#define QMAN_PIRQ_IPERIOD 100

@@ -727,9 +729,15 @@ static inline void qm_dqrr_vdqcr_set(struct qm_portal *portal, u32 vdqcr)
	qm_out(portal, QM_REG_DQRR_VDQCR, vdqcr);
}

static inline void qm_dqrr_set_ithresh(struct qm_portal *portal, u8 ithresh)
static inline int qm_dqrr_set_ithresh(struct qm_portal *portal, u8 ithresh)
{

	if (ithresh > QMAN_DQRR_IT_MAX)
		return -EINVAL;

	qm_out(portal, QM_REG_DQRR_ITR, ithresh);

	return 0;
}

/* --- MR API --- */
@@ -1012,13 +1020,20 @@ static inline void put_affine_portal(void)

static struct workqueue_struct *qm_portal_wq;

void qman_dqrr_set_ithresh(struct qman_portal *portal, u8 ithresh)
int qman_dqrr_set_ithresh(struct qman_portal *portal, u8 ithresh)
{
	int res;

	if (!portal)
		return;
		return -EINVAL;

	res = qm_dqrr_set_ithresh(&portal->p, ithresh);
	if (res)
		return res;

	qm_dqrr_set_ithresh(&portal->p, ithresh);
	portal->p.dqrr.ithresh = ithresh;

	return 0;
}
EXPORT_SYMBOL(qman_dqrr_set_ithresh);

@@ -1036,10 +1051,14 @@ void qman_portal_get_iperiod(struct qman_portal *portal, u32 *iperiod)
}
EXPORT_SYMBOL(qman_portal_get_iperiod);

void qman_portal_set_iperiod(struct qman_portal *portal, u32 iperiod)
int qman_portal_set_iperiod(struct qman_portal *portal, u32 iperiod)
{
	if (portal)
	if (!portal || iperiod > QMAN_ITP_MAX)
		return -EINVAL;

	qm_out(&portal->p, QM_REG_ITPR, iperiod);

	return 0;
}
EXPORT_SYMBOL(qman_portal_set_iperiod);

+6 −2
Original line number Diff line number Diff line
@@ -1205,8 +1205,10 @@ void qman_dqrr_get_ithresh(struct qman_portal *portal, u8 *ithresh);
 * qman_dqrr_set_ithresh - Set coalesce interrupt threshold
 * @portal: portal to set the new value on
 * @ithresh: new threshold value
 *
 * Returns 0 on success, or a negative error code.
 */
void qman_dqrr_set_ithresh(struct qman_portal *portal, u8 ithresh);
int qman_dqrr_set_ithresh(struct qman_portal *portal, u8 ithresh);

/**
 * qman_dqrr_get_iperiod - Get coalesce interrupt period
@@ -1219,7 +1221,9 @@ void qman_portal_get_iperiod(struct qman_portal *portal, u32 *iperiod);
 * qman_dqrr_set_iperiod - Set coalesce interrupt period
 * @portal: portal to set the new value on
 * @ithresh: new period value
 *
 * Returns 0 on success, or a negative error code.
 */
void qman_portal_set_iperiod(struct qman_portal *portal, u32 iperiod);
int qman_portal_set_iperiod(struct qman_portal *portal, u32 iperiod);

#endif	/* __FSL_QMAN_H */