]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
mmc: dw_mmc: Extract DMA transfer handling code into a separate routine
authorSam Protsenko <semen.protsenko@linaro.org>
Thu, 8 Aug 2024 03:14:13 +0000 (22:14 -0500)
committerMinkyu Kang <mk7.kang@samsung.com>
Mon, 19 Aug 2024 07:09:06 +0000 (16:09 +0900)
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>
drivers/mmc/dw_mmc.c

index b99f63a6f8bd0036915c9935922e3e70c4358f47..8fc26399034b68b48c5937dc61bbe1f5c7824405 100644 (file)
@@ -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);