[U-Boot] [PATCH 1/4] x86: fsp: Compact the output of hob command

Compact hob command output, especially by making hob type string a little bit shorter so that we can leave room for future extension.
Signed-off-by: Bin Meng bmeng.cn@gmail.com ---
arch/x86/lib/cmd_hob.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-)
diff --git a/arch/x86/lib/cmd_hob.c b/arch/x86/lib/cmd_hob.c index 915746a..6ff321a 100644 --- a/arch/x86/lib/cmd_hob.c +++ b/arch/x86/lib/cmd_hob.c @@ -14,16 +14,16 @@ DECLARE_GLOBAL_DATA_PTR; static char *hob_type[] = { "reserved", "Hand-off", - "Memory Allocation", - "Resource Descriptor", - "GUID Extension", - "Firmware Volume", + "Mem Alloc", + "Res Desc", + "GUID Ext", + "FV", "CPU", - "Memory Pool", + "Mem Pool", "reserved", - "Firmware Volume 2", - "Load PEIM Unused", - "UEFI Capsule", + "FV2", + "Load PEIM", + "Capsule", };
int do_hob(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) @@ -37,20 +37,20 @@ int do_hob(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
printf("HOB list address: 0x%08x\n\n", (unsigned int)hdr);
- printf("No. | Address | Type | Length in Bytes\n"); - printf("----|----------|---------------------|----------------\n"); + printf("# | Address | Type | Len\n"); + printf("---|----------|-----------|-----\n"); while (!end_of_hob(hdr)) { - printf("%-3d | %08x | ", i, (unsigned int)hdr); + printf("%-2d | %08x | ", i, (unsigned int)hdr); type = hdr->type; if (type == HOB_TYPE_UNUSED) desc = "*Unused*"; else if (type == HOB_TYPE_EOH) - desc = "*END OF HOB*"; + desc = "*EOH*"; else if (type >= 0 && type <= ARRAY_SIZE(hob_type)) desc = hob_type[type]; else - desc = "*Invalid Type*"; - printf("%-19s | %-15d\n", desc, hdr->len); + desc = "*Invalid*"; + printf("%-9s | %-4d\n", desc, hdr->len); hdr = get_next_hob(hdr); i++; }

When examining a HOB, it's useful to see which GUID this HOB belongs to. Add GUID output in the hob command to aid this.
Signed-off-by: Bin Meng bmeng.cn@gmail.com ---
arch/x86/lib/cmd_hob.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-)
diff --git a/arch/x86/lib/cmd_hob.c b/arch/x86/lib/cmd_hob.c index 6ff321a..4a29aee 100644 --- a/arch/x86/lib/cmd_hob.c +++ b/arch/x86/lib/cmd_hob.c @@ -37,8 +37,10 @@ int do_hob(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
printf("HOB list address: 0x%08x\n\n", (unsigned int)hdr);
- printf("# | Address | Type | Len\n"); - printf("---|----------|-----------|-----\n"); + printf("# | Address | Type | Len | "); + printf("%42s\n", "GUID"); + printf("---|----------|-----------|------|-"); + printf("------------------------------------------\n"); while (!end_of_hob(hdr)) { printf("%-2d | %08x | ", i, (unsigned int)hdr); type = hdr->type; @@ -50,7 +52,21 @@ int do_hob(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) desc = hob_type[type]; else desc = "*Invalid*"; - printf("%-9s | %-4d\n", desc, hdr->len); + printf("%-9s | %-4d | ", desc, hdr->len); + + if (type == HOB_TYPE_MEM_ALLOC || type == HOB_TYPE_RES_DESC || + type == HOB_TYPE_GUID_EXT) { + struct efi_guid *guid = (struct efi_guid *)(hdr + 1); + int j; + + printf("%08x-%04x-%04x", guid->data1, + guid->data2, guid->data3); + for (j = 0; j < ARRAY_SIZE(guid->data4); j++) + printf("-%02x", guid->data4[j]); + } else { + printf("%42s", "Not Available"); + } + printf("\n"); hdr = get_next_hob(hdr); i++; }

On 10 October 2015 at 02:47, Bin Meng bmeng.cn@gmail.com wrote:
When examining a HOB, it's useful to see which GUID this HOB belongs to. Add GUID output in the hob command to aid this.
Signed-off-by: Bin Meng bmeng.cn@gmail.com
arch/x86/lib/cmd_hob.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-)
Acked-by: Simon Glass sjg@chromium.org

On 18 October 2015 at 14:26, Simon Glass sjg@chromium.org wrote:
On 10 October 2015 at 02:47, Bin Meng bmeng.cn@gmail.com wrote:
When examining a HOB, it's useful to see which GUID this HOB belongs to. Add GUID output in the hob command to aid this.
Signed-off-by: Bin Meng bmeng.cn@gmail.com
arch/x86/lib/cmd_hob.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-)
Acked-by: Simon Glass sjg@chromium.org
Applied to u-boot-x86, thanks!

Introduce a new fsp command and make the existing hob command a sub-command to fsp for future extension. Also move cmd_hob.c to the dedicated fsp sub-directory in arch/x86/lib.
Signed-off-by: Bin Meng bmeng.cn@gmail.com ---
arch/x86/lib/Makefile | 1 - arch/x86/lib/fsp/Makefile | 1 + arch/x86/lib/{cmd_hob.c => fsp/cmd_fsp.c} | 33 +++++++++++++++++++++++++------ doc/README.x86 | 5 ++--- 4 files changed, 30 insertions(+), 10 deletions(-) rename arch/x86/lib/{cmd_hob.c => fsp/cmd_fsp.c} (65%)
diff --git a/arch/x86/lib/Makefile b/arch/x86/lib/Makefile index 4ac9956..fa95944 100644 --- a/arch/x86/lib/Makefile +++ b/arch/x86/lib/Makefile @@ -10,7 +10,6 @@ obj-y += bios_asm.o obj-y += bios_interrupts.o obj-$(CONFIG_CMD_BOOTM) += bootm.o obj-y += cmd_boot.o -obj-$(CONFIG_HAVE_FSP) += cmd_hob.o obj-$(CONFIG_EFI) += efi/ obj-y += e820.o obj-y += gcc.o diff --git a/arch/x86/lib/fsp/Makefile b/arch/x86/lib/fsp/Makefile index 5b12c12..3ea4880 100644 --- a/arch/x86/lib/fsp/Makefile +++ b/arch/x86/lib/fsp/Makefile @@ -4,6 +4,7 @@ # SPDX-License-Identifier: GPL-2.0+ #
+obj-y += cmd_fsp.o obj-y += fsp_car.o obj-y += fsp_common.o obj-y += fsp_dram.o diff --git a/arch/x86/lib/cmd_hob.c b/arch/x86/lib/fsp/cmd_fsp.c similarity index 65% rename from arch/x86/lib/cmd_hob.c rename to arch/x86/lib/fsp/cmd_fsp.c index 4a29aee..b0b1875 100644 --- a/arch/x86/lib/cmd_hob.c +++ b/arch/x86/lib/fsp/cmd_fsp.c @@ -1,12 +1,11 @@ /* - * Copyright (C) 2014, Bin Meng bmeng.cn@gmail.com + * Copyright (C) 2014-2015, Bin Meng bmeng.cn@gmail.com * * SPDX-License-Identifier: GPL-2.0+ */
#include <common.h> #include <command.h> -#include <linux/compiler.h> #include <asm/fsp/fsp_support.h>
DECLARE_GLOBAL_DATA_PTR; @@ -26,7 +25,7 @@ static char *hob_type[] = { "Capsule", };
-int do_hob(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +static int do_hob(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { const struct hob_header *hdr; uint type; @@ -74,8 +73,30 @@ int do_hob(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) return 0; }
+static cmd_tbl_t fsp_commands[] = { + U_BOOT_CMD_MKENT(hob, 0, 1, do_hob, "", ""), +}; + +static int do_fsp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +{ + cmd_tbl_t *fsp_cmd; + int ret; + + if (argc < 2) + return CMD_RET_USAGE; + fsp_cmd = find_cmd_tbl(argv[1], fsp_commands, ARRAY_SIZE(fsp_commands)); + argc -= 2; + argv += 2; + if (!fsp_cmd || argc > fsp_cmd->maxargs) + return CMD_RET_USAGE; + + ret = fsp_cmd->cmd(fsp_cmd, flag, argc, argv); + + return cmd_process_error(fsp_cmd, ret); +} + U_BOOT_CMD( - hob, 1, 1, do_hob, - "print Firmware Support Package (FSP) Hand-Off Block information", - "" + fsp, 2, 1, do_fsp, + "Show Intel Firmware Support Package (FSP) related information", + "hob - Print FSP Hand-Off Block (HOB) information" ); diff --git a/doc/README.x86 b/doc/README.x86 index 18fed82..a9d0e0f 100644 --- a/doc/README.x86 +++ b/doc/README.x86 @@ -332,9 +332,8 @@ In keeping with the U-Boot philosophy of providing functions to check and adjust internal settings, there are several x86-specific commands that may be useful:
-hob - Display information about Firmware Support Package (FSP) Hand-off - Block. This is only available on platforms which use FSP, mostly - Atom. +fsp - Display information about Intel Firmware Support Package (FSP). + This is only available on platforms which use FSP, mostly Atom. iod - Display I/O memory iow - Write I/O memory mtrr - List and set the Memory Type Range Registers (MTRR). These are used to

On 10 October 2015 at 02:47, Bin Meng bmeng.cn@gmail.com wrote:
Introduce a new fsp command and make the existing hob command a sub-command to fsp for future extension. Also move cmd_hob.c to the dedicated fsp sub-directory in arch/x86/lib.
Signed-off-by: Bin Meng bmeng.cn@gmail.com
arch/x86/lib/Makefile | 1 - arch/x86/lib/fsp/Makefile | 1 + arch/x86/lib/{cmd_hob.c => fsp/cmd_fsp.c} | 33 +++++++++++++++++++++++++------ doc/README.x86 | 5 ++--- 4 files changed, 30 insertions(+), 10 deletions(-) rename arch/x86/lib/{cmd_hob.c => fsp/cmd_fsp.c} (65%)
Acked-by: Simon Glass sjg@chromium.org

On 18 October 2015 at 14:26, Simon Glass sjg@chromium.org wrote:
On 10 October 2015 at 02:47, Bin Meng bmeng.cn@gmail.com wrote:
Introduce a new fsp command and make the existing hob command a sub-command to fsp for future extension. Also move cmd_hob.c to the dedicated fsp sub-directory in arch/x86/lib.
Signed-off-by: Bin Meng bmeng.cn@gmail.com
arch/x86/lib/Makefile | 1 - arch/x86/lib/fsp/Makefile | 1 + arch/x86/lib/{cmd_hob.c => fsp/cmd_fsp.c} | 33 +++++++++++++++++++++++++------ doc/README.x86 | 5 ++--- 4 files changed, 30 insertions(+), 10 deletions(-) rename arch/x86/lib/{cmd_hob.c => fsp/cmd_fsp.c} (65%)
Acked-by: Simon Glass sjg@chromium.org
Applied to u-boot-x86, thanks!

It would be helpful to have a command to show FSP header. So far it only supports FSP header which conforms to FSP spec 1.0.
Signed-off-by: Bin Meng bmeng.cn@gmail.com ---
arch/x86/lib/fsp/cmd_fsp.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-)
diff --git a/arch/x86/lib/fsp/cmd_fsp.c b/arch/x86/lib/fsp/cmd_fsp.c index b0b1875..4959edf 100644 --- a/arch/x86/lib/fsp/cmd_fsp.c +++ b/arch/x86/lib/fsp/cmd_fsp.c @@ -25,6 +25,34 @@ static char *hob_type[] = { "Capsule", };
+static int do_hdr(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +{ + struct fsp_header *hdr = find_fsp_header(); + u32 img_addr = hdr->img_base; + char *sign = (char *)&hdr->sign; + int i; + + printf("FSP : binary 0x%08x, header 0x%08x\n", + CONFIG_FSP_ADDR, (int)hdr); + printf("Header : sign "); + for (i = 0; i < sizeof(hdr->sign); i++) + printf("%c", *sign++); + printf(", size %d, rev %d\n", hdr->hdr_len, hdr->hdr_rev); + printf("Image : rev %d.%d, id ", + (hdr->img_rev >> 8) & 0xff, hdr->img_rev & 0xff); + for (i = 0; i < ARRAY_SIZE(hdr->img_id); i++) + printf("%c", hdr->img_id[i]); + printf(", addr 0x%08x, size %d\n", img_addr, hdr->img_size); + printf("VPD : addr 0x%08x, size %d\n", + hdr->cfg_region_off + img_addr, hdr->cfg_region_size); + printf("\nNumber of APIs Supported : %d\n", hdr->api_num); + printf("\tTempRamInit : 0x%08x\n", hdr->fsp_tempram_init + img_addr); + printf("\tFspInit : 0x%08x\n", hdr->fsp_init + img_addr); + printf("\tFspNotify : 0x%08x\n", hdr->fsp_notify + img_addr); + + return 0; +} + static int do_hob(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { const struct hob_header *hdr; @@ -74,6 +102,7 @@ static int do_hob(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) }
static cmd_tbl_t fsp_commands[] = { + U_BOOT_CMD_MKENT(hdr, 0, 1, do_hdr, "", ""), U_BOOT_CMD_MKENT(hob, 0, 1, do_hob, "", ""), };
@@ -98,5 +127,6 @@ static int do_fsp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) U_BOOT_CMD( fsp, 2, 1, do_fsp, "Show Intel Firmware Support Package (FSP) related information", - "hob - Print FSP Hand-Off Block (HOB) information" + "hdr - Print FSP header information\n" + "fsp hob - Print FSP Hand-Off Block (HOB) information" );

On 10 October 2015 at 02:47, Bin Meng bmeng.cn@gmail.com wrote:
It would be helpful to have a command to show FSP header. So far it only supports FSP header which conforms to FSP spec 1.0.
Signed-off-by: Bin Meng bmeng.cn@gmail.com
arch/x86/lib/fsp/cmd_fsp.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-)
Acked-by: Simon Glass sjg@chromium.org

On 18 October 2015 at 14:26, Simon Glass sjg@chromium.org wrote:
On 10 October 2015 at 02:47, Bin Meng bmeng.cn@gmail.com wrote:
It would be helpful to have a command to show FSP header. So far it only supports FSP header which conforms to FSP spec 1.0.
Signed-off-by: Bin Meng bmeng.cn@gmail.com
arch/x86/lib/fsp/cmd_fsp.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-)
Acked-by: Simon Glass sjg@chromium.org
Applied to u-boot-x86, thanks!

