summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLei Wen <leiwen@marvell.com>2011-10-08 04:14:58 +0000
committerAndy Fleming <afleming@freescale.com>2011-11-03 02:15:00 -0500
commit3e81c7724099f3f7e18bc3344825e63dcbf9a0f5 (patch)
tree364b8f3b819764cebf4e0d00c5dd8dcba368035c
parenta004abde88e509443a45cc309f310db128cec5f2 (diff)
downloadu-boot-imx-3e81c7724099f3f7e18bc3344825e63dcbf9a0f5.zip
u-boot-imx-3e81c7724099f3f7e18bc3344825e63dcbf9a0f5.tar.gz
u-boot-imx-3e81c7724099f3f7e18bc3344825e63dcbf9a0f5.tar.bz2
mmc: sdhci: fix sdma bug for large file transfer
SDHCI spec need to reset the sdma base address while the software try to accorss the 512k bytes address boundary. When meet such accross behavior, sdhci controller would generate a interrupt automatically, and software need handle this. Signed-off-by: Lei Wen <leiwen@marvell.com>
-rw-r--r--drivers/mmc/sdhci.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
index 77a9e70..fce0ef0 100644
--- a/drivers/mmc/sdhci.c
+++ b/drivers/mmc/sdhci.c
@@ -104,7 +104,7 @@ static int sdhci_transfer_data(struct sdhci_host *host, struct mmc_data *data,
#ifdef CONFIG_MMC_SDMA
if (stat & SDHCI_INT_DMA_END) {
sdhci_writel(host, SDHCI_INT_DMA_END, SDHCI_INT_STATUS);
- start_addr &= SDHCI_DEFAULT_BOUNDARY_SIZE - 1;
+ start_addr &= ~(SDHCI_DEFAULT_BOUNDARY_SIZE - 1);
start_addr += SDHCI_DEFAULT_BOUNDARY_SIZE;
sdhci_writel(host, start_addr, SDHCI_DMA_ADDRESS);
}