]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
mtd: cfi_cmdset_0002: Split write-to-buffer-reset sequence
authorTokunori Ikegami <ikegami.t@gmail.com>
Mon, 5 Aug 2019 19:03:23 +0000 (04:03 +0900)
committerVignesh Raghavendra <vigneshr@ti.com>
Tue, 27 Aug 2019 12:25:53 +0000 (17:55 +0530)
Just refactor to split the sequence from do_write_buffer().

Cc: Fabio Bettoni <fbettoni@gmail.com>
Co: Hauke Mehrtens <hauke@hauke-m.de>
Cc: Chris Packham <chris.packham@alliedtelesis.co.nz>
Cc: Joakim Tjernlund <Joakim.Tjernlund@infinera.com>
Cc: linux-mtd@lists.infradead.org
Signed-off-by: Tokunori Ikegami <ikegami.t@gmail.com>
Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
drivers/mtd/chips/cfi_cmdset_0002.c

index d7e7a1a8cbdf48c863b83842ee9e0c0a4fdeba39..8f0ee552837e8228a67c11db76fa403f17a3afaf 100644 (file)
@@ -1919,6 +1919,27 @@ static int cfi_amdstd_write_words(struct mtd_info *mtd, loff_t to, size_t len,
        return 0;
 }
 
+static void __xipram do_write_buffer_reset(struct map_info *map,
+                                          struct flchip *chip,
+                                          struct cfi_private *cfi)
+{
+       /*
+        * Recovery from write-buffer programming failures requires
+        * the write-to-buffer-reset sequence.  Since the last part
+        * of the sequence also works as a normal reset, we can run
+        * the same commands regardless of why we are here.
+        * See e.g.
+        * http://www.spansion.com/Support/Application%20Notes/MirrorBit_Write_Buffer_Prog_Page_Buffer_Read_AN.pdf
+        */
+       cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi,
+                        cfi->device_type, NULL);
+       cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi,
+                        cfi->device_type, NULL);
+       cfi_send_gen_cmd(0xF0, cfi->addr_unlock1, chip->start, map, cfi,
+                        cfi->device_type, NULL);
+
+       /* FIXME - should have reset delay before continuing */
+}
 
 /*
  * FIXME: interleaved mode not tested, and probably not supported!
@@ -2026,23 +2047,8 @@ static int __xipram do_write_buffer(struct map_info *map, struct flchip *chip,
        }
 
        if (ret) {
-               /*
-                * Recovery from write-buffer programming failures requires
-                * the write-to-buffer-reset sequence.  Since the last part
-                * of the sequence also works as a normal reset, we can run
-                * the same commands regardless of why we are here.
-                * See e.g.
-                * http://www.spansion.com/Support/Application%20Notes/MirrorBit_Write_Buffer_Prog_Page_Buffer_Read_AN.pdf
-                */
                cfi_check_err_status(map, chip, adr);
-               cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi,
-                                cfi->device_type, NULL);
-               cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi,
-                                cfi->device_type, NULL);
-               cfi_send_gen_cmd(0xF0, cfi->addr_unlock1, chip->start, map, cfi,
-                                cfi->device_type, NULL);
-               /* FIXME - should have reset delay before continuing */
-
+               do_write_buffer_reset(map, chip, cfi);
                pr_err("MTD %s(): software timeout, address:0x%.8lx.\n",
                       __func__, adr);
        }