|
@@ -32,13 +32,11 @@
|
|
|
/**
|
|
|
* struct nand_bch_control - private NAND BCH control structure
|
|
|
* @bch: BCH control structure
|
|
|
- * @ecclayout: private ecc layout for this BCH configuration
|
|
|
* @errloc: error location array
|
|
|
* @eccmask: XOR ecc mask, allows erased pages to be decoded as valid
|
|
|
*/
|
|
|
struct nand_bch_control {
|
|
|
struct bch_control *bch;
|
|
|
- struct nand_ecclayout ecclayout;
|
|
|
unsigned int *errloc;
|
|
|
unsigned char *eccmask;
|
|
|
};
|
|
@@ -124,7 +122,6 @@ struct nand_bch_control *nand_bch_init(struct mtd_info *mtd)
|
|
|
{
|
|
|
struct nand_chip *nand = mtd_to_nand(mtd);
|
|
|
unsigned int m, t, eccsteps, i;
|
|
|
- struct nand_ecclayout *layout = nand->ecc.layout;
|
|
|
struct nand_bch_control *nbc = NULL;
|
|
|
unsigned char *erased_page;
|
|
|
unsigned int eccsize = nand->ecc.size;
|
|
@@ -161,34 +158,18 @@ struct nand_bch_control *nand_bch_init(struct mtd_info *mtd)
|
|
|
|
|
|
eccsteps = mtd->writesize/eccsize;
|
|
|
|
|
|
- /* if no ecc placement scheme was provided, build one */
|
|
|
- if (!layout) {
|
|
|
-
|
|
|
- /* handle large page devices only */
|
|
|
- if (mtd->oobsize < 64) {
|
|
|
- printk(KERN_WARNING "must provide an oob scheme for "
|
|
|
- "oobsize %d\n", mtd->oobsize);
|
|
|
- goto fail;
|
|
|
- }
|
|
|
-
|
|
|
- layout = &nbc->ecclayout;
|
|
|
- layout->eccbytes = eccsteps*eccbytes;
|
|
|
-
|
|
|
- /* reserve 2 bytes for bad block marker */
|
|
|
- if (layout->eccbytes+2 > mtd->oobsize) {
|
|
|
- printk(KERN_WARNING "no suitable oob scheme available "
|
|
|
- "for oobsize %d eccbytes %u\n", mtd->oobsize,
|
|
|
- eccbytes);
|
|
|
- goto fail;
|
|
|
- }
|
|
|
- /* put ecc bytes at oob tail */
|
|
|
- for (i = 0; i < layout->eccbytes; i++)
|
|
|
- layout->eccpos[i] = mtd->oobsize-layout->eccbytes+i;
|
|
|
-
|
|
|
- layout->oobfree[0].offset = 2;
|
|
|
- layout->oobfree[0].length = mtd->oobsize-2-layout->eccbytes;
|
|
|
+ /*
|
|
|
+ * Rely on the default ecclayout to ooblayout wrapper provided by MTD
|
|
|
+ * core if ecc.layout is not NULL.
|
|
|
+ * FIXME: this should be removed when all callers have moved to the
|
|
|
+ * mtd_ooblayout_ops approach.
|
|
|
+ */
|
|
|
+ mtd_set_ecclayout(mtd, nand->ecc.layout);
|
|
|
|
|
|
- nand->ecc.layout = layout;
|
|
|
+ /* Check that we have an oob layout description. */
|
|
|
+ if (!mtd->ooblayout) {
|
|
|
+ pr_warn("missing oob scheme");
|
|
|
+ goto fail;
|
|
|
}
|
|
|
|
|
|
/* sanity checks */
|