lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <6c037a3d-8061-422b-827b-c3795dd89477@suse.de>
Date: Wed, 28 Jan 2026 08:50:40 +0100
From: Thomas Zimmermann <tzimmermann@...e.de>
To: Icenowy Zheng <uwu@...nowy.me>, Andrzej Hajda <andrzej.hajda@...el.com>,
 Neil Armstrong <neil.armstrong@...aro.org>, Robert Foss <rfoss@...nel.org>,
 Laurent Pinchart <Laurent.pinchart@...asonboard.com>,
 Jonas Karlman <jonas@...boo.se>, Jernej Skrabec <jernej.skrabec@...il.com>,
 Maarten Lankhorst <maarten.lankhorst@...ux.intel.com>,
 Maxime Ripard <mripard@...nel.org>, David Airlie <airlied@...il.com>,
 Simona Vetter <simona@...ll.ch>, Rob Herring <robh@...nel.org>,
 Krzysztof Kozlowski <krzk+dt@...nel.org>, Conor Dooley
 <conor+dt@...nel.org>, Drew Fustini <fustini@...nel.org>,
 Guo Ren <guoren@...nel.org>, Fu Wei <wefu@...hat.com>
Cc: Philipp Zabel <p.zabel@...gutronix.de>,
 Dmitry Baryshkov <lumag@...nel.org>,
 Michal Wilczynski <m.wilczynski@...sung.com>,
 Luca Ceresoli <luca.ceresoli@...tlin.com>, Han Gao <rabenda.cn@...il.com>,
 Yao Zi <ziyao@...root.org>, linux-kernel@...r.kernel.org,
 dri-devel@...ts.freedesktop.org, devicetree@...r.kernel.org,
 linux-riscv@...ts.infradead.org, Han Gao <gaohan@...as.ac.cn>
Subject: Re: [PATCH v5 3/9] drm: verisilicon: add a driver for Verisilicon
 display controllers

Hi

