aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2021-01-24 10:06:08 -0700
committerBin Meng <bmeng.cn@gmail.com>2021-02-01 15:33:25 +0800
commit577c4ad0550825fa94c44ebca23523f05faecf17 (patch)
treef113b79fd4cc7c95366d8a3427f159319eb38f87
parentf82438948f649c33d775badd099869b0652ecc41 (diff)
downloadu-boot-577c4ad0550825fa94c44ebca23523f05faecf17.zip
u-boot-577c4ad0550825fa94c44ebca23523f05faecf17.tar.gz
u-boot-577c4ad0550825fa94c44ebca23523f05faecf17.tar.bz2
x86: zimage: Allow dumping the image from outside the module
At present it is possible to dump an image within the zimage command, but it is also useful to be able to dump it from elsewhere, for example in a loader that has special handling for the different zimage stages. Export this feature as a new function. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
-rw-r--r--arch/x86/include/asm/zimage.h10
-rw-r--r--arch/x86/lib/zimage.c23
2 files changed, 25 insertions, 8 deletions
diff --git a/arch/x86/include/asm/zimage.h b/arch/x86/include/asm/zimage.h
index 64c0e6e..6679767 100644
--- a/arch/x86/include/asm/zimage.h
+++ b/arch/x86/include/asm/zimage.h
@@ -62,6 +62,16 @@ struct boot_params *load_zimage(char *image, unsigned long kernel_size,
int setup_zimage(struct boot_params *setup_base, char *cmd_line, int auto_boot,
ulong initrd_addr, ulong initrd_size, ulong cmdline_force);
+/**
+ * zimage_dump() - Dump the metadata of a zimage
+ *
+ * This shows all available information in a zimage that has been loaded.
+ *
+ * @base_ptr: Pointer to the boot parameters, typically at address
+ * DEFAULT_SETUP_BASE
+ */
+void zimage_dump(struct boot_params *base_ptr);
+
void setup_video(struct screen_info *screen_info);
void setup_efi_info(struct efi_info *efi_info);
diff --git a/arch/x86/lib/zimage.c b/arch/x86/lib/zimage.c
index 708025b..3e9ee12 100644
--- a/arch/x86/lib/zimage.c
+++ b/arch/x86/lib/zimage.c
@@ -600,19 +600,12 @@ static void show_loader(struct setup_header *hdr)
printf("\n");
}
-int do_zboot_dump(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
+void zimage_dump(struct boot_params *base_ptr)
{
- struct boot_params *base_ptr = state.base_ptr;
struct setup_header *hdr;
const char *version;
int i;
- if (argc > 1)
- base_ptr = (void *)simple_strtoul(argv[1], NULL, 16);
- if (!base_ptr) {
- printf("No zboot setup_base\n");
- return CMD_RET_FAILURE;
- }
printf("Setup located at %p:\n\n", base_ptr);
print_num64("ACPI RSDP addr", base_ptr->acpi_rsdp_addr);
@@ -688,6 +681,20 @@ int do_zboot_dump(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
print_num("Handover offset", hdr->handover_offset);
if (get_boot_protocol(hdr, false) >= 0x215)
print_num("Kernel info offset", hdr->kernel_info_offset);
+}
+
+static int do_zboot_dump(struct cmd_tbl *cmdtp, int flag, int argc,
+ char *const argv[])
+{
+ struct boot_params *base_ptr = state.base_ptr;
+
+ if (argc > 1)
+ base_ptr = (void *)simple_strtoul(argv[1], NULL, 16);
+ if (!base_ptr) {
+ printf("No zboot setup_base\n");
+ return CMD_RET_FAILURE;
+ }
+ zimage_dump(base_ptr);
return 0;
}