mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	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
					
				
					 2 changed files with 31 additions and 0 deletions
				
			
		| 
						 | 
					@ -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 a new issue