* [PATCH 2/2] drivers/mtd/devices/m25p80.c: Fix whole device erase
@ 2012-09-03 16:19 Cédric Cano
2012-09-21 11:44 ` Artem Bityutskiy
0 siblings, 1 reply; 2+ messages in thread
From: Cédric Cano @ 2012-09-03 16:19 UTC (permalink / raw)
To: linux-mtd
From: Cédric Cano <ccano@interfaceconcept.com>
There are two ways to erase SPI Flash devices: sector per sector or the
entire Flash (used when MTD partition is the whole Flash).
When the whole Flash is erased, the SPI command is sent to the device
and the erase function ends. Then, when another access (read, write or
erase) is done, a wait of busy is performed that fails because of Flash
erase time (can be more than 30s in case of whole erase).
This patch removes chip erase and use only sector per sector erase to
erase the chip. When erase is performed, Flash accesses can be done.
C. Cano
Signed-off-by: Cédric Cano <ccano@interfaceconcept.com>
---
--- linux-3.5.3/drivers/mtd/devices/m25p80.c 2012-09-03
18:03:35.787723207 +0200
+++ linux-3.5.3/drivers/mtd/devices/m25p80.c 2012-09-03
18:01:17.455724709 +0200
@@ -202,31 +202,6 @@
return -EBUSY;
}
-/*
- * 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] */
@@ -301,33 +276,17 @@
mutex_lock(&flash->lock);
- /* whole-chip erase? */
- if (len == flash->mtd.size) {
- ret = erase_chip(flash);
+ /* "sector"-at-a-time erase */
+ while (len) {
+ ret = erase_sector(flash, addr);
if (ret) {
instr->state = MTD_ERASE_FAILED;
mutex_unlock(&flash->lock);
return ret;
}
- /* 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) {
- ret = erase_sector(flash, addr)
- if (ret) {
- instr->state = MTD_ERASE_FAILED;
- mutex_unlock(&flash->lock);
- return ret;
- }
-
- addr += mtd->erasesize;
- len -= mtd->erasesize;
- }
+ addr += mtd->erasesize;
+ len -= mtd->erasesize;
}
mutex_unlock(&flash->lock);
---
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH 2/2] drivers/mtd/devices/m25p80.c: Fix whole device erase
2012-09-03 16:19 [PATCH 2/2] drivers/mtd/devices/m25p80.c: Fix whole device erase Cédric Cano
@ 2012-09-21 11:44 ` Artem Bityutskiy
0 siblings, 0 replies; 2+ messages in thread
From: Artem Bityutskiy @ 2012-09-21 11:44 UTC (permalink / raw)
To: Cédric Cano; +Cc: linux-mtd
[-- Attachment #1: Type: text/plain, Size: 919 bytes --]
On Mon, 2012-09-03 at 18:19 +0200, Cédric Cano wrote:
> From: Cédric Cano <ccano@interfaceconcept.com>
>
> There are two ways to erase SPI Flash devices: sector per sector or the
> entire Flash (used when MTD partition is the whole Flash).
>
> When the whole Flash is erased, the SPI command is sent to the device
> and the erase function ends. Then, when another access (read, write or
> erase) is done, a wait of busy is performed that fails because of Flash
> erase time (can be more than 30s in case of whole erase).
>
> This patch removes chip erase and use only sector per sector erase to
> erase the chip. When erase is performed, Flash accesses can be done.
Please, re-send the patch with a better commit message which not only
explains _what_ you do, but also _why_ you do this, which problem you
solve, and what is the impact of the patch.
--
Best Regards,
Artem Bityutskiy
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2012-09-21 11:44 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-09-03 16:19 [PATCH 2/2] drivers/mtd/devices/m25p80.c: Fix whole device erase Cédric Cano
2012-09-21 11:44 ` Artem Bityutskiy
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).