[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 02/15] sparc64: Add blocklist GPT support for SPARC
From: |
Eric Snowberg |
Subject: |
[PATCH 02/15] sparc64: Add blocklist GPT support for SPARC |
Date: |
Wed, 29 Jun 2016 14:43:15 -0700 |
Add block-list GPT support for SPARC. The OBP "load" and "boot" methods
are partition aware and neither command can see the partition table. Also
neither command can address the entire physical disk. When the install happens,
grub generates the block-list entries based on the beginning of the physical
disk, not the beginning of the parition. This patch fixes the block-list
entries so they match what OBP expects during boot for a GPT disk.
T5 and above now supports GPT as well as VTOC.
This patch has been tested on T5-2 and newer SPARC systems.
Signed-off-by: Eric Snowberg <address@hidden>
---
grub-core/osdep/linux/blocklist.c | 5 +++++
util/setup.c | 12 +++++++++---
2 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/grub-core/osdep/linux/blocklist.c
b/grub-core/osdep/linux/blocklist.c
index c77d608..caf8d4e 100644
--- a/grub-core/osdep/linux/blocklist.c
+++ b/grub-core/osdep/linux/blocklist.c
@@ -58,6 +58,11 @@ grub_install_get_blocklist (grub_device_t root_dev,
struct fiemap fie1;
int fd;
+#ifdef __sparc__
+ if (grub_strstr (container->partmap->name, "gpt"))
+ container_start = 0;
+#endif
+
/* Write the first two sectors of the core image onto the disk. */
grub_util_info ("opening the core image `%s'", core_path);
fd = open (core_path, O_RDONLY);
diff --git a/util/setup.c b/util/setup.c
index 8aa5a39..5908498 100644
--- a/util/setup.c
+++ b/util/setup.c
@@ -721,15 +721,21 @@ unable_to_embed:
{
char *buf, *ptr = core_img;
size_t len = core_size;
- grub_uint64_t blk;
+ grub_uint64_t blk, offset = 0;
grub_partition_t container = core_dev->disk->partition;
grub_err_t err;
core_dev->disk->partition = 0;
+#ifdef GRUB_SETUP_SPARC64
+ {
+ if (grub_strstr (container->partmap->name, "gpt"))
+ offset = grub_partition_get_start (container);
+ }
+#endif
buf = xmalloc (core_size);
blk = bl.first_sector;
- err = grub_disk_read (core_dev->disk, blk, 0, GRUB_DISK_SECTOR_SIZE, buf);
+ err = grub_disk_read (core_dev->disk, blk + offset, 0,
GRUB_DISK_SECTOR_SIZE, buf);
if (err)
grub_util_error (_("cannot read `%s': %s"), core_dev->disk->name,
grub_errmsg);
@@ -748,7 +754,7 @@ unable_to_embed:
if (cur > len)
cur = len;
- err = grub_disk_read (core_dev->disk, blk, 0, cur, buf);
+ err = grub_disk_read (core_dev->disk, blk + offset, 0, cur, buf);
if (err)
grub_util_error (_("cannot read `%s': %s"), core_dev->disk->name,
grub_errmsg);
--
1.7.1
- [PATCH 00/15] Add missing SPARC support, Eric Snowberg, 2016/06/29
- [PATCH 01/15] sparc64: fix OF path names for sun4v systems, Eric Snowberg, 2016/06/29
- [PATCH 02/15] sparc64: Add blocklist GPT support for SPARC,
Eric Snowberg <=
- [PATCH 03/15] grub-install: fix memory leak, Eric Snowberg, 2016/06/29
- [PATCH 04/15] sparc64: Use the correct disk name in core.img, Eric Snowberg, 2016/06/29
- [PATCH 05/15] ieee1275: fix segfault in grub-ofpathname, Eric Snowberg, 2016/06/29
- [PATCH 06/15] ieee1275: add nvme support within ofpath, Eric Snowberg, 2016/06/29
- [PATCH 07/15] ofdisk: memory corruption fix, Eric Snowberg, 2016/06/29
- [PATCH 09/15] ieee1275: ofdisk - don't continue to query block-size after we have it, Eric Snowberg, 2016/06/29
- [PATCH 08/15] ofdisk: move open logic, Eric Snowberg, 2016/06/29
- [PATCH 11/15] sparc64: boot performance improvements, Eric Snowberg, 2016/06/29
- [PATCH 10/15] ofdisk: refactor open logic, Eric Snowberg, 2016/06/29
- [PATCH 12/15] ofdisk: only add aliases that exist, Eric Snowberg, 2016/06/29