> On 25 Mar 2018, at 14:56, Pankaj Bansal <pankaj.bansal@xxxxxxx> wrote: > > Bootloader may need to fixup the device tree before OS can use it. > e.g. a UEFI/DXE driver that has initialized a controller can add > controller's clock frequency in controller node. This way OS need not to > call get/set clock for that controller. > > Therefore, install fdt used by OS in configuration tables and associate it > with device tree guid. > The firmware should be providing the dtb in the first place. On a uefi system, you should not use the dtbs shipped with the kernel, or use the dtb= command line parameter. This may sound overly strict, but it is the only maintainable way: the dt bindings are the contract between firmware and os, and the os shipped dtbs essentially implement the platform side of the contract, pushing the firmware-os boundary down to a layer that is entirely unstandardized. Exposing the bundled dtb to the firmware is fragile, since the firmware has no guarantees whatsoever about its contents. (dt bindings are [supposed to be] backward compatible, but the device trees themselves are not) So please find another way to solve this, and move away from dtb= > UEFI/DXE drivers can fixup this device tree in their respective > ExitBootServices events. > > Cc: Ard Biesheuvel <ard.biesheuvel@xxxxxxxxxx> > Cc: linux-efi@xxxxxxxxxxxxxxx > Signed-off-by: Pankaj Bansal <pankaj.bansal@xxxxxxx> > --- > drivers/firmware/efi/libstub/fdt.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/drivers/firmware/efi/libstub/fdt.c b/drivers/firmware/efi/libstub/fdt.c > index 177654e..df862e6 100644 > --- a/drivers/firmware/efi/libstub/fdt.c > +++ b/drivers/firmware/efi/libstub/fdt.c > @@ -265,6 +265,7 @@ efi_status_t allocate_new_fdt_and_exit_boot(efi_system_table_t *sys_table_arg, > int runtime_entry_count = 0; > struct efi_boot_memmap map; > struct exit_boot_struct priv; > + efi_guid_t fdt_guid = DEVICE_TREE_GUID; > > map.map = &runtime_map; > map.map_size = &map_size; > @@ -314,6 +315,13 @@ efi_status_t allocate_new_fdt_and_exit_boot(efi_system_table_t *sys_table_arg, > goto fail_free_new_fdt; > } > > + status = efi_call_early(install_configuration_table, &fdt_guid, > + (void *)*new_fdt_addr); > + if (status != EFI_SUCCESS) { > + pr_efi_err(sys_table_arg, "Unable to install new device tree.\n"); > + goto fail_free_new_fdt; > + } > + > priv.runtime_map = runtime_map; > priv.runtime_entry_count = &runtime_entry_count; > priv.new_fdt_addr = (void *)*new_fdt_addr; > -- > 2.7.4 > -- To unsubscribe from this list: send the line "unsubscribe linux-efi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html