Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 930dc19c authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Tomi Valkeinen
Browse files

drm: omapdrm: DMA-unmap pages for all buffer types when freeing buffers



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: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
parent 24fbaca0
Loading
Loading
Loading
Loading
+6 −11
Original line number Diff line number Diff line
@@ -316,19 +316,14 @@ 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],
			dma_unmap_page(obj->dev->dev, omap_obj->dma_addrs[i],
				       PAGE_SIZE, DMA_BIDIRECTIONAL);
	}
	}

	kfree(omap_obj->dma_addrs);
	omap_obj->dma_addrs = NULL;