forked from mirrors/linux
		
	drm/fourcc: Pass the format_info pointer to drm_format_plane_width/height
So far, the drm_format_plane_height/width functions were operating on the format's fourcc and was doing a lookup to retrieve the drm_format_info structure and return the cpp. However, this is inefficient since in most cases, we will have the drm_format_info pointer already available so we shouldn't have to perform a new lookup. Some drm_fourcc functions also already operate on the drm_format_info pointer for that reason, so the API is quite inconsistent there. Let's follow the latter pattern and remove the extra lookup while being a bit more consistent. In order to be extra consistent, also rename that function to drm_format_info_plane_cpp and to a static function in the header to match the current policy. The parameters order have also be changed to match the other functions prototype. Reviewed-by: Emil Velikov <emil.velikov@collabora.com> Reviewed-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com> Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com> Link: https://patchwork.freedesktop.org/patch/msgid/514af1d489d80b8b1767e3716b663ce5103da6eb.1558002671.git-series.maxime.ripard@bootlin.com
This commit is contained in:
		
							parent
							
								
									24c478ead0
								
							
						
					
					
						commit
						bf39607c16
					
				
					 3 changed files with 50 additions and 56 deletions
				
			
		| 
						 | 
				
			
			@ -332,54 +332,6 @@ drm_get_format_info(struct drm_device *dev,
 | 
			
		|||
}
 | 
			
		||||
EXPORT_SYMBOL(drm_get_format_info);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * drm_format_plane_width - width of the plane given the first plane
 | 
			
		||||
 * @width: width of the first plane
 | 
			
		||||
 * @format: pixel format
 | 
			
		||||
 * @plane: plane index
 | 
			
		||||
 *
 | 
			
		||||
 * Returns:
 | 
			
		||||
 * The width of @plane, given that the width of the first plane is @width.
 | 
			
		||||
 */
 | 
			
		||||
int drm_format_plane_width(int width, uint32_t format, int plane)
 | 
			
		||||
{
 | 
			
		||||
	const struct drm_format_info *info;
 | 
			
		||||
 | 
			
		||||
	info = drm_format_info(format);
 | 
			
		||||
	if (!info || plane >= info->num_planes)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	if (plane == 0)
 | 
			
		||||
		return width;
 | 
			
		||||
 | 
			
		||||
	return width / info->hsub;
 | 
			
		||||
}
 | 
			
		||||
EXPORT_SYMBOL(drm_format_plane_width);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * drm_format_plane_height - height of the plane given the first plane
 | 
			
		||||
 * @height: height of the first plane
 | 
			
		||||
 * @format: pixel format
 | 
			
		||||
 * @plane: plane index
 | 
			
		||||
 *
 | 
			
		||||
 * Returns:
 | 
			
		||||
 * The height of @plane, given that the height of the first plane is @height.
 | 
			
		||||
 */
 | 
			
		||||
int drm_format_plane_height(int height, uint32_t format, int plane)
 | 
			
		||||
{
 | 
			
		||||
	const struct drm_format_info *info;
 | 
			
		||||
 | 
			
		||||
	info = drm_format_info(format);
 | 
			
		||||
	if (!info || plane >= info->num_planes)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	if (plane == 0)
 | 
			
		||||
		return height;
 | 
			
		||||
 | 
			
		||||
	return height / info->vsub;
 | 
			
		||||
}
 | 
			
		||||
