Re: Fix recovery after failed write-buffer operation in cfi_cmdset_0002.c

Harald Nordgard-Hansen
2012-11-23T22:11:13Z

[-- Attachment #1: Type: text/plain, Size: 611 bytes --]

On 11/21/12 08:48, Artem Bityutskiy wrote:
> Hi, your patch is not applicable, it is line-wrapped. Can you
> please send a patch I can easily apply?

Sorry about that. It's been way too many years since I regularly sent
patches in mail. If this attempt does not work better, I'll just do
it all manually instead of trying to use these new-fangled MUAs. :-)

> Would be nice to put a short comment about what you do and why, may
> be some reference as well. Just to make sure if someone reads the
> code, he/she has some clue what are these about.

Hopefully in place now.

-Harald
--
Harald Nordgård-Hansen

[-- Attachment #2: write_buffer_recovery.patch --]
[-- Type: text/x-patch, Size: 1110 bytes --]

diff -ru a/drivers/mtd/chips/cfi_cmdset_0002.c b/drivers/mtd/chips/cfi_cmdset_0002.c
--- a/drivers/mtd/chips/cfi_cmdset_0002.c 2012-11-23 22:43:05.000000000 +0100
+++ b/drivers/mtd/chips/cfi_cmdset_0002.c 2012-11-23 23:01:58.000000000 +0100
@@ -1536,8 +1536,16 @@
UDELAY(map, chip, adr, 1);
}

- /* reset on all failures. */
- map_write( map, CMD(0xF0), chip->start );
+ /*
+ * 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);
xip_enable(map, chip, adr);
/* FIXME - should have reset delay before continuing */