mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-09-03 04:51:35 +02:00
When bringing in the series 'arm: dts: am62-beagleplay: Fix Beagleplay Ethernet"' I failed to notice that b4 noticed it was based on next and so took that as the base commit and merged that part of next to master. This reverts commit c8ffd1356d42223cbb8c86280a083cc3c93e6426, reversing changes made to 2ee6f3a5f7550de3599faef9704e166e5dcace35. Reported-by: Jonas Karlman <jonas@kwiboo.se> Signed-off-by: Tom Rini <trini@konsulko.com>
114 lines
2.6 KiB
C
114 lines
2.6 KiB
C
// SPDX-License-Identifier: GPL-2.0+
|
|
/*
|
|
* 'bootmeth' command
|
|
*
|
|
* Copyright 2021 Google LLC
|
|
* Written by Simon Glass <sjg@chromium.org>
|
|
*/
|
|
|
|
#include <common.h>
|
|
#include <bootdev.h>
|
|
#include <bootmeth.h>
|
|
#include <bootstd.h>
|
|
#include <command.h>
|
|
#include <dm.h>
|
|
#include <malloc.h>
|
|
#include <dm/uclass-internal.h>
|
|
|
|
static int do_bootmeth_list(struct cmd_tbl *cmdtp, int flag, int argc,
|
|
char *const argv[])
|
|
{
|
|
struct bootstd_priv *std;
|
|
struct udevice *dev;
|
|
bool use_order;
|
|
bool all = false;
|
|
int ret;
|
|
int i;
|
|
|
|
if (argc > 1 && *argv[1] == '-') {
|
|
all = strchr(argv[1], 'a');
|
|
argc--;
|
|
argv++;
|
|
}
|
|
|
|
ret = bootstd_get_priv(&std);
|
|
if (ret) {
|
|
printf("Cannot get bootstd (err=%d)\n", ret);
|
|
return CMD_RET_FAILURE;
|
|
}
|
|
|
|
printf("Order Seq Name Description\n");
|
|
printf("----- --- ------------------ ------------------\n");
|
|
|
|
/*
|
|
* Use the ordering if we have one, so long as we are not trying to list
|
|
* all bootmethds
|
|
*/
|
|
use_order = std->bootmeth_count && !all;
|
|
if (use_order)
|
|
dev = std->bootmeth_order[0];
|
|
else
|
|
ret = uclass_find_first_device(UCLASS_BOOTMETH, &dev);
|
|
|
|
for (i = 0; dev;) {
|
|
struct bootmeth_uc_plat *ucp = dev_get_uclass_plat(dev);
|
|
int order = i;
|
|
|
|
/*
|
|
* With the -a flag we may list bootdevs that are not in the
|
|
* ordering. Find their place in the order
|
|
*/
|
|
if (all && std->bootmeth_count) {
|
|
int j;
|
|
|
|
/* Find the position of this bootmeth in the order */
|
|
order = -1;
|
|
for (j = 0; j < std->bootmeth_count; j++) {
|
|
if (std->bootmeth_order[j] == dev)
|
|
order = j;
|
|
}
|
|
}
|
|
|
|
if (ucp->flags & BOOTMETHF_GLOBAL)
|
|
printf("%5s", "glob");
|
|
else if (order == -1)
|
|
printf("%5s", "-");
|
|
else
|
|
printf("%5x", order);
|
|
printf(" %3x %-19.19s %s\n", dev_seq(dev), dev->name,
|
|
ucp->desc);
|
|
i++;
|
|
if (use_order)
|
|
dev = std->bootmeth_order[i];
|
|
else
|
|
uclass_find_next_device(&dev);
|
|
}
|
|
printf("----- --- ------------------ ------------------\n");
|
|
printf("(%d bootmeth%s)\n", i, i != 1 ? "s" : "");
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int do_bootmeth_order(struct cmd_tbl *cmdtp, int flag, int argc,
|
|
char *const argv[])
|
|
{
|
|
int ret;
|
|
|
|
ret = bootmeth_set_order(argv[1]);
|
|
if (ret) {
|
|
printf("Failed (err=%d)\n", ret);
|
|
return CMD_RET_FAILURE;
|
|
}
|
|
env_set("bootmeths", argv[1]);
|
|
|
|
return 0;
|
|
}
|
|
|
|
U_BOOT_LONGHELP(bootmeth,
|
|
"list [-a] - list available bootmeths (-a all)\n"
|
|
"bootmeth order [<bd> ...] - select bootmeth order / subset to use");
|
|
|
|
U_BOOT_CMD_WITH_SUBCMDS(bootmeth, "Boot methods", bootmeth_help_text,
|
|
U_BOOT_SUBCMD_MKENT(list, 2, 1, do_bootmeth_list),
|
|
U_BOOT_SUBCMD_MKENT(order, CONFIG_SYS_MAXARGS, 1, do_bootmeth_order));
|