diff options
| author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-07-16 12:32:42 -0700 | 
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-07-16 12:32:42 -0700 | 
| commit | 467a3ca5cab64a16b5ec46ebb1895c84c280dcfe (patch) | |
| tree | 68096d5b17e884d270420d50e466186c73019830 /drivers/mtd/nand/mxc_nand.c | |
| parent | 40c9f61eae9098212b6906f29f30f08f7a19b5e2 (diff) | |
| parent | 84a1caf1453c3d44050bd22db958af4a7f99315c (diff) | |
Merge branch 'v3.6-rc7' into tty-next
This is to sync up on Linus's branch to get the other tty and core changes.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/mtd/nand/mxc_nand.c')
| -rw-r--r-- | drivers/mtd/nand/mxc_nand.c | 37 | 
1 files changed, 29 insertions, 8 deletions
| diff --git a/drivers/mtd/nand/mxc_nand.c b/drivers/mtd/nand/mxc_nand.c index c58e6a93f445..6acc790c2fbb 100644 --- a/drivers/mtd/nand/mxc_nand.c +++ b/drivers/mtd/nand/mxc_nand.c @@ -273,6 +273,26 @@ static struct nand_ecclayout nandv2_hw_eccoob_4k = {  static const char *part_probes[] = { "RedBoot", "cmdlinepart", "ofpart", NULL }; +static void memcpy32_fromio(void *trg, const void __iomem  *src, size_t size) +{ +	int i; +	u32 *t = trg; +	const __iomem u32 *s = src; + +	for (i = 0; i < (size >> 2); i++) +		*t++ = __raw_readl(s++); +} + +static void memcpy32_toio(void __iomem *trg, const void *src, int size) +{ +	int i; +	u32 __iomem *t = trg; +	const u32 *s = src; + +	for (i = 0; i < (size >> 2); i++) +		__raw_writel(*s++, t++); +} +  static int check_int_v3(struct mxc_nand_host *host)  {  	uint32_t tmp; @@ -519,7 +539,7 @@ static void send_read_id_v3(struct mxc_nand_host *host)  	wait_op_done(host, true); -	memcpy_fromio(host->data_buf, host->main_area0, 16); +	memcpy32_fromio(host->data_buf, host->main_area0, 16);  }  /* Request the NANDFC to perform a read of the NAND device ID. */ @@ -535,7 +555,7 @@ static void send_read_id_v1_v2(struct mxc_nand_host *host)  	/* Wait for operation to complete */  	wait_op_done(host, true); -	memcpy_fromio(host->data_buf, host->main_area0, 16); +	memcpy32_fromio(host->data_buf, host->main_area0, 16);  	if (this->options & NAND_BUSWIDTH_16) {  		/* compress the ID info */ @@ -797,16 +817,16 @@ static void copy_spare(struct mtd_info *mtd, bool bfrom)  	if (bfrom) {  		for (i = 0; i < n - 1; i++) -			memcpy_fromio(d + i * j, s + i * t, j); +			memcpy32_fromio(d + i * j, s + i * t, j);  		/* the last section */ -		memcpy_fromio(d + i * j, s + i * t, mtd->oobsize - i * j); +		memcpy32_fromio(d + i * j, s + i * t, mtd->oobsize - i * j);  	} else {  		for (i = 0; i < n - 1; i++) -			memcpy_toio(&s[i * t], &d[i * j], j); +			memcpy32_toio(&s[i * t], &d[i * j], j);  		/* the last section */ -		memcpy_toio(&s[i * t], &d[i * j], mtd->oobsize - i * j); +		memcpy32_toio(&s[i * t], &d[i * j], mtd->oobsize - i * j);  	}  } @@ -1070,7 +1090,8 @@ static void mxc_nand_command(struct mtd_info *mtd, unsigned command,  		host->devtype_data->send_page(mtd, NFC_OUTPUT); -		memcpy_fromio(host->data_buf, host->main_area0, mtd->writesize); +		memcpy32_fromio(host->data_buf, host->main_area0, +				mtd->writesize);  		copy_spare(mtd, true);  		break; @@ -1086,7 +1107,7 @@ static void mxc_nand_command(struct mtd_info *mtd, unsigned command,  		break;  	case NAND_CMD_PAGEPROG: -		memcpy_toio(host->main_area0, host->data_buf, mtd->writesize); +		memcpy32_toio(host->main_area0, host->data_buf, mtd->writesize);  		copy_spare(mtd, false);  		host->devtype_data->send_page(mtd, NFC_INPUT);  		host->devtype_data->send_cmd(host, command, true); | 
