[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v1 8/9] hw/dma/xilinx_axidma: s2mm: Support stream fragments
From: |
Alistair Francis |
Subject: |
Re: [PATCH v1 8/9] hw/dma/xilinx_axidma: s2mm: Support stream fragments |
Date: |
Tue, 5 May 2020 12:59:15 -0700 |
On Thu, Apr 30, 2020 at 9:31 AM Edgar E. Iglesias
<address@hidden> wrote:
>
> From: "Edgar E. Iglesias" <address@hidden>
>
> Add support for stream fragments.
>
> Signed-off-by: Edgar E. Iglesias <address@hidden>
Reviewed-by: Alistair Francis <address@hidden>
Alistair
> ---
> 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
>
>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [PATCH v1 8/9] hw/dma/xilinx_axidma: s2mm: Support stream fragments,
Alistair Francis <=