page_to_phys() is not the correct way to obtain the DMA address of a
buffer on a non-PCI system. Use the DMA API functions for this, which
are portable and will allow us to use other DMA API functions for
buffer synchronization.

Signed-off-by: Alexandre Courbot <acourbot at nvidia.com>
---
 drivers/gpu/drm/nouveau/core/engine/device/base.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/nouveau/core/engine/device/base.c 
b/drivers/gpu/drm/nouveau/core/engine/device/base.c
index 18c8c7245b73..e4e9e64988fe 100644
--- a/drivers/gpu/drm/nouveau/core/engine/device/base.c
+++ b/drivers/gpu/drm/nouveau/core/engine/device/base.c
@@ -489,7 +489,10 @@ nv_device_map_page(struct nouveau_device *device, struct 
page *page)
                if (pci_dma_mapping_error(device->pdev, ret))
                        ret = 0;
        } else {
-               ret = page_to_phys(page);
+               ret = dma_map_page(&device->platformdev->dev, page, 0,
+                                  PAGE_SIZE, DMA_BIDIRECTIONAL);
+               if (dma_mapping_error(&device->platformdev->dev, ret))
+                       ret = 0;
        }

        return ret;
@@ -501,6 +504,9 @@ nv_device_unmap_page(struct nouveau_device *device, 
dma_addr_t addr)
        if (nv_device_is_pci(device))
                pci_unmap_page(device->pdev, addr, PAGE_SIZE,
                               PCI_DMA_BIDIRECTIONAL);
+       else
+               dma_unmap_page(&device->platformdev->dev, addr,
+                              PAGE_SIZE, DMA_BIDIRECTIONAL);
 }

 int
-- 
2.0.0

Reply via email to