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!

Reply via email to