All of lore.kernel.org
 help / color / mirror / Atom feed
From: Colin Watson <cjwatson@ubuntu.com>
To: grub-devel@gnu.org
Subject: [PATCH] Port yaboot logic for various powerpc machine types
Date: Tue, 28 Jan 2014 15:58:40 +0000	[thread overview]
Message-ID: <20140128155840.GA4520@riva.ucam.org> (raw)

Some powerpc machines require not updating the NVRAM, and some require
adding a CHRP note.  This can be handled by existing grub-install
command-line options, but it's friendlier to detect this automatically.
(Some of these machines may not be supported, but I made the list match
for the sake of completeness.)

* grub-core/osdep/basic/platform.c
(grub_install_get_default_powerpc_machtype): New function.
* grub-core/osdep/linux/platform.c
(grub_install_get_default_powerpc_machtype): Likewise.
* grub-core/osdep/windows/platform.c
(grub_install_get_default_powerpc_machtype): Likewise.
* include/grub/util/install.h
(grub_install_get_default_powerpc_machtype): Add prototype.
* util/grub-install.c (main): Set update_nvram to 0 for
pmac_oldworld, chrp_ibm, cell, and generic; set chrp_note to 1 for
chrp_ibm.  Pass chrp_note to grub_install_make_image_wrap.
---
 grub-core/osdep/basic/platform.c   |  5 +++
 grub-core/osdep/linux/platform.c   | 63 ++++++++++++++++++++++++++++++++++++++
 grub-core/osdep/windows/platform.c |  6 ++++
 include/grub/util/install.h        |  3 ++
 util/grub-install.c                | 17 +++++++++-
 5 files changed, 93 insertions(+), 1 deletion(-)

diff --git a/grub-core/osdep/basic/platform.c b/grub-core/osdep/basic/platform.c
index 4b5502a..2ab9079 100644
--- a/grub-core/osdep/basic/platform.c
+++ b/grub-core/osdep/basic/platform.c
@@ -24,3 +24,8 @@ grub_install_get_default_x86_platform (void)
   return "i386-pc";
 }
 
+const char *
+grub_install_get_default_powerpc_machtype (void)
+{
+  return "generic";
+}
diff --git a/grub-core/osdep/linux/platform.c b/grub-core/osdep/linux/platform.c
index 4b9f6ef..e4b6c3c 100644
--- a/grub-core/osdep/linux/platform.c
+++ b/grub-core/osdep/linux/platform.c
@@ -93,3 +93,66 @@ grub_install_get_default_x86_platform (void)
   grub_util_info ("... not found");
   return "i386-pc";
 }
+
+const char *
+grub_install_get_default_powerpc_machtype (void)
+{
+  FILE *fp;
+  char *buf = NULL;
+  size_t len = 0;
+  const char *machtype = "generic";
+
+  fp = grub_util_fopen ("/proc/cpuinfo", "r");
+  if (! fp)
+    return machtype;
+
+  while (getline (&buf, &len, fp) > 0)
+    {
+      if (strncmp (buf, "pmac-generation",
+		   sizeof ("pmac-generation") - 1) == 0)
+	{
+	  if (strstr (buf, "NewWorld"))
+	    {
+	      machtype = "pmac_newworld";
+	      break;
+	    }
+	  if (strstr (buf, "OldWorld"))
+	    {
+	      machtype = "pmac_oldworld";
+	      break;
+	    }
+	}
+
+      if (strncmp (buf, "motherboard", sizeof ("motherboard") - 1) == 0 &&
+	  strstr (buf, "AAPL"))
+	{
+	  machtype = "pmac_oldworld";
+	  break;
+	}
+
+      if (strncmp (buf, "machine", sizeof ("machine") - 1) == 0 &&
+	  strstr (buf, "CHRP IBM"))
+	{
+	  machtype = "chrp_ibm";
+	  break;
+	}
+
+      if (strncmp (buf, "platform", sizeof ("platform") - 1) == 0)
+	{
+	  if (strstr (buf, "Maple"))
+	    {
+	      machtype = "maple";
+	      break;
+	    }
+	  if (strstr (buf, "Cell"))
+	    {
+	      machtype = "cell";
+	      break;
+	    }
+	}
+    }
+
+  free (buf);
+  fclose (fp);
+  return machtype;
+}
diff --git a/grub-core/osdep/windows/platform.c b/grub-core/osdep/windows/platform.c
index d217efe..8b42065 100644
--- a/grub-core/osdep/windows/platform.c
+++ b/grub-core/osdep/windows/platform.c
@@ -128,6 +128,12 @@ grub_install_get_default_x86_platform (void)
     return "i386-efi";
 }
 
+const char *
+grub_install_get_default_powerpc_machtype (void)
+{
+  return "generic";
+}
+
 static void *
 get_efi_variable (const wchar_t *varname, ssize_t *len)
 {
diff --git a/include/grub/util/install.h b/include/grub/util/install.h
index aedcd29..0b18e3f 100644
--- a/include/grub/util/install.h
+++ b/include/grub/util/install.h
@@ -206,6 +206,9 @@ grub_install_create_envblk_file (const char *name);
 const char *
 grub_install_get_default_x86_platform (void);
 
+const char *
+grub_install_get_default_powerpc_machtype (void);
+
 void
 grub_install_register_efi (grub_device_t efidir_grub_dev,
 			   const char *efifile_path,
diff --git a/util/grub-install.c b/util/grub-install.c
index 2e6226a..8d21f8d 100644
--- a/util/grub-install.c
+++ b/util/grub-install.c
@@ -57,6 +57,7 @@ static char *target;
 static int removable = 0;
 static int recheck = 0;
 static int update_nvram = 1;
+static int chrp_note = 0;
 static char *install_device = NULL;
 static char *debug_image = NULL;
 static char *rootdir = NULL;
@@ -1140,7 +1141,21 @@ main (int argc, char *argv[])
 
   if (platform == GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275)
     {
+      const char *machtype = grub_install_get_default_powerpc_machtype ();
       int is_guess = 0;
+
+      if (strcmp (machtype, "pmac_oldworld") == 0)
+	update_nvram = 0;
+      else if (strcmp (machtype, "chrp_ibm") == 0)
+	{
+	  update_nvram = 0;
+	  chrp_note = 1;
+	}
+      else if (strcmp (machtype, "cell") == 0)
+	update_nvram = 0;
+      else if (strcmp (machtype, "generic") == 0)
+	update_nvram = 0;
+
       if (!macppcdir)
 	{
 	  char *d;
@@ -1584,7 +1599,7 @@ main (int argc, char *argv[])
 				/* output */ imgfile,
 				/* memdisk */ NULL,
 				have_load_cfg ? load_cfg : NULL,
-				/* image target */ mkimage_target, 0);
+				/* image target */ mkimage_target, chrp_note);
   /* Backward-compatibility kludges.  */
   switch (platform)
     {
-- 
1.8.5.3


             reply	other threads:[~2014-01-28 15:58 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-01-28 15:58 Colin Watson [this message]
2014-01-28 23:16 ` [PATCH] Port yaboot logic for various powerpc machine types Colin Watson
2014-06-22  2:59 ` Vladimir 'φ-coder/phcoder' Serbinenko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140128155840.GA4520@riva.ucam.org \
    --to=cjwatson@ubuntu.com \
    --cc=grub-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.