[OpenBIOS] [PATCH] Probe PCI buses recursively

Blue Swirl blauwirbel at gmail.com
Sun Feb 7 17:17:03 CET 2010


On Sun, Feb 7, 2010 at 10:05 AM, Igor Kovalenko
<igor.v.kovalenko at gmail.com> wrote:
> On Sat, Feb 6, 2010 at 7:49 PM, Blue Swirl <blauwirbel at gmail.com> wrote:
>> I tried to get PCI probing work in cases where the devices are behind
>> multiple bridges. This patch works in many cases (especially current
>> QEMU PPC/Sparc64 setup), but not if I make some arbitrary changes to
>> the bridging setup.
>>
>> The mysterious "?active-package get-package-path" piece resolves the
>> simple /pci/pci path (which would be identical to any other bridge
>> found) to /pci at 1fe0,0/pci at 1,1. Is there a better way?
>
> Lookup using "pci" as node name would stop at first node with matching
> "name" property value. When we assign "reg" property this can break
> lookup if there are multiple nodes with the same "name" property value.
> To resolve path to correct node the node path must be reloaded after
> "reg" property is assigned. "get-package-path" should work.

Nice. With this change I got rid of one class of problems. There are
still some bugs:
OpenBIOS for Sparc64
Initializing PCI devices...
0:0.0 - 108e:a000 - //pci -
0:1.0 - 108e:5000 - /pci at 1fe,0/pci -
1:0.0 - 108e:5000 - /pci at 1fe,0/pci at 1/pci -
2:0.0 - 1011:26 - /pci at 1fe,0/pci at 1/pci at 0/pci-bridge -
2:1.0 - 1095:646 - /pci at 1fe,0/pci at 1/pci at 0/pci-ata -
1:1.0 - 108e:1000 - /pci at 1fe,0/pci at 1/ebus -
0:2.0 - 1234:1111 - /pci at 1fe,0/QEMU,VGA -
0:3.0 - 10ec:8029 - /pci at 1fe,0/NE2000 -
Configuration device id QEMU version 1 machine id 0
kernel addr 404000 size 404d61
kernel cmdline root=/dev/ram -p console=prom init=/sbin/init
of_debug=3 ofpci_debug=1
CPUs: 1 x SUNW,UltraSPARC-II
UUID: 00000000-0000-0000-0000-000000000000
Welcome to OpenBIOS v1.0 built on Jan 29 2010 18:24
  Type 'help' for detailed information

0 > show-devs
ffe1d2a0 /
ffe1d478 /aliases
ffe1d5a0 /openprom (BootROM)
ffe28268 /openprom/client-services
ffe1d858 /options
ffe1d938 /chosen
ffe1dad8 /builtin
ffe1dc00 /builtin/console
ffe27d30 /packages
ffe29a08 /packages/disk-label
ffe2a108 /packages/cmdline
ffe2b420 /packages/deblocker
ffe2ba78 /packages/misc-files
ffe2c0a0 /packages/sun-parts
ffe2c360 /packages/elf-loader
ffe2a708 /memory at 0,0 (memory)
ffe2a868 /virtual-memory
ffe2c4c0 /pci at 1fe,0 (pci)
ffe2cd60 /pci at 1fe,0/pci at 1 (pci)
ffe2d408 /pci at 1fe,0/pci at 1/pci at 0 (pci)
ffe2da90 /pci at 1fe,0/pci at 1/pci at 0
ffe2db70 /pci at 1fe,0/pci at 1/pci at 0/pci-bridge at 20000 (pci)
ffe2e1e8 /pci at 1fe,0/pci at 1/pci at 0
ffe2e2c8 /pci at 1fe,0/pci at 1/pci at 0/pci-ata at 20800 (pci-ide)
ffe2e900 /pci at 1fe,0/pci at 1/pci at 0
ffe2e9e0 /pci at 1fe,0/pci at 1/pci at 0/pci-ata
ffe2eac0 /pci at 1fe,0/pci at 1/pci at 0/pci-ata/ide0 at 0 (ide)
ffe2ee40 /pci at 1fe,0/pci at 1/pci at 0
ffe2ef20 /pci at 1fe,0/pci at 1/pci at 0/pci-ata
ffe2f000 /pci at 1fe,0/pci at 1/pci at 0/pci-ata/ide0 at 0
ffe2f0e0 /pci at 1fe,0/pci at 1/pci at 0/pci-ata/ide0 at 0/disk at 0 (block)
ffe2f838 /pci at 1fe,0/pci at 1/pci at 0
ffe2f918 /pci at 1fe,0/pci at 1/pci at 0/pci-ata
ffe2f9f8 /pci at 1fe,0/pci at 1/pci at 0/pci-ata/ide1 at 0 (ide)
ffe2fd78 /pci at 1fe,0/pci at 1/pci at 0
ffe2fe58 /pci at 1fe,0/pci at 1/pci at 0/pci-ata
ffe2ff38 /pci at 1fe,0/pci at 1/pci at 0/pci-ata/ide1 at 0
ffe30018 /pci at 1fe,0/pci at 1/pci at 0/pci-ata/ide1 at 0/cdrom at 0 (block)
ffe30770 /pci at 1fe,0/pci at 1/ebus at 1 (pci)
ffe30df0 /pci at 1fe,0/pci at 1/ebus at 1/fdthree at 0 (block)
ffe312f0 /pci at 1fe,0/pci at 1/ebus at 1/su at 1fe (serial)
ffe315f8 /pci at 1fe,0/pci at 1/ebus at 1/kb_ps2 (keyboard)
ffe318f8 /pci at 1fe,0/QEMU,VGA at 2 (display)
ffe320b0 /pci at 1fe,0/NE2000 at 3 (network)
ffe32690 /SUNW,UltraSPARC-II (cpu)
ffe32a78 /SUNW,UltraSPARC-II/mmu
 ok
0 > QEMU 0.12.50 monitor - type 'help' for more information
(qemu) info pci
  Bus  0, device   0, function 0:
    Host bridge: PCI device 108e:a000
      BUS 0.
      secondary bus 1.
      subordinate bus 255.
      IO range [0x0000, 0x0fff]
      memory range [0x0f100000, 0x000fffff]
      prefetchable memory range [0x0f200000, 0x001fffff]
      id ""
  Bus  1, device   0, function 0:
    PCI bridge: PCI device 108e:5000
      BUS 1.
      secondary bus 2.
      subordinate bus 4.
      IO range [0x0000, 0x0fff]
      memory range [0x00000000, 0x000fffff]
      prefetchable memory range [0x00000000, 0x000fffff]
      id ""
  Bus  2, device   0, function 0:
    PCI bridge: PCI device 1011:0026
      BUS 2.
      secondary bus 3.
      subordinate bus 3.
      IO range [0x0000, 0x0fff]
      memory range [0x00000000, 0x000fffff]
      prefetchable memory range [0x00000000, 0x000fffff]
      id ""
  Bus  2, device   1, function 0:
    IDE controller: PCI device 1095:0646
      IRQ 1.
      BAR0: I/O at 0x0400 [0x0407].
      BAR1: I/O at 0x0480 [0x0483].
      BAR2: I/O at 0x0500 [0x0507].
      BAR3: I/O at 0x0580 [0x0583].
      BAR4: I/O at 0x0600 [0x060f].
      id ""
  Bus  1, device   1, function 0:
    Bridge: PCI device 108e:1000
      BAR0: 32 bit memory at 0xffffffffffffffff [0x00fffffe].
      BAR1: 32 bit memory at 0xffffffffffffffff [0x007ffffe].
      id ""
  Bus  0, device   1, function 0:
    PCI bridge: PCI device 108e:5000
      BUS 0.
      secondary bus 1.
      subordinate bus 5.
      IO range [0x0000, 0x0fff]
      memory range [0x00000000, 0x000fffff]
      prefetchable memory range [0x00000000, 0x000fffff]
      id ""
  Bus  1, device   0, function 0:
    PCI bridge: PCI device 108e:5000
      BUS 1.
      secondary bus 2.
      subordinate bus 4.
      IO range [0x0000, 0x0fff]
      memory range [0x00000000, 0x000fffff]
      prefetchable memory range [0x00000000, 0x000fffff]
      id ""
  Bus  2, device   0, function 0:
    PCI bridge: PCI device 1011:0026
      BUS 2.
      secondary bus 3.
      subordinate bus 3.
      IO range [0x0000, 0x0fff]
      memory range [0x00000000, 0x000fffff]
      prefetchable memory range [0x00000000, 0x000fffff]
      id ""
  Bus  2, device   1, function 0:
    IDE controller: PCI device 1095:0646
      IRQ 1.
      BAR0: I/O at 0x0400 [0x0407].
      BAR1: I/O at 0x0480 [0x0483].
      BAR2: I/O at 0x0500 [0x0507].
      BAR3: I/O at 0x0580 [0x0583].
      BAR4: I/O at 0x0600 [0x060f].
      id ""
  Bus  1, device   1, function 0:
    Bridge: PCI device 108e:1000
      BAR0: 32 bit memory at 0xffffffffffffffff [0x00fffffe].
      BAR1: 32 bit memory at 0xffffffffffffffff [0x007ffffe].
      id ""
  Bus  0, device   2, function 0:
    VGA controller: PCI device 1234:1111
      BAR0: 32 bit prefetchable memory at 0x02800000 [0x02ffffff].
      id ""
  Bus  0, device   3, function 0:
    Ethernet controller: PCI device 10ec:8029
      IRQ 3.
      BAR0: I/O at 0x0700 [0x07ff].
      id ""

Output from OpenBIOS's PCI probe looks OK, "show-devs" output looks
strange and "info pci" output is schizophrenic.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-WIP.patch
Type: application/x-patch
Size: 3282 bytes
Desc: not available
URL: <http://lists.openbios.org/pipermail/openbios/attachments/20100207/81a82d13/attachment-0003.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Change-REGISTER_NAMED_NODE-to-return-the-phandle.patch
Type: application/x-patch
Size: 14773 bytes
Desc: not available
URL: <http://lists.openbios.org/pipermail/openbios/attachments/20100207/81a82d13/attachment-0004.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0002-Probe-PCI-buses-recursively.patch
Type: application/x-patch
Size: 6116 bytes
Desc: not available
URL: <http://lists.openbios.org/pipermail/openbios/attachments/20100207/81a82d13/attachment-0005.bin>


More information about the OpenBIOS mailing list