From: Magnus Christensson <mch@virtutech.com>
To: Kevin O'Connor <kevin@koconnor.net>
Cc: qemu-devel@nongnu.org, Gleb Natapov <gleb@redhat.com>
Subject: [Qemu-devel] Re: Seabios: PCI interrupt routing question
Date: Mon, 14 Dec 2009 10:23:39 +0100 [thread overview]
Message-ID: <4B26041B.20902@virtutech.com> (raw)
In-Reply-To: <20091213151249.GA22854@morn.localdomain>
On 12/13/2009 04:12 PM, Kevin O'Connor wrote:
> ----- Forwarded message from Gleb Natapov<gleb@redhat.com> -----
>
> From: Gleb Natapov<gleb@redhat.com>
> To: Kevin O'Connor<kevin@koconnor.net>
> Date: Sun, 13 Dec 2009 17:07:48 +0200
> Subject: Re: [mch@virtutech.com: [coreboot] Seabios: PCI interrupt routing
> question]
>
> On Thu, Dec 10, 2009 at 08:55:11AM -0500, Kevin O'Connor wrote:
>
>> FYI.
>>
>> ----- Forwarded message from Magnus Christensson<mch@virtutech.com> -----
>>
>> From: Magnus Christensson<mch@virtutech.com>
>> To: coreboot@coreboot.org
>> Date: Fri, 27 Nov 2009 09:13:02 +0100
>> Subject: [coreboot] Seabios: PCI interrupt routing question
>>
>> Hi,
>>
>> I have a question about the PCI INTx pin interrupt routing in Seabios.
>>
>> Specifically, what does the pci_slot_get_pirq function do? It looks like
>> it assigns different interrupt numbers to devices depending on their
>> device number.
>>
>>
> This function implement the same logic as pci_swizzle_interrupt_pin() in
> Linux kernel. This logic defines how PCI bridge connects INTx of each
> devices behind it to system board interrupt line and it is part of PCI
> spec (page 30 of PCI3.0 spec). Note that the function return pin, not
> interrupt line. To get interrupt line we look into pci_irqs[] array.
>
The swizzling of INTx-pins happens in PCI-to-PCI bridges. But it looks
like the pci_slot_get_pirq function is applied to all devices, including
those on the top-level bus that are not behind any PCI-to-PCI bridge.
Further, the function only looks at device (slot) and doesn't care where
the device is in the PCI hierarchy.
>
>> But the interrupt routing in the southbridge maps a given INTx to the same
>> interrupt number regardless of the device number (that mapping is
>> initialized by the code with the "activate irq remapping in PIIX" comment).
>>
>> To me, this looks like the INTERRUPT_LINE would be set to a value that
>> does not match the actual interrupt routing (if (dev& 3) != 0).
>>
>>
> The code is correct if QEMU does interrupt swizzling on PIIX3 chipset
> level. The code in incorrect if QEMU doesn't. Swizzling like this is
> done by PCI-to-PCI bridges according to PCI spec, root bridge doesn't do
> it AFAIK, so code looks suspicious, but not because of the reason stated
> above.
>
Yes, if the QEMU emulation of PIIX3 does swizzling on bus #0 (which I
don't think happens in hardware), then the code would be correct (for
running on QEMU).
M.
prev parent reply other threads:[~2009-12-14 9:23 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-13 15:12 [Qemu-devel] Seabios: PCI interrupt routing question Kevin O'Connor
2009-12-14 9:23 ` Magnus Christensson [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4B26041B.20902@virtutech.com \
--to=mch@virtutech.com \
--cc=gleb@redhat.com \
--cc=kevin@koconnor.net \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).