amd64 panic snd_hda - hdac_get_capabilities: Invalid corb size
(0)
Andriy Gapon
avg at icyb.net.ua
Wed Jul 28 12:56:50 UTC 2010
on 27/07/2010 20:20 Anton Shterenlikht said the following:
> yes, thanks, the panic has gone away.
> There still seems to be a problem with this device:
>
>
> hdac0 at pci0:0:20:2: class=0x040300 card=0x30c2103c chip=0x43831002 rev=0x00 hdr=0x00
> vendor = 'ATI Technologies Inc. / Advanced Micro Devices, Inc.'
> device = 'IXP SB600 High Definition Audio Controller'
> class = multimedia
> subclass = HDA
>
>
> hdac0: <ATI SB600 High Definition Audio Controller> irq 16 at device 20.2 on pci0
> hdac0: HDA Driver Revision: 20100226_0142
> hdac0: [ITHREAD]
> hdac0: hdac_get_capabilities: Invalid rirb size (0)
> device_attach: hdac0 attach returned 6
>
>
> I understand from the manual, there should
> be devices /dev/pcmX and /dev/dsp, but I have neither.
>
> I'll ask in @questions.
>
> many thanks for a quick fix!
Can you also try the following patch?
If the patch works, could you please report back `dmesg | fgrep -i hda` output?
diff --git a/sys/dev/sound/pci/hda/hdac.c b/sys/dev/sound/pci/hda/hdac.c
index 22ea4c8..a5556d2 100644
--- a/sys/dev/sound/pci/hda/hdac.c
+++ b/sys/dev/sound/pci/hda/hdac.c
@@ -1609,7 +1609,15 @@ hdac_get_capabilities(struct hdac_softc *sc)
else {
device_printf(sc->dev, "%s: Invalid corb size (%x)\n",
__func__, corbsize);
- return (ENXIO);
+ if (corbsize == 0) {
+ device_printf(sc->dev, "Resetting corb size to 256\n");
+ sc->corb_size = 256;
+ corbsize =
+ HDAC_CORBSIZE_CORBSIZE(HDAC_CORBSIZE_CORBSIZE_256);
+ HDAC_WRITE_1(&sc->mem, HDAC_CORBSIZE, corbsize);
+ }
+ else
+ return (ENXIO);
}
rirbsize = HDAC_READ_1(&sc->mem, HDAC_RIRBSIZE);
@@ -1625,7 +1633,15 @@ hdac_get_capabilities(struct hdac_softc *sc)
else {
device_printf(sc->dev, "%s: Invalid rirb size (%x)\n",
__func__, rirbsize);
- return (ENXIO);
+ if (rirbsize == 0) {
+ device_printf(sc->dev, "Resetting rirb size to 256\n");
+ sc->rirb_size = 256;
+ rirbsize =
+ HDAC_RIRBSIZE_RIRBSIZE(HDAC_RIRBSIZE_RIRBSIZE_256);
+ HDAC_WRITE_1(&sc->mem, HDAC_RIRBSIZE, rirbsize);
+ }
+ else
+ return (ENXIO);
}
HDA_BOOTVERBOSE(
--
Andriy Gapon
More information about the freebsd-current
mailing list