diff mbox

[1/2] ALSA: hda - Fix probing and stuttering on CMI8888 HD-audio controller

Message ID s5hy4rzco0y.wl-tiwai@suse.de (mailing list archive)
State Accepted
Delegated to: Takashi Iwai
Headers show

Commit Message

Takashi Iwai Oct. 29, 2014, 7:50 a.m. UTC
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

---

Comments

Geoffrey McRae Oct. 29, 2014, 12:13 p.m. UTC | #1
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.
Takashi Iwai Oct. 29, 2014, 1:01 p.m. UTC | #2
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 mbox

Patch

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;
 	}