[U-Boot] [PATCH v2] cmd: pxe: Use internal FDT if retrieving from FDTDIR fails

Stephen Warren swarren at wwwdotorg.org
Tue Sep 3 16:18:30 UTC 2019


On 9/3/19 1:52 AM, Anton Leontiev wrote:
> From: Anton Leontiev <aleontiev at elvees.com>
> 
> As FDTDIR label doesn't specify exact file to be loaded, it should
> not fail if no file exists in the directory. In this case try to boot
> with internal FDT if it exists.
> 
> Signed-off-by: Anton Leontiev <aleontiev at elvees.com>
> ---
>   cmd/pxe.c | 21 ++++++++++++++-------
>   1 file changed, 14 insertions(+), 7 deletions(-)
> 
> diff --git a/cmd/pxe.c b/cmd/pxe.c
> index 2059975446..1eec6d29bf 100644
> --- a/cmd/pxe.c
> +++ b/cmd/pxe.c
> @@ -727,11 +727,14 @@ static int label_boot(cmd_tbl_t *cmdtp, struct pxe_label *label)
>   
>   	/*
>   	 * fdt usage is optional:
> -	 * It handles the following scenarios. All scenarios are exclusive
> +	 * It handles the following scenarios.
>   	 *
> -	 * Scenario 1: If fdt_addr_r specified and "fdt" label is defined in
> -	 * pxe file, retrieve fdt blob from server. Pass fdt_addr_r to bootm,
> -	 * and adjust argc appropriately.
> +	 * Scenario 1: If fdt_addr_r specified and "fdt" or "fdtdir" label is
> +	 * defined in pxe file, retrieve fdt blob from server. Pass fdt_addr_r to
> +	 * bootm, and adjust argc appropriately.
> +	 *
> +	 * If retrieve fails and no exact fdt blob is specified in pxe file with
> +	 * "fdt" label, try Scenario 2.

Is it possible/sensible to distinguish between "file not found" and 
"error during retrieval"? "File not found" indicates the case you care 
about, and continuing to use a built-in DT makes sense here. "Error 
during retrieval" indicates that the file was found, and hence really 
should be use, yet couldn't be due to download failure. In this case, I 
wonder if we shouldn't outright fail this boot option, just like the 
existing code does?

But either way, I suppose this patch is reasonable.

>   	 * Scenario 2: If there is an fdt_addr specified, pass it along to
>   	 * bootm, and adjust argc appropriately.
> @@ -795,9 +798,13 @@ static int label_boot(cmd_tbl_t *cmdtp, struct pxe_label *label)
>   			int err = get_relfile_envaddr(cmdtp, fdtfile, "fdt_addr_r");
>   			free(fdtfilefree);
>   			if (err < 0) {
> -				printf("Skipping %s for failure retrieving fdt\n",
> -						label->name);
> -				goto cleanup;
> +				bootm_argv[3] = NULL;
> +
> +				if (label->fdt) {
> +					printf("Skipping %s for failure retrieving FDT\n",
> +					       label->name);
> +					goto cleanup;
> +				}
>   			}
>   		} else {
>   			bootm_argv[3] = NULL;
> 



More information about the U-Boot mailing list