]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/commitdiff
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)
committerKhalid Elmously <khalid.elmously@canonical.com>
Fri, 14 Feb 2020 06:00:53 +0000 (01:00 -0500)
BugLink: https://bugs.launchpad.net/bugs/1862429
commit 72914a8cff7e1d910c58e125e15a0da409e3135f upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Khalid Elmously <khalid.elmously@canonical.com>
drivers/mtd/chips/cfi_cmdset_0002.c

index 7d29f596bc9e3bb8f203aab860b96fd833045e88..fa3f4a5ba49823e17aec903607acb135971d3a52 100644 (file)
@@ -134,6 +134,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);