diff options
author | Simon Glass <sjg@chromium.org> | 2023-09-20 07:29:49 -0600 |
---|---|---|
committer | Bin Meng <bmeng@tinylab.org> | 2023-09-22 06:05:40 +0800 |
commit | 1b1d36ec58f43585081b387ee44053278e480171 (patch) | |
tree | 20e6b96ee8dfb25936c405996fab16efc9f2236f /boot | |
parent | 8c11d19e7599442d0325f79c7c7705b951f821d4 (diff) | |
download | u-boot-1b1d36ec58f43585081b387ee44053278e480171.zip u-boot-1b1d36ec58f43585081b387ee44053278e480171.tar.gz u-boot-1b1d36ec58f43585081b387ee44053278e480171.tar.bz2 |
bootstd: Keep track of use of usb stop
When 'usb stop' is run, doing 'bootflow scan' does not run the USB hunter
again so does not see any devices. Fix this by telling bootstd about the
state of USB.
Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'boot')
-rw-r--r-- | boot/bootdev-uclass.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/boot/bootdev-uclass.c b/boot/bootdev-uclass.c index 69506e3..974ddee 100644 --- a/boot/bootdev-uclass.c +++ b/boot/bootdev-uclass.c @@ -830,6 +830,33 @@ int bootdev_hunt(const char *spec, bool show) return result; } +int bootdev_unhunt(enum uclass_id id) +{ + struct bootdev_hunter *start; + int n_ent, i; + + start = ll_entry_start(struct bootdev_hunter, bootdev_hunter); + n_ent = ll_entry_count(struct bootdev_hunter, bootdev_hunter); + for (i = 0; i < n_ent; i++) { + struct bootdev_hunter *info = start + i; + + if (info->uclass == id) { + struct bootstd_priv *std; + int ret; + + ret = bootstd_get_priv(&std); + if (ret) + return log_msg_ret("std", ret); + if (!(std->hunters_used & BIT(i))) + return -EALREADY; + std->hunters_used &= ~BIT(i); + return 0; + } + } + + return -ENOENT; +} + int bootdev_hunt_prio(enum bootdev_prio_t prio, bool show) { struct bootdev_hunter *start; |