mvebu: add a patch to deal with excessive latencies/delays during flash PIO command...
authorFelix Fietkau <nbd@nbd.name>
Fri, 10 Jun 2016 08:47:34 +0000 (10:47 +0200)
committerFelix Fietkau <nbd@nbd.name>
Fri, 10 Jun 2016 08:47:40 +0000 (10:47 +0200)
Signed-off-by: Felix Fietkau <nbd@nbd.name>
target/linux/mvebu/patches-4.4/110-pxa3xxx_nand-handle-PIO-delays.patch [new file with mode: 0644]

diff --git a/target/linux/mvebu/patches-4.4/110-pxa3xxx_nand-handle-PIO-delays.patch b/target/linux/mvebu/patches-4.4/110-pxa3xxx_nand-handle-PIO-delays.patch
new file mode 100644 (file)
index 0000000..7fa5697
--- /dev/null
@@ -0,0 +1,36 @@
+Handle delays/excessive latency during flash command processing with PIO.
+
+Signed-off-by: Felix Fietkau <nbd@nbd.name>
+
+--- a/drivers/mtd/nand/pxa3xx_nand.c
++++ b/drivers/mtd/nand/pxa3xx_nand.c
+@@ -227,6 +227,7 @@ struct pxa3xx_nand_info {
+       int                     use_dma;        /* use DMA ? */
+       int                     use_spare;      /* use spare ? */
+       int                     need_wait;
++      int                     pio_progress;
+       /* Amount of real data per full chunk */
+       unsigned int            chunk_size;
+@@ -769,6 +770,7 @@ static irqreturn_t pxa3xx_nand_irq_threa
+ {
+       struct pxa3xx_nand_info *info = data;
++      info->pio_progress = 1;
+       handle_data_pio(info);
+       info->state = STATE_CMD_DONE;
+@@ -1175,8 +1177,13 @@ static void nand_cmdfunc(struct mtd_info
+               info->need_wait = 1;
+               pxa3xx_nand_start(info);
++retry:
++              info->pio_progress = 0;
+               if (!wait_for_completion_timeout(&info->cmd_complete,
+                   CHIP_DELAY_TIMEOUT)) {
++                      if (info->pio_progress)
++                          goto retry;
++
+                       dev_err(&info->pdev->dev, "Wait time out!!!\n");
+                       /* Stop State Machine for next command cycle */
+                       pxa3xx_nand_stop(info);