Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1525858 > unrolled thread

[PATCH v2 0/2] dmaengine: core/omap-dma: Support for port window

Started byPeter Ujfalusi <peter.ujfalusi@ti.com>
First post2016-11-19 07:10 +0100
Last post2016-11-25 07:10 +0100
Articles 3 — 2 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH v2 0/2] dmaengine: core/omap-dma: Support for port window Peter Ujfalusi <peter.ujfalusi@ti.com> - 2016-11-19 07:10 +0100
    [PATCH v2 1/2] dmaengine: dma_slave_config: add support for slave port window Peter Ujfalusi <peter.ujfalusi@ti.com> - 2016-11-21 05:20 +0100
    Re: [PATCH v2 2/2] dmaengine: omap-dma: Support for slave devices  with data port window Vinod Koul <vinod.koul@intel.com> - 2016-11-25 07:10 +0100

#1525858 — [PATCH v2 0/2] dmaengine: core/omap-dma: Support for port window

FromPeter Ujfalusi <peter.ujfalusi@ti.com>
Date2016-11-19 07:10 +0100
Subject[PATCH v2 0/2] dmaengine: core/omap-dma: Support for port window
Message-ID<sF70B-146-5@gated-at.bofh.it>
Hi,

Changes since v1:
- Make sure that the one frame covers the port_window (burst = port_window)
- added comment to explain the double indexed setup to cover the port_window
- Simplifications for the code mentioned by Russell and Vinod


Cover letter from v1:

as I'm trying to convert the remaining OMAP driver to use DMAengine instead of
the legacy omap-dma API I have encountered with the
drivers/usb/musb/tusb6010_omap.c driver.

The TUSB6010 is connected via NOR FLASH interface and it's register space is
mapped in the GPMC memory area. In OMAP SoCs we have support for external DMA
request lines and the TUSB6010 is using those as well.

With asynchronous access the DMA needs to read/write within the FIFO 'window' in
incremental address mode to read/write data.
The constant addressing only works in synchronous mode.

Since the DMA is driven by external DMA requests, the asynchronous mode is also
slave DMA operation, but currently the port window can not be 'swiped' as the
DMAengine only supports single register/address on the slave side.

This series will add support in dma_slave_config to specify the port side window
size and the second patch implements the setup needs in omap-dma driver for such
a transfer.

Regards,
Peter
---
Peter Ujfalusi (2):
  dmaengine: dma_slave_config: add support for slave port window
  dmaengine: omap-dma: Support for slave devices with data port window

 drivers/dma/omap-dma.c    | 61 +++++++++++++++++++++++++++++++++++++++++++++--
 include/linux/dmaengine.h |  8 +++++++
 2 files changed, 67 insertions(+), 2 deletions(-)

-- 
2.10.2

[toc] | [next] | [standalone]


#1526352 — [PATCH v2 1/2] dmaengine: dma_slave_config: add support for slave port window

FromPeter Ujfalusi <peter.ujfalusi@ti.com>
Date2016-11-21 05:20 +0100
Subject[PATCH v2 1/2] dmaengine: dma_slave_config: add support for slave port window
Message-ID<sFOff-4B0-1@gated-at.bofh.it>
In reply to#1525858
Some slave devices uses address window instead of single register for read
and/or write of data. With the src/dst_port_window_size the address window
can be specified and the DMAengine driver should use this information to
correctly set up the transfer to loop within the provided window.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
---
 include/linux/dmaengine.h | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h
index cc535a478bae..689d44327ef3 100644
--- a/include/linux/dmaengine.h
+++ b/include/linux/dmaengine.h
@@ -336,6 +336,12 @@ enum dma_slave_buswidth {
  * may or may not be applicable on memory sources.
  * @dst_maxburst: same as src_maxburst but for destination target
  * mutatis mutandis.
+ * @src_port_window_size: The length of the register area the data need to be
+ * written on the device side. It is only used for devices which is using an
+ * area instead of a single register to receive the data. Typically the DMA
+ * loops in this area in order to transfer the data.
+ * @dst_port_window_size: same as src_port_window_size but for the destination
+ * port.
  * @device_fc: Flow Controller Settings. Only valid for slave channels. Fill
  * with 'true' if peripheral should be flow controller. Direction will be
  * selected at Runtime.
@@ -363,6 +369,8 @@ struct dma_slave_config {
 	enum dma_slave_buswidth dst_addr_width;
 	u32 src_maxburst;
 	u32 dst_maxburst;
+	u32 src_port_window_size;
+	u32 dst_port_window_size;
 	bool device_fc;
 	unsigned int slave_id;
 };
-- 
2.10.2

[toc] | [prev] | [next] | [standalone]


#1529823 — Re: [PATCH v2 2/2] dmaengine: omap-dma: Support for slave devices with data port window

FromVinod Koul <vinod.koul@intel.com>
Date2016-11-25 07:10 +0100
SubjectRe: [PATCH v2 2/2] dmaengine: omap-dma: Support for slave devices with data port window
Message-ID<sHhRT-5hi-1@gated-at.bofh.it>
In reply to#1525858
On Thu, Nov 17, 2016 at 02:50:17PM +0200, Peter Ujfalusi wrote:
> @@ -921,11 +931,45 @@ static struct dma_async_tx_descriptor *omap_dma_prep_slave_sg(
>  
>  	d->ccr = c->ccr | CCR_SYNC_FRAME;
>  	if (dir == DMA_DEV_TO_MEM) {
> -		d->ccr |= CCR_DST_AMODE_POSTINC | CCR_SRC_AMODE_CONSTANT;
>  		d->csdp = CSDP_DST_BURST_64 | CSDP_DST_PACKED;
> +
> +		d->ccr |= CCR_DST_AMODE_POSTINC;
> +		if (port_window) {
> +			d->ccr |= CCR_SRC_AMODE_DBLIDX;
> +			d->ei = 1;
> +			/*
> +			 * One frame covers the port_window and by  configure
> +			 * the source frame index to be -1 * (port_window - 1)
> +			 * we instruct the sDMA that after a frame is processed
> +			 * it should move back to the start of the window.
> +			 */
> +			d->fi = -(port_window - 1);
> +
> +			if (port_window >= 64)
> +				d->csdp = CSDP_SRC_BURST_64 | CSDP_SRC_PACKED;
> +			else if (port_window >= 32)
> +				d->csdp = CSDP_SRC_BURST_32 | CSDP_SRC_PACKED;
> +			else if (port_window >= 16)
> +				d->csdp = CSDP_SRC_BURST_16 | CSDP_SRC_PACKED;

this and other would look better with a switch..

-- 
~Vinod

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web