summaryrefslogtreecommitdiffstats
path: root/arch/powerpc/sysdev/mpic.c
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2008-11-28 09:51:22 +0000
committerPaul Mackerras <paulus@samba.org>2008-12-01 09:40:18 +1100
commitd015fe9951641b2d869a7ae4a690be2a05a9dc7f (patch)
tree7b3016f485758111e124c77da23a282a1b71757d /arch/powerpc/sysdev/mpic.c
parent4a6186696e7f15b3ea4dafcdb64ee0703e0e4487 (diff)
downloadop-kernel-dev-d015fe9951641b2d869a7ae4a690be2a05a9dc7f.zip
op-kernel-dev-d015fe9951641b2d869a7ae4a690be2a05a9dc7f.tar.gz
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>
Diffstat (limited to 'arch/powerpc/sysdev/mpic.c')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud