linux/drivers/net/can
Thomas Gleixner d61d09de02 can: c_can: Work around C_CAN RX wreckage
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: Alexander Stein <alexander.stein@systec-electronic.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
2014-04-24 22:09:00 +02:00
..
c_can can: c_can: Work around C_CAN RX wreckage 2014-04-24 22:09:00 +02:00
cc770 can: Unify MTU settings for CAN interfaces 2014-03-17 09:20:16 +01:00
mscan can: Unify MTU settings for CAN interfaces 2014-03-17 09:20:16 +01:00
sja1000 Kconfig: rename HAS_IOPORT to HAS_IOPORT_MAP 2014-04-07 16:36:11 -07:00
softing can: populate netdev::dev_id for udev discrimination 2014-03-17 09:20:16 +01:00
usb linux-can-fixes-for-3.15-20140401 2014-04-01 17:49:50 -04:00
at91_can.c can: Unify MTU settings for CAN interfaces 2014-03-17 09:20:16 +01:00
bfin_can.c can: Unify MTU settings for CAN interfaces 2014-03-17 09:20:16 +01:00
dev.c can: add bittiming check at interface open for CAN FD 2014-03-07 09:18:23 +01:00
flexcan.c can: Unify MTU settings for CAN interfaces 2014-03-17 09:20:16 +01:00
grcan.c can: Unify MTU settings for CAN interfaces 2014-03-17 09:20:16 +01:00
janz-ican3.c can: Unify MTU settings for CAN interfaces 2014-03-17 09:20:16 +01:00
Kconfig can: flexcan: fix flexcan driver build for big endian on ARM and little endian on PowerPc 2014-01-29 20:23:22 +01:00
led.c net: pass info struct via netdevice notifier 2013-05-28 13:11:01 -07:00
Makefile can: add tx/rx LED trigger support 2013-01-26 16:58:59 +01:00
mcp251x.c can: mcp251x: Fix regulators operation without CONFIG_REGULATOR 2014-03-17 09:20:17 +01:00
pch_can.c can: Unify MTU settings for CAN interfaces 2014-03-17 09:20:16 +01:00
slcan.c can: Unify MTU settings for CAN interfaces 2014-03-17 09:20:16 +01:00
ti_hecc.c can: Unify MTU settings for CAN interfaces 2014-03-17 09:20:16 +01:00
vcan.c can: add destructor for self generated skbs 2014-01-30 16:25:49 -08:00