store fdt header member with name <member> in U-Boot
Environment variable with name <var>.

for example to get the total length of the fdt and store
it in filesize, call:

fdt header get filesize totalsize

For membernames look into fdt header definition at
scripts/dtc/libfdt/libfdt.h

Signed-off-by: Heiko Schocher <h...@denx.de>
---

 cmd/fdt.c | 40 +++++++++++++++++++++++++++++++++++++++-
 1 file changed, 39 insertions(+), 1 deletion(-)

diff --git a/cmd/fdt.c b/cmd/fdt.c
index 8a19a3fdbf..cc50f7914d 100644
--- a/cmd/fdt.c
+++ b/cmd/fdt.c
@@ -73,6 +73,40 @@ static int fdt_value_env_set(const void *nodep, int len, 
const char *var)
        return 0;
 }

+fdt_member_table[] = {
+       {"magic"},
+       {"totalsize"},
+       {"off_dt_struct"},
+       {"off_dt_strings"},
+       {"off_mem_rsvmap"},
+       {"version"},
+       {"last_comp_version"},
+       {"boot_cpuid_phys"},
+       {"size_dt_strings"},
+       {"size_dt_struct"},
+};
+
+static int fdt_get_header_value(int argc, char * const argv[])
+{
+       fdt32_t *fdtp = (fdt32_t *)working_fdt;
+       ulong val;
+       int i;
+
+       if (argv[2][0] != 'g')
+               return CMD_RET_FAILURE;
+
+       for (i = 0; i < ARRAY_SIZE(fdt_member_table); i++) {
+               if (strcmp(fdt_member_table[i], argv[4]) == 0) {
+                       val = fdt32_to_cpu(*fdtp);
+                       env_set_hex(argv[3], val);
+                       return CMD_RET_SUCCESS;
+               }
+               fdtp++;
+       }
+
+       return CMD_RET_FAILURE;
+}
+
 /*
  * Flattened Device Tree command, see the help for parameter definitions.
  */
@@ -491,6 +525,9 @@ static int do_fdt(cmd_tbl_t *cmdtp, int flag, int argc, 
char * const argv[])
         * Display header info
         */
        } else if (argv[1][0] == 'h') {
+               if (argc == 5)
+                       return fdt_get_header_value(argc, argv);
+
                u32 version = fdt_version(working_fdt);
                printf("magic:\t\t\t0x%x\n", fdt_magic(working_fdt));
                printf("totalsize:\t\t0x%x (%d)\n", fdt_totalsize(working_fdt),
@@ -1090,7 +1127,8 @@ static char fdt_help_text[] =
        "fdt set    <path> <prop> [<val>]    - Set <property> [to <val>]\n"
        "fdt mknode <path> <node>            - Create a new node after <path>\n"
        "fdt rm     <path> [<prop>]          - Delete the node or <property>\n"
-       "fdt header                          - Display header info\n"
+       "fdt header [get <var> <member>]     - Display header info\n"
+       "                                      get - get header member <member> and store 
it in <var>\n"
        "fdt bootcpu <id>                    - Set boot cpuid\n"
        "fdt memory <addr> <size>            - Add/Update memory node\n"
        "fdt rsvmem print                    - Show current mem reserves\n"
--
2.13.6


--
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-52   Fax: +49-8142-66989-80   Email: h...@denx.de
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to