|
@@ -202,19 +202,24 @@ static int spi_nor_ready(struct spi_nor *nor)
|
|
static int spi_nor_wait_till_ready(struct spi_nor *nor)
|
|
static int spi_nor_wait_till_ready(struct spi_nor *nor)
|
|
{
|
|
{
|
|
unsigned long deadline;
|
|
unsigned long deadline;
|
|
- int ret;
|
|
|
|
|
|
+ int timeout = 0, ret;
|
|
|
|
|
|
deadline = jiffies + MAX_READY_WAIT_JIFFIES;
|
|
deadline = jiffies + MAX_READY_WAIT_JIFFIES;
|
|
|
|
|
|
- do {
|
|
|
|
- cond_resched();
|
|
|
|
|
|
+ while (!timeout) {
|
|
|
|
+ if (time_after_eq(jiffies, deadline))
|
|
|
|
+ timeout = 1;
|
|
|
|
|
|
ret = spi_nor_ready(nor);
|
|
ret = spi_nor_ready(nor);
|
|
if (ret < 0)
|
|
if (ret < 0)
|
|
return ret;
|
|
return ret;
|
|
if (ret)
|
|
if (ret)
|
|
return 0;
|
|
return 0;
|
|
- } while (!time_after_eq(jiffies, deadline));
|
|
|
|
|
|
+
|
|
|
|
+ cond_resched();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ dev_err(nor->dev, "flash operation timed out\n");
|
|
|
|
|
|
return -ETIMEDOUT;
|
|
return -ETIMEDOUT;
|
|
}
|
|
}
|