* [PATCH v8 01/11] drm/fourcc: Add warning for bad bpp
2026-01-28 17:25 [PATCH v8 00/11] drm: Add new pixel formats for Xilinx Zynqmp Tomi Valkeinen
@ 2026-01-28 17:25 ` Tomi Valkeinen
2026-01-28 17:25 ` [PATCH v8 02/11] drm/fourcc: Add DRM_FORMAT_XV15/XV20 Tomi Valkeinen
` (10 subsequent siblings)
11 siblings, 0 replies; 22+ messages in thread
From: Tomi Valkeinen @ 2026-01-28 17:25 UTC (permalink / raw)
To: Vishal Sagar, Anatoliy Klymenko, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Laurent Pinchart,
Michal Simek
Cc: dri-devel, linux-kernel, linux-arm-kernel, Geert Uytterhoeven,
Dmitry Baryshkov, Pekka Paalanen, Tomi Valkeinen
drm_format_info_bpp() cannot be used for formats which do not have an
integer bits-per-pixel in a pixel block.
E.g. DRM_FORMAT_XV15's (not yet in upstream) plane 0 has three 10-bit
pixels (Y components), and two padding bits, in a 4 byte block. That is
10.666... bits per pixel when considering the whole 4 byte block, which
is what drm_format_info_bpp() does. Thus a driver that supports such
formats cannot use drm_format_info_bpp(),
It is a driver bug if this happens, but so handle wrong calls by
printing a warning and returning 0.
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
---
drivers/gpu/drm/drm_fourcc.c | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c
index e0d533611040..e662aea9d105 100644
--- a/drivers/gpu/drm/drm_fourcc.c
+++ b/drivers/gpu/drm/drm_fourcc.c
@@ -491,12 +491,20 @@ EXPORT_SYMBOL(drm_format_info_block_height);
*/
unsigned int drm_format_info_bpp(const struct drm_format_info *info, int plane)
{
+ unsigned int block_size;
+
if (!info || plane < 0 || plane >= info->num_planes)
return 0;
- return info->char_per_block[plane] * 8 /
- (drm_format_info_block_width(info, plane) *
- drm_format_info_block_height(info, plane));
+ block_size = drm_format_info_block_width(info, plane) *
+ drm_format_info_block_height(info, plane);
+
+ if (info->char_per_block[plane] * 8 % block_size) {
+ pr_warn("unable to return an integer bpp\n");
+ return 0;
+ }
+
+ return info->char_per_block[plane] * 8 / block_size;
}
EXPORT_SYMBOL(drm_format_info_bpp);
--
2.43.0
^ permalink raw reply related [flat|nested] 22+ messages in thread* [PATCH v8 02/11] drm/fourcc: Add DRM_FORMAT_XV15/XV20
2026-01-28 17:25 [PATCH v8 00/11] drm: Add new pixel formats for Xilinx Zynqmp Tomi Valkeinen
2026-01-28 17:25 ` [PATCH v8 01/11] drm/fourcc: Add warning for bad bpp Tomi Valkeinen
@ 2026-01-28 17:25 ` Tomi Valkeinen
2026-03-19 15:15 ` Simon Ser
2026-01-28 17:25 ` [PATCH v8 03/11] drm/fourcc: Add DRM_FORMAT_Y8 Tomi Valkeinen
` (9 subsequent siblings)
11 siblings, 1 reply; 22+ messages in thread
From: Tomi Valkeinen @ 2026-01-28 17:25 UTC (permalink / raw)
To: Vishal Sagar, Anatoliy Klymenko, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Laurent Pinchart,
Michal Simek
Cc: dri-devel, linux-kernel, linux-arm-kernel, Geert Uytterhoeven,
Dmitry Baryshkov, Pekka Paalanen, Tomi Valkeinen,
Dmitry Baryshkov
Add two new pixel formats:
DRM_FORMAT_XV15 ("XV15")
DRM_FORMAT_XV20 ("XV20")
The formats are 2 plane 10 bit per component YCbCr, with the XV15 2x2
subsampled whereas XV20 is 2x1 subsampled.
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: Vishal Sagar <vishal.sagar@amd.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
---
drivers/gpu/drm/drm_fourcc.c | 6 ++++++
include/uapi/drm/drm_fourcc.h | 8 ++++++++
2 files changed, 14 insertions(+)
diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c
index e662aea9d105..b22ef86428a1 100644
--- a/drivers/gpu/drm/drm_fourcc.c
+++ b/drivers/gpu/drm/drm_fourcc.c
@@ -381,6 +381,12 @@ const struct drm_format_info *__drm_format_info(u32 format)
{ .format = DRM_FORMAT_S416, .depth = 0, .num_planes = 3,
.char_per_block = { 2, 2, 2 }, .block_w = { 1, 1, 1 }, .block_h = { 1, 1, 1 },
.hsub = 1, .vsub = 1, .is_yuv = true},
+ { .format = DRM_FORMAT_XV15, .depth = 0, .num_planes = 2,
+ .char_per_block = { 4, 8, 0 }, .block_w = { 3, 3, 0 }, .block_h = { 1, 1, 0 },
+ .hsub = 2, .vsub = 2, .is_yuv = true },
+ { .format = DRM_FORMAT_XV20, .depth = 0, .num_planes = 2,
+ .char_per_block = { 4, 8, 0 }, .block_w = { 3, 3, 0 }, .block_h = { 1, 1, 0 },
+ .hsub = 2, .vsub = 1, .is_yuv = true },
};
unsigned int i;
diff --git a/include/uapi/drm/drm_fourcc.h b/include/uapi/drm/drm_fourcc.h
index e527b24bd824..6c786701238e 100644
--- a/include/uapi/drm/drm_fourcc.h
+++ b/include/uapi/drm/drm_fourcc.h
@@ -322,6 +322,14 @@ extern "C" {
#define DRM_FORMAT_RGB565_A8 fourcc_code('R', '5', 'A', '8')
#define DRM_FORMAT_BGR565_A8 fourcc_code('B', '5', 'A', '8')
+/*
+ * 2 plane 10 bit per component YCrCb
+ * index 0 = Y plane, [31:0] x:Y2:Y1:Y0 2:10:10:10 little endian
+ * index 1 = Cb:Cr plane, [63:0] x:Cr2:Cb2:Cr1:x:Cb1:Cr0:Cb0 2:10:10:10:2:10:10:10 little endian
+ */
+#define DRM_FORMAT_XV15 fourcc_code('X', 'V', '1', '5') /* 2x2 subsampled Cr:Cb plane 2:10:10:10 */
+#define DRM_FORMAT_XV20 fourcc_code('X', 'V', '2', '0') /* 2x1 subsampled Cr:Cb plane 2:10:10:10 */
+
/*
* 2 plane YCbCr
* index 0 = Y plane, [7:0] Y
--
2.43.0
^ permalink raw reply related [flat|nested] 22+ messages in thread* Re: [PATCH v8 02/11] drm/fourcc: Add DRM_FORMAT_XV15/XV20
2026-01-28 17:25 ` [PATCH v8 02/11] drm/fourcc: Add DRM_FORMAT_XV15/XV20 Tomi Valkeinen
@ 2026-03-19 15:15 ` Simon Ser
2026-03-20 10:37 ` Tomi Valkeinen
0 siblings, 1 reply; 22+ messages in thread
From: Simon Ser @ 2026-03-19 15:15 UTC (permalink / raw)
To: Tomi Valkeinen
Cc: Vishal Sagar, Anatoliy Klymenko, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Laurent Pinchart,
Michal Simek, dri-devel, linux-kernel, linux-arm-kernel,
Geert Uytterhoeven, Dmitry Baryshkov, Pekka Paalanen,
Dmitry Baryshkov
What is the difference between DRM_FORMAT_XV15 and DRM_FORMAT_P030?
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH v8 02/11] drm/fourcc: Add DRM_FORMAT_XV15/XV20
2026-03-19 15:15 ` Simon Ser
@ 2026-03-20 10:37 ` Tomi Valkeinen
2026-03-26 14:48 ` Simon Ser
0 siblings, 1 reply; 22+ messages in thread
From: Tomi Valkeinen @ 2026-03-20 10:37 UTC (permalink / raw)
To: Simon Ser, Dave Stevenson
Cc: Vishal Sagar, Anatoliy Klymenko, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Laurent Pinchart,
Michal Simek, dri-devel, linux-kernel, linux-arm-kernel,
Geert Uytterhoeven, Dmitry Baryshkov, Pekka Paalanen,
Dmitry Baryshkov
Hi Simon, Dave,
On 19/03/2026 17:15, Simon Ser wrote:
> What is the difference between DRM_FORMAT_XV15 and DRM_FORMAT_P030?
Good question. I thought the Cr & Cb are swapped between those formats.
The VC4 driver uses HVS_PIXEL_ORDER_XYCBCR define, and the comment in
drm_fourcc.h starts with "YCbCr420". So, CbCr. But then the comments
then continue with CrCb.
XV15/20 isn't super clear either, starting with "YCrCb" but then "Cb:Cr
plane".
The components in the plane descriptions look identical though, hinting
they are the same. So to be sure, I tested it:
I had test pattern support for XV15/20 in pykms, which I can test on a
Xilinx board. P030 is a bit more difficult, as on RPi5 it requires
DRM_FORMAT_MOD_BROADCOM_SAND128. But with a linear -> SAND128 converter,
I was able to test linear NV12 converted to NV12+SAND128 and shown on
the screen (just for reference), and similarly linear XV15 ->
P030+SAND128. And, indeed, the linear XV15 test pattern shows correctly
on screen when converted to SAND128. So afaics XV15 is indeed identical
to P030, and I can drop XV15.
This then brings up the question about XV20. That format doesn't exist
yet, but should it then be named similarly to P030? However, I have no
idea what P030 means, so I don't know what a 2x1 subsampled P030 would
be called...
Thoughts/ideas? Or just keep XV20?
Tomi
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH v8 02/11] drm/fourcc: Add DRM_FORMAT_XV15/XV20
2026-03-20 10:37 ` Tomi Valkeinen
@ 2026-03-26 14:48 ` Simon Ser
0 siblings, 0 replies; 22+ messages in thread
From: Simon Ser @ 2026-03-26 14:48 UTC (permalink / raw)
To: Tomi Valkeinen
Cc: Dave Stevenson, Vishal Sagar, Anatoliy Klymenko,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
Simona Vetter, Laurent Pinchart, Michal Simek, dri-devel,
linux-kernel, linux-arm-kernel, Geert Uytterhoeven,
Dmitry Baryshkov, Pekka Paalanen, Dmitry Baryshkov
On Friday, March 20th, 2026 at 11:37, Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> wrote:
> On 19/03/2026 17:15, Simon Ser wrote:
> > What is the difference between DRM_FORMAT_XV15 and DRM_FORMAT_P030?
>
> Good question. I thought the Cr & Cb are swapped between those formats.
>
> The VC4 driver uses HVS_PIXEL_ORDER_XYCBCR define, and the comment in
> drm_fourcc.h starts with "YCbCr420". So, CbCr. But then the comments
> then continue with CrCb.
>
> XV15/20 isn't super clear either, starting with "YCrCb" but then "Cb:Cr
> plane".
>
> The components in the plane descriptions look identical though, hinting
> they are the same. So to be sure, I tested it:
>
> I had test pattern support for XV15/20 in pykms, which I can test on a
> Xilinx board. P030 is a bit more difficult, as on RPi5 it requires
> DRM_FORMAT_MOD_BROADCOM_SAND128. But with a linear -> SAND128 converter,
> I was able to test linear NV12 converted to NV12+SAND128 and shown on
> the screen (just for reference), and similarly linear XV15 ->
> P030+SAND128. And, indeed, the linear XV15 test pattern shows correctly
> on screen when converted to SAND128. So afaics XV15 is indeed identical
> to P030, and I can drop XV15.
>
> This then brings up the question about XV20. That format doesn't exist
> yet, but should it then be named similarly to P030? However, I have no
> idea what P030 means, so I don't know what a 2x1 subsampled P030 would
> be called...
>
> Thoughts/ideas? Or just keep XV20?
I've replied with some ideas on the new version's thread :)
^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH v8 03/11] drm/fourcc: Add DRM_FORMAT_Y8
2026-01-28 17:25 [PATCH v8 00/11] drm: Add new pixel formats for Xilinx Zynqmp Tomi Valkeinen
2026-01-28 17:25 ` [PATCH v8 01/11] drm/fourcc: Add warning for bad bpp Tomi Valkeinen
2026-01-28 17:25 ` [PATCH v8 02/11] drm/fourcc: Add DRM_FORMAT_XV15/XV20 Tomi Valkeinen
@ 2026-01-28 17:25 ` Tomi Valkeinen
2026-01-28 18:10 ` Laurent Pinchart
2026-01-28 17:25 ` [PATCH v8 04/11] drm/fourcc: Add DRM_FORMAT_Y10_P32 Tomi Valkeinen
` (8 subsequent siblings)
11 siblings, 1 reply; 22+ messages in thread
From: Tomi Valkeinen @ 2026-01-28 17:25 UTC (permalink / raw)
To: Vishal Sagar, Anatoliy Klymenko, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Laurent Pinchart,
Michal Simek
Cc: dri-devel, linux-kernel, linux-arm-kernel, Geert Uytterhoeven,
Dmitry Baryshkov, Pekka Paalanen, Tomi Valkeinen, Pekka Paalanen,
Dmitry Baryshkov
Add greyscale Y8 format.
The 8-bit greyscale format has been discussed before, and the earlier
guidance was to use DRM_FORMAT_R8, as a single-channel 8-bit pixel.
However, adding DRM_FORMAT_Y8 makes sense, we can mark it as 'is_yuv' in
the drm_format_info, and this can help the drivers handle e.g.
full/limited range. This will distinguish two single-channel formats:
R8, which is a RGB format with the same value for all components, and
Y8, which is a Y-only YCbCr format, with Cb and Cr being neutral.
Acked-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.com>
Reviewed-by: Vishal Sagar <vishal.sagar@amd.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
---
drivers/gpu/drm/drm_fourcc.c | 1 +
include/uapi/drm/drm_fourcc.h | 9 +++++++++
2 files changed, 10 insertions(+)
diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c
index b22ef86428a1..a39b9d7a5b62 100644
--- a/drivers/gpu/drm/drm_fourcc.c
+++ b/drivers/gpu/drm/drm_fourcc.c
@@ -275,6 +275,7 @@ const struct drm_format_info *__drm_format_info(u32 format)
{ .format = DRM_FORMAT_YVU422, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 2, .vsub = 1, .is_yuv = true },
{ .format = DRM_FORMAT_YUV444, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 1, .vsub = 1, .is_yuv = true },
{ .format = DRM_FORMAT_YVU444, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 1, .vsub = 1, .is_yuv = true },
+ { .format = DRM_FORMAT_Y8, .depth = 8, .num_planes = 1, .cpp = { 1, 0, 0 }, .hsub = 1, .vsub = 1, .is_yuv = true },
{ .format = DRM_FORMAT_NV12, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 2, .vsub = 2, .is_yuv = true },
{ .format = DRM_FORMAT_NV21, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 2, .vsub = 2, .is_yuv = true },
{ .format = DRM_FORMAT_NV16, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 2, .vsub = 1, .is_yuv = true },
diff --git a/include/uapi/drm/drm_fourcc.h b/include/uapi/drm/drm_fourcc.h
index 6c786701238e..e4451668499a 100644
--- a/include/uapi/drm/drm_fourcc.h
+++ b/include/uapi/drm/drm_fourcc.h
@@ -459,6 +459,15 @@ extern "C" {
#define DRM_FORMAT_YUV444 fourcc_code('Y', 'U', '2', '4') /* non-subsampled Cb (1) and Cr (2) planes */
#define DRM_FORMAT_YVU444 fourcc_code('Y', 'V', '2', '4') /* non-subsampled Cr (1) and Cb (2) planes */
+/*
+ * Y-only (greyscale) formats
+ *
+ * The Y-only formats are handled similarly to the YCbCr formats in the display
+ * pipeline, with the Cb and Cr implicitly neutral (0.0 in nominal values). This
+ * also means that COLOR_RANGE property applies to the Y-only formats.
+ */
+
+#define DRM_FORMAT_Y8 fourcc_code('G', 'R', 'E', 'Y') /* 8-bit Y-only */
/*
* Format Modifiers:
--
2.43.0
^ permalink raw reply related [flat|nested] 22+ messages in thread* Re: [PATCH v8 03/11] drm/fourcc: Add DRM_FORMAT_Y8
2026-01-28 17:25 ` [PATCH v8 03/11] drm/fourcc: Add DRM_FORMAT_Y8 Tomi Valkeinen
@ 2026-01-28 18:10 ` Laurent Pinchart
0 siblings, 0 replies; 22+ messages in thread
From: Laurent Pinchart @ 2026-01-28 18:10 UTC (permalink / raw)
To: Tomi Valkeinen
Cc: Vishal Sagar, Anatoliy Klymenko, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Michal Simek,
dri-devel, linux-kernel, linux-arm-kernel, Geert Uytterhoeven,
Dmitry Baryshkov, Pekka Paalanen, Pekka Paalanen,
Dmitry Baryshkov
On Wed, Jan 28, 2026 at 07:25:28PM +0200, Tomi Valkeinen wrote:
> Add greyscale Y8 format.
>
> The 8-bit greyscale format has been discussed before, and the earlier
> guidance was to use DRM_FORMAT_R8, as a single-channel 8-bit pixel.
>
> However, adding DRM_FORMAT_Y8 makes sense, we can mark it as 'is_yuv' in
> the drm_format_info, and this can help the drivers handle e.g.
> full/limited range. This will distinguish two single-channel formats:
> R8, which is a RGB format with the same value for all components, and
> Y8, which is a Y-only YCbCr format, with Cb and Cr being neutral.
>
> Acked-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.com>
> Reviewed-by: Vishal Sagar <vishal.sagar@amd.com>
> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> ---
> drivers/gpu/drm/drm_fourcc.c | 1 +
> include/uapi/drm/drm_fourcc.h | 9 +++++++++
> 2 files changed, 10 insertions(+)
>
> diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c
> index b22ef86428a1..a39b9d7a5b62 100644
> --- a/drivers/gpu/drm/drm_fourcc.c
> +++ b/drivers/gpu/drm/drm_fourcc.c
> @@ -275,6 +275,7 @@ const struct drm_format_info *__drm_format_info(u32 format)
> { .format = DRM_FORMAT_YVU422, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 2, .vsub = 1, .is_yuv = true },
> { .format = DRM_FORMAT_YUV444, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 1, .vsub = 1, .is_yuv = true },
> { .format = DRM_FORMAT_YVU444, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 1, .vsub = 1, .is_yuv = true },
> + { .format = DRM_FORMAT_Y8, .depth = 8, .num_planes = 1, .cpp = { 1, 0, 0 }, .hsub = 1, .vsub = 1, .is_yuv = true },
> { .format = DRM_FORMAT_NV12, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 2, .vsub = 2, .is_yuv = true },
> { .format = DRM_FORMAT_NV21, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 2, .vsub = 2, .is_yuv = true },
> { .format = DRM_FORMAT_NV16, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 2, .vsub = 1, .is_yuv = true },
> diff --git a/include/uapi/drm/drm_fourcc.h b/include/uapi/drm/drm_fourcc.h
> index 6c786701238e..e4451668499a 100644
> --- a/include/uapi/drm/drm_fourcc.h
> +++ b/include/uapi/drm/drm_fourcc.h
> @@ -459,6 +459,15 @@ extern "C" {
> #define DRM_FORMAT_YUV444 fourcc_code('Y', 'U', '2', '4') /* non-subsampled Cb (1) and Cr (2) planes */
> #define DRM_FORMAT_YVU444 fourcc_code('Y', 'V', '2', '4') /* non-subsampled Cr (1) and Cb (2) planes */
>
> +/*
> + * Y-only (greyscale) formats
> + *
> + * The Y-only formats are handled similarly to the YCbCr formats in the display
> + * pipeline, with the Cb and Cr implicitly neutral (0.0 in nominal values). This
> + * also means that COLOR_RANGE property applies to the Y-only formats.
> + */
> +
> +#define DRM_FORMAT_Y8 fourcc_code('G', 'R', 'E', 'Y') /* 8-bit Y-only */
>
> /*
> * Format Modifiers:
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH v8 04/11] drm/fourcc: Add DRM_FORMAT_Y10_P32
2026-01-28 17:25 [PATCH v8 00/11] drm: Add new pixel formats for Xilinx Zynqmp Tomi Valkeinen
` (2 preceding siblings ...)
2026-01-28 17:25 ` [PATCH v8 03/11] drm/fourcc: Add DRM_FORMAT_Y8 Tomi Valkeinen
@ 2026-01-28 17:25 ` Tomi Valkeinen
2026-03-19 14:59 ` Simon Ser
2026-01-28 17:25 ` [PATCH v8 05/11] drm/fourcc: Add DRM_FORMAT_X403 Tomi Valkeinen
` (7 subsequent siblings)
11 siblings, 1 reply; 22+ messages in thread
From: Tomi Valkeinen @ 2026-01-28 17:25 UTC (permalink / raw)
To: Vishal Sagar, Anatoliy Klymenko, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Laurent Pinchart,
Michal Simek
Cc: dri-devel, linux-kernel, linux-arm-kernel, Geert Uytterhoeven,
Dmitry Baryshkov, Pekka Paalanen, Tomi Valkeinen, Pekka Paalanen
Add Y10_P32, a 10 bit greyscale format, with 3 pixels packed into
32-bit container.
The fourcc for the format is 'YPA4', which comes from Y - Y only, P -
packed, A - 10 (as in 0xA), 4 - 4 bytes.
Reviewed-by: Vishal Sagar <vishal.sagar@amd.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
---
drivers/gpu/drm/drm_fourcc.c | 3 +++
include/uapi/drm/drm_fourcc.h | 1 +
2 files changed, 4 insertions(+)
diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c
index a39b9d7a5b62..0d222f6c1a30 100644
--- a/drivers/gpu/drm/drm_fourcc.c
+++ b/drivers/gpu/drm/drm_fourcc.c
@@ -388,6 +388,9 @@ const struct drm_format_info *__drm_format_info(u32 format)
{ .format = DRM_FORMAT_XV20, .depth = 0, .num_planes = 2,
.char_per_block = { 4, 8, 0 }, .block_w = { 3, 3, 0 }, .block_h = { 1, 1, 0 },
.hsub = 2, .vsub = 1, .is_yuv = true },
+ { .format = DRM_FORMAT_Y10_P32, .depth = 0, .num_planes = 1,
+ .char_per_block = { 4, 0, 0 }, .block_w = { 3, 0, 0 }, .block_h = { 1, 0, 0 },
+ .hsub = 1, .vsub = 1, .is_yuv = true },
};
unsigned int i;
diff --git a/include/uapi/drm/drm_fourcc.h b/include/uapi/drm/drm_fourcc.h
index e4451668499a..bf6a41462af5 100644
--- a/include/uapi/drm/drm_fourcc.h
+++ b/include/uapi/drm/drm_fourcc.h
@@ -468,6 +468,7 @@ extern "C" {
*/
#define DRM_FORMAT_Y8 fourcc_code('G', 'R', 'E', 'Y') /* 8-bit Y-only */
+#define DRM_FORMAT_Y10_P32 fourcc_code('Y', 'P', 'A', '4') /* [31:0] x:Y2:Y1:Y0 2:10:10:10 little endian */
/*
* Format Modifiers:
--
2.43.0
^ permalink raw reply related [flat|nested] 22+ messages in thread* Re: [PATCH v8 04/11] drm/fourcc: Add DRM_FORMAT_Y10_P32
2026-01-28 17:25 ` [PATCH v8 04/11] drm/fourcc: Add DRM_FORMAT_Y10_P32 Tomi Valkeinen
@ 2026-03-19 14:59 ` Simon Ser
2026-03-20 10:48 ` Tomi Valkeinen
0 siblings, 1 reply; 22+ messages in thread
From: Simon Ser @ 2026-03-19 14:59 UTC (permalink / raw)
To: Tomi Valkeinen
Cc: Vishal Sagar, Anatoliy Klymenko, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Laurent Pinchart,
Michal Simek, dri-devel, linux-kernel, linux-arm-kernel,
Geert Uytterhoeven, Dmitry Baryshkov, Pekka Paalanen,
Pekka Paalanen
On Wednesday, January 28th, 2026 at 18:25, Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> wrote:
> Add Y10_P32, a 10 bit greyscale format, with 3 pixels packed into
> 32-bit container.
>
> The fourcc for the format is 'YPA4', which comes from Y - Y only, P -
> packed, A - 10 (as in 0xA), 4 - 4 bytes.
I know we aren't super consistent about DRM format names, but… this _P32
suffix doesn't make sense to me: we never had it before, and a lot of
DRM formats are packed (in the Vulkan sense [1]), so I'm not sure why
this one would need it.
What's special about this one is that it's the first (AFAIK) which has
3 pixels per block. Some YCbCr formats are sub-sampled, but always use a
square block.
I would suggest something like YYYX1010102. We use the "channels
followed by bits per component" pattern elsewhere.
[1]: https://docs.vulkan.org/spec/latest/chapters/formats.html#formats-packed
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH v8 04/11] drm/fourcc: Add DRM_FORMAT_Y10_P32
2026-03-19 14:59 ` Simon Ser
@ 2026-03-20 10:48 ` Tomi Valkeinen
2026-03-26 13:55 ` Simon Ser
0 siblings, 1 reply; 22+ messages in thread
From: Tomi Valkeinen @ 2026-03-20 10:48 UTC (permalink / raw)
To: Simon Ser
Cc: Vishal Sagar, Anatoliy Klymenko, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Laurent Pinchart,
Michal Simek, dri-devel, linux-kernel, linux-arm-kernel,
Geert Uytterhoeven, Dmitry Baryshkov, Pekka Paalanen,
Pekka Paalanen
Hi,
On 19/03/2026 16:59, Simon Ser wrote:
> On Wednesday, January 28th, 2026 at 18:25, Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> wrote:
>
>> Add Y10_P32, a 10 bit greyscale format, with 3 pixels packed into
>> 32-bit container.
>>
>> The fourcc for the format is 'YPA4', which comes from Y - Y only, P -
>> packed, A - 10 (as in 0xA), 4 - 4 bytes.
>
> I know we aren't super consistent about DRM format names, but… this _P32
> suffix doesn't make sense to me: we never had it before, and a lot of
> DRM formats are packed (in the Vulkan sense [1]), so I'm not sure why
> this one would need it.
>
> What's special about this one is that it's the first (AFAIK) which has
> 3 pixels per block. Some YCbCr formats are sub-sampled, but always use a
> square block.
>
> I would suggest something like YYYX1010102. We use the "channels
> followed by bits per component" pattern elsewhere.
I'm ok with that. But wouldn't it be XYYY2101010 instead?
And then we just wait for someone to add a x:Y0:Y1:Y2 format (instead of
x:Y2:Y1:Y0). Should we be more specific, and already make this one
XY2Y1Y0_2101010...
Tomi
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH v8 04/11] drm/fourcc: Add DRM_FORMAT_Y10_P32
2026-03-20 10:48 ` Tomi Valkeinen
@ 2026-03-26 13:55 ` Simon Ser
0 siblings, 0 replies; 22+ messages in thread
From: Simon Ser @ 2026-03-26 13:55 UTC (permalink / raw)
To: Tomi Valkeinen
Cc: Vishal Sagar, Anatoliy Klymenko, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Laurent Pinchart,
Michal Simek, dri-devel, linux-kernel, linux-arm-kernel,
Geert Uytterhoeven, Dmitry Baryshkov, Pekka Paalanen,
Pekka Paalanen
On Friday, March 20th, 2026 at 11:48, Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> wrote:
> Hi,
>
> On 19/03/2026 16:59, Simon Ser wrote:
> > On Wednesday, January 28th, 2026 at 18:25, Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> wrote:
> >
> >> Add Y10_P32, a 10 bit greyscale format, with 3 pixels packed into
> >> 32-bit container.
> >>
> >> The fourcc for the format is 'YPA4', which comes from Y - Y only, P -
> >> packed, A - 10 (as in 0xA), 4 - 4 bytes.
> >
> > I know we aren't super consistent about DRM format names, but… this _P32
> > suffix doesn't make sense to me: we never had it before, and a lot of
> > DRM formats are packed (in the Vulkan sense [1]), so I'm not sure why
> > this one would need it.
> >
> > What's special about this one is that it's the first (AFAIK) which has
> > 3 pixels per block. Some YCbCr formats are sub-sampled, but always use a
> > square block.
> >
> > I would suggest something like YYYX1010102. We use the "channels
> > followed by bits per component" pattern elsewhere.
> I'm ok with that. But wouldn't it be XYYY2101010 instead?
Oh yes, indeed.
> And then we just wait for someone to add a x:Y0:Y1:Y2 format (instead of
> x:Y2:Y1:Y0). Should we be more specific, and already make this one
> XY2Y1Y0_2101010...
Looking at all existing YCbCr formats, they all use the Y2-Y1-Y0 ordering,
none of them use the reverse. So I'd say it's safe enough to just leave it
out and treat it as the default. We can think of a new pattern if/when we
hit the reverse case.
^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH v8 05/11] drm/fourcc: Add DRM_FORMAT_X403
2026-01-28 17:25 [PATCH v8 00/11] drm: Add new pixel formats for Xilinx Zynqmp Tomi Valkeinen
` (3 preceding siblings ...)
2026-01-28 17:25 ` [PATCH v8 04/11] drm/fourcc: Add DRM_FORMAT_Y10_P32 Tomi Valkeinen
@ 2026-01-28 17:25 ` Tomi Valkeinen
2026-01-28 17:25 ` [PATCH v8 06/11] drm/fourcc: Add DRM_FORMAT_XVUY2101010 Tomi Valkeinen
` (6 subsequent siblings)
11 siblings, 0 replies; 22+ messages in thread
From: Tomi Valkeinen @ 2026-01-28 17:25 UTC (permalink / raw)
To: Vishal Sagar, Anatoliy Klymenko, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Laurent Pinchart,
Michal Simek
Cc: dri-devel, linux-kernel, linux-arm-kernel, Geert Uytterhoeven,
Dmitry Baryshkov, Pekka Paalanen, Tomi Valkeinen
Add X403, a 3 plane 10 bits per component non-subsampled YCbCr format.
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Reviewed-by: Vishal Sagar <vishal.sagar@amd.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
---
drivers/gpu/drm/drm_fourcc.c | 3 +++
include/uapi/drm/drm_fourcc.h | 9 +++++++++
2 files changed, 12 insertions(+)
diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c
index 0d222f6c1a30..ab643dedd6d4 100644
--- a/drivers/gpu/drm/drm_fourcc.c
+++ b/drivers/gpu/drm/drm_fourcc.c
@@ -391,6 +391,9 @@ const struct drm_format_info *__drm_format_info(u32 format)
{ .format = DRM_FORMAT_Y10_P32, .depth = 0, .num_planes = 1,
.char_per_block = { 4, 0, 0 }, .block_w = { 3, 0, 0 }, .block_h = { 1, 0, 0 },
.hsub = 1, .vsub = 1, .is_yuv = true },
+ { .format = DRM_FORMAT_X403, .depth = 0, .num_planes = 3,
+ .char_per_block = { 4, 4, 4 }, .block_w = { 3, 3, 3 }, .block_h = { 1, 1, 1 },
+ .hsub = 1, .vsub = 1, .is_yuv = true },
};
unsigned int i;
diff --git a/include/uapi/drm/drm_fourcc.h b/include/uapi/drm/drm_fourcc.h
index bf6a41462af5..0128398b7936 100644
--- a/include/uapi/drm/drm_fourcc.h
+++ b/include/uapi/drm/drm_fourcc.h
@@ -403,6 +403,15 @@ extern "C" {
*/
#define DRM_FORMAT_Q401 fourcc_code('Q', '4', '0', '1')
+/*
+ * 3 plane non-subsampled (444) YCbCr
+ * 10 bpc, 30 bits per sample image data in a single contiguous buffer.
+ * index 0: Y plane, [31:0] x:Y2:Y1:Y0 [2:10:10:10] little endian
+ * index 1: Cb plane, [31:0] x:Cb2:Cb1:Cb0 [2:10:10:10] little endian
+ * index 2: Cr plane, [31:0] x:Cr2:Cr1:Cr0 [2:10:10:10] little endian
+ */
+#define DRM_FORMAT_X403 fourcc_code('X', '4', '0', '3')
+
/*
* 3 plane YCbCr LSB aligned
* In order to use these formats in a similar fashion to MSB aligned ones
--
2.43.0
^ permalink raw reply related [flat|nested] 22+ messages in thread* [PATCH v8 06/11] drm/fourcc: Add DRM_FORMAT_XVUY2101010
2026-01-28 17:25 [PATCH v8 00/11] drm: Add new pixel formats for Xilinx Zynqmp Tomi Valkeinen
` (4 preceding siblings ...)
2026-01-28 17:25 ` [PATCH v8 05/11] drm/fourcc: Add DRM_FORMAT_X403 Tomi Valkeinen
@ 2026-01-28 17:25 ` Tomi Valkeinen
2026-03-19 15:21 ` Simon Ser
2026-01-28 17:25 ` [PATCH v8 07/11] drm: xlnx: zynqmp: Use drm helpers when calculating buffer sizes Tomi Valkeinen
` (5 subsequent siblings)
11 siblings, 1 reply; 22+ messages in thread
From: Tomi Valkeinen @ 2026-01-28 17:25 UTC (permalink / raw)
To: Vishal Sagar, Anatoliy Klymenko, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Laurent Pinchart,
Michal Simek
Cc: dri-devel, linux-kernel, linux-arm-kernel, Geert Uytterhoeven,
Dmitry Baryshkov, Pekka Paalanen, Tomi Valkeinen
Add XVUY2101010, a 10 bits per component YCbCr format in a 32 bit
container.
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Vishal Sagar <vishal.sagar@amd.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
---
drivers/gpu/drm/drm_fourcc.c | 1 +
include/uapi/drm/drm_fourcc.h | 1 +
2 files changed, 2 insertions(+)
diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c
index ab643dedd6d4..a736df2de3fc 100644
--- a/drivers/gpu/drm/drm_fourcc.c
+++ b/drivers/gpu/drm/drm_fourcc.c
@@ -288,6 +288,7 @@ const struct drm_format_info *__drm_format_info(u32 format)
{ .format = DRM_FORMAT_VYUY, .depth = 0, .num_planes = 1, .cpp = { 2, 0, 0 }, .hsub = 2, .vsub = 1, .is_yuv = true },
{ .format = DRM_FORMAT_XYUV8888, .depth = 0, .num_planes = 1, .cpp = { 4, 0, 0 }, .hsub = 1, .vsub = 1, .is_yuv = true },
{ .format = DRM_FORMAT_VUY888, .depth = 0, .num_planes = 1, .cpp = { 3, 0, 0 }, .hsub = 1, .vsub = 1, .is_yuv = true },
+ { .format = DRM_FORMAT_XVUY2101010, .depth = 0, .num_planes = 1, .cpp = { 4, 0, 0 }, .hsub = 1, .vsub = 1, .is_yuv = true },
{ .format = DRM_FORMAT_AYUV, .depth = 0, .num_planes = 1, .cpp = { 4, 0, 0 }, .hsub = 1, .vsub = 1, .has_alpha = true, .is_yuv = true },
{ .format = DRM_FORMAT_Y210, .depth = 0, .num_planes = 1, .cpp = { 4, 0, 0 }, .hsub = 2, .vsub = 1, .is_yuv = true },
{ .format = DRM_FORMAT_Y212, .depth = 0, .num_planes = 1, .cpp = { 4, 0, 0 }, .hsub = 2, .vsub = 1, .is_yuv = true },
diff --git a/include/uapi/drm/drm_fourcc.h b/include/uapi/drm/drm_fourcc.h
index 0128398b7936..13e3c57046be 100644
--- a/include/uapi/drm/drm_fourcc.h
+++ b/include/uapi/drm/drm_fourcc.h
@@ -264,6 +264,7 @@ extern "C" {
#define DRM_FORMAT_XVUY8888 fourcc_code('X', 'V', 'U', 'Y') /* [31:0] X:Cr:Cb:Y 8:8:8:8 little endian */
#define DRM_FORMAT_VUY888 fourcc_code('V', 'U', '2', '4') /* [23:0] Cr:Cb:Y 8:8:8 little endian */
#define DRM_FORMAT_VUY101010 fourcc_code('V', 'U', '3', '0') /* Y followed by U then V, 10:10:10. Non-linear modifier only */
+#define DRM_FORMAT_XVUY2101010 fourcc_code('X', 'Y', '3', '0') /* [31:0] x:Cr:Cb:Y 2:10:10:10 little endian */
/*
* packed Y2xx indicate for each component, xx valid data occupy msb
--
2.43.0
^ permalink raw reply related [flat|nested] 22+ messages in thread* Re: [PATCH v8 06/11] drm/fourcc: Add DRM_FORMAT_XVUY2101010
2026-01-28 17:25 ` [PATCH v8 06/11] drm/fourcc: Add DRM_FORMAT_XVUY2101010 Tomi Valkeinen
@ 2026-03-19 15:21 ` Simon Ser
0 siblings, 0 replies; 22+ messages in thread
From: Simon Ser @ 2026-03-19 15:21 UTC (permalink / raw)
To: Tomi Valkeinen
Cc: Vishal Sagar, Anatoliy Klymenko, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Laurent Pinchart,
Michal Simek, dri-devel, linux-kernel, linux-arm-kernel,
Geert Uytterhoeven, Dmitry Baryshkov, Pekka Paalanen
Reviewed-by: Simon Ser <contact@emersion.fr>
^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH v8 07/11] drm: xlnx: zynqmp: Use drm helpers when calculating buffer sizes
2026-01-28 17:25 [PATCH v8 00/11] drm: Add new pixel formats for Xilinx Zynqmp Tomi Valkeinen
` (5 preceding siblings ...)
2026-01-28 17:25 ` [PATCH v8 06/11] drm/fourcc: Add DRM_FORMAT_XVUY2101010 Tomi Valkeinen
@ 2026-01-28 17:25 ` Tomi Valkeinen
2026-01-28 17:25 ` [PATCH v8 08/11] drm: xlnx: zynqmp: Add support for XV15 & XV20 Tomi Valkeinen
` (4 subsequent siblings)
11 siblings, 0 replies; 22+ messages in thread
From: Tomi Valkeinen @ 2026-01-28 17:25 UTC (permalink / raw)
To: Vishal Sagar, Anatoliy Klymenko, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Laurent Pinchart,
Michal Simek
Cc: dri-devel, linux-kernel, linux-arm-kernel, Geert Uytterhoeven,
Dmitry Baryshkov, Pekka Paalanen, Tomi Valkeinen
Use drm helpers, drm_format_info_plane_width(),
drm_format_info_plane_height() and drm_format_info_min_pitch() to
calculate sizes for the DMA.
This cleans up the code, but also makes it possible to support more
complex formats (like XV15, XV20).
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
---
drivers/gpu/drm/xlnx/zynqmp_disp.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/xlnx/zynqmp_disp.c b/drivers/gpu/drm/xlnx/zynqmp_disp.c
index 80d1e499a18d..b9883ea2d03e 100644
--- a/drivers/gpu/drm/xlnx/zynqmp_disp.c
+++ b/drivers/gpu/drm/xlnx/zynqmp_disp.c
@@ -1116,16 +1116,19 @@ int zynqmp_disp_layer_update(struct zynqmp_disp_layer *layer,
return 0;
for (i = 0; i < info->num_planes; i++) {
- unsigned int width = state->crtc_w / (i ? info->hsub : 1);
- unsigned int height = state->crtc_h / (i ? info->vsub : 1);
struct zynqmp_disp_layer_dma *dma = &layer->dmas[i];
struct dma_async_tx_descriptor *desc;
dma_addr_t dma_addr;
+ unsigned int width;
+ unsigned int height;
+
+ width = drm_format_info_plane_width(info, state->crtc_w, i);
+ height = drm_format_info_plane_height(info, state->crtc_h, i);
dma_addr = drm_fb_dma_get_gem_addr(state->fb, state, i);
dma->xt.numf = height;
- dma->sgl.size = width * info->cpp[i];
+ dma->sgl.size = drm_format_info_min_pitch(info, i, width);
dma->sgl.icg = state->fb->pitches[i] - dma->sgl.size;
dma->xt.src_start = dma_addr;
dma->xt.frame_size = 1;
--
2.43.0
^ permalink raw reply related [flat|nested] 22+ messages in thread* [PATCH v8 08/11] drm: xlnx: zynqmp: Add support for XV15 & XV20
2026-01-28 17:25 [PATCH v8 00/11] drm: Add new pixel formats for Xilinx Zynqmp Tomi Valkeinen
` (6 preceding siblings ...)
2026-01-28 17:25 ` [PATCH v8 07/11] drm: xlnx: zynqmp: Use drm helpers when calculating buffer sizes Tomi Valkeinen
@ 2026-01-28 17:25 ` Tomi Valkeinen
2026-01-28 17:25 ` [PATCH v8 09/11] drm: xlnx: zynqmp: Add support for Y8 and Y10_P32 Tomi Valkeinen
` (3 subsequent siblings)
11 siblings, 0 replies; 22+ messages in thread
From: Tomi Valkeinen @ 2026-01-28 17:25 UTC (permalink / raw)
To: Vishal Sagar, Anatoliy Klymenko, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Laurent Pinchart,
Michal Simek
Cc: dri-devel, linux-kernel, linux-arm-kernel, Geert Uytterhoeven,
Dmitry Baryshkov, Pekka Paalanen, Tomi Valkeinen
Add support for XV15 & XV20 formats.
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Vishal Sagar <vishal.sagar@amd.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
---
drivers/gpu/drm/xlnx/zynqmp_disp.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/drivers/gpu/drm/xlnx/zynqmp_disp.c b/drivers/gpu/drm/xlnx/zynqmp_disp.c
index b9883ea2d03e..1dc77f2e4262 100644
--- a/drivers/gpu/drm/xlnx/zynqmp_disp.c
+++ b/drivers/gpu/drm/xlnx/zynqmp_disp.c
@@ -297,6 +297,16 @@ static const struct zynqmp_disp_format avbuf_vid_fmts[] = {
.buf_fmt = ZYNQMP_DISP_AV_BUF_FMT_NL_VID_YV16CI_420,
.swap = true,
.sf = scaling_factors_888,
+ }, {
+ .drm_fmt = DRM_FORMAT_XV15,
+ .buf_fmt = ZYNQMP_DISP_AV_BUF_FMT_NL_VID_YV16CI_420_10,
+ .swap = false,
+ .sf = scaling_factors_101010,
+ }, {
+ .drm_fmt = DRM_FORMAT_XV20,
+ .buf_fmt = ZYNQMP_DISP_AV_BUF_FMT_NL_VID_YV16CI_10,
+ .swap = false,
+ .sf = scaling_factors_101010,
},
};
--
2.43.0
^ permalink raw reply related [flat|nested] 22+ messages in thread* [PATCH v8 09/11] drm: xlnx: zynqmp: Add support for Y8 and Y10_P32
2026-01-28 17:25 [PATCH v8 00/11] drm: Add new pixel formats for Xilinx Zynqmp Tomi Valkeinen
` (7 preceding siblings ...)
2026-01-28 17:25 ` [PATCH v8 08/11] drm: xlnx: zynqmp: Add support for XV15 & XV20 Tomi Valkeinen
@ 2026-01-28 17:25 ` Tomi Valkeinen
2026-01-28 18:11 ` Laurent Pinchart
2026-01-28 17:25 ` [PATCH v8 10/11] drm: xlnx: zynqmp: Add support for X403 Tomi Valkeinen
` (2 subsequent siblings)
11 siblings, 1 reply; 22+ messages in thread
From: Tomi Valkeinen @ 2026-01-28 17:25 UTC (permalink / raw)
To: Vishal Sagar, Anatoliy Klymenko, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Laurent Pinchart,
Michal Simek
Cc: dri-devel, linux-kernel, linux-arm-kernel, Geert Uytterhoeven,
Dmitry Baryshkov, Pekka Paalanen, Tomi Valkeinen
Add support for Y8 and Y10_P32 formats. We also need to add new csc
matrices for the y-only formats.
Reviewed-by: Vishal Sagar <vishal.sagar@amd.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
---
drivers/gpu/drm/xlnx/zynqmp_disp.c | 27 ++++++++++++++++++++++++++-
1 file changed, 26 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/xlnx/zynqmp_disp.c b/drivers/gpu/drm/xlnx/zynqmp_disp.c
index 1dc77f2e4262..57bb6d1dd10a 100644
--- a/drivers/gpu/drm/xlnx/zynqmp_disp.c
+++ b/drivers/gpu/drm/xlnx/zynqmp_disp.c
@@ -307,6 +307,16 @@ static const struct zynqmp_disp_format avbuf_vid_fmts[] = {
.buf_fmt = ZYNQMP_DISP_AV_BUF_FMT_NL_VID_YV16CI_10,
.swap = false,
.sf = scaling_factors_101010,
+ }, {
+ .drm_fmt = DRM_FORMAT_Y8,
+ .buf_fmt = ZYNQMP_DISP_AV_BUF_FMT_NL_VID_MONO,
+ .swap = false,
+ .sf = scaling_factors_888,
+ }, {
+ .drm_fmt = DRM_FORMAT_Y10_P32,
+ .buf_fmt = ZYNQMP_DISP_AV_BUF_FMT_NL_VID_YONLY_10,
+ .swap = false,
+ .sf = scaling_factors_101010,
},
};
@@ -697,6 +707,17 @@ static const u32 csc_sdtv_to_rgb_offsets[] = {
0x0, 0x1800, 0x1800
};
+/* In Y-only mode the single Y channel is on the third column */
+static const u16 csc_sdtv_to_rgb_yonly_matrix[] = {
+ 0x0, 0x0, 0x1000,
+ 0x0, 0x0, 0x1000,
+ 0x0, 0x0, 0x1000,
+};
+
+static const u32 csc_sdtv_to_rgb_yonly_offsets[] = {
+ 0x0, 0x0, 0x0
+};
+
/**
* zynqmp_disp_blend_set_output_format - Set the output format of the blender
* @disp: Display controller
@@ -846,7 +867,11 @@ static void zynqmp_disp_blend_layer_enable(struct zynqmp_disp *disp,
ZYNQMP_DISP_V_BLEND_LAYER_CONTROL(layer->id),
val);
- if (layer->drm_fmt->is_yuv) {
+ if (layer->drm_fmt->format == DRM_FORMAT_Y8 ||
+ layer->drm_fmt->format == DRM_FORMAT_Y10_P32) {
+ coeffs = csc_sdtv_to_rgb_yonly_matrix;
+ offsets = csc_sdtv_to_rgb_yonly_offsets;
+ } else if (layer->drm_fmt->is_yuv) {
coeffs = csc_sdtv_to_rgb_matrix;
offsets = csc_sdtv_to_rgb_offsets;
} else {
--
2.43.0
^ permalink raw reply related [flat|nested] 22+ messages in thread* Re: [PATCH v8 09/11] drm: xlnx: zynqmp: Add support for Y8 and Y10_P32
2026-01-28 17:25 ` [PATCH v8 09/11] drm: xlnx: zynqmp: Add support for Y8 and Y10_P32 Tomi Valkeinen
@ 2026-01-28 18:11 ` Laurent Pinchart
0 siblings, 0 replies; 22+ messages in thread
From: Laurent Pinchart @ 2026-01-28 18:11 UTC (permalink / raw)
To: Tomi Valkeinen
Cc: Vishal Sagar, Anatoliy Klymenko, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Michal Simek,
dri-devel, linux-kernel, linux-arm-kernel, Geert Uytterhoeven,
Dmitry Baryshkov, Pekka Paalanen
On Wed, Jan 28, 2026 at 07:25:34PM +0200, Tomi Valkeinen wrote:
> Add support for Y8 and Y10_P32 formats. We also need to add new csc
> matrices for the y-only formats.
>
> Reviewed-by: Vishal Sagar <vishal.sagar@amd.com>
> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> ---
> drivers/gpu/drm/xlnx/zynqmp_disp.c | 27 ++++++++++++++++++++++++++-
> 1 file changed, 26 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/xlnx/zynqmp_disp.c b/drivers/gpu/drm/xlnx/zynqmp_disp.c
> index 1dc77f2e4262..57bb6d1dd10a 100644
> --- a/drivers/gpu/drm/xlnx/zynqmp_disp.c
> +++ b/drivers/gpu/drm/xlnx/zynqmp_disp.c
> @@ -307,6 +307,16 @@ static const struct zynqmp_disp_format avbuf_vid_fmts[] = {
> .buf_fmt = ZYNQMP_DISP_AV_BUF_FMT_NL_VID_YV16CI_10,
> .swap = false,
> .sf = scaling_factors_101010,
> + }, {
> + .drm_fmt = DRM_FORMAT_Y8,
> + .buf_fmt = ZYNQMP_DISP_AV_BUF_FMT_NL_VID_MONO,
> + .swap = false,
> + .sf = scaling_factors_888,
> + }, {
> + .drm_fmt = DRM_FORMAT_Y10_P32,
> + .buf_fmt = ZYNQMP_DISP_AV_BUF_FMT_NL_VID_YONLY_10,
> + .swap = false,
> + .sf = scaling_factors_101010,
> },
> };
>
> @@ -697,6 +707,17 @@ static const u32 csc_sdtv_to_rgb_offsets[] = {
> 0x0, 0x1800, 0x1800
> };
>
> +/* In Y-only mode the single Y channel is on the third column */
> +static const u16 csc_sdtv_to_rgb_yonly_matrix[] = {
> + 0x0, 0x0, 0x1000,
> + 0x0, 0x0, 0x1000,
> + 0x0, 0x0, 0x1000,
> +};
> +
> +static const u32 csc_sdtv_to_rgb_yonly_offsets[] = {
> + 0x0, 0x0, 0x0
> +};
> +
> /**
> * zynqmp_disp_blend_set_output_format - Set the output format of the blender
> * @disp: Display controller
> @@ -846,7 +867,11 @@ static void zynqmp_disp_blend_layer_enable(struct zynqmp_disp *disp,
> ZYNQMP_DISP_V_BLEND_LAYER_CONTROL(layer->id),
> val);
>
> - if (layer->drm_fmt->is_yuv) {
> + if (layer->drm_fmt->format == DRM_FORMAT_Y8 ||
> + layer->drm_fmt->format == DRM_FORMAT_Y10_P32) {
> + coeffs = csc_sdtv_to_rgb_yonly_matrix;
> + offsets = csc_sdtv_to_rgb_yonly_offsets;
> + } else if (layer->drm_fmt->is_yuv) {
> coeffs = csc_sdtv_to_rgb_matrix;
> offsets = csc_sdtv_to_rgb_offsets;
> } else {
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH v8 10/11] drm: xlnx: zynqmp: Add support for X403
2026-01-28 17:25 [PATCH v8 00/11] drm: Add new pixel formats for Xilinx Zynqmp Tomi Valkeinen
` (8 preceding siblings ...)
2026-01-28 17:25 ` [PATCH v8 09/11] drm: xlnx: zynqmp: Add support for Y8 and Y10_P32 Tomi Valkeinen
@ 2026-01-28 17:25 ` Tomi Valkeinen
2026-01-28 17:25 ` [PATCH v8 11/11] drm: xlnx: zynqmp: Add support for XVUY2101010 Tomi Valkeinen
2026-03-03 13:34 ` [PATCH v8 00/11] drm: Add new pixel formats for Xilinx Zynqmp Tomi Valkeinen
11 siblings, 0 replies; 22+ messages in thread
From: Tomi Valkeinen @ 2026-01-28 17:25 UTC (permalink / raw)
To: Vishal Sagar, Anatoliy Klymenko, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Laurent Pinchart,
Michal Simek
Cc: dri-devel, linux-kernel, linux-arm-kernel, Geert Uytterhoeven,
Dmitry Baryshkov, Pekka Paalanen, Tomi Valkeinen
Add support for X403 format.
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Vishal Sagar <vishal.sagar@amd.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
---
drivers/gpu/drm/xlnx/zynqmp_disp.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/gpu/drm/xlnx/zynqmp_disp.c b/drivers/gpu/drm/xlnx/zynqmp_disp.c
index 57bb6d1dd10a..98105d1c4456 100644
--- a/drivers/gpu/drm/xlnx/zynqmp_disp.c
+++ b/drivers/gpu/drm/xlnx/zynqmp_disp.c
@@ -317,6 +317,11 @@ static const struct zynqmp_disp_format avbuf_vid_fmts[] = {
.buf_fmt = ZYNQMP_DISP_AV_BUF_FMT_NL_VID_YONLY_10,
.swap = false,
.sf = scaling_factors_101010,
+ }, {
+ .drm_fmt = DRM_FORMAT_X403,
+ .buf_fmt = ZYNQMP_DISP_AV_BUF_FMT_NL_VID_YV24_10,
+ .swap = false,
+ .sf = scaling_factors_101010,
},
};
--
2.43.0
^ permalink raw reply related [flat|nested] 22+ messages in thread* [PATCH v8 11/11] drm: xlnx: zynqmp: Add support for XVUY2101010
2026-01-28 17:25 [PATCH v8 00/11] drm: Add new pixel formats for Xilinx Zynqmp Tomi Valkeinen
` (9 preceding siblings ...)
2026-01-28 17:25 ` [PATCH v8 10/11] drm: xlnx: zynqmp: Add support for X403 Tomi Valkeinen
@ 2026-01-28 17:25 ` Tomi Valkeinen
2026-03-03 13:34 ` [PATCH v8 00/11] drm: Add new pixel formats for Xilinx Zynqmp Tomi Valkeinen
11 siblings, 0 replies; 22+ messages in thread
From: Tomi Valkeinen @ 2026-01-28 17:25 UTC (permalink / raw)
To: Vishal Sagar, Anatoliy Klymenko, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Laurent Pinchart,
Michal Simek
Cc: dri-devel, linux-kernel, linux-arm-kernel, Geert Uytterhoeven,
Dmitry Baryshkov, Pekka Paalanen, Tomi Valkeinen
Add support for XVUY2101010 format.
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Vishal Sagar <vishal.sagar@amd.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
---
drivers/gpu/drm/xlnx/zynqmp_disp.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/gpu/drm/xlnx/zynqmp_disp.c b/drivers/gpu/drm/xlnx/zynqmp_disp.c
index 98105d1c4456..a00a57c6dcca 100644
--- a/drivers/gpu/drm/xlnx/zynqmp_disp.c
+++ b/drivers/gpu/drm/xlnx/zynqmp_disp.c
@@ -322,6 +322,11 @@ static const struct zynqmp_disp_format avbuf_vid_fmts[] = {
.buf_fmt = ZYNQMP_DISP_AV_BUF_FMT_NL_VID_YV24_10,
.swap = false,
.sf = scaling_factors_101010,
+ }, {
+ .drm_fmt = DRM_FORMAT_XVUY2101010,
+ .buf_fmt = ZYNQMP_DISP_AV_BUF_FMT_NL_VID_YUV444_10,
+ .swap = false,
+ .sf = scaling_factors_101010,
},
};
--
2.43.0
^ permalink raw reply related [flat|nested] 22+ messages in thread* Re: [PATCH v8 00/11] drm: Add new pixel formats for Xilinx Zynqmp
2026-01-28 17:25 [PATCH v8 00/11] drm: Add new pixel formats for Xilinx Zynqmp Tomi Valkeinen
` (10 preceding siblings ...)
2026-01-28 17:25 ` [PATCH v8 11/11] drm: xlnx: zynqmp: Add support for XVUY2101010 Tomi Valkeinen
@ 2026-03-03 13:34 ` Tomi Valkeinen
11 siblings, 0 replies; 22+ messages in thread
From: Tomi Valkeinen @ 2026-03-03 13:34 UTC (permalink / raw)
To: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
Simona Vetter
Cc: dri-devel, linux-kernel, linux-arm-kernel, Geert Uytterhoeven,
Dmitry Baryshkov, Pekka Paalanen, Pekka Paalanen,
Dmitry Baryshkov, Anatoliy Klymenko, Vishal Sagar,
Laurent Pinchart, Michal Simek
Hi Maarten, Maxime, Thomas,
We've got multiple R-b's for all of the patches. Can this be merged? Or
give an ack for the fourcc ones and I can push via drm-misc.
Tomi
On 28/01/2026 19:25, Tomi Valkeinen wrote:
> Add new DRM pixel formats and add support for those in the Xilinx zynqmp
> display driver.
>
> All other formats except XVUY2101010 are already supported in upstream
> gstreamer, but gstreamer's kmssink does not have the support yet, as it
> obviously cannot support the formats without kernel having the formats.
>
> Xilinx has support for these formats in their BSP kernel, and Xilinx has
> a branch here, adding the support to gstreamer kmssink:
>
> https://github.com/Xilinx/gst-plugins-bad.git xlnx-rebase-v1.18.5
>
> New formats added:
>
> DRM_FORMAT_Y8
> - 8-bit Y-only
> - fourcc: "GREY"
> - gstreamer: GRAY8
>
> DRM_FORMAT_Y10_P32
> - 10-bit Y-only, three pixels packed into 32-bits
> - fourcc: "YPA4"
> - gstreamer: GRAY10_LE32
>
> DRM_FORMAT_XV15
> - Like NV12, but with 10-bit components
> - fourcc: "XV15"
> - gstreamer: NV12_10LE32
>
> DRM_FORMAT_XV20
> - Like NV16, but with 10-bit components
> - fourcc: "XV20"
> - gstreamer: NV16_10LE32
>
> DRM_FORMAT_X403
> - 10-bit planar 4:4:4, with three samples packed into 32-bits
> - fourcc: "X403"
> - gstreamer: Y444_10LE32
>
> XVUY2101010
> - 10-bit 4:4:4, one pixel in 32 bits
> - fourcc: "XY30"
>
> Some notes:
>
> I know the 8-bit greyscale format has been discussed before, and the
> guidance was to use DRM_FORMAT_R8. While I'm not totally against that, I
> would argue that adding DRM_FORMAT_Y8 makes sense, as:
>
> 1) We can mark it as 'is_yuv' in the drm_format_info, and this can help
> the drivers handle e.g. full/limited range. Probably some hardware
> handles grayscale as a value used for all RGB components, in which case
> R8 makes sense, but when the hardware handles the Y-only pixels as YCbCr,
> where Cb and Cr are "neutral", it makes more sense to consider the
> format as an YUV format rather than RGB.
>
> 2) We can have the same fourcc as in v4l2. While not strictly necessary,
> it's a constant source of confusion when the fourccs differ.
>
> 3) It (possibly) makes more sense for the user to use Y8/GREY format
> instead of R8, as, in my experience, the documentation usually refers
> to gray(scale) format or Y-only format.
>
> As we add new Y-only formats, it makes sense to have similar terms, so
> we need to adjust the Y10_P32 format name accordingly.
>
> I have made some adjustments to the formats compared to the Xilinx's
> branch. E.g. The DRM_FORMAT_Y10_P32 format in Xilinx's kmssink uses
> fourcc "Y10 ", and DRM_FORMAT_Y10. I didn't like those, as the format is
> a packed format, three 10-bit pixels in a 32-bit container, and I think
> Y10 means a 10-bit pixel in a 16-bit container.
>
> Generally speaking, if someone has good ideas for the format define
> names or fourccs, speak up, as it's not easy to invent good names =).
> That said, keeping them the same as in the Xilinx trees will, of course,
> be slightly easier for the users of Xilinx platforms.
>
> I made WIP additions to modetest to support most of these formats,
> partially based on Xilinx's code:
>
> https://github.com/tomba/libdrm.git xilinx
>
> A few thoughts about that:
>
> modetest uses bo_create_dumb(), and as highlighted in recent discussions
> in the kernel list [1], dumb buffers are only for RGB formats. They may
> work for non-RGB formats, but that's platform specific. None of the
> formats I add here are RGB formats. Do we want to go this way with
> modetest?
>
> I also feel that the current structure of modetest is not well suited to
> more complicated formats. Both the buffer allocation is a bit more
> difficult (see "Add virtual_width and pixels_per_container"), and the
> drawing is complicated (see, e.g., "Add support for DRM_FORMAT_XV15 &
> DRM_FORMAT_XV20").
>
> I have recently added support for these Xilinx formats to both kms++ [2] and
> pykms/pixutils [3][4] (WIP), and it's not been easy... But I have to say I
> think I like the template based version in kms++. That won't work in
> modetest, of course, but a non-templated version might be implementable,
> but probably much slower.
>
> In any case, I slighly feel it's not worth merging the modetest patches
> I have for these formats: they complicate the code quite a bit, break
> the RGB-only rule, and I'm not sure if there really are (m)any users. If
> we want to add support to modetest, I think a bigger rewrite of the test
> pattern code might be in order.
>
> [1] https://lore.kernel.org/all/20250109150310.219442-26-tzimmermann%40suse.de/
> [2] git@github.com:tomba/kmsxx.git xilinx
> [3] git@github.com:tomba/pykms.git xilinx
> [4] git@github.com:tomba/pixutils.git xilinx
>
> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
> ---
> Changes in v8:
> - Expand the "drm/fourcc: Add DRM_FORMAT_Y8" commit description to
> explain the rationale
> - Add comment to "drm: xlnx: zynqmp: Add support for Y8 and Y10_P32"
> explainig the Y-only matrix
> - Remove extra blank line
> - Link to v7: https://lore.kernel.org/r/20251201-xilinx-formats-v7-0-1e1558adfefc@ideasonboard.com
>
> Changes in v7:
> - Added Reviewed-bys
> - Rebased on v6.18
> - Link to v6: https://lore.kernel.org/r/20251001-xilinx-formats-v6-0-014b076b542a@ideasonboard.com
>
> Changes in v6:
> - Added tags for reviews
> - Rebased on v6.17
> - Link to v5: https://lore.kernel.org/r/20250425-xilinx-formats-v5-0-c74263231630@ideasonboard.com
>
> Changes in v5:
> - Add comment about Y-only formats, clarifying how the display pipeline
> handles them (they're handled as YCbCr, with Cb and Cr as "neutral")
> - Clarify X403 format in the patch description
> - Set unused Y-only CSC offsets to 0 (instead of 0x1800).
> - Add R-bs
> - Link to v4: https://lore.kernel.org/r/20250326-xilinx-formats-v4-0-322a300c6d72@ideasonboard.com
>
> Changes in v4:
> - Reformat the drm_format_info entries a bit
> - Calculate block size only once in drm_format_info_bpp()
> - Declare local variables in separate lines
> - Add review tags
> - Fix commit message referring to Y10_LE32 (should be Y10_P32)
> - Link to v3: https://lore.kernel.org/r/20250212-xilinx-formats-v3-0-90d0fe106995@ideasonboard.com
>
> Changes in v3:
> - Drop "drm: xlnx: zynqmp: Fix max dma segment size". It is already
> pushed.
> - Add XVUY2101010 format.
> - Rename DRM_FORMAT_Y10_LE32 to DRM_FORMAT_Y10_P32.
> - Link to v2: https://lore.kernel.org/r/20250115-xilinx-formats-v2-0-160327ca652a@ideasonboard.com
>
> Changes in v2:
> - I noticed V4L2 already has fourcc Y10P, referring to MIPI-style packed
> Y10 format. So I changed Y10_LE32 fourcc to YPA4. If logic has any
> relevance here, P means packed, A means 10, 4 means "in 4 bytes".
> - Added tags to "Fix max dma segment size" patch
> - Updated description for "Add warning for bad bpp"
> - Link to v1: https://lore.kernel.org/r/20241204-xilinx-formats-v1-0-0bf2c5147db1@ideasonboard.com
>
> ---
> Tomi Valkeinen (11):
> drm/fourcc: Add warning for bad bpp
> drm/fourcc: Add DRM_FORMAT_XV15/XV20
> drm/fourcc: Add DRM_FORMAT_Y8
> drm/fourcc: Add DRM_FORMAT_Y10_P32
> drm/fourcc: Add DRM_FORMAT_X403
> drm/fourcc: Add DRM_FORMAT_XVUY2101010
> drm: xlnx: zynqmp: Use drm helpers when calculating buffer sizes
> drm: xlnx: zynqmp: Add support for XV15 & XV20
> drm: xlnx: zynqmp: Add support for Y8 and Y10_P32
> drm: xlnx: zynqmp: Add support for X403
> drm: xlnx: zynqmp: Add support for XVUY2101010
>
> drivers/gpu/drm/drm_fourcc.c | 28 +++++++++++++++++--
> drivers/gpu/drm/xlnx/zynqmp_disp.c | 56 +++++++++++++++++++++++++++++++++++---
> include/uapi/drm/drm_fourcc.h | 28 +++++++++++++++++++
> 3 files changed, 105 insertions(+), 7 deletions(-)
> ---
> base-commit: 7d0a66e4bb9081d75c82ec4957c50034cb0ea449
> change-id: 20241120-xilinx-formats-f71901621833
>
> Best regards,
^ permalink raw reply [flat|nested] 22+ messages in thread