• Z
    can: flexcan: implement error passive state quirk · da49a807
    ZHU Yi (ST-FIR/ENG1-Zhu) 提交于
    Add FLEXCAN_QUIRK_BROKEN_PERR_STATE for better description of the
    missing error passive interrupt quirk.
    
    Error interrupt flooding may happen if the broken error state quirk fix
    is enabled. For example, in case there is singled out node on the bus
    and the node sends a frame, then error interrupt flooding happens and
    will not stop because the node cannot go to bus off. The flooding will
    stop after another node connected to the bus again.
    
    If high bitrate configured on the low end system, then the flooding
    may causes performance issue, hence, this patch mitigates this by:
    1. disable error interrupt upon error passive state transition
    2. re-enable error interrupt upon error warning state transition
    3. disable/enable error interrupt upon error active state transition
       depends on FLEXCAN_QUIRK_BROKEN_WERR_STATE
    
    In this way, the driver is still able to report correct state
    transitions without additional latency. When there are bus problems,
    flooding of error interrupts is limited to the number of frames required
    to change state from error warning to error passive if the core has
    [TR]WRN_INT connected (FLEXCAN_QUIRK_BROKEN_WERR_STATE is not enabled),
    otherwise, the flooding is limited to the number of frames required to
    change state from error active to error passive.
    Signed-off-by: NZhu Yi <yi.zhu5@cn.bosch.com>
    Signed-off-by: NMark Jonas <mark.jonas@de.bosch.com>
    Acked-by: NWolfgang Grandegger <wg@grandegger.com>
    Cc: linux-stable <stable@vger.kernel.org> # >= v4.11
    Signed-off-by: NMarc Kleine-Budde <mkl@pengutronix.de>
    da49a807
flexcan.c 39.8 KB