linux/drivers/firewire
Stefan Richter 7a48143678 firewire: ohci: fix crashes with TSB43AB23 on 64bit systems
Unsurprisingly, Texas Instruments TSB43AB23 exhibits the same behaviour
as TSB43AB22/A in dual buffer IR DMA mode:  If descriptors are located
at physical addresses above the 31 bit address range (2 GB), the
controller will overwrite random memory.  With luck, this merely
prevents video reception.  With only a little less luck, the machine
crashes.

We use the same workaround here as with TSB43AB22/A:  Switch off the
dual buffer capability flag and use packet-per-buffer IR DMA instead.
Another possible workaround would be to limit the coherent DMA mask to
31 bits.

In Linux 2.6.33, this change serves effectively only as documentation
since dual buffer mode is not used for any controller anymore.  But
somebody might want to re-enable it in the future to make use of
features of dual buffer DMA that are not available in packet-per-buffer
mode.

In Linux 2.6.32 and older, this update is vital for anyone with this
controller, more than 2 GB RAM, a 64 bit kernel, and FireWire video or
audio applications.

We have at least four reports:
http://bugzilla.kernel.org/show_bug.cgi?id=13808
http://marc.info/?l=linux1394-user&m=126154279004083
https://bugzilla.redhat.com/show_bug.cgi?id=552142
http://marc.info/?l=linux1394-user&m=126432246128386

Reported-by: Paul Johnson
Reported-by: Ronneil Camara
Reported-by: G Zornetzer
Reported-by: Mark Thompson
Cc: stable@kernel.org
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
2010-01-27 18:24:53 +01:00
..
Kconfig firewire, ieee1394: update Kconfig help 2009-12-29 19:58:17 +01:00
Makefile firewire: net: add Kconfig item, rename driver 2009-06-14 14:26:29 +02:00
core-card.c firewire: core: add_descriptor size check 2010-01-26 20:54:50 +01:00
core-cdev.c firewire: core: fix use-after-free regression in FCP handler 2010-01-26 20:54:50 +01:00
core-device.c driver model: constify attribute groups 2009-09-15 09:50:47 -07:00
core-iso.c firewire: core: fix crash in iso resource management 2009-09-05 15:59:34 +02:00
core-topology.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2009-12-09 19:43:33 -08:00
core-transaction.c firewire: fix use of multiple AV/C devices, allow multiple FCP listeners 2009-12-29 19:58:16 +01:00
core.h firewire: core: optimize Topology Map creation 2009-10-14 23:10:48 +02:00
net.c drivers: Kill now superfluous ->last_rx stores 2009-09-02 23:07:36 -07:00
ohci.c firewire: ohci: fix crashes with TSB43AB23 on 64bit systems 2010-01-27 18:24:53 +01:00
ohci.h firewire: reorganize header files 2009-06-05 16:26:18 +02:00
sbp2.c firewire: normalize style of queue_work wrappers 2009-10-14 23:10:48 +02:00