Message ID | 20240603055248.3928469-4-fea.wang@sifive.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | hw/dma: Add error handling for loading descriptions failing | expand |
On Mon, Jun 3, 2024 at 7:48 AM Fea.Wang <fea.wang@sifive.com> wrote: > Due to a description loading failure, adding a trace log makes observing > the DMA behavior easy. > > Reviewed-by: Edgar E. Iglesias <edgar.iglesias@amd.com> > Signed-off-by: Fea.Wang <fea.wang@sifive.com> > --- > hw/dma/trace-events | 3 +++ > hw/dma/xilinx_axidma.c | 3 +++ > 2 files changed, 6 insertions(+) > > diff --git a/hw/dma/trace-events b/hw/dma/trace-events > index 3c47df54e4..95db083be4 100644 > --- a/hw/dma/trace-events > +++ b/hw/dma/trace-events > @@ -44,3 +44,6 @@ pl330_debug_exec_stall(void) "stall of debug instruction > not implemented" > pl330_iomem_write(uint32_t offset, uint32_t value) "addr: 0x%08"PRIx32" > data: 0x%08"PRIx32 > pl330_iomem_write_clr(int i) "event interrupt lowered %d" > pl330_iomem_read(uint32_t addr, uint32_t data) "addr: 0x%08"PRIx32" data: > 0x%08"PRIx32 > + > +# xilinx_axidma.c > +xilinx_axidma_loading_desc_fail(uint32_t res) "error:%d" > diff --git a/hw/dma/xilinx_axidma.c b/hw/dma/xilinx_axidma.c > index b8ab5a423d..1bbb9d6c4c 100644 > --- a/hw/dma/xilinx_axidma.c > +++ b/hw/dma/xilinx_axidma.c > @@ -36,6 +36,7 @@ > #include "sysemu/dma.h" > #include "hw/stream.h" > #include "qom/object.h" > +#include "trace.h" > > #define D(x) > > @@ -200,6 +201,8 @@ static MemTxResult stream_desc_load(struct Stream *s, > hwaddr addr) > addr, MEMTXATTRS_UNSPECIFIED, > d, sizeof *d); > if (result != MEMTX_OK) { > + trace_xilinx_axidma_loading_desc_fail(result); > + > s->regs[R_DMACR] &= ~DMACR_RUNSTOP; > s->regs[R_DMASR] |= DMASR_HALTED; > s->regs[R_DMASR] |= DMASR_SLVERR; > -- > 2.34.1 > >
Reviewed-by: Frank Chang <frank.chang@sifive.com> Fea.Wang <fea.wang@sifive.com> 於 2024年6月3日 週一 下午1:49寫道: > > Due to a description loading failure, adding a trace log makes observing > the DMA behavior easy. > > Signed-off-by: Fea.Wang <fea.wang@sifive.com> > --- > hw/dma/trace-events | 3 +++ > hw/dma/xilinx_axidma.c | 3 +++ > 2 files changed, 6 insertions(+) > > diff --git a/hw/dma/trace-events b/hw/dma/trace-events > index 3c47df54e4..95db083be4 100644 > --- a/hw/dma/trace-events > +++ b/hw/dma/trace-events > @@ -44,3 +44,6 @@ pl330_debug_exec_stall(void) "stall of debug instruction not implemented" > pl330_iomem_write(uint32_t offset, uint32_t value) "addr: 0x%08"PRIx32" data: 0x%08"PRIx32 > pl330_iomem_write_clr(int i) "event interrupt lowered %d" > pl330_iomem_read(uint32_t addr, uint32_t data) "addr: 0x%08"PRIx32" data: 0x%08"PRIx32 > + > +# xilinx_axidma.c > +xilinx_axidma_loading_desc_fail(uint32_t res) "error:%d" > diff --git a/hw/dma/xilinx_axidma.c b/hw/dma/xilinx_axidma.c > index b8ab5a423d..1bbb9d6c4c 100644 > --- a/hw/dma/xilinx_axidma.c > +++ b/hw/dma/xilinx_axidma.c > @@ -36,6 +36,7 @@ > #include "sysemu/dma.h" > #include "hw/stream.h" > #include "qom/object.h" > +#include "trace.h" > > #define D(x) > > @@ -200,6 +201,8 @@ static MemTxResult stream_desc_load(struct Stream *s, hwaddr addr) > addr, MEMTXATTRS_UNSPECIFIED, > d, sizeof *d); > if (result != MEMTX_OK) { > + trace_xilinx_axidma_loading_desc_fail(result); > + > s->regs[R_DMACR] &= ~DMACR_RUNSTOP; > s->regs[R_DMASR] |= DMASR_HALTED; > s->regs[R_DMASR] |= DMASR_SLVERR; > -- > 2.34.1 > >
diff --git a/hw/dma/trace-events b/hw/dma/trace-events index 3c47df54e4..95db083be4 100644 --- a/hw/dma/trace-events +++ b/hw/dma/trace-events @@ -44,3 +44,6 @@ pl330_debug_exec_stall(void) "stall of debug instruction not implemented" pl330_iomem_write(uint32_t offset, uint32_t value) "addr: 0x%08"PRIx32" data: 0x%08"PRIx32 pl330_iomem_write_clr(int i) "event interrupt lowered %d" pl330_iomem_read(uint32_t addr, uint32_t data) "addr: 0x%08"PRIx32" data: 0x%08"PRIx32 + +# xilinx_axidma.c +xilinx_axidma_loading_desc_fail(uint32_t res) "error:%d" diff --git a/hw/dma/xilinx_axidma.c b/hw/dma/xilinx_axidma.c index b8ab5a423d..1bbb9d6c4c 100644 --- a/hw/dma/xilinx_axidma.c +++ b/hw/dma/xilinx_axidma.c @@ -36,6 +36,7 @@ #include "sysemu/dma.h" #include "hw/stream.h" #include "qom/object.h" +#include "trace.h" #define D(x) @@ -200,6 +201,8 @@ static MemTxResult stream_desc_load(struct Stream *s, hwaddr addr) addr, MEMTXATTRS_UNSPECIFIED, d, sizeof *d); if (result != MEMTX_OK) { + trace_xilinx_axidma_loading_desc_fail(result); + s->regs[R_DMACR] &= ~DMACR_RUNSTOP; s->regs[R_DMASR] |= DMASR_HALTED; s->regs[R_DMASR] |= DMASR_SLVERR;
Due to a description loading failure, adding a trace log makes observing the DMA behavior easy. Signed-off-by: Fea.Wang <fea.wang@sifive.com> --- hw/dma/trace-events | 3 +++ hw/dma/xilinx_axidma.c | 3 +++ 2 files changed, 6 insertions(+)