aboutsummaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorRander Wang <rander.wang@linux.intel.com>2019-09-30 10:29:45 -0400
committerTakashi Iwai <tiwai@suse.de>2019-10-06 21:58:48 -0400
commit130bce3afbbbbe585cba8604f2124c28e8d86fb0 (patch)
tree90bab407ce5ca116478409761bc9d5e33986df90 /sound
parent1099f48457d06b816359fb43ac32a4a07e33219b (diff)
ALSA: hdac: clear link output stream mapping
Fix potential DMA hang upon starting playback on devices in HDA mode on Intel platforms (Gemini Lake/Whiskey Lake/Comet Lake/Ice Lake). It doesn't affect platforms before Gemini Lake or any Intel device in non-HDA mode. The reset value for the LOSDIV register is all output streams valid. Clear this register to invalidate non-existent streams when the bus is powered up. Signed-off-by: Rander Wang <rander.wang@linux.intel.com> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Link: https://lore.kernel.org/r/20190930142945.7805-1-pierre-louis.bossart@linux.intel.com Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound')
-rw-r--r--sound/hda/ext/hdac_ext_controller.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/sound/hda/ext/hdac_ext_controller.c b/sound/hda/ext/hdac_ext_controller.c
index 211ca85acd8c..cfab60d88c92 100644
--- a/sound/hda/ext/hdac_ext_controller.c
+++ b/sound/hda/ext/hdac_ext_controller.c
@@ -271,6 +271,11 @@ int snd_hdac_ext_bus_link_get(struct hdac_bus *bus,
271 ret = snd_hdac_ext_bus_link_power_up(link); 271 ret = snd_hdac_ext_bus_link_power_up(link);
272 272
273 /* 273 /*
274 * clear the register to invalidate all the output streams
275 */
276 snd_hdac_updatew(link->ml_addr, AZX_REG_ML_LOSIDV,
277 ML_LOSIDV_STREAM_MASK, 0);
278 /*
274 * wait for 521usec for codec to report status 279 * wait for 521usec for codec to report status
275 * HDA spec section 4.3 - Codec Discovery 280 * HDA spec section 4.3 - Codec Discovery
276 */ 281 */