[alsa-devel] [PATCH 2/2] ALSA: hda - mask buggy stream DMA0 for Broadwell display controller
mengdong.lin at intel.com
mengdong.lin at intel.com
Tue May 13 06:36:13 CEST 2014
From: Mengdong Lin <mengdong.lin at intel.com>
Broadwell display controller has 3 stream DMA engines. DMA0 cannot update DMA
postion buffer properly while DMA1 and DMA2 can work well. So this patch masks
the buggy DMA0.
Signed-off-by: Mengdong Lin <mengdong.lin at intel.com>
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index 377c3a5..13b13a3 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -281,6 +281,9 @@ static char *driver_short_names[] = {
[AZX_DRIVER_GENERIC] = "HD-Audio Generic",
};
+#define is_broadwell_controller(pci) \
+ ((pci)->vendor == 0x8086 && (pci)->device == 0x160c)
+
#ifdef CONFIG_X86
static void __mark_pages_wc(struct azx *chip, struct snd_dma_buffer *dmab, bool on)
{
@@ -1249,6 +1252,7 @@ static int azx_first_init(struct azx *chip)
struct snd_card *card = chip->card;
int err;
unsigned short gcap;
+ unsigned int stream_mask = 0;
#if BITS_PER_LONG != 64
/* Fix up base address on ULI M5461 */
@@ -1364,7 +1368,10 @@ static int azx_first_init(struct azx *chip)
return err;
/* initialize streams */
- azx_init_stream(chip, 0);
+ if (is_broadwell_controller(pci))
+ stream_mask = 0x1; /* mask buggy stream DMA0 */
+
+ azx_init_stream(chip, stream_mask);
/* initialize chip */
azx_init_pci(chip);
--
1.8.1.2
More information about the Alsa-devel
mailing list