linux/drivers/net/can
Lukas Wunner d2901e247b can: hi311x: Work around TX complete interrupt erratum
commit 32bee8f48f upstream.

When sending packets as fast as possible using "cangen -g 0 -i -x", the
HI-3110 occasionally latches the interrupt pin high on completion of a
packet, but doesn't set the TXCPLT bit in the INTF register.  The INTF
register contains 0x00 as if no interrupt has occurred.  Even waiting
for a few milliseconds after the interrupt doesn't help.

Work around this apparent erratum by instead checking the TXMTY bit in
the STATF register ("TX FIFO empty").  We know that we've queued up a
packet for transmission if priv->tx_len is nonzero.  If the TX FIFO is
empty, transmission of that packet must have completed.

Note that this is congruent with our handling of received packets, which
likewise gleans from the STATF register whether a packet is waiting in
the RX FIFO, instead of looking at the INTF register.

Cc: Mathias Duckeck <m.duckeck@kunbus.de>
Cc: Akshay Bhat <akshay.bhat@timesys.com>
Cc: Casey Fitzpatrick <casey.fitzpatrick@timesys.com>
Cc: stable@vger.kernel.org # v4.12+
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Acked-by: Akshay Bhat <akshay.bhat@timesys.com>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2018-05-16 10:10:28 +02:00
..
c_can can: c_can: don't indicate triple sampling support for D_CAN 2017-11-10 09:15:28 +01:00
cc770 can: cc770: Fix use after free in cc770_tx_interrupt() 2018-03-28 18:24:45 +02:00
ifi_canfd can: ifi: Check core revision upon probe 2018-03-28 18:24:44 +02:00
m_can can: m_can: add deep Suspend/Resume support 2017-05-18 10:32:48 +02:00
mscan treewide: replace dev->trans_start update with helper 2016-05-04 14:16:49 -04:00
peak_canfd can: peak/pcie_fd: remove useless code when interface starts 2018-03-28 18:24:44 +02:00
rcar scripts/spelling.txt: add regsiter -> register spelling mistake 2017-05-08 17:15:13 -07:00
sja1000 can: peak/pci: fix potential bug when probe() fails 2017-12-14 09:52:45 +01:00
softing License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
spi can: hi311x: Work around TX complete interrupt erratum 2018-05-16 10:10:28 +02:00
usb can: kvaser_usb: Increase correct stats counter in kvaser_usb_rx_can_msg() 2018-05-16 10:10:28 +02:00
at91_can.c net: can: at91_can: constify attribute_group structures. 2017-07-18 12:04:56 -07:00
bfin_can.c can: remove obsolete assignment for CAN protocol error type 2015-11-23 09:37:38 +01:00
dev.c net: add netlink_ext_ack argument to rtnl_link_ops.validate 2017-06-26 23:13:22 -04:00
flexcan.c can: flex_can: Correct the checking for frame length in flexcan_start_xmit() 2018-03-03 10:24:35 +01:00
grcan.c docs: fix locations of several documents that got moved 2016-10-24 08:12:35 -02:00
janz-ican3.c net: can: janz-ican3: constify attribute_group structures. 2017-07-18 12:04:56 -07:00
Kconfig can: add Virtual CAN Tunnel driver (vxcan) 2017-04-25 09:04:30 +02:00
led.c can: add combined rx/tx LED trigger support 2015-03-22 23:50:11 +01:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
pch_can.c can: fix assignment of error location in CAN error messages 2015-11-23 09:37:34 +01:00
rx-offload.c can: rx-offload: Add support for timestamp based irq offloading 2017-02-06 15:13:24 +01:00
slcan.c networking: introduce and use skb_put_data() 2017-06-16 11:48:37 -04:00
sun4i_can.c can: sun4i: handle overrun in RX FIFO 2017-11-10 09:15:28 +01:00
ti_hecc.c can: ti_hecc: Fix napi poll return value for repoll 2017-12-14 09:52:46 +01:00
vcan.c can: enable CAN FD for virtual CAN devices by default 2017-06-09 14:39:02 +02:00
vxcan.c can: vxcan: improve handling of missing peer name attribute 2018-01-17 09:45:17 +01:00
xilinx_can.c drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00