lkml.org 
[lkml]   [2021]   [Dec]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 062/132] can: m_can: Disable and ignore ELO interrupt
    Date
    From: Brian Silverman <brian.silverman@bluerivertech.com>

    commit f58ac1adc76b5beda43c64ef359056077df4d93a upstream.

    With the design of this driver, this condition is often triggered.
    However, the counter that this interrupt indicates an overflow is never
    read either, so overflowing is harmless.

    On my system, when a CAN bus starts flapping up and down, this locks up
    the whole system with lots of interrupts and printks.

    Specifically, this interrupt indicates the CEL field of ECR has
    overflowed. All reads of ECR mask out CEL.

    Fixes: e0d1f4816f2a ("can: m_can: add Bosch M_CAN controller support")
    Link: https://lore.kernel.org/all/20211129222628.7490-1-brian.silverman@bluerivertech.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Brian Silverman <brian.silverman@bluerivertech.com>
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/net/can/m_can/m_can.c | 14 ++++++--------
    1 file changed, 6 insertions(+), 8 deletions(-)

    --- a/drivers/net/can/m_can/m_can.c
    +++ b/drivers/net/can/m_can/m_can.c
    @@ -207,15 +207,15 @@ enum m_can_reg {

    /* Interrupts for version 3.0.x */
    #define IR_ERR_LEC_30X (IR_STE | IR_FOE | IR_ACKE | IR_BE | IR_CRCE)
    -#define IR_ERR_BUS_30X (IR_ERR_LEC_30X | IR_WDI | IR_ELO | IR_BEU | \
    - IR_BEC | IR_TOO | IR_MRAF | IR_TSW | IR_TEFL | \
    - IR_RF1L | IR_RF0L)
    +#define IR_ERR_BUS_30X (IR_ERR_LEC_30X | IR_WDI | IR_BEU | IR_BEC | \
    + IR_TOO | IR_MRAF | IR_TSW | IR_TEFL | IR_RF1L | \
    + IR_RF0L)
    #define IR_ERR_ALL_30X (IR_ERR_STATE | IR_ERR_BUS_30X)
    /* Interrupts for version >= 3.1.x */
    #define IR_ERR_LEC_31X (IR_PED | IR_PEA)
    -#define IR_ERR_BUS_31X (IR_ERR_LEC_31X | IR_WDI | IR_ELO | IR_BEU | \
    - IR_BEC | IR_TOO | IR_MRAF | IR_TSW | IR_TEFL | \
    - IR_RF1L | IR_RF0L)
    +#define IR_ERR_BUS_31X (IR_ERR_LEC_31X | IR_WDI | IR_BEU | IR_BEC | \
    + IR_TOO | IR_MRAF | IR_TSW | IR_TEFL | IR_RF1L | \
    + IR_RF0L)
    #define IR_ERR_ALL_31X (IR_ERR_STATE | IR_ERR_BUS_31X)

    /* Interrupt Line Select (ILS) */
    @@ -752,8 +752,6 @@ static void m_can_handle_other_err(struc
    {
    if (irqstatus & IR_WDI)
    netdev_err(dev, "Message RAM Watchdog event due to missing READY\n");
    - if (irqstatus & IR_ELO)
    - netdev_err(dev, "Error Logging Overflow\n");
    if (irqstatus & IR_BEU)
    netdev_err(dev, "Bit Error Uncorrected\n");
    if (irqstatus & IR_BEC)

    \
     
     \ /
      Last update: 2021-12-13 11:10    [W:5.163 / U:0.228 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site