* [PATCH v5 0/2] drm/rockchip: vop: Add NV15, NV20 and NV30 support
@ 2023-10-23 17:37 Jonas Karlman
2023-10-23 17:37 ` [PATCH v5 1/2] drm/fourcc: Add NV20 and NV30 YUV formats Jonas Karlman
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Jonas Karlman @ 2023-10-23 17:37 UTC (permalink / raw)
To: Heiko Stuebner, Sandy Huang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Daniel Vetter
Cc: Christopher Obbard, dri-devel, linux-rockchip, linux-arm-kernel,
linux-kernel, Jonas Karlman
This series add support for displaying 10-bit 4:2:0 and 4:2:2 formats produced
by the Rockchip Video Decoder on RK322X, RK3288, RK3328, RK3368 and RK3399.
Also include 10-bit 4:4:4 support since VOP can support that also.
First patch adds new fourcc 10-bit YUV formats with 4:2:2/4:4:4 sub-sampling.
Second patch adds support for displaying the new fourcc formats.
These patches have been in use by LibreELEC and other distros for the
past 3+ years, hoping they can be merged this time around.
A rough libdrm/modetest patch [2] have been used to validate use of
NV15, NV20 and NV30 formats on RK3288, RK3328 and RK3399 boards.
modetest -s <connector_id>@<crtc_id>:<mode>-<vrefresh>@<format>
Tinker Board R2.0 (rk3288w):
modetest -s 50:1920x1080-60@NV15
Rock Pi 4 (rk3399):
modetest -s 52@44:1920x1080-60@NV15
Rock64 (rk3328):
modetest -s 42:1920x1080-60@NV15
Changes in v5:
- Use drm_format_info_min_pitch() for correct bpp
- Add missing NV21, NV61 and NV42 formats
Changes in v4:
- Rework RK3328/RK3399 win0/1 data to not affect RK3368
Changes in v3:
- No changes, rebased on next-20230616
- R-B tags was collected
Changes in v2:
- Add NV30 format
- R-B tags was not collected due to NV30 changes
This series is also available at [1] and libdrm/modetest patch at [2].
[1] https://github.com/Kwiboo/linux-rockchip/commits/v6.6-rc7-vop-nv15
[2] https://github.com/Kwiboo/libdrm/commits/nv15
Jonas Karlman (2):
drm/fourcc: Add NV20 and NV30 YUV formats
drm/rockchip: vop: Add NV15, NV20 and NV30 support
drivers/gpu/drm/drm_fourcc.c | 8 +++
drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 36 ++++++++---
drivers/gpu/drm/rockchip/rockchip_drm_vop.h | 1 +
drivers/gpu/drm/rockchip/rockchip_vop_reg.c | 66 +++++++++++++++++----
include/uapi/drm/drm_fourcc.h | 2 +
5 files changed, 96 insertions(+), 17 deletions(-)
--
2.42.0
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v5 1/2] drm/fourcc: Add NV20 and NV30 YUV formats
2023-10-23 17:37 [PATCH v5 0/2] drm/rockchip: vop: Add NV15, NV20 and NV30 support Jonas Karlman
@ 2023-10-23 17:37 ` Jonas Karlman
2023-10-23 17:53 ` Christopher Obbard
2023-10-23 17:37 ` [PATCH v5 2/2] drm/rockchip: vop: Add NV15, NV20 and NV30 support Jonas Karlman
` (2 subsequent siblings)
3 siblings, 1 reply; 8+ messages in thread
From: Jonas Karlman @ 2023-10-23 17:37 UTC (permalink / raw)
To: Heiko Stuebner, Sandy Huang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Daniel Vetter
Cc: Christopher Obbard, dri-devel, linux-rockchip, linux-arm-kernel,
linux-kernel, Jonas Karlman
DRM_FORMAT_NV20 and DRM_FORMAT_NV30 formats is the 2x1 and non-subsampled
variant of NV15, a 10-bit 2-plane YUV format that has no padding between
components. Instead, luminance and chrominance samples are grouped into 4s
so that each group is packed into an integer number of bytes:
YYYY = UVUV = 4 * 10 bits = 40 bits = 5 bytes
The '20' and '30' suffix refers to the optimum effective bits per pixel
which is achieved when the total number of luminance samples is a multiple
of 4.
V2: Added NV30 format
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
Reviewed-by: Sandy Huang <hjc@rock-chips.com>
---
drivers/gpu/drm/drm_fourcc.c | 8 ++++++++
include/uapi/drm/drm_fourcc.h | 2 ++
2 files changed, 10 insertions(+)
diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c
index 0f17dfa8702b..193cf8ed7912 100644
--- a/drivers/gpu/drm/drm_fourcc.c
+++ b/drivers/gpu/drm/drm_fourcc.c
@@ -299,6 +299,14 @@ const struct drm_format_info *__drm_format_info(u32 format)
.num_planes = 2, .char_per_block = { 5, 5, 0 },
.block_w = { 4, 2, 0 }, .block_h = { 1, 1, 0 }, .hsub = 2,
.vsub = 2, .is_yuv = true },
+ { .format = DRM_FORMAT_NV20, .depth = 0,
+ .num_planes = 2, .char_per_block = { 5, 5, 0 },
+ .block_w = { 4, 2, 0 }, .block_h = { 1, 1, 0 }, .hsub = 2,
+ .vsub = 1, .is_yuv = true },
+ { .format = DRM_FORMAT_NV30, .depth = 0,
+ .num_planes = 2, .char_per_block = { 5, 5, 0 },
+ .block_w = { 4, 2, 0 }, .block_h = { 1, 1, 0 }, .hsub = 1,
+ .vsub = 1, .is_yuv = true },
{ .format = DRM_FORMAT_Q410, .depth = 0,
.num_planes = 3, .char_per_block = { 2, 2, 2 },
.block_w = { 1, 1, 1 }, .block_h = { 1, 1, 1 }, .hsub = 1,
diff --git a/include/uapi/drm/drm_fourcc.h b/include/uapi/drm/drm_fourcc.h
index 8db7fd3f743e..3151f1fc7ebb 100644
--- a/include/uapi/drm/drm_fourcc.h
+++ b/include/uapi/drm/drm_fourcc.h
@@ -323,6 +323,8 @@ extern "C" {
* index 1 = Cr:Cb plane, [39:0] Cr1:Cb1:Cr0:Cb0 little endian
*/
#define DRM_FORMAT_NV15 fourcc_code('N', 'V', '1', '5') /* 2x2 subsampled Cr:Cb plane */
+#define DRM_FORMAT_NV20 fourcc_code('N', 'V', '2', '0') /* 2x1 subsampled Cr:Cb plane */
+#define DRM_FORMAT_NV30 fourcc_code('N', 'V', '3', '0') /* non-subsampled Cr:Cb plane */
/*
* 2 plane YCbCr MSB aligned
--
2.42.0
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v5 2/2] drm/rockchip: vop: Add NV15, NV20 and NV30 support
2023-10-23 17:37 [PATCH v5 0/2] drm/rockchip: vop: Add NV15, NV20 and NV30 support Jonas Karlman
2023-10-23 17:37 ` [PATCH v5 1/2] drm/fourcc: Add NV20 and NV30 YUV formats Jonas Karlman
@ 2023-10-23 17:37 ` Jonas Karlman
2023-10-23 17:55 ` Christopher Obbard
2023-10-23 17:52 ` [PATCH v5 0/2] " Christopher Obbard
2023-10-24 19:48 ` Heiko Stuebner
3 siblings, 1 reply; 8+ messages in thread
From: Jonas Karlman @ 2023-10-23 17:37 UTC (permalink / raw)
To: Heiko Stuebner, Sandy Huang, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Daniel Vetter
Cc: Christopher Obbard, dri-devel, linux-rockchip, linux-arm-kernel,
linux-kernel, Jonas Karlman
Add support for displaying 10-bit 4:2:0 and 4:2:2 formats produced by
the Rockchip Video Decoder on RK322X, RK3288, RK3328 and RK3399.
Also add support for 10-bit 4:4:4 format while at it.
V5: Use drm_format_info_min_pitch() for correct bpp
Add missing NV21, NV61 and NV42 formats
V4: Rework RK3328/RK3399 win0/1 data to not affect RK3368
V2: Added NV30 support
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
Reviewed-by: Sandy Huang <hjc@rock-chips.com>
---
drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 36 ++++++++---
drivers/gpu/drm/rockchip/rockchip_drm_vop.h | 1 +
drivers/gpu/drm/rockchip/rockchip_vop_reg.c | 66 +++++++++++++++++----
3 files changed, 86 insertions(+), 17 deletions(-)
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
index 14320bc73e5b..b3d0b6ae9294 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
@@ -272,6 +272,18 @@ static bool has_uv_swapped(uint32_t format)
}
}
+static bool is_fmt_10(uint32_t format)
+{
+ switch (format) {
+ case DRM_FORMAT_NV15:
+ case DRM_FORMAT_NV20:
+ case DRM_FORMAT_NV30:
+ return true;
+ default:
+ return false;
+ }
+}
+
static enum vop_data_format vop_convert_format(uint32_t format)
{
switch (format) {
@@ -287,12 +299,15 @@ static enum vop_data_format vop_convert_format(uint32_t format)
case DRM_FORMAT_BGR565:
return VOP_FMT_RGB565;
case DRM_FORMAT_NV12:
+ case DRM_FORMAT_NV15:
case DRM_FORMAT_NV21:
return VOP_FMT_YUV420SP;
case DRM_FORMAT_NV16:
+ case DRM_FORMAT_NV20:
case DRM_FORMAT_NV61:
return VOP_FMT_YUV422SP;
case DRM_FORMAT_NV24:
+ case DRM_FORMAT_NV30:
case DRM_FORMAT_NV42:
return VOP_FMT_YUV444SP;
default:
@@ -944,7 +959,12 @@ static void vop_plane_atomic_update(struct drm_plane *plane,
dsp_sty = dest->y1 + crtc->mode.vtotal - crtc->mode.vsync_start;
dsp_st = dsp_sty << 16 | (dsp_stx & 0xffff);
- offset = (src->x1 >> 16) * fb->format->cpp[0];
+ if (fb->format->char_per_block[0])
+ offset = drm_format_info_min_pitch(fb->format, 0,
+ src->x1 >> 16);
+ else
+ offset = (src->x1 >> 16) * fb->format->cpp[0];
+
offset += (src->y1 >> 16) * fb->pitches[0];
dma_addr = rk_obj->dma_addr + offset + fb->offsets[0];
@@ -970,6 +990,7 @@ static void vop_plane_atomic_update(struct drm_plane *plane,
}
VOP_WIN_SET(vop, win, format, format);
+ VOP_WIN_SET(vop, win, fmt_10, is_fmt_10(fb->format->format));
VOP_WIN_SET(vop, win, yrgb_vir, DIV_ROUND_UP(fb->pitches[0], 4));
VOP_WIN_SET(vop, win, yrgb_mst, dma_addr);
VOP_WIN_YUV2YUV_SET(vop, win_yuv2yuv, y2r_en, is_yuv);
@@ -979,15 +1000,16 @@ static void vop_plane_atomic_update(struct drm_plane *plane,
(new_state->rotation & DRM_MODE_REFLECT_X) ? 1 : 0);
if (is_yuv) {
- int hsub = fb->format->hsub;
- int vsub = fb->format->vsub;
- int bpp = fb->format->cpp[1];
-
uv_obj = fb->obj[1];
rk_uv_obj = to_rockchip_obj(uv_obj);
- offset = (src->x1 >> 16) * bpp / hsub;
- offset += (src->y1 >> 16) * fb->pitches[1] / vsub;
+ if (fb->format->char_per_block[1])
+ offset = drm_format_info_min_pitch(fb->format, 1,
+ src->x1 >> 16);
+ else
+ offset = (src->x1 >> 16) * fb->format->cpp[1];
+ offset /= fb->format->hsub;
+ offset += (src->y1 >> 16) * fb->pitches[1] / fb->format->vsub;
dma_addr = rk_uv_obj->dma_addr + offset + fb->offsets[1];
VOP_WIN_SET(vop, win, uv_vir, DIV_ROUND_UP(fb->pitches[1], 4));
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h
index 5f56e0597df8..4b2daefeb8c1 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h
@@ -186,6 +186,7 @@ struct vop_win_phy {
struct vop_reg enable;
struct vop_reg gate;
struct vop_reg format;
+ struct vop_reg fmt_10;
struct vop_reg rb_swap;
struct vop_reg uv_swap;
struct vop_reg act_info;
diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
index 7b2805006776..f8cef0cb7bff 100644
--- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
+++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
@@ -53,6 +53,26 @@ static const uint32_t formats_win_full[] = {
DRM_FORMAT_NV42,
};
+static const uint32_t formats_win_full_10[] = {
+ DRM_FORMAT_XRGB8888,
+ DRM_FORMAT_ARGB8888,
+ DRM_FORMAT_XBGR8888,
+ DRM_FORMAT_ABGR8888,
+ DRM_FORMAT_RGB888,
+ DRM_FORMAT_BGR888,
+ DRM_FORMAT_RGB565,
+ DRM_FORMAT_BGR565,
+ DRM_FORMAT_NV12,
+ DRM_FORMAT_NV21,
+ DRM_FORMAT_NV16,
+ DRM_FORMAT_NV61,
+ DRM_FORMAT_NV24,
+ DRM_FORMAT_NV42,
+ DRM_FORMAT_NV15,
+ DRM_FORMAT_NV20,
+ DRM_FORMAT_NV30,
+};
+
static const uint64_t format_modifiers_win_full[] = {
DRM_FORMAT_MOD_LINEAR,
DRM_FORMAT_MOD_INVALID,
@@ -627,11 +647,12 @@ static const struct vop_scl_regs rk3288_win_full_scl = {
static const struct vop_win_phy rk3288_win01_data = {
.scl = &rk3288_win_full_scl,
- .data_formats = formats_win_full,
- .nformats = ARRAY_SIZE(formats_win_full),
+ .data_formats = formats_win_full_10,
+ .nformats = ARRAY_SIZE(formats_win_full_10),
.format_modifiers = format_modifiers_win_full,
.enable = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 0),
.format = VOP_REG(RK3288_WIN0_CTRL0, 0x7, 1),
+ .fmt_10 = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 4),
.rb_swap = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 12),
.uv_swap = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 15),
.act_info = VOP_REG(RK3288_WIN0_ACT_INFO, 0x1fff1fff, 0),
@@ -936,13 +957,38 @@ static const struct vop_win_yuv2yuv_data rk3399_vop_big_win_yuv2yuv_data[] = {
};
-static const struct vop_win_phy rk3399_win01_data = {
+static const struct vop_win_phy rk3399_win0_data = {
.scl = &rk3288_win_full_scl,
- .data_formats = formats_win_full,
- .nformats = ARRAY_SIZE(formats_win_full),
+ .data_formats = formats_win_full_10,
+ .nformats = ARRAY_SIZE(formats_win_full_10),
.format_modifiers = format_modifiers_win_full_afbc,
.enable = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 0),
.format = VOP_REG(RK3288_WIN0_CTRL0, 0x7, 1),
+ .fmt_10 = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 4),
+ .rb_swap = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 12),
+ .uv_swap = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 15),
+ .x_mir_en = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 21),
+ .y_mir_en = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 22),
+ .act_info = VOP_REG(RK3288_WIN0_ACT_INFO, 0x1fff1fff, 0),
+ .dsp_info = VOP_REG(RK3288_WIN0_DSP_INFO, 0x0fff0fff, 0),
+ .dsp_st = VOP_REG(RK3288_WIN0_DSP_ST, 0x1fff1fff, 0),
+ .yrgb_mst = VOP_REG(RK3288_WIN0_YRGB_MST, 0xffffffff, 0),
+ .uv_mst = VOP_REG(RK3288_WIN0_CBR_MST, 0xffffffff, 0),
+ .yrgb_vir = VOP_REG(RK3288_WIN0_VIR, 0x3fff, 0),
+ .uv_vir = VOP_REG(RK3288_WIN0_VIR, 0x3fff, 16),
+ .src_alpha_ctl = VOP_REG(RK3288_WIN0_SRC_ALPHA_CTRL, 0xff, 0),
+ .dst_alpha_ctl = VOP_REG(RK3288_WIN0_DST_ALPHA_CTRL, 0xff, 0),
+ .channel = VOP_REG(RK3288_WIN0_CTRL2, 0xff, 0),
+};
+
+static const struct vop_win_phy rk3399_win1_data = {
+ .scl = &rk3288_win_full_scl,
+ .data_formats = formats_win_full_10,
+ .nformats = ARRAY_SIZE(formats_win_full_10),
+ .format_modifiers = format_modifiers_win_full,
+ .enable = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 0),
+ .format = VOP_REG(RK3288_WIN0_CTRL0, 0x7, 1),
+ .fmt_10 = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 4),
.rb_swap = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 12),
.uv_swap = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 15),
.x_mir_en = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 21),
@@ -965,9 +1011,9 @@ static const struct vop_win_phy rk3399_win01_data = {
* AFBC on the primary plane.
*/
static const struct vop_win_data rk3399_vop_win_data[] = {
- { .base = 0x00, .phy = &rk3399_win01_data,
+ { .base = 0x00, .phy = &rk3399_win0_data,
.type = DRM_PLANE_TYPE_PRIMARY },
- { .base = 0x40, .phy = &rk3368_win01_data,
+ { .base = 0x40, .phy = &rk3399_win1_data,
.type = DRM_PLANE_TYPE_OVERLAY },
{ .base = 0x00, .phy = &rk3368_win23_data,
.type = DRM_PLANE_TYPE_OVERLAY },
@@ -1099,11 +1145,11 @@ static const struct vop_intr rk3328_vop_intr = {
};
static const struct vop_win_data rk3328_vop_win_data[] = {
- { .base = 0xd0, .phy = &rk3368_win01_data,
+ { .base = 0xd0, .phy = &rk3399_win1_data,
.type = DRM_PLANE_TYPE_PRIMARY },
- { .base = 0x1d0, .phy = &rk3368_win01_data,
+ { .base = 0x1d0, .phy = &rk3399_win1_data,
.type = DRM_PLANE_TYPE_OVERLAY },
- { .base = 0x2d0, .phy = &rk3368_win01_data,
+ { .base = 0x2d0, .phy = &rk3399_win1_data,
.type = DRM_PLANE_TYPE_CURSOR },
};
--
2.42.0
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v5 0/2] drm/rockchip: vop: Add NV15, NV20 and NV30 support
2023-10-23 17:37 [PATCH v5 0/2] drm/rockchip: vop: Add NV15, NV20 and NV30 support Jonas Karlman
2023-10-23 17:37 ` [PATCH v5 1/2] drm/fourcc: Add NV20 and NV30 YUV formats Jonas Karlman
2023-10-23 17:37 ` [PATCH v5 2/2] drm/rockchip: vop: Add NV15, NV20 and NV30 support Jonas Karlman
@ 2023-10-23 17:52 ` Christopher Obbard
2023-10-23 22:36 ` Jonas Karlman
2023-10-24 19:48 ` Heiko Stuebner
3 siblings, 1 reply; 8+ messages in thread
From: Christopher Obbard @ 2023-10-23 17:52 UTC (permalink / raw)
To: Jonas Karlman, Heiko Stuebner, Sandy Huang, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Daniel Vetter
Cc: dri-devel, linux-rockchip, linux-arm-kernel, linux-kernel, kernel
Hi Jonas,
On Mon, 2023-10-23 at 17:37 +0000, Jonas Karlman wrote:
> This series add support for displaying 10-bit 4:2:0 and 4:2:2 formats
> produced
> by the Rockchip Video Decoder on RK322X, RK3288, RK3328, RK3368 and RK3399.
> Also include 10-bit 4:4:4 support since VOP can support that also.
>
> First patch adds new fourcc 10-bit YUV formats with 4:2:2/4:4:4 sub-
> sampling.
> Second patch adds support for displaying the new fourcc formats.
>
> These patches have been in use by LibreELEC and other distros for the
> past 3+ years, hoping they can be merged this time around.
>
> A rough libdrm/modetest patch [2] have been used to validate use of
> NV15, NV20 and NV30 formats on RK3288, RK3328 and RK3399 boards.
>
> modetest -s <connector_id>@<crtc_id>:<mode>-<vrefresh>@<format>
>
> Tinker Board R2.0 (rk3288w):
> modetest -s 50:1920x1080-60@NV15
>
> Rock Pi 4 (rk3399):
> modetest -s 52@44:1920x1080-60@NV15
>
> Rock64 (rk3328):
> modetest -s 42:1920x1080-60@NV15
>
> Changes in v5:
> - Use drm_format_info_min_pitch() for correct bpp
> - Add missing NV21, NV61 and NV42 formats
>
> Changes in v4:
> - Rework RK3328/RK3399 win0/1 data to not affect RK3368
>
> Changes in v3:
> - No changes, rebased on next-20230616
> - R-B tags was collected
>
> Changes in v2:
> - Add NV30 format
> - R-B tags was not collected due to NV30 changes
>
> This series is also available at [1] and libdrm/modetest patch at [2].
>
> [1] https://github.com/Kwiboo/linux-rockchip/commits/v6.6-rc7-vop-nv15
> [2] https://github.com/Kwiboo/libdrm/commits/nv15
Could you open a draft merge request for libdrm upstream at
https://gitlab.freedesktop.org/mesa/drm pointing to this series? If there are
subsequent revisions of this series, it'd be great to link that merge request
in the cover letter.
Cheers!
Chris
>
> Jonas Karlman (2):
> drm/fourcc: Add NV20 and NV30 YUV formats
> drm/rockchip: vop: Add NV15, NV20 and NV30 support
>
> drivers/gpu/drm/drm_fourcc.c | 8 +++
> drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 36 ++++++++---
> drivers/gpu/drm/rockchip/rockchip_drm_vop.h | 1 +
> drivers/gpu/drm/rockchip/rockchip_vop_reg.c | 66 +++++++++++++++++----
> include/uapi/drm/drm_fourcc.h | 2 +
> 5 files changed, 96 insertions(+), 17 deletions(-)
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v5 1/2] drm/fourcc: Add NV20 and NV30 YUV formats
2023-10-23 17:37 ` [PATCH v5 1/2] drm/fourcc: Add NV20 and NV30 YUV formats Jonas Karlman
@ 2023-10-23 17:53 ` Christopher Obbard
0 siblings, 0 replies; 8+ messages in thread
From: Christopher Obbard @ 2023-10-23 17:53 UTC (permalink / raw)
To: Jonas Karlman, Heiko Stuebner, Sandy Huang, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Daniel Vetter
Cc: dri-devel, linux-rockchip, linux-arm-kernel, linux-kernel, kernel
Hi Jonas,
On Mon, 2023-10-23 at 17:37 +0000, Jonas Karlman wrote:
> DRM_FORMAT_NV20 and DRM_FORMAT_NV30 formats is the 2x1 and non-subsampled
> variant of NV15, a 10-bit 2-plane YUV format that has no padding between
> components. Instead, luminance and chrominance samples are grouped into 4s
> so that each group is packed into an integer number of bytes:
>
> YYYY = UVUV = 4 * 10 bits = 40 bits = 5 bytes
>
> The '20' and '30' suffix refers to the optimum effective bits per pixel
> which is achieved when the total number of luminance samples is a multiple
> of 4.
>
> V2: Added NV30 format
>
> Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
> Reviewed-by: Sandy Huang <hjc@rock-chips.com>
Reviewed-by: Christopher Obbard <chris.obbard@collabora.com>
Tested-by: Christopher Obbard <chris.obbard@collabora.com>
Cheers!
Chris
> ---
> drivers/gpu/drm/drm_fourcc.c | 8 ++++++++
> include/uapi/drm/drm_fourcc.h | 2 ++
> 2 files changed, 10 insertions(+)
>
> diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c
> index 0f17dfa8702b..193cf8ed7912 100644
> --- a/drivers/gpu/drm/drm_fourcc.c
> +++ b/drivers/gpu/drm/drm_fourcc.c
> @@ -299,6 +299,14 @@ const struct drm_format_info *__drm_format_info(u32
> format)
> .num_planes = 2, .char_per_block = { 5, 5, 0 },
> .block_w = { 4, 2, 0 }, .block_h = { 1, 1, 0 }, .hsub =
> 2,
> .vsub = 2, .is_yuv = true },
> + { .format = DRM_FORMAT_NV20, .depth = 0,
> + .num_planes = 2, .char_per_block = { 5, 5, 0 },
> + .block_w = { 4, 2, 0 }, .block_h = { 1, 1, 0 }, .hsub =
> 2,
> + .vsub = 1, .is_yuv = true },
> + { .format = DRM_FORMAT_NV30, .depth = 0,
> + .num_planes = 2, .char_per_block = { 5, 5, 0 },
> + .block_w = { 4, 2, 0 }, .block_h = { 1, 1, 0 }, .hsub =
> 1,
> + .vsub = 1, .is_yuv = true },
> { .format = DRM_FORMAT_Q410, .depth = 0,
> .num_planes = 3, .char_per_block = { 2, 2, 2 },
> .block_w = { 1, 1, 1 }, .block_h = { 1, 1, 1 }, .hsub =
> 1,
> diff --git a/include/uapi/drm/drm_fourcc.h b/include/uapi/drm/drm_fourcc.h
> index 8db7fd3f743e..3151f1fc7ebb 100644
> --- a/include/uapi/drm/drm_fourcc.h
> +++ b/include/uapi/drm/drm_fourcc.h
> @@ -323,6 +323,8 @@ extern "C" {
> * index 1 = Cr:Cb plane, [39:0] Cr1:Cb1:Cr0:Cb0 little endian
> */
> #define DRM_FORMAT_NV15 fourcc_code('N', 'V', '1', '5') /*
> 2x2 subsampled Cr:Cb plane */
> +#define DRM_FORMAT_NV20 fourcc_code('N', 'V', '2', '0') /*
> 2x1 subsampled Cr:Cb plane */
> +#define DRM_FORMAT_NV30 fourcc_code('N', 'V', '3', '0') /*
> non-subsampled Cr:Cb plane */
>
> /*
> * 2 plane YCbCr MSB aligned
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v5 2/2] drm/rockchip: vop: Add NV15, NV20 and NV30 support
2023-10-23 17:37 ` [PATCH v5 2/2] drm/rockchip: vop: Add NV15, NV20 and NV30 support Jonas Karlman
@ 2023-10-23 17:55 ` Christopher Obbard
0 siblings, 0 replies; 8+ messages in thread
From: Christopher Obbard @ 2023-10-23 17:55 UTC (permalink / raw)
To: Jonas Karlman, Heiko Stuebner, Sandy Huang, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Daniel Vetter
Cc: dri-devel, linux-rockchip, linux-arm-kernel, linux-kernel, kernel
Hi Jonas,
On Mon, 2023-10-23 at 17:37 +0000, Jonas Karlman wrote:
> Add support for displaying 10-bit 4:2:0 and 4:2:2 formats produced by
> the Rockchip Video Decoder on RK322X, RK3288, RK3328 and RK3399.
> Also add support for 10-bit 4:4:4 format while at it.
>
> V5: Use drm_format_info_min_pitch() for correct bpp
> Add missing NV21, NV61 and NV42 formats
> V4: Rework RK3328/RK3399 win0/1 data to not affect RK3368
> V2: Added NV30 support
>
> Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
> Reviewed-by: Sandy Huang <hjc@rock-chips.com>
Reviewed-by: Christopher Obbard <chris.obbard@collabora.com>
Tested-by: Christopher Obbard <chris.obbard@collabora.com>
Cheers!
Chris
> ---
> drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 36 ++++++++---
> drivers/gpu/drm/rockchip/rockchip_drm_vop.h | 1 +
> drivers/gpu/drm/rockchip/rockchip_vop_reg.c | 66 +++++++++++++++++----
> 3 files changed, 86 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> index 14320bc73e5b..b3d0b6ae9294 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> @@ -272,6 +272,18 @@ static bool has_uv_swapped(uint32_t format)
> }
> }
>
> +static bool is_fmt_10(uint32_t format)
> +{
> + switch (format) {
> + case DRM_FORMAT_NV15:
> + case DRM_FORMAT_NV20:
> + case DRM_FORMAT_NV30:
> + return true;
> + default:
> + return false;
> + }
> +}
> +
> static enum vop_data_format vop_convert_format(uint32_t format)
> {
> switch (format) {
> @@ -287,12 +299,15 @@ static enum vop_data_format
> vop_convert_format(uint32_t format)
> case DRM_FORMAT_BGR565:
> return VOP_FMT_RGB565;
> case DRM_FORMAT_NV12:
> + case DRM_FORMAT_NV15:
> case DRM_FORMAT_NV21:
> return VOP_FMT_YUV420SP;
> case DRM_FORMAT_NV16:
> + case DRM_FORMAT_NV20:
> case DRM_FORMAT_NV61:
> return VOP_FMT_YUV422SP;
> case DRM_FORMAT_NV24:
> + case DRM_FORMAT_NV30:
> case DRM_FORMAT_NV42:
> return VOP_FMT_YUV444SP;
> default:
> @@ -944,7 +959,12 @@ static void vop_plane_atomic_update(struct drm_plane
> *plane,
> dsp_sty = dest->y1 + crtc->mode.vtotal - crtc->mode.vsync_start;
> dsp_st = dsp_sty << 16 | (dsp_stx & 0xffff);
>
> - offset = (src->x1 >> 16) * fb->format->cpp[0];
> + if (fb->format->char_per_block[0])
> + offset = drm_format_info_min_pitch(fb->format, 0,
> + src->x1 >> 16);
> + else
> + offset = (src->x1 >> 16) * fb->format->cpp[0];
> +
> offset += (src->y1 >> 16) * fb->pitches[0];
> dma_addr = rk_obj->dma_addr + offset + fb->offsets[0];
>
> @@ -970,6 +990,7 @@ static void vop_plane_atomic_update(struct drm_plane
> *plane,
> }
>
> VOP_WIN_SET(vop, win, format, format);
> + VOP_WIN_SET(vop, win, fmt_10, is_fmt_10(fb->format->format));
> VOP_WIN_SET(vop, win, yrgb_vir, DIV_ROUND_UP(fb->pitches[0], 4));
> VOP_WIN_SET(vop, win, yrgb_mst, dma_addr);
> VOP_WIN_YUV2YUV_SET(vop, win_yuv2yuv, y2r_en, is_yuv);
> @@ -979,15 +1000,16 @@ static void vop_plane_atomic_update(struct drm_plane
> *plane,
> (new_state->rotation & DRM_MODE_REFLECT_X) ? 1 : 0);
>
> if (is_yuv) {
> - int hsub = fb->format->hsub;
> - int vsub = fb->format->vsub;
> - int bpp = fb->format->cpp[1];
> -
> uv_obj = fb->obj[1];
> rk_uv_obj = to_rockchip_obj(uv_obj);
>
> - offset = (src->x1 >> 16) * bpp / hsub;
> - offset += (src->y1 >> 16) * fb->pitches[1] / vsub;
> + if (fb->format->char_per_block[1])
> + offset = drm_format_info_min_pitch(fb->format, 1,
> + src->x1 >> 16);
> + else
> + offset = (src->x1 >> 16) * fb->format->cpp[1];
> + offset /= fb->format->hsub;
> + offset += (src->y1 >> 16) * fb->pitches[1] / fb->format-
> >vsub;
>
> dma_addr = rk_uv_obj->dma_addr + offset + fb->offsets[1];
> VOP_WIN_SET(vop, win, uv_vir, DIV_ROUND_UP(fb->pitches[1],
> 4));
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h
> b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h
> index 5f56e0597df8..4b2daefeb8c1 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h
> @@ -186,6 +186,7 @@ struct vop_win_phy {
> struct vop_reg enable;
> struct vop_reg gate;
> struct vop_reg format;
> + struct vop_reg fmt_10;
> struct vop_reg rb_swap;
> struct vop_reg uv_swap;
> struct vop_reg act_info;
> diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
> b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
> index 7b2805006776..f8cef0cb7bff 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c
> @@ -53,6 +53,26 @@ static const uint32_t formats_win_full[] = {
> DRM_FORMAT_NV42,
> };
>
> +static const uint32_t formats_win_full_10[] = {
> + DRM_FORMAT_XRGB8888,
> + DRM_FORMAT_ARGB8888,
> + DRM_FORMAT_XBGR8888,
> + DRM_FORMAT_ABGR8888,
> + DRM_FORMAT_RGB888,
> + DRM_FORMAT_BGR888,
> + DRM_FORMAT_RGB565,
> + DRM_FORMAT_BGR565,
> + DRM_FORMAT_NV12,
> + DRM_FORMAT_NV21,
> + DRM_FORMAT_NV16,
> + DRM_FORMAT_NV61,
> + DRM_FORMAT_NV24,
> + DRM_FORMAT_NV42,
> + DRM_FORMAT_NV15,
> + DRM_FORMAT_NV20,
> + DRM_FORMAT_NV30,
> +};
> +
> static const uint64_t format_modifiers_win_full[] = {
> DRM_FORMAT_MOD_LINEAR,
> DRM_FORMAT_MOD_INVALID,
> @@ -627,11 +647,12 @@ static const struct vop_scl_regs rk3288_win_full_scl =
> {
>
> static const struct vop_win_phy rk3288_win01_data = {
> .scl = &rk3288_win_full_scl,
> - .data_formats = formats_win_full,
> - .nformats = ARRAY_SIZE(formats_win_full),
> + .data_formats = formats_win_full_10,
> + .nformats = ARRAY_SIZE(formats_win_full_10),
> .format_modifiers = format_modifiers_win_full,
> .enable = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 0),
> .format = VOP_REG(RK3288_WIN0_CTRL0, 0x7, 1),
> + .fmt_10 = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 4),
> .rb_swap = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 12),
> .uv_swap = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 15),
> .act_info = VOP_REG(RK3288_WIN0_ACT_INFO, 0x1fff1fff, 0),
> @@ -936,13 +957,38 @@ static const struct vop_win_yuv2yuv_data
> rk3399_vop_big_win_yuv2yuv_data[] = {
>
> };
>
> -static const struct vop_win_phy rk3399_win01_data = {
> +static const struct vop_win_phy rk3399_win0_data = {
> .scl = &rk3288_win_full_scl,
> - .data_formats = formats_win_full,
> - .nformats = ARRAY_SIZE(formats_win_full),
> + .data_formats = formats_win_full_10,
> + .nformats = ARRAY_SIZE(formats_win_full_10),
> .format_modifiers = format_modifiers_win_full_afbc,
> .enable = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 0),
> .format = VOP_REG(RK3288_WIN0_CTRL0, 0x7, 1),
> + .fmt_10 = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 4),
> + .rb_swap = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 12),
> + .uv_swap = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 15),
> + .x_mir_en = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 21),
> + .y_mir_en = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 22),
> + .act_info = VOP_REG(RK3288_WIN0_ACT_INFO, 0x1fff1fff, 0),
> + .dsp_info = VOP_REG(RK3288_WIN0_DSP_INFO, 0x0fff0fff, 0),
> + .dsp_st = VOP_REG(RK3288_WIN0_DSP_ST, 0x1fff1fff, 0),
> + .yrgb_mst = VOP_REG(RK3288_WIN0_YRGB_MST, 0xffffffff, 0),
> + .uv_mst = VOP_REG(RK3288_WIN0_CBR_MST, 0xffffffff, 0),
> + .yrgb_vir = VOP_REG(RK3288_WIN0_VIR, 0x3fff, 0),
> + .uv_vir = VOP_REG(RK3288_WIN0_VIR, 0x3fff, 16),
> + .src_alpha_ctl = VOP_REG(RK3288_WIN0_SRC_ALPHA_CTRL, 0xff, 0),
> + .dst_alpha_ctl = VOP_REG(RK3288_WIN0_DST_ALPHA_CTRL, 0xff, 0),
> + .channel = VOP_REG(RK3288_WIN0_CTRL2, 0xff, 0),
> +};
> +
> +static const struct vop_win_phy rk3399_win1_data = {
> + .scl = &rk3288_win_full_scl,
> + .data_formats = formats_win_full_10,
> + .nformats = ARRAY_SIZE(formats_win_full_10),
> + .format_modifiers = format_modifiers_win_full,
> + .enable = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 0),
> + .format = VOP_REG(RK3288_WIN0_CTRL0, 0x7, 1),
> + .fmt_10 = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 4),
> .rb_swap = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 12),
> .uv_swap = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 15),
> .x_mir_en = VOP_REG(RK3288_WIN0_CTRL0, 0x1, 21),
> @@ -965,9 +1011,9 @@ static const struct vop_win_phy rk3399_win01_data = {
> * AFBC on the primary plane.
> */
> static const struct vop_win_data rk3399_vop_win_data[] = {
> - { .base = 0x00, .phy = &rk3399_win01_data,
> + { .base = 0x00, .phy = &rk3399_win0_data,
> .type = DRM_PLANE_TYPE_PRIMARY },
> - { .base = 0x40, .phy = &rk3368_win01_data,
> + { .base = 0x40, .phy = &rk3399_win1_data,
> .type = DRM_PLANE_TYPE_OVERLAY },
> { .base = 0x00, .phy = &rk3368_win23_data,
> .type = DRM_PLANE_TYPE_OVERLAY },
> @@ -1099,11 +1145,11 @@ static const struct vop_intr rk3328_vop_intr = {
> };
>
> static const struct vop_win_data rk3328_vop_win_data[] = {
> - { .base = 0xd0, .phy = &rk3368_win01_data,
> + { .base = 0xd0, .phy = &rk3399_win1_data,
> .type = DRM_PLANE_TYPE_PRIMARY },
> - { .base = 0x1d0, .phy = &rk3368_win01_data,
> + { .base = 0x1d0, .phy = &rk3399_win1_data,
> .type = DRM_PLANE_TYPE_OVERLAY },
> - { .base = 0x2d0, .phy = &rk3368_win01_data,
> + { .base = 0x2d0, .phy = &rk3399_win1_data,
> .type = DRM_PLANE_TYPE_CURSOR },
> };
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v5 0/2] drm/rockchip: vop: Add NV15, NV20 and NV30 support
2023-10-23 17:52 ` [PATCH v5 0/2] " Christopher Obbard
@ 2023-10-23 22:36 ` Jonas Karlman
0 siblings, 0 replies; 8+ messages in thread
From: Jonas Karlman @ 2023-10-23 22:36 UTC (permalink / raw)
To: Christopher Obbard, Heiko Stuebner, Sandy Huang,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
David Airlie, Daniel Vetter
Cc: dri-devel, linux-rockchip, linux-arm-kernel, linux-kernel, kernel
Hi Chris,
On 2023-10-23 19:52, Christopher Obbard wrote:
> Hi Jonas,
>
> On Mon, 2023-10-23 at 17:37 +0000, Jonas Karlman wrote:
>> This series add support for displaying 10-bit 4:2:0 and 4:2:2 formats
>> produced
>> by the Rockchip Video Decoder on RK322X, RK3288, RK3328, RK3368 and RK3399.
>> Also include 10-bit 4:4:4 support since VOP can support that also.
>>
>> First patch adds new fourcc 10-bit YUV formats with 4:2:2/4:4:4 sub-
>> sampling.
>> Second patch adds support for displaying the new fourcc formats.
>>
>> These patches have been in use by LibreELEC and other distros for the
>> past 3+ years, hoping they can be merged this time around.
>>
>> A rough libdrm/modetest patch [2] have been used to validate use of
>> NV15, NV20 and NV30 formats on RK3288, RK3328 and RK3399 boards.
>>
>> modetest -s <connector_id>@<crtc_id>:<mode>-<vrefresh>@<format>
>>
>> Tinker Board R2.0 (rk3288w):
>> modetest -s 50:1920x1080-60@NV15
>>
>> Rock Pi 4 (rk3399):
>> modetest -s 52@44:1920x1080-60@NV15
>>
>> Rock64 (rk3328):
>> modetest -s 42:1920x1080-60@NV15
>>
>> Changes in v5:
>> - Use drm_format_info_min_pitch() for correct bpp
>> - Add missing NV21, NV61 and NV42 formats
>>
>> Changes in v4:
>> - Rework RK3328/RK3399 win0/1 data to not affect RK3368
>>
>> Changes in v3:
>> - No changes, rebased on next-20230616
>> - R-B tags was collected
>>
>> Changes in v2:
>> - Add NV30 format
>> - R-B tags was not collected due to NV30 changes
>>
>> This series is also available at [1] and libdrm/modetest patch at [2].
>>
>> [1] https://github.com/Kwiboo/linux-rockchip/commits/v6.6-rc7-vop-nv15
>> [2] https://github.com/Kwiboo/libdrm/commits/nv15
>
> Could you open a draft merge request for libdrm upstream at
> https://gitlab.freedesktop.org/mesa/drm pointing to this series? If there are
> subsequent revisions of this series, it'd be great to link that merge request
> in the cover letter.
Have created a draft merge reguest for libdrm/modetest changes now.
https://gitlab.freedesktop.org/mesa/drm/-/merge_requests/329
The pattern code could really need some improvements/refactoring, in
current form it should at least be enough to create a test pattern to
help test/validate this series :-)
Regards,
Jonas
>
>
> Cheers!
>
> Chris
>
>>
>> Jonas Karlman (2):
>> drm/fourcc: Add NV20 and NV30 YUV formats
>> drm/rockchip: vop: Add NV15, NV20 and NV30 support
>>
>> drivers/gpu/drm/drm_fourcc.c | 8 +++
>> drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 36 ++++++++---
>> drivers/gpu/drm/rockchip/rockchip_drm_vop.h | 1 +
>> drivers/gpu/drm/rockchip/rockchip_vop_reg.c | 66 +++++++++++++++++----
>> include/uapi/drm/drm_fourcc.h | 2 +
>> 5 files changed, 96 insertions(+), 17 deletions(-)
>>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v5 0/2] drm/rockchip: vop: Add NV15, NV20 and NV30 support
2023-10-23 17:37 [PATCH v5 0/2] drm/rockchip: vop: Add NV15, NV20 and NV30 support Jonas Karlman
` (2 preceding siblings ...)
2023-10-23 17:52 ` [PATCH v5 0/2] " Christopher Obbard
@ 2023-10-24 19:48 ` Heiko Stuebner
3 siblings, 0 replies; 8+ messages in thread
From: Heiko Stuebner @ 2023-10-24 19:48 UTC (permalink / raw)
To: Thomas Zimmermann, Maxime Ripard, Sandy Huang, David Airlie,
Maarten Lankhorst, Daniel Vetter, Jonas Karlman
Cc: Heiko Stuebner, linux-kernel, Christopher Obbard, dri-devel,
linux-arm-kernel, linux-rockchip
On Mon, 23 Oct 2023 17:37:13 +0000, Jonas Karlman wrote:
> This series add support for displaying 10-bit 4:2:0 and 4:2:2 formats produced
> by the Rockchip Video Decoder on RK322X, RK3288, RK3328, RK3368 and RK3399.
> Also include 10-bit 4:4:4 support since VOP can support that also.
>
> First patch adds new fourcc 10-bit YUV formats with 4:2:2/4:4:4 sub-sampling.
> Second patch adds support for displaying the new fourcc formats.
>
> [...]
Applied, thanks!
[1/2] drm/fourcc: Add NV20 and NV30 YUV formats
commit: 728c15b4b5f3369cbde73d5e0f14701ab370f985
[2/2] drm/rockchip: vop: Add NV15, NV20 and NV30 support
commit: d4b384228562848e4b76b608a5876c92160e993c
Best regards,
--
Heiko Stuebner <heiko@sntech.de>
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2023-10-24 19:48 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-10-23 17:37 [PATCH v5 0/2] drm/rockchip: vop: Add NV15, NV20 and NV30 support Jonas Karlman
2023-10-23 17:37 ` [PATCH v5 1/2] drm/fourcc: Add NV20 and NV30 YUV formats Jonas Karlman
2023-10-23 17:53 ` Christopher Obbard
2023-10-23 17:37 ` [PATCH v5 2/2] drm/rockchip: vop: Add NV15, NV20 and NV30 support Jonas Karlman
2023-10-23 17:55 ` Christopher Obbard
2023-10-23 17:52 ` [PATCH v5 0/2] " Christopher Obbard
2023-10-23 22:36 ` Jonas Karlman
2023-10-24 19:48 ` Heiko Stuebner
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®