mmc: dw_mmc: Extract DMA transfer handling code into a separate routine
Make dwmci_send_cmd() easier to read by moving the DMA transfer handling code into a dedicated function. No functional change. Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org> Reviewed-by: Quentin Schulz <quentin.schulz@cherry.de> Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
This commit is contained in:

committed by
Minkyu Kang

parent
0252924ac6
commit
95e42a5465
@@ -232,6 +232,33 @@ static int dwmci_data_transfer(struct dwmci_host *host, struct mmc_data *data)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int dwmci_dma_transfer(struct dwmci_host *host, uint flags,
|
||||
struct bounce_buffer *bbstate)
|
||||
{
|
||||
int ret;
|
||||
u32 mask, ctrl;
|
||||
|
||||
if (flags == MMC_DATA_READ)
|
||||
mask = DWMCI_IDINTEN_RI;
|
||||
else
|
||||
mask = DWMCI_IDINTEN_TI;
|
||||
|
||||
ret = wait_for_bit_le32(host->ioaddr + DWMCI_IDSTS,
|
||||
mask, true, 1000, false);
|
||||
if (ret)
|
||||
debug("%s: DWMCI_IDINTEN mask 0x%x timeout\n", __func__, mask);
|
||||
|
||||
/* Clear interrupts */
|
||||
dwmci_writel(host, DWMCI_IDSTS, DWMCI_IDINTEN_MASK);
|
||||
|
||||
ctrl = dwmci_readl(host, DWMCI_CTRL);
|
||||
ctrl &= ~DWMCI_DMA_EN;
|
||||
dwmci_writel(host, DWMCI_CTRL, ctrl);
|
||||
|
||||
bounce_buffer_stop(bbstate);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int dwmci_set_transfer_mode(struct dwmci_host *host,
|
||||
struct mmc_data *data)
|
||||
{
|
||||
@@ -274,7 +301,7 @@ static int dwmci_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
|
||||
data ? DIV_ROUND_UP(data->blocks, 8) : 0);
|
||||
int ret = 0, flags = 0, i;
|
||||
u32 retry = 100000;
|
||||
u32 mask, ctrl;
|
||||
u32 mask;
|
||||
struct bounce_buffer bbstate;
|
||||
|
||||
dwmci_wait_while_busy(host, cmd);
|
||||
@@ -382,26 +409,8 @@ static int dwmci_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
|
||||
|
||||
if (data) {
|
||||
ret = dwmci_data_transfer(host, data);
|
||||
|
||||
/* only dma mode need it */
|
||||
if (!host->fifo_mode) {
|
||||
if (data->flags == MMC_DATA_READ)
|
||||
mask = DWMCI_IDINTEN_RI;
|
||||
else
|
||||
mask = DWMCI_IDINTEN_TI;
|
||||
ret = wait_for_bit_le32(host->ioaddr + DWMCI_IDSTS,
|
||||
mask, true, 1000, false);
|
||||
if (ret)
|
||||
debug("%s: DWMCI_IDINTEN mask 0x%x timeout.\n",
|
||||
__func__, mask);
|
||||
/* clear interrupts */
|
||||
dwmci_writel(host, DWMCI_IDSTS, DWMCI_IDINTEN_MASK);
|
||||
|
||||
ctrl = dwmci_readl(host, DWMCI_CTRL);
|
||||
ctrl &= ~(DWMCI_DMA_EN);
|
||||
dwmci_writel(host, DWMCI_CTRL, ctrl);
|
||||
bounce_buffer_stop(&bbstate);
|
||||
}
|
||||
if (!host->fifo_mode)
|
||||
ret = dwmci_dma_transfer(host, data->flags, &bbstate);
|
||||
}
|
||||
|
||||
udelay(100);
|
||||
|
Reference in New Issue
Block a user