x86: Allow showing details about a HOB entry
Some HOBs include information that can be decoded. Add a -v option to the hob command, to allow this to be displayed. Add the ability to decode a resource descriptor. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
		
							parent
							
								
									10536ceae9
								
							
						
					
					
						commit
						51af144eb7
					
				|  | @ -27,6 +27,16 @@ static char *hob_type[] = { | ||||||
| 	"Capsule", | 	"Capsule", | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | static char *res_type[] = { | ||||||
|  | 	"System", | ||||||
|  | 	"Memory-mapped I/O", | ||||||
|  | 	"I/O", | ||||||
|  | 	"Firmware device", | ||||||
|  | 	"Memory-mapped I/O port", | ||||||
|  | 	"Reserved", | ||||||
|  | 	"I/O reserved", | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| static struct guid_name { | static struct guid_name { | ||||||
| 	efi_guid_t guid; | 	efi_guid_t guid; | ||||||
| 	const char *name; | 	const char *name; | ||||||
|  | @ -58,6 +68,26 @@ static const char *guid_to_name(const efi_guid_t *guid) | ||||||
| 	return NULL; | 	return NULL; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static void show_hob_details(const struct hob_header *hdr) | ||||||
|  | { | ||||||
|  | 	const void *ptr = hdr; | ||||||
|  | 
 | ||||||
|  | 	switch (hdr->type) { | ||||||
|  | 	case HOB_TYPE_RES_DESC: { | ||||||
|  | 		const struct hob_res_desc *res = ptr; | ||||||
|  | 		const char *typename; | ||||||
|  | 
 | ||||||
|  | 		typename = res->type > 0 && res->type <= RES_MAX_MEM_TYPE ? | ||||||
|  | 			res_type[res->type] : "unknown"; | ||||||
|  | 
 | ||||||
|  | 		printf("     base = %08llx, len = %08llx, end = %08llx, type = %d (%s)\n\n", | ||||||
|  | 		       res->phys_start, res->len, res->phys_start + res->len, | ||||||
|  | 		       res->type, typename); | ||||||
|  | 		break; | ||||||
|  | 	} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| static int do_hob(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) | static int do_hob(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) | ||||||
| { | { | ||||||
| 	const struct hob_header *hdr; | 	const struct hob_header *hdr; | ||||||
|  | @ -66,12 +96,20 @@ static int do_hob(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) | ||||||
| 	int i = 0; | 	int i = 0; | ||||||
| 	efi_guid_t *guid; | 	efi_guid_t *guid; | ||||||
| 	char uuid[UUID_STR_LEN + 1]; | 	char uuid[UUID_STR_LEN + 1]; | ||||||
|  | 	bool verbose = false; | ||||||
| 	int seq = -1;	/* Show all by default */ | 	int seq = -1;	/* Show all by default */ | ||||||
| 
 | 
 | ||||||
| 	argc--; | 	argc--; | ||||||
| 	argv++; | 	argv++; | ||||||
|  | 	if (argc) { | ||||||
|  | 		if (!strcmp("-v", *argv)) { | ||||||
|  | 			verbose = true; | ||||||
|  | 			argc--; | ||||||
|  | 			argv++; | ||||||
|  | 		} | ||||||
| 		if (argc) | 		if (argc) | ||||||
| 			seq = simple_strtol(*argv, NULL, 16); | 			seq = simple_strtol(*argv, NULL, 16); | ||||||
|  | 	} | ||||||
| 	hdr = gd->arch.hob_list; | 	hdr = gd->arch.hob_list; | ||||||
| 
 | 
 | ||||||
| 	printf("HOB list address: 0x%08x\n\n", (unsigned int)hdr); | 	printf("HOB list address: 0x%08x\n\n", (unsigned int)hdr); | ||||||
|  | @ -111,13 +149,16 @@ static int do_hob(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) | ||||||
| 			printf("%36s", "Not Available"); | 			printf("%36s", "Not Available"); | ||||||
| 		} | 		} | ||||||
| 		printf("\n"); | 		printf("\n"); | ||||||
|  | 		if (verbose) | ||||||
|  | 			show_hob_details(hdr); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| U_BOOT_CMD(hob, 2, 1, do_hob, | U_BOOT_CMD(hob, 3, 1, do_hob, | ||||||
| 	   "[seq]  Print Hand-Off Block (HOB) information" | 	   "[-v] [seq]  Print Hand-Off Block (HOB) information" | ||||||
|  | 	   "   -v  - Show detailed HOB information where available" | ||||||
| 	   "   seq - Record # to show (all by default)", | 	   "   seq - Record # to show (all by default)", | ||||||
| 	   "" | 	   "" | ||||||
| ); | ); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue