On 04/14/2017 12:13 PM, Yannick Fertre wrote: > Add function drm_fb_cma_get_gem_addr() which return the physical address > of framebuffer (1st pixel). This function will usually be called by plane > callback (atomic_update). > > Signed-off-by: Yannick Fertre <yannick.fertre@xxxxxx> > --- > drivers/gpu/drm/drm_fb_cma_helper.c | 27 +++++++++++++++++++++++++++ > include/drm/drm_fb_cma_helper.h | 4 ++++ > 2 files changed, 31 insertions(+) > > diff --git a/drivers/gpu/drm/drm_fb_cma_helper.c b/drivers/gpu/drm/drm_fb_cma_helper.c > index 50abd1f..d2b77b0 100644 > --- a/drivers/gpu/drm/drm_fb_cma_helper.c > +++ b/drivers/gpu/drm/drm_fb_cma_helper.c > @@ -260,6 +260,33 @@ struct drm_gem_cma_object *drm_fb_cma_get_gem_obj(struct drm_framebuffer *fb, > EXPORT_SYMBOL_GPL(drm_fb_cma_get_gem_obj); > > /** > + * drm_fb_cma_get_gem_addr() - Get physical address for framebuffer > + * @fb: The framebuffer > + * @state: Which state of drm plane > + * @plane: Which plane > + * Return the CMA GEM address for given framebuffer. > + * > + * This function will usually be called from the PLANE callback functions. > + */ > +dma_addr_t drm_fb_cma_get_gem_addr(struct drm_framebuffer *fb, > + struct drm_plane_state *state, > + unsigned int plane) > +{ > + struct drm_fb_cma *fb_cma = to_fb_cma(fb); > + dma_addr_t paddr; > + > + if (plane >= 4) > + return 0; Nitpick, but why not using drm_fb_cma_get_gem_obj(fb, plane) here ? ===== struct drm_gem_cma_object *gem = drm_fb_cma_get_gem_obj(fb, plane); if (!gem) return 0; paddr = gem->paddr + fb->offsets[plane]; ====== > + > + paddr = fb_cma->obj[plane]->paddr + fb->offsets[plane]; > + paddr += fb->format->cpp[plane] * (state->src_x >> 16); > + paddr += fb->pitches[plane] * (state->src_y >> 16); > + > + return paddr; > +} > +EXPORT_SYMBOL_GPL(drm_fb_cma_get_gem_addr); > + > +/** > * drm_fb_cma_prepare_fb() - Prepare CMA framebuffer > * @plane: Which plane > * @state: Plane state attach fence to > diff --git a/include/drm/drm_fb_cma_helper.h b/include/drm/drm_fb_cma_helper.h > index a5ecc0a..199a63f 100644 > --- a/include/drm/drm_fb_cma_helper.h > +++ b/include/drm/drm_fb_cma_helper.h > @@ -41,6 +41,10 @@ struct drm_framebuffer *drm_fb_cma_create(struct drm_device *dev, > struct drm_gem_cma_object *drm_fb_cma_get_gem_obj(struct drm_framebuffer *fb, > unsigned int plane); > > +dma_addr_t drm_fb_cma_get_gem_addr(struct drm_framebuffer *fb, > + struct drm_plane_state *state, > + unsigned int plane); > + > int drm_fb_cma_prepare_fb(struct drm_plane *plane, > struct drm_plane_state *state); > > Anyway it's still ok, Reviewed-by: Neil Armstrong <narmstrong@xxxxxxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html