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/[email protected]/ > [2] > https://lore.kernel.org/all/[email protected]/ > [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 <[email protected]> > --- > 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/[email protected] > > 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/[email protected] > > 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/[email protected] > > 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/[email protected] > > 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/[email protected] > > 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/[email protected] > > --- > 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!
