Hi Simon, On Mon, Oct 30, 2023 at 12:47 PM Tony Dinh <mibo...@gmail.com> wrote: > > During scanning for the next bootdev, if bootdev_next_prio() encounters > a device error (e.g. ENOSYS), let it continue scanning the next devices, > not stopping prematurely. > > Background: > > During scanning for bootflows, it's possible for bootstd to encounter a > faulty device controller. Also when the same u-boot is used for another > variant of the same board, some device controller such as SATA might > not exist. > > I've found this issue while converting the Marvell Sheevaplug board to > use bootstd. This board has 2 variants, the original Sheevaplug has MMC and > USB only, but the later variant comes with USB, MMC, and eSATA ports. We > have been using the same u-boot (starting with CONFIG_IDE and later with DM > CONFIG_SATA) for both variants. This worked well with the old > envs-scripting booting scheme. > > Signed-off-by: Tony Dinh <mibo...@gmail.com> > --- > > boot/bootdev-uclass.c | 2 -- > 1 file changed, 2 deletions(-) > > diff --git a/boot/bootdev-uclass.c b/boot/bootdev-uclass.c > index 44ae98a926..b1d48e5b69 100644 > --- a/boot/bootdev-uclass.c > +++ b/boot/bootdev-uclass.c > @@ -677,8 +677,6 @@ int bootdev_next_prio(struct bootflow_iter *iter, struct > udevice **devp) > BOOTFLOWIF_SHOW); > log_debug("- bootdev_hunt_prio() ret %d\n", > ret); > - if (ret) > - return log_msg_ret("hun", ret); > } > } else { > ret = device_probe(dev); > -- > 2.39.2 >
Per your request, here is the console trace log when the device error occurs. Perhaps we could improve bootdev_next_prio() to make the error status more visible in the console with printf? I've briefly looked at other device bootdev hunt drivers and did not see enough console output for this type of error, so it might be better that we have this output either in bootdev_next_prio() or bootdev_hunt_drv(). <BEGIN LOG> U-Boot 2024.01-rc1-tld-1-00003-gd697d7b93a-dirty (Oct 26 2023 - 16:17:16 -0700) Marvell-Sheevaplug SoC: Kirkwood 88F6281_A0 DRAM: 512 MiB Core: 17 devices, 12 uclasses, devicetree: separate NAND: 512 MiB MMC: 338-uclass_find_device_by_seq() 0 346-uclass_find_device_by_seq() - 0 'mvsdio@90000' 349-uclass_find_device_by_seq() - found 252- mvebu_mmc_power_up() mvebu_mmc mvsdio@90000: power up 399-mvebu_mmc_initialize() mvebu_mmc mvsdio@90000: mvebu_mmc_initialize 338-uclass_find_device_by_seq() 1 346-uclass_find_device_by_seq() - 0 'mvsdio@90000' 353-uclass_find_device_by_seq() - not found mvsdio@90000: 0 Loading Environment from NAND... 338-uclass_find_device_by_seq() 0 346-uclass_find_device_by_seq() - 0 'ethernet-controller@72000' 349-uclass_find_device_by_seq() - found OK In: serial Out: serial Err: serial Net: eth0: ethernet-controller@72000 Hit any key to stop autoboot: 0 => env def -a ## Resetting to default environment => bootflow scan -l Scanning for bootflows in all bootdevs Seq Method State Uclass Part Name Filename --- ----------- ------ -------- ---- ------------------------ ---------------- 338-uclass_find_device_by_seq() 0 346-uclass_find_device_by_seq() - 0 'extlinux' 349-uclass_find_device_by_seq() - found 338-uclass_find_device_by_seq() 1 346-uclass_find_device_by_seq() - 0 'extlinux' 346-uclass_find_device_by_seq() - 1 'script' 349-uclass_find_device_by_seq() - found 338-uclass_find_device_by_seq() 2 346-uclass_find_device_by_seq() - 0 'extlinux' 346-uclass_find_device_by_seq() - 1 'script' 346-uclass_find_device_by_seq() - 2 'pxe' 349-uclass_find_device_by_seq() - found 871- bootdev_hunt_prio() Hunting for priority 1 883- bootdev_hunt_prio() exit 0 715- bootdev_setup_iter() - bootdev_hunt_prio() ret 0 83-bootstd_get_bootdev_order() - targets <NULL> 00000000 746- bootdev_setup_iter() setup labels 00000000 641- bootdev_next_prio() next prio 0: dev=00000000/none 659- bootdev_next_prio() - ethernet-control...@72000.boo: 6, want 0 659- bootdev_next_prio() - mvsdio@90000.bootdev: 2, want 0 668- bootdev_next_prio() None found at prio 0, moving to 1 871- bootdev_hunt_prio() Hunting for priority 1 883- bootdev_hunt_prio() exit 0 678- bootdev_next_prio() - bootdev_hunt_prio() ret 0 659- bootdev_next_prio() - ethernet-control...@72000.boo: 6, want 1 659- bootdev_next_prio() - mvsdio@90000.bootdev: 2, want 1 668- bootdev_next_prio() None found at prio 1, moving to 2 871- bootdev_hunt_prio() Hunting for priority 2 Hunting with: mmc 783- bootdev_hunt_drv() Hunting with: mmc 879- bootdev_hunt_prio() bootdev_hunt_drv() return 0 883- bootdev_hunt_prio() exit 0 678- bootdev_next_prio() - bootdev_hunt_prio() ret 0 659- bootdev_next_prio() - ethernet-control...@72000.boo: 6, want 2 659- bootdev_next_prio() - mvsdio@90000.bootdev: 2, want 2 756- bootdev_setup_iter() Selected bootdev: mvsdio@90000.bootdev 134-bootflow_iter_set_dev() iter: Setting dev to mvsdio@90000.bootdev, flags 0 Scanning bootdev 'mvsdio@90000.bootdev': 573-bootdev_get_bootflow() ->get_bootflow mvsdio@90000.bootdev,0=00000000 337- mvebu_mmc_set_ios() mvebu_mmc mvsdio@90000: bus[0] clock[0] 321- mvebu_mmc_set_bus() mvebu_mmc mvsdio@90000: ctrl 0xf809: push-pull 1bit-width 279- mvebu_mmc_set_clk() mvebu_mmc mvsdio@90000: clock off 337- mvebu_mmc_set_ios() mvebu_mmc mvsdio@90000: bus[1] clock[0] 321- mvebu_mmc_set_bus() mvebu_mmc mvsdio@90000: ctrl 0xf809: push-pull 1bit-width 279- mvebu_mmc_set_clk() mvebu_mmc mvsdio@90000: clock off 337- mvebu_mmc_set_ios() mvebu_mmc mvsdio@90000: bus[1] clock[97703] 321- mvebu_mmc_set_bus() mvebu_mmc mvsdio@90000: ctrl 0xf809: push-pull 1bit-width 287- mvebu_mmc_set_clk() mvebu_mmc mvsdio@90000: clock (97703) div : 1022 85- mvebu_mmc_send_cmd() mvebu_mmc mvsdio@90000: cmdidx [0x0] resp_type[0x0] cmdarg[0x0] 88- mvebu_mmc_send_cmd() mvebu_mmc mvsdio@90000: cmd 0 (hw state 0x20f8) 233- mvebu_mmc_send_cmd() mvebu_mmc mvsdio@90000: resp[0x0] mvebu_mmc mvsdio@90000: cmdidx [0x8] resp_type[0x15] cmdarg[0x1aa] 88- mvebu_mmc_send_cmd() mvebu_mmc mvsdio@90000: cmd 8 (hw state 0x20f8) 233- mvebu_mmc_send_cmd() mvebu_mmc mvsdio@90000: resp[0x15] mvebu_mmc mvsdio@90000: cmdidx [0x37] resp_type[0x15] cmdarg[0x0] 88- mvebu_mmc_send_cmd() mvebu_mmc mvsdio@90000: cmd 55 (hw state 0x20f8) 233- mvebu_mmc_send_cmd() mvebu_mmc mvsdio@90000: resp[0x15] mvebu_mmc mvsdio@90000: cmdidx [0x0] resp_type[0x0] cmdarg[0x0] 88- mvebu_mmc_send_cmd() mvebu_mmc mvsdio@90000: cmd 0 (hw state 0x20f8) 233- mvebu_mmc_send_cmd() mvebu_mmc mvsdio@90000: resp[0x0] mvebu_mmc mvsdio@90000: cmdidx [0x1] resp_type[0x1] cmdarg[0x0] 88- mvebu_mmc_send_cmd() mvebu_mmc mvsdio@90000: cmd 1 (hw state 0x20f8) 233- mvebu_mmc_send_cmd() mvebu_mmc mvsdio@90000: resp[0x1] Card did not respond to voltage select! : -110 333-bootdev_get_sibling_blk() act: returning err=-95 550-default_get_bootflow() sibling_blk ret=-95, blk=(none) 559-default_get_bootflow() blk: returning err=-108 375- bootflow_check() check: returning err=-108 414- bootflow_scan_first() check - ret=-108 191- iter_incr() entry: err=-108 248- iter_incr() inc_dev=1 281- iter_incr() labels 00000000 641- bootdev_next_prio() next prio 2: dev=1fb4e800/mvsdio@90000.bootdev 668- bootdev_next_prio() None found at prio 2, moving to 3 871- bootdev_hunt_prio() Hunting for priority 3 883- bootdev_hunt_prio() exit 0 678- bootdev_next_prio() - bootdev_hunt_prio() ret 0 659- bootdev_next_prio() - ethernet-control...@72000.boo: 6, want 3 659- bootdev_next_prio() - mvsdio@90000.bootdev: 2, want 3 668- bootdev_next_prio() None found at prio 3, moving to 4 871- bootdev_hunt_prio() Hunting for priority 4 Hunting with: ahci 783- bootdev_hunt_drv() Hunting with: ahci Removing devices on SATA bus... Cannot find SATA device (err=0) 786- bootdev_hunt_drv() - hunt result -38 879- bootdev_hunt_prio() bootdev_hunt_drv() return -38 883- bootdev_hunt_prio() exit -38 678- bootdev_next_prio() - bootdev_hunt_prio() ret -38 681- bootdev_next_prio() hun: returning err=-38 308- iter_incr() ret=-38, dev=00000000 none 134-bootflow_iter_set_dev() iter: Setting dev to (none), flags 0 No more bootdevs 326- iter_incr() incr: returning err=-19 434- bootflow_scan_next() iter_incr: ret=-19 436- bootflow_scan_next() done: returning err=-19 422- bootflow_scan_first() get: returning err=-19 --- ----------- ------ -------- ---- ------------------------ ---------------- (0 bootflows, 0 valid) <END LOG> All the best, Tony