// SPDX-License-Identifier: GPL-2.0+ /* * Copyright 2021 Google LLC * Written by Simon Glass */ #define LOG_CATEGORY UCLASS_BOOTSTD #include #include #include #include /* * show_bootmeths() - List available bootmeths * * We could refactor this to use do_bootmeth_list() if more detail (or ordering) * are needed */ static void show_bootmeths(void) { struct udevice *dev; struct uclass *uc; printf("Bootmeths: "); uclass_id_foreach_dev(UCLASS_BOOTMETH, dev, uc) printf(" %s", dev->name); printf("\n"); } int bootstd_prog_boot(void) { struct bootflow_iter iter; struct bootflow bflow; int ret, flags, i; printf("Programmatic boot starting\n"); show_bootmeths(); flags = BOOTFLOWIF_HUNT | BOOTFLOWIF_SHOW | BOOTFLOWIF_SKIP_GLOBAL; bootstd_clear_glob(); for (i = 0, ret = bootflow_scan_first(NULL, NULL, &iter, flags, &bflow); i < 1000 && ret != -ENODEV; i++, ret = bootflow_scan_next(&iter, &bflow)) { if (!bflow.err) bootflow_run_boot(&iter, &bflow); bootflow_free(&bflow); } return -EFAULT; }