Previously the stream_running() function didn't check
if the DMA was halted. This caused hangs in recent versions
of MicroBlaze u-boot. Correct stream_running() to check
DMASR_HALTED as well as DMACR_RUNSTOP.

Signed-off-by: Alistair Francis <alistair.fran...@xilinx.com>
Reviewed-by: Sai Pavan Boddu <saip...@xilinx.com>
---
 hw/dma/xilinx_axidma.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/hw/dma/xilinx_axidma.c b/hw/dma/xilinx_axidma.c
index d06002d..27fba40 100644
--- a/hw/dma/xilinx_axidma.c
+++ b/hw/dma/xilinx_axidma.c
@@ -154,7 +154,8 @@ static inline int stream_resetting(struct Stream *s)
 
 static inline int stream_running(struct Stream *s)
 {
-    return s->regs[R_DMACR] & DMACR_RUNSTOP;
+    return s->regs[R_DMACR] & DMACR_RUNSTOP &&
+           !(s->regs[R_DMASR] & DMASR_HALTED);
 }
 
 static inline int stream_idle(struct Stream *s)
-- 
1.7.1


Reply via email to