* [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.