mtd: Bug in m25p80.c during whole-chip erase
There is a logic error in "whole chip erase" for the m25p80 family. If the whole device is successfully erased, erase_chip() will return 0, and the code will fall through to the "else" clause, and do sector-by-sector erase in addition to the whole-chip erase. This patch corrects that. Also, the MAX_READY_WAIT_COUNT is insufficient for an m25p16 connected to a 400 MHz powerpc. Increasing it allows me to successfully program the device on my board. Signed-off-by: Steven A. Falco <sfalco@harris.com> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
This commit is contained in:
parent
e769354895
commit
3f33b0aaac
@ -54,7 +54,7 @@
|
||||
#define SR_SRWD 0x80 /* SR write protect */
|
||||
|
||||
/* Define max times to check status register before we give up. */
|
||||
#define MAX_READY_WAIT_COUNT 100000
|
||||
#define MAX_READY_WAIT_COUNT 1000000
|
||||
#define CMD_SIZE 4
|
||||
|
||||
#ifdef CONFIG_M25PXX_USE_FAST_READ
|
||||
@ -246,10 +246,12 @@ static int m25p80_erase(struct mtd_info *mtd, struct erase_info *instr)
|
||||
mutex_lock(&flash->lock);
|
||||
|
||||
/* whole-chip erase? */
|
||||
if (len == flash->mtd.size && erase_chip(flash)) {
|
||||
instr->state = MTD_ERASE_FAILED;
|
||||
mutex_unlock(&flash->lock);
|
||||
return -EIO;
|
||||
if (len == flash->mtd.size) {
|
||||
if (erase_chip(flash)) {
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user