This series extends the output color format support of the Rockchip DW HDMI QP controller to cover 10-bit YUV 4:2:2 and 8/10-bit YUV 4:2:0.
Please note this has a runtime dependency on the Rockchip Samsung HDPTX PHY driver bug fixes posted separately as [1]. While there is no build dependency, those fixes are required to address clock rate calculation and synchronization issues that arise when changing the color depth (bpc) while keeping the modeline constant. Patches 1, 7 & 14 improve VOP2 robustness on RK3588, helping recover from exceptions and preventing random display output glitches observed when switching modes that also change the color format, e.g. from RGB to YUV 4:2:0 and vice versa. Patch 8 avoids an incorrect DCLK source switch for 10-bit YUV 4:2:2 by forcing 8 bpc in the bandwidth check. Patches 2-6 address a few vop2 related issues reported by Sashiko, while 9-11 are additional cleanups/improvements. Patch 12 adds MEDIA_BUS_FMT_UYVY10_1X20 for 10-bit YUV 4:2:2 output, configuring the PHY with 8 bpc. YUV 4:2:2 always transmits two 12-bit components per pixel regardless of color depth, so from a clock-rate perspective it is equivalent to three 8-bit RGB components. Patch 13 advertises YUV 4:2:0 output, now that the bus-format and VOP2 support are in place. Tested on Radxa ROCK 5B (RK3588) and Radxa ROCK 4D (RK3576), up to 4K@60Hz YUV 4:2:0 and 4K@30Hz RGB. [1] https://lore.kernel.org/all/[email protected]/ Signed-off-by: Cristian Ciocaltea <[email protected]> --- Changes in v3: - Updated patch 3 to skip any hardware programming in the callbacks gated by drm_atomic_helper_commit_planes() after powering down VOP2 on an atomic_enable() error (Sashiko) - Ensured VBLANK events are sent immediately when atomic_enable() fails, hence preventing userspace processes waiting for the page flip completion to hang indefinitely (new patch 4, Sashiko) - Rebased onto latest drm-misc-next - Link to v2: https://patch.msgid.link/[email protected] Changes in v2: - Collected R-b from Krzysztof on the binding patch, while also fixed the property ordering in the example - Renamed vop2_clk_reset() to vop2_reset_assert_deassert() and used to devm_reset_control_get_optional_exclusive() in patch 6 (Philipp Zabel) - Addressed several issues reported by Sashiko * Reset AXI before detaching the IOMMU domain, to close a theoretical window where stale or in-flight DMA transactions could fault or access memory untranslated after the domain is detached (patch 6) * Fixed resource leak on vop2_enable() error path (new patch 2) * Balance state on atomic_enable error paths (new patch 3) * Avoided division by zero when computing max_dclk (new path 4) * Fixed VOP2_MAX_DCLK_RATE overflow on 32-bit (new patch 5) - Rebased onto latest drm-misc-next - Link to v1: https://patch.msgid.link/[email protected] --- Cristian Ciocaltea (14): dt-bindings: display: vop2: Add missing reset properties drm/rockchip: vop2: Fix resource leak on vop2_enable() error path drm/rockchip: vop2: Balance state on atomic_enable() error paths drm/rockchip: vop2: Send pending event when atomic_enable() fails drm/rockchip: vop2: Avoid division by zero when computing max_dclk drm/rockchip: vop2: Fix VOP2_MAX_DCLK_RATE overflow on 32-bit drm/rockchip: vop2: Reset AXI and DCLK to improve robustness drm/rockchip: vop2: Avoid DCLK source switch for 10-bit YUV422 output drm/rockchip: vop2: Consolidate HDMI PHY PLL clock parent switch drm/rockchip: vop2: Switch to enum vop_csc_format drm/bridge: dw-hdmi-qp: Log resolution and refresh rate in atomic_enable() drm/rockchip: dw_hdmi_qp: Support 10-bit YUV422 output format drm/rockchip: dw_hdmi_qp: Enable YUV420 output format arm64: dts: rockchip: Add RK3588 VOP2 resets .../bindings/display/rockchip/rockchip-vop2.yaml | 46 ++++- arch/arm64/boot/dts/rockchip/rk3588-base.dtsi | 12 ++ drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c | 10 +- drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c | 13 +- drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 215 +++++++++++++++------ drivers/gpu/drm/rockchip/rockchip_drm_vop2.h | 10 + 6 files changed, 244 insertions(+), 62 deletions(-) --- base-commit: 671b7825dbfe9ea6e3ad3001003aeee0df48d1b5 change-id: 20260617-dw-hdmi-qp-yuv-2b0f7bb5ba81
