[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v7 5/5] arm/libxl: Emulated PCI device tree node in libxl
Hi Julien, > On 15 Oct 2021, at 15:52, Julien Grall <julien@xxxxxxx> wrote: > > Hi Bertrand, > > On 15/10/2021 14:59, Bertrand Marquis wrote: >> From: Rahul Singh <rahul.singh@xxxxxxx> >> libxl will create an emulated PCI device tree node in the device tree to >> enable the guest OS to discover the virtual PCI during guest boot. >> Emulated PCI device tree node will only be created when there is any >> device assigned to guest. >> A new area has been reserved in the arm guest physical map at >> which the VPCI bus is declared in the device tree (reg and ranges >> parameters of the node). >> Note that currently we are using num_pcidevs instead of >> c_info->passthrough to decide whether to create a vPCI DT node. >> This will be insufficient if and when ARM does PCI hotplug. >> Add this note inside libxl_create.c where c_info->passthrough >> is set. >> Signed-off-by: Rahul Singh <rahul.singh@xxxxxxx> >> Signed-off-by: Michal Orzel <michal.orzel@xxxxxxx> > > I believe you need to add your signed-off-by here as you sent the new version > on xen-devel. I packed it together but the changes where done by Michal so I did not add it. Could it be added on commit ? > > With one remark below (not to be handled for 4.16): > > Reviewed-by: Julien Grall <jgrall@xxxxxxxxxx> Thanks > >> +static int make_vpci_node(libxl__gc *gc, void *fdt, >> + const struct arch_info *ainfo, >> + struct xc_dom_image *dom) >> +{ >> + int res; >> + const uint64_t vpci_ecam_base = GUEST_VPCI_ECAM_BASE; >> + const uint64_t vpci_ecam_size = GUEST_VPCI_ECAM_SIZE; >> + const char *name = GCSPRINTF("pcie@%"PRIx64, vpci_ecam_base); >> + >> + res = fdt_begin_node(fdt, name); >> + if (res) return res; >> + >> + res = fdt_property_compat(gc, fdt, 1, "pci-host-ecam-generic"); >> + if (res) return res; >> + >> + res = fdt_property_string(fdt, "device_type", "pci"); >> + if (res) return res; >> + >> + res = fdt_property_regs(gc, fdt, GUEST_ROOT_ADDRESS_CELLS, >> + GUEST_ROOT_SIZE_CELLS, 1, vpci_ecam_base, vpci_ecam_size); >> + if (res) return res; >> + >> + res = fdt_property_values(gc, fdt, "bus-range", 2, 0, 255); >> + if (res) return res; >> + >> + res = fdt_property_cell(fdt, "#address-cells", 3); >> + if (res) return res; >> + >> + res = fdt_property_cell(fdt, "#size-cells", 2); >> + if (res) return res; >> + >> + res = fdt_property_string(fdt, "status", "okay"); >> + if (res) return res; >> + >> + res = fdt_property_vpci_ranges(gc, fdt, GUEST_ROOT_ADDRESS_CELLS, >> + GUEST_ROOT_SIZE_CELLS, 2, >> + GUEST_VPCI_ADDR_TYPE_MEM, GUEST_VPCI_MEM_ADDR, GUEST_VPCI_MEM_SIZE, >> + GUEST_VPCI_ADDR_TYPE_PREFETCH_MEM, GUEST_VPCI_PREFETCH_MEM_ADDR, > > From my understanding, the prefetch memory region is optional. Is it going to > be a problem to expose one for the vCPI when the host PCI hostbridge may not > support it? Good point but I would guess no as the host bridge should not use it. I keep that as a point to check with Rahul. Cheers Bertrand > > Cheers, > > -- > Julien Grall
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |