diff mbox series

dt-bindings: dma: fsl-mxs-dma: Convert MXS DMA to DT schema

Message ID 20221217010724.632088-1-marex@denx.de
State Superseded
Headers show
Series dt-bindings: dma: fsl-mxs-dma: Convert MXS DMA to DT schema | expand

Commit Message

Marek Vasut Dec. 17, 2022, 1:07 a.m. UTC
Convert the MXS DMA binding to DT schema format using json-schema.

Drop "interrupt-names" property, since it is broken. The drivers/dma/mxs-dma.c
in Linux kernel does not use it, the property contains duplicate array entries
in existing DTs, and even malformed entries (gmpi, should have been gpmi). Get
rid of that optional property altogether.

Update example node names to be standard dma-controller@ ,
add global interrupt-parent property into example.

Signed-off-by: Marek Vasut <marex@denx.de>
---
Cc: Fabio Estevam <festevam@gmail.com>
Cc: Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>
Cc: NXP Linux Team <linux-imx@nxp.com>
Cc: Pengutronix Kernel Team <kernel@pengutronix.de>
Cc: Rob Herring <robh+dt@kernel.org>
Cc: Sascha Hauer <s.hauer@pengutronix.de>
Cc: Shawn Guo <shawnguo@kernel.org>
Cc: Vinod Koul <vkoul@kernel.org>
Cc: dmaengine@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org
To: devicetree@vger.kernel.org
---
 .../devicetree/bindings/dma/fsl,mxs-dma.yaml  | 115 ++++++++++++++++++
 .../devicetree/bindings/dma/fsl-mxs-dma.txt   |  60 ---------
 2 files changed, 115 insertions(+), 60 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/dma/fsl,mxs-dma.yaml
 delete mode 100644 Documentation/devicetree/bindings/dma/fsl-mxs-dma.txt

Comments

Marek Vasut Dec. 19, 2022, 8:46 a.m. UTC | #1
On 12/19/22 09:36, Krzysztof Kozlowski wrote:
> On 18/12/2022 20:06, Marek Vasut wrote:
>> On 12/18/22 19:46, Krzysztof Kozlowski wrote:
>>> On 18/12/2022 00:12, Marek Vasut wrote:
>>>> On 12/17/22 12:05, Krzysztof Kozlowski wrote:
>>>>
>>>> [...]
>>>>
>>>>>> +allOf:
>>>>>> +  - $ref: dma-controller.yaml#
>>>>>> +  - if:
>>>>>> +      properties:
>>>>>> +        compatible:
>>>>>> +          not:
>>>>>
>>>>> I think "not:" goes just after "if:". Please double check that it's correct.
>>>>>
>>>>> Anyway it is easier to have this without negation and you already
>>>>> enumerate all variants (here and below).
>>>>
>>>> About this part, I don't think that works. See this:
>>>>
>>>> $ git grep -A 15 'imx2[38]-dma-apb[hx]' arch/ | grep
>>>> '\(imx2[38]-dma-apb[hx]\|dma-channels\)'
>>>> arch/arm/boot/dts/imx23.dtsi: compatible = "fsl,imx23-dma-apbh";
>>>> arch/arm/boot/dts/imx23.dtsi- dma-channels = <8>;
>>>> arch/arm/boot/dts/imx23.dtsi: compatible = "fsl,imx23-dma-apbx";
>>>> arch/arm/boot/dts/imx23.dtsi- dma-channels = <16>;
>>>> arch/arm/boot/dts/imx28.dtsi: compatible = "fsl,imx28-dma-apbh";
>>>> arch/arm/boot/dts/imx28.dtsi- dma-channels = <16>;
>>>> arch/arm/boot/dts/imx28.dtsi: compatible = "fsl,imx28-dma-apbx";
>>>> arch/arm/boot/dts/imx28.dtsi- dma-channels = <16>;
>>>> arch/arm/boot/dts/imx6qdl.dtsi: compatible = "fsl,imx6q-dma-apbh",
>>>> "fsl,imx28-dma-apbh";
>>>> arch/arm/boot/dts/imx6qdl.dtsi- dma-channels = <4>;
>>>> arch/arm/boot/dts/imx6sx.dtsi: compatible = "fsl,imx6sx-dma-apbh",
>>>> "fsl,imx28-dma-apbh";
>>>> arch/arm/boot/dts/imx6sx.dtsi- dma-channels = <4>;
>>>> arch/arm/boot/dts/imx6ul.dtsi: compatible = "fsl,imx6q-dma-apbh",
>>>> "fsl,imx28-dma-apbh";
>>>> arch/arm/boot/dts/imx6ul.dtsi- dma-channels = <4>;
>>>> arch/arm/boot/dts/imx7s.dtsi: compatible = "fsl,imx7d-dma-apbh",
>>>> "fsl,imx28-dma-apbh";
>>>> arch/arm/boot/dts/imx7s.dtsi- dma-channels = <4>;
>>>> arch/arm64/boot/dts/freescale/imx8mm.dtsi: compatible =
>>>> "fsl,imx7d-dma-apbh", "fsl,imx28-dma-apbh";
>>>> arch/arm64/boot/dts/freescale/imx8mm.dtsi- dma-channels = <4>;
>>>> arch/arm64/boot/dts/freescale/imx8mn.dtsi: compatible =
>>>> "fsl,imx7d-dma-apbh", "fsl,imx28-dma-apbh";
>>>> arch/arm64/boot/dts/freescale/imx8mn.dtsi- dma-channels = <4>;
>>>>
>>>> So I think what we have to do to validate that, is, say
>>>>
>>>> default: 4
>>>>
>>>> if does not match on 6q/6sx/7d/23-apbx/28-abbh/28-apbx then 8
>>>>
>>>> if does not match on 6q/6sx/7d/23-apbh then 16
>>>>
>>>> But if there is a better way to validate the above, please do tell.
>>>
>>> Then your existing if:then: is also not correct because you require for
>>> fsl,imx28-dma-apbh (as it is not in second if:then:) const:16. Just
>>> don't require it.
>>
>> So, shall I just drop the entire allOf: section ?
> 
> No, what about the interrupts?

