diff options
| author | Sergey Lapin <slapin@ossfans.org> | 2013-01-14 03:46:50 +0000 | 
|---|---|---|
| committer | Scott Wood <scottwood@freescale.com> | 2013-05-31 17:12:03 -0500 | 
| commit | dfe64e2c89731a3f9950d7acd8681b68df2bae03 (patch) | |
| tree | 880eae93d5f4bd3e9747960eea71502c67e49d8e /drivers/mtd/nand/mxs_nand.c | |
| parent | a1b81ab26fbbdcbaa6e2a096397c75415181c298 (diff) | |
| download | olio-uboot-2014.01-dfe64e2c89731a3f9950d7acd8681b68df2bae03.tar.xz olio-uboot-2014.01-dfe64e2c89731a3f9950d7acd8681b68df2bae03.zip | |
mtd: resync with Linux-3.7.1
This patch is essentially an update of u-boot MTD subsystem to
the state of Linux-3.7.1 with exclusion of some bits:
- the update is concentrated on NAND, no onenand or CFI/NOR/SPI
flashes interfaces are updated EXCEPT for API changes.
- new large NAND chips support is there, though some updates
have got in Linux-3.8.-rc1, (which will follow on top of this patch).
To produce this update I used tag v3.7.1 of linux-stable repository.
The update was made using application of relevant patches,
with changes relevant to U-Boot-only stuff sticked together
to keep bisectability. Then all changes were grouped together
to this patch.
Signed-off-by: Sergey Lapin <slapin@ossfans.org>
[scottwood@freescale.com: some eccstrength and build fixes]
Signed-off-by: Scott Wood <scottwood@freescale.com>
Diffstat (limited to 'drivers/mtd/nand/mxs_nand.c')
| -rw-r--r-- | drivers/mtd/nand/mxs_nand.c | 34 | 
1 files changed, 19 insertions, 15 deletions
| diff --git a/drivers/mtd/nand/mxs_nand.c b/drivers/mtd/nand/mxs_nand.c index e38e15125..7ba48c120 100644 --- a/drivers/mtd/nand/mxs_nand.c +++ b/drivers/mtd/nand/mxs_nand.c @@ -546,7 +546,8 @@ static uint8_t mxs_nand_read_byte(struct mtd_info *mtd)   * Read a page from NAND.   */  static int mxs_nand_ecc_read_page(struct mtd_info *mtd, struct nand_chip *nand, -					uint8_t *buf, int page) +					uint8_t *buf, int oob_required, +					int page)  {  	struct mxs_nand_info *nand_info = nand->priv;  	struct mxs_dma_desc *d; @@ -691,8 +692,9 @@ rtn:  /*   * Write a page to NAND.   */ -static void mxs_nand_ecc_write_page(struct mtd_info *mtd, -				struct nand_chip *nand, const uint8_t *buf) +static int mxs_nand_ecc_write_page(struct mtd_info *mtd, +				struct nand_chip *nand, const uint8_t *buf, +				int oob_required)  {  	struct mxs_nand_info *nand_info = nand->priv;  	struct mxs_dma_desc *d; @@ -748,6 +750,7 @@ static void mxs_nand_ecc_write_page(struct mtd_info *mtd,  rtn:  	mxs_nand_return_dma_descs(nand_info); +	return 0;  }  /* @@ -763,7 +766,7 @@ static int mxs_nand_hook_read_oob(struct mtd_info *mtd, loff_t from,  	struct mxs_nand_info *nand_info = chip->priv;  	int ret; -	if (ops->mode == MTD_OOB_RAW) +	if (ops->mode == MTD_OPS_RAW)  		nand_info->raw_oob_mode = 1;  	else  		nand_info->raw_oob_mode = 0; @@ -788,7 +791,7 @@ static int mxs_nand_hook_write_oob(struct mtd_info *mtd, loff_t to,  	struct mxs_nand_info *nand_info = chip->priv;  	int ret; -	if (ops->mode == MTD_OOB_RAW) +	if (ops->mode == MTD_OPS_RAW)  		nand_info->raw_oob_mode = 1;  	else  		nand_info->raw_oob_mode = 0; @@ -866,7 +869,7 @@ static int mxs_nand_hook_block_markbad(struct mtd_info *mtd, loff_t ofs)   * what to do.   */  static int mxs_nand_ecc_read_oob(struct mtd_info *mtd, struct nand_chip *nand, -				int page, int cmd) +				int page)  {  	struct mxs_nand_info *nand_info = nand->priv; @@ -997,19 +1000,19 @@ static int mxs_nand_scan_bbt(struct mtd_info *mtd)  	writel(BCH_CTRL_COMPLETE_IRQ_EN, &bch_regs->hw_bch_ctrl_set);  	/* Hook some operations at the MTD level. */ -	if (mtd->read_oob != mxs_nand_hook_read_oob) { -		nand_info->hooked_read_oob = mtd->read_oob; -		mtd->read_oob = mxs_nand_hook_read_oob; +	if (mtd->_read_oob != mxs_nand_hook_read_oob) { +		nand_info->hooked_read_oob = mtd->_read_oob; +		mtd->_read_oob = mxs_nand_hook_read_oob;  	} -	if (mtd->write_oob != mxs_nand_hook_write_oob) { -		nand_info->hooked_write_oob = mtd->write_oob; -		mtd->write_oob = mxs_nand_hook_write_oob; +	if (mtd->_write_oob != mxs_nand_hook_write_oob) { +		nand_info->hooked_write_oob = mtd->_write_oob; +		mtd->_write_oob = mxs_nand_hook_write_oob;  	} -	if (mtd->block_markbad != mxs_nand_hook_block_markbad) { -		nand_info->hooked_block_markbad = mtd->block_markbad; -		mtd->block_markbad = mxs_nand_hook_block_markbad; +	if (mtd->_block_markbad != mxs_nand_hook_block_markbad) { +		nand_info->hooked_block_markbad = mtd->_block_markbad; +		mtd->_block_markbad = mxs_nand_hook_block_markbad;  	}  	/* We use the reference implementation for bad block management. */ @@ -1163,6 +1166,7 @@ int board_nand_init(struct nand_chip *nand)  	nand->ecc.mode		= NAND_ECC_HW;  	nand->ecc.bytes		= 9;  	nand->ecc.size		= 512; +	nand->ecc.strength	= 8;  	return 0; |