mirror of https://gitee.com/openkylin/linux.git
drm/fb-cma-helper: Add drm_fb_cma_get_gem_addr()
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@st.com> Signed-off-by: Eric Anholt <eric@anholt.net> Link: http://patchwork.freedesktop.org/patch/msgid/1492164819-10513-3-git-send-email-yannick.fertre@st.com Reviewed-by: Neil Armstrong <narmstrong@baylibre.com> Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
parent
97bf3a9aa6
commit
4636ce93d5
|
@ -259,6 +259,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);
|
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;
|
||||||
|
|
||||||
|
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
|
* drm_fb_cma_prepare_fb() - Prepare CMA framebuffer
|
||||||
* @plane: Which plane
|
* @plane: Which plane
|
||||||
|
|
|
@ -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,
|
struct drm_gem_cma_object *drm_fb_cma_get_gem_obj(struct drm_framebuffer *fb,
|
||||||
unsigned int plane);
|
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,
|
int drm_fb_cma_prepare_fb(struct drm_plane *plane,
|
||||||
struct drm_plane_state *state);
|
struct drm_plane_state *state);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue