[alsa-devel] HDA record fails with FIFO error
Takashi Iwai
tiwai at suse.de
Thu Apr 7 12:10:31 CEST 2011
At Thu, 7 Apr 2011 16:54:50 +0800,
Xu, Andiry wrote:
>
> Hi Takashi,
>
> Currently I encountered an HD audio issue reported by customer on a
> Lenovo x100e system. Sometimes, but not always, when starting a
> recording stream through the HDA controller, the controller generates a
> large amount of interrupts (~40 000 interrupts per second). After this
> has happened, jack sense (i e unsolicited events from the codec) stops
> working until the next system reboot.
>
> SD0STS returns a FIFO error (0x28) in interrupt handler. The interrupt
> service routine acknowledges this error but does not do anything to
> counteract the root cause to the problem, so it appears again and again.
> Restarting the stream does not seem to help. Enable MSI or not does not
> help either.
>
> The issue occurs on 2.6.35 and 2.6.38-rc8+, have not tried latest kernel
> yet but I think it's also there. FIFO error indicates FIFO overrun
> occurring while the RUN bit is set, but the driver simply acknowledge
> and clear the error. I wonder what the root cause and the right
> treatment are in this case. Any suggestions?
FIFO_ERR is actually never handled, so basically we can ignore.
Simply disabling it like below works around your problem?
Of course, a proper handling of FIFO error would be better, but
this may need more code rewrites.
thanks,
Takashi
---
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index 70a9d32..a88baf4 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -285,7 +285,7 @@ enum { SDI0, SDI1, SDI2, SDI3, SDO0, SDO1, SDO2, SDO3 };
#define SD_INT_DESC_ERR 0x10 /* descriptor error interrupt */
#define SD_INT_FIFO_ERR 0x08 /* FIFO error interrupt */
#define SD_INT_COMPLETE 0x04 /* completion interrupt */
-#define SD_INT_MASK (SD_INT_DESC_ERR|SD_INT_FIFO_ERR|\
+#define SD_INT_MASK (SD_INT_DESC_ERR|/*SD_INT_FIFO_ERR|*/ \
SD_INT_COMPLETE)
/* SD_STS */
More information about the Alsa-devel
mailing list