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;
-                               ctrl->oob = 1;
-                       } else if (column < 256) {
-                               /* First 256 bytes --> READ0 */
-                               nand_fcr0 |= NAND_CMD_READ0 << FCR_CMD0_SHIFT;
-                       } else {
-                               /* Second 256 bytes --> READ1 */
-                               nand_fcr0 |= NAND_CMD_READ1 << FCR_CMD0_SHIFT;
-                       }
+                       if (column >= mtd->writesize)
+                               nand_fcr0 |=
+                               NAND_CMD_READOOB << IFC_NAND_FCR0_CMD0_SHIFT;
+                       else
+                               nand_fcr0 |=
+                               NAND_CMD_READ0 << IFC_NAND_FCR0_CMD0_SHIFT;
                }
 
+               if (column >= mtd->writesize) {
+                       /* OOB area --> READOOB */
+                       column -= mtd->writesize;
+                       ctrl->oob = 1;
+               }
                out_be32(&ifc->ifc_nand.nand_fcr0, nand_fcr0);
                set_addr(mtd, column, page_addr, ctrl->oob);
                return;
        /* PAGEPROG reuses all of the setup from SEQIN and adds the length */
        case NAND_CMD_PAGEPROG:
                if (ctrl->oob)
-                       out_be32(&ifc->ifc_nand.nand_fbcr, ctrl->index);
+                       out_be32(&ifc->ifc_nand.nand_fbcr,
+                                       ctrl->index - ctrl->column);
                else
                        out_be32(&ifc->ifc_nand.nand_fbcr, 0);