]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
mmc: dw_mmc: Extract setting the DMA descriptor into a separate routine
authorSam Protsenko <semen.protsenko@linaro.org>
Thu, 8 Aug 2024 03:14:14 +0000 (22:14 -0500)
committerMinkyu Kang <mk7.kang@samsung.com>
Mon, 19 Aug 2024 07:09:06 +0000 (16:09 +0900)
Make dwmci_prepare_data() function easier to read by extracting the
preparation of IDMAC descriptor 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 8fc26399034b68b48c5937dc61bbe1f5c7824405..d73d58bcf7d7df4aa63d1e4e5cb183894c7edb1e 100644 (file)
@@ -53,46 +53,57 @@ static void dwmci_set_idma_desc(struct dwmci_idmac *idmac,
        desc->next_addr = (ulong)desc + sizeof(struct dwmci_idmac);
 }
 
-static void dwmci_prepare_data(struct dwmci_host *host,
-                              struct mmc_data *data,
+static void dwmci_prepare_desc(struct mmc_data *data,
                               struct dwmci_idmac *cur_idmac,
                               void *bounce_buffer)
 {
-       unsigned long ctrl;
-       unsigned int i = 0, flags, cnt, blk_cnt;
+       struct dwmci_idmac *desc = cur_idmac;
        ulong data_start, data_end;
+       unsigned int blk_cnt, i;
 
+       data_start = (ulong)cur_idmac;
        blk_cnt = data->blocks;
 
-       dwmci_wait_reset(host, DWMCI_CTRL_FIFO_RESET);
-
-       /* Clear IDMAC interrupt */
-       dwmci_writel(host, DWMCI_IDSTS, 0xFFFFFFFF);
+       for (i = 0;; i++) {
+               unsigned int flags, cnt;
 
-       data_start = (ulong)cur_idmac;
-       dwmci_writel(host, DWMCI_DBADDR, (ulong)cur_idmac);
-
-       do {
-               flags = DWMCI_IDMAC_OWN | DWMCI_IDMAC_CH ;
-               flags |= (i == 0) ? DWMCI_IDMAC_FS : 0;
+               flags = DWMCI_IDMAC_OWN | DWMCI_IDMAC_CH;
+               if (i == 0)
+                       flags |= DWMCI_IDMAC_FS;
                if (blk_cnt <= 8) {
                        flags |= DWMCI_IDMAC_LD;
                        cnt = data->blocksize * blk_cnt;
                } else
                        cnt = data->blocksize * 8;
 
-               dwmci_set_idma_desc(cur_idmac, flags, cnt,
-                                   (ulong)bounce_buffer + (i * PAGE_SIZE));
+               dwmci_set_idma_desc(desc, flags, cnt,
+                                   (ulong)bounce_buffer + i * PAGE_SIZE);
+               desc++;
 
-               cur_idmac++;
                if (blk_cnt <= 8)
                        break;
                blk_cnt -= 8;
-               i++;
-       } while(1);
+       }
 
-       data_end = (ulong)cur_idmac;
+       data_end = (ulong)desc;
        flush_dcache_range(data_start, roundup(data_end, ARCH_DMA_MINALIGN));
+}
+
+static void dwmci_prepare_data(struct dwmci_host *host,
+                              struct mmc_data *data,
+                              struct dwmci_idmac *cur_idmac,
+                              void *bounce_buffer)
+{
+       unsigned long ctrl;
+
+       dwmci_wait_reset(host, DWMCI_CTRL_FIFO_RESET);
+
+       /* Clear IDMAC interrupt */
+       dwmci_writel(host, DWMCI_IDSTS, 0xFFFFFFFF);
+
+       dwmci_writel(host, DWMCI_DBADDR, (ulong)cur_idmac);
+
+       dwmci_prepare_desc(data, cur_idmac, bounce_buffer);
 
        ctrl = dwmci_readl(host, DWMCI_CTRL);
        ctrl |= DWMCI_IDMAC_EN | DWMCI_DMA_EN;