drm: add chipset flushing via agp support
authorDave Airlie <airlied@redhat.com>
Wed, 31 Oct 2007 00:33:34 +0000 (11:33 +1100)
committerDave Airlie <airlied@redhat.com>
Wed, 31 Oct 2007 00:33:34 +0000 (11:33 +1100)
linux-core/drmP.h
linux-core/drm_agpsupport.c
shared-core/i915_dma.c

index ac3ca4d..c014edd 100644 (file)
@@ -1133,6 +1133,7 @@ extern int drm_agp_free_memory(DRM_AGP_MEM * handle);
 extern int drm_agp_bind_memory(DRM_AGP_MEM * handle, off_t start);
 extern int drm_agp_unbind_memory(DRM_AGP_MEM * handle);
 extern struct drm_ttm_backend *drm_agp_init_ttm(struct drm_device *dev);
+extern void drm_agp_chipset_flush(struct drm_device *dev);
                                /* Stub support (drm_stub.h) */
 extern int drm_get_dev(struct pci_dev *pdev, const struct pci_device_id *ent,
                     struct drm_driver *driver);
index b68efc6..8c7f570 100644 (file)
@@ -650,4 +650,12 @@ struct drm_ttm_backend *drm_agp_init_ttm(struct drm_device *dev)
 }
 EXPORT_SYMBOL(drm_agp_init_ttm);
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)
+void drm_agp_flush_chipset(struct drm_device *dev)
+{
+       agp_flush_chipset(dev->agp->bridge);
+}
+EXPORT_SYMBOL(drm_agp_flush_chipset);
+#endif
+
 #endif                         /* __OS_HAS_AGP */
index 5d0c000..18c3f0f 100644 (file)
@@ -1043,6 +1043,7 @@ static int i915_execbuffer(struct drm_device *dev, void *data,
 
        /* make sure all previous memory operations have passed */
        DRM_MEMORYBARRIER();
+       drm_agp_chipset_flush(dev);
 
        /* submit buffer */
        batch->start = buffers[num_buffers-1]->offset;