Message ID | 20150624171112.GA1998@morn.localdomain |
---|---|
State | New |
Headers | show |
On 06/24/2015 08:11 PM, Kevin O'Connor wrote: > 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? -device pxb,id=bridge1,bus_nr=10 -netdev user,id=u -device e1000,id=net2,bus=bridge1,netdev=u Let me know if you have any issues with it. Thanks, Marcel > > -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); >
--- 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);