[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3 1/3] arm/efi: Introduce uefi,cfg-load DT property
On Wed, 29 Sep 2021, Luca Fancellu wrote: > > On Tue, 28 Sep 2021, Luca Fancellu wrote: > >> Introduce the uefi,cfg-load DT property of /chosen > >> node for ARM whose presence decide whether to force > >> the load of the UEFI Xen configuration file. > >> > >> The logic is that if any multiboot,module is found in > >> the DT, then the uefi,cfg-load property is used to see > >> if the UEFI Xen configuration file is needed. > >> > >> Modify a comment in efi_arch_use_config_file, removing > >> the part that states "dom0 required" because it's not > >> true anymore with this commit. > >> > >> Signed-off-by: Luca Fancellu <luca.fancellu@xxxxxxx> > > > > The patch looks good. Only one minor change: given that this is a Xen > > parameter that we are introducing and not a parameter defined by UEFI > > Forum, I think uefi,cfg-load should be called xen,uefi-cfg-load instead. > > Because "xen," is our prefix, while "uefi," is not. > > > > With that minor change: > > > > Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx> > > Yes I will rename it. > > > > > > > Note that the uefi,binary property is different because that property is > > for xen,domain nodes, so we are already in a Xen specific namespace when > > we are using it. Instead this property is for /chosen which is not a Xen > > specific node. > > Given that uefi,binary will be used also for multiboot,module directly under > /chosen > for Dom0, do you think I should rename also that to xen,uefi-binary? Yes, maybe to stay on the safe side, it would be better to also rename uefi,binary to xen,uefi-binary. > >> --- > >> v3 changes: > >> - add documentation to misc/arm/device-tree/booting.txt > >> - Modified variable name and logic from skip_cfg_file to > >> load_cfg_file > >> - Add in the commit message that I'm modifying a comment. > >> v2 changes: > >> - Introduced uefi,cfg-load property > >> - Add documentation about the property > >> --- > >> docs/misc/arm/device-tree/booting.txt | 8 ++++++++ > >> docs/misc/efi.pandoc | 2 ++ > >> xen/arch/arm/efi/efi-boot.h | 28 ++++++++++++++++++++++----- > >> 3 files changed, 33 insertions(+), 5 deletions(-) > >> > >> diff --git a/docs/misc/arm/device-tree/booting.txt > >> b/docs/misc/arm/device-tree/booting.txt > >> index 44cd9e1a9a..cf878b478e 100644 > >> --- a/docs/misc/arm/device-tree/booting.txt > >> +++ b/docs/misc/arm/device-tree/booting.txt > >> @@ -121,6 +121,14 @@ A Xen-aware bootloader would set xen,xen-bootargs for > >> Xen, xen,dom0-bootargs > >> for Dom0 and bootargs for native Linux. > >> > >> > >> +UEFI boot and DT > >> +================ > >> + > >> +When Xen is booted using UEFI, it doesn't read the configuration file if > >> any > >> +multiboot module is specified. To force Xen to load the configuration > >> file, the > >> +boolean property uefi,cfg-load must be declared in the /chosen node. > >> + > >> + > >> Creating Multiple Domains directly from Xen > >> =========================================== > >> > >> diff --git a/docs/misc/efi.pandoc b/docs/misc/efi.pandoc > >> index ac3cd58cae..e289c5e7ba 100644 > >> --- a/docs/misc/efi.pandoc > >> +++ b/docs/misc/efi.pandoc > >> @@ -14,6 +14,8 @@ loaded the modules and describes them in the device tree > >> provided to Xen. If a > >> bootloader provides a device tree containing modules then any configuration > >> files are ignored, and the bootloader is responsible for populating all > >> relevant device tree nodes. > >> +The property "uefi,cfg-load" can be specified in the /chosen node to > >> force Xen > >> +to load the configuration file even if multiboot modules are found. > >> > >> Once built, `make install-xen` will place the resulting binary directly > >> into > >> the EFI boot partition, provided `EFI_VENDOR` is set in the environment > >> (and > >> diff --git a/xen/arch/arm/efi/efi-boot.h b/xen/arch/arm/efi/efi-boot.h > >> index cf9c37153f..4f1b01757d 100644 > >> --- a/xen/arch/arm/efi/efi-boot.h > >> +++ b/xen/arch/arm/efi/efi-boot.h > >> @@ -581,22 +581,40 @@ static void __init > >> efi_arch_load_addr_check(EFI_LOADED_IMAGE *loaded_image) > >> > >> static bool __init efi_arch_use_config_file(EFI_SYSTEM_TABLE *SystemTable) > >> { > >> + bool load_cfg_file = true; > >> /* > >> * For arm, we may get a device tree from GRUB (or other bootloader) > >> * that contains modules that have already been loaded into memory. In > >> - * this case, we do not use a configuration file, and rely on the > >> - * bootloader to have loaded all required modules and appropriate > >> - * options. > >> + * this case, we search for the property uefi,cfg-load in the /chosen > >> node > >> + * to decide whether to skip the UEFI Xen configuration file or not. > >> */ > >> > >> fdt = lookup_fdt_config_table(SystemTable); > >> dtbfile.ptr = fdt; > >> dtbfile.need_to_free = false; /* Config table memory can't be freed. */ > >> - if ( !fdt || fdt_node_offset_by_compatible(fdt, 0, > >> "multiboot,module") < 0 ) > >> + > >> + if ( fdt_node_offset_by_compatible(fdt, 0, "multiboot,module") > 0 ) > >> + { > >> + /* Locate chosen node */ > >> + int node = fdt_subnode_offset(fdt, 0, "chosen"); > >> + const void *cfg_load_prop; > >> + int cfg_load_len; > >> + > >> + if ( node > 0 ) > >> + { > >> + /* Check if uefi,cfg-load property exists */ > >> + cfg_load_prop = fdt_getprop(fdt, node, "uefi,cfg-load", > >> + &cfg_load_len); > >> + if ( !cfg_load_prop ) > >> + load_cfg_file = false; > >> + } > >> + } > >> + > >> + if ( !fdt || load_cfg_file ) > >> { > >> /* > >> * We either have no FDT, or one without modules, so we must have a > >> - * Xen EFI configuration file to specify modules. (dom0 required) > >> + * Xen EFI configuration file to specify modules. > >> */ > >> return true; > >> } > >> -- > >> 2.17.1 > >> > >
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |