Commit 0583b19e authored by Leif Lindholm's avatar Leif Lindholm Committed by Colin Watson

arm: switch linux loader to linux_arm_kernel_header struct

Use kernel header struct and magic definition to align (and coexist) with
i386/arm64 ports.
Signed-off-by: 's avatarLeif Lindholm <leif.lindholm@linaro.org>
Reviewed-by: 's avatarDaniel Kiper <daniel.kiper@oracle.com>

Origin: upstream, https://git.savannah.gnu.org/cgit/grub.git/commit/?id=cda033298680b6984044563b2ef6374a725b8aac
Bug-Debian: https://bugs.debian.org/907596
Bug-Debian: https://bugs.debian.org/909420
Last-Update: 2018-12-06

Patch-Name: arm-switch-linux-loader-to-linux_arm_kernel_header.patch
parent 3395876d
......@@ -46,9 +46,6 @@ static void *fdt_addr;
typedef void (*kernel_entry_t) (int, unsigned long, void *);
#define LINUX_ZIMAGE_OFFSET 0x24
#define LINUX_ZIMAGE_MAGIC 0x016f2818
#define LINUX_PHYS_OFFSET (0x00008000)
#define LINUX_INITRD_PHYS_OFFSET (LINUX_PHYS_OFFSET + 0x02000000)
#define LINUX_FDT_PHYS_OFFSET (LINUX_INITRD_PHYS_OFFSET - 0x10000)
......@@ -296,6 +293,7 @@ linux_boot (void)
static grub_err_t
linux_load (const char *filename, grub_file_t file)
{
struct linux_arm_kernel_header *lh;
int size;
size = grub_file_size (file);
......@@ -318,9 +316,10 @@ linux_load (const char *filename, grub_file_t file)
return grub_errno;
}
if (size > LINUX_ZIMAGE_OFFSET + 4
&& *(grub_uint32_t *) (linux_addr + LINUX_ZIMAGE_OFFSET)
== LINUX_ZIMAGE_MAGIC)
lh = (void *) linux_addr;
if ((grub_size_t) size > sizeof (*lh) &&
lh->magic == GRUB_LINUX_ARM_MAGIC_SIGNATURE)
;
else if (size > 0x8000 && *(grub_uint32_t *) (linux_addr) == 0xea000006
&& machine_type == GRUB_ARM_MACHINE_TYPE_RASPBERRY_PI)
......
......@@ -20,11 +20,20 @@
#ifndef GRUB_ARM_LINUX_HEADER
#define GRUB_ARM_LINUX_HEADER 1
#define LINUX_ZIMAGE_OFFSET 0x24
#define LINUX_ZIMAGE_MAGIC 0x016f2818
#include "system.h"
#define GRUB_LINUX_ARM_MAGIC_SIGNATURE 0x016f2818
struct linux_arm_kernel_header {
grub_uint32_t code0;
grub_uint32_t reserved1[8];
grub_uint32_t magic;
grub_uint32_t start; /* _start */
grub_uint32_t end; /* _edata */
grub_uint32_t reserved2[4];
grub_uint32_t hdr_offset;
};
#if defined GRUB_MACHINE_UBOOT
# include <grub/uboot/uboot.h>
# define LINUX_ADDRESS (start_of_ram + 0x8000)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment