linux/arch/arm/mach-davinci
Anuj Aggarwal a7e05065f5 davinci: edma: clear interrupt status for interrupt enabled channels only
Currently, the ISR in the EDMA driver clears the pending interrupt for all
channels without regard to whether that channel has a registered callback
or not.

This causes problems for devices like DM355/DM365 where the multimedia
accelerator uses EDMA by polling on the interrupt pending bits of some of the
EDMA channels. Since these channels are actually allocated through the Linux
EDMA driver (by an out-of-kernel module), the same shadow region is used by
Linux and accelerator. There a race between the Linux ISR and the polling code
running on the accelerator on the IPR (interrupt pending register).

This patch fixes the issue by making the ISR clear the interrupts only for
those channels which have interrupt enabled. The channels which are allocated
for the purpose of being polled on by the accelerator will not have a callback
function provided and so will not have IER (interrupt enable register) bits set.

Tested on DM365 and OMAP-L137/L138 with audio and MMC/SD (as EDMA users).

Signed-off-by: Anuj Aggarwal <anuj.aggarwal@ti.com>
Signed-off-by: Sekhar Nori <nsekhar@ti.com>
CC: Archith John Bency <archith@ti.com>
Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
2010-05-06 15:02:02 -07:00
..
include/mach davinci: misc cleanups from sparse 2010-05-06 15:02:01 -07:00
board-da830-evm.c davinci: da830/omap-l137 evm: use 8-wire MMC/SD card support 2010-05-06 15:02:02 -07:00
board-da850-evm.c davinci: da850/omap-l138 EVM: register for suspend support 2010-02-04 13:29:57 -08:00
board-dm355-evm.c Add SDA and SCL pin numbers to i2c platform data 2010-02-04 13:30:06 -08:00
board-dm355-leopard.c DaVinci: rename setup_usb() to davinci_setup_usb() 2009-11-25 10:21:33 -08:00
board-dm365-evm.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
board-dm644x-evm.c davinci: misc cleanups from sparse 2010-05-06 15:02:01 -07:00
board-dm646x-evm.c davinci: dm646x: CDCE clocks: davinci_clk converted to clk_lookup 2010-03-01 10:19:58 -08:00
board-neuros-osd2.c davinci: misc cleanups from sparse 2010-05-06 15:02:01 -07:00
board-sffsdr.c davinci: misc cleanups from sparse 2010-05-06 15:02:01 -07:00
cdce949.c davinci: misc cleanups from sparse 2010-05-06 15:02:01 -07:00
clock.c davinci: misc cleanups from sparse 2010-05-06 15:02:01 -07:00
clock.h davinci: clkdev cleanup: remove clk_lookup wrapper, use clkdev_add_table() 2010-02-04 13:30:09 -08:00
common.c TI Davinci EMAC : Re-use driver for other platforms. 2010-02-04 13:29:50 -08:00
cp_intc.c davinci: cp_intc: provide set_wake function 2010-01-06 08:57:44 -08:00
cpufreq.c davinci: DA850/OMAP-L138: avoid using separate initcall for initializing regulator 2009-11-25 10:21:37 -08:00
cpuidle.c davinci: cpuidle: move mapping of DDR2 controller registers out of driver 2010-02-04 13:29:38 -08:00
da830.c davinci: clkdev cleanup: remove clk_lookup wrapper, use clkdev_add_table() 2010-02-04 13:30:09 -08:00
da850.c davinci: clkdev cleanup: remove clk_lookup wrapper, use clkdev_add_table() 2010-02-04 13:30:09 -08:00
devices-da8xx.c davinci: da8xx/omap-l1xx: Add EDMA platform data for da850/omap-l138 2010-02-04 13:30:04 -08:00
devices.c davinci: misc cleanups from sparse 2010-05-06 15:02:01 -07:00
dm355.c davinci: misc cleanups from sparse 2010-05-06 15:02:01 -07:00
dm365.c davinci: misc cleanups from sparse 2010-05-06 15:02:01 -07:00
dm644x.c davinci: misc cleanups from sparse 2010-05-06 15:02:01 -07:00
dm646x.c davinci: misc cleanups from sparse 2010-05-06 15:02:01 -07:00
dma.c davinci: edma: clear interrupt status for interrupt enabled channels only 2010-05-06 15:02:02 -07:00
gpio.c davinci: sparse: gpio: void casting 2010-05-06 15:02:01 -07:00
io.c ARM: Add caller information to ioremap 2010-02-15 21:39:11 +00:00
irq.c davinci: Move interrupt ctlr info to SoC infrastructure 2009-05-26 08:18:09 -07:00
Kconfig davinci: add support for DM6467T EVM 2010-02-04 13:29:44 -08:00
Makefile davinci: add CDCE949 support on DM6467 EVM 2010-02-04 13:29:59 -08:00
Makefile.boot davinci: da8xx: Add base DA830/OMAP-L137 SoC support 2009-08-26 10:56:59 +03:00
mux.c davinci: misc cleanups from sparse 2010-05-06 15:02:01 -07:00
mux.h davinci: update pin-multiplexing support 2009-04-27 09:49:46 -07:00
pm.c davinci: add power management support 2010-02-04 13:29:55 -08:00
psc.c davinci: move PSC register definitions from psc.c to psc.h 2010-02-04 13:29:36 -08:00
serial.c DaVinci: remove unneeded #include's 2009-11-25 10:21:31 -08:00
sleep.S davinci: add power management support 2010-02-04 13:29:55 -08:00
sram.c DaVinci: remove unneeded #include's 2009-11-25 10:21:31 -08:00
time.c davinci: timers: don't enable timer until clocksource is initialized 2010-04-05 15:25:11 -07:00
usb.c DA8xx: MUSB platform device registration 2009-11-25 10:21:33 -08:00