ar71xx: ar934x_nfc: increase DMA retry count
[openwrt/staging/wigyori.git] / target / linux / ar71xx / files / drivers / mtd / nand / ar934x_nfc.c
index 86899fd720c65c601dc4fc1e2a0963484a3dd6b2..67844e3a48fbf0b0bff7bcba2fdba8af0de094f0 100644 (file)
 #define AR934X_NFC_DEV_READY_TIMEOUT   25 /* msecs */
 #define AR934X_NFC_DMA_READY_TIMEOUT   25 /* msecs */
 #define AR934X_NFC_DONE_TIMEOUT                1000
+#define AR934X_NFC_DMA_RETRIES         20
 
 #define AR934X_NFC_USE_IRQ             true
 #define AR934X_NFC_IRQ_MASK            AR934X_NFC_INT_DEV_RDY(0)
@@ -465,7 +466,7 @@ retry:
                        (write) ? "write" : "read", page_addr);
 
                ar934x_nfc_restart(nfc);
-               if (retries++ < 5)
+               if (retries++ < AR934X_NFC_DMA_RETRIES)
                        goto retry;
 
                dev_err(nfc->parent, "%s operation failed on page %d\n",
@@ -628,25 +629,27 @@ ar934x_nfc_cmdfunc(struct mtd_info *mtd, unsigned int command, int column,
                break;
 
        case NAND_CMD_READOOB:
-               if (nfc->small_page) {
+               if (nfc->small_page)
                        ar934x_nfc_send_read(nfc, NAND_CMD_READOOB,
                                             column, page_addr,
                                             mtd->oobsize,
                                             true);
-               } else {
+               else
                        ar934x_nfc_send_read(nfc, NAND_CMD_READ0,
-                                            column, page_addr,
-                                            mtd->writesize + mtd->oobsize,
+                                            mtd->writesize, page_addr,
+                                            mtd->oobsize,
                                             true);
-                       nfc->buf_index = mtd->writesize;
-               }
                break;
 
        case NAND_CMD_RNDOUT:
+               if (WARN_ON(nfc->small_page))
+                       break;
+
                /* emulate subpage read */
-               ar934x_nfc_send_read(nfc, nfc->rndout_read_cmd, column,
+               ar934x_nfc_send_read(nfc, nfc->rndout_read_cmd, 0,
                                     nfc->rndout_page_addr,
-                                    mtd->writesize, false);
+                                    mtd->writesize + mtd->oobsize, false);
+               nfc->buf_index = column;
                break;
 
        case NAND_CMD_ERASE1: