Commit 8244127db93d6cf17d2b35e9083400a78015c061
Committed by
Simon Glass
1 parent
b847c14243
Exists in
smarc_8mq_lf_v2020.04
and in
11 other branches
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 Signed-off-by: Heiko Schocher <hs@denx.de> Reviewed-by: Simon Glass <sjg@chromium.org>
Showing 1 changed file with 39 additions and 1 deletions Side-by-side Diff
cmd/fdt.c
... | ... | @@ -73,6 +73,40 @@ |
73 | 73 | return 0; |
74 | 74 | } |
75 | 75 | |
76 | +static const char * const fdt_member_table[] = { | |
77 | + "magic", | |
78 | + "totalsize", | |
79 | + "off_dt_struct", | |
80 | + "off_dt_strings", | |
81 | + "off_mem_rsvmap", | |
82 | + "version", | |
83 | + "last_comp_version", | |
84 | + "boot_cpuid_phys", | |
85 | + "size_dt_strings", | |
86 | + "size_dt_struct", | |
87 | +}; | |
88 | + | |
89 | +static int fdt_get_header_value(int argc, char * const argv[]) | |
90 | +{ | |
91 | + fdt32_t *fdtp = (fdt32_t *)working_fdt; | |
92 | + ulong val; | |
93 | + int i; | |
94 | + | |
95 | + if (argv[2][0] != 'g') | |
96 | + return CMD_RET_FAILURE; | |
97 | + | |
98 | + for (i = 0; i < ARRAY_SIZE(fdt_member_table); i++) { | |
99 | + if (strcmp(fdt_member_table[i], argv[4])) | |
100 | + continue; | |
101 | + | |
102 | + val = fdt32_to_cpu(fdtp[i]); | |
103 | + env_set_hex(argv[3], val); | |
104 | + return CMD_RET_SUCCESS; | |
105 | + } | |
106 | + | |
107 | + return CMD_RET_FAILURE; | |
108 | +} | |
109 | + | |
76 | 110 | /* |
77 | 111 | * Flattened Device Tree command, see the help for parameter definitions. |
78 | 112 | */ |
... | ... | @@ -491,6 +525,9 @@ |
491 | 525 | * Display header info |
492 | 526 | */ |
493 | 527 | } else if (argv[1][0] == 'h') { |
528 | + if (argc == 5) | |
529 | + return fdt_get_header_value(argc, argv); | |
530 | + | |
494 | 531 | u32 version = fdt_version(working_fdt); |
495 | 532 | printf("magic:\t\t\t0x%x\n", fdt_magic(working_fdt)); |
496 | 533 | printf("totalsize:\t\t0x%x (%d)\n", fdt_totalsize(working_fdt), |
... | ... | @@ -1090,7 +1127,8 @@ |
1090 | 1127 | "fdt set <path> <prop> [<val>] - Set <property> [to <val>]\n" |
1091 | 1128 | "fdt mknode <path> <node> - Create a new node after <path>\n" |
1092 | 1129 | "fdt rm <path> [<prop>] - Delete the node or <property>\n" |
1093 | - "fdt header - Display header info\n" | |
1130 | + "fdt header [get <var> <member>] - Display header info\n" | |
1131 | + " get - get header member <member> and store it in <var>\n" | |
1094 | 1132 | "fdt bootcpu <id> - Set boot cpuid\n" |
1095 | 1133 | "fdt memory <addr> <size> - Add/Update memory node\n" |
1096 | 1134 | "fdt rsvmem print - Show current mem reserves\n" |