> -----Original Message----- > From: Marc Kleine-Budde [mailto:mkl@xxxxxxxxxxxxxx] > Sent: 20 October 2022 02:46 > To: linux-can@xxxxxxxxxxxxxxx > Cc: Vivek Yadav <vivek.2311@xxxxxxxxxxx>; Chandrasekar Ramakrishnan > <rcsekar@xxxxxxxxxxx>; Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx> > Subject: [PATCH v2] can: m_can: is_lec_err(): clean up LEC error handling > > The PSR register contains among other the error for the CAN arbitration > phase (LEC bits) and CAN data phase (DLEC bits). > > Prepare is_lec_err() to be called with the (D)LEC value only instead of the > whole PSR register. While there rename LEC_UNUSED to LEC_NO_CHANGE > to match the latest M_CAN reference manual. > Looks good to me, Reviewed-by: Chandrasekar Ramakrishnan <rcsekar@xxxxxxxxxxx> > Signed-off-by: Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx> > --- > changes since RFC: https://lore.kernel.org/all/20221012074205.691384-1- > mkl@xxxxxxxxxxxxxx > - add proper patch description > > drivers/net/can/m_can/m_can.c | 15 ++++++++------- > drivers/net/can/m_can/m_can.h | 2 +- > 2 files changed, 9 insertions(+), 8 deletions(-) > > diff --git a/drivers/net/can/m_can/m_can.c > b/drivers/net/can/m_can/m_can.c index dcb582563d5e..ebdd3c164d7b > 100644 > --- a/drivers/net/can/m_can/m_can.c > +++ b/drivers/net/can/m_can/m_can.c > @@ -816,11 +816,9 @@ static void m_can_handle_other_err(struct > net_device *dev, u32 irqstatus) > netdev_err(dev, "Message RAM access failure occurred\n"); > } > > -static inline bool is_lec_err(u32 psr) > +static inline bool is_lec_err(u8 lec) > { > - psr &= LEC_UNUSED; > - > - return psr && (psr != LEC_UNUSED); > + return lec != LEC_NO_ERROR && lec != LEC_NO_CHANGE; > } > > static inline bool m_can_is_protocol_err(u32 irqstatus) @@ -875,9 +873,12 > @@ static int m_can_handle_bus_errors(struct net_device *dev, u32 > irqstatus, > work_done += m_can_handle_lost_msg(dev); > > /* handle lec errors on the bus */ > - if ((cdev->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING) && > - is_lec_err(psr)) > - work_done += m_can_handle_lec_err(dev, psr & > LEC_UNUSED); > + if (cdev->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING) { > + u8 lec = FIELD_GET(PSR_LEC_MASK, psr); > + > + if (is_lec_err(lec)) > + work_done += m_can_handle_lec_err(dev, lec); > + } > > /* handle protocol errors in arbitration phase */ > if ((cdev->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING) && > diff --git a/drivers/net/can/m_can/m_can.h > b/drivers/net/can/m_can/m_can.h index 4c0267f9f297..52563c048732 > 100644 > --- a/drivers/net/can/m_can/m_can.h > +++ b/drivers/net/can/m_can/m_can.h > @@ -38,7 +38,7 @@ enum m_can_lec_type { > LEC_BIT1_ERROR, > LEC_BIT0_ERROR, > LEC_CRC_ERROR, > - LEC_UNUSED, > + LEC_NO_CHANGE, > }; > > enum m_can_mram_cfg { > -- > 2.35.1 >