android_kernel_samsung_msm8976/drivers/dma
Ilya Yanok 6504cf3412 powerpc/512x: scatter/gather dma fix
While testing mpc512x-dma driver with dmatest module I've found that
I can hang the mpc512x-dma issuing request from multiple threads to
the single channel.

    insmod dmatest.ko max_channels=1 threads_per_chan=16

After investigating this case I've managed to find that this happens
if and only if we have more than one queued requests.
In this case the driver tries to make use of hardware scatter/gather
functionality. I've found two problems with scatter/gather:

 1. When TCD is copied form RAM to the TCD register space with memcpy_io()
e_sg bit eventually gets cleared. This results in only first TCD being
executed. I've added setting of e_sg bit explicitly in the TCD registers.
BTW, what is the correct way to do this? (How can I use setbits with bitfield
structure?) After that hardware loads consecutive TCDs and we hit the
second issue.

 2. Existing code clears int_maj bit in the last TCD so we never get
an interrupt on transfer completion.

With these fixes my tests with many threads of single channel succeed but
tests that use many channels simultaneously still don't work reliable.

Signed-off-by: Ilya Yanok <yanok@emcraft.com>
Acked-by: Wolfgang Denk <wd@denx.de>
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
2010-12-29 22:27:31 -07:00
..
ioat drivers/dma/ioat: Use the ccflag-y instead of EXTRA_CFLAGS 2010-12-04 15:03:06 -08:00
ipu DMAENGINE: extend the control command to include an arg 2010-05-17 16:30:42 -07:00
ppc4xx drivers/dma/ppc4xx: Use printf extension %pR for struct resource 2010-12-04 15:03:40 -08:00
amba-pl08x.c dmaengine: driver for the ARM PL080/PL081 PrimeCells v5 2010-09-29 16:13:51 -07:00
at_hdmac.c dmaengine: at_hdmac: fix buffer transfer size specification 2010-12-14 00:39:29 -08:00
at_hdmac_regs.h at_hdmac: implement a private tx_list 2009-09-08 17:53:03 -07:00
coh901318.c Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx 2010-10-27 19:04:36 -07:00
coh901318_lli.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
coh901318_lli.h tree-wide: Assorted spelling fixes 2010-02-09 11:13:56 +01:00
dmaengine.c async_tx: make async_tx channel switching opt-in 2010-10-07 17:08:32 -07:00
dmatest.c dma: dmatest: fix potential sign bug 2010-08-04 14:27:47 -07:00
dw_dmac.c DMAENGINE: extend the control command to include an arg 2010-05-17 16:30:42 -07:00
dw_dmac_regs.h dw_dmac: implement a private tx_list 2009-09-08 17:53:02 -07:00
fsldma.c fsldma: fix issue of slow dma 2010-12-13 14:05:27 -08:00
fsldma.h fsldma: fix issue of slow dma 2010-12-13 14:05:27 -08:00
imx-dma.c dma: imx-dma: fix imxdma_probe error path 2010-12-03 01:39:03 -08:00
imx-sdma.c dmaengine i.MX SDMA: initialize on module_init 2010-12-07 15:38:07 -08:00
intel_mid_dma.c intel_mid_dma: fix section mismatch warnings 2010-12-04 15:03:56 -08:00
intel_mid_dma_regs.h intel_mid_dma: change the slave interface 2010-10-07 15:03:44 -07:00
iop-adma.c Merge branch 'ioat' into dmaengine 2010-05-17 16:30:58 -07:00
iovlock.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 drivers/dma/Kconfig: add part number for Topcliff. 2010-10-29 14:14:02 -07:00
Makefile drivers/dma/: Use the ccflag-y instead of EXTRA_CFLAGS 2010-12-03 01:51:43 -08:00
mpc512x_dma.c powerpc/512x: scatter/gather dma fix 2010-12-29 22:27:31 -07:00
mv_xor.c dmaengine: fix interrupt clearing for mv_xor 2010-09-23 14:14:22 -07:00
mv_xor.h mv_xor: implement a private tx_list 2009-09-08 17:53:03 -07:00
pch_dma.c dma : EG20T PCH: Fix miss-setting DMA descriptor 2010-12-07 15:07:08 -08:00
pl330.c DMA: PL330: Add dma api driver 2010-05-23 20:28:19 -07:00
shdma.c dma: shdma: add a MODULE_ALIAS() to allow module autoloading 2010-11-25 16:29:41 +09:00
shdma.h dmaengine: shdma: Introduce include/linux/sh_dma.h 2010-03-23 17:20:06 +09:00
ste_dma40.c Merge branch 'dma40' into dmaengine 2010-10-19 15:34:26 -07:00
ste_dma40_ll.c ste_dma40: remove enum for endianess 2010-10-19 15:17:07 -07:00
ste_dma40_ll.h ste_dma40: move mode_opt to separate config 2010-10-19 15:17:07 -07:00
timb_dma.c dma/timberdale: simplify conditional 2010-10-19 15:20:11 -07:00
txx9dmac.c Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx 2010-05-21 17:05:46 -07:00
txx9dmac.h txx9dmac: implement a private tx_list 2009-09-08 17:53:03 -07:00