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.
This commit is contained in:
parent
08802ee5be
commit
4eade398cd
@ -465,14 +465,30 @@ static int msmsdcc_config_dma(struct msmsdcc_host *host, struct mmc_data *data)
|
||||
host->curr.user_pages = 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;
|
||||
|
||||
/* Initialize sg dma address */
|
||||
sg->dma_address = page_to_dma(mmc_dev(host->mmc), sg_page(sg))
|
||||
+ sg->offset;
|
||||
|
||||
if (i == (host->dma.num_ents - 1))
|
||||
if (i == n - 1)
|
||||
box->cmd |= CMD_LC;
|
||||
rows = (sg_dma_len(sg) % MCI_FIFOSIZE) ?
|
||||
(sg_dma_len(sg) / MCI_FIFOSIZE) + 1 :
|
||||
@ -500,27 +516,6 @@ static int msmsdcc_config_dma(struct msmsdcc_host *host, struct mmc_data *data)
|
||||
box->cmd |= CMD_DST_CRCI(crci);
|
||||
}
|
||||
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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user