Skip to content

Commit

Permalink
soc/qman: add return value to interrupt coalesce changing APIs
Browse files Browse the repository at this point in the history
Check that the values received by the portal interrupt coalesce
change APIs are in range.

Signed-off-by: Madalin Bucur <madalin.bucur@nxp.com>
Signed-off-by: Roy Pledge <roy.pledge@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Madalin Bucur authored and David S. Miller committed Nov 23, 2018
1 parent 830b61b commit 5c664ac
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 9 deletions.
33 changes: 26 additions & 7 deletions drivers/soc/fsl/qbman/qman.c
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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 --- */
Expand Down Expand Up @@ -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);

Expand All @@ -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)
qm_out(&portal->p, QM_REG_ITPR, iperiod);
if (!portal || iperiod > QMAN_ITP_MAX)
return -EINVAL;

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

return 0;
}
EXPORT_SYMBOL(qman_portal_set_iperiod);

Expand Down
8 changes: 6 additions & 2 deletions include/soc/fsl/qman.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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 */

0 comments on commit 5c664ac

Please sign in to comment.