diff options
author | Martin Aberg <maberg@gaisler.com> | 2015-10-27 12:41:50 +0100 |
---|---|---|
committer | Martin Aberg <maberg@gaisler.com> | 2015-10-27 12:41:50 +0100 |
commit | a8554e36262aa27407c0cf590addefb71b9d54d2 (patch) | |
tree | 14692d4f80ed8ce998ad92d9e8257db81749811a | |
parent | e8c94758102377a1995c05c9447fb19606941631 (diff) |
GRSPW_PKT: Preserve DMA address enable at start.
The EN bit (enable separate node address for this channel) is preserved when
grspw_dma_start is called. This preserves any previous address configuration.
-rw-r--r-- | c/src/lib/libbsp/sparc/shared/spw/grspw_pkt.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/sparc/shared/spw/grspw_pkt.c b/c/src/lib/libbsp/sparc/shared/spw/grspw_pkt.c index 78b5f21f7e..4fda77f706 100644 --- a/c/src/lib/libbsp/sparc/shared/spw/grspw_pkt.c +++ b/c/src/lib/libbsp/sparc/shared/spw/grspw_pkt.c @@ -2209,6 +2209,7 @@ int grspw_dma_start(void *c) struct grspw_dma_priv *dma = c; struct grspw_dma_regs *dregs = dma->regs; unsigned int ctrl; + IRQFLAGS_TYPE irqflags; if (dma->started) return 0; @@ -2264,7 +2265,10 @@ int grspw_dma_start(void *c) ctrl |= GRSPW_DMACTRL_RI; if (dma->cfg.tx_irq_en_cnt != 0) ctrl |= GRSPW_DMACTRL_TI; + SPIN_LOCK_IRQ(&dma->core->devlock, irqflags); + ctrl |= REG_READ(&dma->regs->ctrl) & GRSPW_DMACTRL_EN; REG_WRITE(&dregs->ctrl, ctrl); + SPIN_UNLOCK_IRQ(&dma->core->devlock, irqflags); dma->started = 1; /* open up other DMA interfaces */ |