At Wed, 29 Oct 2014 07:21:24 +1100, Geoffrey McRae wrote:
I can confirm that disable of MSI is required as even Windows 7 64bit does not enable this for Intel HDA. Out of curiosity I altered the driver to use MSI-X with the same results, interrupts are never received even though the PCI caps state that MSI is supported.
Playback is very poor and stutters if I do not allow snoop by commenting out "case AZX_DRIVER_CMEDIA:" in azx_check_snoop_available.
OK, so we have some conflicting results. Possibly we need non-cached pages only for CORB/RIRB but leave the stream buffers? Could you check the patch below?
thanks,
Takashi
--- diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index cfcca4c30d4d..118029d7c6de 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c @@ -366,14 +366,15 @@ static void __mark_pages_wc(struct azx *chip, struct snd_dma_buffer *dmab, bool { int pages;
- if (azx_snoop(chip)) + if (azx_snoop(chip) && chip->driver_type != AZX_DRIVER_CMEDIA) return; if (!dmab || !dmab->area || !dmab->bytes) return; - #ifdef CONFIG_SND_DMA_SGBUF if (dmab->dev.type == SNDRV_DMA_TYPE_DEV_SG) { struct snd_sg_buf *sgbuf = dmab->private_data; + if (chip->driver_type == AZX_DRIVER_CMEDIA) + return; if (on) set_pages_array_wc(sgbuf->page_table, sgbuf->pages); else @@ -1376,7 +1377,6 @@ static void azx_check_snoop_available(struct azx *chip) snoop = false; break; case AZX_DRIVER_CTHDA: - case AZX_DRIVER_CMEDIA: snoop = false; break; }