[PATCH v7 0/4] Introduce BACKGROUND_COLOR DRM CRTC property
Maarten Lankhorst
maarten.lankhorst at linux.intel.com
Mon Feb 16 06:56:44 PST 2026
Hey,
Den 2026-02-04 kl. 21:02, skrev Cristian Ciocaltea:
> Some display controllers can be hardware-configured to present non-black
> colors for pixels which are not covered by any plane (or are exposed
> through transparent regions of higher planes).
>
> The 1st patch of the series provides DIV_ROUND_CLOSEST() to uapi, as a
> prerequisite to the 2nd patch introducing the BACKGROUND_COLOR DRM
> property that can be attached to a CRTC via a dedicated helper function.
> A 64-bit ARGB color value format is also defined and can be manipulated
> with the help of a few utility macros.
>
> Note this is a reworked version of the patch [1] submitted (many) years
> ago by Matt Roper. The main changes are:
>
> * Renamed DRM_ARGB_<COMP>() to DRM_ARGB64_GET<C>_BPC() while providing
> convenience wrappers to extract all 16 bits of a specific color via
> DRM_ARGB64_GET<C>()
> * Replaced drm_argb() function with DRM_ARGB64_PREP_BPC() macro, to
> improve uAPI consistency and readability; additionally fixed a bug in
> case of using bpc < 16: the unused least-significant bits of a given
> component in the output value would contain the unused
> most-significant bits of the following component in the input value,
> instead of being set to 0
> * Replaced GENMASK_ULL(63, 0) with U64_MAX when calling
> drm_property_create_range() to create the BACKGROUND_COLOR property
> * Moved crtc_state->bgcolor initialization from
> __drm_atomic_helper_crtc_reset() to
> __drm_atomic_helper_crtc_state_reset()
> * Replaced '*bgcolor*' occurrences to '*background_color*' for
> consistency with the actual property name in both storage field and
> helper functions names
>
> The subsequent patches add background color support to VKMS and the VOP2
> display controller used in the RK3568, RK3576, and RK3588 Rockchip SoC
> families.
>
> The validation has been done using a dedicated IGT test [2] - see the
> reported results below.
>
> On the userland side, a Weston merge request [3] is available, providing
> support for the BACKGROUND_COLOR CRTC property to the DRM backend. It
> relies on the already existing background-color setting in weston.ini:
>
> [shell]
> background-color=0xAARRGGBB
>
> [1] https://lore.kernel.org/all/20190930224707.14904-2-matthew.d.roper@intel.com/
> [2] https://lore.kernel.org/all/20251219-crtc-bgcolor-v3-1-31b589911588@collabora.com/
> [3] https://gitlab.freedesktop.org/wayland/weston/-/merge_requests/1845
>
> IGT kms_crtc_background_color test results
> ==========================================
>
> * VKMS
>
> virtme-ng$ IGT_FORCE_DRIVER=vkms build/tests/kms_crtc_background_color
>
> IGT-Version: 2.3-g6b07138e8 (x86_64) (Linux: 6.19.0-rc1-virtme x86_64)
> Using IGT_SRANDOM=1766149634 for randomisation
> Opened device: /dev/dri/card0
> Starting subtest: background-color-red
> Starting dynamic subtest: pipe-A-Virtual-1
> Dynamic subtest pipe-A-Virtual-1: SUCCESS (0.071s)
> Subtest background-color-red: SUCCESS (0.073s)
> Starting subtest: background-color-green
> Starting dynamic subtest: pipe-A-Virtual-1
> Dynamic subtest pipe-A-Virtual-1: SUCCESS (0.074s)
> Subtest background-color-green: SUCCESS (0.074s)
> Starting subtest: background-color-blue
> Starting dynamic subtest: pipe-A-Virtual-1
> Dynamic subtest pipe-A-Virtual-1: SUCCESS (0.074s)
> Subtest background-color-blue: SUCCESS (0.074s)
> Starting subtest: background-color-yellow
> Starting dynamic subtest: pipe-A-Virtual-1
> Dynamic subtest pipe-A-Virtual-1: SUCCESS (0.072s)
> Subtest background-color-yellow: SUCCESS (0.073s)
> Starting subtest: background-color-purple
> Starting dynamic subtest: pipe-A-Virtual-1
> Dynamic subtest pipe-A-Virtual-1: SUCCESS (0.072s)
> Subtest background-color-purple: SUCCESS (0.074s)
> Starting subtest: background-color-cyan
> Starting dynamic subtest: pipe-A-Virtual-1
> Dynamic subtest pipe-A-Virtual-1: SUCCESS (0.074s)
> Subtest background-color-cyan: SUCCESS (0.074s)
> Starting subtest: background-color-black
> Starting dynamic subtest: pipe-A-Virtual-1
> Dynamic subtest pipe-A-Virtual-1: SUCCESS (0.072s)
> Subtest background-color-black: SUCCESS (0.072s)
> Starting subtest: background-color-white
> Starting dynamic subtest: pipe-A-Virtual-1
> Dynamic subtest pipe-A-Virtual-1: SUCCESS (0.073s)
> Subtest background-color-white: SUCCESS (0.074s)
>
> * Radxa ROCK 5B (RK3588)
>
> rock5b$ build/tests/kms_crtc_background_color --device drm:/dev/dri/card1
>
> IGT-Version: 2.2-g3e4ec308e (aarch64) (Linux: 6.18.0-rc1 aarch64)
> Using IGT_SRANDOM=1762774806 for randomisation
> Opened device: /dev/dri/card1
> Starting subtest: background-color-red
> Starting dynamic subtest: pipe-C-DP-1
> Dynamic subtest pipe-C-DP-1: SUCCESS (0.491s)
> Subtest background-color-red: SUCCESS (0.493s)
> Starting subtest: background-color-green
> Starting dynamic subtest: pipe-C-DP-1
> Dynamic subtest pipe-C-DP-1: SUCCESS (0.533s)
> Subtest background-color-green: SUCCESS (0.535s)
> Starting subtest: background-color-blue
> Starting dynamic subtest: pipe-C-DP-1
> Dynamic subtest pipe-C-DP-1: SUCCESS (0.541s)
> Subtest background-color-blue: SUCCESS (0.544s)
> Starting subtest: background-color-yellow
> Starting dynamic subtest: pipe-C-DP-1
> Dynamic subtest pipe-C-DP-1: SUCCESS (0.535s)
> Subtest background-color-yellow: SUCCESS (0.537s)
> Starting subtest: background-color-purple
> Starting dynamic subtest: pipe-C-DP-1
> Dynamic subtest pipe-C-DP-1: SUCCESS (0.536s)
> Subtest background-color-purple: SUCCESS (0.538s)
> Starting subtest: background-color-cyan
> Starting dynamic subtest: pipe-C-DP-1
> Dynamic subtest pipe-C-DP-1: SUCCESS (0.539s)
> Subtest background-color-cyan: SUCCESS (0.541s)
> Starting subtest: background-color-black
> Starting dynamic subtest: pipe-C-DP-1
> (kms_crtc_background_color:744) igt_pipe_crc-WARNING: Warning on condition all_zero in function crc_sanity_checks, file ../lib/igt_pipe_crc.c:475
> (kms_crtc_background_color:744) igt_pipe_crc-WARNING: Suspicious CRC: All values are 0.
> (kms_crtc_background_color:744) igt_pipe_crc-WARNING: Warning on condition all_zero in function crc_sanity_checks, file ../lib/igt_pipe_crc.c:475
> (kms_crtc_background_color:744) igt_pipe_crc-WARNING: Suspicious CRC: All values are 0.
> Dynamic subtest pipe-C-DP-1: SUCCESS (0.535s)
> Subtest background-color-black: SUCCESS (0.537s)
> Starting subtest: background-color-white
> Starting dynamic subtest: pipe-C-DP-1
> Dynamic subtest pipe-C-DP-1: SUCCESS (0.540s)
> Subtest background-color-white: SUCCESS (0.542s)
>
> Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea at collabora.com>
> ---
> Changes in v7:
> - Consistently put "({" on a separate line for all macro definitions
> (Andy Shevchenko)
> - Rebased series onto latest drm-misc-next
> - Link to v6: https://lore.kernel.org/r/20260129-rk3588-bgcolor-v6-0-c15f755a4055@collabora.com
>
> Changes in v6:
> - Collected Acked-by & Reviewed-by tags from Andy S & Angelo
> - Handled feedback from Andy Shevchenko
> * Fixed up styling for __KERNEL_DIV_ROUND_CLOSEST() macro
> * Made use of __GENMASK() helper in __DRM_ARGB64_PREP*() and
> __DRM_ARGB64_GET*() definitions
> * Introduced DRM_ARGB64_GET*_BPCS() as an alternative for
> DRM_ARGB64_GET*_BPC() to help when performance is more important
> than accuracy, e.g. used it along with FIELD_MODIFY() in the vop2
> related patch to simplify a bit the bgcolor operations
> - Link to v5: https://lore.kernel.org/r/20260127-rk3588-bgcolor-v5-0-b25aa8613211@collabora.com
>
> Changes in v5:
> - Collected Reviewed-by & Tested-by tags from Nícolas & Diederik
> - Dumped background_color prop value in drm_atomic_crtc_print_state()
> and updated comment in drm_crtc_state (Nícolas)
> - Documented the reasons of not using the DRM_ARGB64_GET*_BPC() helpers
> in vop2 related patch (Nícolas)
> - Rebased series onto latest drm-misc-next
> - Link to v4: https://lore.kernel.org/r/20251219-rk3588-bgcolor-v4-0-2ff1127ea757@collabora.com
>
> Changes in v4:
> - Switched to simple bit-shifting approach when performing the bpc
> conversion in the vop2 driver, to avoid the expensive division since
> we shouldn't be concerned anymore about the precision (Chaoyi)
> - Rebased series onto latest drm-misc-next
> - Link to v3: https://lore.kernel.org/r/20251118-rk3588-bgcolor-v3-0-a2cc909428ea@collabora.com
>
> Changes in v3:
> - Added new patches:
> * uapi: Provide DIV_ROUND_CLOSEST()
> * drm/vkms: Support setting custom background color
> - Improved DRM_ARGB64_{PREP|GET}*() helpers by using a conversion ratio
> for better color approximation when dealing with less than 16 bits of
> precision
> - Mentioned the IGT test in the cover letter while documenting the
> validation results; also dropped references to the now useless
> modetest wrapper script and its generated report
> - Rebased series onto latest drm-misc-next
> - Link to v2: https://lore.kernel.org/r/20251013-rk3588-bgcolor-v2-0-25cc3810ba8c@collabora.com
>
> Changes in v2:
> - Improved uAPI consistency and readability by introducing
> DRM_ARGB64_PREP*() and DRM_ARGB64_GET*() helper macros
> - Updated several code comment sections
> - Referenced the counterpart Weston support in the cover letter
> - Rebased series onto v6.18-rc1
> - Link to v1: https://lore.kernel.org/r/20250902-rk3588-bgcolor-v1-0-fd97df91d89f@collabora.com
>
> ---
> Cristian Ciocaltea (4):
> uapi: Provide DIV_ROUND_CLOSEST()
> drm: Add CRTC background color property
> drm/vkms: Support setting custom background color
> drm/rockchip: vop2: Support setting custom background color
>
> drivers/gpu/drm/drm_atomic.c | 1 +
> drivers/gpu/drm/drm_atomic_state_helper.c | 1 +
> drivers/gpu/drm/drm_atomic_uapi.c | 4 ++
> drivers/gpu/drm/drm_blend.c | 39 ++++++++++++--
> drivers/gpu/drm/drm_mode_config.c | 6 +++
> drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 17 +++++-
> drivers/gpu/drm/rockchip/rockchip_drm_vop2.h | 4 ++
> drivers/gpu/drm/vkms/vkms_composer.c | 10 +++-
> drivers/gpu/drm/vkms/vkms_crtc.c | 3 ++
> include/drm/drm_blend.h | 4 +-
> include/drm/drm_crtc.h | 12 +++++
> include/drm/drm_mode_config.h | 5 ++
> include/linux/math.h | 18 +------
> include/uapi/drm/drm_mode.h | 80 ++++++++++++++++++++++++++++
> include/uapi/linux/const.h | 18 +++++++
> 15 files changed, 197 insertions(+), 25 deletions(-)
> ---
> base-commit: cff3f89ffbdd4b6c43a117c01aaf5b290ff80803
> change-id: 20250829-rk3588-bgcolor-c1a7b9a507bc
Excellent, I still have the original patches in a branch somewhere for intel/display.
Will rebase once this lands!
More information about the Linux-rockchip
mailing list