Fix erase timeout in M25P80 driver
PATCH 1/1 Fix erase timeout in M25P80 driver
Extend erase timeout in M25P80 SPI Flash driver.
The M25P80 drivers fails erasing sectors on a M25P128 because the ready wait timeout is too short. Change the timeout from a simple loop count to a suitable number of seconds.
---
drivers/mtd/devices/m25p80.c +4 -7
@@ -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_JIFFIES (10 * HZ)/* eg. M25P128 specs 6s max sector erase */ #define CMD_SIZE 4#ifdef CONFIG_M25PXX_USE_FAST_READ
@@ -145,19 +145,16 @@*/ static int wait_till_ready (struct m25p *flash) { -int count; +unsigned long deadline;int sr; -/* one chip guarantees max 5 msec wait here after page writes, -* but potentially three seconds (!) after page erase. -*/ -for (count =0 ; count <MAX_READY_WAIT_COUNT ; count++) { +for (deadline = jiffies +MAX_READY_WAIT_JIFFIES ; !time_after_eq (jiffies, deadline);) {if ((sr =read_sr (flash)) <0 )break ;else if (!(sr &SR_WIP ))return 0 ; -/* REVISIT sometimes sleeping would be best */ +cond_resched (); }return 1 ;
Quoted 7 lines · Peter Horton
Extend erase timeout in M25P80 SPI Flash driver.
The M25P80 drivers fails erasing sectors on a M25P128 because the ready wait timeout is too short. Change the timeout from a simple loop count to a suitable number of seconds.
Signed-off-by Peter Horton <[email protected]>
This solves the problem I've seen on the QNAP TS-219.
Signature · 2 lines
Martin Michlmayr http://www.cyrius.com/
Quoted 1 line · Peter Horton
+ for (deadline = jiffies +
MAX_READY_WAIT_JIFFIES; !time_after_eq(jiffies, deadline);) {
this would make more sense as a while loop:
deadline = jiffies + MAX_READY_WAIT_JIFFIES; while (!time_after_eq(jiffies, deadline)) {
maybe even more sense as a do { ... } while (...) ...
a for loop just looks weird ... but it should do what you want, so whatever -mike