lkml.org 
[lkml]   [2014]   [Jul]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [Nouveau] [PATCH v4 2/6] drm/nouveau: map pages using DMA API on platform devices
    On Tue, Jul 08, 2014 at 05:25:57PM +0900, Alexandre Courbot wrote:
    > 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@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);

    pci_map/unmap alias to dma_unmap/map when called on the underlying struct
    device embedded in pci_device (like for platform drivers). Dunno whether
    it's worth to track a pointer to the struct device directly and always
    call dma_unmap/map.

    Just drive-by comment since I'm interested in how you solve this - i915
    has similar fun with buffer sharing and coherent and non-coherent
    platforms. Although we don't have fun with pci and non-pci based
    platforms.
    -Daniel

    > + else
    > + dma_unmap_page(&device->platformdev->dev, addr,
    > + PAGE_SIZE, DMA_BIDIRECTIONAL);
    > }
    >
    > int
    > --
    > 2.0.0
    >
    > _______________________________________________
    > Nouveau mailing list
    > Nouveau@lists.freedesktop.org
    > http://lists.freedesktop.org/mailman/listinfo/nouveau

    --
    Daniel Vetter
    Software Engineer, Intel Corporation
    +41 (0) 79 365 57 48 - http://blog.ffwll.ch


    \
     
     \ /
      Last update: 2014-07-10 15:21    [W:4.273 / U:1.068 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site