mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-19 05:31:32 +00:00
x86: Add a simple command to show FSP HOB 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> Acked-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
bceb9f0fc8
commit
ba7b38a529
2 changed files with 68 additions and 0 deletions
|
@ -10,6 +10,7 @@ obj-y += bios_asm.o
|
||||||
obj-y += bios_interrupts.o
|
obj-y += bios_interrupts.o
|
||||||
obj-$(CONFIG_CMD_BOOTM) += bootm.o
|
obj-$(CONFIG_CMD_BOOTM) += bootm.o
|
||||||
obj-y += cmd_boot.o
|
obj-y += cmd_boot.o
|
||||||
|
obj-$(CONFIG_HAVE_FSP) += cmd_hob.o
|
||||||
obj-y += gcc.o
|
obj-y += gcc.o
|
||||||
obj-y += init_helpers.o
|
obj-y += init_helpers.o
|
||||||
obj-y += interrupts.o
|
obj-y += interrupts.o
|
||||||
|
|
67
arch/x86/lib/cmd_hob.c
Normal file
67
arch/x86/lib/cmd_hob.c
Normal file
|
@ -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[])
|
||||||
|
{
|
||||||
|
union hob_pointers_t hob;
|
||||||
|
u16 type;
|
||||||
|
char *desc;
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
hob.raw = (u8 *)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",
|
||||||
|
""
|
||||||
|
);
|
Loading…
Add table
Reference in a new issue