diff options
author | Maxime Ripard <maxime.ripard@free-electrons.com> | 2015-10-15 14:34:12 +0200 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2015-11-12 13:17:29 -0500 |
commit | 40aeeda396024913835dc67fa17041693af97bd1 (patch) | |
tree | 811ac4b2e53fc52af581829f98fff6d5516bcd3e | |
parent | 7bfc3b134626aafd70b550db094df327437c5698 (diff) | |
download | u-boot-40aeeda396024913835dc67fa17041693af97bd1.tar.gz |
sparse: Simplify multiple logic
To check the alignment of the image blocks to the storage blocks, the
current code uses a convoluted syntax, while a simple mod also does the
work.
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
Reviewed-by: Tom Rini <trini@konsulko.com>
-rw-r--r-- | common/aboot.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/common/aboot.c b/common/aboot.c index 243b330d91..2775254c74 100644 --- a/common/aboot.c +++ b/common/aboot.c @@ -37,11 +37,14 @@ #include <config.h> #include <common.h> #include <aboot.h> +#include <div64.h> #include <errno.h> #include <malloc.h> #include <part.h> #include <sparse_format.h> +#include <linux/math64.h> + typedef struct sparse_buffer { void *data; u32 length; @@ -260,7 +263,7 @@ void write_sparse_image(block_dev_desc_t *dev_desc, { lbaint_t start; lbaint_t blkcnt; - unsigned int chunk; + unsigned int chunk, offset; sparse_header_t *sparse_header; chunk_header_t *chunk_header; sparse_buffer_t *buffer; @@ -274,9 +277,12 @@ void write_sparse_image(block_dev_desc_t *dev_desc, return; } - /* verify sparse_header->blk_sz is an exact multiple of info->blksz */ - if (sparse_header->blk_sz != - (sparse_header->blk_sz & ~(info->blksz - 1))) { + /* + * Verify that the sparse block size is a multiple of our + * storage backend block size + */ + div_u64_rem(sparse_header->blk_sz, info->blksz, &offset); + if (offset) { printf("%s: Sparse image block size issue [%u]\n", __func__, sparse_header->blk_sz); fastboot_fail("sparse image block size issue"); |