|
@@ -407,9 +407,17 @@ static void fsl_elbc_cmdfunc(struct mtd_info *mtd, unsigned int command,
|
|
|
page_addr, column);
|
|
|
|
|
|
elbc_fcm_ctrl->column = column;
|
|
|
- elbc_fcm_ctrl->oob = 0;
|
|
|
elbc_fcm_ctrl->use_mdr = 1;
|
|
|
|
|
|
+ if (column >= mtd->writesize) {
|
|
|
+ /* OOB area */
|
|
|
+ column -= mtd->writesize;
|
|
|
+ elbc_fcm_ctrl->oob = 1;
|
|
|
+ } else {
|
|
|
+ WARN_ON(column != 0);
|
|
|
+ elbc_fcm_ctrl->oob = 0;
|
|
|
+ }
|
|
|
+
|
|
|
fcr = (NAND_CMD_STATUS << FCR_CMD1_SHIFT) |
|
|
|
(NAND_CMD_SEQIN << FCR_CMD2_SHIFT) |
|
|
|
(NAND_CMD_PAGEPROG << FCR_CMD3_SHIFT);
|
|
@@ -434,16 +442,12 @@ static void fsl_elbc_cmdfunc(struct mtd_info *mtd, unsigned int command,
|
|
|
(FIR_OP_CW1 << FIR_OP6_SHIFT) |
|
|
|
(FIR_OP_RS << FIR_OP7_SHIFT));
|
|
|
|
|
|
- if (column >= mtd->writesize) {
|
|
|
+ if (elbc_fcm_ctrl->oob)
|
|
|
/* OOB area --> READOOB */
|
|
|
- column -= mtd->writesize;
|
|
|
fcr |= NAND_CMD_READOOB << FCR_CMD0_SHIFT;
|
|
|
- elbc_fcm_ctrl->oob = 1;
|
|
|
- } else {
|
|
|
- WARN_ON(column != 0);
|
|
|
+ else
|
|
|
/* First 256 bytes --> READ0 */
|
|
|
fcr |= NAND_CMD_READ0 << FCR_CMD0_SHIFT;
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
out_be32(&lbc->fcr, fcr);
|