mirror of https://gitee.com/openkylin/linux.git
mmc: msm: fix dma usage not to use internal APIs
Remove parts of this driver which use internal API calls. This replaces the calls as suggested by Russell King. Cc: Russell King - ARM Linux <linux@arm.linux.org.uk> Signed-off-by: Daniel Walker <dwalker@codeaurora.org>
This commit is contained in:
parent
c56eb8fb6d
commit
208028de5f
|
@ -383,14 +383,30 @@ static int msmsdcc_config_dma(struct msmsdcc_host *host, struct mmc_data *data)
|
||||||
host->curr.user_pages = 0;
|
host->curr.user_pages = 0;
|
||||||
|
|
||||||
box = &nc->cmd[0];
|
box = &nc->cmd[0];
|
||||||
for (i = 0; i < host->dma.num_ents; i++) {
|
|
||||||
|
/* location of command block must be 64 bit aligned */
|
||||||
|
BUG_ON(host->dma.cmd_busaddr & 0x07);
|
||||||
|
|
||||||
|
nc->cmdptr = (host->dma.cmd_busaddr >> 3) | CMD_PTR_LP;
|
||||||
|
host->dma.hdr.cmdptr = DMOV_CMD_PTR_LIST |
|
||||||
|
DMOV_CMD_ADDR(host->dma.cmdptr_busaddr);
|
||||||
|
host->dma.hdr.complete_func = msmsdcc_dma_complete_func;
|
||||||
|
|
||||||
|
n = dma_map_sg(mmc_dev(host->mmc), host->dma.sg,
|
||||||
|
host->dma.num_ents, host->dma.dir);
|
||||||
|
if (n == 0) {
|
||||||
|
printk(KERN_ERR "%s: Unable to map in all sg elements\n",
|
||||||
|
mmc_hostname(host->mmc));
|
||||||
|
host->dma.sg = NULL;
|
||||||
|
host->dma.num_ents = 0;
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
for_each_sg(host->dma.sg, sg, n, i) {
|
||||||
|
|
||||||
box->cmd = CMD_MODE_BOX;
|
box->cmd = CMD_MODE_BOX;
|
||||||
|
|
||||||
/* Initialize sg dma address */
|
if (i == n - 1)
|
||||||
sg->dma_address = page_to_dma(mmc_dev(host->mmc), sg_page(sg))
|
|
||||||
+ sg->offset;
|
|
||||||
|
|
||||||
if (i == (host->dma.num_ents - 1))
|
|
||||||
box->cmd |= CMD_LC;
|
box->cmd |= CMD_LC;
|
||||||
rows = (sg_dma_len(sg) % MCI_FIFOSIZE) ?
|
rows = (sg_dma_len(sg) % MCI_FIFOSIZE) ?
|
||||||
(sg_dma_len(sg) / MCI_FIFOSIZE) + 1 :
|
(sg_dma_len(sg) / MCI_FIFOSIZE) + 1 :
|
||||||
|
@ -418,27 +434,6 @@ static int msmsdcc_config_dma(struct msmsdcc_host *host, struct mmc_data *data)
|
||||||
box->cmd |= CMD_DST_CRCI(crci);
|
box->cmd |= CMD_DST_CRCI(crci);
|
||||||
}
|
}
|
||||||
box++;
|
box++;
|
||||||
sg++;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* location of command block must be 64 bit aligned */
|
|
||||||
BUG_ON(host->dma.cmd_busaddr & 0x07);
|
|
||||||
|
|
||||||
nc->cmdptr = (host->dma.cmd_busaddr >> 3) | CMD_PTR_LP;
|
|
||||||
host->dma.hdr.cmdptr = DMOV_CMD_PTR_LIST |
|
|
||||||
DMOV_CMD_ADDR(host->dma.cmdptr_busaddr);
|
|
||||||
host->dma.hdr.complete_func = msmsdcc_dma_complete_func;
|
|
||||||
|
|
||||||
n = dma_map_sg(mmc_dev(host->mmc), host->dma.sg,
|
|
||||||
host->dma.num_ents, host->dma.dir);
|
|
||||||
/* dsb inside dma_map_sg will write nc out to mem as well */
|
|
||||||
|
|
||||||
if (n != host->dma.num_ents) {
|
|
||||||
printk(KERN_ERR "%s: Unable to map in all sg elements\n",
|
|
||||||
mmc_hostname(host->mmc));
|
|
||||||
host->dma.sg = NULL;
|
|
||||||
host->dma.num_ents = 0;
|
|
||||||
return -ENOMEM;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue