Index: arch/arm/mach-omap2/gpmc.c =================================================================== --- arch/arm/mach-omap2/gpmc.c (revision 254089) +++ arch/arm/mach-omap2/gpmc.c (working copy) @@ -854,7 +854,7 @@ bch_mod = 0; bch_wrapmode = 0x09; } else if (ecc_type == OMAP_ECC_BCH8_CODE_HW) { - eccsize1 = 0x2; eccsize0 = 0x1A; + eccsize1 = 0x10; eccsize0 = 0x0; bch_mod = 1; bch_wrapmode = 0x01; } else @@ -870,7 +870,7 @@ bch_mod = 0; bch_wrapmode = 0x06; } else if (ecc_type == OMAP_ECC_BCH8_CODE_HW) { - eccsize1 = 0x1c; eccsize0 = 0x00; + eccsize1 = 0x10; eccsize0 = 0x0; bch_mod = 1; bch_wrapmode = 0x01; } else Index: drivers/mtd/nand/omap2.c =================================================================== --- drivers/mtd/nand/omap2.c (revision 254089) +++ drivers/mtd/nand/omap2.c (working copy) @@ -958,6 +958,9 @@ eccsize = BCH8_ECC_OOB_BYTES; for (i = 0; i < blockCnt; i++) { + if (memcmp(read_ecc, calc_ecc, 13) == 0) { + continue; + } eccflag = 0; /* check if area is flashed */ for (j = 0; (j < eccsize) && (eccflag == 0); j++) @@ -1237,7 +1240,6 @@ } else if (pdata->ecc_opt == OMAP_ECC_BCH8_CODE_HW) { info->nand.ecc.bytes = 14; info->nand.ecc.size = 512; - info->nand.ecc.read_page = omap_read_page_bch; } else { info->nand.ecc.bytes = 3; info->nand.ecc.size = 512; Index: drivers/mtd/nand/nand_base.c =================================================================== --- drivers/mtd/nand/nand_base.c (revision 254089) +++ drivers/mtd/nand/nand_base.c (working copy) @@ -3410,6 +3410,7 @@ break; } } + mtd->subpage_sft = 0; chip->subpagesize = mtd->writesize >> mtd->subpage_sft; /* Initialize state */