Thread (19 messages) 19 messages, 2 authors, 2021-01-04

RE: [PATCH v8 13/16] dmaengine: dw-axi-dmac: Add Intel KeemBay AxiDMA handshake

From: Sia, Jee Heng <hidden>
Date: 2021-01-04 04:09:54
Also in: dmaengine, lkml

-----Original Message-----
From: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
Sent: 31 December 2020 8:44 PM
To: Sia, Jee Heng <redacted>; Vinod Koul
[off-list ref]
Cc: andriy.shevchenko@linux.intel.com; dmaengine@vger.kernel.org;
linux-kernel@vger.kernel.org; devicetree@vger.kernel.org;
robh+dt@kernel.org
Subject: Re: [PATCH v8 13/16] dmaengine: dw-axi-dmac: Add Intel
KeemBay AxiDMA handshake

Hi Sia Jee Heng,

see my comments inlined:
quoted
From: Sia Jee Heng <redacted>
Sent: Tuesday, December 29, 2020 07:47
To: vkoul@kernel.org; Eugeniy Paltsev; robh+dt@kernel.org
Cc: andriy.shevchenko@linux.intel.com;
dmaengine@vger.kernel.org;
quoted
linux-kernel@vger.kernel.org; devicetree@vger.kernel.org
Subject: [PATCH v8 13/16] dmaengine: dw-axi-dmac: Add Intel
KeemBay
quoted
AxiDMA handshake

Add support for Intel KeemBay AxiDMA device handshake
programming.
quoted
Device handshake number passed in to the AxiDMA shall be written
to
quoted
the Intel KeemBay AxiDMA hardware handshake registers before
DMA
quoted
operations are started.

Reviewed-by: Andy Shevchenko
[off-list ref]
quoted
Signed-off-by: Sia Jee Heng <redacted>
---
 .../dma/dw-axi-dmac/dw-axi-dmac-platform.c    | 52
+++++++++++++++++++
quoted
 1 file changed, 52 insertions(+)
diff --git a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
index 062d27c61983..5e77eb3d040f 100644
--- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
+++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
 [snip]
quoted
+
+       return 0;
+}
+
 /*
  * If DW_axi_dmac sees CHx_CTL.ShadowReg_Or_LLI_Last bit of
the fetched LLI
quoted
  * as 1, it understands that the current block is the final block in
the @@ -626,6 +668,9 @@ dw_axi_dma_chan_prep_cyclic(struct
dma_chan *dchan, dma_addr_t dma_addr,
quoted
                llp = hw_desc->llp;
        } while (num_periods);

+       if (dw_axi_dma_set_hw_channel(chan->chip, chan-
hw_handshake_num, true))
+               goto err_desc_get;
+
In this implementation 'dw_axi_dma_chan_prep_cyclic' callback will
fail if we don't have APB registers which are only specific for KeemBay.
Looking for the code of 'dw_axi_dma_chan_prep_cyclic' I don't see
the reason why it shouldn't work for vanila DW AXI DMAC without this
extension. So, could you please change this so we wouldn't reject
dw_axi_dma_chan_prep_cyclic in case of APB registers are missed.
[>>] OK, I can change the code in such a way that dw_axi_dma_set_hw_channel() will be executed only if apb_reg is valid.
quoted
        return vchan_tx_prep(&chan->vc, &desc->vd, flags);

 err_desc_get:
@@ -684,6 +729,9 @@ dw_axi_dma_chan_prep_slave_sg(struct
dma_chan *dchan, struct scatterlist *sgl,
quoted
                llp = hw_desc->llp;
        } while (sg_len);

+       if (dw_axi_dma_set_hw_channel(chan->chip, chan-
hw_handshake_num, true))
+               goto err_desc_get;
+
Same here.
[>>] Sure, same method described above will be used.
quoted
        return vchan_tx_prep(&chan->vc, &desc->vd, flags);

 err_desc_get:
@@ -959,6 +1007,10 @@ static int dma_chan_terminate_all(struct
dma_chan *dchan)
quoted
                dev_warn(dchan2dev(dchan),
                         "%s failed to stop\n", axi_chan_name(chan));

+       if (chan->direction != DMA_MEM_TO_MEM)
+               dw_axi_dma_set_hw_channel(chan->chip,
+                                         chan->hw_handshake_num,
+ false);
+
        spin_lock_irqsave(&chan->vc.lock, flags);

        vchan_get_all_descriptors(&chan->vc, &head);
--
2.18.0
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help