ACPI Problems: IRQ conflicts on USB controllers and SATA controller

John Baldwin jhb at freebsd.org
Thu Oct 12 20:06:18 UTC 2006


On Thursday 12 October 2006 15:55, Erik Norgaard wrote:
> John Baldwin wrote:
> > On Thursday 12 October 2006 12:42, Erik Norgaard wrote:
> >> I have dumped dmesg and other stuff with different options at boot, 
> >> since this is pretty verbose I've placed it on my website:
> >>
> >> boot -v:
> >>
> >> http://www.locolomo.org/src/acpi/dmesg-GENERIC-v
> >> http://www.locolomo.org/src/acpi/sysctl-GENERIC-v
> >> http://www.locolomo.org/src/acpi/pciconf-GENERIC-v
> >> http://www.locolomo.org/src/acpi/lspci-GENERIC-v
> >> http://www.locolomo.org/src/acpi/vmstat-GENERIC-v
> > 
> > Nothing here looks wrong.  Can you break into the debugger when the box
> > locks up?
> 
> The box freezes when apic is disabled but pci_link is enabled. In the 
> above case, both apic and pci_link are enabled, this sucks out resources 
> of the box with 85% cpu on interrupt handling.

Ok, so get vmstat -i output.  There's not much flexibility here though as all 
the APIC IRQ's are hardcoded, so to guess which ones are routed incorrectly 
will be a pain.

> I will try to see if I can get the debugger when apic is disabled and 
> pci_link enabled.

Actually, I think I know what that is already.

> >> boot -v, acpi disabled:
> > 
> > Doesn't detect APIC.  BIOS is too dumb to provide $PIR.  That's a new
> > low for incompetence on the part of BIOS writers.
> 
> Strange - is ACPI required on this box to find APIC? Sounds wierd when 
> they are both enabled they each seem to fight for control over the 
> devices...

ACPI and APIC are two _entirely_ different things.  On your box, yes, ACPI is 
required to find APICs.

> >> boot -v, apic disabled:
> >>
> >> http://www.locolomo.org/src/acpi/dmesg-GENERIC-v-no_apic
> > 
> > The problem here is (again) really stupid BIOS writers.  Maybe they can't
> > read.  Edit your ASL to change the resources to say that IRQ 10 (which
> > the BIOS assigns) is ok instead of IRQ 11.  You can probably get by just
> > with fixing LNKD's resource:
> > 
> >                 Device (LNKD)
> >                 {
> >                     Name (_HID, EisaId ("PNP0C0F"))
> >                     Name (_UID, 0x04)
> >                     Method (_DIS, 0, Serialized)
> >                     {
> >                         Store (0x80, PDRC)
> >                     }
> > 
> >                     Name (_PRS, ResourceTemplate ()
> >                     {
> >                         IRQ (Level, ActiveLow, Shared) 
> > {1,3,4,5,6,7,11,12,14,15}
> >                     })
> > 
> > Replace the '11' here with '10' and update it.  In fact, you should
> > fix the ones with IRQ's '10' and '12' to list '10' and '11' instead
> > and the ones with '11' and '12' to list '10' and '11' instead.
> > 
> > 12 is used by your PS/2 mouse/trackpad, so it isn't suitable.
> 
> Thanks I will try that. I'm new on this, will loading a custom ASL 
> overwrite the existing permanently? I mean, I'm kind of worried that I 
> mess up and have a box that can't boot at all.

No, you load it from the loader and the kernel just uses the one you load 
instead of the one from the BIOS.  Check acpi(4) more.

> Secondly, I see there is nothing on IRQ9 in the ASL, yet I have an 
> interrupt storm on IRQ9 also, should 9 be added to the list above?

No.

> Finally, previously I solved the interrupt storm on IRQ5 by setting 
> hw.pci6.10.INTA.irq=5 in the loader.conf, can this be corrected in the 
> ASL also?

You really shouldn't use that hint, you should route an entire link 
(hw.pci.link.LNKD.irq = 5 for example) when using links.  First try just 
fixing your ASL w/o using any settings in loader.conf.

Hmm, you can also try just doing this w/o having to hack your ASL which might 
fix things:

hw.pci.link.LNKB.irq=10
hw.pci.link.LNKD.irq=10
hw.pci.link.LNKF.irq=10

It will emit warnings about the IRQs not being valid but still use them, and 
this matches what your BIOS used.

-- 
John Baldwin


More information about the freebsd-mobile mailing list