mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-09 03:21:51 +00:00
bootstd: Allow hunting for bootdevs of a given priority
Add a way to run the hunter function for a particular priority, so that new bootdevs can be found. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
d73420e4fe
commit
79a7d4a61f
3 changed files with 61 additions and 0 deletions
|
@ -742,6 +742,31 @@ int bootdev_hunt(const char *spec, bool show)
|
|||
return result;
|
||||
}
|
||||
|
||||
int bootdev_hunt_prio(enum bootdev_prio_t prio, bool show)
|
||||
{
|
||||
struct bootdev_hunter *start;
|
||||
int n_ent, i;
|
||||
int result;
|
||||
|
||||
start = ll_entry_start(struct bootdev_hunter, bootdev_hunter);
|
||||
n_ent = ll_entry_count(struct bootdev_hunter, bootdev_hunter);
|
||||
result = 0;
|
||||
|
||||
log_debug("Hunting for priority %d\n", prio);
|
||||
for (i = 0; i < n_ent; i++) {
|
||||
struct bootdev_hunter *info = start + i;
|
||||
int ret;
|
||||
|
||||
if (prio != info->prio)
|
||||
continue;
|
||||
ret = bootdev_hunt_drv(info, i, show);
|
||||
if (ret && ret != -ENOENT)
|
||||
result = ret;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void bootdev_list_hunters(struct bootstd_priv *std)
|
||||
{
|
||||
struct bootdev_hunter *orig, *start;
|
||||
|
|
|
@ -284,6 +284,17 @@ void bootdev_list_hunters(struct bootstd_priv *std);
|
|||
*/
|
||||
int bootdev_hunt(const char *spec, bool show);
|
||||
|
||||
/**
|
||||
* bootdev_hunt_prio() - Hunt for bootdevs of a particular priority
|
||||
*
|
||||
* This runs all hunters which can find bootdevs of the given priority.
|
||||
*
|
||||
* @prio: Priority to use
|
||||
* @show: true to show each hunter as it is used
|
||||
* Returns: 0 if OK, -ve on error
|
||||
*/
|
||||
int bootdev_hunt_prio(enum bootdev_prio_t prio, bool show);
|
||||
|
||||
#if CONFIG_IS_ENABLED(BOOTSTD)
|
||||
/**
|
||||
* bootdev_setup_for_dev() - Bind a new bootdev device (deprecated)
|
||||
|
|
|
@ -363,3 +363,28 @@ static int bootdev_test_bootable(struct unit_test_state *uts)
|
|||
return 0;
|
||||
}
|
||||
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)
|
||||
{
|
||||
test_set_skip_delays(true);
|
||||
|
||||
console_record_reset_enable();
|
||||
ut_assertok(bootdev_hunt_prio(BOOTDEVP_2_SCAN_FAST, false));
|
||||
ut_assert_nextline("scanning bus for devices...");
|
||||
ut_assert_skip_to_line(" Type: Hard Disk");
|
||||
ut_assert_nextlinen(" Capacity:");
|
||||
ut_assert_console_end();
|
||||
|
||||
/* now try a different priority, verbosely */
|
||||
ut_assertok(bootdev_hunt_prio(BOOTDEVP_3_SCAN_SLOW, true));
|
||||
ut_assert_nextline("Hunting with: ide");
|
||||
ut_assert_nextline("Bus 0: not available ");
|
||||
ut_assert_nextline("Hunting with: usb");
|
||||
ut_assert_nextline(
|
||||
"Bus usb@1: scanning bus usb@1 for devices... 5 USB Device(s) found");
|
||||
ut_assert_console_end();
|
||||
|
||||
return 0;
|
||||
}
|
||||
BOOTSTD_TEST(bootdev_test_hunt_prio, UT_TESTF_DM | UT_TESTF_SCAN_FDT);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue