Hi, On Fri, Mar 30, 2018 at 03:11:20PM +0100, Daniel Stone wrote: > Since drm_framebuffer can now store GEM objects directly, place them > there rather than in our own subclass. As this makes the framebuffer > create_handle and destroy functions the same as the GEM framebuffer > helper, we can reuse those. > > Signed-off-by: Daniel Stone <daniels@xxxxxxxxxxxxx> > Cc: Tomi Valkeinen <tomi.valkeinen@xxxxxx> > --- Reviewed-by: Sebastian Reichel <sebastian.reichel@xxxxxxxxxxxxxxx> -- Sebastian > drivers/gpu/drm/omapdrm/omap_fb.c | 60 ++++++++++----------------------------- > 1 file changed, 15 insertions(+), 45 deletions(-) > > diff --git a/drivers/gpu/drm/omapdrm/omap_fb.c b/drivers/gpu/drm/omapdrm/omap_fb.c > index 5fd22ca73913..3d6b6f3d6808 100644 > --- a/drivers/gpu/drm/omapdrm/omap_fb.c > +++ b/drivers/gpu/drm/omapdrm/omap_fb.c > @@ -19,6 +19,7 @@ > > #include <drm/drm_crtc.h> > #include <drm/drm_crtc_helper.h> > +#include <drm/drm_gem_framebuffer_helper.h> > > #include "omap_dmm_tiler.h" > #include "omap_drv.h" > @@ -51,7 +52,6 @@ static const u32 formats[] = { > > /* per-plane info for the fb: */ > struct plane { > - struct drm_gem_object *bo; > u32 pitch; > u32 offset; > dma_addr_t dma_addr; > @@ -68,36 +68,9 @@ struct omap_framebuffer { > struct mutex lock; > }; > > -static int omap_framebuffer_create_handle(struct drm_framebuffer *fb, > - struct drm_file *file_priv, > - unsigned int *handle) > -{ > - struct omap_framebuffer *omap_fb = to_omap_framebuffer(fb); > - return drm_gem_handle_create(file_priv, > - omap_fb->planes[0].bo, handle); > -} > - > -static void omap_framebuffer_destroy(struct drm_framebuffer *fb) > -{ > - struct omap_framebuffer *omap_fb = to_omap_framebuffer(fb); > - int i, n = fb->format->num_planes; > - > - DBG("destroy: FB ID: %d (%p)", fb->base.id, fb); > - > - drm_framebuffer_cleanup(fb); > - > - for (i = 0; i < n; i++) { > - struct plane *plane = &omap_fb->planes[i]; > - > - drm_gem_object_unreference_unlocked(plane->bo); > - } > - > - kfree(omap_fb); > -} > - > static const struct drm_framebuffer_funcs omap_framebuffer_funcs = { > - .create_handle = omap_framebuffer_create_handle, > - .destroy = omap_framebuffer_destroy, > + .create_handle = drm_gem_fb_create_handle, > + .destroy = drm_gem_fb_destroy, > }; > > static u32 get_linear_addr(struct plane *plane, > @@ -114,10 +87,7 @@ static u32 get_linear_addr(struct plane *plane, > > bool omap_framebuffer_supports_rotation(struct drm_framebuffer *fb) > { > - struct omap_framebuffer *omap_fb = to_omap_framebuffer(fb); > - struct plane *plane = &omap_fb->planes[0]; > - > - return omap_gem_flags(plane->bo) & OMAP_BO_TILED; > + return omap_gem_flags(fb->obj[0]) & OMAP_BO_TILED; > } > > /* Note: DRM rotates counter-clockwise, TILER & DSS rotates clockwise */ > @@ -176,7 +146,7 @@ void omap_framebuffer_update_scanout(struct drm_framebuffer *fb, > x = state->src_x >> 16; > y = state->src_y >> 16; > > - if (omap_gem_flags(plane->bo) & OMAP_BO_TILED) { > + if (omap_gem_flags(fb->obj[0]) & OMAP_BO_TILED) { > u32 w = state->src_w >> 16; > u32 h = state->src_h >> 16; > > @@ -201,12 +171,12 @@ void omap_framebuffer_update_scanout(struct drm_framebuffer *fb, > x += w - 1; > > /* Note: x and y are in TILER units, not pixels */ > - omap_gem_rotated_dma_addr(plane->bo, orient, x, y, > + omap_gem_rotated_dma_addr(fb->obj[0], orient, x, y, > &info->paddr); > info->rotation_type = OMAP_DSS_ROT_TILER; > info->rotation = state->rotation ?: DRM_MODE_ROTATE_0; > /* Note: stride in TILER units, not pixels */ > - info->screen_width = omap_gem_tiled_stride(plane->bo, orient); > + info->screen_width = omap_gem_tiled_stride(fb->obj[0], orient); > } else { > switch (state->rotation & DRM_MODE_ROTATE_MASK) { > case 0: > @@ -234,8 +204,8 @@ void omap_framebuffer_update_scanout(struct drm_framebuffer *fb, > plane = &omap_fb->planes[1]; > > if (info->rotation_type == OMAP_DSS_ROT_TILER) { > - WARN_ON(!(omap_gem_flags(plane->bo) & OMAP_BO_TILED)); > - omap_gem_rotated_dma_addr(plane->bo, orient, x/2, y/2, > + WARN_ON(!(omap_gem_flags(fb->obj[1]) & OMAP_BO_TILED)); > + omap_gem_rotated_dma_addr(fb->obj[1], orient, x/2, y/2, > &info->p_uv_addr); > } else { > info->p_uv_addr = get_linear_addr(plane, format, 1, x, y); > @@ -261,10 +231,10 @@ int omap_framebuffer_pin(struct drm_framebuffer *fb) > > for (i = 0; i < n; i++) { > struct plane *plane = &omap_fb->planes[i]; > - ret = omap_gem_pin(plane->bo, &plane->dma_addr); > + ret = omap_gem_pin(fb->obj[i], &plane->dma_addr); > if (ret) > goto fail; > - omap_gem_dma_sync_buffer(plane->bo, DMA_TO_DEVICE); > + omap_gem_dma_sync_buffer(fb->obj[i], DMA_TO_DEVICE); > } > > omap_fb->pin_count++; > @@ -276,7 +246,7 @@ int omap_framebuffer_pin(struct drm_framebuffer *fb) > fail: > for (i--; i >= 0; i--) { > struct plane *plane = &omap_fb->planes[i]; > - omap_gem_unpin(plane->bo); > + omap_gem_unpin(fb->obj[i]); > plane->dma_addr = 0; > } > > @@ -302,7 +272,7 @@ void omap_framebuffer_unpin(struct drm_framebuffer *fb) > > for (i = 0; i < n; i++) { > struct plane *plane = &omap_fb->planes[i]; > - omap_gem_unpin(plane->bo); > + omap_gem_unpin(fb->obj[i]); > plane->dma_addr = 0; > } > > @@ -349,7 +319,7 @@ void omap_framebuffer_describe(struct drm_framebuffer *fb, struct seq_file *m) > struct plane *plane = &omap_fb->planes[i]; > seq_printf(m, " %d: offset=%d pitch=%d, obj: ", > i, plane->offset, plane->pitch); > - omap_gem_describe(plane->bo, m); > + omap_gem_describe(fb->obj[i], m); > } > } > #endif > @@ -454,7 +424,7 @@ struct drm_framebuffer *omap_framebuffer_init(struct drm_device *dev, > goto fail; > } > > - plane->bo = bos[i]; > + fb->obj[i] = bos[i]; > plane->offset = mode_cmd->offsets[i]; > plane->pitch = pitch; > plane->dma_addr = 0; > -- > 2.16.2 > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/dri-devel
Attachment:
signature.asc
Description: PGP signature
_______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel