drm/amd/display: Waiting for 1 frame to fix the flash issue on PSR1
authorRyan Lin <tsung-hua.lin@amd.com>
Wed, 26 Oct 2022 07:12:26 +0000 (15:12 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 9 Nov 2022 22:24:57 +0000 (17:24 -0500)
[Why]
Needs more frames waiting before the PSR_Exit sending for the specific
TCON.

[How]
Add relock_delay_frame_cnt to control how many frames waiting are needed
before the PSR_Exit sending. The default value is 0. The Driver side can
set this variable for specific TCONs.

Reviewed-by: Robin Chen <robin.chen@amd.com>
Acked-by: Alan Liu <HaoPing.Liu@amd.com>
Signed-off-by: Ryan Lin <tsung-hua.lin@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dce/dmub_psr.c
drivers/gpu/drm/amd/display/dmub/inc/dmub_cmd.h

index cda1592..2d3201b 100644 (file)
@@ -413,6 +413,11 @@ static bool dmub_psr_copy_settings(struct dmub_psr *dmub,
        else
                copy_settings_data->debug.bitfields.force_wakeup_by_tps3 = 0;
 
+       //WA for PSR1 on specific TCON, require frame delay for frame re-lock
+       copy_settings_data->relock_delay_frame_cnt = 0;
+       if (link->dpcd_caps.sink_dev_id == DP_BRANCH_DEVICE_ID_001CF8)
+               copy_settings_data->relock_delay_frame_cnt = 2;
+
        dc_dmub_srv_cmd_queue(dc->dmub_srv, &cmd);
        dc_dmub_srv_cmd_execute(dc->dmub_srv);
        dc_dmub_srv_wait_idle(dc->dmub_srv);
index 9df330c..34b03bc 100644 (file)
@@ -1877,9 +1877,13 @@ struct dmub_cmd_psr_copy_settings_data {
         */
        uint8_t use_phy_fsm;
        /**
+        * frame delay for frame re-lock
+        */
+       uint8_t relock_delay_frame_cnt;
+       /**
         * Explicit padding to 2 byte boundary.
         */
-       uint8_t pad3[2];
+       uint8_t pad3;
 };
 
 /**