drm/amd/display: To support sending TPS3 pattern when restoring link
authorRobin Chen <po-tchen@amd.com>
Thu, 4 Nov 2021 20:52:12 +0000 (16:52 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 17 Nov 2021 21:58:10 +0000 (16:58 -0500)
[Why]
Some panels require to use TPS3 pattern to wake up link in PSR mode.

[How]
To add TPS3 selection information in PSR settings command and pass to
DMUB FW.

Reviewed-by: Anthony Koo <Anthony.Koo@amd.com>
Acked-by: Anson Jacob <Anson.Jacob@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Robin Chen <po-tchen@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
drivers/gpu/drm/amd/display/include/ddc_service_types.h

index e9c0ec2..60b2ccf 100644 (file)
@@ -330,6 +330,15 @@ static bool dmub_psr_copy_settings(struct dmub_psr *dmub,
        copy_settings_data->cmd_version =  DMUB_CMD_PSR_CONTROL_VERSION_1;
        copy_settings_data->panel_inst = panel_inst;
 
+       if (link->fec_state == dc_link_fec_enabled &&
+               (!memcmp(link->dpcd_caps.sink_dev_id_str, DP_SINK_DEVICE_STR_ID_1,
+                       sizeof(link->dpcd_caps.sink_dev_id_str)) ||
+               !memcmp(link->dpcd_caps.sink_dev_id_str, DP_SINK_DEVICE_STR_ID_2,
+                       sizeof(link->dpcd_caps.sink_dev_id_str))))
+               copy_settings_data->debug.bitfields.force_wakeup_by_tps3 = 1;
+       else
+               copy_settings_data->debug.bitfields.force_wakeup_by_tps3 = 0;
+
        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 c29a67c..de624fd 100644 (file)
@@ -208,10 +208,9 @@ union dmub_psr_debug_flags {
                uint32_t use_hw_lock_mgr : 1;
 
                /**
-                * Unused.
-                * TODO: Remove.
+                * Use TPS3 signal when restore main link.
                 */
-               uint32_t log_line_nums : 1;
+               uint32_t force_wakeup_by_tps3 : 1;
        } bitfields;
 
        /**
index 4de59b6..85b25e6 100644 (file)
@@ -117,4 +117,7 @@ struct av_sync_data {
        uint8_t aud_del_ins3;/* DPCD 0002Dh */
 };
 
+static const uint8_t DP_SINK_DEVICE_STR_ID_1[] = {7, 1, 8, 7, 3, 0};
+static const uint8_t DP_SINK_DEVICE_STR_ID_2[] = {7, 1, 8, 7, 5, 0};
+
 #endif /* __DAL_DDC_SERVICE_TYPES_H__ */