Date: Mon, 26 Mar 2007 02:26:44 +0300 From: Giorgos Keramidas <keramida@FreeBSD.org> To: Ariff Abdullah <ariff@FreeBSD.org> Cc: current@FreeBSD.org Subject: Re: snd_hda fails to probe after 15 March Message-ID: <20070325232643.GA1059@kobe.laptop> In-Reply-To: <20070325214408.GA1113@kobe.laptop> References: <20070325203412.GA1396@kobe.laptop> <20070326051742.36edb849.ariff@FreeBSD.org> <20070325214408.GA1113@kobe.laptop>
next in thread | previous in thread | raw e-mail | index | archive | help
On 2007-03-26 00:44, Giorgos Keramidas <keramida@freebsd.org> wrote:
>On 2007-03-26 05:17, Ariff Abdullah <ariff@FreeBSD.org> wrote:
>>On Sun, 25 Mar 2007 23:34:13 +0300
>>Giorgos Keramidas <keramida@freebsd.org> wrote:
>>> Some time after March 15, snd_hda started failing to attach to
>>> pcm0 on my laptop. I haven't managed to nail the change down to
>>> a single commit yet, but I've attached the files:
>>> [...]
>>> There seems to be at least one more message in dmesg.boot-25 which
>>> seems relevant to snd_hda failing to attach:
>>>
>>> pcm0: [MPSAFE]
>>> pcm0: [ITHREAD]
>>> +pcm0: hdac_get_capabilities: Invalid rirb size (0)
>>> +device_attach: pcm0 attach returned 6
>>> pcib1: <ACPI PCI-PCI bridge> irq 17 at device 28.0 on pci0
>>>
>>> If you need anything more to troubleshoot this, let me know :)
>>
>> Try reverting hdac.c, down to cvs revision 1.27
>
> No luck with that version and a -DNO_CLEAN build. I'll try a full
> kernel and modules recompile next.
A full kernel rebuild doesn't work either. In fact, even if I boot a
HEAD kernel, with hdac.c down to 1.27 and I load the snd_hda module from
the old kernel, I still get:
pcm0: <Intel 82801G High Definition Audio Controller> \
mem 0xf0000000-0xf0003fff
irq 22 at device 27.0 on pci0
pcm0: [MPSAFE]
pcm0: [ITHREAD]
pcm0: hdac_get_capabilities: Invalid rirb size (0)
device_attach: pcm0 attach returned 6
pci1: driver added
pci2: driver added
Apparently, rirbsize in hdac.c:1122 is not initialized or it is
initialized to zero:
1122 rirbsize = HDAC_READ_1(&sc->mem, HDAC_RIRBSIZE);
[...]
1133 device_printf(sc->dev, "%s: Invalid rirb size (%x)\n",
1134 __func__, rirbsize);
1135 return (ENXIO);
I was initially loading snd_hda from 'loader.conf', with:
snd_hda_load="YES"
but I don't know if this makes any difference. Unloading the module and
loading it manually doesn't seem to fix the call to HDAC_READ_1() which
sets rirbsize.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070325232643.GA1059>
