diff options
Diffstat (limited to 'drivers/gpu/drm/omapdrm/omap_gem.c')
-rw-r--r-- | drivers/gpu/drm/omapdrm/omap_gem.c | 43 |
1 files changed, 21 insertions, 22 deletions
diff --git a/drivers/gpu/drm/omapdrm/omap_gem.c b/drivers/gpu/drm/omapdrm/omap_gem.c index c9ad18ea31c8..f4e0daede6e2 100644 --- a/drivers/gpu/drm/omapdrm/omap_gem.c +++ b/drivers/gpu/drm/omapdrm/omap_gem.c | |||
@@ -752,36 +752,35 @@ void omap_gem_dma_sync(struct drm_gem_object *obj, | |||
752 | { | 752 | { |
753 | struct drm_device *dev = obj->dev; | 753 | struct drm_device *dev = obj->dev; |
754 | struct omap_gem_object *omap_obj = to_omap_bo(obj); | 754 | struct omap_gem_object *omap_obj = to_omap_bo(obj); |
755 | int i, npages = obj->size >> PAGE_SHIFT; | ||
756 | struct page **pages = omap_obj->pages; | ||
757 | bool dirty = false; | ||
755 | 758 | ||
756 | if (is_cached_coherent(obj)) { | 759 | if (!is_cached_coherent(obj)) |
757 | int i, npages = obj->size >> PAGE_SHIFT; | 760 | return; |
758 | struct page **pages = omap_obj->pages; | ||
759 | bool dirty = false; | ||
760 | |||
761 | for (i = 0; i < npages; i++) { | ||
762 | if (!omap_obj->addrs[i]) { | ||
763 | dma_addr_t addr; | ||
764 | 761 | ||
765 | addr = dma_map_page(dev->dev, pages[i], 0, | 762 | for (i = 0; i < npages; i++) { |
766 | PAGE_SIZE, DMA_BIDIRECTIONAL); | 763 | if (!omap_obj->addrs[i]) { |
764 | dma_addr_t addr; | ||
767 | 765 | ||
768 | if (dma_mapping_error(dev->dev, addr)) { | 766 | addr = dma_map_page(dev->dev, pages[i], 0, |
769 | dev_warn(dev->dev, | 767 | PAGE_SIZE, DMA_BIDIRECTIONAL); |
770 | "%s: failed to map page\n", | ||
771 | __func__); | ||
772 | break; | ||
773 | } | ||
774 | 768 | ||
775 | dirty = true; | 769 | if (dma_mapping_error(dev->dev, addr)) { |
776 | omap_obj->addrs[i] = addr; | 770 | dev_warn(dev->dev, "%s: failed to map page\n", |
771 | __func__); | ||
772 | break; | ||
777 | } | 773 | } |
778 | } | ||
779 | 774 | ||
780 | if (dirty) { | 775 | dirty = true; |
781 | unmap_mapping_range(obj->filp->f_mapping, 0, | 776 | omap_obj->addrs[i] = addr; |
782 | omap_gem_mmap_size(obj), 1); | ||
783 | } | 777 | } |
784 | } | 778 | } |
779 | |||
780 | if (dirty) { | ||
781 | unmap_mapping_range(obj->filp->f_mapping, 0, | ||
782 | omap_gem_mmap_size(obj), 1); | ||
783 | } | ||
785 | } | 784 | } |
786 | 785 | ||
787 | /** | 786 | /** |