mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-05-05 04:36:13 +02:00
bootstd: efi: Handle prior-stage FDT in network path
When CONFIG_OF_HAS_PRIOR_STAGE is enabled and fdtfile is not set, efi_get_distro_fdt_name() returns -EALREADY to indicate the prior-stage FDT should be used. The block-device EFI path handles this by setting BOOTFLOWF_USE_PRIOR_FDT, but the network path treats it as an error, causing the bootflow to stay in 'base' state with a -EALREADY error. This also means fdt_addr_r is required even when no FDT download is needed, giving a spurious -EINVAL error. Fix this by calling efi_get_distro_fdt_name() before checking fdt_addr_r, and handling -EALREADY by setting BOOTFLOWF_USE_PRIOR_FDT to skip the FDT download, matching the block-device behaviour. THere is no test for this at present, since sandbox does not enable CONFIG_OF_HAS_PRIOR_STAGE and lacks infra for network-based EFI boot. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
586e4f340a
commit
ee4bcfc659
@ -269,17 +269,22 @@ static int distro_efi_read_bootflow_net(struct bootflow *bflow)
|
||||
return log_msg_ret("fi0", -ENOMEM);
|
||||
|
||||
/* read the DT file also */
|
||||
ret = efi_get_distro_fdt_name(fname, sizeof(fname), 0);
|
||||
if (ret == -EALREADY) {
|
||||
/* Prior-stage FDT is used, no download needed */
|
||||
bflow->flags |= BOOTFLOWF_USE_PRIOR_FDT;
|
||||
bflow->state = BOOTFLOWST_READY;
|
||||
return 0;
|
||||
} else if (ret) {
|
||||
return log_msg_ret("nam", ret);
|
||||
}
|
||||
|
||||
fdt_addr_str = env_get("fdt_addr_r");
|
||||
if (!fdt_addr_str)
|
||||
return log_msg_ret("fdt", -EINVAL);
|
||||
fdt_addr = hextoul(fdt_addr_str, NULL);
|
||||
sprintf(file_addr, "%lx", fdt_addr);
|
||||
|
||||
/* We only allow the first prefix with PXE */
|
||||
ret = efi_get_distro_fdt_name(fname, sizeof(fname), 0);
|
||||
if (ret)
|
||||
return log_msg_ret("nam", ret);
|
||||
|
||||
bflow->fdt_fname = strdup(fname);
|
||||
if (!bflow->fdt_fname)
|
||||
return log_msg_ret("fil", -ENOMEM);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user