cmd, fdt: add subcommand "get" to fdt header
PATCH v3 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 v3:
- add comments from Marek
simplify for loop, use fdtp[i] -> drop ftdip++
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 ])) +continue ; + + val =fdt32_to_cpu (fdtp[i]); +env_set_hex (argv[3 ], val); +return CMD_RET_SUCCESS ; + } + +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 · 1 line
2.17.2
PATCH v3 1/1 cmd, fdt: add subcommand "get" to fdt header
Quoted 18 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 v3:
- add comments from Marek
simplify for loop, use fdtp[i] -> drop ftdip++
Quoted 5 lines
Changes in v2:
- add obviously missing "static const char *"cmd/fdt.c | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-)
Should we have a test case for this?