Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 02 Jan 2004 16:30:44 -0500 (EST)
From:      John Baldwin <jhb@FreeBSD.org>
To:        ticso@cicely.de
Cc:        current@FreeBSD.org
Subject:   Re: Still IRQ routing problems with bridged devices.
Message-ID:  <XFMail.20040102163044.jhb@FreeBSD.org>
In-Reply-To: <20040102195244.GE17023@cicely12.cicely.de>

next in thread | previous in thread | raw e-mail | index | archive | help

On 02-Jan-2004 Bernd Walter wrote:
> On Fri, Jan 02, 2004 at 02:19:53PM -0500, John Baldwin wrote:
>> 
>> On 01-Jan-2004 Bernd Walter wrote:
>> > On Thu, Jan 01, 2004 at 10:12:23AM -0700, M. Warner Losh wrote:
>> >> In message: <20040101155100.GF11668@cicely12.cicely.de>
>> >>             Bernd Walter <ticso@cicely12.cicely.de> writes:
>> >> : On Wed, Dec 31, 2003 at 10:22:30PM -0700, M. Warner Losh wrote:
>> >> : > In message: <20040101013224.GC11668@cicely12.cicely.de>
>> >> : >             Bernd Walter <ticso@cicely12.cicely.de> writes:
>> >> : > : The board is an old Asus T2P4 with 3 bridged cards and $PIR table.
>> >> : > : All IRQs behind bridges get bogusly IRQ4 instead of the right ones.
>> >> : > : Is this only a problem on some boards or do we have a general irq
>> >> : > : routing problem with bridges?
>> >> : > 
>> >> : > It is a problem with some bridges and PCI BIOS interrupt routing.
>> >> : 
>> >> : The intline registers are correct - that's what used to run since years.
>> >> : What has the kind of bridge to do with it?
>> >> 
>> >> just what the code does :-)
>> > 
>> > But bridges are handled generic so why would only some bridges show
>> > this problem?
>> > The bridges are 21050 types btw.
>> 
>> Sounds like a BIOS bug.  If a bridge isn't listed in the $PIR, we
>> use the barber-pole swizzle to route across it.  However, that is
> 
> It can't know about my bridges because all of them are on cards and
> they wouldn't won't fit with just 7 entries.

Ok, if they are on cards, that is correct.

>> technically only defined for bridges on add-in cards.  The only
>> way we can tell if a bridge is on an add-in card is if it is not
>> listed either in ACPI's namespace with a _PRT or it is not listed
>> in the $PIR.  Part of teh problem is that we shouldn't be using
> 
> It's not that simple.
> The chips behind the bridges are layed out to all use INTA on the
> primary bus, but INTA is correctly routed for non-bridged cards.
> I have no clue about $PIR and therefor have no idea where irq4 comes
> from - any pointer to $PIR documents are welcome.

Erm, according to the PCI spec, the devices behind the bridges on the
add-in cards will swizzle their interrupts.  Thus, device 8.0 will
use INTA on the add-in card's connect, 9.0 will use INTB for its
INTA, etc.  We use the $PIR to then figure out what IRQ to use for
INT[ABCD] on that slot as appropriate.  Thus, it would work something
like this:

 1) device 1.8.0 wants to route INTA so it asks the bridge for the IRQ
 2) the bridges translates that into INTA on itself, and asks its parent
    for a route to INTA at its slot (say 0.2.0).
 3) the host bridge lookes up 0.2.0 INTA in the $PIR, chooses an IRQ from
    the possible list (defaults to just using first IRQ) and returns it.
    This step should be skipping IRQ 4 adn using IRQ 10 or 11 instead

For device 1.9.0, the bridge translates that into 0.2.0 INTB.  Hope that
makes sense.

-- 

John Baldwin <jhb@FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve!"  -  http://www.FreeBSD.org/



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