Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7854643a authored by Chen Gong's avatar Chen Gong Committed by David Woodhouse
Browse files

[MTD] m25p80: chip erase != block erase != sector erase



This fixes broken terminology added in the "m25p80.c erase enhance" patch,
which added a chip erase command but called it "block erase".  There are
already two block erase commands; blocks are 4KiB or 32KiB.  There's also
a sector erase (usually 64 KiB).  Chip erase typically covers Megabytes.

  OPCODE_BE   ==> OPCODE_CHIP_ERASE
  erase_block ==> erase_chip

[dbrownell@users.sourceforge.net: update sector erase comments too ]

Signed-off-by: default avatarChen Gong <clumsycg@gmail.com>
Signed-off-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
parent 9168ab86
Loading
Loading
Loading
Loading
+13 −10
Original line number Original line Diff line number Diff line
@@ -39,7 +39,7 @@
#define	OPCODE_PP		0x02	/* Page program (up to 256 bytes) */
#define	OPCODE_PP		0x02	/* Page program (up to 256 bytes) */
#define	OPCODE_BE_4K		0x20	/* Erase 4KiB block */
#define	OPCODE_BE_4K		0x20	/* Erase 4KiB block */
#define	OPCODE_BE_32K		0x52	/* Erase 32KiB block */
#define	OPCODE_BE_32K		0x52	/* Erase 32KiB block */
#define	OPCODE_BE		0xc7	/* Erase whole flash block */
#define	OPCODE_CHIP_ERASE	0xc7	/* Erase whole flash chip */
#define	OPCODE_SE		0xd8	/* Sector erase (usually 64KiB) */
#define	OPCODE_SE		0xd8	/* Sector erase (usually 64KiB) */
#define	OPCODE_RDID		0x9f	/* Read JEDEC ID */
#define	OPCODE_RDID		0x9f	/* Read JEDEC ID */


@@ -167,7 +167,7 @@ static int wait_till_ready(struct m25p *flash)
 *
 *
 * Returns 0 if successful, non-zero otherwise.
 * Returns 0 if successful, non-zero otherwise.
 */
 */
static int erase_block(struct m25p *flash)
static int erase_chip(struct m25p *flash)
{
{
	DEBUG(MTD_DEBUG_LEVEL3, "%s: %s %dKiB\n",
	DEBUG(MTD_DEBUG_LEVEL3, "%s: %s %dKiB\n",
			flash->spi->dev.bus_id, __func__,
			flash->spi->dev.bus_id, __func__,
@@ -181,7 +181,7 @@ static int erase_block(struct m25p *flash)
	write_enable(flash);
	write_enable(flash);


	/* Set up command buffer. */
	/* Set up command buffer. */
	flash->command[0] = OPCODE_BE;
	flash->command[0] = OPCODE_CHIP_ERASE;


	spi_write(flash->spi, flash->command, 1);
	spi_write(flash->spi, flash->command, 1);


@@ -250,15 +250,18 @@ static int m25p80_erase(struct mtd_info *mtd, struct erase_info *instr)


	mutex_lock(&flash->lock);
	mutex_lock(&flash->lock);


	/* REVISIT in some cases we could speed up erasing large regions
	/* whole-chip erase? */
	 * by using OPCODE_SE instead of OPCODE_BE_4K
	if (len == flash->mtd.size && erase_chip(flash)) {
	 */

	/* now erase those sectors */
	if (len == flash->mtd.size && erase_block(flash)) {
		instr->state = MTD_ERASE_FAILED;
		instr->state = MTD_ERASE_FAILED;
		mutex_unlock(&flash->lock);
		mutex_unlock(&flash->lock);
		return -EIO;
		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 {
	} else {
		while (len) {
		while (len) {
			if (erase_sector(flash, addr)) {
			if (erase_sector(flash, addr)) {