• Marc Kleine-Budde's avatar
    can: rockchip_canfd: rkcanfd_handle_rx_int_one(): implement workaround for... · 65713542
    Marc Kleine-Budde authored
    can: rockchip_canfd: rkcanfd_handle_rx_int_one(): implement workaround for erratum 5: check for empty FIFO
    
    The rk3568 CAN-FD errata sheet as of Tue 07 Nov 2023 11:25:31 +08:00
    says:
    
    | Erratum 5: Counters related to the TXFIFO and RXFIFO exhibit
    | abnormal counting behavior.
    |
    | Due to a bug in the cross-asynchronous logic of the enable signals
    | for rx_fifo_cnt and txe_fifo_frame_cnt counters, the counts of these
    | two counters become inaccurate. This issue has resulted in the
    | inability to use the TXFIFO and RXFIFO functions.
    
    The errata sheet mentioned above states that only the rk3568v2 is
    affected by this erratum, but tests with the rk3568v2 and rk3568v3
    show that the RX_FIFO_CNT is sometimes too high. This leads to CAN
    frames being read from the FIFO, which is then already empty.
    
    Further tests on the rk3568v2 and rk3568v3 show that in this
    situation (i.e. empty FIFO) all elements of the FIFO
    header (frameinfo, id, ts) contain the same data.
    
    On the rk3568v2 and rk3568v3, this problem only occurs extremely
    rarely with the standard clock of 300 MHz, but almost immediately at
    80 MHz.
    
    To workaround this problem, check for empty FIFO with
    rkcanfd_fifo_header_empty() in rkcanfd_handle_rx_int_one() and exit
    early.
    Tested-by: default avatarAlibek Omarov <a1ba.omarov@gmail.com>
    Acked-by: default avatarHeiko Stuebner <heiko@sntech.de>
    Link: https://patch.msgid.link/20240904-rockchip-canfd-v5-9-8ae22bcb27cc@pengutronix.deSigned-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
    65713542
rockchip_canfd-rx.c 3.11 KB