diff options
Diffstat (limited to 'common/partitions.c')
-rw-r--r-- | common/partitions.c | 36 |
1 files changed, 4 insertions, 32 deletions
diff --git a/common/partitions.c b/common/partitions.c index 74b4f1201a..78b09fc786 100644 --- a/common/partitions.c +++ b/common/partitions.c @@ -31,6 +31,7 @@ #include <block.h> #include <asm/unaligned.h> #include <disks.h> +#include <dma.h> struct partition { uint64_t first_sec; @@ -43,23 +44,6 @@ struct partition_desc { }; /** - * Reject values which cannot be used in Barebox - * @param val Value to be check - * @return 0 if value can be used in Barebox, -EINVAL if not - * - * @note this routine can be removed when Barebox uses file offsets larger - * than 32 bit - */ -static int check_offset_value(uint64_t val) -{ -#if 1 /* until Barebox can handle 64 bit offsets */ - if (val > (__INT_MAX__ / SECTOR_SIZE)) - return -EINVAL; -#endif - return 0; -} - -/** * Guess the size of the disk, based on the partition table entries * @param dev device to create partitions for * @param table partition table @@ -76,12 +60,6 @@ static int disk_guess_size(struct device_d *dev, struct partition_entry *table) size += get_unaligned(&table[i].partition_size); } } - /* limit disk sector counts we can't handle due to 32 bit limits */ - if (check_offset_value(size) != 0) { - dev_warn(dev, "Warning: Sector count limited due to 31 bit" - "contraints\n"); - size = __INT_MAX__ / SECTOR_SIZE; - } return (int)size; } @@ -102,7 +80,7 @@ static void __maybe_unused try_dos_partition(struct block_device *blk, struct partition pentry; int i, rc; - buffer = xmalloc(SECTOR_SIZE); + buffer = dma_alloc(SECTOR_SIZE); /* read in the MBR to get the partition table */ rc = blk->ops->read(blk, buffer, 0, 1); @@ -119,19 +97,13 @@ static void __maybe_unused try_dos_partition(struct block_device *blk, table = (struct partition_entry *)&buffer[446]; /* valid for x86 BIOS based disks only */ - if (blk->num_blocks == 0) + if (IS_ENABLED(CONFIG_DISK_BIOS) && blk->num_blocks == 0) blk->num_blocks = disk_guess_size(blk->dev, table); for (i = 0; i < 4; i++) { pentry.first_sec = get_unaligned(&table[i].partition_start); pentry.size = get_unaligned(&table[i].partition_size); - /* do we have to ignore this partition due to limitations? */ - if (check_offset_value(pentry.first_sec) != 0) - continue; - if (check_offset_value(pentry.size) != 0) - continue; - if (pentry.first_sec != 0) { pd->parts[pd->used_entries].first_sec = pentry.first_sec; pd->parts[pd->used_entries].size = pentry.size; @@ -142,7 +114,7 @@ static void __maybe_unused try_dos_partition(struct block_device *blk, } on_error: - free(buffer); + dma_free(buffer); } /** |