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 <[email protected]>
---
 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/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index dfe95c9b8746..cca4dd93bb6d 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -7184,6 +7184,14 @@ static void apply_dsc_policy_for_stream(struct 
amdgpu_dm_connector *aconnector,
 }
 #endif
 
+static void amdgpu_dm_update_link_bpc(struct drm_connector_state *conn_state,
+                                     enum dc_color_depth depth)
+{
+       /* 6 bpc is an experimental internal format only, use 8 as minimum */
+       conn_state->link_bpc = 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,
@@ -8981,8 +8989,10 @@ void amdgpu_dm_connector_init_helper(struct 
amdgpu_display_manager *dm,
                                adev->mode_info.underscan_vborder_property,
                                0);
 
-       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);
+       }
 
        aconnector->base.state->max_bpc = 16;
        aconnector->base.state->max_requested_bpc = 
aconnector->base.state->max_bpc;
@@ -11425,6 +11435,9 @@ static int dm_update_crtc_state(struct 
amdgpu_display_manager *dm,
                        goto fail;
                }
 
+               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.

-- 
2.53.0

Reply via email to