From nobody Mon Apr 6 10:31:52 2026 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EA2D6125B2 for ; Thu, 19 Mar 2026 12:29:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773923375; cv=pass; b=MCX8pgZ1XA1Q4eMVi3x4sLDatPJAazITOyqCqdGZgnSjterzAe1PX6rILw8oTITuCYDz46dUoyDULsH0/XO9IDmdnGt3JD1N5bEOp4X/yTVZDghahJIJpUYzxzQ+FqU3qGLg/PcEH+A6gEBTDvmKoOPgHc3y644AqnOiJz7sEKs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773923375; c=relaxed/simple; bh=n13rxeCEmmM6/cUtcDCIvKzzXXabkwbMALV5z4FpL/4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=O6U7Ez70rFi++YdAZXn9GoRKKXh1N5LAt3gcbnpO4pFiYOugGFmeLJ7W9yxQAz3Ki9fef0Pf/mXAMYc6HuPxSri1kCEBakU3jt2sljbH7SOYh+XPgbYNM3C1yJXhfgRs3bQu9MUxYi63aB/uwc96P9MM9/A9/lk/cG2hpOn1EfQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=Dud7XSWr; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="Dud7XSWr" ARC-Seal: i=1; a=rsa-sha256; t=1773923351; cv=none; d=zohomail.com; s=zohoarc; b=SXPzV3neDRYpcqTN3Dg8paMbK44IuJpKDHvBB4q9zLyrjoYi5kSjU6g8VQn2tRmQx1xpdt18Z7BEkmidG+KgsrmMxx8IK5ZPVUUMFdO+IZ6N/Trme2dkZ8DxcKVo+XRA3++Gq9med9MAskzYWf4oGiqX8wyIZMlKB9rVVeIzsoA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773923351; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=HERNsiO+AmseOHUAajYxhmX8OFO6M4aKa5FpX3NZ7Mw=; b=PTF7fv5EN393r0dmK85QnNlloFr3DLWIt3AjHLXaNr0er4CtPKfVCVXY99E+rkuquoDa2JvtSuh4hxM6E90Vc1dVSRPagv2frD4CC2ddvLG0dZGdZgvqchvFDbXRddRrUjl5sjTa0ePVGWvt7Zr1ybm85XWA/8EQ8jE30arDu8s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1773923351; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=HERNsiO+AmseOHUAajYxhmX8OFO6M4aKa5FpX3NZ7Mw=; b=Dud7XSWrkzpPJsvHMgTVZDpmAsWzZ7bXTEEaq1Dwkx6QocI4xC4ALFu3vJfKJHC/ Zewr2KnCAJiSuYj1Hs1z+YROsEsZ7lZI1qF6Sv+Btdmp0kY5vqGCl37b5yL4pfUhBHN +i4qHqvn7QQvNPkGac0bkwS/cR3OJ0wguRhoHPdw= Received: by mx.zohomail.com with SMTPS id 1773923349912644.2358171481867; Thu, 19 Mar 2026 05:29:09 -0700 (PDT) From: Nicolas Frattaroli Date: Thu, 19 Mar 2026 13:28:34 +0100 Subject: [PATCH v5 1/3] drm/connector: Add a 'link bpc' property Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260319-link-bpc-v5-1-5306cd04a708@collabora.com> References: <20260319-link-bpc-v5-0-5306cd04a708@collabora.com> In-Reply-To: <20260319-link-bpc-v5-0-5306cd04a708@collabora.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , =?utf-8?q?Christian_K=C3=B6nig?= , =?utf-8?q?Ville_Syrj=C3=A4l=C3=A4?= , Daniel Stone , Dmitry Baryshkov Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, amd-gfx@lists.freedesktop.org, kernel@collabora.com, Nicolas Frattaroli , Derek Foreman , Marius Vlad X-Mailer: b4 0.14.3 Display drivers may degrade from higher bit depths to lower bit depths for reasons such as bandwidth constraints. Userspace applications, such as compositors, may wish to know that this has occurred transparently, instead of assuming that the "max bpc" they requested could be reached. Introduce a new immutable DRM property called "link bpc" that reflects the current display link's bits-per-component. An uevent is fired when the link bpc value changes on an atomic commit. Acked-by: Maxime Ripard Co-developed-by: Derek Foreman Signed-off-by: Derek Foreman Co-developed-by: Marius Vlad Signed-off-by: Marius Vlad Signed-off-by: Nicolas Frattaroli --- drivers/gpu/drm/drm_atomic_helper.c | 9 ++++ drivers/gpu/drm/drm_atomic_uapi.c | 2 + drivers/gpu/drm/drm_connector.c | 82 +++++++++++++++++++++++++++++++++= ++++ include/drm/drm_connector.h | 16 ++++++++ 4 files changed, 109 insertions(+) diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atom= ic_helper.c index 26953ed6b53e..4a932f543ac7 100644 --- a/drivers/gpu/drm/drm_atomic_helper.c +++ b/drivers/gpu/drm/drm_atomic_helper.c @@ -2033,9 +2033,11 @@ EXPORT_SYMBOL(drm_atomic_helper_commit_tail_rpm); =20 static void commit_tail(struct drm_atomic_state *state) { + struct drm_connector_state *old_conn_state, *new_conn_state; struct drm_device *dev =3D state->dev; const struct drm_mode_config_helper_funcs *funcs; struct drm_crtc_state *new_crtc_state; + struct drm_connector *connector; struct drm_crtc *crtc; ktime_t start; s64 commit_time_ms; @@ -2059,6 +2061,13 @@ static void commit_tail(struct drm_atomic_state *sta= te) =20 drm_atomic_helper_wait_for_dependencies(state); =20 + for_each_oldnew_connector_in_state(state, connector, old_conn_state, + new_conn_state, i) { + if (old_conn_state->link_bpc !=3D new_conn_state->link_bpc) + drm_connector_update_link_bpc_property(connector, + new_conn_state); + } + /* * We cannot safely access new_crtc_state after * drm_atomic_helper_commit_hw_done() so figure out which crtc's have diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic= _uapi.c index 5bd5bf6661df..12e7a5ab2299 100644 --- a/drivers/gpu/drm/drm_atomic_uapi.c +++ b/drivers/gpu/drm/drm_atomic_uapi.c @@ -1020,6 +1020,8 @@ drm_atomic_connector_get_property(struct drm_connecto= r *connector, *val =3D state->privacy_screen_sw_state; } else if (property =3D=3D connector->broadcast_rgb_property) { *val =3D state->hdmi.broadcast_rgb; + } else if (property =3D=3D connector->link_bpc_property) { + *val =3D state->link_bpc; } else if (connector->funcs->atomic_get_property) { return connector->funcs->atomic_get_property(connector, state, property, val); diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connecto= r.c index e70699c59c43..878e9db2c895 100644 --- a/drivers/gpu/drm/drm_connector.c +++ b/drivers/gpu/drm/drm_connector.c @@ -542,6 +542,75 @@ int drmm_connector_init(struct drm_device *dev, } EXPORT_SYMBOL(drmm_connector_init); =20 +/** + * drm_connector_attach_link_bpc_property - create and attach 'link bpc' p= roperty + * @connector: drm connector + * @max_bpc: specify the upper limit, matching that of 'max bpc' property + * + * Create and attach the 'link bpc' DRM property on @connector with an upp= er + * limit of @max_bpc. + * + * Returns: + * 0 on success, negative errno on failure. + */ +int +drm_connector_attach_link_bpc_property(struct drm_connector *connector, + unsigned int max_bpc) +{ + struct drm_device *dev =3D connector->dev; + struct drm_property *prop; + + if (connector->link_bpc_property) + return -EBUSY; + + if (max_bpc < 8 || max_bpc > U8_MAX) + return -EINVAL; + + prop =3D drm_property_create_range(dev, DRM_MODE_PROP_IMMUTABLE, + "link bpc", 8, max_bpc); + if (!prop) + return -ENOMEM; + + connector->link_bpc_property =3D prop; + + drm_object_attach_property(&connector->base, prop, max_bpc); + + return 0; +} +EXPORT_SYMBOL(drm_connector_attach_link_bpc_property); + +/** + * drm_connector_update_link_bpc_property - update the 'link bpc' property= of a + * connector and fire uevent + * @connector: pointer to the &struct drm_connector + * @state: pointer to the &struct drm_connector_state with the new value + * + * Update the 'link bpc' property of the given @connector to the + * &drm_connector_state.link_bpc member's value of @state and fire a ueven= t. + */ +void +drm_connector_update_link_bpc_property(struct drm_connector *connector, + struct drm_connector_state *state) +{ + u8 bpc =3D clamp(state->link_bpc, 8, state->max_bpc); + + if (!connector->link_bpc_property) + return; + + if (bpc !=3D state->link_bpc) + drm_dbg_kms(connector->dev, "[CONNECTOR:%d:%s] Clamping link bpc from %u= to %u\n", + connector->base.id, connector->name, state->link_bpc, bpc); + + drm_dbg_kms(connector->dev, "[CONNECTOR:%d:%s] Setting state link bpc %u\= n", + connector->base.id, connector->name, bpc); + drm_object_property_set_value(&connector->base, connector->link_bpc_prope= rty, + bpc); + + drm_sysfs_connector_property_event(connector, + connector->link_bpc_property); +} +EXPORT_SYMBOL(drm_connector_update_link_bpc_property); + /** * drmm_connector_hdmi_init - Init a preallocated HDMI connector * @dev: DRM device @@ -1713,6 +1782,19 @@ EXPORT_SYMBOL(drm_hdmi_connector_get_output_format_n= ame); * drm_connector_attach_max_bpc_property() to create and attach the * property to the connector during initialization. * + * link bpc: + * This immutable range property can be used by userspace to determine the + * current display link's bit depth. Drivers can use + * drm_connector_attach_link_bpc_property() to create and attach the + * property to the connector during initialization. They can then set the + * &drm_connector_state.link_bpc member to the actual output bit depth + * after any degradation. The drm property will be updated to this member's + * value on the next atomic commit, and if it changed, a uevent will be + * fired. + * Userspace can listen to the uevent to be notified of link bpc changes, + * and compare the property's value to what userspace requested to + * determine whether colour depth has been degraded. + * * Connectors also have one standardized atomic property: * * CRTC_ID: diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index c18be8c19de0..3c339a9840c9 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -1132,6 +1132,11 @@ struct drm_connector_state { */ u8 max_bpc; =20 + /** + * @link_bpc: Current display link's bits-per-component. + */ + u8 link_bpc; + /** * @privacy_screen_sw_state: See :ref:`Standard Connector * Properties` @@ -2124,6 +2129,12 @@ struct drm_connector { */ struct drm_property *max_bpc_property; =20 + /** + * @link_bpc_property: Connector property that reflects the current + * output bits per component. + */ + struct drm_property *link_bpc_property; + /** @privacy_screen: drm_privacy_screen for this connector, or NULL. */ struct drm_privacy_screen *privacy_screen; =20 @@ -2534,6 +2545,11 @@ void drm_connector_attach_privacy_screen_provider( struct drm_connector *connector, struct drm_privacy_screen *priv); void drm_connector_update_privacy_screen(const struct drm_connector_state = *connector_state); =20 +int drm_connector_attach_link_bpc_property(struct drm_connector *connector, + unsigned int max_bpc); +void drm_connector_update_link_bpc_property(struct drm_connector *connecto= r, + struct drm_connector_state *state); + /** * struct drm_tile_group - Tile group metadata * @refcount: reference count --=20 2.53.0 From nobody Mon Apr 6 10:31:52 2026 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1D4D738BF60 for ; Thu, 19 Mar 2026 12:29:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773923380; cv=pass; b=AsX3wqiLTDWmU4UiHPLGNrdhts2KpAyzuiiEJ6OkdDB7tTFwB8v1iL8ZWZyvnlZE7Y4ITVVtx2eCXc5Xyr45gdRVpJxAp7wJupsHrsWWmctK+WBL67w3imieF3+ck86aypCFFeySl1ftxZmG1MVZ2EJrHbrFkAfI1FAFtBBaxMM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773923380; c=relaxed/simple; bh=InXbcOngqCL9W1DQBerjuaReHbdSSOfDKKEbpDMSqSI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DhyiRgYyenpSijYCvXjqJywoBKLYg2EkK52zTrsGLTCnHEh1bRHnGG6JmYuJR8jIq01SGkG34WpB+Ale6KmQ0i98zyX+EflAAvQuhQ0odY5ByNBSJwCFvt7khOfFcw+ja6nFgmKYMMP2DZI0e9+a7hLI1fBSf4io2H0GTKZ8caQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=Sec0+l62; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="Sec0+l62" ARC-Seal: i=1; a=rsa-sha256; t=1773923355; cv=none; d=zohomail.com; s=zohoarc; b=ZlhVSuRIUFXzhO+OA3Q2nQWOrAISGSWA4CEkaZUc61/Wc+k2IdJFECkRrJR3MV8PSBPAIckjJzfFXzMxiAKr0ykPzvC4exE23LEzlzQx415ldpMdirkvoOCT/2xqQr7C2AcoyAisjcFVO1qNgUCMOapdn+qDH+wtvcfvdk9kXlQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773923355; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=qpZcXJJWu5iOgjXzRPAyH0cclB71wo/9lwDpopULu5Y=; b=U7Jahj902b+Ij+zW24yAD/URcsS3nw9LXrHPqEGIx4LslSBjsadD1a3WicIj1EsijuWJdBeiN0jcshVgIhHgeHM7us4S7H/FZ1TLX9fJ+5R0ZzeCG/GSiSJBJqvuZ8M97VvWSL695qUss3YR4AqatqTHB+cB9it79+MizAfQ3mc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1773923355; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=qpZcXJJWu5iOgjXzRPAyH0cclB71wo/9lwDpopULu5Y=; b=Sec0+l62sPID4K5edwDw0KfKO8Xfs1SCiezBpn3U0nxsyYUGvDuTMeaz9HOmvcCS O4Ae2wOHM1/Toc53bkg6BBBAsdudW/L06COaTvdt0Vz497+DRIyqYf9CCVSjlLszy/S gWDIXgNKvzb1MUYTJXLCoIHl5rQ6yHdHSqXPJW/M= Received: by mx.zohomail.com with SMTPS id 1773923353560846.6582348302521; Thu, 19 Mar 2026 05:29:13 -0700 (PDT) From: Nicolas Frattaroli Date: Thu, 19 Mar 2026 13:28:35 +0100 Subject: [PATCH v5 2/3] drm/connector: hdmi: Add support for 'link bpc' property Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260319-link-bpc-v5-2-5306cd04a708@collabora.com> References: <20260319-link-bpc-v5-0-5306cd04a708@collabora.com> In-Reply-To: <20260319-link-bpc-v5-0-5306cd04a708@collabora.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , =?utf-8?q?Christian_K=C3=B6nig?= , =?utf-8?q?Ville_Syrj=C3=A4l=C3=A4?= , Daniel Stone , Dmitry Baryshkov Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, amd-gfx@lists.freedesktop.org, kernel@collabora.com, Nicolas Frattaroli X-Mailer: b4 0.14.3 Create and attach the 'link bpc' DRM property for every HDMI connector that's created through drmm_connector_hdmi_init. Then, set the connector state's link_bpc member in the HDMI atomic check state helper to the connector state's HDMI output bpc. Acked-by: Maxime Ripard Signed-off-by: Nicolas Frattaroli --- drivers/gpu/drm/display/drm_hdmi_state_helper.c | 2 ++ drivers/gpu/drm/drm_connector.c | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/drivers/gpu/drm/display/drm_hdmi_state_helper.c b/drivers/gpu/= drm/display/drm_hdmi_state_helper.c index a1d16762ac7a..40648574f5e5 100644 --- a/drivers/gpu/drm/display/drm_hdmi_state_helper.c +++ b/drivers/gpu/drm/display/drm_hdmi_state_helper.c @@ -865,6 +865,8 @@ int drm_atomic_helper_connector_hdmi_check(struct drm_c= onnector *connector, struct drm_crtc *crtc =3D new_conn_state->crtc; struct drm_crtc_state *crtc_state; =20 + new_conn_state->link_bpc =3D new_conn_state->hdmi.output_bpc; + crtc_state =3D drm_atomic_get_crtc_state(state, crtc); if (IS_ERR(crtc_state)) return PTR_ERR(crtc_state); diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connecto= r.c index 878e9db2c895..572894dad4bf 100644 --- a/drivers/gpu/drm/drm_connector.c +++ b/drivers/gpu/drm/drm_connector.c @@ -693,6 +693,10 @@ int drmm_connector_hdmi_init(struct drm_device *dev, drm_connector_attach_max_bpc_property(connector, 8, max_bpc); connector->max_bpc =3D max_bpc; =20 + ret =3D drm_connector_attach_link_bpc_property(connector, max_bpc); + if (ret) + return ret; + if (max_bpc > 8) drm_connector_attach_hdr_output_metadata_property(connector); =20 --=20 2.53.0 From nobody Mon Apr 6 10:31:52 2026 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BAC393C3443 for ; Thu, 19 Mar 2026 12:29:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773923381; cv=pass; b=beDiTZdUfrB1xXlWsBKCvWutY/hvo+wrBQAJMkXhlDttcceLJ7uLVNgb4yiPD4BBEoFad4SCZzzSLSZ+KfYFc4dWx7G+tHS4P8KUc2gTEp1ATkkK3K5rqLlhxkanNEPJp5ikYUk9A5/geTYmQ7xo8U8HSH2yDPl+QyhCI+47EtQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773923381; c=relaxed/simple; bh=1ccGrPnk/Jeg69c+fAeR7V7uOzbTEbhFI5PxNNwxJug=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Y+lJBYDx7VvSe6R8NFua0sN4la5YlMC3XXI5XcOJUQz1gU1/KVVjw/FD73MsFVxw+TywPCGD8m1cT/jHHLojU1PxdU4eusNrb2HgPGwvbxqg7AR4g7n3MWzHNkYXZ/bp5GgrGXiDqwuiLr7AUtaNVGzNkmLAvZjXPR85tI8+qw4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=Ik4GCzN8; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="Ik4GCzN8" ARC-Seal: i=1; a=rsa-sha256; t=1773923359; cv=none; d=zohomail.com; s=zohoarc; b=mM85oxFuJnbN9kknI9IGLyH0MfYyP9MPF+ODd8i6cK8Az2izbIl3xMotP7+/1Fo3Wdk/WPPAfN9e1M9vJaZDfnRiG77kVsCW/HV+4AMrV6QJduf6l2cWkiEHkjEyLtGcxw1F95TAAlufBGu1AYE/QKh/kqGZwsJZnQImri6G198= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773923359; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=G+Ry5mtgjlaLirG74mRV7E/3c+5G4MWEXp1PnN6/otg=; b=OR3lpcN2WFiWlh9+SOlxGVcUWic9lSlCQ0tB0bjiD1pIXEdhApEa3r5fzZc9mO2riO8txYbf34fQjBLnEiZrVNZjsCeHEq+kZoZysK184rsO7DRd5EgUEyvTeyKUwD9U34wokGgwCk1bxvrHdwyO3I8IKibXaLKRCh4r0fzeXSU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1773923359; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=G+Ry5mtgjlaLirG74mRV7E/3c+5G4MWEXp1PnN6/otg=; b=Ik4GCzN8Uiy0eUxY9LQwSRZuu2TmFR2zI6An65RO2jU0oGSiapfNR2whzWvfQ20n CTMYNOIYTBT0QzQ9wusPovrtGaM7rmcso/9W5kerUemY5vZVfeKIvJ6hqacuNoKwP6F fRmdNbUJAVnTCnMOwVFWCeOLG+2Vr8a/poxTvbRo= Received: by mx.zohomail.com with SMTPS id 1773923357289958.1832137646468; Thu, 19 Mar 2026 05:29:17 -0700 (PDT) From: Nicolas Frattaroli Date: Thu, 19 Mar 2026 13:28:36 +0100 Subject: [PATCH v5 3/3] drm/amd/display: Add support for 'link bpc' property Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260319-link-bpc-v5-3-5306cd04a708@collabora.com> References: <20260319-link-bpc-v5-0-5306cd04a708@collabora.com> In-Reply-To: <20260319-link-bpc-v5-0-5306cd04a708@collabora.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , =?utf-8?q?Christian_K=C3=B6nig?= , =?utf-8?q?Ville_Syrj=C3=A4l=C3=A4?= , Daniel Stone , Dmitry Baryshkov Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, amd-gfx@lists.freedesktop.org, kernel@collabora.com, Nicolas Frattaroli X-Mailer: b4 0.14.3 The 'link bpc' DRM property exposes the connector's current display link bits per component value. This allows userspace to discover whether a link has degraded from a higher bit depth to a lower one. Add support for it in amdgpu. Signed-off-by: Nicolas Frattaroli --- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gp= u/drm/amd/display/amdgpu_dm/amdgpu_dm.c index 65b256a7b6c4..467821cab009 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -7186,6 +7186,14 @@ static void apply_dsc_policy_for_stream(struct amdgp= u_dm_connector *aconnector, } #endif =20 +static void amdgpu_dm_update_link_bpc(struct drm_connector_state *conn_sta= te, + enum dc_color_depth depth) +{ + /* 6 bpc is an experimental internal format only, use 8 as minimum */ + conn_state->link_bpc =3D clamp(convert_dc_color_depth_into_bpc(depth), 8, + conn_state->max_bpc); +} + static struct dc_stream_state * create_stream_for_sink(struct drm_connector *connector, const struct drm_display_mode *drm_mode, @@ -8983,8 +8991,10 @@ void amdgpu_dm_connector_init_helper(struct amdgpu_d= isplay_manager *dm, adev->mode_info.underscan_vborder_property, 0); =20 - if (!aconnector->mst_root) + if (!aconnector->mst_root) { drm_connector_attach_max_bpc_property(&aconnector->base, 8, 16); + drm_connector_attach_link_bpc_property(&aconnector->base, 16); + } =20 aconnector->base.state->max_bpc =3D 16; aconnector->base.state->max_requested_bpc =3D aconnector->base.state->max= _bpc; @@ -11427,6 +11437,9 @@ static int dm_update_crtc_state(struct amdgpu_displ= ay_manager *dm, goto fail; } =20 + amdgpu_dm_update_link_bpc(drm_new_conn_state, + new_stream->timing.display_color_depth); + /* * TODO: Check VSDB bits to decide whether this should * be enabled or not. --=20 2.53.0