Michal Koutný 4be84f
From 6a8836e3c24a9f854d502b41584cf3f9765e950c Mon Sep 17 00:00:00 2001
Michal Koutný 4be84f
From: Marc Kleine-Budde <mkl@pengutronix.de>
Michal Koutný 4be84f
Date: Wed, 12 Oct 2022 09:38:42 +0200
Michal Koutný 4be84f
Subject: [PATCH] can: m_can: is_lec_err(): clean up LEC error handling
Michal Koutný 4be84f
Git-commit: 6a8836e3c24a9f854d502b41584cf3f9765e950c
Michal Koutný 4be84f
References: git-fixes
Michal Koutný 4be84f
Patch-mainline: v6.2-rc1
Michal Koutný 4be84f
Michal Koutný 4be84f
The PSR register contains among other the error for the CAN
Michal Koutný 4be84f
arbitration phase (LEC bits) and CAN data phase (DLEC bits).
Michal Koutný 4be84f
Michal Koutný 4be84f
Prepare is_lec_err() to be called with the (D)LEC value only instead
Michal Koutný 4be84f
of the whole PSR register. While there rename LEC_UNUSED to
Michal Koutný 4be84f
LEC_NO_CHANGE to match the latest M_CAN reference manual.
Michal Koutný 4be84f
Michal Koutný 4be84f
Link: https://lore.kernel.org/all/20221019211611.1605764-1-mkl@pengutronix.de
Michal Koutný 4be84f
Reviewed-by: Chandrasekar Ramakrishnan <rcsekar@samsung.com>
Michal Koutný 4be84f
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Michal Koutný 4be84f
Signed-off-by: Oliver Neukum <oneukum@suse.com>
Michal Koutný 4be84f
---
Michal Koutný 4be84f
 drivers/net/can/m_can/m_can.c | 15 ++++++++-------
Michal Koutný 4be84f
 drivers/net/can/m_can/m_can.h |  2 +-
Michal Koutný 4be84f
 2 files changed, 9 insertions(+), 8 deletions(-)
Michal Koutný 4be84f
Michal Koutný 4be84f
diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c
Michal Koutný 4be84f
index dcb582563d5e..ebdd3c164d7b 100644
Michal Koutný 4be84f
--- a/drivers/net/can/m_can/m_can.c
Michal Koutný 4be84f
+++ b/drivers/net/can/m_can/m_can.c
Michal Koutný 4be84f
@@ -816,11 +816,9 @@ static void m_can_handle_other_err(struct net_device *dev, u32 irqstatus)
Michal Koutný 4be84f
 		netdev_err(dev, "Message RAM access failure occurred\n");
Michal Koutný 4be84f
 }
Michal Koutný 4be84f
 
Michal Koutný 4be84f
-static inline bool is_lec_err(u32 psr)
Michal Koutný 4be84f
+static inline bool is_lec_err(u8 lec)
Michal Koutný 4be84f
 {
Michal Koutný 4be84f
-	psr &= LEC_UNUSED;
Michal Koutný 4be84f
-
Michal Koutný 4be84f
-	return psr && (psr != LEC_UNUSED);
Michal Koutný 4be84f
+	return lec != LEC_NO_ERROR && lec != LEC_NO_CHANGE;
Michal Koutný 4be84f
 }
Michal Koutný 4be84f
 
Michal Koutný 4be84f
 static inline bool m_can_is_protocol_err(u32 irqstatus)
Michal Koutný 4be84f
@@ -875,9 +873,12 @@ static int m_can_handle_bus_errors(struct net_device *dev, u32 irqstatus,
Michal Koutný 4be84f
 		work_done += m_can_handle_lost_msg(dev);
Michal Koutný 4be84f
 
Michal Koutný 4be84f
 	/* handle lec errors on the bus */
Michal Koutný 4be84f
-	if ((cdev->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING) &&
Michal Koutný 4be84f
-	    is_lec_err(psr))
Michal Koutný 4be84f
-		work_done += m_can_handle_lec_err(dev, psr & LEC_UNUSED);
Michal Koutný 4be84f
+	if (cdev->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING) {
Michal Koutný 4be84f
+		u8 lec = FIELD_GET(PSR_LEC_MASK, psr);
Michal Koutný 4be84f
+
Michal Koutný 4be84f
+		if (is_lec_err(lec))
Michal Koutný 4be84f
+			work_done += m_can_handle_lec_err(dev, lec);
Michal Koutný 4be84f
+	}
Michal Koutný 4be84f
 
Michal Koutný 4be84f
 	/* handle protocol errors in arbitration phase */
Michal Koutný 4be84f
 	if ((cdev->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING) &&
Michal Koutný 4be84f
diff --git a/drivers/net/can/m_can/m_can.h b/drivers/net/can/m_can/m_can.h
Michal Koutný 4be84f
index 4c0267f9f297..52563c048732 100644
Michal Koutný 4be84f
--- a/drivers/net/can/m_can/m_can.h
Michal Koutný 4be84f
+++ b/drivers/net/can/m_can/m_can.h
Michal Koutný 4be84f
@@ -38,7 +38,7 @@ enum m_can_lec_type {
Michal Koutný 4be84f
 	LEC_BIT1_ERROR,
Michal Koutný 4be84f
 	LEC_BIT0_ERROR,
Michal Koutný 4be84f
 	LEC_CRC_ERROR,
Michal Koutný 4be84f
-	LEC_UNUSED,
Michal Koutný 4be84f
+	LEC_NO_CHANGE,
Michal Koutný 4be84f
 };
Michal Koutný 4be84f
 
Michal Koutný 4be84f
 enum m_can_mram_cfg {
Michal Koutný 4be84f
-- 
Michal Koutný 4be84f
2.35.3
Michal Koutný 4be84f