On Sat, Oct 10, 2015 at 4:47 PM, Bin Meng bmeng.cn@gmail.com wrote:
Compact hob command output, especially by making hob type string a little bit shorter so that we can leave room for future extension.
Signed-off-by: Bin Meng bmeng.cn@gmail.com
arch/x86/lib/cmd_hob.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-)
diff --git a/arch/x86/lib/cmd_hob.c b/arch/x86/lib/cmd_hob.c index 915746a..6ff321a 100644 --- a/arch/x86/lib/cmd_hob.c +++ b/arch/x86/lib/cmd_hob.c @@ -14,16 +14,16 @@ DECLARE_GLOBAL_DATA_PTR; static char *hob_type[] = { "reserved", "Hand-off",
"Memory Allocation",
"Resource Descriptor",
"GUID Extension",
"Firmware Volume",
"Mem Alloc",
"Res Desc",
"GUID Ext",
"FV", "CPU",
"Memory Pool",
"Mem Pool", "reserved",
"Firmware Volume 2",
"Load PEIM Unused",
"UEFI Capsule",
"FV2",
"Load PEIM",
"Capsule",
};
int do_hob(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) @@ -37,20 +37,20 @@ int do_hob(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
printf("HOB list address: 0x%08x\n\n", (unsigned int)hdr);
printf("No. | Address | Type | Length in Bytes\n");
printf("----|----------|---------------------|----------------\n");
printf("# | Address | Type | Len\n");
printf("---|----------|-----------|-----\n"); while (!end_of_hob(hdr)) {
printf("%-3d | %08x | ", i, (unsigned int)hdr);
printf("%-2d | %08x | ", i, (unsigned int)hdr); type = hdr->type; if (type == HOB_TYPE_UNUSED) desc = "*Unused*"; else if (type == HOB_TYPE_EOH)
desc = "*END OF HOB*";
desc = "*EOH*"; else if (type >= 0 && type <= ARRAY_SIZE(hob_type)) desc = hob_type[type]; else
desc = "*Invalid Type*";
printf("%-19s | %-15d\n", desc, hdr->len);
desc = "*Invalid*";
printf("%-9s | %-4d\n", desc, hdr->len);
Looks like I should change %-4d to %-5d as on BayTrail some HOB length would be quite large.
hdr = get_next_hob(hdr); i++; }
--
Regards, Bin

Hi Bin,
On 10 October 2015 at 05:01, Bin Meng bmeng.cn@gmail.com wrote:
On Sat, Oct 10, 2015 at 4:47 PM, Bin Meng bmeng.cn@gmail.com wrote:
Compact hob command output, especially by making hob type string a little bit shorter so that we can leave room for future extension.
Signed-off-by: Bin Meng bmeng.cn@gmail.com
arch/x86/lib/cmd_hob.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-)
diff --git a/arch/x86/lib/cmd_hob.c b/arch/x86/lib/cmd_hob.c index 915746a..6ff321a 100644 --- a/arch/x86/lib/cmd_hob.c +++ b/arch/x86/lib/cmd_hob.c @@ -14,16 +14,16 @@ DECLARE_GLOBAL_DATA_PTR; static char *hob_type[] = { "reserved", "Hand-off",
"Memory Allocation",
"Resource Descriptor",
"GUID Extension",
"Firmware Volume",
"Mem Alloc",
"Res Desc",
"GUID Ext",
"FV", "CPU",
"Memory Pool",
"Mem Pool", "reserved",
"Firmware Volume 2",
"Load PEIM Unused",
"UEFI Capsule",
"FV2",
"Load PEIM",
"Capsule",
};
int do_hob(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) @@ -37,20 +37,20 @@ int do_hob(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
printf("HOB list address: 0x%08x\n\n", (unsigned int)hdr);
printf("No. | Address | Type | Length in Bytes\n");
printf("----|----------|---------------------|----------------\n");
printf("# | Address | Type | Len\n");
printf("---|----------|-----------|-----\n"); while (!end_of_hob(hdr)) {
printf("%-3d | %08x | ", i, (unsigned int)hdr);
printf("%-2d | %08x | ", i, (unsigned int)hdr); type = hdr->type; if (type == HOB_TYPE_UNUSED) desc = "*Unused*"; else if (type == HOB_TYPE_EOH)
desc = "*END OF HOB*";
desc = "*EOH*"; else if (type >= 0 && type <= ARRAY_SIZE(hob_type)) desc = hob_type[type]; else
desc = "*Invalid Type*";
printf("%-19s | %-15d\n", desc, hdr->len);
desc = "*Invalid*";
printf("%-9s | %-4d\n", desc, hdr->len);
Looks like I should change %-4d to %-5d as on BayTrail some HOB length would be quite large.
I think it is better to use hex. U-Boot uses hex for most output.
Regards, Simon

On 10 October 2015 at 02:47, Bin Meng bmeng.cn@gmail.com wrote:
Compact hob command output, especially by making hob type string a little bit shorter so that we can leave room for future extension.
Signed-off-by: Bin Meng bmeng.cn@gmail.com
arch/x86/lib/cmd_hob.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-)
Acked-by: Simon Glass sjg@chromium.org

On 18 October 2015 at 14:26, Simon Glass sjg@chromium.org wrote:
On 10 October 2015 at 02:47, Bin Meng bmeng.cn@gmail.com wrote:
Compact hob command output, especially by making hob type string a little bit shorter so that we can leave room for future extension.
Signed-off-by: Bin Meng bmeng.cn@gmail.com
arch/x86/lib/cmd_hob.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-)
Acked-by: Simon Glass sjg@chromium.org
Applied to u-boot-x86, thanks!
participants (2)
-
Bin Meng
-
Simon Glass