From: Thomas Zimmermann <tzimmermann@suse.de>
To: daniel@ffwll.ch, airlied@gmail.com, jfalempe@redhat.com,
javierm@redhat.com
Cc: dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org,
intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org,
nouveau@lists.freedesktop.org,
Thomas Zimmermann <tzimmermann@suse.de>,
Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Subject: [PATCH v2 01/86] drm/fbdev-helper: Move color-mode lookup into 4CC format helper
Date: Wed, 21 Aug 2024 14:58:58 +0200 [thread overview]
Message-ID: <20240821130348.73038-2-tzimmermann@suse.de> (raw)
In-Reply-To: <20240821130348.73038-1-tzimmermann@suse.de>
The color mode as 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 from fbdev helpers into a 4CC helper,
so that it can be shared among DRM clients.
v2:
- fix grammar in commit message (Laurent)
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
next prev parent reply other threads:[~2024-08-21 13:04 UTC|newest]
Thread overview: 101+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-21 12:58 [PATCH v2 00/86] drm: Provide client setup helper and convert drivers Thomas Zimmermann
2024-08-21 12:58 ` Thomas Zimmermann [this message]
2024-08-21 12:58 ` [PATCH v2 02/86] drm/fbdev-helper: Set and clear VGA switcheroo client from fb_info Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 03/86] drm/fbdev: Add memory-agnostic fbdev client Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 04/86] drm: Add client-agnostic setup helper Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 05/86] drm/fbdev-dma: Support struct drm_driver.fbdev_probe Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 06/86] drm/arcgpu: Run DRM default client setup Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 07/86] drm/arm/komeda: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 08/86] drm/arm/hdlcd: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 09/86] drm/arm/malidp: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 10/86] drm/aspeed: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 11/86] drm/atmel-hdlcd: " Thomas Zimmermann
2024-08-23 18:51 ` Sam Ravnborg
2024-08-26 7:11 ` Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 12/86] drm/fsl-dcu: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 13/86] drm/hisilicon/kirin: " Thomas Zimmermann
2024-08-21 18:23 ` John Stultz
2024-08-21 12:59 ` [PATCH v2 14/86] drm/hx8357d: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 15/86] drm/ili9163: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 16/86] drm/ili9225: " Thomas Zimmermann
2024-08-21 13:47 ` David Lechner
2024-08-21 12:59 ` [PATCH v2 17/86] drm/ili9341: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 18/86] drm/ili9486: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 19/86] drm/imx/dcss: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 20/86] drm/imx/ipuv3: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 21/86] drm/imx/lcdc: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 22/86] drm/ingenic: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 23/86] drm/kmb: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 24/86] drm/logicvc: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 25/86] drm/mcde: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 26/86] drm/mediatek: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 27/86] drm/meson: " Thomas Zimmermann
2024-08-21 15:13 ` Neil Armstrong
2024-08-21 12:59 ` [PATCH v2 28/86] drm/mi0283qt: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 29/86] drm/mxsfb/lcdif: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 30/86] drm/msxfb: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 31/86] drm/panel/ili9341: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 32/86] drm/panel-mipi-dbi: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 33/86] drm/pl111: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 34/86] drm/renesas/rcar-du: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 35/86] drm/renesas/rz-du: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 36/86] drm/renesas/shmobile: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 37/86] drm/repaper: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 38/86] drm/rockchip: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 39/86] drm/sti: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 40/86] drm/stm: " Thomas Zimmermann
2024-08-22 8:38 ` Raphael Gallais-Pou
2024-08-21 12:59 ` [PATCH v2 41/86] drm/sun4i: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 42/86] drm/tidss: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 43/86] drm/tilcdc: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 44/86] drm/st7586: " Thomas Zimmermann
2024-08-21 13:48 ` David Lechner
2024-08-21 12:59 ` [PATCH v2 45/86] drm/st7735r: " Thomas Zimmermann
2024-08-21 13:48 ` David Lechner
2024-08-21 12:59 ` [PATCH v2 46/86] drm/tve200: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 47/86] drm/vc4: " Thomas Zimmermann
2024-08-21 17:21 ` Dave Stevenson
2024-08-21 12:59 ` [PATCH v2 48/86] drm/xlnx: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 49/86] drm/fbdev-dma: Remove obsolete setup function Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 50/86] drm/fbdev-shmem: Support struct drm_driver.fbdev_probe Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 51/86] drm/ast: Run DRM default client setup Thomas Zimmermann
2024-08-22 6:38 ` Jocelyn Falempe
2024-08-21 12:59 ` [PATCH v2 52/86] drm/cirrus: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 53/86] drm/gm12u320: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 54/86] drm/gud: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 55/86] drm/hyperv_drm: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 56/86] drm/mgag200: " Thomas Zimmermann
2024-08-22 6:38 ` Jocelyn Falempe
2024-08-21 12:59 ` [PATCH v2 57/86] drm/ofdrm: Use " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 58/86] drm/simpledrm: Run " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 59/86] drm/solomon: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 60/86] drm/udl: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 61/86] drm/virtgpu: " Thomas Zimmermann
2024-08-21 12:59 ` [PATCH v2 62/86] drm/vkms: " Thomas Zimmermann
2024-08-21 13:00 ` [PATCH v2 63/86] drm/fbdev-shmem: Remove obsolete setup function Thomas Zimmermann
2024-08-21 13:00 ` [PATCH v2 64/86] drm/fbdev-ttm: Support struct drm_driver.fbdev_probe Thomas Zimmermann
2024-08-21 13:00 ` [PATCH v2 65/86] drm/amdgpu: Run DRM default client setup Thomas Zimmermann
2024-08-22 14:03 ` Hamza Mahfooz
2024-08-22 14:32 ` Alex Deucher
2024-08-21 13:00 ` [PATCH v2 66/86] drm/bochs: " Thomas Zimmermann
2024-08-21 13:00 ` [PATCH v2 67/86] drm/hisilicon/hibmc: " Thomas Zimmermann
2024-08-21 13:00 ` [PATCH v2 68/86] drm/loongson: " Thomas Zimmermann
2024-08-21 13:00 ` [PATCH v2 69/86] drm/nouveau: " Thomas Zimmermann
2024-08-21 13:00 ` [PATCH v2 70/86] drm/qxl: " Thomas Zimmermann
2024-08-21 13:00 ` [PATCH v2 71/86] drm/vboxvideo: " Thomas Zimmermann
2024-08-21 13:00 ` [PATCH v2 72/86] drm/vmwgfx: " Thomas Zimmermann
2024-08-21 13:00 ` [PATCH v2 73/86] drm/fbdev-ttm: Remove obsolete setup function Thomas Zimmermann
2024-08-21 13:00 ` [PATCH v2 74/86] drm/armada: Run DRM default client setup Thomas Zimmermann
2024-08-21 13:00 ` [PATCH v2 75/86] drm/exynos-drm: " Thomas Zimmermann
2024-08-21 13:00 ` [PATCH v2 76/86] drm/gma500: " Thomas Zimmermann
2024-08-21 13:00 ` [PATCH v2 77/86] drm/msm: " Thomas Zimmermann
2024-08-21 13:00 ` [PATCH v2 78/86] drm/radeon: " Thomas Zimmermann
2024-08-22 16:47 ` Alex Deucher
2024-08-21 13:00 ` [PATCH v2 79/86] drm/tegra: " Thomas Zimmermann
2024-08-21 13:00 ` [PATCH v2 80/86] drm/i915: Remove struct drm_fb_helper from struct intel_fbdev Thomas Zimmermann
2024-08-21 13:00 ` [PATCH v2 81/86] drm/i915: Move custom restore code into separate callback Thomas Zimmermann
2024-08-21 13:00 ` [PATCH v2 82/86] drm/i915: Move custom hotplug " Thomas Zimmermann
2024-08-21 13:00 ` [PATCH v2 83/86] drm/{i915,xe}: Run DRM default client setup Thomas Zimmermann
2024-08-21 13:00 ` [PATCH v2 84/86] drm/omapdrm: Remove struct drm_fb_helper from struct omap_fbdev Thomas Zimmermann
2024-08-21 13:00 ` [PATCH v2 85/86] drm/omapdrm: Run DRM default client setup Thomas Zimmermann
2024-08-21 13:00 ` [PATCH v2 86/86] drm/fb-helper: Remove struct drm_fb_helper.fb_probe Thomas Zimmermann
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=20240821130348.73038-2-tzimmermann@suse.de \
--to=tzimmermann@suse.de \
--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=laurent.pinchart+renesas@ideasonboard.com \
--cc=nouveau@lists.freedesktop.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox