diff options
author | Simon Glass <sjg@chromium.org> | 2022-07-31 00:52:23 +0300 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2022-08-12 15:17:11 +0300 |
commit | eccb25cd5922edebc15f135923aa2b4bbd26527d (patch) | |
tree | 4ffd44ff0c951a104d180a3239b06984efa3a486 | |
parent | 2662b54d70fc04f070f0e4a9742d4b3197c9f3ea (diff) | |
download | u-boot-eccb25cd5922edebc15f135923aa2b4bbd26527d.tar.xz |
bootstd: Allow the bootdev to be optional in bootflows
With global bootmeths we want to scan without a bootdev. Update the logic
to allow this.
Change the bootflow command to show the bootdev only when valid.
Signed-off-by: Simon Glass <sjg@chromium.org>
-rw-r--r-- | boot/bootdev-uclass.c | 7 | ||||
-rw-r--r-- | boot/bootflow.c | 3 | ||||
-rw-r--r-- | cmd/bootflow.c | 4 |
3 files changed, 9 insertions, 5 deletions
diff --git a/boot/bootdev-uclass.c b/boot/bootdev-uclass.c index 5683006c73..13ac69eb39 100644 --- a/boot/bootdev-uclass.c +++ b/boot/bootdev-uclass.c @@ -36,7 +36,6 @@ enum { int bootdev_add_bootflow(struct bootflow *bflow) { - struct bootdev_uc_plat *ucp = dev_get_uclass_plat(bflow->dev); struct bootstd_priv *std; struct bootflow *new; int ret; @@ -52,7 +51,11 @@ int bootdev_add_bootflow(struct bootflow *bflow) memcpy(new, bflow, sizeof(*bflow)); list_add_tail(&new->glob_node, &std->glob_head); - list_add_tail(&new->bm_node, &ucp->bootflow_head); + if (bflow->dev) { + struct bootdev_uc_plat *ucp = dev_get_uclass_plat(bflow->dev); + + list_add_tail(&new->bm_node, &ucp->bootflow_head); + } return 0; } diff --git a/boot/bootflow.c b/boot/bootflow.c index 24ba3c3466..37bccb823a 100644 --- a/boot/bootflow.c +++ b/boot/bootflow.c @@ -307,7 +307,8 @@ void bootflow_free(struct bootflow *bflow) void bootflow_remove(struct bootflow *bflow) { - list_del(&bflow->bm_node); + if (bflow->dev) + list_del(&bflow->bm_node); list_del(&bflow->glob_node); bootflow_free(bflow); diff --git a/cmd/bootflow.c b/cmd/bootflow.c index af4b9c3732..47899245ee 100644 --- a/cmd/bootflow.c +++ b/cmd/bootflow.c @@ -69,8 +69,8 @@ static void show_bootflow(int index, struct bootflow *bflow, bool errors) { printf("%3x %-11s %-6s %-9.9s %4x %-25.25s %s\n", index, bflow->method->name, bootflow_state_get_name(bflow->state), - dev_get_uclass_name(dev_get_parent(bflow->dev)), bflow->part, - bflow->name, bflow->fname); + bflow->dev ? dev_get_uclass_name(dev_get_parent(bflow->dev)) : + "(none)", bflow->part, bflow->name, bflow->fname); if (errors) report_bootflow_err(bflow, bflow->err); } |