2018-06-13 07:38:07

by Radhey Shyam Pandey

[permalink] [raw]
Subject: [PATCH 0/2] Enable VDMA S2MM vertical flip support

The AXI VDMA core supports Vertical Flip with S2MM as the path when
Enable Vertical Flip (Advanced tab) is selected. This patch series add
DT property for vertical flip and program its state in VDMA start_transfer.

Radhey Shyam Pandey (2):
dt-bindings: dmaengine: xilinx_dma: Add VDMA vertical flip property
dmaengine: xilinx_dma: Enable VDMA S2MM vertical flip support

.../devicetree/bindings/dma/xilinx/xilinx_dma.txt | 2 +
drivers/dma/xilinx/xilinx_dma.c | 22 ++++++++++++++++++++
include/linux/dma/xilinx_dma.h | 2 +
3 files changed, 26 insertions(+), 0 deletions(-)



2018-06-13 07:36:53

by Radhey Shyam Pandey

[permalink] [raw]
Subject: [PATCH 2/2] dmaengine: xilinx_dma: Enable VDMA S2MM vertical flip support

Vertical flip state is exported in xilinx_vdma_config and depending
on IP configuration(c_enable_vert_flip) vertical flip state is
programmed in hardware.

Signed-off-by: Radhey Shyam Pandey <[email protected]>
Signed-off-by: Michal Simek <[email protected]>
---
drivers/dma/xilinx/xilinx_dma.c | 22 ++++++++++++++++++++++
include/linux/dma/xilinx_dma.h | 2 ++
2 files changed, 24 insertions(+), 0 deletions(-)

diff --git a/drivers/dma/xilinx/xilinx_dma.c b/drivers/dma/xilinx/xilinx_dma.c
index 27b5235..c124423 100644
--- a/drivers/dma/xilinx/xilinx_dma.c
+++ b/drivers/dma/xilinx/xilinx_dma.c
@@ -115,6 +115,9 @@
#define XILINX_VDMA_REG_START_ADDRESS(n) (0x000c + 4 * (n))
#define XILINX_VDMA_REG_START_ADDRESS_64(n) (0x000c + 8 * (n))

+#define XILINX_VDMA_REG_ENABLE_VERTICAL_FLIP 0x00ec
+#define XILINX_VDMA_ENABLE_VERTICAL_FLIP BIT(0)
+
/* HW specific definitions */
#define XILINX_DMA_MAX_CHANS_PER_DEVICE 0x20

@@ -340,6 +343,7 @@ struct xilinx_dma_tx_descriptor {
* @start_transfer: Differentiate b/w DMA IP's transfer
* @stop_transfer: Differentiate b/w DMA IP's quiesce
* @tdest: TDEST value for mcdma
+ * @has_vflip: S2MM vertical flip
*/
struct xilinx_dma_chan {
struct xilinx_dma_device *xdev;
@@ -376,6 +380,7 @@ struct xilinx_dma_chan {
void (*start_transfer)(struct xilinx_dma_chan *chan);
int (*stop_transfer)(struct xilinx_dma_chan *chan);
u16 tdest;
+ bool has_vflip;
};

/**
@@ -1092,6 +1097,14 @@ static void xilinx_vdma_start_transfer(struct xilinx_dma_chan *chan)
desc->async_tx.phys);

/* Configure the hardware using info in the config structure */
+ if (chan->has_vflip) {
+ reg = dma_read(chan, XILINX_VDMA_REG_ENABLE_VERTICAL_FLIP);
+ reg &= ~XILINX_VDMA_ENABLE_VERTICAL_FLIP;
+ reg |= config->vflip_en;
+ dma_write(chan, XILINX_VDMA_REG_ENABLE_VERTICAL_FLIP,
+ reg);
+ }
+
reg = dma_ctrl_read(chan, XILINX_DMA_REG_DMACR);

if (config->frm_cnt_en)
@@ -2105,6 +2118,8 @@ int xilinx_vdma_channel_set_config(struct dma_chan *dchan,
}

chan->config.frm_cnt_en = cfg->frm_cnt_en;
+ chan->config.vflip_en = cfg->vflip_en;
+
if (cfg->park)
chan->config.park_frm = cfg->park_frm;
else
@@ -2428,6 +2443,13 @@ static int xilinx_dma_chan_probe(struct xilinx_dma_device *xdev,
chan->direction = DMA_DEV_TO_MEM;
chan->id = chan_id;
chan->tdest = chan_id - xdev->nr_channels;
+ chan->has_vflip = of_property_read_bool(node,
+ "xlnx,enable-vert-flip");
+ if (chan->has_vflip) {
+ chan->config.vflip_en = dma_read(chan,
+ XILINX_VDMA_REG_ENABLE_VERTICAL_FLIP) &
+ XILINX_VDMA_ENABLE_VERTICAL_FLIP;
+ }

chan->ctrl_offset = XILINX_DMA_S2MM_CTRL_OFFSET;
if (xdev->dma_config->dmatype == XDMA_TYPE_VDMA) {
diff --git a/include/linux/dma/xilinx_dma.h b/include/linux/dma/xilinx_dma.h
index 34b98f2..5b6e61e 100644
--- a/include/linux/dma/xilinx_dma.h
+++ b/include/linux/dma/xilinx_dma.h
@@ -27,6 +27,7 @@
* @delay: Delay counter
* @reset: Reset Channel
* @ext_fsync: External Frame Sync source
+ * @vflip_en: Vertical Flip enable
*/
struct xilinx_vdma_config {
int frm_dly;
@@ -39,6 +40,7 @@ struct xilinx_vdma_config {
int delay;
int reset;
int ext_fsync;
+ bool vflip_en;
};

int xilinx_vdma_channel_set_config(struct dma_chan *dchan,
--
1.7.1


2018-06-13 07:37:23

by Radhey Shyam Pandey

[permalink] [raw]
Subject: [PATCH 1/2] dt-bindings: dmaengine: xilinx_dma: Add VDMA vertical flip property

The AXI VDMA core supports Vertical flip in S2MM path when Enable
Vertical Flip (Advanced tab) is selected. To allow vertical flip
programming define an optional 'xlnx,enable-vert-flip' channel
child node property.

Signed-off-by: Radhey Shyam Pandey <[email protected]>
Signed-off-by: Michal Simek <[email protected]>
---
.../devicetree/bindings/dma/xilinx/xilinx_dma.txt | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/Documentation/devicetree/bindings/dma/xilinx/xilinx_dma.txt b/Documentation/devicetree/bindings/dma/xilinx/xilinx_dma.txt
index a2b8bfa..174af2c 100644
--- a/Documentation/devicetree/bindings/dma/xilinx/xilinx_dma.txt
+++ b/Documentation/devicetree/bindings/dma/xilinx/xilinx_dma.txt
@@ -66,6 +66,8 @@ Optional child node properties:
Optional child node properties for VDMA:
- xlnx,genlock-mode: Tells Genlock synchronization is
enabled/disabled in hardware.
+- xlnx,enable-vert-flip: Tells vertical flip is
+ enabled/disabled in hardware(S2MM path).
Optional child node properties for AXI DMA:
-dma-channels: Number of dma channels in child node.

--
1.7.1


Subject: RE: [PATCH 2/2] dmaengine: xilinx_dma: Enable VDMA S2MM vertical flip support


<Snip>
>
> Vertical flip state is exported in xilinx_vdma_config and depending on IP
> configuration(c_enable_vert_flip) vertical flip state is programmed in
> hardware.
>
> Signed-off-by: Radhey Shyam Pandey <[email protected]>
> Signed-off-by: Michal Simek <[email protected]>

Acked-by: Kedareswara rao Appana <[email protected]>

> ---
> drivers/dma/xilinx/xilinx_dma.c | 22 ++++++++++++++++++++++
> include/linux/dma/xilinx_dma.h | 2 ++
> 2 files changed, 24 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/dma/xilinx/xilinx_dma.c
> b/drivers/dma/xilinx/xilinx_dma.c index 27b5235..c124423 100644
> --- a/drivers/dma/xilinx/xilinx_dma.c
> +++ b/drivers/dma/xilinx/xilinx_dma.c
> @@ -115,6 +115,9 @@
> #define XILINX_VDMA_REG_START_ADDRESS(n) (0x000c + 4 * (n))
> #define XILINX_VDMA_REG_START_ADDRESS_64(n) (0x000c + 8 * (n))
>
> +#define XILINX_VDMA_REG_ENABLE_VERTICAL_FLIP 0x00ec
> +#define XILINX_VDMA_ENABLE_VERTICAL_FLIP BIT(0)
> +
> /* HW specific definitions */
> #define XILINX_DMA_MAX_CHANS_PER_DEVICE 0x20
>
> @@ -340,6 +343,7 @@ struct xilinx_dma_tx_descriptor {
> * @start_transfer: Differentiate b/w DMA IP's transfer
> * @stop_transfer: Differentiate b/w DMA IP's quiesce
> * @tdest: TDEST value for mcdma
> + * @has_vflip: S2MM vertical flip
> */
> struct xilinx_dma_chan {
> struct xilinx_dma_device *xdev;
> @@ -376,6 +380,7 @@ struct xilinx_dma_chan {
> void (*start_transfer)(struct xilinx_dma_chan *chan);
> int (*stop_transfer)(struct xilinx_dma_chan *chan);
> u16 tdest;
> + bool has_vflip;
> };
>
> /**
> @@ -1092,6 +1097,14 @@ static void xilinx_vdma_start_transfer(struct
> xilinx_dma_chan *chan)
> desc->async_tx.phys);
>
> /* Configure the hardware using info in the config structure */
> + if (chan->has_vflip) {
> + reg = dma_read(chan,
> XILINX_VDMA_REG_ENABLE_VERTICAL_FLIP);
> + reg &= ~XILINX_VDMA_ENABLE_VERTICAL_FLIP;
> + reg |= config->vflip_en;
> + dma_write(chan,
> XILINX_VDMA_REG_ENABLE_VERTICAL_FLIP,
> + reg);
> + }
> +
> reg = dma_ctrl_read(chan, XILINX_DMA_REG_DMACR);
>
> if (config->frm_cnt_en)
> @@ -2105,6 +2118,8 @@ int xilinx_vdma_channel_set_config(struct
> dma_chan *dchan,
> }
>
> chan->config.frm_cnt_en = cfg->frm_cnt_en;
> + chan->config.vflip_en = cfg->vflip_en;
> +
> if (cfg->park)
> chan->config.park_frm = cfg->park_frm;
> else
> @@ -2428,6 +2443,13 @@ static int xilinx_dma_chan_probe(struct
> xilinx_dma_device *xdev,
> chan->direction = DMA_DEV_TO_MEM;
> chan->id = chan_id;
> chan->tdest = chan_id - xdev->nr_channels;
> + chan->has_vflip = of_property_read_bool(node,
> + "xlnx,enable-vert-flip");
> + if (chan->has_vflip) {
> + chan->config.vflip_en = dma_read(chan,
> + XILINX_VDMA_REG_ENABLE_VERTICAL_FLIP)
> &
> + XILINX_VDMA_ENABLE_VERTICAL_FLIP;
> + }
>
> chan->ctrl_offset = XILINX_DMA_S2MM_CTRL_OFFSET;
> if (xdev->dma_config->dmatype == XDMA_TYPE_VDMA) { diff
> --git a/include/linux/dma/xilinx_dma.h b/include/linux/dma/xilinx_dma.h
> index 34b98f2..5b6e61e 100644
> --- a/include/linux/dma/xilinx_dma.h
> +++ b/include/linux/dma/xilinx_dma.h
> @@ -27,6 +27,7 @@
> * @delay: Delay counter
> * @reset: Reset Channel
> * @ext_fsync: External Frame Sync source
> + * @vflip_en: Vertical Flip enable
> */
> struct xilinx_vdma_config {
> int frm_dly;
> @@ -39,6 +40,7 @@ struct xilinx_vdma_config {
> int delay;
> int reset;
> int ext_fsync;
> + bool vflip_en;
> };
>
> int xilinx_vdma_channel_set_config(struct dma_chan *dchan,
> --
> 1.7.1


Subject: RE: [PATCH 1/2] dt-bindings: dmaengine: xilinx_dma: Add VDMA vertical flip property

<Snip>
>
> The AXI VDMA core supports Vertical flip in S2MM path when Enable Vertical
> Flip (Advanced tab) is selected. To allow vertical flip programming define an
> optional 'xlnx,enable-vert-flip' channel child node property.
>
> Signed-off-by: Radhey Shyam Pandey <[email protected]>
> Signed-off-by: Michal Simek <[email protected]>

Acked-by: Kedareswara rao Appana <[email protected]>

Regards,
Kedar.

> ---
> .../devicetree/bindings/dma/xilinx/xilinx_dma.txt | 2 ++
> 1 files changed, 2 insertions(+), 0 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/dma/xilinx/xilinx_dma.txt
> b/Documentation/devicetree/bindings/dma/xilinx/xilinx_dma.txt
> index a2b8bfa..174af2c 100644
> --- a/Documentation/devicetree/bindings/dma/xilinx/xilinx_dma.txt
> +++ b/Documentation/devicetree/bindings/dma/xilinx/xilinx_dma.txt
> @@ -66,6 +66,8 @@ Optional child node properties:
> Optional child node properties for VDMA:
> - xlnx,genlock-mode: Tells Genlock synchronization is
> enabled/disabled in hardware.
> +- xlnx,enable-vert-flip: Tells vertical flip is
> + enabled/disabled in hardware(S2MM path).
> Optional child node properties for AXI DMA:
> -dma-channels: Number of dma channels in child node.
>
> --
> 1.7.1


2018-06-26 17:02:36

by Rob Herring

[permalink] [raw]
Subject: Re: [PATCH 1/2] dt-bindings: dmaengine: xilinx_dma: Add VDMA vertical flip property

On Wed, Jun 13, 2018 at 01:04:47PM +0530, Radhey Shyam Pandey wrote:
> The AXI VDMA core supports Vertical flip in S2MM path when Enable
> Vertical Flip (Advanced tab) is selected. To allow vertical flip
> programming define an optional 'xlnx,enable-vert-flip' channel
> child node property.
>
> Signed-off-by: Radhey Shyam Pandey <[email protected]>
> Signed-off-by: Michal Simek <[email protected]>
> ---
> .../devicetree/bindings/dma/xilinx/xilinx_dma.txt | 2 ++
> 1 files changed, 2 insertions(+), 0 deletions(-)

Reviewed-by: Rob Herring <[email protected]>

2018-06-29 12:51:30

by Vinod Koul

[permalink] [raw]
Subject: Re: [PATCH 0/2] Enable VDMA S2MM vertical flip support

On 13-06-18, 13:04, Radhey Shyam Pandey wrote:
> The AXI VDMA core supports Vertical Flip with S2MM as the path when
> Enable Vertical Flip (Advanced tab) is selected. This patch series add
> DT property for vertical flip and program its state in VDMA start_transfer.

Applied both, thanks

--
~Vinod