• Marc Kleine-Budde's avatar
    can: flexcan: flexcan_chip_start: fix regression, mark one MB for TX and abort pending TX · d5a7b406
    Marc Kleine-Budde authored
    In patch
    
        0d1862ea can: flexcan: fix flexcan_chip_start() on imx6
    
    the loop in flexcan_chip_start() that iterates over all mailboxes after the
    soft reset of the CAN core was removed. This loop put all mailboxes (even the
    ones marked as reserved 1...7) into EMPTY/INACTIVE mode. On mailboxes 8...63,
    this aborts any pending TX messages.
    
    After a cold boot there is random garbage in the mailboxes, which leads to
    spontaneous transmit of CAN frames during first activation. Further if the
    interface was disabled with a pending message (usually due to an error
    condition on the CAN bus), this message is retransmitted after enabling the
    interface again.
    
    This patch fixes the regression by:
    1) Limiting the maximum number of used mailboxes to 8, 0...7 are used by the RX
    FIFO, 8 is used by TX.
    2) Marking the TX mailbox as EMPTY/INACTIVE, so that any pending TX of that
    mailbox is aborted.
    
    Cc: linux-stable <stable@vger.kernel.org>
    Cc: Lothar Waßmann <LW@KARO-electronics.de>
    Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
    d5a7b406
flexcan.c 29.7 KB