linux/arch/arm/plat-omap
Jarkko Nikula 3e57f1626b omap: dma: Fix buffering disable bit setting for omap24xx
An errata workaround for omap24xx is not setting the buffering disable bit
25 what is the purpose but channel enable bit 7 instead.

Background for this fix is the DMA stalling issue with ASoC omap-mcbsp
driver. Peter Ujfalusi <peter.ujfalusi@nokia.com> has found an issue in
recording that the DMA stall could happen if there were a buffer overrun
detected by ALSA and the DMA was stopped and restarted due that. This
problem is known to occur on both OMAP2420 and OMAP3. It can recover on
OMAP3 after dma free, dma request and reconfiguration cycle. However, on
OMAP2420 it seems that only way to recover is a reset.

Problem was not visible before the commit c12abc0. That commit changed that
the McBSP transmitter/receiver is released from reset only when needed. That
is, only enabled McBSP transmitter without transmission was able to prevent
this DMA stall problem in receiving side and underlying problem did not show
up until now. McBSP transmitter itself seems to no be reason since DMA
stall does not recover by enabling the transmission after stall.

Debugging showed that there were a DMA write active during DMA stop time and
it never completed even when restarting the DMA. Experimenting showed that
the DMA buffering disable bit could be used to avoid stalling when using
source synchronized transfers. However that could have performance hit and
OMAP3 TRM states that buffering disable is not allowed for destination
synchronized transfers so subsequent patch will implement a method to
complete DMA writes when stopping.

This patch is based on assumtion that complete lock-up on OMAP2420 is
different but related problem. I don't have access to OMAP2420 errata but
I believe this old workaround here is put for a reason but unfortunately
a wrong bit was typed and problem showed up only now.

Signed-off-by: Jarkko Nikula <jhnikula@gmail.com>
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@nokia.com>
Acked-by: Manjunath Kondaiah G <manjugk@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
2010-10-11 14:18:45 -07:00
..
include/plat omap: dma: Fix buffering disable bit setting for omap24xx 2010-10-11 14:18:45 -07:00
Kconfig update OMAP Kconfig help texts for all supported SoC models 2010-09-27 12:27:08 -07:00
Makefile OMAP: split plat-omap/common.c 2010-10-08 11:40:19 -06:00
clock.c OMAP2+: clock: reduce the amount of standard debugging while disabling unused clocks 2010-10-08 11:40:20 -06:00
common.c OMAP: split plat-omap/common.c 2010-10-08 11:40:19 -06:00
counter_32k.c OMAP: split plat-omap/common.c 2010-10-08 11:40:19 -06:00
cpu-omap.c OMAP: plat-omap: Fix static function warnings 2010-10-08 10:12:38 -07:00
debug-devices.c omap: use smc91x_platdata to setup smc91x 2009-12-11 16:16:33 -08:00
debug-leds.c Replacing LEDS_OMAP_DEBUG with OMAP_DEBUG_LEDS 2010-07-05 17:03:58 +03:00
devices.c OMAP: split plat-omap/common.c 2010-10-08 11:40:19 -06:00
dma.c omap: dma: Fix buffering disable bit setting for omap24xx 2010-10-11 14:18:45 -07:00
dmtimer.c omap4: Fix bootup crash observed with higher CPU clocks 2010-09-24 11:30:19 +05:30
fb.c OMAP: plat-omap: Fix static function warnings 2010-10-08 10:12:38 -07:00
fb.h OMAP: plat-omap: Fix static function warnings 2010-10-08 10:12:38 -07:00
gpio.c omap2: fix assorted compiler warnings 2010-09-23 18:27:18 -07:00
i2c.c OMAP: PM constraints: add return values; add requesting device param to omap_pm_set_max_dev_wakeup_lat() 2010-07-26 16:34:34 -06:00
io.c Merge with mainline to remove plat-omap/Kconfig conflict 2010-03-01 14:19:05 -08:00
iommu-debug.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
iommu.c omap iommu: move iommu_disable at fault to the above layer 2010-06-29 07:55:07 +03:00
iopgtable.h omap iommu: Rename iopte_[p,v]addr -> iopte_page_[p,v]addr 2010-06-29 07:55:05 +03:00
iovmm.c omap iommu: Fix Memory leak 2010-06-09 13:21:27 +03:00
mailbox.c omap: mailbox: reorganize headers 2010-08-04 15:50:20 +03:00
mcbsp.c OMAP: control: move plat-omap/control.h to mach-omap2/control.h 2010-10-08 11:40:20 -06:00
mux.c omap: mux: Remove old mux code 2010-07-05 16:31:40 +03:00
ocpi.c [ARM] Convert asm/io.h to linux/io.h 2008-09-06 12:10:45 +01:00
omap-pm-noop.c OMAP: PM constraints: add omap_pm_set_min_clk_rate() 2010-07-26 16:34:34 -06:00
omap_device.c Merge branch 'misc_2.6.37' of git://git.pwsan.com/linux-2.6 into omap-for-linus 2010-09-27 10:18:00 -07:00
sram.c OMAP: split plat-omap/common.c 2010-10-08 11:40:19 -06:00
sram.h OMAP: plat-omap: Fix static function warnings 2010-10-08 10:12:38 -07:00
usb.c omap: Move omap1 USB platform init code into mach-omap1/usb.c 2010-07-05 16:31:30 +03:00