diff options
author | Ji Luo <ji.luo@nxp.com> | 2020-11-05 17:00:44 +0800 |
---|---|---|
committer | Ji Luo <ji.luo@nxp.com> | 2020-11-06 10:50:35 +0800 |
commit | 2062183df063e0653e9e88a690764647702af7dd (patch) | |
tree | b73e22aea44a0b66f9f2cd074dc1dacd7b86c3b0 | |
parent | b414e6dfc20ec6430ab1069139d59e11dff0f5dd (diff) |
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 <ji.luo@nxp.com>
-rw-r--r-- | lib/avb/fsl/utils.c | 21 | ||||
-rw-r--r-- | 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 64176a04e37..86c565a1300 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 698aec0dc34..1a630bfa4e4 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, |