> -----Original Message----- > From: Michael S. Tsirkin [mailto:m...@redhat.com] > Sent: Monday, May 4, 2020 10:03 PM > To: miaoyubo <miaoy...@huawei.com> > Cc: peter.mayd...@linaro.org; shannon.zha...@gmail.com; > ler...@redhat.com; imamm...@redhat.com; qemu-devel@nongnu.org; > berra...@redhat.com; Xiexiangyou <xiexiang...@huawei.com> > Subject: Re: [PATCH v6 2/8] fw_cfg: Write the extra roots into the fw_cfg > > On Wed, Apr 08, 2020 at 08:58:10PM +0800, Yubo Miao wrote: > > From: miaoyubo <miaoy...@huawei.com> > > > > Write the extra roots into the fw_cfg therefore the uefi could get the > > extra roots. Only if the uefi know there are extra roots, the config > > space of devices behind the root could be obtained. > > > > Signed-off-by: miaoyubo <miaoy...@huawei.com> > > --- > > hw/arm/virt.c | 23 +++++++++++++++++++++++ > > 1 file changed, 23 insertions(+) > > > > diff --git a/hw/arm/virt.c b/hw/arm/virt.c index > > 7dc96abf72..0fdfe4129c 100644 > > --- a/hw/arm/virt.c > > +++ b/hw/arm/virt.c > > @@ -77,6 +77,7 @@ > > #include "hw/acpi/generic_event_device.h" > > #include "hw/virtio/virtio-iommu.h" > > #include "hw/char/pl011.h" > > +#include "hw/pci/pci_bus.h" > > > > #define DEFINE_VIRT_MACHINE_LATEST(major, minor, latest) \ > > static void virt_##major##_##minor##_class_init(ObjectClass *oc, > > \ @@ -1435,6 +1436,12 @@ void virt_machine_done(Notifier *notifier, > void *data) > > ARMCPU *cpu = ARM_CPU(first_cpu); > > struct arm_boot_info *info = &vms->bootinfo; > > AddressSpace *as = arm_boot_address_space(cpu, info); > > + PCIHostState *s = OBJECT_CHECK(PCIHostState, > > + object_resolve_path_type("", > > + "pcie-host-bridge", NULL), > > + TYPE_PCI_HOST_BRIDGE); > > + > > + PCIBus *bus = s->bus; > > > > /* > > * If the user provided a dtb, we assume the dynamic sysbus nodes > > > Seems duplicated all over the place. Add an API for that? >
Thanks for your reply. I will add the API in patch v7. > > @@ -1453,6 +1460,22 @@ void virt_machine_done(Notifier *notifier, void > *data) > > exit(1); > > } > > > > + if (bus) { > > + int extra_hosts = 0; > > + QLIST_FOREACH(bus, &bus->child, sibling) { > > + /* look for expander root buses */ > > + if (pci_bus_is_root(bus)) { > > + extra_hosts++; > > + } > > + } > > + if (extra_hosts && vms->fw_cfg) { > > + uint64_t *val = g_malloc(sizeof(*val)); > > + *val = cpu_to_le64(extra_hosts); > > + fw_cfg_add_file(vms->fw_cfg, > > + "etc/extra-pci-roots", val, sizeof(*val)); > > + } > > + } > > + > > virt_acpi_setup(vms); > > virt_build_smbios(vms); > > > Duplicated from pc. Pls refactor. > Sure. It would be done in patch v7 > > } > > -- > > 2.19.1 > > Regards, Miao