mkelfImage: set kernel_alignment so 2.6.31+ work
authorEric W. Biederman <ebiederm@xmission.com>
Tue, 5 Oct 2010 18:22:00 +0000 (18:22 +0000)
committerPeter Stuge <peter@stuge.se>
Tue, 5 Oct 2010 18:22:00 +0000 (18:22 +0000)
The kernel initialization code as of boot protocol 2.10 is now reading the
kernel_alignment field.  With the field left unset the kernel attempts to
align things to 4GB which is unlikely to work, so change the alignment to
the kernel's normal value of 16MB so newer kernels processed by mkelfImage
will boot.

Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Acked-by: Stefan Reinauer <stepan@coresystems.de>
Acked-by: Peter Stuge <peter@stuge.se>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@5914 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1

util/mkelfImage/linux-i386/convert_params.c

index 819f797390c9acd84b79c6f58096929f09377abb..f39e8e027c3b53c903a8b55c5cca28ea60215670 100644 (file)
@@ -178,7 +178,10 @@ struct parameters {
         uint32_t cmd_line_ptr;                  /* 0x228 */
         /* 2.03+ */
         uint32_t initrd_addr_max;               /* 0x22c */
-       uint8_t  reserved15[0x2d0 - 0x230];     /* 0x230 */
+       /* 2.05+ */
+       uint32_t kernel_alignment;              /* 0x230 */
+       uint8_t  relocateable_kernel;           /* 0x234 */
+       uint8_t  reserved15[0x2d0 - 0x235];     /* 0x235 */
 
        struct e820entry e820_map[E820MAX];     /* 0x2d0 */
        uint8_t  reserved16[688];               /* 0x550 */
@@ -1512,6 +1515,9 @@ void initialize_linux_params(struct param_info *info)
        /* No loader flags */
        info->real_mode->loader_flags = 0;
 
+       /* Set it to 16M, instead of 0 which means 4G */
+       info->real_mode->kernel_alignment = 16*1024*1024;
+
        /* Ramdisk address and size ... */
        info->real_mode->initrd_start = 0;
        info->real_mode->initrd_size = 0;