Am 22.01.26 um 10:47 schrieb Icenowy Zheng:
> 在 2026-01-21星期三的 13:56 +0100,Thomas Zimmermann写道:
>
> =================== 8< ====================
>>> +void drm_format_to_vs_format(u32 drm_format, struct vs_format
>>> *vs_format)
>>> +{
>>> +       switch (drm_format) {
>>> +       case DRM_FORMAT_XRGB4444:
>>> +       case DRM_FORMAT_RGBX4444:
>>> +       case DRM_FORMAT_XBGR4444:
>>> +       case DRM_FORMAT_BGRX4444:
>>> +               vs_format->color = VSDC_COLOR_FORMAT_X4R4G4B4;
>>> +               break;
>>> +       case DRM_FORMAT_ARGB4444:
>>> +       case DRM_FORMAT_RGBA4444:
>>> +       case DRM_FORMAT_ABGR4444:
>>> +       case DRM_FORMAT_BGRA4444:
>>> +               vs_format->color = VSDC_COLOR_FORMAT_A4R4G4B4;
>>> +               break;
>>> +       case DRM_FORMAT_XRGB1555:
>>> +       case DRM_FORMAT_RGBX5551:
>>> +       case DRM_FORMAT_XBGR1555:
>>> +       case DRM_FORMAT_BGRX5551:
>>> +               vs_format->color = VSDC_COLOR_FORMAT_X1R5G5B5;
>>> +               break;
>>> +       case DRM_FORMAT_ARGB1555:
>>> +       case DRM_FORMAT_RGBA5551:
>>> +       case DRM_FORMAT_ABGR1555:
>>> +       case DRM_FORMAT_BGRA5551:
>>> +               vs_format->color = VSDC_COLOR_FORMAT_A1R5G5B5;
>>> +               break;
>>> +       case DRM_FORMAT_RGB565:
>>> +       case DRM_FORMAT_BGR565:
>>> +               vs_format->color = VSDC_COLOR_FORMAT_R5G6B5;
>>> +               break;
>>> +       case DRM_FORMAT_XRGB8888:
>>> +       case DRM_FORMAT_RGBX8888:
>>> +       case DRM_FORMAT_XBGR8888:
>>> +       case DRM_FORMAT_BGRX8888:
>>> +               vs_format->color = VSDC_COLOR_FORMAT_X8R8G8B8;
>>> +               break;
>>> +       case DRM_FORMAT_ARGB8888:
>>> +       case DRM_FORMAT_RGBA8888:
>>> +       case DRM_FORMAT_ABGR8888:
>>> +       case DRM_FORMAT_BGRA8888:
>>> +               vs_format->color = VSDC_COLOR_FORMAT_A8R8G8B8;
>>> +               break;
>>> +       case DRM_FORMAT_ARGB2101010:
>>> +       case DRM_FORMAT_RGBA1010102:
>>> +       case DRM_FORMAT_ABGR2101010:
>>> +       case DRM_FORMAT_BGRA1010102:
>>> +               vs_format->color = VSDC_COLOR_FORMAT_A2R10G10B10;
>>> +               break;
>>> +       default:
>>> +               DRM_WARN("Unexpected drm format!\n");
>> drm_warn(). If this can be invoked from user space,easily, better use
>> drm_dbg()
> This function is called during atomic_update of planes, and I think in
> this case the unknown formats should already be rejected because
> they're not advertised for any planes.
>
> Did I get it right on this?

Yes. In principle you should never reach the default case. This message 
is only for testing internally.

What I usually do is to compute such internal values in the atomic_check 
helper and then store them in the respective state. Here, you'd need a 
custom struct vs_plane_state to hold them. If the format conversion 
fails in atomic_check, it can still return an errno code to user space.

Doing this throughout the driver pushes all/most fail states before the 
'magic barrier.' [1]

[1] 
https://elixir.bootlin.com/linux/v6.19-rc5/source/drivers/gpu/drm/drm_atomic_helper.c#L2278


>
>>> +       }
>>> +
>>> +       switch (drm_format) {
>>> +       case DRM_FORMAT_RGBX4444:
>>> +       case DRM_FORMAT_RGBA4444:
>>> +       case DRM_FORMAT_RGBX5551:
>>> +       case DRM_FORMAT_RGBA5551:
>>> +       case DRM_FORMAT_RGBX8888:
>>> +       case DRM_FORMAT_RGBA8888:
>>> +       case DRM_FORMAT_RGBA1010102:
>>> +               vs_format->swizzle = VSDC_SWIZZLE_RGBA;
>>> +               break;
>>> +       case DRM_FORMAT_XBGR4444:
>>> +       case DRM_FORMAT_ABGR4444:
>>> +       case DRM_FORMAT_XBGR1555:
>>> +       case DRM_FORMAT_ABGR1555:
>>> +       case DRM_FORMAT_BGR565:
>>> +       case DRM_FORMAT_XBGR8888:
>>> +       case DRM_FORMAT_ABGR8888:
>>> +       case DRM_FORMAT_ABGR2101010:
>>> +               vs_format->swizzle = VSDC_SWIZZLE_ABGR;
>>> +               break;
>>> +       case DRM_FORMAT_BGRX4444:
>>> +       case DRM_FORMAT_BGRA4444:
>>> +       case DRM_FORMAT_BGRX5551:
>>> +       case DRM_FORMAT_BGRA5551:
>>> +       case DRM_FORMAT_BGRX8888:
>>> +       case DRM_FORMAT_BGRA8888:
>>> +       case DRM_FORMAT_BGRA1010102:
>>> +               vs_format->swizzle = VSDC_SWIZZLE_BGRA;
>>> +               break;
>>> +       default:
>>> +               /* N/A for YUV formats */
>>> +               vs_format->swizzle = VSDC_SWIZZLE_ARGB;
>>> +       }
>>> +
>>> +       /* N/A for non-YUV formats */
>>> +       vs_format->uv_swizzle = false;
>>> +}

These values could also go into vs_plane_state.

Best regard
Thomas


-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstr. 146, 90461 Nürnberg, Germany, www.suse.com
GF: Jochen Jaser, Andrew McDonald, Werner Knoblich, (HRB 36809, AG Nürnberg)



Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