bootstd: usb: Avoid initing USB twice
authorSimon Glass <sjg@chromium.org>
Sat, 6 May 2023 02:03:04 +0000 (20:03 -0600)
committerTom Rini <trini@konsulko.com>
Sat, 13 May 2023 13:52:32 +0000 (09:52 -0400)
This causes crashes on some boards, e.g. rockpro64. In any case, we
should not do it.

Check the usb_started flag to avoid this.

Signed-off-by: Simon Glass <sjg@chromium.org>
Tested-by: Jonas Karlman <jonas@kwiboo.se>
Tested-by: Tom Rini <trini@konsulko.com>
drivers/usb/host/usb_bootdev.c
test/boot/bootdev.c

index 32919f9..06e8f61 100644 (file)
@@ -22,6 +22,9 @@ static int usb_bootdev_bind(struct udevice *dev)
 
 static int usb_bootdev_hunt(struct bootdev_hunter *info, bool show)
 {
+       if (usb_started)
+               return 0;
+
        return usb_init();
 }
 
index 606bf4f..6b29213 100644 (file)
@@ -306,6 +306,7 @@ static int bootdev_test_hunter(struct unit_test_state *uts)
 {
        struct bootstd_priv *std;
 
+       usb_started = false;
        test_set_skip_delays(true);
 
        /* get access to the used hunters */
@@ -346,6 +347,7 @@ static int bootdev_test_cmd_hunt(struct unit_test_state *uts)
        struct bootstd_priv *std;
 
        test_set_skip_delays(true);
+       usb_started = false;
 
        /* get access to the used hunters */
        ut_assertok(bootstd_get_priv(&std));
@@ -474,6 +476,7 @@ BOOTSTD_TEST(bootdev_test_bootable, UT_TESTF_DM | UT_TESTF_SCAN_FDT);
 /* Check hunting for bootdev of a particular priority */
 static int bootdev_test_hunt_prio(struct unit_test_state *uts)
 {
+       usb_started = false;
        test_set_skip_delays(true);
 
        console_record_reset_enable();
@@ -502,6 +505,8 @@ static int bootdev_test_hunt_label(struct unit_test_state *uts)
        struct bootstd_priv *std;
        int mflags;
 
+       usb_started = false;
+
        /* get access to the used hunters */
        ut_assertok(bootstd_get_priv(&std));