diff options
| author | Joe Hershberger <joe.hershberger@ni.com> | 2012-11-05 06:46:31 +0000 | 
|---|---|---|
| committer | Scott Wood <scottwood@freescale.com> | 2012-11-26 15:41:28 -0600 | 
| commit | c788ecfdc3eb577757ffc1bfb8416added07ef33 (patch) | |
| tree | 0e7c20915cd081937f0b504b102e744d48c2bd5c /drivers/mtd/nand/nand_base.c | |
| parent | 79da5e3d5d6be28d1c82265bbeb0ff4633fc5535 (diff) | |
| download | olio-uboot-2014.01-c788ecfdc3eb577757ffc1bfb8416added07ef33.tar.xz olio-uboot-2014.01-c788ecfdc3eb577757ffc1bfb8416added07ef33.zip | |
nand: Move the sub-page read support enable to a flag
Use a flag instead of a hard-coded macro so that sub-page reads can be
enabled in other cases (such as on-die ecc).
This is the same as a5ff4f102937a3492bca4a9ff0c341d78813414c in Linux
Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
Diffstat (limited to 'drivers/mtd/nand/nand_base.c')
| -rw-r--r-- | drivers/mtd/nand/nand_base.c | 9 | 
1 files changed, 7 insertions, 2 deletions
| diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c index d3b71a50a..a2d06be99 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c @@ -1245,7 +1245,8 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,  			if (unlikely(ops->mode == MTD_OOB_RAW))  				ret = chip->ecc.read_page_raw(mtd, chip,  							      bufpoi, page); -			else if (!aligned && NAND_SUBPAGE_READ(chip) && !oob) +			else if (!aligned && NAND_HAS_SUBPAGE_READ(chip) && +			    !oob)  				ret = chip->ecc.read_subpage(mtd, chip,  							col, bytes, bufpoi);  			else @@ -1256,7 +1257,7 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,  			/* Transfer not aligned data */  			if (!aligned) { -				if (!NAND_SUBPAGE_READ(chip) && !oob && +				if (!NAND_HAS_SUBPAGE_READ(chip) && !oob &&  				    !(mtd->ecc_stats.failed - stats.failed))  					chip->pagebuf = realpage;  				memcpy(buf, chip->buffers->databuf + col, bytes); @@ -3150,6 +3151,10 @@ int nand_scan_tail(struct mtd_info *mtd)  	/* Invalidate the pagebuffer reference */  	chip->pagebuf = -1; +	/* Large page NAND with SOFT_ECC should support subpage reads */ +	if ((chip->ecc.mode == NAND_ECC_SOFT) && (chip->page_shift > 9)) +		chip->options |= NAND_SUBPAGE_READ; +  	/* Fill in remaining MTD driver data */  	mtd->type = MTD_NANDFLASH;  	mtd->flags = (chip->options & NAND_ROM) ? MTD_CAP_ROM : |