On Fri, Jun 19, 2015 at 04:40:17AM +0200, Laszlo Ersek wrote:
We have agreed that OpenFirmware device paths in the "bootorder" fw_cfg file should follow the pattern
/pci@i0cf8,%x/...
for devices that live behind an extra root bus. The extra root bus in question is the %x'th among the extra root buses. (In other words, %x gives the position of the affected extra root bus relative to the other extra root buses, in bus_nr order.) %x starts at 1, and is formatted in hex.
The portion of the unit address that comes before the comma is dynamically taken from the main host bridge, similarly to sysbus_get_fw_dev_path().
Cc: Kevin O'Connor kevin@koconnor.net Cc: Michael S. Tsirkin mst@redhat.com Cc: Marcel Apfelbaum marcel@redhat.com Signed-off-by: Laszlo Ersek lersek@redhat.com
Notes: v7: - implement the format that both Kevin and Michael agreed with. Example: /pci@i0cf8,1/pci-bridge@0/scsi@0/channel@0/disk@0,0 - I updated the OVMF patchset accordingly, but I won't post it until this QEMU patch is applied - Someone please write the SeaBIOS patch
The associated SeaBIOS patch is below.
Does anyone have a qemu command line handy to test with the PXB bus?
-Kevin
--- a/src/boot.c +++ b/src/boot.c @@ -112,9 +112,9 @@ build_pci_path(char *buf, int max, const char *devname, struct pci_device *pci) if (pci->parent) { p = build_pci_path(p, max, "pci-bridge", pci->parent); } else { - if (pci->rootbus) - p += snprintf(p, max, "/pci-root@%x", pci->rootbus); p += snprintf(p, buf+max-p, "%s", FW_PCI_DOMAIN); + if (pci->rootbus) + p += snprintf(p, buf+max-p, ",%x", pci->rootbus); }
int dev = pci_bdf_to_dev(pci->bdf), fn = pci_bdf_to_fn(pci->bdf);