mmc: S5P: Support DMA restarts at buffer boundaries
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.
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
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.
--- drivers/mmc/s5p_mmc.c | 15 +++++++++++---- 1 files changed, 11 insertions(+), 4 deletions(-)
drivers/mmc/s5p_mmc.c +11 -4
@@ -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
cover mmc: S5P: Support DMA restarts at buffer boundaries
In reply to Anton StaafQuoted 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 boundariesdrivers/mmc/s5p_mmc.c | 15 +++++++++++---- 1 files changed, 11 insertions(+), 4 deletions(-)
cover mmc: S5P: Support DMA restarts at buffer boundaries
Dear Anton Staaf,
Quoted 19 lines · Jaehoon Chung
Tested-by Jaehoon Chung <[email protected]>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