bootstd: usb: Avoid initing USB twice

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>
This commit is contained in:
Simon Glass 2023-05-05 20:03:04 -06:00 committed by Tom Rini
parent 9fea3a799d
commit 8c29b73278
2 changed files with 8 additions and 0 deletions

View 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();
}

View 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));