]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
coreboot
authorVladimir Serbinenko <phcoder@gmail.com>
Sun, 21 Feb 2016 19:28:10 +0000 (20:28 +0100)
committerVladimir Serbinenko <phcoder@gmail.com>
Sun, 21 Feb 2016 19:28:10 +0000 (20:28 +0100)
grub-core/Makefile.am
grub-core/Makefile.core.def
grub-core/kern/arm/coreboot/init.c
include/grub/arm/coreboot/kernel.h
include/grub/arm/linux.h

index 54180a4c9a44d6c838552079d5fe45ea0713d4c0..a7722290f2d64186da59547fca6e52d16b055c17 100644 (file)
@@ -246,6 +246,9 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video_fb.h
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/gfxterm.h
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/font.h
 KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bufio.h
+KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/fdt.h
+KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/arm/coreboot/kernel.h
+KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/fdtbus.h
 endif
 
 if COND_arm_efi
index dc2ebb8bbcccdc6691e59972796514fe4e513910..3838c448137af340a1707462afb9b4ac905b0825 100644 (file)
@@ -1675,7 +1675,7 @@ module = {
   arm64 = loader/arm64/xen_boot.c;
   enable = arm64;
 };
-/*
+
 module = {
   name = linux;
   x86 = loader/i386/linux.c;
@@ -1691,7 +1691,7 @@ module = {
   common = lib/cmdline.c;
   enable = noemu;
 };
-*/
+
 module = {
   name = fdt;
   arm64 = loader/arm64/fdt.c;
index 6953fb92ab25ce9922e636098c303ae18a4b2fbf..84251adf792ff22669284c2712637b9f1458e630 100644 (file)
@@ -38,6 +38,7 @@
 extern grub_uint8_t _start[];
 extern grub_uint8_t _end[];
 extern grub_uint8_t _edata[];
+grub_addr_t start_of_ram = ~(grub_addr_t)0;
 
 void  __attribute__ ((noreturn))
 grub_exit (void)
@@ -66,6 +67,9 @@ heap_init (grub_uint64_t addr, grub_uint64_t size, grub_memory_type_t type,
     end = GRUB_ULONG_MAX;
 #endif
 
+  if (start_of_ram > begin)
+    start_of_ram = begin;
+
   if (type != GRUB_MEMORY_AVAILABLE)
     return 0;
 
index 3b47a76f1dafc6dcc78182ab8d55dd46e4d96e29..95fb0b174c6a762fc649afd576052b8420beb577 100644 (file)
@@ -34,6 +34,7 @@ struct grub_fdt_board
 extern struct grub_fdt_board grub_fdt_boards[];
 void grub_machine_timer_init (void);
 void grub_pl050_init (void);
+extern grub_addr_t EXPORT_VAR (start_of_ram);
 #endif /* ! ASM_FILE */
 
 #define GRUB_KERNEL_MACHINE_STACK_SIZE GRUB_KERNEL_ARM_STACK_SIZE
index 1ae161d07063e4b50d1048c0735f433c8f7d810e..126b7db6223cd555f883a6b7d0e3719a8b859171 100644 (file)
@@ -25,7 +25,7 @@
 
 #include "system.h"
 
-#if defined (GRUB_MACHINE_UBOOT) || defined (GRUB_MACHINE_COREBOOT)
+#if defined (GRUB_MACHINE_UBOOT)
 # include <grub/uboot/uboot.h>
 # define LINUX_ADDRESS        (start_of_ram + 0x8000)
 # define LINUX_INITRD_ADDRESS (start_of_ram + 0x02000000)
@@ -50,6 +50,22 @@ grub_arm_firmware_get_machine_type (void)
 {
   return GRUB_ARM_MACHINE_TYPE_FDT;
 }
+#elif defined (GRUB_MACHINE_COREBOOT)
+#include <grub/fdtbus.h>
+#include <grub/machine/kernel.h>
+# define LINUX_ADDRESS        (start_of_ram + 0x8000)
+# define LINUX_INITRD_ADDRESS (start_of_ram + 0x02000000)
+# define LINUX_FDT_ADDRESS    (LINUX_INITRD_ADDRESS - 0x10000)
+static inline const void *
+grub_arm_firmware_get_boot_data (void)
+{
+  return grub_fdtbus_get_fdt ();
+}
+static inline grub_uint32_t
+grub_arm_firmware_get_machine_type (void)
+{
+  return GRUB_ARM_MACHINE_TYPE_FDT;
+}
 #endif
 
 #define FDT_ADDITIONAL_ENTRIES_SIZE    0x300