diff mbox

[v7,10/10] hw/pci-bridge: format special OFW unit address for PXB host

Message ID 20150624171112.GA1998@morn.localdomain
State New
Headers show

Commit Message

Kevin O'Connor June 24, 2015, 5:11 p.m. UTC
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

Comments

Marcel Apfelbaum June 24, 2015, 5:14 p.m. UTC | #1
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);
>
diff mbox

Patch

--- 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);