]>
Commit | Line | Data |
---|---|---|
1047b534 SG |
1 | // SPDX-License-Identifier: GPL-2.0+ |
2 | /* | |
3 | * Copyright 2021 Google LLC | |
4 | * Written by Simon Glass <[email protected]> | |
5 | */ | |
6 | ||
7 | #define LOG_CATEGORY UCLASS_BOOTSTD | |
8 | ||
9 | #include <bootflow.h> | |
10 | #include <bootstd.h> | |
11 | #include <command.h> | |
12 | #include <dm.h> | |
13 | ||
14 | /* | |
15 | * show_bootmeths() - List available bootmeths | |
16 | * | |
17 | * We could refactor this to use do_bootmeth_list() if more detail (or ordering) | |
18 | * are needed | |
19 | */ | |
20 | static void show_bootmeths(void) | |
21 | { | |
22 | struct udevice *dev; | |
23 | struct uclass *uc; | |
24 | ||
25 | printf("Bootmeths: "); | |
26 | uclass_id_foreach_dev(UCLASS_BOOTMETH, dev, uc) | |
27 | printf(" %s", dev->name); | |
28 | printf("\n"); | |
29 | } | |
30 | ||
31 | int bootstd_prog_boot(void) | |
32 | { | |
33 | struct bootflow_iter iter; | |
34 | struct bootflow bflow; | |
35 | int ret, flags, i; | |
36 | ||
37 | printf("Programmatic boot starting\n"); | |
38 | show_bootmeths(); | |
39 | flags = BOOTFLOWIF_HUNT | BOOTFLOWIF_SHOW | BOOTFLOWIF_SKIP_GLOBAL; | |
40 | ||
41 | bootstd_clear_glob(); | |
42 | for (i = 0, ret = bootflow_scan_first(NULL, NULL, &iter, flags, &bflow); | |
43 | i < 1000 && ret != -ENODEV; | |
44 | i++, ret = bootflow_scan_next(&iter, &bflow)) { | |
45 | if (!bflow.err) | |
46 | bootflow_run_boot(&iter, &bflow); | |
47 | bootflow_free(&bflow); | |
48 | } | |
49 | ||
50 | return -EFAULT; | |
51 | } |