EXPORT_SYMBOL(drm_format_plane_height);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * drm_format_info_block_width - width in pixels of block.
 | 
			
		||||
 * @info: pixel format info
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -466,8 +466,8 @@ static void meson_overlay_atomic_update(struct drm_plane *plane,
 | 
			
		|||
		priv->viu.vd1_addr2 = gem->paddr + fb->offsets[2];
 | 
			
		||||
		priv->viu.vd1_stride2 = fb->pitches[2];
 | 
			
		||||
		priv->viu.vd1_height2 =
 | 
			
		||||
			drm_format_plane_height(fb->height,
 | 
			
		||||
						fb->format->format, 2);
 | 
			
		||||
			drm_format_info_plane_height(fb->format,
 | 
			
		||||
						fb->height, 2);
 | 
			
		||||
		DRM_DEBUG("plane 2 addr 0x%x stride %d height %d\n",
 | 
			
		||||
			 priv->viu.vd1_addr2,
 | 
			
		||||
			 priv->viu.vd1_stride2,
 | 
			
		||||
| 
						 | 
				
			
			@ -478,8 +478,8 @@ static void meson_overlay_atomic_update(struct drm_plane *plane,
 | 
			
		|||
		priv->viu.vd1_addr1 = gem->paddr + fb->offsets[1];
 | 
			
		||||
		priv->viu.vd1_stride1 = fb->pitches[1];
 | 
			
		||||
		priv->viu.vd1_height1 =
 | 
			
		||||
			drm_format_plane_height(fb->height,
 | 
			
		||||
						fb->format->format, 1);
 | 
			
		||||
			drm_format_info_plane_height(fb->format,
 | 
			
		||||
						fb->height, 1);
 | 
			
		||||
		DRM_DEBUG("plane 1 addr 0x%x stride %d height %d\n",
 | 
			
		||||
			 priv->viu.vd1_addr1,
 | 
			
		||||
			 priv->viu.vd1_stride1,
 | 
			
		||||
| 
						 | 
				
			
			@ -490,8 +490,8 @@ static void meson_overlay_atomic_update(struct drm_plane *plane,
 | 
			
		|||
		priv->viu.vd1_addr0 = gem->paddr + fb->offsets[0];
 | 
			
		||||
		priv->viu.vd1_stride0 = fb->pitches[0];
 | 
			
		||||
		priv->viu.vd1_height0 =
 | 
			
		||||
			drm_format_plane_height(fb->height,
 | 
			
		||||
						fb->format->format, 0);
 | 
			
		||||
			drm_format_info_plane_height(fb->format,
 | 
			
		||||
						fb->height, 0);
 | 
			
		||||
		DRM_DEBUG("plane 0 addr 0x%x stride %d height %d\n",
 | 
			
		||||
			 priv->viu.vd1_addr0,
 | 
			
		||||
			 priv->viu.vd1_stride0,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -277,6 +277,50 @@ int drm_format_info_plane_cpp(const struct drm_format_info *info, int plane)
 | 
			
		|||
	return info->cpp[plane];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * drm_format_info_plane_width - width of the plane given the first plane
 | 
			
		||||
 * @format: pixel format info
 | 
			
		||||
 * @width: width of the first plane
 | 
			
		||||
 * @plane: plane index
 | 
			
		||||
 *
 | 
			
		||||
 * Returns:
 | 
			
		||||
 * The width of @plane, given that the width of the first plane is @width.
 | 
			
		||||
 */
 | 
			
		||||
static inline
 | 
			
		||||
int drm_format_info_plane_width(const struct drm_format_info *info, int width,
 | 
			
		||||
				int plane)
 | 
			
		||||
{
 | 
			
		||||
	if (!info || plane >= info->num_planes)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	if (plane == 0)
 | 
			
		||||
		return width;
 | 
			
		||||
 | 
			
		||||
	return width / info->hsub;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * drm_format_info_plane_height - height of the plane given the first plane
 | 
			
		||||
 * @format: pixel format info
 | 
			
		||||
 * @height: height of the first plane
 | 
			
		||||
 * @plane: plane index
 | 
			
		||||
 *
 | 
			
		||||
 * Returns:
 | 
			
		||||
 * The height of @plane, given that the height of the first plane is @height.
 | 
			
		||||
 */
 | 
			
		||||
static inline
 | 
			
		||||
int drm_format_info_plane_height(const struct drm_format_info *info, int height,
 | 
			
		||||
				 int plane)
 | 
			
		||||
{
 | 
			
		||||
	if (!info || plane >= info->num_planes)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	if (plane == 0)
 | 
			
		||||
		return height;
 | 
			
		||||
 | 
			
		||||
	return height / info->vsub;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const struct drm_format_info *__drm_format_info(u32 format);
 | 
			
		||||
const struct drm_format_info *drm_format_info(u32 format);
 | 
			
		||||
const struct drm_format_info *
 | 
			
		||||
| 
						 | 
				
			
			@ -285,8 +329,6 @@ drm_get_format_info(struct drm_device *dev,
 | 
			
		|||
uint32_t drm_mode_legacy_fb_format(uint32_t bpp, uint32_t depth);
 | 
			
		||||
uint32_t drm_driver_legacy_fb_format(struct drm_device *dev,
 | 
			
		||||
				     uint32_t bpp, uint32_t depth);
 | 
			
		||||
int drm_format_plane_width(int width, uint32_t format, int plane);
 | 
			
		||||
int drm_format_plane_height(int height, uint32_t format, int plane);
 | 
			
		||||
unsigned int drm_format_info_block_width(const struct drm_format_info *info,
 | 
			
		||||
					 int plane);
 | 
			
		||||
unsigned int drm_format_info_block_height(const struct drm_format_info *info,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue