Hi Bin, On 9 December 2014 at 23:23, Bin Meng <bmeng...@gmail.com> wrote: > Hi Simon, > > On Wed, Dec 10, 2014 at 2:04 PM, Simon Glass <s...@chromium.org> wrote: >> On 9 December 2014 at 07:50, Bin Meng <bmeng...@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...@gmail.com> >>> >> >> Acked-by: Simon Glass <s...@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...@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 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot