Hi all,
I am running 4.1 on a Dell Latitude LS notebook. This
machine uses the
"Neomagic MagicMedia 256AV" audio chip:
...
neo0 at pci1 dev 0 function 1 "Neomagic MagicMedia
256AV" rev 0x20
audio0 at neo0
...
Now, _sometimes_ the boot gets into an endless loop saying
"neo0: unknown int"
Looking at the source, I see that (sys/dev/pci/neo.c)
/* The interrupt handler */
int
neo_intr(void *p)
{
struct neo_softc *sc = (struct neo_softc *)p;
int status, x;
int rv = 0;
status = nm_rd(sc, NM_INT_REG, sc->irsz);
if (status & sc->playint) {
status &= ~sc->playint;
sc->pwmark += sc->pblksize;
sc->pwmark %= sc->pbufsize;
nm_wr(sc, NM_PBUFFER_WMARK, sc->pbuf + sc->pwmark,
4);
nm_ackint(sc, sc->playint);
if (sc->pintr)
(*sc->pintr)(sc->parg);
rv = 1;
}
if (status & sc->recint) {
status &= ~sc->recint;
sc->rwmark += sc->rblksize;
sc->rwmark %= sc->rbufsize;
nm_ackint(sc, sc->recint);
if (sc->rintr)
(*sc->rintr)(sc->rarg);
rv = 1;
}
if (status & sc->misc1int) {
status &= ~sc->misc1int;
nm_ackint(sc, sc->misc1int);
x = nm_rd(sc, 0x400, 1);
nm_wr(sc, 0x400, x | 2, 1);
printf("%s: misc int 1n",
sc->dev.dv_xname);
rv = 1;
}
if (status & sc->misc2int) {
status &= ~sc->misc2int;
nm_ackint(sc, sc->misc2int);
x = nm_rd(sc, 0x400, 1);
nm_wr(sc, 0x400, x & ~2, 1);
printf("%s: misc int 2n",
sc->dev.dv_xname);
rv = 1;
}
if (status) {
status &= ~sc->misc2int;
nm_ackint(sc, sc->misc2int);
printf("%s: unknown intn",
sc->dev.dv_xname);
rv = 1;
}
return (rv);
}
How does such such a thing ever happen? Who writes into the
card's
NM_INT_REG register and how can an "unknown" value
ever get there?
In other cases, the machine boots and everything works,
except that
neo0 at pci1 dev 0 function 1 "Neomagic MagicMedia
256AV" rev 0x20
1:0:1 10c8:8005 pin B clink 0x01 irq 10 stage 0 WARNING:
preserving irq 10
pci_intr_route_link: route PIRQ 0x01 -> IRQ 10 preserved
BIOS setting
: irq 10
ac97: codec id not read
audio0 at neo0
and I am unable to use any audio. The sound stuff doesn't
even
appear in sysctl -a.
Does anybody have the same problem, or even a solution?
Thanks
Jan
|