Skip to content

Commit

Permalink
ALSA: hda - Check validity of CORB/RIRB WP reads
Browse files Browse the repository at this point in the history
When the HD-audio controller is disabled (e.g. via vga switcheroo) but
the driver is still accessing it, it spews floods of "spurious
response" kernel messages.  It's because CORB/RIRB WP reads 0xff, and
the driver tries to fill up until this number.

This patch changes the CORB/RIRB WP reads to word instead of byte, and
add the check of the read value.  If it's 0xffff, the controller is
supposed to be disabled, so the further action will be skipped.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
  • Loading branch information
Takashi Iwai committed Dec 12, 2012
1 parent fa348da commit cc5ede3
Showing 1 changed file with 12 additions and 2 deletions.
14 changes: 12 additions & 2 deletions sound/pci/hda/hda_intel.c
Original file line number Diff line number Diff line change
Expand Up @@ -799,7 +799,12 @@ static int azx_corb_send_cmd(struct hda_bus *bus, u32 val)
spin_lock_irq(&chip->reg_lock);

/* add command to corb */
wp = azx_readb(chip, CORBWP);
wp = azx_readw(chip, CORBWP);
if (wp == 0xffff) {
/* something wrong, controller likely turned to D3 */
spin_unlock_irq(&chip->reg_lock);
return -1;
}
wp++;
wp %= ICH6_MAX_CORB_ENTRIES;

Expand All @@ -821,7 +826,12 @@ static void azx_update_rirb(struct azx *chip)
unsigned int addr;
u32 res, res_ex;

wp = azx_readb(chip, RIRBWP);
wp = azx_readw(chip, RIRBWP);
if (wp == 0xffff) {
/* something wrong, controller likely turned to D3 */
return;
}

if (wp == chip->rirb.wp)
return;
chip->rirb.wp = wp;
Expand Down

0 comments on commit cc5ede3

Please sign in to comment.