nand: fix flash erase when oob is in memory
authorRicard Wanderlof <ricard.wanderlof@axis.com>
Fri, 13 Nov 2015 13:17:28 +0000 (14:17 +0100)
committerKevin Wolf <kwolf@redhat.com>
Wed, 25 Nov 2015 13:27:43 +0000 (14:27 +0100)
For the "main area on file, oob in memory" case, fix the shifts so that
we erase the correct number of pages.

Signed-off-by: Ricard Wanderlöf <ricardw@axis.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
hw/block/nand.c

index a68266f88788aa4ce8c1e775c00b93e7e3f4fa5d..f0e34139fec887f6ddd6f61365a09131524759bf 100644 (file)
@@ -712,7 +712,7 @@ static void glue(nand_blk_erase_, PAGE_SIZE)(NANDFlashState *s)
         memset(s->storage + (PAGE(addr) << OOB_SHIFT),
                         0xff, OOB_SIZE << s->erase_shift);
         i = SECTOR(addr);
-        page = SECTOR(addr + (ADDR_SHIFT + s->erase_shift));
+        page = SECTOR(addr + (1 << (ADDR_SHIFT + s->erase_shift)));
         for (; i < page; i ++)
             if (blk_write(s->blk, i, iobuf, 1) < 0) {
                 printf("%s: write error in sector %" PRIu64 "\n", __func__, i);