On Tue, Mar 02, 2021 at 12:13:53PM +0000, Jose Marinho wrote: > This commit enables the ESRT printing from the u-boot shell by invoking: > - efidebug capsule esrt > > Signed-off-by: Jose Marinho <jose.mari...@arm.com> > > CC: Heinrich Schuchardt <xypron.g...@gmx.de> > CC: Sughosh Ganu <sughosh.g...@linaro.org> > CC: AKASHI Takahiro <takahiro.aka...@linaro.org> > CC: Ilias Apalodimas <ilias.apalodi...@linaro.org> > CC: Andre Przywara <andre.przyw...@arm.com> > CC: Alexander Graf <ag...@csgraf.de> > CC: n...@arm.com > > --- > cmd/efidebug.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 64 insertions(+) > > diff --git a/cmd/efidebug.c b/cmd/efidebug.c > index a7dace2f80..5a9ff2bd9a 100644 > --- a/cmd/efidebug.c > +++ b/cmd/efidebug.c > @@ -129,6 +129,61 @@ static int do_efi_capsule_show(struct cmd_tbl *cmdtp, > int flag, > return CMD_RET_SUCCESS; > } > > +#ifdef CONFIG_EFI_ESRT > +/** > + * do_efi_capsule_esrt() - manage UEFI capsules > + * > + * @cmdtp: Command table > + * @flag: Command flag > + * @argc: Number of arguments > + * @argv: Argument array > + * Return: CMD_RET_SUCCESS on success, > + * CMD_RET_USAGE or CMD_RET_RET_FAILURE on failure > + * > + * Implement efidebug "capsule esrt" sub-command. > + * The prints the current ESRT table. > + * > + * efidebug capsule esrt
Strictly speaking, ESRT does not always require capsules to be used as "23.4.2 ESRT and Firmware Management Protocol" says. > + */ > +static int do_efi_capsule_esrt(struct cmd_tbl *cmdtp, int flag, > + int argc, char * const argv[]) > +{ > + struct efi_system_resource_table *esrt = NULL; > + > + if (argc != 1) > + return CMD_RET_USAGE; > + > + for (int idx = 0; idx < systab.nr_tables; idx++) > + if (!guidcmp(&efi_esrt_guid, &systab.tables[idx].guid)) > + esrt = (struct efi_system_resource_table > *)systab.tables[idx].table; > + > + if (!esrt) > + return CMD_RET_FAILURE; Is this really a failure? Even so, it would be nice to print a verbose message here. > + > + printf("========================================\n"); > + printf("ESRT: fw_resource_count=%d\n", esrt->fw_resource_count); > + printf("ESRT: fw_resource_count_max=%d\n", esrt->fw_resource_count_max); > + printf("ESRT: fw_resource_version=%lld\n", esrt->fw_resource_version); > + > + for (int idx = 0; idx < esrt->fw_resource_count; idx++) { > + printf("[entry %d]==============================\n", idx); > + printf("ESRT: fw_class=%pUL\n", &esrt->entries[idx].fw_class); More symbolic expression would be friendly. > + printf("ESRT: fw_type=%d\n", esrt->entries[idx].fw_type); > + printf("ESRT: fw_version=%d\n", esrt->entries[idx].fw_version); > + printf("ESRT: lowest_supported_fw_version=%d\n", > + esrt->entries[idx].lowest_supported_fw_version); > + printf("ESRT: capsule_flags=%d\n", > + esrt->entries[idx].capsule_flags); > + printf("ESRT: last_attempt_version=%d\n", > + esrt->entries[idx].last_attempt_version); > + printf("ESRT: last_attempt_status=%d\n", > + esrt->entries[idx].last_attempt_status); ditto. > + } > + printf("========================================\n"); > + > + return CMD_RET_SUCCESS; > +} > +#endif /* CONFIG_EFI_ESRT */ > /** > * do_efi_capsule_res() - show a capsule update result > * > @@ -221,6 +276,10 @@ static struct cmd_tbl cmd_efidebug_capsule_sub[] = { > "", ""), > U_BOOT_CMD_MKENT(show, CONFIG_SYS_MAXARGS, 1, do_efi_capsule_show, > "", ""), > +#ifdef CONFIG_EFI_ESRT > + U_BOOT_CMD_MKENT(esrt, CONFIG_SYS_MAXARGS, 1, do_efi_capsule_esrt, > + "", ""), > +#endif > U_BOOT_CMD_MKENT(disk-update, 0, 0, do_efi_capsule_on_disk_update, > "", ""), > U_BOOT_CMD_MKENT(result, CONFIG_SYS_MAXARGS, 1, do_efi_capsule_res, > @@ -256,6 +315,7 @@ static int do_efi_capsule(struct cmd_tbl *cmdtp, int flag, > > return cp->cmd(cmdtp, flag, argc, argv); > } > + > #endif /* CONFIG_EFI_HAVE_CAPSULE_SUPPORT */ > > /** > @@ -1580,6 +1640,10 @@ static char efidebug_help_text[] = > " - show capsule information\n" > "efidebug capsule result [<capsule result var>]\n" > " - show a capsule update result\n" > +#ifdef CONFIG_EFI_ESRT > + "efidebug capsule esrt\n" > + " - print the ESRT\n" > +#endif > "\n" > #endif > "efidebug devices\n" > -- > 2.17.1 >