From 2062183df063e0653e9e88a690764647702af7dd Mon Sep 17 00:00:00 2001 From: Ji Luo Date: Thu, 5 Nov 2020 17:00:44 +0800 Subject: MA-18221 Fix build break for imx7ulp GCC for arm32 doesn't support division between signed and unsigned integer. Clean up the code to use 'long' for both arm32 and arm64 platforms. Test: build on 7ulp and 8mm. Change-Id: I21c23b1948994558237b27bfe7452e78e3d45172 Signed-off-by: Ji Luo --- lib/avb/fsl/utils.c | 21 ++++++++++----------- lib/avb/fsl/utils.h | 4 ++-- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/lib/avb/fsl/utils.c b/lib/avb/fsl/utils.c index 64176a04e3..86c565a130 100644 --- a/lib/avb/fsl/utils.c +++ b/lib/avb/fsl/utils.c @@ -14,8 +14,8 @@ * get margin_pos struct from offset [to the partition start/end] and * num_bytes to read/write */ -int get_margin_pos(uint64_t part_start, uint64_t part_end, unsigned long blksz, - margin_pos_t *margin, int64_t offset, size_t num_bytes, +int get_margin_pos(long part_start, long part_end, long blksz, + margin_pos_t *margin, long offset, size_t num_bytes, bool allow_partial) { long off; if (margin == NULL) @@ -25,9 +25,9 @@ int get_margin_pos(uint64_t part_start, uint64_t part_end, unsigned long blksz, return -1; if (offset < 0) { - margin->blk_start = (offset + 1) / (int64_t)blksz + part_end; + margin->blk_start = (offset + 1) / blksz + part_end; // offset == -1 means the last byte?, or start need -1 - margin->start = (off = offset % (int64_t)blksz) == 0 ? + margin->start = (off = offset % blksz) == 0 ? 0 : blksz + off; if (offset + num_bytes - 1 >= 0) { if (!allow_partial) @@ -37,17 +37,16 @@ int get_margin_pos(uint64_t part_start, uint64_t part_end, unsigned long blksz, } else { // which blk the last byte is in margin->blk_end = (num_bytes + offset) / - (int64_t)blksz + part_end; - margin->end = (off = (num_bytes + offset - 1) % - (int64_t)blksz) == 0 ? + blksz + part_end; + margin->end = (off = (num_bytes + offset - 1) % blksz) == 0 ? 0 : blksz + off; // last byte } } else { - margin->blk_start = offset / (uint64_t)blksz + part_start; - margin->start = offset % (uint64_t)blksz; - margin->blk_end = ((offset + num_bytes - 1) / (uint64_t)blksz) + + margin->blk_start = offset / blksz + part_start; + margin->start = offset % blksz; + margin->blk_end = ((offset + num_bytes - 1) / blksz) + part_start ; - margin->end = (offset + num_bytes - 1) % (uint64_t)blksz; + margin->end = (offset + num_bytes - 1) % blksz; if (margin->blk_end > part_end) { if (!allow_partial) return -1; diff --git a/lib/avb/fsl/utils.h b/lib/avb/fsl/utils.h index 698aec0dc3..1a630bfa4e 100644 --- a/lib/avb/fsl/utils.h +++ b/lib/avb/fsl/utils.h @@ -25,8 +25,8 @@ struct margin_pos { }; typedef struct margin_pos margin_pos_t; -int get_margin_pos(uint64_t part_start, uint64_t part_end, unsigned long blksz, - margin_pos_t *margin, int64_t offset, size_t num_bytes, +int get_margin_pos(long part_start, long part_end, long blksz, + margin_pos_t *margin, long offset, size_t num_bytes, bool allow_partial); int read_from_partition_in_bytes(struct blk_desc *fs_dev_desc, -- cgit v1.2.3