This patch adds random output enable command support in IFC nand
controller driver. This command implements change read
column (05h-E0h).

Signed-off-by: Ronak Desai <ronak.de...@rockwellcollins.com>
Signed-off-by: Matthew Weber <matthew.we...@rockwellcollins.com>
---
 drivers/mtd/nand/fsl_ifc_nand.c | 30 +++++++++++++++++++++++++++---
 1 file changed, 27 insertions(+), 3 deletions(-)

diff --git a/drivers/mtd/nand/fsl_ifc_nand.c b/drivers/mtd/nand/fsl_ifc_nand.c
index 7001cbd..b4e05c6 100644
--- a/drivers/mtd/nand/fsl_ifc_nand.c
+++ b/drivers/mtd/nand/fsl_ifc_nand.c
@@ -460,10 +460,11 @@ static void fsl_ifc_cmdfunc(struct mtd_info *mtd, 
unsigned int command,
 
                /*
                 * although currently it's 8 bytes for READID, we always read
-                * the maximum 256 bytes(for PARAM)
+                * the maximum 8192 bytes(for PARAM) supported by IFC controller
+                * as extended page may be available for some NAND devices.
                 */
-               ifc_out32(&ifc->ifc_nand.nand_fbcr, 256);
-               ctrl->read_bytes = 256;
+               ifc_out32(&ifc->ifc_nand.nand_fbcr, 0); /* Read whole page */
+               ctrl->read_bytes = 8192; /* Maximum supported page by IFC */
 
                set_addr(mtd, 0, 0, 0);
                fsl_ifc_run_command(mtd);
@@ -596,6 +597,29 @@ static void fsl_ifc_cmdfunc(struct mtd_info *mtd, unsigned 
int command,
                fsl_ifc_run_command(mtd);
                return;
 
+       case NAND_CMD_RNDOUT: {
+               __le16 Tccs = 0;
+               chip->onfi_version ? (Tccs = chip->onfi_params.t_ccs)
+                                       : (Tccs = chip->jedec_params.t_ccs);
+               ifc_out32(&ifc->ifc_nand.nand_fcr0,
+                               (IFC_FIR_OP_CW0 << IFC_NAND_FIR0_OP0_SHIFT) |
+                               (IFC_FIR_OP_CA0 << IFC_NAND_FIR0_OP1_SHIFT) |
+                               (IFC_FIR_OP_CMD1 << IFC_NAND_FIR0_OP2_SHIFT) |
+                               (IFC_FIR_OP_NWAIT << IFC_NAND_FIR0_OP3_SHIFT));
+
+               ifc_out32(&ifc->ifc_nand.nand_fcr0,
+                               (NAND_CMD_RNDOUT << IFC_NAND_FCR0_CMD0_SHIFT) |
+                               (NAND_CMD_RNDOUTSTART << 
IFC_NAND_FCR0_CMD1_SHIFT));
+
+               /* Wait for minimum change column set-up time. But it does not 
harm
+                * to wait more time, so calculated based on 333.3 MHz input 
IFC clock
+                */
+               ifc_out32(&ifc->ifc_nand.ncfgr, (0xFF & (le16_to_cpu(Tccs)/3)));
+               set_addr(mtd, column, 0, 0);
+               fsl_ifc_run_command(mtd);
+               return;
+       }
+
        default:
                printf("%s: error, unsupported command 0x%x.\n",
                        __func__, command);
-- 
1.9.1

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to