[coreboot-gerrit] New patch to review for coreboot: cbfstool: set init_size for linux payloads.
Ronald G. Minnich (rminnich@gmail.com)
gerrit at coreboot.org
Wed Sep 28 19:46:07 CEST 2016
Ronald G. Minnich (rminnich at gmail.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/16781
-gerrit
commit 055f7b168956f9717c263da977ecffecc030fa1b
Author: Ronald G. Minnich <rminnich at google.com>
Date: Wed Sep 28 10:43:12 2016 -0700
cbfstool: set init_size for linux payloads.
We were not setting the init_size for linux payloads.
A proper value of init_size is required if the kernel
is x86_64.
This is tested in qemu and fixes the observed problem
that 974f221c84b05b1dc2f5ea50dc16d2a9d1e95eda and later would not
boot, and would in fact fail in head_64.S.
Change-Id: I254c13d16b1e014a6f1d4fd7c39b1cfe005cd9b0
Signed-off-by: Ronald G. Minnich <rminnich at google.com>
---
util/cbfstool/cbfs-payload-linux.c | 7 +++++++
util/cbfstool/linux.h | 7 +++++--
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/util/cbfstool/cbfs-payload-linux.c b/util/cbfstool/cbfs-payload-linux.c
index 03a41cd..d58d3d7 100644
--- a/util/cbfstool/cbfs-payload-linux.c
+++ b/util/cbfstool/cbfs-payload-linux.c
@@ -220,14 +220,19 @@ int parse_bzImage_to_payload(const struct buffer *input,
if (hdr->setup_sects != 0) {
setup_size = (hdr->setup_sects + 1) * 512;
+ } else {
+ WARN("hdr->setup_sects is 0, which could cause boot problems.\n");
}
/* Setup parameter block. Imitate FILO. */
struct linux_params params;
memset(¶ms, 0, sizeof(struct linux_params));
+
params.mount_root_rdonly = hdr->root_flags;
params.orig_root_dev = hdr->root_dev;
+ params.init_size = hdr->init_size;
+
/* Sensible video defaults. Might be overridden on runtime by coreboot tables. */
params.orig_video_mode = 3;
params.orig_video_cols = 80;
@@ -262,6 +267,8 @@ int parse_bzImage_to_payload(const struct buffer *input,
* so if possible (relocatable kernel) use that to
* avoid a trampoline copy. */
kernel_base = ALIGN(16*1024*1024, params.kernel_alignment);
+ if (hdr->init_size == 0)
+ ERROR("init_size 0 for relocatable kernel\n");
}
}
diff --git a/util/cbfstool/linux.h b/util/cbfstool/linux.h
index b96f447..d42737d 100644
--- a/util/cbfstool/linux.h
+++ b/util/cbfstool/linux.h
@@ -139,7 +139,8 @@ struct linux_params {
u32 alt_mem_k; /* 0x1e0 */
u8 reserved5[4]; /* 0x1e4 */
u8 e820_map_nr; /* 0x1e8 */
- u8 reserved6[9]; /* 0x1e9 */
+ u8 reserved6[8]; /* 0x1e9 */
+ u8 setup_hdr; /* 0x1f1 Where Linux finds the setup header */
u16 mount_root_rdonly; /* 0x1f2 */
u8 reserved7[4]; /* 0x1f4 */
u16 ramdisk_flags; /* 0x1f8 */
@@ -170,7 +171,9 @@ struct linux_params {
u32 initrd_addr_max; /* 0x22c */
u32 kernel_alignment; /* 0x230 */
u8 relocatable_kernel; /* 0x234 */
- u8 reserved13[155]; /* 0x22c */
+ u8 reserved13[0x2b]; /* 0x235 */
+ u32 init_size; /* 0x260 */
+ u8 reserved14[0x6c]; /* 0x264 */
struct e820entry e820_map[E820MAX]; /* 0x2d0 */
u8 reserved16[688]; /* 0x550 */
#define COMMAND_LINE_SIZE 256
More information about the coreboot-gerrit
mailing list