Skip to contentSkip to conversation

mmc: S5P: Support DMA restarts at buffer boundaries

PATCH New Anton Staaf 3 participants 4 messages Jun 30, 2011 – Jul 13, 2011 MMC, SD and SDIO

lore
Share & tools
lore
#0 lore raw

cover mmc: S5P: Support DMA restarts at buffer boundaries

I don't actually have an S5P machine to test this patch with. I wrote this code while fixing an issue with the in progress Tegra MMC device driver that is based on the S5P driver. I have tested this patch on that platform. If someone with an S5P could give this a whirl that would be great.

Cc Minkyu Kang <[email protected]>
Cc Jaehoon Chung <[email protected]>
Cc Albert ARIBAUD <[email protected]>

Anton Staaf (1):
mmc: S5P: Support DMA restarts at buffer boundaries

 drivers/mmc/s5p_mmc.c |   15 +++++++++++----
 1 files changed, 11 insertions(+), 4 deletions(-)
Signature · 1 line
1.7.3.1
#1 lore raw

PATCH 1/1 mmc: S5P: Support DMA restarts at buffer boundaries

Currently if a DMA buffer straddles a buffer alignment boundary (512KiB) then the DMA engine will pause and generate a DMA interrupt. Since the DMA interrupt is not enabled it will hang the MMC driver.

This patch adds support for restarting the DMA transfer. The SYSTEM_ADDRESS register contains the next address that would have been read/written when a boundary is hit. So we can read that and write it back. The write triggers the resumption of the transfer.

Cc Minkyu Kang <[email protected]>
Cc Jaehoon Chung <[email protected]>
Cc Albert ARIBAUD <[email protected]>
---
 drivers/mmc/s5p_mmc.c |   15 +++++++++++----
 1 files changed, 11 insertions(+), 4 deletions(-)
drivers/mmc/s5p_mmc.c +11 -4
index 280738f..62a7abf 100644
@@ -232,9 +232,15 @@ static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
 						__func__, mask);
 				return -1;
 			} else if (mask & (1 << 3)) {
-				/* DMA Interrupt */
+				/*
+				 * DMA Interrupt, restart the transfer where
+				 * it was interrupted.
+				 */
+				unsigned int address = readl(&host->reg->sysad);
+
 				debug("DMA end\n");
-				break;
+				writel((1 << 3), &host->reg->norintsts);
+				writel(address, &host->reg->sysad);
 			} else if (mask & (1 << 1)) {
 				/* Transfer Complete */
 				debug("r/w is done\n");
@@ -425,12 +431,13 @@ static int mmc_core_init(struct mmc *mmc)
 	 * NORMAL Interrupt Status Enable Register init
 	 * [5] ENSTABUFRDRDY : Buffer Read Ready Status Enable
 	 * [4] ENSTABUFWTRDY : Buffer write Ready Status Enable
+	 * [3] ENSTADMAINT : DMA Interrupt Status Enable
 	 * [1] ENSTASTANSCMPLT : Transfre Complete Status Enable
 	 * [0] ENSTACMDCMPLT : Command Complete Status Enable
-	*/
+	 */
 	mask = readl(&host->reg->norintstsen);
 	mask &= ~(0xffff);
-	mask |= (1 << 5) | (1 << 4) | (1 << 1) | (1 << 0);
+	mask |= (1 << 5) | (1 << 4) | (1 << 3) | (1 << 1) | (1 << 0);
 	writel(mask, &host->reg->norintstsen);
 
 	/*
Signature · 1 line
1.7.3.1
#2 lore raw

cover mmc: S5P: Support DMA restarts at buffer boundaries

In reply to Anton Staaf
Quoted 15 lines · Anton Staaf

I don't actually have an S5P machine to test this patch with. I wrote this code while fixing an issue with the in progress Tegra MMC device driver that is based on the S5P driver. I have tested this patch on that platform. If someone with an S5P could give this a whirl that would be great.

Cc Minkyu Kang <[email protected]>
Cc Jaehoon Chung <[email protected]>
Cc Albert ARIBAUD <[email protected]>

Anton Staaf (1):
mmc: S5P: Support DMA restarts at buffer boundaries

 drivers/mmc/s5p_mmc.c |   15 +++++++++++----
 1 files changed, 11 insertions(+), 4 deletions(-)
#3 lore raw

cover mmc: S5P: Support DMA restarts at buffer boundaries

Dear Anton Staaf,

Quoted 19 lines · Jaehoon Chung
Quoted 15 lines · Anton Staaf

I don't actually have an S5P machine to test this patch with. ?I wrote this code while fixing an issue with the in progress Tegra MMC device driver that is based on the S5P driver. ?I have tested this patch on that platform. ?If someone with an S5P could give this a whirl that would be great.

Cc Minkyu Kang <[email protected]>
Cc Jaehoon Chung <[email protected]>
Cc Albert ARIBAUD <[email protected]>

Anton Staaf (1):
? mmc: S5P: Support DMA restarts at buffer boundaries

?drivers/mmc/s5p_mmc.c | ? 15 +++++++++++---- ?1 files changed, 11 insertions(+), 4 deletions(-)

applied to u-boot-samsung

Thanks
Minkyu Kang

Signature · 2 lines
from. prom.
www.promsoft.net