5.4.87, 5.10.5
This commit is contained in:
@@ -137,117 +137,6 @@ index bf7ecab5d9e5..142e9dae2837 100644
|
||||
--
|
||||
cgit v1.2.3-1-gf6bb5
|
||||
|
||||
From 88fbde26128dedf0097aa45b8c923973a4e5f843 Mon Sep 17 00:00:00 2001
|
||||
From: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
|
||||
Date: Tue, 15 Dec 2020 10:33:34 -0500
|
||||
Subject: drm/amd/display: Add get_dig_frontend implementation for DCEx
|
||||
|
||||
Some old ASICs might not implement/require get_dig_frontend helper; in
|
||||
this scenario, we can have a NULL pointer exception when we try to call
|
||||
it inside vbios disable operation. For example, this situation might
|
||||
happen when using Polaris12 with an eDP panel. This commit avoids this
|
||||
situation by adding a specific get_dig_frontend implementation for DCEx.
|
||||
|
||||
Cc: Alex Deucher <alexander.deucher@amd.com>
|
||||
Cc: Borislav Petkov <bp@alien8.de>
|
||||
Cc: Harry Wentland <Harry.Wentland@amd.com>
|
||||
Cc: Nicholas Kazlauskas <Nicholas.Kazlauskas@amd.com>
|
||||
Cc: Chiawen Huang <chiawen.huang@amd.com>
|
||||
Reported-and-tested-by: Borislav Petkov <bp@suse.de>
|
||||
Acked-by: Alex Deucher <alexander.deucher@amd.com>
|
||||
Signed-off-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
|
||||
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
||||
Cc: stable@vger.kernel.org
|
||||
---
|
||||
.../gpu/drm/amd/display/dc/dce/dce_link_encoder.c | 44 +++++++++++++++++++++-
|
||||
.../gpu/drm/amd/display/dc/dce/dce_link_encoder.h | 2 +
|
||||
2 files changed, 44 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.c b/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.c
|
||||
index b409f6b2bfd8..56bc401536c5 100644
|
||||
--- a/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.c
|
||||
+++ b/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.c
|
||||
@@ -119,7 +119,8 @@ static const struct link_encoder_funcs dce110_lnk_enc_funcs = {
|
||||
.disable_hpd = dce110_link_encoder_disable_hpd,
|
||||
.is_dig_enabled = dce110_is_dig_enabled,
|
||||
.destroy = dce110_link_encoder_destroy,
|
||||
- .get_max_link_cap = dce110_link_encoder_get_max_link_cap
|
||||
+ .get_max_link_cap = dce110_link_encoder_get_max_link_cap,
|
||||
+ .get_dig_frontend = dce110_get_dig_frontend
|
||||
};
|
||||
|
||||
static enum bp_result link_transmitter_control(
|
||||
@@ -235,6 +236,44 @@ static void set_link_training_complete(
|
||||
|
||||
}
|
||||
|
||||
+unsigned int dce110_get_dig_frontend(struct link_encoder *enc)
|
||||
+{
|
||||
+ struct dce110_link_encoder *enc110 = TO_DCE110_LINK_ENC(enc);
|
||||
+ u32 value;
|
||||
+ enum engine_id result;
|
||||
+
|
||||
+ REG_GET(DIG_BE_CNTL, DIG_FE_SOURCE_SELECT, &value);
|
||||
+
|
||||
+ switch (value) {
|
||||
+ case DCE110_DIG_FE_SOURCE_SELECT_DIGA:
|
||||
+ result = ENGINE_ID_DIGA;
|
||||
+ break;
|
||||
+ case DCE110_DIG_FE_SOURCE_SELECT_DIGB:
|
||||
+ result = ENGINE_ID_DIGB;
|
||||
+ break;
|
||||
+ case DCE110_DIG_FE_SOURCE_SELECT_DIGC:
|
||||
+ result = ENGINE_ID_DIGC;
|
||||
+ break;
|
||||
+ case DCE110_DIG_FE_SOURCE_SELECT_DIGD:
|
||||
+ result = ENGINE_ID_DIGD;
|
||||
+ break;
|
||||
+ case DCE110_DIG_FE_SOURCE_SELECT_DIGE:
|
||||
+ result = ENGINE_ID_DIGE;
|
||||
+ break;
|
||||
+ case DCE110_DIG_FE_SOURCE_SELECT_DIGF:
|
||||
+ result = ENGINE_ID_DIGF;
|
||||
+ break;
|
||||
+ case DCE110_DIG_FE_SOURCE_SELECT_DIGG:
|
||||
+ result = ENGINE_ID_DIGG;
|
||||
+ break;
|
||||
+ default:
|
||||
+ // invalid source select DIG
|
||||
+ result = ENGINE_ID_UNKNOWN;
|
||||
+ }
|
||||
+
|
||||
+ return result;
|
||||
+}
|
||||
+
|
||||
void dce110_link_encoder_set_dp_phy_pattern_training_pattern(
|
||||
struct link_encoder *enc,
|
||||
uint32_t index)
|
||||
@@ -1665,7 +1704,8 @@ static const struct link_encoder_funcs dce60_lnk_enc_funcs = {
|
||||
.disable_hpd = dce110_link_encoder_disable_hpd,
|
||||
.is_dig_enabled = dce110_is_dig_enabled,
|
||||
.destroy = dce110_link_encoder_destroy,
|
||||
- .get_max_link_cap = dce110_link_encoder_get_max_link_cap
|
||||
+ .get_max_link_cap = dce110_link_encoder_get_max_link_cap,
|
||||
+ .get_dig_frontend = dce110_get_dig_frontend
|
||||
};
|
||||
|
||||
void dce60_link_encoder_construct(
|
||||
diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.h b/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.h
|
||||
index cb714a48b171..fc6ade824c23 100644
|
||||
--- a/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.h
|
||||
+++ b/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.h
|
||||
@@ -295,6 +295,8 @@ void dce110_link_encoder_connect_dig_be_to_fe(
|
||||
enum engine_id engine,
|
||||
bool connect);
|
||||
|
||||
+unsigned int dce110_get_dig_frontend(struct link_encoder *enc);
|
||||
+
|
||||
void dce110_link_encoder_set_dp_phy_pattern_training_pattern(
|
||||
struct link_encoder *enc,
|
||||
uint32_t index);
|
||||
--
|
||||
cgit v1.2.3-1-gf6bb5
|
||||
|
||||
From 0128c7314a4d856461caacfdd528a7bffa03d41e Mon Sep 17 00:00:00 2001
|
||||
From: Josef Bacik <josef@toxicpanda.com>
|
||||
Date: Wed, 23 Dec 2020 14:41:00 -0500
|
||||
|
Reference in New Issue
Block a user