When using the FDT command to inspect an arbitrary FDT in memory, it
will always be necessary to explicitly set the FDT address. However it
is also quite likely that the command is being used to inspect U-Boot's
own FDT. Simplify that common workflow of running "fdt addr -c" to get
the control address and set it by just making $fdtcontroladdr the
default FDT if there isn't one.

Signed-off-by: Caleb Connolly <[email protected]>
---
 cmd/fdt.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/cmd/fdt.c b/cmd/fdt.c
index d16b141ce32d..8909706e2483 100644
--- a/cmd/fdt.c
+++ b/cmd/fdt.c
@@ -276,8 +276,17 @@ static int do_fdt(struct cmd_tbl *cmdtp, int flag, int 
argc, char *const argv[])
 
                return CMD_RET_SUCCESS;
        }
 
+       /* Try using U-Boot's FDT by default */
+       if (!working_fdt) {
+               struct fdt_header *addr;
+
+               addr = (void *)env_get_hex("fdtcontroladdr", 0);
+               if (addr && fdt_check_header(&addr))
+                       set_working_fdt_addr((phys_addr_t)addr);
+       }
+
        if (!working_fdt) {
                puts("No FDT memory address configured. Please configure\n"
                     "the FDT address via \"fdt addr <address>\" command.\n"
                     "Aborting!\n");
-- 
2.46.0

Reply via email to