diff mbox series

[v3,5/7] drm/fourcc: Pass the format_info pointer to drm_format_plane_width/height

Message ID 514af1d489d80b8b1767e3716b663ce5103da6eb.1558002671.git-series.maxime.ripard@bootlin.com (mailing list archive)
State New, archived
Headers show
Series [v3,1/7] drm/rockchip: Change the scl_vop_cal_scl_fac to pass drm_format_info | expand

Commit Message

Maxime Ripard May 16, 2019, 10:31 a.m. UTC
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>
Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
---
 drivers/gpu/drm/drm_fourcc.c          | 48 +----------------------------
 drivers/gpu/drm/meson/meson_overlay.c | 12 +++----
 include/drm/drm_fourcc.h              | 46 +++++++++++++++++++++++++--
 3 files changed, 50 insertions(+), 56 deletions(-)

Comments

Paul Kocialkowski May 20, 2019, 11:32 a.m. UTC | #1
Hi,

On Thu 16 May 19, 12:31, Maxime Ripard wrote:
> 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.

Same comment about plane being int instead of unsigned int, but I think we
can fix that later.

Another thing that I find odd is that the division by vsub/hsub is not
rounded up, but again, it's something independent from your patch.

Reviewed-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>

Cheers,

Paul

> Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
> Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
> ---
>  drivers/gpu/drm/drm_fourcc.c          | 48 +----------------------------
>  drivers/gpu/drm/meson/meson_overlay.c | 12 +++----
>  include/drm/drm_fourcc.h              | 46 +++++++++++++++++++++++++--
>  3 files changed, 50 insertions(+), 56 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c
> index 5f63fc74e265..35b459d186c5 100644
> --- a/drivers/gpu/drm/drm_fourcc.c
> +++ b/drivers/gpu/drm/drm_fourcc.c
> @@ -333,54 +333,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
>   * @plane: plane index
> diff --git a/drivers/gpu/drm/meson/meson_overlay.c b/drivers/gpu/drm/meson/meson_overlay.c
> index fb8515b2860c..55b3f2f2e608 100644
> --- a/drivers/gpu/drm/meson/meson_overlay.c
> +++ b/drivers/gpu/drm/meson/meson_overlay.c
> @@ -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,
> diff --git a/include/drm/drm_fourcc.h b/include/drm/drm_fourcc.h
> index 6b5a82b31bc4..4ef8ccb5d236 100644
> --- a/include/drm/drm_fourcc.h
> +++ b/include/drm/drm_fourcc.h
> @@ -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,
> -- 
> git-series 0.9.1
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
diff mbox series

Patch

diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c
index 5f63fc74e265..35b459d186c5 100644
--- a/drivers/gpu/drm/drm_fourcc.c
+++ b/drivers/gpu/drm/drm_fourcc.c
@@ -333,54 +333,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
  * @plane: plane index
diff --git a/drivers/gpu/drm/meson/meson_overlay.c b/drivers/gpu/drm/meson/meson_overlay.c
index fb8515b2860c..55b3f2f2e608 100644
--- a/drivers/gpu/drm/meson/meson_overlay.c
+++ b/drivers/gpu/drm/meson/meson_overlay.c
@@ -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,
diff --git a/include/drm/drm_fourcc.h b/include/drm/drm_fourcc.h
index 6b5a82b31bc4..4ef8ccb5d236 100644
--- a/include/drm/drm_fourcc.h
+++ b/include/drm/drm_fourcc.h
@@ -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,