All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Port yaboot logic for various powerpc machine types
@ 2014-01-28 15:58 Colin Watson
  2014-01-28 23:16 ` Colin Watson
  2014-06-22  2:59 ` Vladimir 'φ-coder/phcoder' Serbinenko
  0 siblings, 2 replies; 3+ messages in thread
From: Colin Watson @ 2014-01-28 15:58 UTC (permalink / raw)
  To: grub-devel

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


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] Port yaboot logic for various powerpc machine types
  2014-01-28 15:58 [PATCH] Port yaboot logic for various powerpc machine types Colin Watson
@ 2014-01-28 23:16 ` Colin Watson
  2014-06-22  2:59 ` Vladimir 'φ-coder/phcoder' Serbinenko
  1 sibling, 0 replies; 3+ messages in thread
From: Colin Watson @ 2014-01-28 23:16 UTC (permalink / raw)
  To: grub-devel

On Tue, Jan 28, 2014 at 03:58:40PM +0000, Colin Watson wrote:
> diff --git a/grub-core/osdep/linux/platform.c b/grub-core/osdep/linux/platform.c
[...]
> +  free (buf);
> +  fclose (fp);

While test-building for i386-pc I noticed that this requires <stdio.h>
and <stdlib.h>.  Please pretend as if I included those in the previous
patch.

-- 
Colin Watson                                       [cjwatson@ubuntu.com]


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] Port yaboot logic for various powerpc machine types
  2014-01-28 15:58 [PATCH] Port yaboot logic for various powerpc machine types Colin Watson
  2014-01-28 23:16 ` Colin Watson
@ 2014-06-22  2:59 ` Vladimir 'φ-coder/phcoder' Serbinenko
  1 sibling, 0 replies; 3+ messages in thread
From: Vladimir 'φ-coder/phcoder' Serbinenko @ 2014-06-22  2:59 UTC (permalink / raw)
  To: The development of GNU GRUB

[-- Attachment #1: Type: text/plain, Size: 421 bytes --]

On 28.01.2014 19:58, Colin Watson wrote:
> +      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;
Why disable nvram on those? Especially "generic" seems doubtful and will
probably break existing platforms.


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 274 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2014-06-22  3:01 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-01-28 15:58 [PATCH] Port yaboot logic for various powerpc machine types Colin Watson
2014-01-28 23:16 ` Colin Watson
2014-06-22  2:59 ` Vladimir 'φ-coder/phcoder' Serbinenko

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.