1) OOB area should be updated irrespective of NAND page size. Earlier it was
updated only for 512byte NAND page.

2) During OOB update fbcr should be equal to OOB size.

Signed-off-by: Poonam Aggrwal <poonam.aggr...@freescale.com>
Signed-off-by: Prabhakar Kushwaha <prabha...@freescale.com>
---
 git://git.kernel.org/pub/scm/linux/kernel/git/galak/powerpc.git (branch next)

 Tested on P1010RDB

 drivers/mtd/nand/fsl_ifc_nand.c |   20 ++++++++------------
 1 files changed, 8 insertions(+), 12 deletions(-)

diff --git a/drivers/mtd/nand/fsl_ifc_nand.c b/drivers/mtd/nand/fsl_ifc_nand.c
index 2df7206..2c02168 100644
--- a/drivers/mtd/nand/fsl_ifc_nand.c
+++ b/drivers/mtd/nand/fsl_ifc_nand.c
@@ -439,20 +439,16 @@ static void fsl_ifc_cmdfunc(struct mtd_info *mtd, 
unsigned int command,
                        out_be32(&ifc->ifc_nand.nand_fir1,
                                 (IFC_FIR_OP_CW1 << IFC_NAND_FIR1_OP5_SHIFT));
 
-                       if (column >= mtd->writesize) {
-                               /* OOB area --> READOOB */
-                               column -= mtd->writesize;
-                               nand_fcr0 |= NAND_CMD_READOOB <<
-                                               IFC_NAND_FCR0_CMD0_SHIFT;
-                               ifc_nand_ctrl->oob = 1;
-                       } else if (column < 256)
+                       if (column < 256)
                                /* First 256 bytes --> READ0 */
                                nand_fcr0 |=
                                NAND_CMD_READ0 << IFC_NAND_FCR0_CMD0_SHIFT;
-                       else
-                               /* Second 256 bytes --> READ1 */
-                               nand_fcr0 |=
-                               NAND_CMD_READ1 << IFC_NAND_FCR0_CMD0_SHIFT;
+               }
+
+               if (column >= mtd->writesize) {
+                       /* OOB area --> READOOB */
+                       column -= mtd->writesize;
+                       ifc_nand_ctrl->oob = 1;
                }
 
                out_be32(&ifc->ifc_nand.nand_fcr0, nand_fcr0);
@@ -465,7 +461,7 @@ static void fsl_ifc_cmdfunc(struct mtd_info *mtd, unsigned 
int command,
                int full_page;
                if (ifc_nand_ctrl->oob) {
                        out_be32(&ifc->ifc_nand.nand_fbcr,
-                                       ifc_nand_ctrl->index);
+                               ifc_nand_ctrl->index - ifc_nand_ctrl->column);
                        full_page = 0;
                } else {
                        out_be32(&ifc->ifc_nand.nand_fbcr, 0);
-- 
1.7.5.4


_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to