diff options
author | Ji Luo <ji.luo@nxp.com> | 2020-11-05 17:00:44 +0800 |
---|---|---|
committer | Ji Luo <ji.luo@nxp.com> | 2022-04-18 16:40:09 +0800 |
commit | f56093214625acbc78dd1fcd9e227c24e896846d (patch) | |
tree | ba8fbff835099f95f53ae6f9f917fa59a5635691 | |
parent | 6651d6cd9f2e856bcb1da481bc3b686762242392 (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>
(cherry picked from commit 2062183df063e0653e9e88a690764647702af7dd)
(cherry picked from commit 49aad2989b6256934b146c50af5cf26b7486d658)
(cherry picked from commit dee550412c2da98061a726e64781f75aa69ee38a)
-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 e44cc8a9f2b..52ac1bd2a1c 100644 --- a/lib/avb/fsl/utils.c +++ b/lib/avb/fsl/utils.c @@ -15,8 +15,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) @@ -26,9 +26,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) @@ -38,17 +38,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 981b1b5518e..60172a71e33 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, |