From 869a0bc4762ca1dd8287c8ed939f39135c67f64b Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sun, 21 Feb 2016 18:44:55 +0100 Subject: [PATCH] coreboot --- grub-core/kern/arm/startup.S | 3 +++ include/grub/arm/coreboot/kernel.h | 2 +- include/grub/coreboot/lbio.h | 3 ++- include/grub/offsets.h | 4 +++- util/mkimage.c | 4 ++-- 5 files changed, 11 insertions(+), 5 deletions(-) diff --git a/grub-core/kern/arm/startup.S b/grub-core/kern/arm/startup.S index fd56b31a6..b14658bf4 100644 --- a/grub-core/kern/arm/startup.S +++ b/grub-core/kern/arm/startup.S @@ -128,6 +128,8 @@ reloc_done: str r1, EXT_C(grub_modbase) + /* Coreboot already places modules at right place. */ +#ifndef GRUB_MACHINE_COREBOOT add r1, r1, r2 add r0, r0, r2 sub r1, r1, #4 @@ -137,6 +139,7 @@ reloc_done: str r3, [r1], #-4 @ *dst-- = r3 subs r2, #4 @ remaining -= 4 bne 1b @ while remaining != 0 +#endif @ Since we _are_ the C run-time, we need to manually zero the BSS @ region before continuing diff --git a/include/grub/arm/coreboot/kernel.h b/include/grub/arm/coreboot/kernel.h index 9ff3d3be6..3b47a76f1 100644 --- a/include/grub/arm/coreboot/kernel.h +++ b/include/grub/arm/coreboot/kernel.h @@ -36,6 +36,6 @@ void grub_machine_timer_init (void); void grub_pl050_init (void); #endif /* ! ASM_FILE */ -#define GRUB_KERNEL_MACHINE_STACK_SIZE 0x40000 +#define GRUB_KERNEL_MACHINE_STACK_SIZE GRUB_KERNEL_ARM_STACK_SIZE #endif /* ! GRUB_KERNEL_MACHINE_HEADER */ diff --git a/include/grub/coreboot/lbio.h b/include/grub/coreboot/lbio.h index df40d2e56..e84862285 100644 --- a/include/grub/coreboot/lbio.h +++ b/include/grub/coreboot/lbio.h @@ -71,7 +71,8 @@ enum GRUB_LINUXBIOS_MEMBER_LINK = 0x11, GRUB_LINUXBIOS_MEMBER_FRAMEBUFFER = 0x12, GRUB_LINUXBIOS_MEMBER_TIMESTAMPS = 0x16, - GRUB_LINUXBIOS_MEMBER_CBMEMC = 0x17 + GRUB_LINUXBIOS_MEMBER_CBMEMC = 0x17, + GRUB_LINUXBIOS_MEMBER_DTB = 0x33, }; struct grub_linuxbios_table_framebuffer { diff --git a/include/grub/offsets.h b/include/grub/offsets.h index 47025403a..d9c938ddd 100644 --- a/include/grub/offsets.h +++ b/include/grub/offsets.h @@ -109,7 +109,6 @@ #define GRUB_KERNEL_I386_COREBOOT_MOD_GAP 0x0 #define GRUB_KERNEL_SPARC64_IEEE1275_MOD_GAP 0x0 #define GRUB_KERNEL_ARM_UBOOT_MOD_GAP 0x0 -#define GRUB_KERNEL_ARM_COREBOOT_MOD_GAP 0x0 #define GRUB_KERNEL_POWERPC_IEEE1275_MOD_ALIGN 0x1000 #define GRUB_KERNEL_SPARC64_IEEE1275_LOG_MOD_ALIGN 3 @@ -124,6 +123,9 @@ #define GRUB_KERNEL_ARM_COREBOOT_MOD_ALIGN 0x8 #define GRUB_KERNEL_ARM_COREBOOT_TOTAL_MODULE_SIZE 0x4 +#define GRUB_KERNEL_ARM_STACK_SIZE 0x40000 +#define GRUB_KERNEL_ARM_COREBOOT_MOD_GAP (GRUB_KERNEL_ARM_STACK_SIZE + 1024) + /* Minimal gap between _end and the start of the modules. It's a hack for PowerMac to prevent "CLAIM failed" error. The real fix is to rewrite grub-mkimage to generate valid ELF files. */ diff --git a/util/mkimage.c b/util/mkimage.c index 134347ab1..09ea20dde 100644 --- a/util/mkimage.c +++ b/util/mkimage.c @@ -548,8 +548,8 @@ static const struct grub_install_image_target_desc image_targets[] = .mod_gap = GRUB_KERNEL_ARM_COREBOOT_MOD_GAP, .mod_align = GRUB_KERNEL_ARM_COREBOOT_MOD_ALIGN, .link_align = 4, - /* FIXME: Remove once coreboot supports load to any address. */ - .link_addr = 0x60100000, + /* FIXME: Kept only for comaptibility with existing coreboot installs. */ + .link_addr = 0x43000000, }, { .dirname = "arm-efi", -- 2.47.2