[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v1 8/9] hw/dma/xilinx_axidma: s2mm: Support stream fragments
From: |
Edgar E. Iglesias |
Subject: |
[PATCH v1 8/9] hw/dma/xilinx_axidma: s2mm: Support stream fragments |
Date: |
Thu, 30 Apr 2020 18:24:38 +0200 |
From: "Edgar E. Iglesias" <address@hidden>
Add support for stream fragments.
Signed-off-by: Edgar E. Iglesias <address@hidden>
---
hw/dma/xilinx_axidma.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/hw/dma/xilinx_axidma.c b/hw/dma/xilinx_axidma.c
index 101d32a965..87be9cade7 100644
--- a/hw/dma/xilinx_axidma.c
+++ b/hw/dma/xilinx_axidma.c
@@ -110,6 +110,7 @@ struct Stream {
int nr;
+ bool sof;
struct SDesc desc;
unsigned int complete_cnt;
uint32_t regs[R_MAX];
@@ -174,6 +175,7 @@ static void stream_reset(struct Stream *s)
{
s->regs[R_DMASR] = DMASR_HALTED; /* starts up halted. */
s->regs[R_DMACR] = 1 << 16; /* Starts with one in compl threshold. */
+ s->sof = true;
}
/* Map an offset addr into a channel index. */
@@ -321,12 +323,11 @@ static void stream_process_mem2s(struct Stream *s,
StreamSlave *tx_data_dev,
}
static size_t stream_process_s2mem(struct Stream *s, unsigned char *buf,
- size_t len)
+ size_t len, bool eop)
{
uint32_t prev_d;
unsigned int rxlen;
size_t pos = 0;
- int sof = 1;
if (!stream_running(s) || stream_idle(s)) {
return 0;
@@ -352,16 +353,16 @@ static size_t stream_process_s2mem(struct Stream *s,
unsigned char *buf,
pos += rxlen;
/* Update the descriptor. */
- if (!len) {
+ if (eop) {
stream_complete(s);
memcpy(s->desc.app, s->app, sizeof(s->desc.app));
s->desc.status |= SDESC_STATUS_EOF;
}
- s->desc.status |= sof << SDESC_STATUS_SOF_BIT;
+ s->desc.status |= s->sof << SDESC_STATUS_SOF_BIT;
s->desc.status |= SDESC_STATUS_COMPLETE;
stream_desc_store(s, s->regs[R_CURDESC]);
- sof = 0;
+ s->sof = eop;
/* Advance. */
prev_d = s->regs[R_CURDESC];
@@ -426,8 +427,7 @@ xilinx_axidma_data_stream_push(StreamSlave *obj, unsigned
char *buf, size_t len,
struct Stream *s = &ds->dma->streams[1];
size_t ret;
- assert(eop);
- ret = stream_process_s2mem(s, buf, len);
+ ret = stream_process_s2mem(s, buf, len, eop);
stream_update_irq(s);
return ret;
}
--
2.20.1
- [PATCH v1 0/9] hw/core: stream: Add end-of-packet flag, Edgar E. Iglesias, 2020/04/30
- [PATCH v1 2/9] hw/net/xilinx_axienet: Cleanup stream->push assignment, Edgar E. Iglesias, 2020/04/30
- [PATCH v1 1/9] hw/net/xilinx_axienet: Auto-clear PHY Autoneg, Edgar E. Iglesias, 2020/04/30
- [PATCH v1 4/9] hw/dma/xilinx_axidma: Add DMA memory-region property, Edgar E. Iglesias, 2020/04/30
- [PATCH v1 3/9] hw/net/xilinx_axienet: Remove unncessary cast, Edgar E. Iglesias, 2020/04/30
- [PATCH v1 5/9] hw/core: stream: Add an end-of-packet flag, Edgar E. Iglesias, 2020/04/30
- [PATCH v1 6/9] hw/net/xilinx_axienet: Handle fragmented packets from DMA, Edgar E. Iglesias, 2020/04/30
- [PATCH v1 7/9] hw/dma/xilinx_axidma: mm2s: Stream descriptor by descriptor, Edgar E. Iglesias, 2020/04/30
- [PATCH v1 8/9] hw/dma/xilinx_axidma: s2mm: Support stream fragments,
Edgar E. Iglesias <=
- [PATCH v1 9/9] MAINTAINERS: Add myself as streams maintainer, Edgar E. Iglesias, 2020/04/30