From: lhh Date: Wed, 15 Dec 2010 10:10:19 +0000 (+0800) Subject: update sdmmc when dma err stop and flush dma X-Git-Tag: firefly_0821_release~10930 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=7327c9c397488ca204cfc690cdf71486e38ad3e0;p=firefly-linux-kernel-4.4.55.git update sdmmc when dma err stop and flush dma --- diff --git a/drivers/mmc/host/rk29_sdmmc.c b/drivers/mmc/host/rk29_sdmmc.c index ed962d8c1317..545bb97bf020 100755 --- a/drivers/mmc/host/rk29_sdmmc.c +++ b/drivers/mmc/host/rk29_sdmmc.c @@ -418,9 +418,7 @@ static void rk29_sdmmc_dma_complete(void *arg, int size, enum rk29_dma_buffresul if(host->use_dma == 0) return; dev_vdbg(&host->pdev->dev, "DMA complete\n"); - if(result != RK29_RES_OK) - printk("%s: sdio dma complete err\n",__FUNCTION__); - + spin_lock(&host->lock); rk29_sdmmc_dma_cleanup(host); /* @@ -432,6 +430,12 @@ static void rk29_sdmmc_dma_complete(void *arg, int size, enum rk29_dma_buffresul tasklet_schedule(&host->tasklet); } spin_unlock(&host->lock); + if(result != RK29_RES_OK){ + rk29_dma_ctrl(host->dma_chn,RK29_DMAOP_STOP); + rk29_dma_ctrl(host->dma_chn,RK29_DMAOP_FLUSH); + rk29_sdmmc_write(host->regs, SDMMC_CTRL, (rk29_sdmmc_read(host->regs, SDMMC_CTRL))&(~SDMMC_CTRL_DMA_ENABLE)); + printk("%s: sdio dma complete err\n",__FUNCTION__); + } } static int rk29_sdmmc_submit_data_dma(struct rk29_sdmmc *host, struct mmc_data *data)