The interrupts and dma-channels are matched 1:1 for this controller, 1 
DMA channel, 1 interrupt. 16 dma channels means 16 interrupts .
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/dma/fsl,mxs-dma.yaml b/Documentation/devicetree/bindings/dma/fsl,mxs-dma.yaml
new file mode 100644
index 0000000000000..46a579423b0d1
--- /dev/null
+++ b/Documentation/devicetree/bindings/dma/fsl,mxs-dma.yaml
@@ -0,0 +1,115 @@ 
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/dma/fsl,mxs-dma.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Freescale Direct Memory Access (DMA) Controller from i.MX23/i.MX28
+
+maintainers:
+  - Marek Vasut <marex@denx.de>
+
+properties:
+  compatible:
+    oneOf:
+      - items:
+          - enum:
+              - fsl,imx6q-dma-apbh
+              - fsl,imx6sx-dma-apbh
+              - fsl,imx7d-dma-apbh
+          - const: fsl,imx28-dma-apbh
+      - items:
+          - enum:
+              - fsl,imx23-dma-apbh
+              - fsl,imx23-dma-apbx
+              - fsl,imx28-dma-apbh
+              - fsl,imx28-dma-apbx
+  reg:
+    maxItems: 1
+
+  clocks:
+    maxItems: 1
+
+  interrupts:
+    minItems: 4
+    maxItems: 16
+
+  "#dma-cells":
+    const: 1
+
+  dma-channels:
+    enum: [4, 8, 16]
+
+required:
+  - compatible
+  - reg
+  - "#dma-cells"
+  - dma-channels
+  - interrupts
+
+allOf:
+  - $ref: dma-controller.yaml#
+  - if:
+      properties:
+        compatible:
+          not:
+            contains:
+              enum:
+                - fsl,imx6q-dma-apbh
+                - fsl,imx6sx-dma-apbh
+                - fsl,imx7d-dma-apbh
+                - fsl,imx23-dma-apbx
+                - fsl,imx28-dma-apbh
+                - fsl,imx28-dma-apbx
+    then:
+      properties:
+        dma-channels:
+          const: 8
+        interrupts:
+          maxItems: 8
+  - if:
+      properties:
+        compatible:
+          not:
+            contains:
+              enum:
+                - fsl,imx6q-dma-apbh
+                - fsl,imx6sx-dma-apbh
+                - fsl,imx7d-dma-apbh
+                - fsl,imx23-dma-apbh
+    then:
+      properties:
+        dma-channels:
+          const: 16
+        interrupts:
+          maxItems: 16
+
+additionalProperties: false
+
+examples:
+  - |
+    interrupt-parent = <&irqc>;
+
+    dma-controller@80004000 {
+      compatible = "fsl,imx28-dma-apbh";
+      reg = <0x80004000 0x2000>;
+      interrupts = <82 83 84 85
+                    88 88 88 88
+                    88 88 88 88
+                    87 86 0 0>;
+      #dma-cells = <1>;
+      dma-channels = <16>;
+    };
+
+    dma-controller@80024000 {
+      compatible = "fsl,imx28-dma-apbx";
+      reg = <0x80024000 0x2000>;
+      interrupts = <78 79 66 0
+                    80 81 68 69
+                    70 71 72 73
+                    74 75 76 77>;
+      #dma-cells = <1>;
+      dma-channels = <16>;
+    };
+
+...
diff --git a/Documentation/devicetree/bindings/dma/fsl-mxs-dma.txt b/Documentation/devicetree/bindings/dma/fsl-mxs-dma.txt
deleted file mode 100644
index e30e184f50c72..0000000000000
--- a/Documentation/devicetree/bindings/dma/fsl-mxs-dma.txt
+++ /dev/null
@@ -1,60 +0,0 @@ 
-* Freescale MXS DMA
-
-Required properties:
-- compatible : Should be "fsl,<chip>-dma-apbh" or "fsl,<chip>-dma-apbx"
-- reg : Should contain registers location and length
-- interrupts : Should contain the interrupt numbers of DMA channels.
-  If a channel is empty/reserved, 0 should be filled in place.
-- #dma-cells : Must be <1>.  The number cell specifies the channel ID.
-- dma-channels : Number of channels supported by the DMA controller
-
-Optional properties:
-- interrupt-names : Name of DMA channel interrupts
-
-Supported chips:
-imx23, imx28.
-
-Examples:
-
-dma_apbh: dma-apbh@80004000 {
-	compatible = "fsl,imx28-dma-apbh";
-	reg = <0x80004000 0x2000>;
-	interrupts = <82 83 84 85
-		      88 88 88 88
-		      88 88 88 88
-		      87 86 0 0>;
-	interrupt-names = "ssp0", "ssp1", "ssp2", "ssp3",
-			  "gpmi0", "gmpi1", "gpmi2", "gmpi3",
-			  "gpmi4", "gmpi5", "gpmi6", "gmpi7",
-			  "hsadc", "lcdif", "empty", "empty";
-	#dma-cells = <1>;
-	dma-channels = <16>;
-};
-
-dma_apbx: dma-apbx@80024000 {
-	compatible = "fsl,imx28-dma-apbx";
-	reg = <0x80024000 0x2000>;
-	interrupts = <78 79 66 0
-		      80 81 68 69
-		      70 71 72 73
-		      74 75 76 77>;
-	interrupt-names = "auart4-rx", "auart4-tx", "spdif-tx", "empty",
-			  "saif0", "saif1", "i2c0", "i2c1",
-			  "auart0-rx", "auart0-tx", "auart1-rx", "auart1-tx",
-			  "auart2-rx", "auart2-tx", "auart3-rx", "auart3-tx";
-	#dma-cells = <1>;
-	dma-channels = <16>;
-};
-
-DMA clients connected to the MXS DMA controller must use the format
-described in the dma.txt file.
-
-Examples:
-
-auart0: serial@8006a000 {
-	compatible = "fsl,imx28-auart", "fsl,imx23-auart";
-	reg = <0x8006a000 0x2000>;
-	interrupts = <112>;
-	dmas = <&dma_apbx 8>, <&dma_apbx 9>;
-	dma-names = "rx", "tx";
-};