All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Thomas Zimmermann <tzimmermann@suse.de>
Cc: daniel@ffwll.ch, airlied@gmail.com, jfalempe@redhat.com,
	javierm@redhat.com, dri-devel@lists.freedesktop.org,
	amd-gfx@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
	intel-xe@lists.freedesktop.org, nouveau@lists.freedesktop.org
Subject: Re: [PATCH 01/86] drm/fbdev-helper: Move color-mode lookup into 4CC format helper
Date: Sun, 18 Aug 2024 22:22:30 +0300	[thread overview]
Message-ID: <20240818192230.GA729@pendragon.ideasonboard.com> (raw)
In-Reply-To: <20240816125408.310253-2-tzimmermann@suse.de>

Hi Thomas,

Thank you for the patch.

On Fri, Aug 16, 2024 at 02:22:27PM +0200, Thomas Zimmermann wrote:
> The color mode specified on the kernel command line gives the user's
> preferred color depth and number of bits per pixel. Move the
> color-mode-to-format conversion form fbdev helpers into a 4CC helper,

s/form/from/

> so that is can be shared among DRM clients.
> 
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>

Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>

> ---
>  drivers/gpu/drm/drm_fb_helper.c | 70 +++++++--------------------------
>  drivers/gpu/drm/drm_fourcc.c    | 30 +++++++++++++-
>  include/drm/drm_fourcc.h        |  1 +
>  3 files changed, 45 insertions(+), 56 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
> index 29c53f9f449c..af1fe79c701d 100644
> --- a/drivers/gpu/drm/drm_fb_helper.c
> +++ b/drivers/gpu/drm/drm_fb_helper.c
> @@ -1441,67 +1441,27 @@ int drm_fb_helper_pan_display(struct fb_var_screeninfo *var,
>  EXPORT_SYMBOL(drm_fb_helper_pan_display);
>  
>  static uint32_t drm_fb_helper_find_format(struct drm_fb_helper *fb_helper, const uint32_t *formats,
> -					  size_t format_count, uint32_t bpp, uint32_t depth)
> +					  size_t format_count, unsigned int color_mode)
>  {
>  	struct drm_device *dev = fb_helper->dev;
>  	uint32_t format;
>  	size_t i;
>  
> -	/*
> -	 * Do not consider YUV or other complicated formats
> -	 * for framebuffers. This means only legacy formats
> -	 * are supported (fmt->depth is a legacy field), but
> -	 * the framebuffer emulation can only deal with such
> -	 * formats, specifically RGB/BGA formats.
> -	 */
> -	format = drm_mode_legacy_fb_format(bpp, depth);
> -	if (!format)
> -		goto err;
> +	format = drm_driver_color_mode_format(dev, color_mode);
> +	if (!format) {
> +		drm_info(dev, "unsupported color mode of %d\n", color_mode);
> +		return DRM_FORMAT_INVALID;
> +	}
>  
>  	for (i = 0; i < format_count; ++i) {
>  		if (formats[i] == format)
>  			return format;
>  	}
> -
> -err:
> -	/* We found nothing. */
> -	drm_warn(dev, "bpp/depth value of %u/%u not supported\n", bpp, depth);
> +	drm_warn(dev, "format %p4cc not supported\n", &format);
>  
>  	return DRM_FORMAT_INVALID;
>  }
>  
> -static uint32_t drm_fb_helper_find_color_mode_format(struct drm_fb_helper *fb_helper,
> -						     const uint32_t *formats, size_t format_count,
> -						     unsigned int color_mode)
> -{
> -	struct drm_device *dev = fb_helper->dev;
> -	uint32_t bpp, depth;
> -
> -	switch (color_mode) {
> -	case 1:
> -	case 2:
> -	case 4:
> -	case 8:
> -	case 16:
> -	case 24:
> -		bpp = depth = color_mode;
> -		break;
> -	case 15:
> -		bpp = 16;
> -		depth = 15;
> -		break;
> -	case 32:
> -		bpp = 32;
> -		depth = 24;
> -		break;
> -	default:
> -		drm_info(dev, "unsupported color mode of %d\n", color_mode);
> -		return DRM_FORMAT_INVALID;
> -	}
> -
> -	return drm_fb_helper_find_format(fb_helper, formats, format_count, bpp, depth);
> -}
> -
>  static int __drm_fb_helper_find_sizes(struct drm_fb_helper *fb_helper,
>  				      struct drm_fb_helper_surface_size *sizes)
>  {
> @@ -1531,10 +1491,10 @@ static int __drm_fb_helper_find_sizes(struct drm_fb_helper *fb_helper,
>  			if (!cmdline_mode->bpp_specified)
>  				continue;
>  
> -			surface_format = drm_fb_helper_find_color_mode_format(fb_helper,
> -									      plane->format_types,
> -									      plane->format_count,
> -									      cmdline_mode->bpp);
> +			surface_format = drm_fb_helper_find_format(fb_helper,
> +								   plane->format_types,
> +								   plane->format_count,
> +								   cmdline_mode->bpp);
>  			if (surface_format != DRM_FORMAT_INVALID)
>  				break; /* found supported format */
>  		}
> @@ -1544,10 +1504,10 @@ static int __drm_fb_helper_find_sizes(struct drm_fb_helper *fb_helper,
>  			break; /* found supported format */
>  
>  		/* try preferred color mode */
> -		surface_format = drm_fb_helper_find_color_mode_format(fb_helper,
> -								      plane->format_types,
> -								      plane->format_count,
> -								      fb_helper->preferred_bpp);
> +		surface_format = drm_fb_helper_find_format(fb_helper,
> +							   plane->format_types,
> +							   plane->format_count,
> +							   fb_helper->preferred_bpp);
>  		if (surface_format != DRM_FORMAT_INVALID)
>  			break; /* found supported format */
>  	}
> diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c
> index 193cf8ed7912..3a94ca211f9c 100644
> --- a/drivers/gpu/drm/drm_fourcc.c
> +++ b/drivers/gpu/drm/drm_fourcc.c
> @@ -36,7 +36,6 @@
>   * @depth: bit depth per pixel
>   *
>   * Computes a drm fourcc pixel format code for the given @bpp/@depth values.
> - * Useful in fbdev emulation code, since that deals in those values.
>   */
>  uint32_t drm_mode_legacy_fb_format(uint32_t bpp, uint32_t depth)
>  {
> @@ -140,6 +139,35 @@ uint32_t drm_driver_legacy_fb_format(struct drm_device *dev,
>  }
>  EXPORT_SYMBOL(drm_driver_legacy_fb_format);
>  
> +/**
> + * drm_driver_color_mode_format - Compute DRM 4CC code from color mode
> + * @dev: DRM device
> + * @color_mode: command-line color mode
> + *
> + * Computes a DRM 4CC pixel format code for the given color mode using
> + * drm_driver_color_mode(). The color mode is in the format used and the
> + * kernel command line. It specifies the number of bits per pixel
> + * and color depth in a single value.
> + *
> + * Useful in fbdev emulation code, since that deals in those values. The
> + * helper does not consider YUV or other complicated formats. This means
> + * only legacy formats are supported (fmt->depth is a legacy field), but
> + * the framebuffer emulation can only deal with such formats, specifically
> + * RGB/BGA formats.
> + */
> +uint32_t drm_driver_color_mode_format(struct drm_device *dev, unsigned int color_mode)
> +{
> +	switch (color_mode) {
> +	case 15:
> +		return drm_driver_legacy_fb_format(dev, 16, 15);
> +	case 32:
> +		return drm_driver_legacy_fb_format(dev, 32, 24);
> +	default:
> +		return drm_driver_legacy_fb_format(dev, color_mode, color_mode);
> +	}
> +}
> +EXPORT_SYMBOL(drm_driver_color_mode_format);
> +
>  /*
>   * Internal function to query information for a given format. See
>   * drm_format_info() for the public API.
> diff --git a/include/drm/drm_fourcc.h b/include/drm/drm_fourcc.h
> index ccf91daa4307..c3f4405d6662 100644
> --- a/include/drm/drm_fourcc.h
> +++ b/include/drm/drm_fourcc.h
> @@ -313,6 +313,7 @@ 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);
> +uint32_t drm_driver_color_mode_format(struct drm_device *dev, unsigned int color_mode);
>  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,
> -- 
> 2.46.0
> 

-- 
Regards,

Laurent Pinchart

  reply	other threads:[~2024-08-18 19:23 UTC|newest]

Thread overview: 134+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-08-16 12:22 [PATCH 00/86] drm: Provide client setup helper and convert drivers Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 01/86] drm/fbdev-helper: Move color-mode lookup into 4CC format helper Thomas Zimmermann
2024-08-18 19:22   ` Laurent Pinchart [this message]
2024-08-16 12:22 ` [PATCH 02/86] drm/fbdev-helper: Set and clear VGA switcheroo client from fb_info Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 03/86] drm/fbdev: Add memory-agnostic fbdev client Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 04/86] drm: Add client-agnostic setup helper Thomas Zimmermann
2024-08-18 20:07   ` Laurent Pinchart
2024-08-20  7:22     ` Thomas Zimmermann
2024-08-20  7:40       ` Laurent Pinchart
2024-08-20  7:53         ` Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 05/86] drm/fbdev-dma: Support struct drm_driver.fbdev_probe Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 06/86] drm/arcgpu: Run DRM default client setup Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 07/86] drm/arm/komeda: " Thomas Zimmermann
2024-08-16 14:15   ` Liviu Dudau
2024-08-16 12:22 ` [PATCH 08/86] drm/arm/hdlcd: " Thomas Zimmermann
2024-08-16 14:15   ` Liviu Dudau
2024-08-16 12:22 ` [PATCH 09/86] drm/arm/malidp: " Thomas Zimmermann
2024-08-16 14:16   ` Liviu Dudau
2024-08-16 12:22 ` [PATCH 10/86] drm/aspeed: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 11/86] drm/atmel-hdlcd: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 12/86] drm/fsl-dcu: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 13/86] drm/hisilicon/kirin: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 14/86] drm/hx8357d: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 15/86] drm/ili9163: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 16/86] drm/ili9225: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 17/86] drm/ili9341: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 18/86] drm/ili9486: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 19/86] drm/imx/dcss: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 20/86] drm/imx/ipuv3: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 21/86] drm/imx/lcdc: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 22/86] drm/ingenic: " Thomas Zimmermann
2024-08-17 20:54   ` Paul Cercueil
2024-08-16 12:22 ` [PATCH 23/86] drm/kmb: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 24/86] drm/logicvc: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 25/86] drm/mcde: " Thomas Zimmermann
2024-08-18  8:51   ` Linus Walleij
2024-08-16 12:22 ` [PATCH 26/86] drm/mediatek: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 27/86] drm/meson: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 28/86] drm/mi0283qt: " Thomas Zimmermann
2024-08-16 16:01   ` Noralf Trønnes
2024-08-20  7:30     ` Thomas Zimmermann
2024-08-20  8:25   ` Noralf Trønnes
2024-08-16 12:22 ` [PATCH 29/86] drm/mxsfb/lcdif: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 30/86] drm/msxfb: " Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 31/86] drm/panel/ili9341: " Thomas Zimmermann
2024-08-19 15:37   ` Neil Armstrong
2024-08-19 15:39   ` Neil Armstrong
2024-08-20  7:33     ` Thomas Zimmermann
2024-08-16 12:22 ` [PATCH 32/86] drm/panel-mipi-dbi: " Thomas Zimmermann
2024-08-20  8:26   ` Noralf Trønnes
2024-08-16 12:22 ` [PATCH 33/86] drm/pl111: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 34/86] drm/renesas/rcar-du: " Thomas Zimmermann
2024-08-18 20:12   ` Laurent Pinchart
2024-08-16 12:23 ` [PATCH 35/86] drm/renesas/rz-du: " Thomas Zimmermann
2024-08-19  9:50   ` Biju Das
2024-08-16 12:23 ` [PATCH 36/86] drm/renesas/shmobile: " Thomas Zimmermann
2024-08-18 20:17   ` Laurent Pinchart
2024-08-16 12:23 ` [PATCH 37/86] drm/repaper: " Thomas Zimmermann
2024-08-20  8:26   ` Noralf Trønnes
2024-08-16 12:23 ` [PATCH 38/86] drm/rockchip: " Thomas Zimmermann
2024-08-16 13:34   ` Heiko Stübner
2024-08-16 12:23 ` [PATCH 39/86] drm/sti: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 40/86] drm/stm: " Thomas Zimmermann
2024-08-20 11:57   ` Raphael Gallais-Pou
2024-08-16 12:23 ` [PATCH 41/86] drm/sun4i: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 42/86] drm/tidss: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 43/86] drm/tilcdc: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 44/86] drm/st7586: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 45/86] drm/st7735r: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 46/86] drm/tve200: " Thomas Zimmermann
2024-08-18  8:51   ` Linus Walleij
2024-08-16 12:23 ` [PATCH 47/86] drm/vc4: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 48/86] drm/xlnx: " Thomas Zimmermann
2024-08-18 20:19   ` Laurent Pinchart
2024-08-20  7:52     ` Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 49/86] drm/fbdev-dma: Remove obsolete setup function Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 50/86] drm/fbdev-shmem: Support struct drm_driver.fbdev_probe Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 51/86] drm/ast: Run DRM default client setup Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 52/86] drm/cirrus: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 53/86] drm/gm12u320: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 54/86] drm/gud: " Thomas Zimmermann
2024-08-20  8:27   ` Noralf Trønnes
2024-08-16 12:23 ` [PATCH 55/86] drm/hyperv_drm: " Thomas Zimmermann
2024-08-16 15:36   ` Deepak Rawat
2024-08-16 12:23 ` [PATCH 56/86] drm/mgag200: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 57/86] drm/ofdrm: Use " Thomas Zimmermann
2024-08-19 16:40   ` Javier Martinez Canillas
2024-08-16 12:23 ` [PATCH 58/86] drm/simpledrm: Run " Thomas Zimmermann
2024-08-19 16:41   ` Javier Martinez Canillas
2024-08-16 12:23 ` [PATCH 59/86] drm/solomon: " Thomas Zimmermann
2024-08-19 16:42   ` Javier Martinez Canillas
2024-08-16 12:23 ` [PATCH 60/86] drm/udl: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 61/86] drm/virtgpu: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 62/86] drm/vkms: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 63/86] drm/fbdev-shmem: Remove obsolete setup function Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 64/86] drm/fbdev-ttm: Support struct drm_driver.fbdev_probe Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 65/86] drm/amdgpu: Run DRM default client setup Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 66/86] drm/bochs: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 67/86] drm/hisilicon/hibmc: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 68/86] drm/loongson: " Thomas Zimmermann
2024-08-19  9:00   ` [68/86] " Sui Jingfeng
2024-08-16 12:23 ` [PATCH 69/86] drm/nouveau: " Thomas Zimmermann
2024-08-16 13:59   ` Danilo Krummrich
2024-08-16 12:23 ` [PATCH 70/86] drm/qxl: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 71/86] drm/vboxvideo: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 72/86] drm/vmwgfx: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 73/86] drm/fbdev-ttm: Remove obsolete setup function Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 74/86] drm/armada: Run DRM default client setup Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 75/86] drm/exynos-drm: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 76/86] drm/gma500: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 77/86] drm/msm: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 78/86] drm/radeon: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 79/86] drm/tegra: " Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 80/86] drm/i915: Remove struct drm_fb_helper from struct intel_fbdev Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 81/86] drm/i915: Move custom restore code into separate callback Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 82/86] drm/i915: Move custom hotplug " Thomas Zimmermann
2024-08-19  8:52   ` [82/86] " Sui Jingfeng
2024-08-20  7:39     ` Thomas Zimmermann
2024-08-20 10:39       ` Sui Jingfeng
2024-08-20 12:42         ` Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 83/86] drm/{i915,xe}: Run DRM default client setup Thomas Zimmermann
2024-08-16 13:18   ` Jani Nikula
2024-08-16 13:34     ` Thomas Zimmermann
2024-08-17 10:14   ` kernel test robot
2024-08-17 12:07   ` kernel test robot
2024-08-16 12:23 ` [PATCH 84/86] drm/omapdrm: Remove struct drm_fb_helper from struct omap_fbdev Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 85/86] drm/omapdrm: Run DRM default client setup Thomas Zimmermann
2024-08-16 12:23 ` [PATCH 86/86] drm/fb-helper: Remove struct drm_fb_helper.fb_probe Thomas Zimmermann
2024-08-16 13:02 ` ✓ CI.Patch_applied: success for drm: Provide client setup helper and convert drivers Patchwork
2024-08-16 13:04 ` ✗ CI.checkpatch: warning " Patchwork
2024-08-16 13:04 ` ✗ CI.KUnit: failure " Patchwork
2024-08-16 14:19 ` ✗ Fi.CI.CHECKPATCH: warning " Patchwork
2024-08-16 14:19 ` ✗ Fi.CI.SPARSE: " Patchwork
2024-08-16 14:35 ` ✗ Fi.CI.BAT: failure " Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240818192230.GA729@pendragon.ideasonboard.com \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=airlied@gmail.com \
    --cc=amd-gfx@lists.freedesktop.org \
    --cc=daniel@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=javierm@redhat.com \
    --cc=jfalempe@redhat.com \
    --cc=nouveau@lists.freedesktop.org \
    --cc=tzimmermann@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.