mtd: nand: bch: switch to mtd_ooblayout_ops
Replace the nand_ecclayout definition by the equivalent mtd_ooblayout_ops definition. Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
This commit is contained in:
		
							parent
							
								
									41b207a70d
								
							
						
					
					
						commit
						7cf9c19a83
					
				| @ -4294,6 +4294,21 @@ int nand_scan_tail(struct mtd_info *mtd) | ||||
| 			ecc->strength = 4; | ||||
| 		} | ||||
| 
 | ||||
| 		/*
 | ||||
| 		 * if no ecc placement scheme was provided pickup the default | ||||
| 		 * large page one. | ||||
| 		 */ | ||||
| 		if (!mtd->ooblayout) { | ||||
| 			/* handle large page devices only */ | ||||
| 			if (mtd->oobsize < 64) { | ||||
| 				WARN(1, "OOB layout is required when using software BCH on small pages\n"); | ||||
| 				ret = -EINVAL; | ||||
| 				goto err_free; | ||||
| 			} | ||||
| 
 | ||||
| 			mtd_set_ooblayout(mtd, &nand_ooblayout_lp_ops); | ||||
| 		} | ||||
| 
 | ||||
| 		/* See nand_bch_init() for details. */ | ||||
| 		ecc->bytes = 0; | ||||
| 		ecc->priv = nand_bch_init(mtd); | ||||
|  | ||||
| @ -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) { | ||||
| 	/*
 | ||||
| 	 * 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); | ||||
| 
 | ||||
| 		/* 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; | ||||
| 
 | ||||
| 		nand->ecc.layout = layout; | ||||
| 	/* Check that we have an oob layout description. */ | ||||
| 	if (!mtd->ooblayout) { | ||||
| 		pr_warn("missing oob scheme"); | ||||
| 		goto fail; | ||||
| 	} | ||||
| 
 | ||||
| 	/* sanity checks */ | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user