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 xen,uefi-cfg-load must be declared in the /chosen node.
+
+
Creating Multiple Domains directly from Xen
===========================================
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 "xen,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
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 xen,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 xen,uefi-cfg-load property exists */
+ cfg_load_prop = fdt_getprop(fdt, node, "xen,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;
}