From mboxrd@z Thu Jan 1 00:00:00 1970 From: AKASHI Takahiro Date: Wed, 3 Mar 2021 09:01:51 +0900 Subject: [PATCH 2/3 v5] cmd: efi: ESRT table debug print In-Reply-To: <20210302121354.23009-3-jose.marinho@arm.com> References: <20210302121354.23009-1-jose.marinho@arm.com> <20210302121354.23009-3-jose.marinho@arm.com> Message-ID: <20210303000151.GB10164@laputa> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 > > CC: Heinrich Schuchardt > CC: Sughosh Ganu > CC: AKASHI Takahiro > CC: Ilias Apalodimas > CC: Andre Przywara > CC: Alexander Graf > CC: nd at 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 []\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 >