diff options
-rw-r--r-- | drivers/mtd/spi-nor/spi-nor.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c index eafaeeb2e580..2bda622d4621 100644 --- a/drivers/mtd/spi-nor/spi-nor.c +++ b/drivers/mtd/spi-nor/spi-nor.c | |||
@@ -202,19 +202,24 @@ static int spi_nor_ready(struct spi_nor *nor) | |||
202 | static int spi_nor_wait_till_ready(struct spi_nor *nor) | 202 | static int spi_nor_wait_till_ready(struct spi_nor *nor) |
203 | { | 203 | { |
204 | unsigned long deadline; | 204 | unsigned long deadline; |
205 | int ret; | 205 | int timeout = 0, ret; |
206 | 206 | ||
207 | deadline = jiffies + MAX_READY_WAIT_JIFFIES; | 207 | deadline = jiffies + MAX_READY_WAIT_JIFFIES; |
208 | 208 | ||
209 | do { | 209 | while (!timeout) { |
210 | cond_resched(); | 210 | if (time_after_eq(jiffies, deadline)) |
211 | timeout = 1; | ||
211 | 212 | ||
212 | ret = spi_nor_ready(nor); | 213 | ret = spi_nor_ready(nor); |
213 | if (ret < 0) | 214 | if (ret < 0) |
214 | return ret; | 215 | return ret; |
215 | if (ret) | 216 | if (ret) |
216 | return 0; | 217 | return 0; |
217 | } while (!time_after_eq(jiffies, deadline)); | 218 | |
219 | cond_resched(); | ||
220 | } | ||
221 | |||
222 | dev_err(nor->dev, "flash operation timed out\n"); | ||
218 | 223 | ||
219 | return -ETIMEDOUT; | 224 | return -ETIMEDOUT; |
220 | } | 225 | } |