On 14.10.2022 10:33:32, Vivek Yadav wrote: > When a frame in CAN FD format has reached the data phase, the next > CAN event (error or valid frame) will be shown in DLEC. > > Utilizes the dedicated flag (Data Phase Last Error Code: DLEC flag) to > determine the type of last error that occurred in the data phase > of a CAN FD frame and handle the bus errors. > > Signed-off-by: Vivek Yadav <vivek.2311@xxxxxxxxxxx> > --- > This patch is dependent on following patch from Marc: > [1]: https://lore.kernel.org/all/20221012074205.691384-1-mkl@xxxxxxxxxxxxxx/ > > drivers/net/can/m_can/m_can.c | 11 ++++++++++- > 1 file changed, 10 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c > index 18a138fdfa66..8cff1f274aab 100644 > --- a/drivers/net/can/m_can/m_can.c > +++ b/drivers/net/can/m_can/m_can.c > @@ -156,6 +156,7 @@ enum m_can_reg { > #define PSR_EW BIT(6) > #define PSR_EP BIT(5) > #define PSR_LEC_MASK GENMASK(2, 0) > +#define PSR_DLEC_MASK GENMASK(8, 10) > > /* Interrupt Register (IR) */ > #define IR_ALL_INT 0xffffffff > @@ -876,8 +877,16 @@ static int m_can_handle_bus_errors(struct net_device *dev, u32 irqstatus, > if (cdev->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING) { > u8 lec = FIELD_GET(PSR_LEC_MASK, psr); > > - if (is_lec_err(lec)) > + if (is_lec_err(lec)) { > work_done += m_can_handle_lec_err(dev, lec); > + } else { In case of high interrupt latency there might be lec and dlec errors pending. As this is error handling and not the hot path, please check for both, i.e.: if (is_lec_err(lec)) work_done += m_can_handle_lec_err(dev, lec); if (is_lec_err(dlec)) work_done += m_can_handle_lec_err(dev, dlec); > + u8 dlec = FIELD_GET(PSR_DLEC_MASK, psr); > + > + if (is_lec_err(dlec)) { > + netdev_dbg(dev, "Data phase error detected\n"); If you add a debug, please add one for the Arbitration phase, too. > + work_done += m_can_handle_lec_err(dev, dlec); > + } > + } > } > > /* handle protocol errors in arbitration phase */ regards, Marc -- Pengutronix e.K. | Marc Kleine-Budde | Embedded Linux | https://www.pengutronix.de | Vertretung West/Dortmund | Phone: +49-231-2826-924 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
Attachment:
signature.asc
Description: PGP signature