]> git.ipfire.org Git - people/ms/u-boot.git/commitdiff
sparse: Simplify multiple logic
authorMaxime Ripard <maxime.ripard@free-electrons.com>
Thu, 15 Oct 2015 12:34:12 +0000 (14:34 +0200)
committerTom Rini <trini@konsulko.com>
Thu, 12 Nov 2015 18:17:29 +0000 (13:17 -0500)
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>
common/aboot.c

index 243b330d91266f166643be318abada14ca5325ad..2775254c742e1dbf4fb16d55815dcabcc85afd2f 100644 (file)
 #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");