Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 231591
b: refs/heads/master
c: 19524d7
h: refs/heads/master
i:
  231589: cdc1a47
  231587: d9a6e08
  231583: 04d7443
v: v3
  • Loading branch information
Russell King - ARM Linux authored and Dan Williams committed Jan 5, 2011
1 parent 2d648d4 commit 55cc780
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 52 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: c885bee4f10323a1ff3f19e1aa2aa6f4e7f89dd8
refs/heads/master: 19524d77ec34faf58d313ba34fb755ef6e159216
57 changes: 19 additions & 38 deletions trunk/drivers/dma/amba-pl08x.c
Original file line number Diff line number Diff line change
Expand Up @@ -193,53 +193,41 @@ static void pl08x_start_txd(struct pl08x_dma_chan *plchan,
{
struct pl08x_driver_data *pl08x = plchan->host;
struct pl08x_phy_chan *phychan = plchan->phychan;
u32 val;
struct pl08x_lli *lli = &txd->llis_va[0];
u32 val, ccfg;

plchan->at = txd;

/* Copy the basic control register calculated at transfer config */
phychan->csrc = txd->csrc;
phychan->cdst = txd->cdst;
phychan->clli = txd->clli;
phychan->cctl = txd->cctl;

/* Assign the signal to the proper control registers */
phychan->ccfg = plchan->cd->ccfg;
phychan->ccfg &= ~PL080_CONFIG_SRC_SEL_MASK;
phychan->ccfg &= ~PL080_CONFIG_DST_SEL_MASK;
ccfg = plchan->cd->ccfg;
ccfg &= ~(PL080_CONFIG_SRC_SEL_MASK | PL080_CONFIG_DST_SEL_MASK);

/* If it wasn't set from AMBA, ignore it */
if (txd->direction == DMA_TO_DEVICE)
/* Select signal as destination */
phychan->ccfg |=
(phychan->signal << PL080_CONFIG_DST_SEL_SHIFT);
ccfg |= phychan->signal << PL080_CONFIG_DST_SEL_SHIFT;
else if (txd->direction == DMA_FROM_DEVICE)
/* Select signal as source */
phychan->ccfg |=
(phychan->signal << PL080_CONFIG_SRC_SEL_SHIFT);
/* Always enable error interrupts */
phychan->ccfg |= PL080_CONFIG_ERR_IRQ_MASK;
/* Always enable terminal interrupts */
phychan->ccfg |= PL080_CONFIG_TC_IRQ_MASK;
ccfg |= phychan->signal << PL080_CONFIG_SRC_SEL_SHIFT;

/* Always enable error and terminal interrupts */
ccfg |= PL080_CONFIG_ERR_IRQ_MASK | PL080_CONFIG_TC_IRQ_MASK;

/* Wait for channel inactive */
while (pl08x_phy_channel_busy(phychan))
cpu_relax();

dev_vdbg(&pl08x->adev->dev,
"WRITE channel %d: csrc=0x%08x, cdst=0x%08x, "
"cctl=0x%08x, clli=0x%08x, ccfg=0x%08x\n",
phychan->id,
phychan->csrc,
phychan->cdst,
phychan->cctl,
phychan->clli,
phychan->ccfg);

writel(phychan->csrc, phychan->base + PL080_CH_SRC_ADDR);
writel(phychan->cdst, phychan->base + PL080_CH_DST_ADDR);
writel(phychan->clli, phychan->base + PL080_CH_LLI);
writel(phychan->cctl, phychan->base + PL080_CH_CONTROL);
writel(phychan->ccfg, phychan->base + PL080_CH_CONFIG);
"clli=0x%08x, cctl=0x%08x, ccfg=0x%08x\n",
phychan->id, lli->src, lli->dst, lli->lli, lli->cctl,
ccfg);

writel(lli->src, phychan->base + PL080_CH_SRC_ADDR);
writel(lli->dst, phychan->base + PL080_CH_DST_ADDR);
writel(lli->lli, phychan->base + PL080_CH_LLI);
writel(lli->cctl, phychan->base + PL080_CH_CONTROL);
writel(ccfg, phychan->base + PL080_CH_CONFIG);

/* Enable the DMA channel */
/* Do not access config register until channel shows as disabled */
Expand Down Expand Up @@ -920,13 +908,6 @@ static int pl08x_fill_llis_for_desc(struct pl08x_driver_data *pl08x,
*/
llis_va[num_llis - 1].cctl |= PL080_CONTROL_TC_IRQ_EN;

/* Now store the channel register values */
txd->csrc = llis_va[0].src;
txd->cdst = llis_va[0].dst;
txd->clli = llis_va[0].lli;
txd->cctl = llis_va[0].cctl;
/* ccfg will be set at physical channel allocation time */

#ifdef VERBOSE_DEBUG
{
int i;
Expand Down
13 changes: 0 additions & 13 deletions trunk/include/linux/amba/pl08x.h
Original file line number Diff line number Diff line change
Expand Up @@ -95,11 +95,6 @@ struct pl08x_phy_chan {
spinlock_t lock;
int signal;
struct pl08x_dma_chan *serving;
u32 csrc;
u32 cdst;
u32 clli;
u32 cctl;
u32 ccfg;
};

/**
Expand All @@ -118,14 +113,6 @@ struct pl08x_txd {
void *llis_va;
struct pl08x_channel_data *cd;
bool active;
/*
* Settings to be put into the physical channel when we
* trigger this txd
*/
u32 csrc;
u32 cdst;
u32 clli;
u32 cctl;
};

/**
Expand Down

0 comments on commit 55cc780

Please sign in to comment.