Bin Meng | 90699df | 2014-12-12 21:05:32 +0800 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (C) 2014, Bin Meng <bmeng.cn@gmail.com> |
| 3 | * |
| 4 | * SPDX-License-Identifier: GPL-2.0+ |
| 5 | */ |
| 6 | |
| 7 | #include <common.h> |
| 8 | #include <command.h> |
| 9 | #include <linux/compiler.h> |
| 10 | #include <asm/arch/fsp/fsp_support.h> |
| 11 | |
| 12 | DECLARE_GLOBAL_DATA_PTR; |
| 13 | |
| 14 | static char *hob_type[] = { |
| 15 | "reserved", |
| 16 | "Hand-off", |
| 17 | "Memory Allocation", |
| 18 | "Resource Descriptor", |
| 19 | "GUID Extension", |
Bin Meng | db60d86 | 2014-12-17 15:50:49 +0800 | [diff] [blame] | 20 | "Firmware Volume", |
Bin Meng | 90699df | 2014-12-12 21:05:32 +0800 | [diff] [blame] | 21 | "CPU", |
| 22 | "Memory Pool", |
| 23 | "reserved", |
Bin Meng | db60d86 | 2014-12-17 15:50:49 +0800 | [diff] [blame] | 24 | "Firmware Volume 2", |
Bin Meng | 90699df | 2014-12-12 21:05:32 +0800 | [diff] [blame] | 25 | "Load PEIM Unused", |
| 26 | "UEFI Capsule", |
| 27 | }; |
| 28 | |
| 29 | int do_hob(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |
| 30 | { |
Bin Meng | 2b21598 | 2014-12-30 16:02:05 +0800 | [diff] [blame] | 31 | const struct hob_header *hdr; |
Bin Meng | 90699df | 2014-12-12 21:05:32 +0800 | [diff] [blame] | 32 | u16 type; |
| 33 | char *desc; |
| 34 | int i = 0; |
| 35 | |
Bin Meng | 2b21598 | 2014-12-30 16:02:05 +0800 | [diff] [blame] | 36 | hdr = gd->arch.hob_list; |
Bin Meng | 90699df | 2014-12-12 21:05:32 +0800 | [diff] [blame] | 37 | |
Bin Meng | 2b21598 | 2014-12-30 16:02:05 +0800 | [diff] [blame] | 38 | printf("HOB list address: 0x%08x\n\n", (unsigned int)hdr); |
Bin Meng | 90699df | 2014-12-12 21:05:32 +0800 | [diff] [blame] | 39 | |
| 40 | printf("No. | Address | Type | Length in Bytes\n"); |
| 41 | printf("----|----------|---------------------|----------------\n"); |
Bin Meng | 2b21598 | 2014-12-30 16:02:05 +0800 | [diff] [blame] | 42 | while (!end_of_hob(hdr)) { |
| 43 | printf("%-3d | %08x | ", i, (unsigned int)hdr); |
| 44 | type = get_hob_type(hdr); |
Bin Meng | 90699df | 2014-12-12 21:05:32 +0800 | [diff] [blame] | 45 | if (type == HOB_TYPE_UNUSED) |
| 46 | desc = "*Unused*"; |
| 47 | else if (type == HOB_TYPE_EOH) |
Bin Meng | db60d86 | 2014-12-17 15:50:49 +0800 | [diff] [blame] | 48 | desc = "*END OF HOB*"; |
Bin Meng | 90699df | 2014-12-12 21:05:32 +0800 | [diff] [blame] | 49 | else if (type >= 0 && type <= ARRAY_SIZE(hob_type)) |
| 50 | desc = hob_type[type]; |
| 51 | else |
Bin Meng | db60d86 | 2014-12-17 15:50:49 +0800 | [diff] [blame] | 52 | desc = "*Invalid Type*"; |
Bin Meng | 2b21598 | 2014-12-30 16:02:05 +0800 | [diff] [blame] | 53 | printf("%-19s | %-15d\n", desc, get_hob_length(hdr)); |
| 54 | hdr = get_next_hob(hdr); |
Bin Meng | 90699df | 2014-12-12 21:05:32 +0800 | [diff] [blame] | 55 | i++; |
| 56 | } |
| 57 | |
| 58 | return 0; |
| 59 | } |
| 60 | |
Bin Meng | 90699df | 2014-12-12 21:05:32 +0800 | [diff] [blame] | 61 | U_BOOT_CMD( |
| 62 | hob, 1, 1, do_hob, |
Bin Meng | db60d86 | 2014-12-17 15:50:49 +0800 | [diff] [blame] | 63 | "print Firmware Support Package (FSP) Hand-Off Block information", |
Bin Meng | 90699df | 2014-12-12 21:05:32 +0800 | [diff] [blame] | 64 | "" |
| 65 | ); |