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

login
register
mail settings
Submitter Harald Nordgard-Hansen
Date Nov. 23, 2012, 10:11 p.m.
Message ID <50AFF477.2030803@pvv.org>
Download mbox | patch
Permalink /patch/201418/
State New
Headers show

Comments

Harald Nordgard-Hansen - Nov. 23, 2012, 10:11 p.m.
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
Artem Bityutskiy - Dec. 3, 2012, 1:24 p.m.
On Fri, 2012-11-23 at 23:11 +0100, Harald Nordgard-Hansen wrote:
> > 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.

Pushed to l2-mtd.git, thanks.

However, I had to do the following:

1. Make a commit message for you by copying parts of your e-mail.
2. Create a Signe-of-by for you.
3. Fix these checkpatch.pl warnings:

WARNING:LONG_LINE: line over 80 characters
#48: FILE: drivers/mtd/chips/cfi_cmdset_0002.c:1546:
+       cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);

WARNING:LONG_LINE: line over 80 characters
#49: FILE: drivers/mtd/chips/cfi_cmdset_0002.c:1547:
+       cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL);

WARNING:LONG_LINE: line over 80 characters
#50: FILE: drivers/mtd/chips/cfi_cmdset_0002.c:1548:
+       cfi_send_gen_cmd(0xF0, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);

Patch

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 */