mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 10:49:33 +00:00
mmc: dw_mmc: amend use of idmac sw reset
First, compiling warning along with previous change is removed. [drivers/mmc/host/dw_mmc.c:1890:7: warning: unused variable 'ctrl'] And with the recommendation in manual, IDMAC software reset is followed by dma-reset of the CTRL register in order to terminate the transfer. Signed-off-by: Seungwon Jeon <tgih.jun@samsung.com> Tested-by: Alim Akhtar <alim.akhtar@samsung.com> Signed-off-by: Chris Ball <cjb@laptop.org>
This commit is contained in:
parent
31bff450d2
commit
5ce9d96177
1 changed files with 11 additions and 6 deletions
|
@ -372,6 +372,14 @@ static void dw_mci_dma_cleanup(struct dw_mci *host)
|
|||
dw_mci_get_dma_dir(data));
|
||||
}
|
||||
|
||||
static void dw_mci_idmac_reset(struct dw_mci *host)
|
||||
{
|
||||
u32 bmod = mci_readl(host, BMOD);
|
||||
/* Software reset of DMA */
|
||||
bmod |= SDMMC_IDMAC_SWRESET;
|
||||
mci_writel(host, BMOD, bmod);
|
||||
}
|
||||
|
||||
static void dw_mci_idmac_stop_dma(struct dw_mci *host)
|
||||
{
|
||||
u32 temp;
|
||||
|
@ -385,6 +393,7 @@ static void dw_mci_idmac_stop_dma(struct dw_mci *host)
|
|||
/* Stop the IDMAC running */
|
||||
temp = mci_readl(host, BMOD);
|
||||
temp &= ~(SDMMC_IDMAC_ENABLE | SDMMC_IDMAC_FB);
|
||||
temp |= SDMMC_IDMAC_SWRESET;
|
||||
mci_writel(host, BMOD, temp);
|
||||
}
|
||||
|
||||
|
@ -476,7 +485,7 @@ static int dw_mci_idmac_init(struct dw_mci *host)
|
|||
p->des3 = host->sg_dma;
|
||||
p->des0 = IDMAC_DES0_ER;
|
||||
|
||||
mci_writel(host, BMOD, SDMMC_IDMAC_SWRESET);
|
||||
dw_mci_idmac_reset(host);
|
||||
|
||||
/* Mask out interrupts - get Tx & Rx complete only */
|
||||
mci_writel(host, IDSTS, IDMAC_INT_CLR);
|
||||
|
@ -1906,7 +1915,6 @@ static void dw_mci_work_routine_card(struct work_struct *work)
|
|||
struct mmc_host *mmc = slot->mmc;
|
||||
struct mmc_request *mrq;
|
||||
int present;
|
||||
u32 ctrl;
|
||||
|
||||
present = dw_mci_get_cd(mmc);
|
||||
while (present != slot->last_detect_state) {
|
||||
|
@ -1974,10 +1982,7 @@ static void dw_mci_work_routine_card(struct work_struct *work)
|
|||
/* Clear down the FIFO */
|
||||
dw_mci_fifo_reset(host);
|
||||
#ifdef CONFIG_MMC_DW_IDMAC
|
||||
ctrl = mci_readl(host, BMOD);
|
||||
/* Software reset of DMA */
|
||||
ctrl |= SDMMC_IDMAC_SWRESET;
|
||||
mci_writel(host, BMOD, ctrl);
|
||||
dw_mci_idmac_reset(host);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue