[v2] drm/i915: Implement Audio WA_14020863754
Matt Roper
matthew.d.roper at intel.com
Thu Apr 11 22:36:35 UTC 2024
On Wed, Apr 10, 2024 at 07:20:46PM +0530, Uma Shankar wrote:
> WA_14020863754: Corner case with Min Hblank Fix can cause
> audio hang
>
> Issue: Previously a fix was made to avoid issues with extremely
> small hblanks, called the "Min Hblank Fix". However, this can
> potentially cause an audio hang.
>
> Workaround :
> During "Audio Programming Sequence" Audio Enabling -
> When DP mode is enabled Set mmio offset 0x65F1C bit 18 = 1b,
> before step #1 "Enable audio Presence Detect"
>
> During "Audio Programming Sequence" Audio Disabling -
> When DP mode is enabled Clear mmio offset 0x65F1C bit 18 = 0b,
> after step #6 "Disable Audio PD (Presence Detect)"
> If not clearing PD bit, must also not clear 0x65F1C bit 18 (leave = 1b)
>
> v2: Update the platform checks (Jani Nikula)
>
> Signed-off-by: Uma Shankar <uma.shankar at intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_audio.c | 14 ++++++++++++++
> drivers/gpu/drm/i915/display/intel_audio_regs.h | 3 +++
> 2 files changed, 17 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_audio.c b/drivers/gpu/drm/i915/display/intel_audio.c
> index 07e0c73204f3..61df5115c970 100644
> --- a/drivers/gpu/drm/i915/display/intel_audio.c
> +++ b/drivers/gpu/drm/i915/display/intel_audio.c
> @@ -512,6 +512,13 @@ static void hsw_audio_codec_disable(struct intel_encoder *encoder,
> intel_de_rmw(i915, HSW_AUD_PIN_ELD_CP_VLD,
> AUDIO_OUTPUT_ENABLE(cpu_transcoder), 0);
>
> + /*
> + * WA_14020863754: Implement Audio Workaround
> + * Corner case with Min Hblank Fix can cause audio hang
> + */
> + if (DISPLAY_VER(i915) >= 20)
The workaround is currently listed as applying to both Xe2_LPD (20.00)
and Xe2_HPD (14.01). So we should match on those precise IP versions
for now. Future platforms and/or refreshes may or may not need this
workaround and we don't want to just assume the workaround will carry
forward forever, so the condition may get updated further as new
platforms/IP versions are added to the driver.
Matt
> + intel_de_rmw(i915, AUD_CHICKENBIT_REG3, CHICKEN3_SPARE18, 0);
> +
> mutex_unlock(&i915->display.audio.mutex);
> }
>
> @@ -637,6 +644,13 @@ static void hsw_audio_codec_enable(struct intel_encoder *encoder,
> if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DP))
> enable_audio_dsc_wa(encoder, crtc_state);
>
> + /*
> + * WA_14020863754: Implement Audio Workaround
> + * Corner case with Min Hblank Fix can cause audio hang
> + */
> + if (DISPLAY_VER(i915) >= 20)
> + intel_de_rmw(i915, AUD_CHICKENBIT_REG3, 0, CHICKEN3_SPARE18);
> +
> /* Enable audio presence detect */
> intel_de_rmw(i915, HSW_AUD_PIN_ELD_CP_VLD,
> 0, AUDIO_OUTPUT_ENABLE(cpu_transcoder));
> diff --git a/drivers/gpu/drm/i915/display/intel_audio_regs.h b/drivers/gpu/drm/i915/display/intel_audio_regs.h
> index 616e7b1275c4..6f8d33299ecd 100644
> --- a/drivers/gpu/drm/i915/display/intel_audio_regs.h
> +++ b/drivers/gpu/drm/i915/display/intel_audio_regs.h
> @@ -148,4 +148,7 @@
> #define HBLANK_START_COUNT_96 4
> #define HBLANK_START_COUNT_128 5
>
> +#define AUD_CHICKENBIT_REG3 _MMIO(0x65F1C)
> +#define CHICKEN3_SPARE18 REG_BIT(18)
> +
> #endif /* __INTEL_AUDIO_REGS_H__ */
> --
> 2.42.0
>
--
Matt Roper
Graphics Software Engineer
Linux GPU Platform Enablement
Intel Corporation
More information about the Intel-gfx
mailing list