Pci driver can not handle multiple root complex system

Udo Steinberg udo at ...121...
Thu Aug 1 21:20:58 CEST 2013


On Tue, 18 Jun 2013 20:33:17 +0200 Christian Helmuth (CH) wrote:

CH> On Tue, Jun 18, 2013 at 05:14:31PM +0000, Jilong Kuang - SISA wrote:
CH> > I guess the reason why current code doesn't cover all devices is
CH> > that it assumes all devices can be scanned through recursive
CH> > function call starting from bus 0 (a single tree structure).
CH> > However, when there are multiple root complexes, there are more than
CH> > one tree. So one has to explicitly jump to the next root node and
CH> > search its tree.
CH> 
CH> Is there any documentation or best practice how to discover "root
CH> nodes"? Do we need ACPI or other platform information for that?
CH> Scanning through all possible PCI nodes sounds not desirable as it
CH> takes its time.

Jilong sent the DSDT of his machine, which lists the different PCI root
complexes as follows:

Device (PCI0)
        {
            Method (^BN00, 0, NotSerialized)
            {
                Return (Zero)
            }

            Method (_BBN, 0, NotSerialized)  // _BBN: BIOS Bus Number
            {
                Return (BN00 ())
            }
        }

Device (PCI1)
        {
            Method (^BN40, 0, NotSerialized)
            {
                Return (0x40)
            }

            Method (_BBN, 0, NotSerialized)  // _BBN: BIOS Bus Number
            {
                Return (BN40 ())
            }
        }

Device (PCI2)
        {
            Method (^BN80, 0, NotSerialized)
            {
                Return (0x80)
            }

            Method (_BBN, 0, NotSerialized)  // _BBN: BIOS Bus Number
            {
                Return (BN80 ())
            }
        }

Device (PCI3)
        {
            Method (^BNC0, 0, NotSerialized)
            {
                Return (0xC0)
            }

            Method (_BBN, 0, NotSerialized)  // _BBN: BIOS Bus Number
            {
                Return (BNC0 ())
            }
        }

There are 4 root complexes, starting at bus numbers 0, 0x40, 0x80, 0xc0
respectively and Genode would have to scan each of them. You can use the
_BBN methods in the DSDT to enumerate them.

Cheers,
Udo
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.genode.org/pipermail/users/attachments/20130801/37887df6/attachment.sig>


More information about the users mailing list