Commit bc20c85c authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Tomi Valkeinen

drm: omapdrm: Rename omap_gem_(get|put)_paddr() to omap_gem_(un)pin()

The reflects the purpose of the function better.
Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
parent 16869083
...@@ -188,8 +188,8 @@ int omap_gem_roll(struct drm_gem_object *obj, uint32_t roll); ...@@ -188,8 +188,8 @@ int omap_gem_roll(struct drm_gem_object *obj, uint32_t roll);
void omap_gem_cpu_sync(struct drm_gem_object *obj, int pgoff); void omap_gem_cpu_sync(struct drm_gem_object *obj, int pgoff);
void omap_gem_dma_sync(struct drm_gem_object *obj, void omap_gem_dma_sync(struct drm_gem_object *obj,
enum dma_data_direction dir); enum dma_data_direction dir);
int omap_gem_get_paddr(struct drm_gem_object *obj, dma_addr_t *dma_addr); int omap_gem_pin(struct drm_gem_object *obj, dma_addr_t *dma_addr);
void omap_gem_put_paddr(struct drm_gem_object *obj); void omap_gem_unpin(struct drm_gem_object *obj);
int omap_gem_get_pages(struct drm_gem_object *obj, struct page ***pages, int omap_gem_get_pages(struct drm_gem_object *obj, struct page ***pages,
bool remap); bool remap);
int omap_gem_put_pages(struct drm_gem_object *obj); int omap_gem_put_pages(struct drm_gem_object *obj);
......
...@@ -259,7 +259,7 @@ int omap_framebuffer_pin(struct drm_framebuffer *fb) ...@@ -259,7 +259,7 @@ int omap_framebuffer_pin(struct drm_framebuffer *fb)
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
struct plane *plane = &omap_fb->planes[i]; struct plane *plane = &omap_fb->planes[i];
ret = omap_gem_get_paddr(plane->bo, &plane->dma_addr); ret = omap_gem_pin(plane->bo, &plane->dma_addr);
if (ret) if (ret)
goto fail; goto fail;
omap_gem_dma_sync(plane->bo, DMA_TO_DEVICE); omap_gem_dma_sync(plane->bo, DMA_TO_DEVICE);
...@@ -274,7 +274,7 @@ int omap_framebuffer_pin(struct drm_framebuffer *fb) ...@@ -274,7 +274,7 @@ int omap_framebuffer_pin(struct drm_framebuffer *fb)
fail: fail:
for (i--; i >= 0; i--) { for (i--; i >= 0; i--) {
struct plane *plane = &omap_fb->planes[i]; struct plane *plane = &omap_fb->planes[i];
omap_gem_put_paddr(plane->bo); omap_gem_unpin(plane->bo);
plane->dma_addr = 0; plane->dma_addr = 0;
} }
...@@ -300,7 +300,7 @@ void omap_framebuffer_unpin(struct drm_framebuffer *fb) ...@@ -300,7 +300,7 @@ void omap_framebuffer_unpin(struct drm_framebuffer *fb)
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
struct plane *plane = &omap_fb->planes[i]; struct plane *plane = &omap_fb->planes[i];
omap_gem_put_paddr(plane->bo); omap_gem_unpin(plane->bo);
plane->dma_addr = 0; plane->dma_addr = 0;
} }
......
...@@ -162,10 +162,9 @@ static int omap_fbdev_create(struct drm_fb_helper *helper, ...@@ -162,10 +162,9 @@ static int omap_fbdev_create(struct drm_fb_helper *helper,
* to it). Then we just need to be sure that we are able to re- * to it). Then we just need to be sure that we are able to re-
* pin it in case of an opps. * pin it in case of an opps.
*/ */
ret = omap_gem_get_paddr(fbdev->bo, &dma_addr); ret = omap_gem_pin(fbdev->bo, &dma_addr);
if (ret) { if (ret) {
dev_err(dev->dev, dev_err(dev->dev, "could not pin framebuffer\n");
"could not map (paddr)! Skipping framebuffer alloc\n");
ret = -ENOMEM; ret = -ENOMEM;
goto fail; goto fail;
} }
...@@ -303,8 +302,8 @@ void omap_fbdev_free(struct drm_device *dev) ...@@ -303,8 +302,8 @@ void omap_fbdev_free(struct drm_device *dev)
fbdev = to_omap_fbdev(priv->fbdev); fbdev = to_omap_fbdev(priv->fbdev);
/* release the ref taken in omap_fbdev_create() */ /* unpin the GEM object pinned in omap_fbdev_create() */
omap_gem_put_paddr(fbdev->bo); omap_gem_unpin(fbdev->bo);
/* this will free the backing object */ /* this will free the backing object */
if (fbdev->fb) if (fbdev->fb)
......
...@@ -66,9 +66,9 @@ struct omap_gem_object { ...@@ -66,9 +66,9 @@ struct omap_gem_object {
* *
* Buffers mapped to the TILER have their DMA address pointing to the * Buffers mapped to the TILER have their DMA address pointing to the
* TILER aperture. As TILER mappings are refcounted (through * TILER aperture. As TILER mappings are refcounted (through
* dma_addr_cnt) the DMA address must be accessed through * dma_addr_cnt) the DMA address must be accessed through omap_gem_pin()
* omap_get_get_paddr() to ensure that the mapping won't disappear * to ensure that the mapping won't disappear unexpectedly. References
* unexpectedly. References must be released with omap_gem_put_paddr(). * must be released with omap_gem_unpin().
*/ */
dma_addr_t dma_addr; dma_addr_t dma_addr;
...@@ -784,10 +784,21 @@ void omap_gem_dma_sync(struct drm_gem_object *obj, ...@@ -784,10 +784,21 @@ void omap_gem_dma_sync(struct drm_gem_object *obj,
} }
} }
/* Get physical address for DMA.. if the buffer is not already contiguous, remap /**
* it to pin in physically contiguous memory.. (ie. map in TILER) * omap_gem_pin() - Pin a GEM object in memory
* @obj: the GEM object
* @dma_addr: the DMA address
*
* Pin the given GEM object in memory and fill the dma_addr pointer with the
* object's DMA address. If the buffer is not physically contiguous it will be
* remapped through the TILER to provide a contiguous view.
*
* Pins are reference-counted, calling this function multiple times is allowed
* as long the corresponding omap_gem_unpin() calls are balanced.
*
* Return 0 on success or a negative error code otherwise.
*/ */
int omap_gem_get_paddr(struct drm_gem_object *obj, dma_addr_t *dma_addr) int omap_gem_pin(struct drm_gem_object *obj, dma_addr_t *dma_addr)
{ {
struct omap_drm_private *priv = obj->dev->dev_private; struct omap_drm_private *priv = obj->dev->dev_private;
struct omap_gem_object *omap_obj = to_omap_bo(obj); struct omap_gem_object *omap_obj = to_omap_bo(obj);
...@@ -855,10 +866,15 @@ int omap_gem_get_paddr(struct drm_gem_object *obj, dma_addr_t *dma_addr) ...@@ -855,10 +866,15 @@ int omap_gem_get_paddr(struct drm_gem_object *obj, dma_addr_t *dma_addr)
return ret; return ret;
} }
/* Release physical address, when DMA is no longer being performed.. this /**
* could potentially unpin and unmap buffers from TILER * omap_gem_unpin() - Unpin a GEM object from memory
* @obj: the GEM object
*
* Unpin the given GEM object previously pinned with omap_gem_pin(). Pins are
* reference-counted, the actualy unpin will only be performed when the number
* of calls to this function matches the number of calls to omap_gem_pin().
*/ */
void omap_gem_put_paddr(struct drm_gem_object *obj) void omap_gem_unpin(struct drm_gem_object *obj)
{ {
struct omap_gem_object *omap_obj = to_omap_bo(obj); struct omap_gem_object *omap_obj = to_omap_bo(obj);
int ret; int ret;
...@@ -919,9 +935,9 @@ int omap_gem_tiled_stride(struct drm_gem_object *obj, uint32_t orient) ...@@ -919,9 +935,9 @@ int omap_gem_tiled_stride(struct drm_gem_object *obj, uint32_t orient)
* increasing the pin count (which we don't really do yet anyways, * increasing the pin count (which we don't really do yet anyways,
* because we don't support swapping pages back out). And 'remap' * because we don't support swapping pages back out). And 'remap'
* might not be quite the right name, but I wanted to keep it working * might not be quite the right name, but I wanted to keep it working
* similarly to omap_gem_get_paddr(). Note though that mutex is not * similarly to omap_gem_pin(). Note though that mutex is not
* aquired if !remap (because this can be called in atomic ctxt), * aquired if !remap (because this can be called in atomic ctxt),
* but probably omap_gem_get_paddr() should be changed to work in the * but probably omap_gem_unpin() should be changed to work in the
* same way. If !remap, a matching omap_gem_put_pages() call is not * same way. If !remap, a matching omap_gem_put_pages() call is not
* required (and should not be made). * required (and should not be made).
*/ */
......
...@@ -41,7 +41,7 @@ static struct sg_table *omap_gem_map_dma_buf( ...@@ -41,7 +41,7 @@ static struct sg_table *omap_gem_map_dma_buf(
/* camera, etc, need physically contiguous.. but we need a /* camera, etc, need physically contiguous.. but we need a
* better way to know this.. * better way to know this..
*/ */
ret = omap_gem_get_paddr(obj, &dma_addr); ret = omap_gem_pin(obj, &dma_addr);
if (ret) if (ret)
goto out; goto out;
...@@ -54,7 +54,7 @@ static struct sg_table *omap_gem_map_dma_buf( ...@@ -54,7 +54,7 @@ static struct sg_table *omap_gem_map_dma_buf(
sg_set_page(sg->sgl, pfn_to_page(PFN_DOWN(dma_addr)), obj->size, 0); sg_set_page(sg->sgl, pfn_to_page(PFN_DOWN(dma_addr)), obj->size, 0);
sg_dma_address(sg->sgl) = dma_addr; sg_dma_address(sg->sgl) = dma_addr;
/* this should be after _get_paddr() to ensure we have pages attached */ /* this must be after omap_gem_pin() to ensure we have pages attached */
omap_gem_dma_sync(obj, dir); omap_gem_dma_sync(obj, dir);
return sg; return sg;
...@@ -67,7 +67,7 @@ static void omap_gem_unmap_dma_buf(struct dma_buf_attachment *attachment, ...@@ -67,7 +67,7 @@ static void omap_gem_unmap_dma_buf(struct dma_buf_attachment *attachment,
struct sg_table *sg, enum dma_data_direction dir) struct sg_table *sg, enum dma_data_direction dir)
{ {
struct drm_gem_object *obj = attachment->dmabuf->priv; struct drm_gem_object *obj = attachment->dmabuf->priv;
omap_gem_put_paddr(obj); omap_gem_unpin(obj);
sg_free_table(sg); sg_free_table(sg);
kfree(sg); kfree(sg);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment