can: rcar_canfd: Add missing ECC error checks for channels 2-7
authorGeert Uytterhoeven <geert+renesas@glider.be>
Fri, 28 Oct 2022 10:06:45 +0000 (12:06 +0200)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Mon, 7 Nov 2022 13:00:27 +0000 (14:00 +0100)
When introducing support for R-Car V3U, which has 8 instead of 2
channels, the ECC error bitmask was extended to take into account the
extra channels, but rcar_canfd_global_error() was not updated to act
upon the extra bits.

Replace the RCANFD_GERFL_EEF[01] macros by a new macro that takes the
channel number, fixing R-Car V3U while simplifying the code.

Fixes: 45721c406dcf50d4 ("can: rcar_canfd: Add support for r8a779a0 SoC")
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Biju Das <biju.das.jz@bp.renesas.com>
Link: https://lore.kernel.org/all/4edb2ea46cc64d0532a08a924179827481e14b4f.1666951503.git.geert+renesas@glider.be
Cc: stable@vger.kernel.org
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
drivers/net/can/rcar/rcar_canfd.c

index d530e98..b306cf5 100644 (file)
@@ -81,8 +81,7 @@ enum rcanfd_chip_id {
 
 /* RSCFDnCFDGERFL / RSCFDnGERFL */
 #define RCANFD_GERFL_EEF0_7            GENMASK(23, 16)
-#define RCANFD_GERFL_EEF1              BIT(17)
-#define RCANFD_GERFL_EEF0              BIT(16)
+#define RCANFD_GERFL_EEF(ch)           BIT(16 + (ch))
 #define RCANFD_GERFL_CMPOF             BIT(3)  /* CAN FD only */
 #define RCANFD_GERFL_THLES             BIT(2)
 #define RCANFD_GERFL_MES               BIT(1)
@@ -90,7 +89,7 @@ enum rcanfd_chip_id {
 
 #define RCANFD_GERFL_ERR(gpriv, x) \
        ((x) & (reg_v3u(gpriv, RCANFD_GERFL_EEF0_7, \
-                       RCANFD_GERFL_EEF0 | RCANFD_GERFL_EEF1) | \
+                       RCANFD_GERFL_EEF(0) | RCANFD_GERFL_EEF(1)) | \
                RCANFD_GERFL_MES | \
                ((gpriv)->fdmode ? RCANFD_GERFL_CMPOF : 0)))
 
@@ -936,12 +935,8 @@ static void rcar_canfd_global_error(struct net_device *ndev)
        u32 ridx = ch + RCANFD_RFFIFO_IDX;
 
        gerfl = rcar_canfd_read(priv->base, RCANFD_GERFL);
-       if ((gerfl & RCANFD_GERFL_EEF0) && (ch == 0)) {
-               netdev_dbg(ndev, "Ch0: ECC Error flag\n");
-               stats->tx_dropped++;
-       }
-       if ((gerfl & RCANFD_GERFL_EEF1) && (ch == 1)) {
-               netdev_dbg(ndev, "Ch1: ECC Error flag\n");
+       if (gerfl & RCANFD_GERFL_EEF(ch)) {
+               netdev_dbg(ndev, "Ch%u: ECC Error flag\n", ch);
                stats->tx_dropped++;
        }
        if (gerfl & RCANFD_GERFL_MES) {