linux/drivers/net/can
Oliver Hartkopp 57c8a45664 can: Fix SJA1000 command register writes on SMP systems
The SJA1000 command register is concurrently written in the rx-path to free
the receive buffer _and_ in the tx-path to start the transmission.

The SJA1000 data sheet, 6.4.4 COMMAND REGISTER (CMR) states:
"Between two commands at least one internal clock cycle is needed in
order to proceed. The internal clock is half of the external oscillator
frequency."

On SMP systems the current implementation leads to a write stall in the
tx-path, which can be solved by adding some general locking and some time
to settle the write_reg() operation for the command register.

Thanks to Klaus Hitschler for the original fix and detailed problem
description.

This patch applies on net-2.6 and (with some offsets) on net-next-2.6 .

Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>
Acked-by: Wolfgang Grandegger <wg@grandegger.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2010-05-18 14:03:10 -07:00
..
mscan Fix some #includes in CAN drivers (rebased for net-next-2.6) 2010-04-13 03:32:42 -07:00
sja1000 can: Fix SJA1000 command register writes on SMP systems 2010-05-18 14:03:10 -07:00
usb drivers/net: Remove unnecessary returns from void function()s 2010-05-14 00:19:28 -07:00
at91_can.c net: trans_start cleanups 2010-05-10 05:01:31 -07:00
bfin_can.c net: trans_start cleanups 2010-05-10 05:01:31 -07:00
dev.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
Kconfig can: CAN_MCP251X should depend on HAS_DMA 2009-12-13 19:56:36 -08:00
Makefile can: add the driver for Analog Devices Blackfin on-chip CAN controllers 2009-12-11 15:07:58 -08:00
mcp251x.c net: trans_start cleanups 2010-05-10 05:01:31 -07:00
ti_hecc.c Fix some #includes in CAN drivers (rebased for net-next-2.6) 2010-04-13 03:32:42 -07:00
vcan.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00