cmd, fdt: add subcommand "get" to fdt header
PATCH v2 1/1 cmd, fdt: add subcommand "get" to fdt header
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
---
Changes in v2:
- add obviously missing "static const char *"
cmd/fdt.c | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-)
cmd/fdt.c +39 -1
@@ -73,6 +73,40 @@ static int fdt_value_env_set(const void *nodep, int len, const char *var)return 0 ; } +static const char *const 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"
Signature · 7 lines
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: hs at denx.de
PATCH v2 1/1 cmd, fdt: add subcommand "get" to fdt header
Quoted 43 lines · Heiko Schocher
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.hSigned-off-by Heiko Schocher <[email protected]>---
Changes in v2:
- add obviously missing "static const char *"cmd/fdt.c | 40 +++++++++++++++++++++++++++++++++++++++-
1 file changed, 39 insertions(+), 1 deletion(-)cmd/fdt.c +14
-0@@ -73,6 +73,40 @@ static int fdt_value_env_set(const void *nodep, int len, const char *var) return 0; } +static const char *const 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[])
cmd/fdt.c static int fdt_value_env_set(const void *nodep, int · line 100
Quoted 10 lines
cmd/fdt.c +10
-0+{ + 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) {
if (strcmp...)
continue;
cmd/fdt.c static int fdt_value_env_set(const void *nodep, int len, const char *var) · line 100
Quoted 1 line
cmd/fdt.c +1
-0+ val = fdt32_to_cpu(*fdtp);
You can use fdtp[i]
cmd/fdt.c static int fdt_value_env_set(const void *nodep, int len, const char *var) · line 104
Quoted 4 lines
cmd/fdt.c +4
-0+ env_set_hex(argv[3], val); + return CMD_RET_SUCCESS; + } + fdtp++;
And drop this
cmd/fdt.c static int fdt_value_env_set(const void *nodep, int · line 106
Quoted 1 line
cmd/fdt.c +1
-0+ }
Looks great otherwise
Quoted 30 lines
cmd/fdt.c +3
-0+ return CMD_RET_FAILURE; +} + /** Flattened Device Tree command, see the help for parameter definitions. */
cmd/fdt.c +3
-0@@ -491,6 +525,9 @@ static int do_fdt(cmd_tbl_t *cmdtp, int flag, intargc, 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),cmd/fdt.c +0
-0@@ -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"
Signature · 2 lines
Best regards, Marek Vasut