Merge "[msm_shared/nand]: Fix bad-block calculation for flash read"
diff --git a/platform/msm_shared/nand.c b/platform/msm_shared/nand.c
index 0a72902..6be6179 100644
--- a/platform/msm_shared/nand.c
+++ b/platform/msm_shared/nand.c
@@ -3318,6 +3318,7 @@
unsigned start_block = ptn->start;
int result = 0;
int isbad = 0;
+ int start_block_count = 0;
ASSERT(ptn->type == TYPE_APPS_PARTITION);
set_nand_configuration(TYPE_APPS_PARTITION);
@@ -3325,16 +3326,21 @@
if(offset & (flash_pagesize - 1))
return -1;
- // Adjust page offset based on number of bad blocks from start to current page
- while (start_block < current_block) {
- isbad = _flash_block_isbad(flash_cmdlist, flash_ptrlist, start_block*64);
- if (isbad)
- page += 64;
-
- start_block++;
+// Adjust page offset based on number of bad blocks from start to current page
+ if (start_block < current_block)
+ {
+ start_block_count = (current_block - start_block);
+ while (start_block_count && (start_block < (ptn->start + ptn->length))) {
+ isbad = _flash_block_isbad(flash_cmdlist, flash_ptrlist, start_block*64);
+ if (isbad)
+ page += 64;
+ else
+ start_block_count--;
+ start_block++;
+ }
}
- while(page < lastpage) {
+ while((page < lastpage) && !start_block_count) {
if(count == 0) {
dprintf(INFO, "flash_read_image: success (%d errors)\n", errors);
return 0;