From 8c29b73278d66c029b98caecba81831ef6dc472a Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Fri, 5 May 2023 20:03:04 -0600 Subject: [PATCH] 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 Tested-by: Jonas Karlman Tested-by: Tom Rini --- drivers/usb/host/usb_bootdev.c | 3 +++ test/boot/bootdev.c | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/drivers/usb/host/usb_bootdev.c b/drivers/usb/host/usb_bootdev.c index 32919f9928..06e8f61aa1 100644 --- a/drivers/usb/host/usb_bootdev.c +++ b/drivers/usb/host/usb_bootdev.c @@ -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(); } diff --git a/test/boot/bootdev.c b/test/boot/bootdev.c index 606bf4fcc1..6b29213416 100644 --- a/test/boot/bootdev.c +++ b/test/boot/bootdev.c @@ -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)); -- 2.39.5