diff options
author | graysky | 2020-12-28 11:48:04 -0500 |
---|---|---|
committer | graysky | 2020-12-28 11:48:04 -0500 |
commit | 43d6b45d011cc8abc9e0babf18b79860725df96b (patch) | |
tree | eaec723831797990654efcce2b196f63dc0a3741 /0005-drm-amd-display-Add-get_dig_frontend-implementation-.patch | |
parent | 086a9ba0987d3cecce318afd5a0e6faf048ea676 (diff) | |
download | aur-43d6b45d011cc8abc9e0babf18b79860725df96b.tar.gz |
Update to 5.10.4rc1-1
Diffstat (limited to '0005-drm-amd-display-Add-get_dig_frontend-implementation-.patch')
-rw-r--r-- | 0005-drm-amd-display-Add-get_dig_frontend-implementation-.patch | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/0005-drm-amd-display-Add-get_dig_frontend-implementation-.patch b/0005-drm-amd-display-Add-get_dig_frontend-implementation-.patch new file mode 100644 index 000000000000..4cb2e2b1d307 --- /dev/null +++ b/0005-drm-amd-display-Add-get_dig_frontend-implementation-.patch @@ -0,0 +1,112 @@ +From 39136f88e40628ff112fa5efd035e7707750d1a9 Mon Sep 17 00:00:00 2001 +From: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com> +Date: Tue, 15 Dec 2020 10:33:34 -0500 +Subject: [PATCH 5/9] 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 +--- + .../drm/amd/display/dc/dce/dce_link_encoder.c | 44 ++++++++++++++++++- + .../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); +-- +2.29.2 + |