linux_dsm_epyc7002/drivers/net/can
Jeroen Hofstee 4c7f715485 can: ti_hecc: use timestamp based rx-offloading
As already mentioned in [1] and included in [2], there is an off by one
issue since the high bank is already enabled when the _next_ mailbox to
be read has index 12, so the mailbox being read was 13. The message can
therefore go into mailbox 31 and the driver will be repolled until the
mailbox 12 eventually receives a msg. Or the message might end up in the
12th mailbox, but then it would become disabled after reading it and only
be enabled again in the next "round" after mailbox 13 was read, which can
cause out of order messages, since the lower priority mailboxes can
accept messages in the meantime.

As mentioned in [3] there is a hardware race condition when changing the
CANME register while messages are being received. Even when including a
busy poll on reception, like in [2] there are still overflows and out of
order messages at times, but less then without the busy loop polling.
Unlike what the patch suggests, the polling time is not in the microsecond
range, but takes as long as a current CAN bus reception needs to finish,
so typically more in the fraction of millisecond range. Since the timeout
is in jiffies it won't timeout.

Even with these additional fixes the driver is still not able to provide a
proper FIFO which doesn't drop packages. So change the driver to use
rx-offload and base order on timestamp instead of message box numbers. As
a side affect, this also fixes [4] and [5].

Before this change messages with a single byte counter were dropped /
received out of order at a bitrate of 250kbit/s on an am3517. With this
patch that no longer occurs up to and including 1Mbit/s.

[1] https://linux-can.vger.kernel.narkive.com/zgO9inVi/patch-can-ti-hecc-fix-rx-wrong-sequence-issue#post6
[2] http://arago-project.org/git/projects/?p=linux-omap3.git;a=commit;h=02346892777f07245de4d5af692513ebd852dcb2
[3] https://linux-can.vger.kernel.narkive.com/zgO9inVi/patch-can-ti-hecc-fix-rx-wrong-sequence-issue#post5
[4] https://patchwork.ozlabs.org/patch/895956/
[5] https://www.spinics.net/lists/netdev/msg494971.html

Cc: Anant Gole <anantgole@ti.com>
Cc: AnilKumar Ch <anilkumar@ti.com>
Signed-off-by: Jeroen Hofstee <jhofstee@victronenergy.com>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
2019-07-24 10:31:55 +02:00
..
c_can treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
cc770 treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 495 2019-06-19 17:09:52 +02:00
ifi_canfd treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
m_can can: tcan4x5x: Add tcan4x5x driver to the kernel 2019-07-24 10:31:54 +02:00
mscan treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 344 2019-06-05 17:37:07 +02:00
peak_canfd can: mark expected switch fall-throughs 2019-07-24 10:31:54 +02:00
rcar can: rcar: add SPDX identifiers to Kconfig and Makefile 2018-11-28 16:19:53 +01:00
sja1000 can: sja1000: f81601: add Fintek F81601 support 2019-07-24 10:30:37 +02:00
softing net/can: using dev_get_drvdata directly 2019-07-05 15:24:41 -07:00
spi can: mark expected switch fall-throughs 2019-07-24 10:31:54 +02:00
usb can: mark expected switch fall-throughs 2019-07-24 10:31:54 +02:00
at91_can.c can: mark expected switch fall-throughs 2019-07-24 10:31:54 +02:00
dev.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 344 2019-06-05 17:37:07 +02:00
flexcan.c can: flexcan: add support for DT property 'wakeup-source' 2019-07-24 10:31:55 +02:00
grcan.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
janz-ican3.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
Kconfig can: kvaser_pciefd: Add driver for Kvaser PCIEcan devices 2019-07-24 10:31:53 +02:00
kvaser_pciefd.c can: kvaser_pciefd: Add driver for Kvaser PCIEcan devices 2019-07-24 10:31:53 +02:00
led.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
Makefile can: kvaser_pciefd: Add driver for Kvaser PCIEcan devices 2019-07-24 10:31:53 +02:00
pch_can.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 340 2019-06-05 17:37:07 +02:00
rx-offload.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 344 2019-06-05 17:37:07 +02:00
slcan.c treewide: kzalloc() -> kcalloc() 2018-06-12 16:19:22 -07:00
sun4i_can.c can: sun4i: fix sun4ican_start_xmit()'s return type 2018-07-27 10:40:16 +02:00
ti_hecc.c can: ti_hecc: use timestamp based rx-offloading 2019-07-24 10:31:55 +02:00
vcan.c drivers/net: Use octal not symbolic permissions 2018-03-26 12:07:49 -04:00
vxcan.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 344 2019-06-05 17:37:07 +02:00
xilinx_can.c can: xilinx_can: clean up indentation issue 2019-07-24 10:31:55 +02:00