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

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
...@@ -36,6 +36,8 @@ ...@@ -36,6 +36,8 @@
#define MAX_IRQNAME 16 /* big enough for "QMan portal %d" */ #define MAX_IRQNAME 16 /* big enough for "QMan portal %d" */
#define QMAN_POLL_LIMIT 32 #define QMAN_POLL_LIMIT 32
#define QMAN_PIRQ_DQRR_ITHRESH 12 #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_MR_ITHRESH 4
#define QMAN_PIRQ_IPERIOD 100 #define QMAN_PIRQ_IPERIOD 100
...@@ -727,9 +729,15 @@ static inline void qm_dqrr_vdqcr_set(struct qm_portal *portal, u32 vdqcr) ...@@ -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); 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); qm_out(portal, QM_REG_DQRR_ITR, ithresh);
return 0;
} }
/* --- MR API --- */ /* --- MR API --- */
...@@ -1012,13 +1020,20 @@ static inline void put_affine_portal(void) ...@@ -1012,13 +1020,20 @@ static inline void put_affine_portal(void)
static struct workqueue_struct *qm_portal_wq; 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) 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; portal->p.dqrr.ithresh = ithresh;
return 0;
} }
EXPORT_SYMBOL(qman_dqrr_set_ithresh); EXPORT_SYMBOL(qman_dqrr_set_ithresh);
...@@ -1036,10 +1051,14 @@ void qman_portal_get_iperiod(struct qman_portal *portal, u32 *iperiod) ...@@ -1036,10 +1051,14 @@ void qman_portal_get_iperiod(struct qman_portal *portal, u32 *iperiod)
} }
EXPORT_SYMBOL(qman_portal_get_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)
qm_out(&portal->p, QM_REG_ITPR, iperiod); return -EINVAL;
qm_out(&portal->p, QM_REG_ITPR, iperiod);
return 0;
} }
EXPORT_SYMBOL(qman_portal_set_iperiod); EXPORT_SYMBOL(qman_portal_set_iperiod);
......
...@@ -1205,8 +1205,10 @@ void qman_dqrr_get_ithresh(struct qman_portal *portal, u8 *ithresh); ...@@ -1205,8 +1205,10 @@ void qman_dqrr_get_ithresh(struct qman_portal *portal, u8 *ithresh);
* qman_dqrr_set_ithresh - Set coalesce interrupt threshold * qman_dqrr_set_ithresh - Set coalesce interrupt threshold
* @portal: portal to set the new value on * @portal: portal to set the new value on
* @ithresh: new threshold value * @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 * qman_dqrr_get_iperiod - Get coalesce interrupt period
...@@ -1219,7 +1221,9 @@ void qman_portal_get_iperiod(struct qman_portal *portal, u32 *iperiod); ...@@ -1219,7 +1221,9 @@ void qman_portal_get_iperiod(struct qman_portal *portal, u32 *iperiod);
* qman_dqrr_set_iperiod - Set coalesce interrupt period * qman_dqrr_set_iperiod - Set coalesce interrupt period
* @portal: portal to set the new value on * @portal: portal to set the new value on
* @ithresh: new period value * @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 */ #endif /* __FSL_QMAN_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment