From c192672700f0812f60ec0091feae0f7da61ca27d Mon Sep 17 00:00:00 2001 From: Marius Vlad Date: Tue, 21 Oct 2025 12:40:45 +0000 Subject: [PATCH] backend-drm: Add 'link bpc' connector property The 'link bpc' DRM connector property can be used to retrieve the physical bpc value. This property can be used to find out the physical link value as drivers will try to lower the bpc value when creaing an optimal output. If we detect change we would notify the user if the value set with 'max bpc' would be different than that of 'link bpc'. Signed-off-by: Marius Vlad --- libweston/backend-drm/drm-kms-enums.h | 1 + libweston/backend-drm/drm.c | 16 ++++++++++++++++ libweston/backend-drm/kms.c | 1 + 3 files changed, 18 insertions(+) diff --git a/libweston/backend-drm/drm-kms-enums.h b/libweston/backend-drm/drm-kms-enums.h index 955a3ae15..436d28d82 100644 --- a/libweston/backend-drm/drm-kms-enums.h +++ b/libweston/backend-drm/drm-kms-enums.h @@ -124,6 +124,7 @@ enum wdrm_connector_property { WDRM_CONNECTOR_CONTENT_TYPE, WDRM_CONNECTOR_COLORSPACE, WDRM_CONNECTOR_VRR_CAPABLE, + WDRM_CONNECTOR_LINK_BPC, WDRM_CONNECTOR__COUNT }; diff --git a/libweston/backend-drm/drm.c b/libweston/backend-drm/drm.c index 759b3091f..d9878ed18 100644 --- a/libweston/backend-drm/drm.c +++ b/libweston/backend-drm/drm.c @@ -3774,6 +3774,19 @@ drm_connector_find_property_by_id(struct drm_connector *connector, return prop; } +static void +weston_head_verify_bpc_status(struct drm_head *head) +{ + unsigned int link_bpc; + + link_bpc = drm_property_get_value(&head->connector.props[WDRM_CONNECTOR_LINK_BPC], + head->connector.props_drm, 0); + + if (head->inherited_max_bpc != link_bpc) + weston_log("WARNING: max bpc was set to %u but current link bpc " + "set to %u\n", head->inherited_max_bpc, link_bpc); +} + static void drm_backend_update_conn_props(struct drm_backend *b, struct drm_device *device, @@ -3801,6 +3814,9 @@ drm_backend_update_conn_props(struct drm_backend *b, weston_head_set_content_protection_status(&head->base, drm_head_get_current_protection(head)); } + + if (conn_prop == WDRM_CONNECTOR_LINK_BPC) + weston_head_verify_bpc_status(head); } static int diff --git a/libweston/backend-drm/kms.c b/libweston/backend-drm/kms.c index ef00ed47d..e501210de 100644 --- a/libweston/backend-drm/kms.c +++ b/libweston/backend-drm/kms.c @@ -252,6 +252,7 @@ const struct drm_property_info connector_props[] = { [WDRM_CONNECTOR_VRR_CAPABLE] = { .name = "vrr_capable", }, + [WDRM_CONNECTOR_LINK_BPC] = { .name = "link bpc", }, }; const struct drm_property_info crtc_props[] = {