]> git.karo-electronics.de Git - karo-tx-uboot.git/commitdiff
mtd: vf610_nfc: mark page as dirty on block erase
authorStefan Agner <stefan@agner.ch>
Tue, 24 Mar 2015 16:54:19 +0000 (17:54 +0100)
committerLothar Waßmann <LW@KARO-electronics.de>
Tue, 1 Sep 2015 12:38:12 +0000 (14:38 +0200)
The driver tries to re-use the page buffer by storing the page
number of the current page in the buffer. The page is only read
if the requested page number is not currently in the buffer. When
a block is erased, the page number is marked as invalid if the
erased page equals the one currently in the cache. However, since
a erase block consists of multiple pages, also other page numbers
could be affected.

The commands to reproduce this issue (on a written page):
> nand dump 0x800
> nand erase 0x0 0x20000
> nand dump 0x800

The second nand dump command returns the data from the buffer,
while in fact the page is erased (0xff).

Avoid the hassle to calculate whether the page is affected or not,
but set the page buffer unconditionally to invalid instead.

Signed-off-by: Stefan Agner <stefan@agner.ch>
drivers/mtd/nand/vf610_nfc.c

index 921c06c6c8baa639f76b28f280dc2c9c5d05a123..32a98dc55a1a01c98c9e1072ee4ccc7b07ff1b4a 100644 (file)
@@ -369,8 +369,7 @@ static void vf610_nfc_command(struct mtd_info *mtd, unsigned command,
                break;
 
        case NAND_CMD_ERASE1:
-               if (nfc->page == page)
-                       nfc->page = -1;
+               nfc->page = -1;
                vf610_nfc_send_commands(nfc->regs, command,
                                        NAND_CMD_ERASE2, ERASE_CMD_CODE);
                vf610_nfc_addr_cycle(mtd, column, page);