[U-Boot] [PATCH 1/1] efi_loader: pass address to efi_install_fdt()
Alexander Graf
agraf at csgraf.de
Tue Dec 3 07:37:05 CET 2019
On 03.12.19 08:27, Heinrich Schuchardt wrote:
> As part of moving the parsing of command line arguments to do_bootefi()
> call efi_install_fdt() with the address of the device tree instead of a
> string.
>
> Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
> ---
> cmd/bootefi.c | 30 ++++++++++++++++--------------
> 1 file changed, 16 insertions(+), 14 deletions(-)
>
> diff --git a/cmd/bootefi.c b/cmd/bootefi.c
> index f613cce7e2..3cf190889e 100644
> --- a/cmd/bootefi.c
> +++ b/cmd/bootefi.c
> @@ -196,40 +196,37 @@ static void *get_config_table(const efi_guid_t *guid)
> #endif /* !CONFIG_IS_ENABLED(GENERATE_ACPI_TABLE) */
>
> /**
> - * efi_install_fdt() - install fdt passed by a command argument
> + * efi_install_fdt() - install device tree
> *
> - * If fdt_opt is available, the device tree located at that memory address will
> + * If fdt_addr is available, the device tree located at that memory address will
> * will be installed as configuration table, otherwise the device tree located
> * at the address indicated by environment variable fdtcontroladdr will be used.
> *
> - * On architectures (x86) using ACPI tables device trees shall not be installed
> - * as configuration table.
> + * On architectures using ACPI tables device trees shall not be installed as
> + * configuration table.
> *
> - * @fdt_opt: pointer to argument
> + * @fdt_addr: address of device tree
> * Return: status code
> */
> -static efi_status_t efi_install_fdt(const char *fdt_opt)
> +static efi_status_t efi_install_fdt(uintptr_t fdt_addr)
> {
> /*
> * The EBBR spec requires that we have either an FDT or an ACPI table
> * but not both.
> */
> #if CONFIG_IS_ENABLED(GENERATE_ACPI_TABLE)
> - if (fdt_opt) {
> + if (fdt_addr) {
Why check for fdt_addr != 0 here? Since you do the parsing outside of
this function now, just make 0 a valid pointer and check for the
validity outside of this function.
> printf("ERROR: can't have ACPI table and device tree.\n");
> return EFI_LOAD_ERROR;
> }
> #else
> - unsigned long fdt_addr;
> void *fdt;
> bootm_headers_t img = { 0 };
> efi_status_t ret;
>
> - if (fdt_opt) {
> - fdt_addr = simple_strtoul(fdt_opt, NULL, 16);
> - if (!fdt_addr)
> - return EFI_INVALID_PARAMETER;
> - } else {
> + if (!fdt_addr) {
> + const char* fdt_opt;
> +
> /* Look for device tree that is already installed */
> if (get_config_table(&efi_guid_fdt))
> return EFI_SUCCESS;
> @@ -556,6 +553,7 @@ static int do_efi_selftest(void)
> static int do_bootefi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
> {
> efi_status_t ret;
> + uintptr_t fdt_addr;
>
> if (argc < 2)
> return CMD_RET_USAGE;
> @@ -568,7 +566,11 @@ static int do_bootefi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
> return CMD_RET_FAILURE;
> }
>
> - ret = efi_install_fdt(argc > 2 ? argv[2] : NULL);
> + if (argc > 2)
> + fdt_addr = simple_strtoul(argv[2], NULL, 16);
> + else
> + fdt_addr = 0UL;
> + ret = efi_install_fdt(fdt_addr);
So here:
if (fdt_addr)
efi_install_fdt(fdt_addr);
And then you can remove all of the conditional code (and indentation) in
efi_install_fdt() above.
Alex
More information about the U-Boot
mailing list