Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 297535
b: refs/heads/master
c: 3b4b6df
h: refs/heads/master
i:
  297533: ca77e5b
  297531: a757963
  297527: 70283e8
  297519: 9efe5ea
  297503: f994b1a
  297471: f7adfc7
v: v3
  • Loading branch information
Javier Martin authored and Vinod Koul committed Mar 26, 2012
1 parent 4794df7 commit 255e619
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 44 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 2efc3449d7b11f36f532180cb738364fd2c28e03
refs/heads/master: 3b4b6dfc202dc5bedb03f2fae4ccc3f5b95dd563
57 changes: 14 additions & 43 deletions trunk/drivers/dma/imx-dma.c
Original file line number Diff line number Diff line change
Expand Up @@ -260,41 +260,6 @@ static inline int imxdma_sg_next(struct imxdma_desc *d, struct scatterlist *sg)
return now;
}

static int
imxdma_setup_mem2mem_hw(struct imxdma_channel *imxdmac, dma_addr_t dma_address,
unsigned int dma_length, unsigned int dev_addr)
{
int channel = imxdmac->channel;

imxdmac->internal.sg = NULL;

if (!dma_address) {
printk(KERN_ERR "imxdma%d: imx_dma_setup_single null address\n",
channel);
return -EINVAL;
}

if (!dma_length) {
printk(KERN_ERR "imxdma%d: imx_dma_setup_single zero length\n",
channel);
return -EINVAL;
}

pr_debug("imxdma%d: %s dma_addressg=0x%08x dma_length=%d "
"dev_addr=0x%08x for write\n",
channel, __func__, (unsigned int)dma_address,
dma_length, dev_addr);

imx_dmav1_writel(dma_address, DMA_SAR(channel));
imx_dmav1_writel(dev_addr, DMA_DAR(channel));
imx_dmav1_writel(imxdmac->internal.ccr_to_device,
DMA_CCR(channel));

imx_dmav1_writel(dma_length, DMA_CNTR(channel));

return 0;
}

static void imxdma_enable_hw(struct imxdma_desc *d)
{
struct imxdma_channel *imxdmac = to_imxdma_chan(d->desc.chan);
Expand Down Expand Up @@ -586,20 +551,26 @@ static irqreturn_t dma_irq_handler(int irq, void *dev_id)
static int imxdma_xfer_desc(struct imxdma_desc *d)
{
struct imxdma_channel *imxdmac = to_imxdma_chan(d->desc.chan);
struct imxdma_engine *imxdma = imxdmac->imxdma;
int ret;

/* Configure and enable */
switch (d->type) {
case IMXDMA_DESC_MEMCPY:
ret = imxdma_config_channel_hw(imxdmac,
d->config_port, d->config_mem, 0, 0);
if (ret < 0)
return ret;
ret = imxdma_setup_mem2mem_hw(imxdmac, d->src, d->len, d->dest);
if (ret < 0)
return ret;
break;
imxdmac->internal.sg = NULL;

imx_dmav1_writel(d->src, DMA_SAR(imxdmac->channel));
imx_dmav1_writel(d->dest, DMA_DAR(imxdmac->channel));
imx_dmav1_writel(d->config_mem | (d->config_port << 2),
DMA_CCR(imxdmac->channel));

imx_dmav1_writel(d->len, DMA_CNTR(imxdmac->channel));

dev_dbg(imxdma->dev, "%s channel: %d dest=0x%08x src=0x%08x "
"dma_length=%d\n", __func__, imxdmac->channel,
d->dest, d->src, d->len);

break;
/* Cyclic transfer is the same as slave_sg with special sg configuration. */
case IMXDMA_DESC_CYCLIC:
case IMXDMA_DESC_SLAVE_SG:
Expand Down

0 comments on commit 255e619

Please sign in to comment.