mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-28 23:51:33 +00:00
fdt: Add -q option to fdt addr for distro_bootcmd
distro_bootcmd uses this construct a few times to test $fdt_addr_r, and fall back on $fdtcontroladdr if not set/invalid: if fdt addr ${fdt_addr_r}; then ... else ... fi If the `fdt addr` test fails, it prints the following message on the console, suggesting there is an error when there is not: libfdt fdt_check_header(): FDT_ERR_BADMAGIC To remove this potentially confusing error message, this patch adds -q as a 'quiet' option for fdt addr, and uses this flag in config_distro_bootcmd.h Signed-off-by: Peter Hoyes <Peter.Hoyes@arm.com>
This commit is contained in:
parent
9de612ae4d
commit
e9496ec374
2 changed files with 26 additions and 10 deletions
30
cmd/fdt.c
30
cmd/fdt.c
|
@ -119,13 +119,27 @@ static int do_fdt(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
|
||||||
if (strncmp(argv[1], "ad", 2) == 0) {
|
if (strncmp(argv[1], "ad", 2) == 0) {
|
||||||
unsigned long addr;
|
unsigned long addr;
|
||||||
int control = 0;
|
int control = 0;
|
||||||
|
int quiet = 0;
|
||||||
struct fdt_header *blob;
|
struct fdt_header *blob;
|
||||||
|
|
||||||
/* Set the address [and length] of the fdt */
|
/* Set the address [and length] of the fdt */
|
||||||
argc -= 2;
|
argc -= 2;
|
||||||
argv += 2;
|
argv += 2;
|
||||||
if (argc && !strcmp(*argv, "-c")) {
|
while (argc > 0 && **argv == '-') {
|
||||||
control = 1;
|
char *arg = *argv;
|
||||||
|
|
||||||
|
while (*++arg) {
|
||||||
|
switch (*arg) {
|
||||||
|
case 'c':
|
||||||
|
control = 1;
|
||||||
|
break;
|
||||||
|
case 'q':
|
||||||
|
quiet = 1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return CMD_RET_USAGE;
|
||||||
|
}
|
||||||
|
}
|
||||||
argc--;
|
argc--;
|
||||||
argv++;
|
argv++;
|
||||||
}
|
}
|
||||||
|
@ -145,7 +159,8 @@ static int do_fdt(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
|
||||||
|
|
||||||
addr = hextoul(argv[0], NULL);
|
addr = hextoul(argv[0], NULL);
|
||||||
blob = map_sysmem(addr, 0);
|
blob = map_sysmem(addr, 0);
|
||||||
if (!fdt_valid(&blob))
|
if ((quiet && fdt_check_header(blob)) ||
|
||||||
|
(!quiet && !fdt_valid(&blob)))
|
||||||
return 1;
|
return 1;
|
||||||
if (control)
|
if (control)
|
||||||
gd->fdt_blob = blob;
|
gd->fdt_blob = blob;
|
||||||
|
@ -159,12 +174,13 @@ static int do_fdt(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
|
||||||
/* Optional new length */
|
/* Optional new length */
|
||||||
len = hextoul(argv[1], NULL);
|
len = hextoul(argv[1], NULL);
|
||||||
if (len < fdt_totalsize(blob)) {
|
if (len < fdt_totalsize(blob)) {
|
||||||
printf("New length %d < existing length %d, ignoring\n",
|
if (!quiet)
|
||||||
len, fdt_totalsize(blob));
|
printf("New length %d < existing length %d, ignoring\n",
|
||||||
|
len, fdt_totalsize(blob));
|
||||||
} else {
|
} else {
|
||||||
/* Open in place with a new length */
|
/* Open in place with a new length */
|
||||||
err = fdt_open_into(blob, blob, len);
|
err = fdt_open_into(blob, blob, len);
|
||||||
if (err != 0) {
|
if (!quiet && err != 0) {
|
||||||
printf("libfdt fdt_open_into(): %s\n",
|
printf("libfdt fdt_open_into(): %s\n",
|
||||||
fdt_strerror(err));
|
fdt_strerror(err));
|
||||||
}
|
}
|
||||||
|
@ -1055,7 +1071,7 @@ static int fdt_print(const char *pathp, char *prop, int depth)
|
||||||
/********************************************************************/
|
/********************************************************************/
|
||||||
#ifdef CONFIG_SYS_LONGHELP
|
#ifdef CONFIG_SYS_LONGHELP
|
||||||
static char fdt_help_text[] =
|
static char fdt_help_text[] =
|
||||||
"addr [-c] <addr> [<length>] - Set the [control] fdt location to <addr>\n"
|
"addr [-cq] <addr> [<length>] - Set the [control] fdt location to <addr>\n"
|
||||||
#ifdef CONFIG_OF_LIBFDT_OVERLAY
|
#ifdef CONFIG_OF_LIBFDT_OVERLAY
|
||||||
"fdt apply <addr> - Apply overlay to the DT\n"
|
"fdt apply <addr> - Apply overlay to the DT\n"
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -126,7 +126,7 @@
|
||||||
#ifdef CONFIG_CMD_BOOTEFI_BOOTMGR
|
#ifdef CONFIG_CMD_BOOTEFI_BOOTMGR
|
||||||
#define BOOTENV_EFI_BOOTMGR \
|
#define BOOTENV_EFI_BOOTMGR \
|
||||||
"boot_efi_bootmgr=" \
|
"boot_efi_bootmgr=" \
|
||||||
"if fdt addr ${fdt_addr_r}; then " \
|
"if fdt addr -q ${fdt_addr_r}; then " \
|
||||||
"bootefi bootmgr ${fdt_addr_r};" \
|
"bootefi bootmgr ${fdt_addr_r};" \
|
||||||
"else " \
|
"else " \
|
||||||
"bootefi bootmgr;" \
|
"bootefi bootmgr;" \
|
||||||
|
@ -141,7 +141,7 @@
|
||||||
"boot_efi_binary=" \
|
"boot_efi_binary=" \
|
||||||
"load ${devtype} ${devnum}:${distro_bootpart} " \
|
"load ${devtype} ${devnum}:${distro_bootpart} " \
|
||||||
"${kernel_addr_r} efi/boot/"BOOTEFI_NAME"; " \
|
"${kernel_addr_r} efi/boot/"BOOTEFI_NAME"; " \
|
||||||
"if fdt addr ${fdt_addr_r}; then " \
|
"if fdt addr -q ${fdt_addr_r}; then " \
|
||||||
"bootefi ${kernel_addr_r} ${fdt_addr_r};" \
|
"bootefi ${kernel_addr_r} ${fdt_addr_r};" \
|
||||||
"else " \
|
"else " \
|
||||||
"bootefi ${kernel_addr_r} ${fdtcontroladdr};" \
|
"bootefi ${kernel_addr_r} ${fdtcontroladdr};" \
|
||||||
|
@ -360,7 +360,7 @@
|
||||||
"setenv bootp_arch " BOOTENV_EFI_PXE_ARCH ";" \
|
"setenv bootp_arch " BOOTENV_EFI_PXE_ARCH ";" \
|
||||||
"if dhcp ${kernel_addr_r}; then " \
|
"if dhcp ${kernel_addr_r}; then " \
|
||||||
"tftpboot ${fdt_addr_r} dtb/${efi_fdtfile};" \
|
"tftpboot ${fdt_addr_r} dtb/${efi_fdtfile};" \
|
||||||
"if fdt addr ${fdt_addr_r}; then " \
|
"if fdt addr -q ${fdt_addr_r}; then " \
|
||||||
"bootefi ${kernel_addr_r} ${fdt_addr_r}; " \
|
"bootefi ${kernel_addr_r} ${fdt_addr_r}; " \
|
||||||
"else " \
|
"else " \
|
||||||
"bootefi ${kernel_addr_r} ${fdtcontroladdr};" \
|
"bootefi ${kernel_addr_r} ${fdtcontroladdr};" \
|
||||||
|
|
Loading…
Reference in a new issue