From 26587b4905b8eb4c4aea6960fba4a43fcd28f3bd Mon Sep 17 00:00:00 2001 From: Maxime Ripard Date: Wed, 23 Aug 2017 16:01:30 +0200 Subject: [PATCH] part: efi: Fix offset Both the config option and the DT options specify the offset to set the GPT at in bytes, yet the code treats those values as block numbers. Fix that. Signed-off-by: Maxime Ripard Reviewed-by: Tom Rini Reviewed-by: Philipp Tomsich --- disk/part_efi.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/disk/part_efi.c b/disk/part_efi.c index 71c3cb3f78..75d0a78f0a 100644 --- a/disk/part_efi.c +++ b/disk/part_efi.c @@ -534,6 +534,7 @@ int gpt_fill_pte(gpt_header *gpt_h, gpt_entry *gpt_e, static uint32_t partition_entries_offset(struct blk_desc *dev_desc) { uint32_t offset_blks = 2; + uint32_t __maybe_unused offset_bytes; int __maybe_unused config_offset; #if defined(CONFIG_EFI_PARTITION_ENTRIES_OFF) @@ -545,8 +546,9 @@ static uint32_t partition_entries_offset(struct blk_desc *dev_desc) * the disk) for the entries can be set in * CONFIG_EFI_PARTITION_ENTRIES_OFF. */ - offset_blks = + offset_bytes = PAD_TO_BLOCKSIZE(CONFIG_EFI_PARTITION_ENTRIES_OFF, dev_desc); + offset_blks = offset_bytes / dev_desc->blksz; #endif #if defined(CONFIG_OF_CONTROL) @@ -558,8 +560,10 @@ static uint32_t partition_entries_offset(struct blk_desc *dev_desc) config_offset = fdtdec_get_config_int(gd->fdt_blob, "u-boot,efi-partition-entries-offset", -EINVAL); - if (config_offset != -EINVAL) - offset_blks = PAD_TO_BLOCKSIZE(config_offset, dev_desc); + if (config_offset != -EINVAL) { + offset_bytes = PAD_TO_BLOCKSIZE(config_offset, dev_desc); + offset_blks = offset_bytes / dev_desc->blksz; + } #endif debug("efi: partition entries offset (in blocks): %d\n", offset_blks); -- 2.39.5