aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/layerscape/patches-5.4/806-dma-0009-MLK-16327-1-dma-fsl-edma-v3-make-exclusive-channel-n.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/layerscape/patches-5.4/806-dma-0009-MLK-16327-1-dma-fsl-edma-v3-make-exclusive-channel-n.patch')
-rw-r--r--target/linux/layerscape/patches-5.4/806-dma-0009-MLK-16327-1-dma-fsl-edma-v3-make-exclusive-channel-n.patch128
1 files changed, 0 insertions, 128 deletions
diff --git a/target/linux/layerscape/patches-5.4/806-dma-0009-MLK-16327-1-dma-fsl-edma-v3-make-exclusive-channel-n.patch b/target/linux/layerscape/patches-5.4/806-dma-0009-MLK-16327-1-dma-fsl-edma-v3-make-exclusive-channel-n.patch
deleted file mode 100644
index 6c770ed4df..0000000000
--- a/target/linux/layerscape/patches-5.4/806-dma-0009-MLK-16327-1-dma-fsl-edma-v3-make-exclusive-channel-n.patch
+++ /dev/null
@@ -1,128 +0,0 @@
-From c5a5706b8a86660505ef0dc863a85596437ca49b Mon Sep 17 00:00:00 2001
-From: Robin Gong <yibin.gong@nxp.com>
-Date: Wed, 30 Aug 2017 18:51:16 +0800
-Subject: [PATCH] MLK-16327-1: dma: fsl-edma-v3: make exclusive channel name
- for all edma channels
-
- Since there are multi edmav3 instances on i.mx8, every edma channel name
-is better unique.But so far, all edma channel name is 'edma-channel(id)-
-tx',thus some edma channels which share the same channel id but different
-edma instance will show the same channel name in kernel and this is not
-friendly to debug in kernel.
- Now the edma channel name(interrupt-names property) is define in dts
-as below:
- "edmaX-chanX-Xx"
- | | |---> receive/transmit, r or t
- | |---> channel id, the max number is 32
- |---> edma controller instance, 0, 1, 2,..etc
-and get below correct name with 'cat /proc/interrupts':
- 43: 0 0 0 0 GICv3 466 Level edma0-chan8-rx
- 44: 0 0 0 0 GICv3 467 Level edma0-chan9-tx
- 45: 79 0 0 0 GICv3 468 Level edma0-chan10-rx
- 46: 311 0 0 0 GICv3 469 Level edma0-chan11-tx
- 47: 0 0 0 0 GICv3 470 Level edma0-chan12-rx
- 48: 0 0 0 0 GICv3 471 Level edma0-chan13-tx
- 49: 0 0 0 0 GICv3 472 Level edma0-chan14-rx
- 50: 0 0 0 0 GICv3 473 Level edma0-chan15-tx
- 51: 0 0 0 0 GICv3 406 Level edma2-chan0-tx
- 52: 0 0 0 0 GICv3 407 Level edma2-chan1-tx
- 53: 0 0 0 0 GICv3 408 Level edma2-chan2-tx
- 54: 0 0 0 0 GICv3 409 Level edma2-chan3-tx
- 55: 0 0 0 0 GICv3 410 Level edma2-chan4-tx
- 56: 0 0 0 0 GICv3 411 Level edma2-chan5-tx
- 57: 0 0 0 0 GICv3 442 Level edma2-chan6-rx, edma2-chan7-tx
-
-Signed-off-by: Robin Gong <yibin.gong@nxp.com>
-Reviewed-by: Shengjiu Wang <shengjiu.wang@nxp.com>
-(cherry picked from commit af8e197a92c9c024ec4fbfcf543d744e81748773)
----
- .../devicetree/bindings/dma/fsl-edma-v3.txt | 12 +++++---
- drivers/dma/fsl-edma-v3.c | 35 ++++++++++++++++++++--
- 2 files changed, 41 insertions(+), 6 deletions(-)
-
---- a/Documentation/devicetree/bindings/dma/fsl-edma-v3.txt
-+++ b/Documentation/devicetree/bindings/dma/fsl-edma-v3.txt
-@@ -12,8 +12,12 @@ Required properties:
- - reg : Specifies base physical address(s) and size of the eDMA channel registers.
- Each eDMA channel has separated register's address and size.
- - interrupts : A list of interrupt-specifiers, each channel has one interrupt.
--- interrupt-names : Should contain:
-- "edma-chan12-tx" - the channel12 transmission interrupt
-+- interrupt-names : Should contain below template:
-+ "edmaX-chanX-Xx"
-+ | | |---> receive/transmit, r or t
-+ | |---> channel id, the max number is 32
-+ |---> edma controller instance, 0, 1, 2,..etc
-+
- - #dma-cells : Must be <3>.
- The 1st cell specifies the channel ID.
- The 2nd cell specifies the channel priority.
-@@ -40,8 +44,8 @@ edma0: dma-controller@40018000 {
- <GIC_SPI 435 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 436 IRQ_TYPE_LEVEL_HIGH>,
- <GIC_SPI 437 IRQ_TYPE_LEVEL_HIGH>;
-- interrupt-names = "edma-chan12-tx", "edma-chan13-tx",
-- "edma-chan14-tx", "edma-chan15-tx";
-+ interrupt-names = "edma0-chan12-rx", "edma0-chan13-tx",
-+ "edma0-chan14-rx", "edma0-chan15-tx";
- status = "okay";
- };
-
---- a/drivers/dma/fsl-edma-v3.c
-+++ b/drivers/dma/fsl-edma-v3.c
-@@ -107,6 +107,10 @@
- #define ARGS_REMOTE BIT(1)
- #define ARGS_DFIFO BIT(2)
-
-+/* channel name template define in dts */
-+#define CHAN_PREFIX "edma0-chan"
-+#define CHAN_POSFIX "-tx"
-+
- struct fsl_edma3_hw_tcd {
- __le32 saddr;
- __le16 soff;
-@@ -806,7 +810,10 @@ static int fsl_edma3_probe(struct platfo
- INIT_LIST_HEAD(&fsl_edma3->dma_dev.channels);
- for (i = 0; i < fsl_edma3->n_chans; i++) {
- struct fsl_edma3_chan *fsl_chan = &fsl_edma3->chans[i];
-- char *txirq_name = fsl_chan->txirq_name;
-+ const char *txirq_name = fsl_chan->txirq_name;
-+ char chanid[3], id_len = 0;
-+ char *p = chanid;
-+ unsigned long val;
-
- fsl_chan->edma3 = fsl_edma3;
- /* Get per channel membase */
-@@ -819,7 +826,31 @@ static int fsl_edma3_probe(struct platfo
- * channel0:0x10000, channel1:0x20000... total 32 channels
- */
- fsl_chan->hw_chanid = (res->start >> 16) & 0x1f;
-- sprintf(txirq_name, "edma-chan%d-tx", fsl_chan->hw_chanid);
-+
-+ ret = of_property_read_string_index(np, "interrupt-names", i,
-+ &txirq_name);
-+ if (ret) {
-+ dev_err(&pdev->dev, "read interrupt-names fail.\n");
-+ return ret;
-+ }
-+ /* Get channel id length from dts, one-digit or double-digit */
-+ id_len = strlen(txirq_name) - strlen(CHAN_PREFIX) -
-+ strlen(CHAN_POSFIX);
-+ if (id_len > 2) {
-+ dev_err(&pdev->dev, "%s is edmaX-chanX-tx in dts?\n",
-+ res->name);
-+ return -EINVAL;
-+ }
-+ /* Grab channel id from txirq_name */
-+ strncpy(p, txirq_name + strlen(CHAN_PREFIX), id_len);
-+ *(p + id_len) = '\0';
-+
-+ /* check if the channel id match well with hw_chanid */
-+ ret = kstrtoul(chanid, 0, &val);
-+ if (ret || val != fsl_chan->hw_chanid) {
-+ dev_err(&pdev->dev, "%s,wrong id?\n", txirq_name);
-+ return -EINVAL;
-+ }
-
- /* request channel irq */
- fsl_chan->txirq = platform_get_irq_byname(pdev, txirq_name);