• T
    can: c_can: Work around C_CAN RX wreckage · d61d09de
    Thomas Gleixner 提交于
    Alexander reported that the new optimized handling of the RX fifo
    causes random packet loss on Intel PCH C_CAN hardware.
    
    After a few fruitless debugging sessions I got hold of a PCH (eg20t)
    afflicted system. That machine does not have the CAN interface wired
    up, but it was possible to reproduce the issue with the HW loopback
    mode.
    
    As Alexander observed correctly, clearing the NewDat flag along with
    reading out the message buffer causes that issue on C_CAN, while D_CAN
    handles that correctly.
    
    Instead of restoring the original message buffer handling horror the
    following workaround solves the issue:
    
        transfer buffer to IF without clearing the NewDat
        handle the message
        clear NewDat bit
    
    That's similar to the original code but conditional for C_CAN.
    
    I really wonder why all user manuals (C_CAN, Intel PCH and some more)
    recommend to clear the NewDat bit right away. The knows it all Oracle
    operated by Gurgle does not unearth any useful information either. I
    simply cannot believe that we are the first to uncover that HW issue.
    Reported-and-tested-by: NAlexander Stein <alexander.stein@systec-electronic.com>
    Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
    Signed-off-by: NMarc Kleine-Budde <mkl@pengutronix.de>
    d61d09de
c_can.c 35.4 KB