#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)
(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",
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: