cmd: fwu: Dump custom fields from mdata structure
authorMichal Simek <michal.simek@amd.com>
Fri, 21 Mar 2025 10:25:48 +0000 (11:25 +0100)
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Fri, 11 Apr 2025 11:20:38 +0000 (13:20 +0200)
The commit cb9ae40a16f0 ("tools: mkfwumdata: add logic to append vendor
data to the FWU metadata") added support for adding vendor data to mdata
structure but it is not visible anywhere that's why extend fwu command to
dump it.

Tested-by: Sughosh Ganu <sughosh.ganu@linaro.org>
Reviewed-by: Sughosh Ganu <sughosh.ganu@linaro.org>
Signed-off-by: Michal Simek <michal.simek@amd.com>
cmd/Kconfig
cmd/fwu_mdata.c

index ecef664..c2ce519 100644 (file)
@@ -185,6 +185,7 @@ config CMD_UFETCH
 config CMD_FWU_METADATA
        bool "fwu metadata read"
        depends on FWU_MULTI_BANK_UPDATE
+       imply HEXDUMP if FWU_MDATA_V2
        help
          Command to read the metadata and dump it's contents
 
index 9c048d6..5b5a2e4 100644 (file)
@@ -7,6 +7,7 @@
 #include <dm.h>
 #include <fwu.h>
 #include <fwu_mdata.h>
+#include <hexdump.h>
 #include <log.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -45,6 +46,30 @@ static void print_mdata(struct fwu_data *data)
                               img_info->accepted == 0x1 ? "yes" : "no");
                }
        }
+
+       if (data->version == 2) {
+               struct fwu_mdata *mdata = data->fwu_mdata;
+               struct fwu_fw_store_desc *desc;
+               void *end;
+               u32 diff;
+
+               /*
+                * fwu_mdata defines only header that's why taking it as array
+                * which exactly point to image description location
+                */
+               desc = (struct fwu_fw_store_desc *)&mdata[1];
+
+               /* Number of entries is taken from for loop - variable i */
+               end = &desc->img_entry[i];
+               debug("mdata %p, desc %p, end %p\n", mdata, desc, end);
+
+               diff = data->metadata_size - ((void *)end - (void *)mdata);
+               if (diff) {
+                       printf("Custom fields covered by CRC len: 0x%x\n", diff);
+                       print_hex_dump_bytes("CUSTOM ", DUMP_PREFIX_OFFSET,
+                                            end, diff);
+               }
+       }
 }
 
 int do_fwu_mdata_read(struct cmd_tbl *cmdtp, int flag,