From: Fangzhi Zuo <[email protected]>

A 4K144 display attached through a USB4 (Thunderbolt) dock does not light
up on DCN4.2.  The native DP link bandwidth reported for the sink is far
larger than the USB4 tunnel can carry, so DSC is sized to the link and the
resulting stream overflows the tunnel's granted bandwidth.  The bandwidth
allocation request fails and the display stays dark.

When the endpoint is a USB4 DPIA with BW allocation enabled, force DSC and
cap the target to 8 bpp in SST mode. This keeps the compressed stream within
the tunnel budget and reserves headroom for other DP tunnels
sharing the same host router.

Reviewed-by: Roman Li <[email protected]>
Signed-off-by: Fangzhi Zuo <[email protected]>
Signed-off-by: Chenyu Chen <[email protected]>
---
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c
index c9c8db972922..9dfaaac2828d 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c
@@ -1264,6 +1264,12 @@ static void apply_dsc_policy_for_stream(struct 
amdgpu_dm_connector *aconnector,
        link_bandwidth_kbps = dc_link_bandwidth_kbps(aconnector->dc_link,
                                                        
dc_link_get_link_cap(aconnector->dc_link));
 
+       if (aconnector->dc_link->ep_type == DISPLAY_ENDPOINT_USB4_DPIA &&
+           aconnector->dc_link->dpia_bw_alloc_config.bw_alloc_enabled) {
+               dsc_options.max_target_bpp_limit_override_x16 = 8 * 16;
+               dsc_options.force_dsc_when_not_needed = true;
+       }
+
        /* Set DSC policy according to dsc_clock_en */
        dc_dsc_policy_set_enable_dsc_when_not_needed(
                aconnector->dsc_settings.dsc_force_enable == 
DSC_CLK_FORCE_ENABLE);
-- 
2.43.0

Reply via email to