Message ID | 1418136613-4909-15-git-send-email-bmeng.cn@gmail.com |
---|---|
State | Superseded |
Delegated to: | Simon Glass |
Headers | show |
On 9 December 2014 at 07:50, Bin Meng <bmeng.cn@gmail.com> wrote: > FSP builds a series of data structures called the Hand-Off-Blocks > (HOBs) as it progresses through initializing the silicon. These data > structures conform to the HOB format as described in the Platform > Initialization (PI) specification Volume 3 Shared Architectual > Elements specification, which is part of the UEFI specification. > > Create a simple command to parse the HOB list to display the HOB > address, type and length in bytes. > > Signed-off-by: Bin Meng <bmeng.cn@gmail.com> > Acked-by: Simon Glass <sjg@chromium.org> > --- > > Changes in v2: > - Use ARRAY_SIZE to indicate the maximum number of HOB tyeps > - Remove some unnecessary spaces in the do_hob command output > > arch/x86/lib/Makefile | 1 + > arch/x86/lib/cmd_hob.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 68 insertions(+) > create mode 100644 arch/x86/lib/cmd_hob.c > > diff --git a/arch/x86/lib/Makefile b/arch/x86/lib/Makefile > index 55de788..73262d7 100644 > --- a/arch/x86/lib/Makefile > +++ b/arch/x86/lib/Makefile > @@ -10,6 +10,7 @@ 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-y += gcc.o > obj-y += init_helpers.o > obj-y += interrupts.o > diff --git a/arch/x86/lib/cmd_hob.c b/arch/x86/lib/cmd_hob.c > new file mode 100644 > index 0000000..7dfa1a1 > --- /dev/null > +++ b/arch/x86/lib/cmd_hob.c > @@ -0,0 +1,67 @@ > +/* > + * Copyright (C) 2014, Bin Meng <bmeng.cn@gmail.com> > + * > + * SPDX-License-Identifier: GPL-2.0+ > + */ > + > +#include <common.h> > +#include <command.h> > +#include <linux/compiler.h> > +#include <asm/arch/fsp/fsp_support.h> > + > +DECLARE_GLOBAL_DATA_PTR; > + > +static char *hob_type[] = { > + "reserved", > + "Hand-off", > + "Memory Allocation", > + "Resource Descriptor", > + "GUID Extension", > + "Firmware Volumn", > + "CPU", > + "Memory Pool", > + "reserved", > + "Firmware Volumn 2", > + "Load PEIM Unused", > + "UEFI Capsule", > +}; > + > +int do_hob(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) > +{ > + EFI_PEI_HOB_POINTERS hob; > + UINT16 type; > + char *desc; > + int i = 0; > + > + hob.raw = (UINT8 *)gd->arch.hob_list; > + > + printf("HOB list address: 0x%08x\n\n", (unsigned int)hob.raw); > + > + printf("No. | Address | Type | Length in Bytes\n"); > + printf("----|----------|---------------------|----------------\n"); > + while (!END_OF_HOB(hob)) { > + printf("%-3d | %08x | ", i, (unsigned int)hob.raw); > + type = hob.hdr->type; > + if (type == HOB_TYPE_UNUSED) > + desc = "*Unused*"; > + else if (type == HOB_TYPE_EOH) > + desc = "**END OF HOB**"; > + else if (type >= 0 && type <= ARRAY_SIZE(hob_type)) > + desc = hob_type[type]; > + else > + desc = "!!!Invalid Type!!!"; > + printf("%-19s | %-15d\n", desc, hob.hdr->len); > + hob.raw = GET_NEXT_HOB(hob); > + i++; > + } > + > + return 0; > +} > + > +/* -------------------------------------------------------------------- */ BTW we don't normally put these sorts of things in U-Boot > + > +U_BOOT_CMD( > + hob, 1, 1, do_hob, > + "print FSP Hand-Off Block information", > + "" > +); > -- > 1.8.2.1 >
Hi Simon, On Wed, Dec 10, 2014 at 2:04 PM, Simon Glass <sjg@chromium.org> wrote: > On 9 December 2014 at 07:50, Bin Meng <bmeng.cn@gmail.com> wrote: >> FSP builds a series of data structures called the Hand-Off-Blocks >> (HOBs) as it progresses through initializing the silicon. These data >> structures conform to the HOB format as described in the Platform >> Initialization (PI) specification Volume 3 Shared Architectual >> Elements specification, which is part of the UEFI specification. >> >> Create a simple command to parse the HOB list to display the HOB >> address, type and length in bytes. >> >> Signed-off-by: Bin Meng <bmeng.cn@gmail.com> >> > > Acked-by: Simon Glass <sjg@chromium.org> > >> --- >> >> Changes in v2: >> - Use ARRAY_SIZE to indicate the maximum number of HOB tyeps >> - Remove some unnecessary spaces in the do_hob command output >> >> arch/x86/lib/Makefile | 1 + >> arch/x86/lib/cmd_hob.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++ >> 2 files changed, 68 insertions(+) >> create mode 100644 arch/x86/lib/cmd_hob.c >> >> diff --git a/arch/x86/lib/Makefile b/arch/x86/lib/Makefile >> index 55de788..73262d7 100644 >> --- a/arch/x86/lib/Makefile >> +++ b/arch/x86/lib/Makefile >> @@ -10,6 +10,7 @@ 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-y += gcc.o >> obj-y += init_helpers.o >> obj-y += interrupts.o >> diff --git a/arch/x86/lib/cmd_hob.c b/arch/x86/lib/cmd_hob.c >> new file mode 100644 >> index 0000000..7dfa1a1 >> --- /dev/null >> +++ b/arch/x86/lib/cmd_hob.c >> @@ -0,0 +1,67 @@ >> +/* >> + * Copyright (C) 2014, Bin Meng <bmeng.cn@gmail.com> >> + * >> + * SPDX-License-Identifier: GPL-2.0+ >> + */ >> + >> +#include <common.h> >> +#include <command.h> >> +#include <linux/compiler.h> >> +#include <asm/arch/fsp/fsp_support.h> >> + >> +DECLARE_GLOBAL_DATA_PTR; >> + >> +static char *hob_type[] = { >> + "reserved", >> + "Hand-off", >> + "Memory Allocation", >> + "Resource Descriptor", >> + "GUID Extension", >> + "Firmware Volumn", >> + "CPU", >> + "Memory Pool", >> + "reserved", >> + "Firmware Volumn 2", >> + "Load PEIM Unused", >> + "UEFI Capsule", >> +}; >> + >> +int do_hob(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) >> +{ >> + EFI_PEI_HOB_POINTERS hob; >> + UINT16 type; >> + char *desc; >> + int i = 0; >> + >> + hob.raw = (UINT8 *)gd->arch.hob_list; >> + >> + printf("HOB list address: 0x%08x\n\n", (unsigned int)hob.raw); >> + >> + printf("No. | Address | Type | Length in Bytes\n"); >> + printf("----|----------|---------------------|----------------\n"); >> + while (!END_OF_HOB(hob)) { >> + printf("%-3d | %08x | ", i, (unsigned int)hob.raw); >> + type = hob.hdr->type; >> + if (type == HOB_TYPE_UNUSED) >> + desc = "*Unused*"; >> + else if (type == HOB_TYPE_EOH) >> + desc = "**END OF HOB**"; >> + else if (type >= 0 && type <= ARRAY_SIZE(hob_type)) >> + desc = hob_type[type]; >> + else >> + desc = "!!!Invalid Type!!!"; >> + printf("%-19s | %-15d\n", desc, hob.hdr->len); >> + hob.raw = GET_NEXT_HOB(hob); >> + i++; >> + } >> + >> + return 0; >> +} >> + >> +/* -------------------------------------------------------------------- */ > > BTW we don't normally put these sorts of things in U-Boot > Thanks, and let me know if you want me to drop this patch. Regards, Bin
Hi Bin, On 9 December 2014 at 23:23, Bin Meng <bmeng.cn@gmail.com> wrote: > Hi Simon, > > On Wed, Dec 10, 2014 at 2:04 PM, Simon Glass <sjg@chromium.org> wrote: >> On 9 December 2014 at 07:50, Bin Meng <bmeng.cn@gmail.com> wrote: >>> FSP builds a series of data structures called the Hand-Off-Blocks >>> (HOBs) as it progresses through initializing the silicon. These data >>> structures conform to the HOB format as described in the Platform >>> Initialization (PI) specification Volume 3 Shared Architectual >>> Elements specification, which is part of the UEFI specification. >>> >>> Create a simple command to parse the HOB list to display the HOB >>> address, type and length in bytes. >>> >>> Signed-off-by: Bin Meng <bmeng.cn@gmail.com> >>> >> >> Acked-by: Simon Glass <sjg@chromium.org> >> >>> --- >>> >>> Changes in v2: >>> - Use ARRAY_SIZE to indicate the maximum number of HOB tyeps >>> - Remove some unnecessary spaces in the do_hob command output >>> >>> arch/x86/lib/Makefile | 1 + >>> arch/x86/lib/cmd_hob.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++ >>> 2 files changed, 68 insertions(+) >>> create mode 100644 arch/x86/lib/cmd_hob.c >>> >>> diff --git a/arch/x86/lib/Makefile b/arch/x86/lib/Makefile >>> index 55de788..73262d7 100644 >>> --- a/arch/x86/lib/Makefile >>> +++ b/arch/x86/lib/Makefile >>> @@ -10,6 +10,7 @@ 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-y += gcc.o >>> obj-y += init_helpers.o >>> obj-y += interrupts.o >>> diff --git a/arch/x86/lib/cmd_hob.c b/arch/x86/lib/cmd_hob.c >>> new file mode 100644 >>> index 0000000..7dfa1a1 >>> --- /dev/null >>> +++ b/arch/x86/lib/cmd_hob.c >>> @@ -0,0 +1,67 @@ >>> +/* >>> + * Copyright (C) 2014, Bin Meng <bmeng.cn@gmail.com> >>> + * >>> + * SPDX-License-Identifier: GPL-2.0+ >>> + */ >>> + >>> +#include <common.h> >>> +#include <command.h> >>> +#include <linux/compiler.h> >>> +#include <asm/arch/fsp/fsp_support.h> >>> + >>> +DECLARE_GLOBAL_DATA_PTR; >>> + >>> +static char *hob_type[] = { >>> + "reserved", >>> + "Hand-off", >>> + "Memory Allocation", >>> + "Resource Descriptor", >>> + "GUID Extension", >>> + "Firmware Volumn", >>> + "CPU", >>> + "Memory Pool", >>> + "reserved", >>> + "Firmware Volumn 2", >>> + "Load PEIM Unused", >>> + "UEFI Capsule", >>> +}; >>> + >>> +int do_hob(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) >>> +{ >>> + EFI_PEI_HOB_POINTERS hob; >>> + UINT16 type; >>> + char *desc; >>> + int i = 0; >>> + >>> + hob.raw = (UINT8 *)gd->arch.hob_list; >>> + >>> + printf("HOB list address: 0x%08x\n\n", (unsigned int)hob.raw); >>> + >>> + printf("No. | Address | Type | Length in Bytes\n"); >>> + printf("----|----------|---------------------|----------------\n"); >>> + while (!END_OF_HOB(hob)) { >>> + printf("%-3d | %08x | ", i, (unsigned int)hob.raw); >>> + type = hob.hdr->type; >>> + if (type == HOB_TYPE_UNUSED) >>> + desc = "*Unused*"; >>> + else if (type == HOB_TYPE_EOH) >>> + desc = "**END OF HOB**"; >>> + else if (type >= 0 && type <= ARRAY_SIZE(hob_type)) >>> + desc = hob_type[type]; >>> + else >>> + desc = "!!!Invalid Type!!!"; >>> + printf("%-19s | %-15d\n", desc, hob.hdr->len); >>> + hob.raw = GET_NEXT_HOB(hob); >>> + i++; >>> + } >>> + >>> + return 0; >>> +} >>> + >>> +/* -------------------------------------------------------------------- */ >> >> BTW we don't normally put these sorts of things in U-Boot >> > > Thanks, and let me know if you want me to drop this patch. No, I mean the lines in comments as immediately above. Sorry I was vague. These sorts of commands are very useful for debugging. If we add more we might want to consider an arch-specific command with a 'hob' sub-command, but for now I think this works well. Regards, Simon
diff --git a/arch/x86/lib/Makefile b/arch/x86/lib/Makefile index 55de788..73262d7 100644 --- a/arch/x86/lib/Makefile +++ b/arch/x86/lib/Makefile @@ -10,6 +10,7 @@ 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-y += gcc.o obj-y += init_helpers.o obj-y += interrupts.o diff --git a/arch/x86/lib/cmd_hob.c b/arch/x86/lib/cmd_hob.c new file mode 100644 index 0000000..7dfa1a1 --- /dev/null +++ b/arch/x86/lib/cmd_hob.c @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2014, Bin Meng <bmeng.cn@gmail.com> + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <command.h> +#include <linux/compiler.h> +#include <asm/arch/fsp/fsp_support.h> + +DECLARE_GLOBAL_DATA_PTR; + +static char *hob_type[] = { + "reserved", + "Hand-off", + "Memory Allocation", + "Resource Descriptor", + "GUID Extension", + "Firmware Volumn", + "CPU", + "Memory Pool", + "reserved", + "Firmware Volumn 2", + "Load PEIM Unused", + "UEFI Capsule", +}; + +int do_hob(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +{ + EFI_PEI_HOB_POINTERS hob; + UINT16 type; + char *desc; + int i = 0; + + hob.raw = (UINT8 *)gd->arch.hob_list; + + printf("HOB list address: 0x%08x\n\n", (unsigned int)hob.raw); + + printf("No. | Address | Type | Length in Bytes\n"); + printf("----|----------|---------------------|----------------\n"); + while (!END_OF_HOB(hob)) { + printf("%-3d | %08x | ", i, (unsigned int)hob.raw); + type = hob.hdr->type; + if (type == HOB_TYPE_UNUSED) + desc = "*Unused*"; + else if (type == HOB_TYPE_EOH) + desc = "**END OF HOB**"; + else if (type >= 0 && type <= ARRAY_SIZE(hob_type)) + desc = hob_type[type]; + else + desc = "!!!Invalid Type!!!"; + printf("%-19s | %-15d\n", desc, hob.hdr->len); + hob.raw = GET_NEXT_HOB(hob); + i++; + } + + return 0; +} + +/* -------------------------------------------------------------------- */ + +U_BOOT_CMD( + hob, 1, 1, do_hob, + "print FSP Hand-Off Block information", + "" +);
FSP builds a series of data structures called the Hand-Off-Blocks (HOBs) as it progresses through initializing the silicon. These data structures conform to the HOB format as described in the Platform Initialization (PI) specification Volume 3 Shared Architectual Elements specification, which is part of the UEFI specification. Create a simple command to parse the HOB list to display the HOB address, type and length in bytes. Signed-off-by: Bin Meng <bmeng.cn@gmail.com> --- Changes in v2: - Use ARRAY_SIZE to indicate the maximum number of HOB tyeps - Remove some unnecessary spaces in the do_hob command output arch/x86/lib/Makefile | 1 + arch/x86/lib/cmd_hob.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 arch/x86/lib/cmd_hob.c