Message ID | 20210302121354.23009-3-jose.marinho@arm.com |
---|---|
State | Superseded |
Delegated to: | Heinrich Schuchardt |
Headers | show |
Series | Add ESRT and test ESRT creation | expand |
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.marinho@arm.com> > > CC: Heinrich Schuchardt <xypron.glpk@gmx.de> > CC: Sughosh Ganu <sughosh.ganu@linaro.org> > CC: AKASHI Takahiro <takahiro.akashi@linaro.org> > CC: Ilias Apalodimas <ilias.apalodimas@linaro.org> > CC: Andre Przywara <andre.przywara@arm.com> > CC: Alexander Graf <agraf@csgraf.de> > CC: nd@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 >
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 + */ +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; + + 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); + 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); + } + 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"
This commit enables the ESRT printing from the u-boot shell by invoking: - efidebug capsule esrt Signed-off-by: Jose Marinho <jose.marinho@arm.com> CC: Heinrich Schuchardt <xypron.glpk@gmx.de> CC: Sughosh Ganu <sughosh.ganu@linaro.org> CC: AKASHI Takahiro <takahiro.akashi@linaro.org> CC: Ilias Apalodimas <ilias.apalodimas@linaro.org> CC: Andre Przywara <andre.przywara@arm.com> CC: Alexander Graf <agraf@csgraf.de> CC: nd@arm.com --- cmd/efidebug.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+)