aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/layerscape/patches-5.4/806-dma-0007-MLK-15330-1-dma-fsl-edma-v3-combine-two-cells-into-o.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/layerscape/patches-5.4/806-dma-0007-MLK-15330-1-dma-fsl-edma-v3-combine-two-cells-into-o.patch')
-rw-r--r--target/linux/layerscape/patches-5.4/806-dma-0007-MLK-15330-1-dma-fsl-edma-v3-combine-two-cells-into-o.patch88
1 files changed, 88 insertions, 0 deletions
diff --git a/target/linux/layerscape/patches-5.4/806-dma-0007-MLK-15330-1-dma-fsl-edma-v3-combine-two-cells-into-o.patch b/target/linux/layerscape/patches-5.4/806-dma-0007-MLK-15330-1-dma-fsl-edma-v3-combine-two-cells-into-o.patch
new file mode 100644
index 0000000000..3193f707ce
--- /dev/null
+++ b/target/linux/layerscape/patches-5.4/806-dma-0007-MLK-15330-1-dma-fsl-edma-v3-combine-two-cells-into-o.patch
@@ -0,0 +1,88 @@
+From bae75b5a56bc2c8768541b4b61edb28609486357 Mon Sep 17 00:00:00 2001
+From: Robin Gong <yibin.gong@nxp.com>
+Date: Tue, 4 Jul 2017 14:45:25 +0800
+Subject: [PATCH] MLK-15330-1: dma: fsl-edma-v3: combine two cells into one
+
+For dual fifo case, fsl-edma-v3 need add another cell. It's not friendly
+for user and it's possible other cells maybe added to other use cases,
+so combine two cells into one now, and for some special use cases such as
+dual fifo property can directly be passed by one bit of cell3 rather than
+another cell.
+
+Signed-off-by: Robin Gong <yibin.gong@nxp.com>
+(cherry picked from commit 3ecd1b3382e2c746728842fb2c084fbb030eb5de)
+---
+ Documentation/devicetree/bindings/dma/fsl-edma-v3.txt | 13 +++++++------
+ drivers/dma/fsl-edma-v3.c | 9 ++++++---
+ 2 files changed, 13 insertions(+), 9 deletions(-)
+
+--- a/Documentation/devicetree/bindings/dma/fsl-edma-v3.txt
++++ b/Documentation/devicetree/bindings/dma/fsl-edma-v3.txt
+@@ -14,12 +14,13 @@ Required properties:
+ - interrupts : A list of interrupt-specifiers, each channel has one interrupt.
+ - interrupt-names : Should contain:
+ "edma-chan12-tx" - the channel12 transmission interrupt
+-- #dma-cells : Must be <4>.
++- #dma-cells : Must be <3>.
+ The 1st cell specifies the channel ID.
+ The 2nd cell specifies the channel priority.
+- The 3rd cell specifies the channel type like for transmit or receive:
++ The 3rd cell specifies the channel attributes which include below:
++ BIT(0): transmit or receive:
+ 0: transmit, 1: receive.
+- The 4th cell specifies the local access or remote access:
++ BIT(1): local or remote access:
+ 0: local, 1: remote.
+ See the SoC's reference manual for all the supported request sources.
+ - dma-channels : Number of channels supported by the controller
+@@ -31,7 +32,7 @@ edma0: dma-controller@40018000 {
+ <0x0 0x5a2d0000 0x0 0x10000>, /* channel13 UART0 tx */
+ <0x0 0x5a2e0000 0x0 0x10000>, /* channel14 UART1 rx */
+ <0x0 0x5a2f0000 0x0 0x10000>; /* channel15 UART1 tx */
+- #dma-cells = <4>;
++ #dma-cells = <3>;
+ dma-channels = <4>;
+ interrupts = <GIC_SPI 434 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 435 IRQ_TYPE_LEVEL_HIGH>,
+@@ -60,7 +61,7 @@ lpuart1: serial@5a070000 {
+ assigned-clock-rates = <80000000>;
+ power-domains = <&pd_dma_lpuart1>;
+ dma-names = "tx","rx";
+- dmas = <&edma0 15 0 0 0>,
+- <&edma0 14 0 1 0>;
++ dmas = <&edma0 15 0 0>,
++ <&edma0 14 0 1>;
+ status = "disabled";
+ };
+--- a/drivers/dma/fsl-edma-v3.c
++++ b/drivers/dma/fsl-edma-v3.c
+@@ -100,6 +100,9 @@
+ BIT(DMA_SLAVE_BUSWIDTH_8_BYTES) | \
+ BIT(DMA_SLAVE_BUSWIDTH_16_BYTES))
+
++#define ARGS_RX BIT(0)
++#define ARGS_REMOTE BIT(1)
++
+ struct fsl_edma3_hw_tcd {
+ __le32 saddr;
+ __le16 soff;
+@@ -696,7 +699,7 @@ static struct dma_chan *fsl_edma3_xlate(
+ struct dma_chan *chan, *_chan;
+ struct fsl_edma3_chan *fsl_chan;
+
+- if (dma_spec->args_count != 4)
++ if (dma_spec->args_count != 3)
+ return NULL;
+
+ mutex_lock(&fsl_edma3->fsl_edma3_mutex);
+@@ -710,8 +713,8 @@ static struct dma_chan *fsl_edma3_xlate(
+ chan = dma_get_slave_channel(chan);
+ chan->device->privatecnt++;
+ fsl_chan->priority = dma_spec->args[1];
+- fsl_chan->is_rxchan = dma_spec->args[2];
+- fsl_chan->is_remote = dma_spec->args[3];
++ fsl_chan->is_rxchan = dma_spec->args[2] & ARGS_RX;
++ fsl_chan->is_remote = dma_spec->args[2] & ARGS_REMOTE;
+ mutex_unlock(&fsl_edma3->fsl_edma3_mutex);
+ return chan;
+ }