diff options
author | Vincent Tinelli <vincent.tinelli@intel.com> | 2017-01-30 15:46:07 +0300 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2017-02-08 15:56:29 -0500 |
commit | e163a931af34ba06d11b98707b69b8819e353257 (patch) | |
tree | 73d9f4cd8ce384cdb0661c85458babce1406d806 /disk | |
parent | d726f225f5eabc0efa1ef7006c4a6f840b28b767 (diff) |
cmd: gpt: backup boot code before writing MBR
On some cases the first 440 bytes of MBR are used to keep an additional
information for ROM boot loader. 'gpt write' command doesn't preserve
that area and makes boot code gone.
Preserve boot code area when run 'gpt write' command.
Signed-off-by: Vincent Tinelli <vincent.tinelli@intel.com>
Signed-off-by: Brennan Ashton <brn@deako.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'disk')
-rw-r--r-- | disk/part_efi.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/disk/part_efi.c b/disk/part_efi.c index b5928e5abec..893cbbdbdae 100644 --- a/disk/part_efi.c +++ b/disk/part_efi.c @@ -324,6 +324,13 @@ static int set_protective_mbr(struct blk_desc *dev_desc) printf("%s: calloc failed!\n", __func__); return -1; } + + /* Read MBR to backup boot code if it exists */ + if (blk_dread(dev_desc, 0, 1, p_mbr) != 1) { + error("** Can't read from device %d **\n", dev_desc->devnum); + return -1; + } + /* Append signature */ p_mbr->signature = MSDOS_MBR_SIGNATURE; p_mbr->partition_record[0].sys_ind = EFI_PMBR_OSTYPE_EFI_GPT; |