]> git.sur5r.net Git - u-boot/commitdiff
part: efi: Fix offset
authorMaxime Ripard <maxime.ripard@free-electrons.com>
Wed, 23 Aug 2017 14:01:30 +0000 (16:01 +0200)
committerTom Rini <trini@konsulko.com>
Sun, 3 Sep 2017 15:04:47 +0000 (11:04 -0400)
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 <maxime.ripard@free-electrons.com>
Reviewed-by: Tom Rini <trini@konsulko.com>
Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
disk/part_efi.c

index 71c3cb3f78d9fbffae660c019cfa54d3bb4ef7e1..75d0a78f0a1fa26edf8e8123eca209fafd1e2dbf 100644 (file)
@@ -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);