mmc: dw_mmc: Extract setting the DMA descriptor into a separate routine
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>
This commit is contained in:
committed by
Minkyu Kang
parent
95e42a5465
commit
6e17517b5c
+32
-21
@@ -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;
|
||||
|
||||
blk_cnt = data->blocks;
|
||||
|
||||
dwmci_wait_reset(host, DWMCI_CTRL_FIFO_RESET);
|
||||
|
||||
/* Clear IDMAC interrupt */
|
||||
dwmci_writel(host, DWMCI_IDSTS, 0xFFFFFFFF);
|
||||
unsigned int blk_cnt, i;
|
||||
|
||||
data_start = (ulong)cur_idmac;
|
||||
dwmci_writel(host, DWMCI_DBADDR, (ulong)cur_idmac);
|
||||
blk_cnt = data->blocks;
|
||||
|
||||
do {
|
||||
flags = DWMCI_IDMAC_OWN | DWMCI_IDMAC_CH ;
|
||||
flags |= (i == 0) ? DWMCI_IDMAC_FS : 0;
|
||||
for (i = 0;; i++) {
|
||||
unsigned int flags, cnt;
|
||||
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user