Message ID | s5hy4rzco0y.wl-tiwai@suse.de (mailing list archive) |
---|---|
State | Accepted |
Delegated to: | Takashi Iwai |
Headers | show |
On Wed, 29 Oct 2014 08:50:53 +0100 Takashi Iwai <tiwai@suse.de> wrote: > 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? > The patch works fine, no errors reported, if I however disable snoop it continues to stutter.
At Wed, 29 Oct 2014 23:13:15 +1100, Geoffrey McRae wrote: > > On Wed, 29 Oct 2014 08:50:53 +0100 > Takashi Iwai <tiwai@suse.de> wrote: > > > 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? > > > > The patch works fine, no errors reported, if I however disable snoop it > continues to stutter. OK, so the stuttering comes from the noncached pages of stream buffers, not CORB/RIRB coherency. I'll cook it up as a proper patch, then. Once when we confirm that the snoop for CORB/RIRB is really superfluous, we can drop that hack, too. 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; }