linux/arch/powerpc/platforms/cell
Arnd Bergmann d015fe9951 powerpc/cell/axon-msi: Retry on missing interrupt
The MSI capture logic for the axon bridge can sometimes
lose interrupts in case of high DMA and interrupt load,
when it signals an MSI interrupt to the MPIC interrupt
controller while we are already handling another MSI.

Each MSI vector gets written into a FIFO buffer in main
memory using DMA, and that DMA access is normally flushed
by the actual interrupt packet on the IOIF.  An MMIO
register in the MSIC holds the position of the last
entry in the FIFO buffer that was written.  However,
reading that position does not flush the DMA, so that
we can observe stale data in the buffer.

In a stress test, we have observed the DMA to arrive
up to 14 microseconds after reading the register.

This patch works around this problem by retrying the
access to the FIFO buffer.

We can reliably detect the conditioning by writing
an invalid MSI vector into the FIFO buffer after
reading from it, assuming that all MSIs we get
are valid.  After detecting an invalid MSI vector,
we udelay(1) in the interrupt cascade for up to
100 times before giving up.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Paul Mackerras <paulus@samba.org>
2008-12-01 09:40:18 +11:00
..
spufs Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/jk/spufs into merge 2008-11-24 11:54:08 +11:00
axon_msi.c powerpc/cell/axon-msi: Retry on missing interrupt 2008-12-01 09:40:18 +11:00
beat.c [POWERPC] celleb: Move miscellaneous files for Beat 2008-04-24 21:08:14 +10:00
beat.h [POWERPC] celleb: Move miscellaneous files for Beat 2008-04-24 21:08:14 +10:00
beat_htab.c powerpc: Remove unnecessary condition when sanity-checking WIMG bits 2008-07-15 12:24:59 +10:00
beat_hvCall.S [POWERPC] celleb: Move files for Beat hvcall interfaces 2008-04-24 21:08:13 +10:00
beat_interrupt.c [POWERPC] celleb: Move miscellaneous files for Beat 2008-04-24 21:08:14 +10:00
beat_interrupt.h [POWERPC] celleb: Move miscellaneous files for Beat 2008-04-24 21:08:14 +10:00
beat_iommu.c [POWERPC] celleb: Move files for Beat mmu and iommu 2008-04-24 21:08:13 +10:00
beat_smp.c [POWERPC] celleb: Move miscellaneous files for Beat 2008-04-24 21:08:14 +10:00
beat_spu_priv1.c [POWERPC] celleb: Move a file for SPU on Beat 2008-04-24 21:08:13 +10:00
beat_syscall.h [POWERPC] celleb: Move files for Beat hvcall interfaces 2008-04-24 21:08:13 +10:00
beat_udbg.c [POWERPC] celleb: Move miscellaneous files for Beat 2008-04-24 21:08:14 +10:00
beat_wrapper.h [POWERPC] celleb: Move files for Beat hvcall interfaces 2008-04-24 21:08:13 +10:00
cbe_cpufreq.c [POWERPC] cell: Convert #include of asm/of_{platform, device}.h into linux/of_{platform, device}.h. 2007-12-19 01:00:02 +01:00
cbe_cpufreq.h [CELL] cbe_cpufreq: reorganize code 2007-07-20 21:41:38 +02:00
cbe_cpufreq_pervasive.c [POWERPC] cell: Move cbe_regs.h to include/asm-powerpc/cell-regs.h 2007-10-09 21:01:56 +10:00
cbe_cpufreq_pmi.c cpufreq acpi: only call _PPC after cpufreq ACPI init funcs got called already 2008-07-30 09:41:43 -07:00
cbe_powerbutton.c powerpc/cell: Add support for power button of future IBM cell blades 2008-07-22 10:39:32 +10:00
cbe_regs.c [POWERPC] cell/cbe_regs.c: Add missing of_node_put 2007-12-20 17:13:51 +11:00
cbe_thermal.c sysdev: Pass the attribute to the low level sysdev show/store function 2008-07-21 21:55:02 -07:00
celleb_pci.c [POWERPC] celleb: Add support for PCI Express 2008-04-24 21:08:14 +10:00
celleb_pci.h [POWERPC] celleb: Add support for PCI Express 2008-04-24 21:08:14 +10:00
celleb_scc.h [POWERPC] celleb: Add support for PCI Express 2008-04-24 21:08:14 +10:00
celleb_scc_epci.c [POWERPC] celleb: Move the SCC related code for celleb 2008-04-24 21:08:13 +10:00
celleb_scc_pciex.c dma-mapping: add the device argument to dma_mapping_error() 2008-07-26 12:00:03 -07:00
celleb_scc_sio.c [POWERPC] celleb: Move the SCC related code for celleb 2008-04-24 21:08:13 +10:00
celleb_scc_uhc.c [POWERPC] celleb: Move the SCC related code for celleb 2008-04-24 21:08:13 +10:00
celleb_setup.c [POWERPC] celleb: Move miscellaneous files for Beat 2008-04-24 21:08:14 +10:00
cpufreq_spudemand.c powerpc/cell/cpufreq: Add spu aware cpufreq governor 2008-07-22 10:39:31 +10:00
interrupt.c powerpc: convert to generic helpers for IPI function calls 2008-06-26 11:22:13 +02:00
interrupt.h
io-workarounds.c [POWERPC] cell: Fix section mismatches in io-workarounds code 2008-05-15 20:49:57 +10:00
io-workarounds.h [POWERPC] cell: Fix section mismatches in io-workarounds code 2008-05-15 20:49:57 +10:00
iommu.c powerpc: Update remaining dma_mapping_ops to use map/unmap_page 2008-10-31 16:13:48 +11:00
Kconfig powerpc/cell: Add support for power button of future IBM cell blades 2008-07-22 10:39:32 +10:00
Makefile powerpc/cell: Add support for power button of future IBM cell blades 2008-07-22 10:39:32 +10:00
pervasive.c powerpc/cell: Cleanup sysreset_hack for IBM cell blades 2008-07-22 10:39:31 +10:00
pervasive.h powerpc/cell: Cleanup sysreset_hack for IBM cell blades 2008-07-22 10:39:31 +10:00
pmu.c [POWERPC] cell: Use machine_*_initcall() hooks in platform code 2008-01-17 14:57:15 +11:00
ras.c powerpc/cell: Fix compile error in ras.c 2008-11-05 19:59:08 +11:00
ras.h
setup.c [POWERPC] cell: Generalize io-workarounds code 2008-04-24 21:08:12 +10:00
smp.c powerpc: Use cpu_thread_in_core in smp_init for of_spin_map 2008-10-21 15:19:12 +11:00
spider-pci.c dma-mapping: add the device argument to dma_mapping_error() 2008-07-26 12:00:03 -07:00
spider-pic.c powerpc: Fix irq_alloc_host() reference counting and callers 2008-06-09 13:51:16 +10:00
spu_base.c sysdev: Pass the attribute to the low level sysdev show/store function 2008-07-21 21:55:02 -07:00
spu_callbacks.c [POWERPC] Replace remaining __FUNCTION__ occurrences 2008-04-01 20:43:09 +11:00
spu_fault.c [POWERPC] spufs: move fault, lscsa_alloc and switch code to spufs module 2007-12-21 19:46:19 +11:00
spu_manage.c [POWERPC] Replace remaining __FUNCTION__ occurrences 2008-04-01 20:43:09 +11:00
spu_notify.c [POWERPC] Oprofile: Remove dependency on spufs module 2007-12-28 15:07:52 +11:00
spu_priv1_mmio.c [POWERPC] spufs: try to route SPU interrupts to local node 2008-05-05 13:33:43 +10:00
spu_priv1_mmio.h
spu_syscalls.c [POWERPC] Oprofile: Remove dependency on spufs module 2007-12-28 15:07:52 +11:00