]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
drm/radeon: Do an MMIO read on interrupts when not uisng MSIs
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Wed, 13 Jul 2011 06:28:22 +0000 (06:28 +0000)
committerDave Airlie <airlied@redhat.com>
Mon, 25 Jul 2011 11:16:25 +0000 (12:16 +0100)
When not using MSIs, there is no guarantee that DMA from the device
has been fully flushed to point where it's visible to the CPU when
taking an interrupt. To get this guarantee, we need to perform an
MMIO read from the device, which will flush all outstanding DMAs
from bridges between the device and the system.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/radeon/r600.c

index 1741af86943c52902bec61c282b3949c99b4a4e5..f56e65579835d9665c925c9904f1082151b3464f 100644 (file)
@@ -3302,6 +3302,10 @@ int r600_irq_process(struct radeon_device *rdev)
        if (!rdev->ih.enabled || rdev->shutdown)
                return IRQ_NONE;
 
+       /* No MSIs, need a dummy read to flush PCI DMAs */
+       if (!rdev->msi_enabled)
+               RREG32(IH_RB_WPTR);
+
        wptr = r600_get_ih_wptr(rdev);
        rptr = rdev->ih.rptr;
        DRM_DEBUG("r600_irq_process start: rptr %d, wptr %d\n", rptr, wptr);