[SeaBIOS] [PATCH] pci: fixes to allow booting from extra root pci buses.

Marcel Apfelbaum marcel at redhat.com
Thu Jun 11 14:51:31 CEST 2015


On 06/11/2015 03:45 PM, Michael S. Tsirkin wrote:
> On Thu, Jun 11, 2015 at 03:41:35PM +0300, Marcel Apfelbaum wrote:
>> The PXB device exposes a new pci root bridge with the
>> fw path:  /pci-root at 4/..., in which 4 is the root bus number.
>> Before this patch the fw path was wrongly computed:
>>      /pci-root at 1/pci at i0cf8/...
>> Fix the above issues: Correct the bus number and remove the
>> extra host bridge description.
>>
>> Signed-off-by: Marcel Apfelbaum <marcel at redhat.com>
>
> I would like a unit test for various paths, they
> are part of guest ABI so we can never change them.
> Could you add a unit test please?
A QEMU unit-test you mean?
By the way, I found an issue with this patch, please do
not merge it yet.

>
> Also can you please quote the open firmware spec text
> that says this is the correct format?
Laszlo has found something, I'll look up something to quote, sure.

Thanks,
Marcel
>
>> ---
>> Laszlo worked on supporting pxb for OVMF and discovered
>> that there is a problem when booting devices from a PXB.
>>
>> This is a link to the latest QEMU series:
>>      https://www.mail-archive.com/qemu-devel@nongnu.org/msg302493.html
>>
>> Thanks,
>> Marcel
>>
>>   src/boot.c   | 1 -
>>   src/hw/pci.c | 2 +-
>>   2 files changed, 1 insertion(+), 2 deletions(-)
>>
>> diff --git a/src/boot.c b/src/boot.c
>> index ec59c37..a3bb13b 100644
>> --- a/src/boot.c
>> +++ b/src/boot.c
>> @@ -114,7 +114,6 @@ build_pci_path(char *buf, int max, const char *devname, struct pci_device *pci)
>>       } else {
>>           if (pci->rootbus)
>>               p += snprintf(p, max, "/pci-root@%x", pci->rootbus);
>> -        p += snprintf(p, buf+max-p, "%s", FW_PCI_DOMAIN);
>>       }
>>
>>       int dev = pci_bdf_to_dev(pci->bdf), fn = pci_bdf_to_fn(pci->bdf);
>> diff --git a/src/hw/pci.c b/src/hw/pci.c
>> index 0379b55..9e77af4 100644
>> --- a/src/hw/pci.c
>> +++ b/src/hw/pci.c
>> @@ -133,7 +133,7 @@ pci_probe_devices(void)
>>                   if (bus != lastbus)
>>                       rootbuses++;
>>                   lastbus = bus;
>> -                rootbus = rootbuses;
>> +                rootbus = bus;
>>                   if (bus > MaxPCIBus)
>>                       MaxPCIBus = bus;
>>               } else {
>> --
>> 2.1.0




More information about the SeaBIOS mailing list