Commit 0e7d5874 authored by Ville Syrjälä's avatar Ville Syrjälä
Browse files

drm: Pass pixel_format+modifier directly to drm_get_format_info()



Decouple drm_get_format_info() from struct drm_mode_fb_cmd2 and just
pass the pixel format+modifier combo in by hand.

We may want to use drm_get_format_info() outside of the normal
addfb paths where we won't have a struct drm_mode_fb_cmd2, and
creating a temporary one just for this seems silly.

Done with cocci:
@@
identifier dev, mode_cmd;
@@
struct drm_format_info *
drm_get_format_info(struct drm_device *dev,
-		    const struct drm_mode_fb_cmd2 *mode_cmd
+		    u32 pixel_format, u64 modifier
     		    )
{
<...
(
- mode_cmd->pixel_format
+ pixel_format
|
- mode_cmd->modifier[0]
+ modifier
)
...>
}

@@
identifier dev, mode_cmd;
@@
struct drm_format_info *
drm_get_format_info(struct drm_device *dev,
-		    const struct drm_mode_fb_cmd2 *mode_cmd
+		    u32 pixel_format, u64 modifier
     		    );

@@
expression dev, mode_cmd;
@@
- drm_get_format_info(dev, mode_cmd)
+ drm_get_format_info(dev, mode_cmd->pixel_format, mode_cmd->modifier[0])

v2: Fix kernel docs (Laurent)
    Drop drm_mode_fb_cmd2 forward declaration (Thomas)

Cc: Liviu Dudau <liviu.dudau@arm.com>
Cc: Russell King <linux@armlinux.org.uk>
Cc: Inki Dae <inki.dae@samsung.com>
Cc: Seung-Woo Kim <sw0312.kim@samsung.com>
Cc: Kyungmin Park <kyungmin.park@samsung.com>
Cc: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
Cc: Chun-Kuang Hu <chunkuang.hu@kernel.org>
Cc: Philipp Zabel <p.zabel@pengutronix.de>
Cc: Rob Clark <robdclark@gmail.com>
Cc: Abhinav Kumar <quic_abhinavk@quicinc.com>
Cc: Dmitry Baryshkov <lumag@kernel.org>
Cc: Sean Paul <sean@poorly.run>
Cc: Marijn Suijten <marijn.suijten@somainline.org>
Cc: Marek Vasut <marex@denx.de>
Cc: Stefan Agner <stefan@agner.ch>
Cc: Lyude Paul <lyude@redhat.com>
Cc: Danilo Krummrich <dakr@kernel.org>
Cc: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: Sandy Huang <hjc@rock-chips.com>
Cc: "Heiko Stübner" <heiko@sntech.de>
Cc: Andy Yan <andy.yan@rock-chips.com>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Mikko Perttunen <mperttunen@nvidia.com>
Cc: linux-arm-msm@vger.kernel.org
Cc: freedreno@lists.freedesktop.org
Cc: nouveau@lists.freedesktop.org
Cc: amd-gfx@lists.freedesktop.org
Cc: linux-tegra@vger.kernel.org
Reviewed-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: default avatarLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Reviewed-by: default avatarLiviu Dudau <liviu.dudau@arm.com>
Acked-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250701090722.13645-3-ville.syrjala@linux.intel.com
parent 0389e425
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -325,7 +325,8 @@ malidp_verify_afbc_framebuffer_size(struct drm_device *dev,
		return false;
	}

	info = drm_get_format_info(dev, mode_cmd);
	info = drm_get_format_info(dev, mode_cmd->pixel_format,
				   mode_cmd->modifier[0]);

	n_superblocks = (mode_cmd->width / afbc_superblock_width) *
		(mode_cmd->height / afbc_superblock_height);
+3 −1
Original line number Diff line number Diff line
@@ -86,7 +86,9 @@ struct armada_framebuffer *armada_framebuffer_create(struct drm_device *dev,
struct drm_framebuffer *armada_fb_create(struct drm_device *dev,
	struct drm_file *dfile, const struct drm_mode_fb_cmd2 *mode)
{
	const struct drm_format_info *info = drm_get_format_info(dev, mode);
	const struct drm_format_info *info = drm_get_format_info(dev,
								 mode->pixel_format,
								 mode->modifier[0]);
	struct armada_gem_object *obj;
	struct armada_framebuffer *dfb;
	int ret;
+6 −5
Original line number Diff line number Diff line
@@ -417,7 +417,8 @@ EXPORT_SYMBOL(drm_format_info);
/**
 * drm_get_format_info - query information for a given framebuffer configuration
 * @dev: DRM device
 * @mode_cmd: metadata from the userspace fb creation request
 * @pixel_format: pixel format (DRM_FORMAT_*)
 * @modifier: modifier
 *
 * Returns:
 * The instance of struct drm_format_info that describes the pixel format, or
@@ -425,16 +426,16 @@ EXPORT_SYMBOL(drm_format_info);
 */
const struct drm_format_info *
drm_get_format_info(struct drm_device *dev,
		    const struct drm_mode_fb_cmd2 *mode_cmd)
		    u32 pixel_format, u64 modifier)
{
	const struct drm_format_info *info = NULL;

	if (dev->mode_config.funcs->get_format_info)
		info = dev->mode_config.funcs->get_format_info(mode_cmd->pixel_format,
							       mode_cmd->modifier[0]);
		info = dev->mode_config.funcs->get_format_info(pixel_format,
							       modifier);

	if (!info)
		info = drm_format_info(mode_cmd->pixel_format);
		info = drm_format_info(pixel_format);

	return info;
}
+1 −1
Original line number Diff line number Diff line
@@ -176,7 +176,7 @@ static int framebuffer_check(struct drm_device *dev,
	}

	/* now let the driver pick its own format info */
	info = drm_get_format_info(dev, r);
	info = drm_get_format_info(dev, r->pixel_format, r->modifier[0]);

	for (i = 0; i < info->num_planes; i++) {
		unsigned int width = drm_format_info_plane_width(info, r->width, i);
+6 −3
Original line number Diff line number Diff line
@@ -160,7 +160,8 @@ int drm_gem_fb_init_with_funcs(struct drm_device *dev,
	unsigned int i;
	int ret;

	info = drm_get_format_info(dev, mode_cmd);
	info = drm_get_format_info(dev, mode_cmd->pixel_format,
				   mode_cmd->modifier[0]);
	if (!info) {
		drm_dbg_kms(dev, "Failed to get FB format info\n");
		return -EINVAL;
@@ -502,7 +503,8 @@ static __u32 drm_gem_afbc_get_bpp(struct drm_device *dev,
{
	const struct drm_format_info *info;

	info = drm_get_format_info(dev, mode_cmd);
	info = drm_get_format_info(dev, mode_cmd->pixel_format,
				   mode_cmd->modifier[0]);

	switch (info->format) {
	case DRM_FORMAT_YUV420_8BIT:
@@ -600,7 +602,8 @@ int drm_gem_fb_afbc_init(struct drm_device *dev,
	int ret;

	objs = afbc_fb->base.obj;
	info = drm_get_format_info(dev, mode_cmd);
	info = drm_get_format_info(dev, mode_cmd->pixel_format,
				   mode_cmd->modifier[0]);
	if (!info)
		return -EINVAL;

Loading