drm/amd/display: Use PSR version selected during set_psr_caps
authorNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Sun, 23 Jan 2022 18:20:04 +0000 (13:20 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 13 Apr 2022 18:59:01 +0000 (20:59 +0200)
[ Upstream commit b80ddeb29d9df449f875f0b6f5de08d7537c02b8 ]

[Why]
If the DPCD caps specifies a PSR version newer than PSR_VERSION_1 then
we fallback to using PSR_VERSION_1 in amdgpu_dm_set_psr_caps.

This gets overriden with the raw DPCD value in amdgpu_dm_link_setup_psr,
which can result in DMCUB hanging if we pass in an unsupported PSR
version number.

[How]
Fix the hang by using link->psr_settings.psr_version directly during
amdgpu_dm_link_setup_psr.

Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Reviewed-by: Anthony Koo <Anthony.Koo@amd.com>
Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_psr.c

index 70a554f1e725abeb982ba4bc681cf33bb2848350..7072fb2ec07fae47b93aae0d8ef39e858cb5c186 100644 (file)
@@ -74,10 +74,8 @@ bool amdgpu_dm_link_setup_psr(struct dc_stream_state *stream)
 
        link = stream->link;
 
-       psr_config.psr_version = link->dpcd_caps.psr_caps.psr_version;
-
-       if (psr_config.psr_version > 0) {
-               psr_config.psr_exit_link_training_required = 0x1;
+       if (link->psr_settings.psr_version != DC_PSR_VERSION_UNSUPPORTED) {
+               psr_config.psr_version = link->psr_settings.psr_version;
                psr_config.psr_frame_capture_indication_req = 0;
                psr_config.psr_rfb_setup_time = 0x37;
                psr_config.psr_sdp_transmit_line_num_deadline = 0x20;