mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-20 04:44:26 +08: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
@ -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 New Issue
Block a user