Both coherent (uncached) and non-coherent (cached) buffers can have
their pages mapped to the device through the DMA mapping API. Make sure
to unmap any mapped page when freeing a buffer, regardless of its type.

Signed-off-by: Laurent Pinchart <laurent.pinch...@ideasonboard.com>
---
 drivers/gpu/drm/omapdrm/omap_gem.c | 17 ++++++-----------
 1 file changed, 6 insertions(+), 11 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/omap_gem.c 
b/drivers/gpu/drm/omapdrm/omap_gem.c
index 43b60a146edf..7fcf607ca0b6 100644
--- a/drivers/gpu/drm/omapdrm/omap_gem.c
+++ b/drivers/gpu/drm/omapdrm/omap_gem.c
@@ -316,18 +316,13 @@ static int get_pages(struct drm_gem_object *obj, struct 
page ***pages)
 static void omap_gem_detach_pages(struct drm_gem_object *obj)
 {
        struct omap_gem_object *omap_obj = to_omap_bo(obj);
+       unsigned int npages = obj->size >> PAGE_SHIFT;
+       unsigned int i;
 
-       /* for non-cached buffers, ensure the new pages are clean because
-        * DSS, GPU, etc. are not cache coherent:
-        */
-       if (omap_obj->flags & (OMAP_BO_WC|OMAP_BO_UNCACHED)) {
-               int i, npages = obj->size >> PAGE_SHIFT;
-               for (i = 0; i < npages; i++) {
-                       if (omap_obj->dma_addrs[i])
-                               dma_unmap_page(obj->dev->dev,
-                                              omap_obj->dma_addrs[i],
-                                              PAGE_SIZE, DMA_BIDIRECTIONAL);
-               }
+       for (i = 0; i < npages; i++) {
+               if (omap_obj->dma_addrs[i])
+                       dma_unmap_page(obj->dev->dev, omap_obj->dma_addrs[i],
+                                      PAGE_SIZE, DMA_BIDIRECTIONAL);
        }
 
        kfree(omap_obj->dma_addrs);
-- 
Regards,

Laurent Pinchart

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to