ACPI errors on amd64 (sempron)
John Baldwin
jhb at freebsd.org
Fri Oct 28 08:46:05 PDT 2005
On Thursday 27 October 2005 08:56 pm, Nate Lawson wrote:
> Jung-uk Kim wrote:
> > On Thursday 27 October 2005 08:08 pm, Nate Lawson wrote:
> >>Jung-uk Kim wrote:
> >>>It's already fixed in (soon to be imported) ACPICA-20051021 code.
> >>
> >>There's no way we can get acpi-ca tested in -current and MFC'd
> >>before 6.0. Instead, we should MFC just the logic Intel changed in
> >>the header file to 6.0.
> >
> > IMHO, I think there's not enough time to do any fix at this point. I
> > think we should fix it *after* 6.0-RELEASE because it only fixes half
> > of his problem.
>
> I disagree. It's very clear what the alignment requirements are on
> amd64 and that acpi-ca is being too strict, harming an actual
> implementation.
I think it only shuts up a warning, does it actually change the behavior?
> > In fact, I have seen somebody else had similar problem:
> >
> > http://bsdforum.or.kr/viewtopic.php?p=5414#5414
> >
> > It's Korean BSD User Forum but you may be able to read this:
> >
> > pci_link26: BIOS IRQ 10 for -2145771032.1.INTA is invalid
> > pci_link21: BIOS IRQ 11 for -2145771032.2.INTA is invalid
> > pci_link27: BIOS IRQ 3 for -2145771032.2.INTB is invalid
> > pci_link23: BIOS IRQ 10 for -2145771032.10.INTA is invalid
> > pci_link24: BIOS IRQ 11 for -2145771032.4.INTA is invalid
> > pci_link29: BIOS IRQ 11 for -2145771032.7.INTA is invalid
> > pci_link30: BIOS IRQ 10 for -2145771032.8.INTA is invalid
>
> Yes, I agree that this alone doesn't fix it. This looks to me like the
> pci_link code is pointing the interrupt source at the wrong part of the
> resource descriptor. Perhaps it is not incrementing the pointer
> correctly for 64-bit arches.
From the actual code:
/* Validate the BIOS IRQ. */
if (!link_valid_irq(link, bios_irq)) {
device_printf(dev, "BIOS IRQ %u for %d.%d.INT%c is invalid\n",
bios_irq, pcib_get_bus(pcib), slot, pin + 'A');
Thus, the weird value is being retuned by pcib_get_bus(), it's not coming out
of ACPI at all. ACPI dosen't provide bus numbers, just the slot and pin, we
have to extract the bus number from the ACPI device that has a _PRT object.
what's really odd is that he is even getting valid-looking IRQs, since we use
pcib_get_bus() as the bus number for configuration transactions. It's
probably getting truncated down to the low byte at some point and thus
reading the wrong bus, hence getting invalid IRQs I guess. The real question
here is why pcib_get_bus() is broken on this bridge.
--
John Baldwin <jhb at FreeBSD.org> <>< http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve" = http://www.FreeBSD.org
More information about the freebsd-acpi
mailing list