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;
|
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,
|
static int dwmci_set_transfer_mode(struct dwmci_host *host,
|
||||||
struct mmc_data *data)
|
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);
|
data ? DIV_ROUND_UP(data->blocks, 8) : 0);
|
||||||
int ret = 0, flags = 0, i;
|
int ret = 0, flags = 0, i;
|
||||||
u32 retry = 100000;
|
u32 retry = 100000;
|
||||||
u32 mask, ctrl;
|
u32 mask;
|
||||||
struct bounce_buffer bbstate;
|
struct bounce_buffer bbstate;
|
||||||
|
|
||||||
dwmci_wait_while_busy(host, cmd);
|
dwmci_wait_while_busy(host, cmd);
|
||||||
@@ -382,26 +409,8 @@ static int dwmci_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
|
|||||||
|
|
||||||
if (data) {
|
if (data) {
|
||||||
ret = dwmci_data_transfer(host, data);
|
ret = dwmci_data_transfer(host, data);
|
||||||
|
if (!host->fifo_mode)
|
||||||
/* only dma mode need it */
|
ret = dwmci_dma_transfer(host, data->flags, &bbstate);
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
udelay(100);
|
udelay(100);
|
||||||
|
Reference in New Issue
Block a user