Commit ccadfca251aa83982e01fc6278405a316831c933

Authored by Andre Przywara
Committed by Tom Rini
1 parent 55adabbbfc
Exists in emb_lf_v2022.04

distro_boot: Fix block device after DHCP boot sequence

The generic distro boot sequence iterates over several types of devices,
trying one after another. In doing do, it starts with setting the
"devtype" variable, then uses this later in more generic commands.

Now most (block) device types use a local variable for that, but DHCP
puts the type into the environment, where it shadows any local variables.
As a consequence any boot attempt after bootcmd_dhcp has been run fails:
===========================
VExpress64# run bootcmd_dhcp
...
VExpress64# run bootcmd_sata0
SATA#0:
        (3.0 Gbps)
SATA#1:
        (No RDY)
Device 0: Model: 16GB SATA Flash Drive  ....
... is now current device
Couldn't find partition dhcp 0:1
===========================
This problem typically doesn't show, because DHCP is mostly the last
command to try, but is a problem when this order is different, or when
distro_bootcmd or bootcmd_xxx are run separately or multiple times.

Let bootcmd_dhcp use a local variable, as the other kids do, to make the
order of boot commands irrelevant, and allow repeated calls.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Reviewed-by: Simon Glass <sjg@chromium.org>

Showing 1 changed file with 1 additions and 1 deletions Side-by-side Diff

include/config_distro_bootcmd.h
... ... @@ -375,7 +375,7 @@
375 375 #endif
376 376 #define BOOTENV_DEV_DHCP(devtypeu, devtypel, instance) \
377 377 "bootcmd_dhcp=" \
378   - "setenv devtype " #devtypel "; " \
  378 + "devtype=" #devtypel "; " \
379 379 BOOTENV_RUN_NET_USB_START \
380 380 BOOTENV_RUN_PCI_ENUM \
381 381 "if dhcp ${scriptaddr} ${boot_script_dhcp}; then " \