Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 28 Oct 2005 09:58:58 -0400
From:      John Baldwin <jhb@freebsd.org>
To:        Nate Lawson <nate@root.org>
Cc:        freebsd-acpi@freebsd.org, Jung-uk Kim <jkim@freebsd.org>, Mathieu Prevot <mathieu_prevot@yahoo.fr>
Subject:   Re: ACPI errors on amd64 (sempron)
Message-ID:  <200510280958.59985.jhb@freebsd.org>
In-Reply-To: <4361774E.3010709@root.org>
References:  <971FCB6690CD0E4898387DBF7552B90E0323D7B6@orsmsx403.amr.corp.intel.com> <200510272029.48815.jkim@FreeBSD.org> <4361774E.3010709@root.org>

next in thread | previous in thread | raw e-mail | index | archive | help
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=3D5414#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.

=46rom 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 o=
ut=20
of ACPI at all.  ACPI dosen't provide bus numbers, just the slot and pin, w=
e=20
have to extract the bus number from the ACPI device that has a _PRT object.=
 =20
what's really odd is that he is even getting valid-looking IRQs, since we u=
se=20
pcib_get_bus() as the bus number for configuration transactions.  It's=20
probably getting truncated down to the low byte at some point and thus=20
reading the wrong bus, hence getting invalid IRQs I guess.  The real questi=
on=20
here is why pcib_get_bus() is broken on this bridge.

=2D-=20
John Baldwin <jhb@FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =3D  http://www.FreeBSD.org



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200510280958.59985.jhb>