mtd: cfi_cmdset_0002: only check errors when ready in cfi_check_err_status()
authorSergei Shtylyov <sergei.shtylyov@cogentembedded.com>
Thu, 31 Oct 2019 20:37:27 +0000 (23:37 +0300)
committerVignesh Raghavendra <vigneshr@ti.com>
Sat, 9 Nov 2019 09:13:41 +0000 (14:43 +0530)
Cypress S26K{L|S}P{128|256|512}S datasheet says that the error bits in
the status register are only valid when the "device ready" bit 7 is set.
Add the check for the device ready bit in cfi_check_err_status() as that
function isn't always called with this bit set.

Fixes: 4844ef80305d ("mtd: cfi_cmdset_0002: Add support for polling status register")
Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
drivers/mtd/chips/cfi_cmdset_0002.c

index 5b2a25b..d5c2e54 100644 (file)
@@ -136,6 +136,10 @@ static void cfi_check_err_status(struct map_info *map, struct flchip *chip,
                         cfi->device_type, NULL);
        status = map_read(map, adr);
 
+       /* The error bits are invalid while the chip's busy */
+       if (!map_word_bitsset(map, status, CMD(CFI_SR_DRB)))
+               return;
+
        if (map_word_bitsset(map, status, CMD(0x3a))) {
                unsigned long chipstatus = MERGESTATUS(status);