summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJi Luo <ji.luo@nxp.com>2020-11-05 17:00:44 +0800
committerJi Luo <ji.luo@nxp.com>2022-04-18 16:40:09 +0800
commitf56093214625acbc78dd1fcd9e227c24e896846d (patch)
treeba8fbff835099f95f53ae6f9f917fa59a5635691
parent6651d6cd9f2e856bcb1da481bc3b686762242392 (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.c21
-rw-r--r--lib/avb/fsl/utils.h4
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,