[U-Boot] [PATCH] fsl_ifc_nand: Added random output enable cmd

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.desai@rockwellcollins.com Signed-off-by: Matthew Weber matthew.weber@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);
participants (1)
-
Matt Weber