Skip to content

Commit

Permalink
drm/amd/display: Fix DSC-re-computing
Browse files Browse the repository at this point in the history
[Why]
This fixes a bug introduced by commit c536555 ("drm/amd/display: dsc
mst re-compute pbn for changes on hub").
The change caused light-up issues with a second display that required
DSC on some MST docks.

[How]
Use Virtual DPCD for DSC caps in MST case.

[Limitations]
This change only affects MST DSC devices that follow specifications
additional changes are required to check for old MST DSC devices such as
ones which do not check for Virtual DPCD registers.

Reviewed-by: Swapnil Patel <swapnil.patel@amd.com>
Reviewed-by: Hersen Wu <hersenxs.wu@amd.com>
Acked-by: Tom Chung <chiahsuan.chung@amd.com>
Signed-off-by: Agustin Gutierrez <agustin.gutierrez@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
  • Loading branch information
Agustin Gutierrez authored and alexdeucher committed May 8, 2024
1 parent 284f141 commit 3f0b5af
Showing 1 changed file with 13 additions and 5 deletions.
18 changes: 13 additions & 5 deletions drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
Original file line number Diff line number Diff line change
Expand Up @@ -1219,10 +1219,6 @@ static bool is_dsc_need_re_compute(
if (dc_link->type != dc_connection_mst_branch)
return false;

if (!(dc_link->dpcd_caps.dsc_caps.dsc_basic_caps.fields.dsc_support.DSC_SUPPORT ||
dc_link->dpcd_caps.dsc_caps.dsc_basic_caps.fields.dsc_support.DSC_PASSTHROUGH_SUPPORT))
return false;

for (i = 0; i < MAX_PIPES; i++)
stream_on_link[i] = NULL;

Expand All @@ -1240,7 +1236,19 @@ static bool is_dsc_need_re_compute(
continue;

aconnector = (struct amdgpu_dm_connector *) stream->dm_stream_context;
if (!aconnector)
if (!aconnector || !aconnector->dsc_aux)
continue;

/*
* Check if cached virtual MST DSC caps are available and DSC is supported
* this change takes care of newer MST DSC capable devices that report their
* DPCD caps as per specifications in their Virtual DPCD registers.
* TODO: implement the check for older MST DSC devices that do not conform to
* specifications.
*/
if (!(aconnector->dc_sink->dsc_caps.dsc_dec_caps.is_dsc_supported ||
aconnector->dc_link->dpcd_caps.dsc_caps.dsc_basic_caps.fields.dsc_support.DSC_PASSTHROUGH_SUPPORT))
continue;

stream_on_link[new_stream_on_link_num] = aconnector;
Expand Down

0 comments on commit 3f0b5af

Please sign in to comment.