bc092b9
From 3edabad8fefb112cc4b2d43be6e97d43c909ceee Mon Sep 17 00:00:00 2001
bc092b9
From: Vladimir Serbinenko <phcoder@gmail.com>
bc092b9
Date: Mon, 8 May 2017 21:59:48 +0200
31cddd6
Subject: [PATCH] arm_coreboot: Support grub-mkstandalone.
bc092b9
bc092b9
---
bc092b9
 util/grub-install-common.c  | 12 ++++++++++--
bc092b9
 util/grub-install.c         |  7 +++++++
ec4acbb
 include/grub/util/install.h |  6 +++++-
bc092b9
 3 files changed, 22 insertions(+), 3 deletions(-)
bc092b9
bc092b9
diff --git a/util/grub-install-common.c b/util/grub-install-common.c
ec4acbb
index 8539ff3484d..9e3e358c96a 100644
bc092b9
--- a/util/grub-install-common.c
bc092b9
+++ b/util/grub-install-common.c
bc092b9
@@ -73,6 +73,7 @@ grub_install_help_filter (int key, const char *text,
bc092b9
 
bc092b9
 static int (*compress_func) (const char *src, const char *dest) = NULL;
bc092b9
 char *grub_install_copy_buffer;
bc092b9
+static char *dtb;
bc092b9
 
bc092b9
 int
bc092b9
 grub_install_copy_file (const char *src,
bc092b9
@@ -364,6 +365,11 @@ grub_install_parse (int key, char *arg)
bc092b9
     case GRUB_INSTALL_OPTIONS_INSTALL_FONTS:
bc092b9
       handle_install_list (&install_fonts, arg, 0);
bc092b9
       return 1;
bc092b9
+    case GRUB_INSTALL_OPTIONS_DTB:
bc092b9
+      if (dtb)
bc092b9
+	free (dtb);
bc092b9
+      dtb = xstrdup (arg);
bc092b9
+      return 1;
bc092b9
     case GRUB_INSTALL_OPTIONS_INSTALL_COMPRESS:
bc092b9
       if (strcmp (arg, "no") == 0
bc092b9
 	  || strcmp (arg, "none") == 0)
bc092b9
@@ -486,9 +492,10 @@ grub_install_make_image_wrap_file (const char *dir, const char *prefix,
bc092b9
 
bc092b9
   grub_util_info ("grub-mkimage --directory '%s' --prefix '%s'"
bc092b9
 		  " --output '%s' "
bc092b9
+		  " --dtb '%s' "
bc092b9
 		  "--format '%s' --compression '%s' %s %s\n",
bc092b9
 		  dir, prefix,
bc092b9
-		  outname, mkimage_target,
bc092b9
+		  outname, dtb ? : "", mkimage_target,
bc092b9
 		  compnames[compression], note ? "--note" : "", s);
bc092b9
   free (s);
bc092b9
 
bc092b9
@@ -499,7 +506,7 @@ grub_install_make_image_wrap_file (const char *dir, const char *prefix,
bc092b9
   grub_install_generate_image (dir, prefix, fp, outname,
bc092b9
 			       modules.entries, memdisk_path,
bc092b9
 			       pubkeys, npubkeys, config_path, tgt,
bc092b9
-			       note, compression, 0);
bc092b9
+			       note, compression, dtb);
bc092b9
   while (dc--)
bc092b9
     grub_install_pop_module ();
bc092b9
 }
bc092b9
@@ -666,6 +673,7 @@ static struct
bc092b9
     [GRUB_INSTALL_PLATFORM_ARM_EFI] =          { "arm",     "efi"       },
bc092b9
     [GRUB_INSTALL_PLATFORM_ARM64_EFI] =        { "arm64",   "efi"       },
bc092b9
     [GRUB_INSTALL_PLATFORM_ARM_UBOOT] =        { "arm",     "uboot"     },
bc092b9
+    [GRUB_INSTALL_PLATFORM_ARM_COREBOOT] =     { "arm",     "coreboot"  },
bc092b9
   }; 
bc092b9
 
bc092b9
 char *
bc092b9
diff --git a/util/grub-install.c b/util/grub-install.c
ec4acbb
index 9074d3e9e52..75e3e5ba6f0 100644
bc092b9
--- a/util/grub-install.c
bc092b9
+++ b/util/grub-install.c
bc092b9
@@ -486,6 +486,7 @@ have_bootdev (enum grub_install_plat pl)
bc092b9
 
bc092b9
     case GRUB_INSTALL_PLATFORM_I386_QEMU:
bc092b9
     case GRUB_INSTALL_PLATFORM_I386_COREBOOT:
bc092b9
+    case GRUB_INSTALL_PLATFORM_ARM_COREBOOT:
bc092b9
     case GRUB_INSTALL_PLATFORM_I386_MULTIBOOT:
bc092b9
     case GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS:
bc092b9
     case GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS:
bc092b9
@@ -911,6 +912,7 @@ main (int argc, char *argv[])
bc092b9
 
bc092b9
     case GRUB_INSTALL_PLATFORM_I386_QEMU:
bc092b9
     case GRUB_INSTALL_PLATFORM_I386_COREBOOT:
bc092b9
+    case GRUB_INSTALL_PLATFORM_ARM_COREBOOT:
bc092b9
     case GRUB_INSTALL_PLATFORM_I386_MULTIBOOT:
bc092b9
     case GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON:
bc092b9
     case GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS:
bc092b9
@@ -946,6 +948,7 @@ main (int argc, char *argv[])
bc092b9
     case GRUB_INSTALL_PLATFORM_ARM_UBOOT:
bc092b9
     case GRUB_INSTALL_PLATFORM_I386_QEMU:
bc092b9
     case GRUB_INSTALL_PLATFORM_I386_COREBOOT:
bc092b9
+    case GRUB_INSTALL_PLATFORM_ARM_COREBOOT:
bc092b9
     case GRUB_INSTALL_PLATFORM_I386_MULTIBOOT:
bc092b9
     case GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON:
bc092b9
     case GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS:
bc092b9
@@ -1448,6 +1451,7 @@ main (int argc, char *argv[])
bc092b9
 		  case GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON:
bc092b9
 		  case GRUB_INSTALL_PLATFORM_I386_QEMU:
bc092b9
 		  case GRUB_INSTALL_PLATFORM_I386_COREBOOT:
bc092b9
+		  case GRUB_INSTALL_PLATFORM_ARM_COREBOOT:
bc092b9
 		  case GRUB_INSTALL_PLATFORM_I386_MULTIBOOT:
bc092b9
 		  case GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS:
bc092b9
 		  case GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS:
bc092b9
@@ -1542,6 +1546,7 @@ main (int argc, char *argv[])
bc092b9
       break;
bc092b9
 
bc092b9
     case GRUB_INSTALL_PLATFORM_I386_COREBOOT:
bc092b9
+    case GRUB_INSTALL_PLATFORM_ARM_COREBOOT:
bc092b9
     case GRUB_INSTALL_PLATFORM_I386_MULTIBOOT:
bc092b9
     case GRUB_INSTALL_PLATFORM_I386_IEEE1275:
bc092b9
     case GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275:
bc092b9
@@ -1629,6 +1634,7 @@ main (int argc, char *argv[])
bc092b9
     case GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS:
bc092b9
     case GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS:
bc092b9
     case GRUB_INSTALL_PLATFORM_I386_COREBOOT:
bc092b9
+    case GRUB_INSTALL_PLATFORM_ARM_COREBOOT:
bc092b9
     case GRUB_INSTALL_PLATFORM_I386_MULTIBOOT:
bc092b9
     case GRUB_INSTALL_PLATFORM_I386_PC:
bc092b9
     case GRUB_INSTALL_PLATFORM_MIPSEL_ARC:
bc092b9
@@ -1889,6 +1895,7 @@ main (int argc, char *argv[])
bc092b9
     case GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS:
bc092b9
     case GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS:
bc092b9
     case GRUB_INSTALL_PLATFORM_I386_COREBOOT:
bc092b9
+    case GRUB_INSTALL_PLATFORM_ARM_COREBOOT:
bc092b9
     case GRUB_INSTALL_PLATFORM_I386_MULTIBOOT:
bc092b9
     case GRUB_INSTALL_PLATFORM_MIPSEL_ARC:
bc092b9
     case GRUB_INSTALL_PLATFORM_ARM_UBOOT:
ec4acbb
diff --git a/include/grub/util/install.h b/include/grub/util/install.h
ec4acbb
index 6abd288c313..5910b0c09bc 100644
ec4acbb
--- a/include/grub/util/install.h
ec4acbb
+++ b/include/grub/util/install.h
ec4acbb
@@ -29,6 +29,8 @@
ec4acbb
 #define GRUB_INSTALL_OPTIONS					  \
ec4acbb
   { "modules",      GRUB_INSTALL_OPTIONS_MODULES, N_("MODULES"),	  \
ec4acbb
     0, N_("pre-load specified modules MODULES"), 1 },			  \
ec4acbb
+  { "dtb",      GRUB_INSTALL_OPTIONS_DTB, N_("FILE"),	  \
ec4acbb
+    0, N_("embed a specific DTB"), 1 },			  \
ec4acbb
   { "install-modules", GRUB_INSTALL_OPTIONS_INSTALL_MODULES,	  \
ec4acbb
     N_("MODULES"), 0,							  \
ec4acbb
     N_("install only MODULES and their dependencies [default=all]"), 1 }, \
ec4acbb
@@ -99,6 +101,7 @@ enum grub_install_plat
ec4acbb
     GRUB_INSTALL_PLATFORM_I386_XEN,
ec4acbb
     GRUB_INSTALL_PLATFORM_X86_64_XEN,
ec4acbb
     GRUB_INSTALL_PLATFORM_ARM64_EFI,
ec4acbb
+    GRUB_INSTALL_PLATFORM_ARM_COREBOOT,
ec4acbb
     GRUB_INSTALL_PLATFORM_MAX
ec4acbb
   };
ec4acbb
 
ec4acbb
@@ -115,7 +118,8 @@ enum grub_install_options {
ec4acbb
   GRUB_INSTALL_OPTIONS_LOCALE_DIRECTORY,
ec4acbb
   GRUB_INSTALL_OPTIONS_THEMES_DIRECTORY,
ec4acbb
   GRUB_INSTALL_OPTIONS_GRUB_MKIMAGE,
ec4acbb
-  GRUB_INSTALL_OPTIONS_INSTALL_CORE_COMPRESS
ec4acbb
+  GRUB_INSTALL_OPTIONS_INSTALL_CORE_COMPRESS,
ec4acbb
+  GRUB_INSTALL_OPTIONS_DTB
ec4acbb
 };
ec4acbb
 
ec4acbb
 extern char *grub_install_source_directory;