aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2806-drm-amd-display-fix-AZ-clock-not-enabled-before-prog.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2806-drm-amd-display-fix-AZ-clock-not-enabled-before-prog.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2806-drm-amd-display-fix-AZ-clock-not-enabled-before-prog.patch101
1 files changed, 101 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2806-drm-amd-display-fix-AZ-clock-not-enabled-before-prog.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2806-drm-amd-display-fix-AZ-clock-not-enabled-before-prog.patch
new file mode 100644
index 00000000..a2c00130
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2806-drm-amd-display-fix-AZ-clock-not-enabled-before-prog.patch
@@ -0,0 +1,101 @@
+From a787efcd7c6878c0ce87c2dbaa29bcf5220f3f6b Mon Sep 17 00:00:00 2001
+From: Charlene Liu <charlene.liu@amd.com>
+Date: Wed, 25 Oct 2017 14:12:51 -0400
+Subject: [PATCH 2806/4131] drm/amd/display: fix AZ clock not enabled before
+ program AZ endpoint
+
+Signed-off-by: Charlene Liu <charlene.liu@amd.com>
+Reviewed-by: Anthony Koo <Anthony.Koo@amd.com>
+Acked-by: Harry Wentland <harry.wentland@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/dce/dce_audio.c | 31 ++++++++++++++++++++++++--
+ 1 file changed, 29 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_audio.c b/drivers/gpu/drm/amd/display/dc/dce/dce_audio.c
+index d882adf..81c40f8 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce/dce_audio.c
++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_audio.c
+@@ -348,29 +348,44 @@ static void set_audio_latency(
+
+ void dce_aud_az_enable(struct audio *audio)
+ {
++ struct dce_audio *aud = DCE_AUD(audio);
+ uint32_t value = AZ_REG_READ(AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL);
+
+- if (get_reg_field_value(value,
++ set_reg_field_value(value, 1,
+ AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL,
+- AUDIO_ENABLED) != 1)
++ CLOCK_GATING_DISABLE);
+ set_reg_field_value(value, 1,
+ AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL,
+ AUDIO_ENABLED);
+
+ AZ_REG_WRITE(AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL, value);
++ value = AZ_REG_READ(AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL);
++
++ dm_logger_write(CTX->logger, LOG_HW_AUDIO,
++ "\n\t========= AUDIO:dce_aud_az_enable: index: %u data: 0x%x\n",
++ audio->inst, value);
+ }
+
+ void dce_aud_az_disable(struct audio *audio)
+ {
+ uint32_t value;
++ struct dce_audio *aud = DCE_AUD(audio);
+
+ value = AZ_REG_READ(AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL);
+
+ set_reg_field_value(value, 0,
+ AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL,
+ AUDIO_ENABLED);
++ AZ_REG_WRITE(AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL, value);
+
++ set_reg_field_value(value, 0,
++ AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL,
++ CLOCK_GATING_DISABLE);
+ AZ_REG_WRITE(AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL, value);
++ value = AZ_REG_READ(AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL);
++ dm_logger_write(CTX->logger, LOG_HW_AUDIO,
++ "\n\t========= AUDIO:dce_aud_az_disable: index: %u data: 0x%x\n",
++ audio->inst, value);
+ }
+
+ void dce_aud_az_configure(
+@@ -390,6 +405,11 @@ void dce_aud_az_configure(
+ bool is_ac3_supported = false;
+ union audio_sample_rates sample_rate;
+ uint32_t strlen = 0;
++ value = AZ_REG_READ(AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL);
++ set_reg_field_value(value, 1,
++ AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL,
++ CLOCK_GATING_DISABLE);
++ AZ_REG_WRITE(AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL, value);
+
+ /* Speaker Allocation */
+ /*
+@@ -852,6 +872,7 @@ static bool dce_aud_endpoint_valid(struct audio *audio)
+ void dce_aud_hw_init(
+ struct audio *audio)
+ {
++ uint32_t value;
+ struct dce_audio *aud = DCE_AUD(audio);
+
+ /* we only need to program the following registers once, so we only do
+@@ -863,6 +884,12 @@ void dce_aud_hw_init(
+ * Suport R6 - 44.1khz
+ * Suport R7 - 48khz
+ */
++ /*disable clock gating before write to endpoint register*/
++ value = AZ_REG_READ(AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL);
++ set_reg_field_value(value, 1,
++ AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL,
++ CLOCK_GATING_DISABLE);
++ AZ_REG_WRITE(AZALIA_F0_CODEC_PIN_CONTROL_HOT_PLUG_CONTROL, value);
+ REG_UPDATE(AZALIA_F0_CODEC_FUNCTION_PARAMETER_SUPPORTED_SIZE_RATES,
+ AUDIO_RATE_CAPABILITIES, 0x70);
+
+--
+2.7.4
+