All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Cédric Cano" <ccano@interfaceconcept.com>
To: linux-mtd@lists.infradead.org
Subject: Fwd: [PATCH 1/1] drivers/mtd/devices/m25p80.c: Fix whole device erase
Date: Fri, 21 Sep 2012 14:39:51 +0200	[thread overview]
Message-ID: <505C6017.8060607@ic.fr> (raw)
In-Reply-To: <5045BCA9.5040401@ic.fr>

From: Cédric Cano<ccano@interfaceconcept.com>

When the whole SPI Flash is erased, the chip erase command is sent to the
device without waiting for end of erase. So next read/write accesses are
in failure.

This patch removes chip erase to use only sector per sector erase for
whole Flash too. When chip erase is done, Flash can be accessed without
error.

C. Cano

Signed-off-by: Cédric Cano<ccano@interfaceconcept.com>
---
  drivers/mtd/devices/m25p80.c |   50 +++++-------------------------------------
  1 file changed, 5 insertions(+), 45 deletions(-)

diff --git a/drivers/mtd/devices/m25p80.c b/drivers/mtd/devices/m25p80.c
index 5257345..b8956df 100644
--- a/drivers/mtd/devices/m25p80.c
+++ b/drivers/mtd/devices/m25p80.c
@@ -202,31 +202,6 @@ static int wait_till_ready(struct m25p *flash)
  	return 1;
  }
  
-/*
- * Erase the whole flash memory
- *
- * Returns 0 if successful, non-zero otherwise.
- */
-static int erase_chip(struct m25p *flash)
-{
-	pr_debug("%s: %s %lldKiB\n", dev_name(&flash->spi->dev), __func__,
-			(long long)(flash->mtd.size >> 10));
-
-	/* Wait until finished previous write command. */
-	if (wait_till_ready(flash))
-		return 1;
-
-	/* Send write enable, then erase commands. */
-	write_enable(flash);
-
-	/* Set up command buffer. */
-	flash->command[0] = OPCODE_CHIP_ERASE;
-
-	spi_write(flash->spi, flash->command, 1);
-
-	return 0;
-}
-
  static void m25p_addr2cmd(struct m25p *flash, unsigned int addr, u8 *cmd)
  {
  	/* opcode is in cmd[0] */
@@ -297,31 +272,16 @@ static int m25p80_erase(struct mtd_info *mtd, struct erase_info *instr)
  
  	mutex_lock(&flash->lock);
  
-	/* whole-chip erase? */
-	if (len == flash->mtd.size) {
-		if (erase_chip(flash)) {
+	/* "sector"-at-a-time erase */
+	while (len) {
+		if (erase_sector(flash, addr)) {
  			instr->state = MTD_ERASE_FAILED;
  			mutex_unlock(&flash->lock);
  			return -EIO;
  		}
  
-	/* REVISIT in some cases we could speed up erasing large regions
-	 * by using OPCODE_SE instead of OPCODE_BE_4K.  We may have set up
-	 * to use "small sector erase", but that's not always optimal.
-	 */
-
-	/* "sector"-at-a-time erase */
-	} else {
-		while (len) {
-			if (erase_sector(flash, addr)) {
-				instr->state = MTD_ERASE_FAILED;
-				mutex_unlock(&flash->lock);
-				return -EIO;
-			}
-
-			addr += mtd->erasesize;
-			len -= mtd->erasesize;
-		}
+		addr += mtd->erasesize;
+		len -= mtd->erasesize;
  	}
  
  	mutex_unlock(&flash->lock);
-- 

  reply	other threads:[~2012-09-21 12:39 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-04  8:32 [PATCH 1/1] drivers/mtd/devices/m25p80.c: Fix whole device erase Cédric Cano
2012-09-21 12:39 ` Cédric Cano [this message]
2012-09-21 13:42   ` Fwd: " Artem Bityutskiy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=505C6017.8060607@ic.fr \
    --to=ccano@interfaceconcept.com \
    --cc=linux-mtd@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.