Use the correct disk name and escape it properly in core.img for SPARC. Prior to this patch, search.fs_uuid was missing from the core.img. On SPARC, the core.img is very small and doesn't contain everything needed to boot. Therefore many modules contained within: /boot/grub/sparc64-ieee1275 are needed.
This patch will prevent walking the entire device tree every time and possibly using the wrong disk. This has been tested on T1 thru T7 hardware I didn't change the behavior for other IEEE1275 platforms, but they may benefit from this patch if they were added within the switch statement. Signed-off-by: Eric Snowberg <[email protected]> --- include/grub/emu/getroot.h | 2 ++ util/grub-install.c | 13 +++++++++++++ util/probe.c | 2 +- 3 files changed, 16 insertions(+), 1 deletions(-) diff --git a/include/grub/emu/getroot.h b/include/grub/emu/getroot.h index 73fa2d3..4f04c7d 100644 --- a/include/grub/emu/getroot.h +++ b/include/grub/emu/getroot.h @@ -100,5 +100,7 @@ grub_util_guess_baremetal_drive (const char *orig_path); void grub_util_fprint_full_disk_name (FILE *f, const char *drive, grub_device_t dev); +char * +escape_of_path (const char *orig_path); #endif /* ! GRUB_UTIL_GETROOT_HEADER */ diff --git a/util/grub-install.c b/util/grub-install.c index 7394739..f1ddf1c 100644 --- a/util/grub-install.c +++ b/util/grub-install.c @@ -1347,6 +1347,7 @@ main (int argc, char *argv[]) || grub_drives[1] || (!install_drive && platform != GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275) + || (platform == GRUB_INSTALL_PLATFORM_SPARC64_IEEE1275) || (install_drive && !is_same_disk (grub_drives[0], install_drive)) || !have_bootdev (platform)) { @@ -1438,6 +1439,18 @@ main (int argc, char *argv[]) g = grub_util_guess_efi_drive (*curdev); break; case GRUB_INSTALL_PLATFORM_SPARC64_IEEE1275: + { + char *dname; + const char *ofpath = grub_util_devname_to_ofpath (*curdev); + g = xasprintf ("ieee1275/%s", ofpath); + dname = escape_of_path (g); + fprintf (load_cfg_f, "%s ", dname); + free (dname); + free (g); + g = NULL; + break; + } + case GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275: case GRUB_INSTALL_PLATFORM_I386_IEEE1275: { diff --git a/util/probe.c b/util/probe.c index fa7ca34..880cb5c 100644 --- a/util/probe.c +++ b/util/probe.c @@ -44,7 +44,7 @@ /* Since OF path names can have "," characters in them, and GRUB internally uses "," to indicate partitions (unlike OF which uses ":" for this purpose) we escape such commas. */ -static char * +char * escape_of_path (const char *orig_path) { char *new_path, *d, c; -- 1.7.1 _______________________________________________ Grub-devel mailing list [email protected] https://lists.gnu.org/mailman/listinfo/grub-devel
