drm/amd/display: Read LTTPR caps first on bootup
authorWesley Chalmers <Wesley.Chalmers@amd.com>
Fri, 16 Apr 2021 21:21:28 +0000 (17:21 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 15 Jun 2021 21:25:41 +0000 (17:25 -0400)
[WHY]
SCR for DP 2.0 requires that LTTPR caps be read first on hotplug.
For the sake of consistency, this should also be the case on bootup.

Signed-off-by: Wesley Chalmers <Wesley.Chalmers@amd.com>
Reviewed-by: Jun Lei <Jun.Lei@amd.com>
Acked-by: Anson Jacob <Anson.Jacob@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/dcn10/dcn10_hw_sequencer.c
drivers/gpu/drm/amd/display/dc/dcn30/dcn30_hwseq.c
drivers/gpu/drm/amd/display/dc/inc/dc_link_dp.h

index 3b175af..711ba95 100644 (file)
@@ -54,6 +54,7 @@
 #include "dce/dmub_hw_lock_mgr.h"
 #include "dc_trace.h"
 #include "dce/dmub_outbox.h"
+#include "inc/dc_link_dp.h"
 
 #define DC_LOGGER_INIT(logger)
 
@@ -1403,6 +1404,9 @@ void dcn10_init_hw(struct dc *dc)
                        if (dc->links[i]->connector_signal != SIGNAL_TYPE_DISPLAY_PORT)
                                continue;
 
+                       /* DP 2.0 requires that LTTPR Caps be read first */
+                       dp_retrieve_lttpr_cap(dc->links[i]);
+
                        /*
                         * If any of the displays are lit up turn them off.
                         * The reason is that some MST hubs cannot be turned off
index ef5d0b7..6c88c5f 100644 (file)
@@ -48,6 +48,7 @@
 #include "dc_dmub_srv.h"
 #include "link_hwss.h"
 #include "dpcd_defs.h"
+#include "inc/dc_link_dp.h"
 
 
 
@@ -529,6 +530,8 @@ void dcn30_init_hw(struct dc *dc)
                for (i = 0; i < dc->link_count; i++) {
                        if (dc->links[i]->connector_signal != SIGNAL_TYPE_DISPLAY_PORT)
                                continue;
+                       /* DP 2.0 states that LTTPR regs must be read first */
+                       dp_retrieve_lttpr_cap(dc->links[i]);
 
                        /* if any of the displays are lit up turn them off */
                        status = core_link_read_dpcd(dc->links[i], DP_SET_POWER,
index dd38dd6..e2b58ec 100644 (file)
@@ -190,4 +190,5 @@ enum dc_status dpcd_configure_lttpr_mode(
                struct link_training_settings *lt_settings);
 
 enum dp_link_encoding dp_get_link_encoding_format(const struct dc_link_settings *link_settings);
+bool dp_retrieve_lttpr_cap(struct dc_link *link);
 #endif /* __DC_LINK_DP_H__ */