* [PATCH 1/3] dt-bindings: dma: Add YAML schemas for the generic DMA bindings
@ 2019-07-20 6:41 Maxime Ripard
2019-07-20 6:41 ` [PATCH 2/3] dt-bindings: dma: Convert Allwinner A10 DMA to a schema Maxime Ripard
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Maxime Ripard @ 2019-07-20 6:41 UTC (permalink / raw)
To: Mark Rutland, Rob Herring, Frank Rowand, Vinod Koul
Cc: devicetree, dmaengine, Chen-Yu Tsai, Maxime Ripard,
linux-arm-kernel, Peter Ujfalusi
The DMA controllers and consumers have a bunch of generic properties that
are needed in a device tree. Add a YAML schemas for those.
Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
---
Changes from v1:
- Dropped the dma consumer schemas
- Fixed the node name of the examples
- Enhanced a bit the description for dma-requests in case of a router
- Split the bindings in two to handle the router and controller case
separately
- Made #dma-cells required
---
.../devicetree/bindings/dma/dma-common.yaml | 43 +++++++
.../bindings/dma/dma-controller.yaml | 35 ++++++
.../devicetree/bindings/dma/dma-router.yaml | 50 ++++++++
Documentation/devicetree/bindings/dma/dma.txt | 114 +-----------------
4 files changed, 129 insertions(+), 113 deletions(-)
create mode 100644 Documentation/devicetree/bindings/dma/dma-common.yaml
create mode 100644 Documentation/devicetree/bindings/dma/dma-controller.yaml
create mode 100644 Documentation/devicetree/bindings/dma/dma-router.yaml
diff --git a/Documentation/devicetree/bindings/dma/dma-common.yaml b/Documentation/devicetree/bindings/dma/dma-common.yaml
new file mode 100644
index 000000000000..422fd6c8b0ce
--- /dev/null
+++ b/Documentation/devicetree/bindings/dma/dma-common.yaml
@@ -0,0 +1,43 @@
+# SPDX-License-Identifier: GPL-2.0
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/dma/dma-common.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: DMA Engine Generic Binding
+
+maintainers:
+ - Vinod Koul <vkoul@kernel.org>
+
+description:
+ Generic binding to provide a way for a driver using DMA Engine to
+ retrieve the DMA request or channel information that goes from a
+ hardware device to a DMA controller.
+
+properties:
+ "#dma-cells":
+ minimum: 1
+ # Should be enough
+ maximum: 255
+ description:
+ Used to provide DMA controller specific information.
+
+ dma-channel-masks:
+ $ref: /schemas/types.yaml#definitions/uint32
+ description:
+ Bitmask of available DMA channels in ascending order that are
+ not reserved by firmware and are available to the
+ kernel. i.e. first channel corresponds to LSB.
+
+ dma-channels:
+ $ref: /schemas/types.yaml#definitions/uint32
+ description:
+ Number of DMA channels supported by the controller.
+
+ dma-requests:
+ $ref: /schemas/types.yaml#definitions/uint32
+ description:
+ Number of DMA request signals supported by the controller.
+
+required:
+ - "#dma-cells"
diff --git a/Documentation/devicetree/bindings/dma/dma-controller.yaml b/Documentation/devicetree/bindings/dma/dma-controller.yaml
new file mode 100644
index 000000000000..c39f6de76670
--- /dev/null
+++ b/Documentation/devicetree/bindings/dma/dma-controller.yaml
@@ -0,0 +1,35 @@
+# SPDX-License-Identifier: GPL-2.0
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/dma/dma-controller.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: DMA Controller Generic Binding
+
+maintainers:
+ - Vinod Koul <vkoul@kernel.org>
+
+allOf:
+ - $ref: "dma-common.yaml#"
+
+# Everything else is described in the common file
+properties:
+ $nodename:
+ pattern: "^dma-controller(@.*)?$"
+
+examples:
+ - |
+ dma: dma-controller@48000000 {
+ compatible = "ti,omap-sdma";
+ reg = <0x48000000 0x1000>;
+ interrupts = <0 12 0x4
+ 0 13 0x4
+ 0 14 0x4
+ 0 15 0x4>;
+ #dma-cells = <1>;
+ dma-channels = <32>;
+ dma-requests = <127>;
+ dma-channel-mask = <0xfffe>;
+ };
+
+...
diff --git a/Documentation/devicetree/bindings/dma/dma-router.yaml b/Documentation/devicetree/bindings/dma/dma-router.yaml
new file mode 100644
index 000000000000..5b5f07393135
--- /dev/null
+++ b/Documentation/devicetree/bindings/dma/dma-router.yaml
@@ -0,0 +1,50 @@
+# SPDX-License-Identifier: GPL-2.0
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/dma/dma-router.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: DMA Router Generic Binding
+
+maintainers:
+ - Vinod Koul <vkoul@kernel.org>
+
+allOf:
+ - $ref: "dma-common.yaml#"
+
+description:
+ DMA routers are transparent IP blocks used to route DMA request
+ lines from devices to the DMA controller. Some SoCs (like TI DRA7x)
+ have more peripherals integrated with DMA requests than what the DMA
+ controller can handle directly.
+
+properties:
+ $nodename:
+ pattern: "^dma-router(@.*)?$"
+
+ dma-masters:
+ $ref: /schemas/types.yaml#definitions/phandle-array
+ description:
+ Array of phandles to the DMA controllers the router can direct
+ the signal to.
+
+ dma-requests:
+ description:
+ Number of incoming request lines the router can handle.
+
+required:
+ - "#dma-cells"
+ - dma-masters
+
+examples:
+ - |
+ sdma_xbar: dma-router@4a002b78 {
+ compatible = "ti,dra7-dma-crossbar";
+ reg = <0x4a002b78 0xfc>;
+ #dma-cells = <1>;
+ dma-requests = <205>;
+ ti,dma-safe-map = <0>;
+ dma-masters = <&sdma>;
+ };
+
+...
diff --git a/Documentation/devicetree/bindings/dma/dma.txt b/Documentation/devicetree/bindings/dma/dma.txt
index eeb4e4d1771e..90a67a016a48 100644
--- a/Documentation/devicetree/bindings/dma/dma.txt
+++ b/Documentation/devicetree/bindings/dma/dma.txt
@@ -1,113 +1 @@
-* Generic DMA Controller and DMA request bindings
-
-Generic binding to provide a way for a driver using DMA Engine to retrieve the
-DMA request or channel information that goes from a hardware device to a DMA
-controller.
-
-
-* DMA controller
-
-Required property:
-- #dma-cells: Must be at least 1. Used to provide DMA controller
- specific information. See DMA client binding below for
- more details.
-
-Optional properties:
-- dma-channels: Number of DMA channels supported by the controller.
-- dma-requests: Number of DMA request signals supported by the
- controller.
-- dma-channel-mask: Bitmask of available DMA channels in ascending order
- that are not reserved by firmware and are available to
- the kernel. i.e. first channel corresponds to LSB.
-
-Example:
-
- dma: dma@48000000 {
- compatible = "ti,omap-sdma";
- reg = <0x48000000 0x1000>;
- interrupts = <0 12 0x4
- 0 13 0x4
- 0 14 0x4
- 0 15 0x4>;
- #dma-cells = <1>;
- dma-channels = <32>;
- dma-requests = <127>;
- dma-channel-mask = <0xfffe>
- };
-
-* DMA router
-
-DMA routers are transparent IP blocks used to route DMA request lines from
-devices to the DMA controller. Some SoCs (like TI DRA7x) have more peripherals
-integrated with DMA requests than what the DMA controller can handle directly.
-
-Required property:
-- dma-masters: phandle of the DMA controller or list of phandles for
- the DMA controllers the router can direct the signal to.
-- #dma-cells: Must be at least 1. Used to provide DMA router specific
- information. See DMA client binding below for more
- details.
-
-Optional properties:
-- dma-requests: Number of incoming request lines the router can handle.
-- In the node pointed by the dma-masters:
- - dma-requests: The router driver might need to look for this in order
- to configure the routing.
-
-Example:
- sdma_xbar: dma-router@4a002b78 {
- compatible = "ti,dra7-dma-crossbar";
- reg = <0x4a002b78 0xfc>;
- #dma-cells = <1>;
- dma-requests = <205>;
- ti,dma-safe-map = <0>;
- dma-masters = <&sdma>;
- };
-
-* DMA client
-
-Client drivers should specify the DMA property using a phandle to the controller
-followed by DMA controller specific data.
-
-Required property:
-- dmas: List of one or more DMA specifiers, each consisting of
- - A phandle pointing to DMA controller node
- - A number of integer cells, as determined by the
- #dma-cells property in the node referenced by phandle
- containing DMA controller specific information. This
- typically contains a DMA request line number or a
- channel number, but can contain any data that is
- required for configuring a channel.
-- dma-names: Contains one identifier string for each DMA specifier in
- the dmas property. The specific strings that can be used
- are defined in the binding of the DMA client device.
- Multiple DMA specifiers can be used to represent
- alternatives and in this case the dma-names for those
- DMA specifiers must be identical (see examples).
-
-Examples:
-
-1. A device with one DMA read channel, one DMA write channel:
-
- i2c1: i2c@1 {
- ...
- dmas = <&dma 2 /* read channel */
- &dma 3>; /* write channel */
- dma-names = "rx", "tx";
- ...
- };
-
-2. A single read-write channel with three alternative DMA controllers:
-
- dmas = <&dma1 5
- &dma2 7
- &dma3 2>;
- dma-names = "rx-tx", "rx-tx", "rx-tx";
-
-3. A device with three channels, one of which has two alternatives:
-
- dmas = <&dma1 2 /* read channel */
- &dma1 3 /* write channel */
- &dma2 0 /* error read */
- &dma3 0>; /* alternative error read */
- dma-names = "rx", "tx", "error", "error";
+This file has been moved to dma-controller.yaml.
--
2.21.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/3] dt-bindings: dma: Convert Allwinner A10 DMA to a schema
2019-07-20 6:41 [PATCH 1/3] dt-bindings: dma: Add YAML schemas for the generic DMA bindings Maxime Ripard
@ 2019-07-20 6:41 ` Maxime Ripard
2019-07-20 6:41 ` [PATCH 3/3] dt-bindings: dma: Convert Allwinner A31 and A64 " Maxime Ripard
2019-07-20 9:24 ` [PATCH 1/3] dt-bindings: dma: Add YAML schemas for the generic DMA bindings Maxime Ripard
2 siblings, 0 replies; 8+ messages in thread
From: Maxime Ripard @ 2019-07-20 6:41 UTC (permalink / raw)
To: Mark Rutland, Rob Herring, Frank Rowand, Vinod Koul
Cc: devicetree, dmaengine, Chen-Yu Tsai, Maxime Ripard,
linux-arm-kernel, Peter Ujfalusi, Rob Herring
The older Allwinner SoCs have a DMA controller supported in Linux, with a
matching Device Tree binding.
Now that we have the DT validation in place, let's convert the device tree
bindings for that controller over to a YAML schemas.
Reviewed-by: Rob Herring <robh@kernel.org>
Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
---
.../bindings/dma/allwinner,sun4i-a10-dma.yaml | 55 +++++++++++++++++++
.../devicetree/bindings/dma/sun4i-dma.txt | 45 ---------------
2 files changed, 55 insertions(+), 45 deletions(-)
create mode 100644 Documentation/devicetree/bindings/dma/allwinner,sun4i-a10-dma.yaml
delete mode 100644 Documentation/devicetree/bindings/dma/sun4i-dma.txt
diff --git a/Documentation/devicetree/bindings/dma/allwinner,sun4i-a10-dma.yaml b/Documentation/devicetree/bindings/dma/allwinner,sun4i-a10-dma.yaml
new file mode 100644
index 000000000000..15abc0f9429f
--- /dev/null
+++ b/Documentation/devicetree/bindings/dma/allwinner,sun4i-a10-dma.yaml
@@ -0,0 +1,55 @@
+# SPDX-License-Identifier: GPL-2.0
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/dma/allwinner,sun4i-a10-dma.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Allwinner A10 DMA Controller Device Tree Bindings
+
+maintainers:
+ - Chen-Yu Tsai <wens@csie.org>
+ - Maxime Ripard <maxime.ripard@bootlin.com>
+
+allOf:
+ - $ref: "dma-controller.yaml#"
+
+properties:
+ "#dma-cells":
+ const: 2
+ description:
+ The first cell is either 0 or 1, the former to use the normal
+ DMA, 1 for dedicated DMA. The second cell is the request line
+ number.
+
+ compatible:
+ const: allwinner,sun4i-a10-dma
+
+ reg:
+ maxItems: 1
+
+ interrupts:
+ maxItems: 1
+
+ clocks:
+ maxItems: 1
+
+required:
+ - "#dma-cells"
+ - compatible
+ - reg
+ - interrupts
+ - clocks
+
+additionalProperties: false
+
+examples:
+ - |
+ dma: dma-controller@1c02000 {
+ compatible = "allwinner,sun4i-a10-dma";
+ reg = <0x01c02000 0x1000>;
+ interrupts = <27>;
+ clocks = <&ahb_gates 6>;
+ #dma-cells = <2>;
+ };
+
+...
diff --git a/Documentation/devicetree/bindings/dma/sun4i-dma.txt b/Documentation/devicetree/bindings/dma/sun4i-dma.txt
deleted file mode 100644
index 8ad556aca70b..000000000000
--- a/Documentation/devicetree/bindings/dma/sun4i-dma.txt
+++ /dev/null
@@ -1,45 +0,0 @@
-Allwinner A10 DMA Controller
-
-This driver follows the generic DMA bindings defined in dma.txt.
-
-Required properties:
-
-- compatible: Must be "allwinner,sun4i-a10-dma"
-- reg: Should contain the registers base address and length
-- interrupts: Should contain a reference to the interrupt used by this device
-- clocks: Should contain a reference to the parent AHB clock
-- #dma-cells : Should be 2, first cell denoting normal or dedicated dma,
- second cell holding the request line number.
-
-Example:
- dma: dma-controller@1c02000 {
- compatible = "allwinner,sun4i-a10-dma";
- reg = <0x01c02000 0x1000>;
- interrupts = <27>;
- clocks = <&ahb_gates 6>;
- #dma-cells = <2>;
- };
-
-Clients:
-
-DMA clients connected to the Allwinner A10 DMA controller must use the
-format described in the dma.txt file, using a three-cell specifier for
-each channel: a phandle plus two integer cells.
-The three cells in order are:
-
-1. A phandle pointing to the DMA controller.
-2. Whether it is using normal (0) or dedicated (1) channels
-3. The port ID as specified in the datasheet
-
-Example:
- spi2: spi@1c17000 {
- compatible = "allwinner,sun4i-a10-spi";
- reg = <0x01c17000 0x1000>;
- interrupts = <0 12 4>;
- clocks = <&ahb_gates 22>, <&spi2_clk>;
- clock-names = "ahb", "mod";
- dmas = <&dma 1 29>, <&dma 1 28>;
- dma-names = "rx", "tx";
- #address-cells = <1>;
- #size-cells = <0>;
- };
--
2.21.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 3/3] dt-bindings: dma: Convert Allwinner A31 and A64 DMA to a schema
2019-07-20 6:41 [PATCH 1/3] dt-bindings: dma: Add YAML schemas for the generic DMA bindings Maxime Ripard
2019-07-20 6:41 ` [PATCH 2/3] dt-bindings: dma: Convert Allwinner A10 DMA to a schema Maxime Ripard
@ 2019-07-20 6:41 ` Maxime Ripard
2019-07-20 9:24 ` [PATCH 1/3] dt-bindings: dma: Add YAML schemas for the generic DMA bindings Maxime Ripard
2 siblings, 0 replies; 8+ messages in thread
From: Maxime Ripard @ 2019-07-20 6:41 UTC (permalink / raw)
To: Mark Rutland, Rob Herring, Frank Rowand, Vinod Koul
Cc: devicetree, dmaengine, Chen-Yu Tsai, Maxime Ripard,
linux-arm-kernel, Peter Ujfalusi, Rob Herring
The newer Allwinner SoCs have a DMA controller supported in Linux, with a
matching Device Tree binding.
Now that we have the DT validation in place, let's convert the device tree
bindings for that controller over to a YAML schemas.
Reviewed-by: Rob Herring <robh@kernel.org>
Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
---
.../dma/allwinner,sun50i-a64-dma.yaml | 88 +++++++++++++++++++
.../bindings/dma/allwinner,sun6i-a31-dma.yaml | 62 +++++++++++++
.../devicetree/bindings/dma/sun6i-dma.txt | 81 -----------------
3 files changed, 150 insertions(+), 81 deletions(-)
create mode 100644 Documentation/devicetree/bindings/dma/allwinner,sun50i-a64-dma.yaml
create mode 100644 Documentation/devicetree/bindings/dma/allwinner,sun6i-a31-dma.yaml
delete mode 100644 Documentation/devicetree/bindings/dma/sun6i-dma.txt
diff --git a/Documentation/devicetree/bindings/dma/allwinner,sun50i-a64-dma.yaml b/Documentation/devicetree/bindings/dma/allwinner,sun50i-a64-dma.yaml
new file mode 100644
index 000000000000..4cb9d6b93138
--- /dev/null
+++ b/Documentation/devicetree/bindings/dma/allwinner,sun50i-a64-dma.yaml
@@ -0,0 +1,88 @@
+# SPDX-License-Identifier: GPL-2.0
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/dma/allwinner,sun50i-a64-dma.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Allwinner A64 DMA Controller Device Tree Bindings
+
+maintainers:
+ - Chen-Yu Tsai <wens@csie.org>
+ - Maxime Ripard <maxime.ripard@bootlin.com>
+
+allOf:
+ - $ref: "dma-controller.yaml#"
+
+properties:
+ "#dma-cells":
+ const: 1
+ description: The cell is the request line number.
+
+ compatible:
+ enum:
+ - allwinner,sun50i-a64-dma
+ - allwinner,sun50i-h6-dma
+
+ reg:
+ maxItems: 1
+
+ interrupts:
+ maxItems: 1
+
+ clocks:
+ minItems: 1
+ maxItems: 2
+
+ clock-names:
+ items:
+ - const: bus
+ - const: mbus
+
+ resets:
+ maxItems: 1
+
+required:
+ - "#dma-cells"
+ - compatible
+ - reg
+ - interrupts
+ - clocks
+ - resets
+ - dma-channels
+
+if:
+ properties:
+ compatible:
+ const: allwinner,sun50i-h6-dma
+
+then:
+ properties:
+ clocks:
+ maxItems: 2
+
+ required:
+ - clock-names
+
+else:
+ properties:
+ clocks:
+ maxItems: 1
+
+# FIXME: We should set it, but it would report all the generic
+# properties as additional properties.
+# additionalProperties: false
+
+examples:
+ - |
+ dma: dma-controller@1c02000 {
+ compatible = "allwinner,sun50i-a64-dma";
+ reg = <0x01c02000 0x1000>;
+ interrupts = <0 50 4>;
+ clocks = <&ccu 30>;
+ dma-channels = <8>;
+ dma-requests = <27>;
+ resets = <&ccu 7>;
+ #dma-cells = <1>;
+ };
+
+...
diff --git a/Documentation/devicetree/bindings/dma/allwinner,sun6i-a31-dma.yaml b/Documentation/devicetree/bindings/dma/allwinner,sun6i-a31-dma.yaml
new file mode 100644
index 000000000000..740b7f9b535b
--- /dev/null
+++ b/Documentation/devicetree/bindings/dma/allwinner,sun6i-a31-dma.yaml
@@ -0,0 +1,62 @@
+# SPDX-License-Identifier: GPL-2.0
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/dma/allwinner,sun6i-a31-dma.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Allwinner A31 DMA Controller Device Tree Bindings
+
+maintainers:
+ - Chen-Yu Tsai <wens@csie.org>
+ - Maxime Ripard <maxime.ripard@bootlin.com>
+
+allOf:
+ - $ref: "dma-controller.yaml#"
+
+properties:
+ "#dma-cells":
+ const: 1
+ description: The cell is the request line number.
+
+ compatible:
+ oneOf:
+ - const: allwinner,sun6i-a31-dma
+ - const: allwinner,sun8i-a23-dma
+ - const: allwinner,sun8i-a83t-dma
+ - const: allwinner,sun8i-h3-dma
+ - const: allwinner,sun8i-v3s-dma
+
+ reg:
+ maxItems: 1
+
+ interrupts:
+ maxItems: 1
+
+ clocks:
+ maxItems: 1
+
+ resets:
+ maxItems: 1
+
+required:
+ - "#dma-cells"
+ - compatible
+ - reg
+ - interrupts
+ - clocks
+ - resets
+
+additionalProperties: false
+
+examples:
+ - |
+ dma: dma-controller@1c02000 {
+ compatible = "allwinner,sun6i-a31-dma";
+ reg = <0x01c02000 0x1000>;
+ interrupts = <0 50 4>;
+ clocks = <&ahb1_gates 6>;
+ resets = <&ahb1_rst 6>;
+ #dma-cells = <1>;
+ };
+
+...
diff --git a/Documentation/devicetree/bindings/dma/sun6i-dma.txt b/Documentation/devicetree/bindings/dma/sun6i-dma.txt
deleted file mode 100644
index cae31f4e77ba..000000000000
--- a/Documentation/devicetree/bindings/dma/sun6i-dma.txt
+++ /dev/null
@@ -1,81 +0,0 @@
-Allwinner A31 DMA Controller
-
-This driver follows the generic DMA bindings defined in dma.txt.
-
-Required properties:
-
-- compatible: Must be one of
- "allwinner,sun6i-a31-dma"
- "allwinner,sun8i-a23-dma"
- "allwinner,sun8i-a83t-dma"
- "allwinner,sun8i-h3-dma"
- "allwinner,sun8i-v3s-dma"
-- reg: Should contain the registers base address and length
-- interrupts: Should contain a reference to the interrupt used by this device
-- clocks: Should contain a reference to the parent AHB clock
-- resets: Should contain a reference to the reset controller asserting
- this device in reset
-- #dma-cells : Should be 1, a single cell holding a line request number
-
-Example:
- dma: dma-controller@1c02000 {
- compatible = "allwinner,sun6i-a31-dma";
- reg = <0x01c02000 0x1000>;
- interrupts = <0 50 4>;
- clocks = <&ahb1_gates 6>;
- resets = <&ahb1_rst 6>;
- #dma-cells = <1>;
- };
-
-------------------------------------------------------------------------------
-For A64 and H6 DMA controller:
-
-Required properties:
-- compatible: Must be one of
- "allwinner,sun50i-a64-dma"
- "allwinner,sun50i-h6-dma"
-- dma-channels: Number of DMA channels supported by the controller.
- Refer to Documentation/devicetree/bindings/dma/dma.txt
-- clocks: In addition to parent AHB clock, it should also contain mbus
- clock (H6 only)
-- clock-names: Should contain "bus" and "mbus" (H6 only)
-- all properties above, i.e. reg, interrupts, clocks, resets and #dma-cells
-
-Optional properties:
-- dma-requests: Number of DMA request signals supported by the controller.
- Refer to Documentation/devicetree/bindings/dma/dma.txt
-
-Example:
- dma: dma-controller@1c02000 {
- compatible = "allwinner,sun50i-a64-dma";
- reg = <0x01c02000 0x1000>;
- interrupts = <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>;
- clocks = <&ccu CLK_BUS_DMA>;
- dma-channels = <8>;
- dma-requests = <27>;
- resets = <&ccu RST_BUS_DMA>;
- #dma-cells = <1>;
- };
-------------------------------------------------------------------------------
-
-Clients:
-
-DMA clients connected to the A31 DMA controller must use the format
-described in the dma.txt file, using a two-cell specifier for each
-channel: a phandle plus one integer cells.
-The two cells in order are:
-
-1. A phandle pointing to the DMA controller.
-2. The port ID as specified in the datasheet
-
-Example:
-spi2: spi@1c6a000 {
- compatible = "allwinner,sun6i-a31-spi";
- reg = <0x01c6a000 0x1000>;
- interrupts = <0 67 4>;
- clocks = <&ahb1_gates 22>, <&spi2_clk>;
- clock-names = "ahb", "mod";
- dmas = <&dma 25>, <&dma 25>;
- dma-names = "rx", "tx";
- resets = <&ahb1_rst 22>;
-};
--
2.21.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] dt-bindings: dma: Add YAML schemas for the generic DMA bindings
2019-07-20 6:41 [PATCH 1/3] dt-bindings: dma: Add YAML schemas for the generic DMA bindings Maxime Ripard
2019-07-20 6:41 ` [PATCH 2/3] dt-bindings: dma: Convert Allwinner A10 DMA to a schema Maxime Ripard
2019-07-20 6:41 ` [PATCH 3/3] dt-bindings: dma: Convert Allwinner A31 and A64 " Maxime Ripard
@ 2019-07-20 9:24 ` Maxime Ripard
2 siblings, 0 replies; 8+ messages in thread
From: Maxime Ripard @ 2019-07-20 9:24 UTC (permalink / raw)
To: Mark Rutland, Rob Herring, Frank Rowand, Vinod Koul
Cc: devicetree, dmaengine, Chen-Yu Tsai, linux-arm-kernel, Peter Ujfalusi
[-- Attachment #1: Type: text/plain, Size: 2286 bytes --]
On Sat, Jul 20, 2019 at 08:41:21AM +0200, Maxime Ripard wrote:
> The DMA controllers and consumers have a bunch of generic properties that
> are needed in a device tree. Add a YAML schemas for those.
>
> Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
>
> ---
>
> Changes from v1:
> - Dropped the dma consumer schemas
> - Fixed the node name of the examples
> - Enhanced a bit the description for dma-requests in case of a router
> - Split the bindings in two to handle the router and controller case
> separately
> - Made #dma-cells required
> ---
> .../devicetree/bindings/dma/dma-common.yaml | 43 +++++++
> .../bindings/dma/dma-controller.yaml | 35 ++++++
> .../devicetree/bindings/dma/dma-router.yaml | 50 ++++++++
> Documentation/devicetree/bindings/dma/dma.txt | 114 +-----------------
> 4 files changed, 129 insertions(+), 113 deletions(-)
> create mode 100644 Documentation/devicetree/bindings/dma/dma-common.yaml
> create mode 100644 Documentation/devicetree/bindings/dma/dma-controller.yaml
> create mode 100644 Documentation/devicetree/bindings/dma/dma-router.yaml
>
> diff --git a/Documentation/devicetree/bindings/dma/dma-common.yaml b/Documentation/devicetree/bindings/dma/dma-common.yaml
> new file mode 100644
> index 000000000000..422fd6c8b0ce
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/dma/dma-common.yaml
> @@ -0,0 +1,43 @@
> +# SPDX-License-Identifier: GPL-2.0
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/dma/dma-common.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: DMA Engine Generic Binding
> +
> +maintainers:
> + - Vinod Koul <vkoul@kernel.org>
> +
> +description:
> + Generic binding to provide a way for a driver using DMA Engine to
> + retrieve the DMA request or channel information that goes from a
> + hardware device to a DMA controller.
> +
> +properties:
> + "#dma-cells":
> + minimum: 1
> + # Should be enough
> + maximum: 255
> + description:
> + Used to provide DMA controller specific information.
We need a select statement here, otherwise it will try to validate
every node and report dma-cells as missing. I'll send a v3.
Maxime
--
Maxime Ripard, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/3] dt-bindings: dma: Add YAML schemas for the generic DMA bindings
@ 2019-07-11 9:21 Maxime Ripard
2019-07-11 17:33 ` Rob Herring
0 siblings, 1 reply; 8+ messages in thread
From: Maxime Ripard @ 2019-07-11 9:21 UTC (permalink / raw)
To: Mark Rutland, Rob Herring, Frank Rowand, Vinod Koul
Cc: devicetree, dmaengine, Chen-Yu Tsai, Maxime Ripard, linux-arm-kernel
The DMA controllers and consumers have a bunch of generic properties that
are needed in a device tree. Add a YAML schemas for those.
Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
---
.../devicetree/bindings/dma/dma-consumer.yaml | 60 +++++++++
.../bindings/dma/dma-controller.yaml | 79 ++++++++++++
Documentation/devicetree/bindings/dma/dma.txt | 114 +-----------------
3 files changed, 140 insertions(+), 113 deletions(-)
create mode 100644 Documentation/devicetree/bindings/dma/dma-consumer.yaml
create mode 100644 Documentation/devicetree/bindings/dma/dma-controller.yaml
diff --git a/Documentation/devicetree/bindings/dma/dma-consumer.yaml b/Documentation/devicetree/bindings/dma/dma-consumer.yaml
new file mode 100644
index 000000000000..2f6315863ad1
--- /dev/null
+++ b/Documentation/devicetree/bindings/dma/dma-consumer.yaml
@@ -0,0 +1,60 @@
+# SPDX-License-Identifier: GPL-2.0
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/dma/dma-consumer.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: DMA Consumer Generic Binding
+
+maintainers:
+ - Vinod Koul <vkoul@kernel.org>
+
+select: true
+
+properties:
+ dmas:
+ description:
+ List of one or more DMA specifiers, each consisting of
+ - A phandle pointing to DMA controller node
+ - A number of integer cells, as determined by the
+ \#dma-cells property in the node referenced by phandle
+ containing DMA controller specific information. This
+ typically contains a DMA request line number or a
+ channel number, but can contain any data that is
+ required for configuring a channel.
+
+ dma-names:
+ description:
+ Contains one identifier string for each DMA specifier in the
+ dmas property. The specific strings that can be used are defined
+ in the binding of the DMA client device. Multiple DMA
+ specifiers can be used to represent alternatives and in this
+ case the dma-names for those DMA specifiers must be identical
+ (see examples).
+
+dependencies:
+ dma-names: [ dmas ]
+
+examples:
+ - |
+ /* A device with one DMA read channel, one DMA write channel */
+ i2c1: i2c@1 {
+ /* ... */
+ dmas = <&dma 2>, /* read channel */
+ <&dma 3>; /* write channel */
+ dma-names = "rx", "tx";
+ /* ... */
+ };
+
+ - |
+ /* A single read-write channel with three alternative DMA controllers */
+ dmas = <&dma1 5>, <&dma2 7>, <&dma3 2>;
+ dma-names = "rx-tx", "rx-tx", "rx-tx";
+
+ - |
+ /* A device with three channels, one of which has two alternatives */
+ dmas = <&dma1 2>, /* read channel */
+ <&dma1 3>, /* write channel */
+ <&dma2 0>, /* error read */
+ <&dma3 0>; /* alternative error read */
+ dma-names = "rx", "tx", "error", "error";
diff --git a/Documentation/devicetree/bindings/dma/dma-controller.yaml b/Documentation/devicetree/bindings/dma/dma-controller.yaml
new file mode 100644
index 000000000000..17c650131b78
--- /dev/null
+++ b/Documentation/devicetree/bindings/dma/dma-controller.yaml
@@ -0,0 +1,79 @@
+# SPDX-License-Identifier: GPL-2.0
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/dma/dma-controller.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: DMA Controller Generic Binding
+
+maintainers:
+ - Vinod Koul <vkoul@kernel.org>
+
+description:
+ Generic binding to provide a way for a driver using DMA Engine to
+ retrieve the DMA request or channel information that goes from a
+ hardware device to a DMA controller.
+
+properties:
+ $nodename:
+ pattern: "^dma-controller(@.*)?$"
+
+ "#dma-cells":
+ # minimum: 1
+ description:
+ Used to provide DMA controller specific information.
+
+ dma-channel-masks:
+ $ref: /schemas/types.yaml#definitions/uint32
+ description:
+ Bitmask of available DMA channels in ascending order that are
+ not reserved by firmware and are available to the
+ kernel. i.e. first channel corresponds to LSB.
+
+ dma-channels:
+ $ref: /schemas/types.yaml#definitions/uint32
+ description:
+ Number of DMA channels supported by the controller.
+
+ dma-masters:
+ $ref: /schemas/types.yaml#definitions/phandle-array
+ description:
+ DMA routers are transparent IP blocks used to route DMA request
+ lines from devices to the DMA controller. Some SoCs (like TI
+ DRA7x) have more peripherals integrated with DMA requests than
+ what the DMA controller can handle directly.
+
+ In such a case, dma-masters is an array of phandle to the DMA
+ controllers the router can direct the signal to.
+
+ dma-requests:
+ $ref: /schemas/types.yaml#definitions/uint32
+ description:
+ Number of DMA request signals supported by the controller.
+
+examples:
+ - |
+ dma: dma@48000000 {
+ compatible = "ti,omap-sdma";
+ reg = <0x48000000 0x1000>;
+ interrupts = <0 12 0x4
+ 0 13 0x4
+ 0 14 0x4
+ 0 15 0x4>;
+ #dma-cells = <1>;
+ dma-channels = <32>;
+ dma-requests = <127>;
+ dma-channel-mask = <0xfffe>;
+ };
+
+ - |
+ sdma_xbar: dma-router@4a002b78 {
+ compatible = "ti,dra7-dma-crossbar";
+ reg = <0x4a002b78 0xfc>;
+ #dma-cells = <1>;
+ dma-requests = <205>;
+ ti,dma-safe-map = <0>;
+ dma-masters = <&sdma>;
+ };
+
+...
diff --git a/Documentation/devicetree/bindings/dma/dma.txt b/Documentation/devicetree/bindings/dma/dma.txt
index eeb4e4d1771e..90a67a016a48 100644
--- a/Documentation/devicetree/bindings/dma/dma.txt
+++ b/Documentation/devicetree/bindings/dma/dma.txt
@@ -1,113 +1 @@
-* Generic DMA Controller and DMA request bindings
-
-Generic binding to provide a way for a driver using DMA Engine to retrieve the
-DMA request or channel information that goes from a hardware device to a DMA
-controller.
-
-
-* DMA controller
-
-Required property:
-- #dma-cells: Must be at least 1. Used to provide DMA controller
- specific information. See DMA client binding below for
- more details.
-
-Optional properties:
-- dma-channels: Number of DMA channels supported by the controller.
-- dma-requests: Number of DMA request signals supported by the
- controller.
-- dma-channel-mask: Bitmask of available DMA channels in ascending order
- that are not reserved by firmware and are available to
- the kernel. i.e. first channel corresponds to LSB.
-
-Example:
-
- dma: dma@48000000 {
- compatible = "ti,omap-sdma";
- reg = <0x48000000 0x1000>;
- interrupts = <0 12 0x4
- 0 13 0x4
- 0 14 0x4
- 0 15 0x4>;
- #dma-cells = <1>;
- dma-channels = <32>;
- dma-requests = <127>;
- dma-channel-mask = <0xfffe>
- };
-
-* DMA router
-
-DMA routers are transparent IP blocks used to route DMA request lines from
-devices to the DMA controller. Some SoCs (like TI DRA7x) have more peripherals
-integrated with DMA requests than what the DMA controller can handle directly.
-
-Required property:
-- dma-masters: phandle of the DMA controller or list of phandles for
- the DMA controllers the router can direct the signal to.
-- #dma-cells: Must be at least 1. Used to provide DMA router specific
- information. See DMA client binding below for more
- details.
-
-Optional properties:
-- dma-requests: Number of incoming request lines the router can handle.
-- In the node pointed by the dma-masters:
- - dma-requests: The router driver might need to look for this in order
- to configure the routing.
-
-Example:
- sdma_xbar: dma-router@4a002b78 {
- compatible = "ti,dra7-dma-crossbar";
- reg = <0x4a002b78 0xfc>;
- #dma-cells = <1>;
- dma-requests = <205>;
- ti,dma-safe-map = <0>;
- dma-masters = <&sdma>;
- };
-
-* DMA client
-
-Client drivers should specify the DMA property using a phandle to the controller
-followed by DMA controller specific data.
-
-Required property:
-- dmas: List of one or more DMA specifiers, each consisting of
- - A phandle pointing to DMA controller node
- - A number of integer cells, as determined by the
- #dma-cells property in the node referenced by phandle
- containing DMA controller specific information. This
- typically contains a DMA request line number or a
- channel number, but can contain any data that is
- required for configuring a channel.
-- dma-names: Contains one identifier string for each DMA specifier in
- the dmas property. The specific strings that can be used
- are defined in the binding of the DMA client device.
- Multiple DMA specifiers can be used to represent
- alternatives and in this case the dma-names for those
- DMA specifiers must be identical (see examples).
-
-Examples:
-
-1. A device with one DMA read channel, one DMA write channel:
-
- i2c1: i2c@1 {
- ...
- dmas = <&dma 2 /* read channel */
- &dma 3>; /* write channel */
- dma-names = "rx", "tx";
- ...
- };
-
-2. A single read-write channel with three alternative DMA controllers:
-
- dmas = <&dma1 5
- &dma2 7
- &dma3 2>;
- dma-names = "rx-tx", "rx-tx", "rx-tx";
-
-3. A device with three channels, one of which has two alternatives:
-
- dmas = <&dma1 2 /* read channel */
- &dma1 3 /* write channel */
- &dma2 0 /* error read */
- &dma3 0>; /* alternative error read */
- dma-names = "rx", "tx", "error", "error";
+This file has been moved to dma-controller.yaml.
--
2.21.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] dt-bindings: dma: Add YAML schemas for the generic DMA bindings
2019-07-11 9:21 Maxime Ripard
@ 2019-07-11 17:33 ` Rob Herring
2019-07-12 21:27 ` Peter Ujfalusi
0 siblings, 1 reply; 8+ messages in thread
From: Rob Herring @ 2019-07-11 17:33 UTC (permalink / raw)
To: Maxime Ripard, Jon Hunter, Peter Ujfalusi
Cc: Mark Rutland, Frank Rowand, Vinod Koul, devicetree,
open list:DMA GENERIC OFFLOAD ENGINE SUBSYSTEM, Chen-Yu Tsai,
moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE
On Thu, Jul 11, 2019 at 3:34 AM Maxime Ripard <maxime.ripard@bootlin.com> wrote:
>
> The DMA controllers and consumers have a bunch of generic properties that
> are needed in a device tree. Add a YAML schemas for those.
>
> Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
> ---
> .../devicetree/bindings/dma/dma-consumer.yaml | 60 +++++++++
This already exists in the dt-schema/schemas/dma/dma.yaml though not
the descriptions because that needs relicensing.
Looks like we need NVidia's (Jon H) and TI's (Peter U) permission.
> .../bindings/dma/dma-controller.yaml | 79 ++++++++++++
> Documentation/devicetree/bindings/dma/dma.txt | 114 +-----------------
> 3 files changed, 140 insertions(+), 113 deletions(-)
> create mode 100644 Documentation/devicetree/bindings/dma/dma-consumer.yaml
> create mode 100644 Documentation/devicetree/bindings/dma/dma-controller.yaml
>
> diff --git a/Documentation/devicetree/bindings/dma/dma-consumer.yaml b/Documentation/devicetree/bindings/dma/dma-consumer.yaml
> new file mode 100644
> index 000000000000..2f6315863ad1
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/dma/dma-consumer.yaml
> @@ -0,0 +1,60 @@
> +# SPDX-License-Identifier: GPL-2.0
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/dma/dma-consumer.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: DMA Consumer Generic Binding
> +
> +maintainers:
> + - Vinod Koul <vkoul@kernel.org>
> +
> +select: true
> +
> +properties:
> + dmas:
> + description:
> + List of one or more DMA specifiers, each consisting of
> + - A phandle pointing to DMA controller node
> + - A number of integer cells, as determined by the
> + \#dma-cells property in the node referenced by phandle
> + containing DMA controller specific information. This
> + typically contains a DMA request line number or a
> + channel number, but can contain any data that is
> + required for configuring a channel.
> +
> + dma-names:
> + description:
> + Contains one identifier string for each DMA specifier in the
> + dmas property. The specific strings that can be used are defined
> + in the binding of the DMA client device. Multiple DMA
> + specifiers can be used to represent alternatives and in this
> + case the dma-names for those DMA specifiers must be identical
> + (see examples).
> +
> +dependencies:
> + dma-names: [ dmas ]
> +
> +examples:
> + - |
> + /* A device with one DMA read channel, one DMA write channel */
> + i2c1: i2c@1 {
> + /* ... */
> + dmas = <&dma 2>, /* read channel */
> + <&dma 3>; /* write channel */
> + dma-names = "rx", "tx";
> + /* ... */
> + };
> +
> + - |
> + /* A single read-write channel with three alternative DMA controllers */
> + dmas = <&dma1 5>, <&dma2 7>, <&dma3 2>;
> + dma-names = "rx-tx", "rx-tx", "rx-tx";
> +
> + - |
> + /* A device with three channels, one of which has two alternatives */
> + dmas = <&dma1 2>, /* read channel */
> + <&dma1 3>, /* write channel */
> + <&dma2 0>, /* error read */
> + <&dma3 0>; /* alternative error read */
> + dma-names = "rx", "tx", "error", "error";
> diff --git a/Documentation/devicetree/bindings/dma/dma-controller.yaml b/Documentation/devicetree/bindings/dma/dma-controller.yaml
> new file mode 100644
> index 000000000000..17c650131b78
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/dma/dma-controller.yaml
> @@ -0,0 +1,79 @@
> +# SPDX-License-Identifier: GPL-2.0
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/dma/dma-controller.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: DMA Controller Generic Binding
> +
> +maintainers:
> + - Vinod Koul <vkoul@kernel.org>
> +
> +description:
> + Generic binding to provide a way for a driver using DMA Engine to
> + retrieve the DMA request or channel information that goes from a
> + hardware device to a DMA controller.
> +
> +properties:
> + $nodename:
> + pattern: "^dma-controller(@.*)?$"
> +
> + "#dma-cells":
> + # minimum: 1
> + description:
> + Used to provide DMA controller specific information.
> +
> + dma-channel-masks:
> + $ref: /schemas/types.yaml#definitions/uint32
> + description:
> + Bitmask of available DMA channels in ascending order that are
> + not reserved by firmware and are available to the
> + kernel. i.e. first channel corresponds to LSB.
> +
> + dma-channels:
> + $ref: /schemas/types.yaml#definitions/uint32
> + description:
> + Number of DMA channels supported by the controller.
> +
> + dma-masters:
> + $ref: /schemas/types.yaml#definitions/phandle-array
> + description:
> + DMA routers are transparent IP blocks used to route DMA request
> + lines from devices to the DMA controller. Some SoCs (like TI
> + DRA7x) have more peripherals integrated with DMA requests than
> + what the DMA controller can handle directly.
> +
> + In such a case, dma-masters is an array of phandle to the DMA
> + controllers the router can direct the signal to.
> +
> + dma-requests:
> + $ref: /schemas/types.yaml#definitions/uint32
> + description:
> + Number of DMA request signals supported by the controller.
> +
> +examples:
> + - |
> + dma: dma@48000000 {
dma-controller@...
This is a case where I'd like some check that the schema is actually
applied to the schema's example.
> + compatible = "ti,omap-sdma";
> + reg = <0x48000000 0x1000>;
> + interrupts = <0 12 0x4
> + 0 13 0x4
> + 0 14 0x4
> + 0 15 0x4>;
> + #dma-cells = <1>;
> + dma-channels = <32>;
> + dma-requests = <127>;
> + dma-channel-mask = <0xfffe>;
> + };
> +
> + - |
> + sdma_xbar: dma-router@4a002b78 {
> + compatible = "ti,dra7-dma-crossbar";
> + reg = <0x4a002b78 0xfc>;
> + #dma-cells = <1>;
> + dma-requests = <205>;
> + ti,dma-safe-map = <0>;
> + dma-masters = <&sdma>;
> + };
> +
> +...
> diff --git a/Documentation/devicetree/bindings/dma/dma.txt b/Documentation/devicetree/bindings/dma/dma.txt
> index eeb4e4d1771e..90a67a016a48 100644
> --- a/Documentation/devicetree/bindings/dma/dma.txt
> +++ b/Documentation/devicetree/bindings/dma/dma.txt
> @@ -1,113 +1 @@
> -* Generic DMA Controller and DMA request bindings
> -
> -Generic binding to provide a way for a driver using DMA Engine to retrieve the
> -DMA request or channel information that goes from a hardware device to a DMA
> -controller.
> -
> -
> -* DMA controller
> -
> -Required property:
> -- #dma-cells: Must be at least 1. Used to provide DMA controller
> - specific information. See DMA client binding below for
> - more details.
> -
> -Optional properties:
> -- dma-channels: Number of DMA channels supported by the controller.
> -- dma-requests: Number of DMA request signals supported by the
> - controller.
> -- dma-channel-mask: Bitmask of available DMA channels in ascending order
> - that are not reserved by firmware and are available to
> - the kernel. i.e. first channel corresponds to LSB.
> -
> -Example:
> -
> - dma: dma@48000000 {
> - compatible = "ti,omap-sdma";
> - reg = <0x48000000 0x1000>;
> - interrupts = <0 12 0x4
> - 0 13 0x4
> - 0 14 0x4
> - 0 15 0x4>;
> - #dma-cells = <1>;
> - dma-channels = <32>;
> - dma-requests = <127>;
> - dma-channel-mask = <0xfffe>
> - };
> -
> -* DMA router
> -
> -DMA routers are transparent IP blocks used to route DMA request lines from
> -devices to the DMA controller. Some SoCs (like TI DRA7x) have more peripherals
> -integrated with DMA requests than what the DMA controller can handle directly.
> -
> -Required property:
> -- dma-masters: phandle of the DMA controller or list of phandles for
> - the DMA controllers the router can direct the signal to.
> -- #dma-cells: Must be at least 1. Used to provide DMA router specific
> - information. See DMA client binding below for more
> - details.
> -
> -Optional properties:
> -- dma-requests: Number of incoming request lines the router can handle.
> -- In the node pointed by the dma-masters:
> - - dma-requests: The router driver might need to look for this in order
> - to configure the routing.
> -
> -Example:
> - sdma_xbar: dma-router@4a002b78 {
> - compatible = "ti,dra7-dma-crossbar";
> - reg = <0x4a002b78 0xfc>;
> - #dma-cells = <1>;
> - dma-requests = <205>;
> - ti,dma-safe-map = <0>;
> - dma-masters = <&sdma>;
> - };
> -
> -* DMA client
> -
> -Client drivers should specify the DMA property using a phandle to the controller
> -followed by DMA controller specific data.
> -
> -Required property:
> -- dmas: List of one or more DMA specifiers, each consisting of
> - - A phandle pointing to DMA controller node
> - - A number of integer cells, as determined by the
> - #dma-cells property in the node referenced by phandle
> - containing DMA controller specific information. This
> - typically contains a DMA request line number or a
> - channel number, but can contain any data that is
> - required for configuring a channel.
> -- dma-names: Contains one identifier string for each DMA specifier in
> - the dmas property. The specific strings that can be used
> - are defined in the binding of the DMA client device.
> - Multiple DMA specifiers can be used to represent
> - alternatives and in this case the dma-names for those
> - DMA specifiers must be identical (see examples).
> -
> -Examples:
> -
> -1. A device with one DMA read channel, one DMA write channel:
> -
> - i2c1: i2c@1 {
> - ...
> - dmas = <&dma 2 /* read channel */
> - &dma 3>; /* write channel */
> - dma-names = "rx", "tx";
> - ...
> - };
> -
> -2. A single read-write channel with three alternative DMA controllers:
> -
> - dmas = <&dma1 5
> - &dma2 7
> - &dma3 2>;
> - dma-names = "rx-tx", "rx-tx", "rx-tx";
> -
> -3. A device with three channels, one of which has two alternatives:
> -
> - dmas = <&dma1 2 /* read channel */
> - &dma1 3 /* write channel */
> - &dma2 0 /* error read */
> - &dma3 0>; /* alternative error read */
> - dma-names = "rx", "tx", "error", "error";
> +This file has been moved to dma-controller.yaml.
> --
> 2.21.0
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] dt-bindings: dma: Add YAML schemas for the generic DMA bindings
2019-07-11 17:33 ` Rob Herring
@ 2019-07-12 21:27 ` Peter Ujfalusi
2019-07-12 21:49 ` Rob Herring
0 siblings, 1 reply; 8+ messages in thread
From: Peter Ujfalusi @ 2019-07-12 21:27 UTC (permalink / raw)
To: Rob Herring, Maxime Ripard, Jon Hunter
Cc: Mark Rutland, Frank Rowand, Vinod Koul, devicetree,
open list:DMA GENERIC OFFLOAD ENGINE SUBSYSTEM, Chen-Yu Tsai,
moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE
On 11.7.2019 20.33, Rob Herring wrote:
> On Thu, Jul 11, 2019 at 3:34 AM Maxime Ripard <maxime.ripard@bootlin.com> wrote:
>>
>> The DMA controllers and consumers have a bunch of generic properties that
>> are needed in a device tree. Add a YAML schemas for those.
>>
>> Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
>> ---
>> .../devicetree/bindings/dma/dma-consumer.yaml | 60 +++++++++
>
> This already exists in the dt-schema/schemas/dma/dma.yaml though not
> the descriptions because that needs relicensing.
>
> Looks like we need NVidia's (Jon H) and TI's (Peter U) permission.
If I'm not mistaken the new license is GPL-2.0, if so I don't see any
issue, but I'll ask our legal to be sure.
And one comment for the change.
>
>> .../bindings/dma/dma-controller.yaml | 79 ++++++++++++
>> Documentation/devicetree/bindings/dma/dma.txt | 114 +-----------------
>> 3 files changed, 140 insertions(+), 113 deletions(-)
>> create mode 100644 Documentation/devicetree/bindings/dma/dma-consumer.yaml
>> create mode 100644 Documentation/devicetree/bindings/dma/dma-controller.yaml
>>
>> diff --git a/Documentation/devicetree/bindings/dma/dma-consumer.yaml b/Documentation/devicetree/bindings/dma/dma-consumer.yaml
>> new file mode 100644
>> index 000000000000..2f6315863ad1
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/dma/dma-consumer.yaml
>> @@ -0,0 +1,60 @@
>> +# SPDX-License-Identifier: GPL-2.0
>> +%YAML 1.2
>> +---
>> +$id: http://devicetree.org/schemas/dma/dma-consumer.yaml#
>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
>> +
>> +title: DMA Consumer Generic Binding
>> +
>> +maintainers:
>> + - Vinod Koul <vkoul@kernel.org>
>> +
>> +select: true
>> +
>> +properties:
>> + dmas:
>> + description:
>> + List of one or more DMA specifiers, each consisting of
>> + - A phandle pointing to DMA controller node
>> + - A number of integer cells, as determined by the
>> + \#dma-cells property in the node referenced by phandle
>> + containing DMA controller specific information. This
>> + typically contains a DMA request line number or a
>> + channel number, but can contain any data that is
>> + required for configuring a channel.
>> +
>> + dma-names:
>> + description:
>> + Contains one identifier string for each DMA specifier in the
>> + dmas property. The specific strings that can be used are defined
>> + in the binding of the DMA client device. Multiple DMA
>> + specifiers can be used to represent alternatives and in this
>> + case the dma-names for those DMA specifiers must be identical
>> + (see examples).
>> +
>> +dependencies:
>> + dma-names: [ dmas ]
>> +
>> +examples:
>> + - |
>> + /* A device with one DMA read channel, one DMA write channel */
>> + i2c1: i2c@1 {
>> + /* ... */
>> + dmas = <&dma 2>, /* read channel */
>> + <&dma 3>; /* write channel */
>> + dma-names = "rx", "tx";
>> + /* ... */
>> + };
>> +
>> + - |
>> + /* A single read-write channel with three alternative DMA controllers */
>> + dmas = <&dma1 5>, <&dma2 7>, <&dma3 2>;
>> + dma-names = "rx-tx", "rx-tx", "rx-tx";
>> +
>> + - |
>> + /* A device with three channels, one of which has two alternatives */
>> + dmas = <&dma1 2>, /* read channel */
>> + <&dma1 3>, /* write channel */
>> + <&dma2 0>, /* error read */
>> + <&dma3 0>; /* alternative error read */
>> + dma-names = "rx", "tx", "error", "error";
>> diff --git a/Documentation/devicetree/bindings/dma/dma-controller.yaml b/Documentation/devicetree/bindings/dma/dma-controller.yaml
>> new file mode 100644
>> index 000000000000..17c650131b78
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/dma/dma-controller.yaml
>> @@ -0,0 +1,79 @@
>> +# SPDX-License-Identifier: GPL-2.0
>> +%YAML 1.2
>> +---
>> +$id: http://devicetree.org/schemas/dma/dma-controller.yaml#
>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
>> +
>> +title: DMA Controller Generic Binding
>> +
>> +maintainers:
>> + - Vinod Koul <vkoul@kernel.org>
>> +
>> +description:
>> + Generic binding to provide a way for a driver using DMA Engine to
>> + retrieve the DMA request or channel information that goes from a
>> + hardware device to a DMA controller.
>> +
>> +properties:
>> + $nodename:
>> + pattern: "^dma-controller(@.*)?$"
>> +
>> + "#dma-cells":
>> + # minimum: 1
>> + description:
>> + Used to provide DMA controller specific information.
>> +
>> + dma-channel-masks:
>> + $ref: /schemas/types.yaml#definitions/uint32
>> + description:
>> + Bitmask of available DMA channels in ascending order that are
>> + not reserved by firmware and are available to the
>> + kernel. i.e. first channel corresponds to LSB.
>> +
>> + dma-channels:
>> + $ref: /schemas/types.yaml#definitions/uint32
>> + description:
>> + Number of DMA channels supported by the controller.
>> +
>> + dma-masters:
>> + $ref: /schemas/types.yaml#definitions/phandle-array
>> + description:
>> + DMA routers are transparent IP blocks used to route DMA request
>> + lines from devices to the DMA controller. Some SoCs (like TI
>> + DRA7x) have more peripherals integrated with DMA requests than
>> + what the DMA controller can handle directly.
>> +
>> + In such a case, dma-masters is an array of phandle to the DMA
>> + controllers the router can direct the signal to.
It is no longer clear what is needed and what is optional anymore and if
I would need to look up how a DMA router node should look like I will be
in trouble, iow if I need to figure out how to describe an SoC with DMA
controller and DMA event router.
>> +
>> + dma-requests:
>> + $ref: /schemas/types.yaml#definitions/uint32
>> + description:
>> + Number of DMA request signals supported by the controller.
>> +
>> +examples:
>> + - |
>> + dma: dma@48000000 {
>
> dma-controller@...
>
> This is a case where I'd like some check that the schema is actually
> applied to the schema's example.
>
>> + compatible = "ti,omap-sdma";
>> + reg = <0x48000000 0x1000>;
>> + interrupts = <0 12 0x4
>> + 0 13 0x4
>> + 0 14 0x4
>> + 0 15 0x4>;
>> + #dma-cells = <1>;
>> + dma-channels = <32>;
>> + dma-requests = <127>;
>> + dma-channel-mask = <0xfffe>;
>> + };
>> +
>> + - |
>> + sdma_xbar: dma-router@4a002b78 {
>> + compatible = "ti,dra7-dma-crossbar";
>> + reg = <0x4a002b78 0xfc>;
>> + #dma-cells = <1>;
>> + dma-requests = <205>;
>> + ti,dma-safe-map = <0>;
>> + dma-masters = <&sdma>;
>> + };
>> +
>> +...
>> diff --git a/Documentation/devicetree/bindings/dma/dma.txt b/Documentation/devicetree/bindings/dma/dma.txt
>> index eeb4e4d1771e..90a67a016a48 100644
>> --- a/Documentation/devicetree/bindings/dma/dma.txt
>> +++ b/Documentation/devicetree/bindings/dma/dma.txt
>> @@ -1,113 +1 @@
>> -* Generic DMA Controller and DMA request bindings
>> -
>> -Generic binding to provide a way for a driver using DMA Engine to retrieve the
>> -DMA request or channel information that goes from a hardware device to a DMA
>> -controller.
>> -
>> -
>> -* DMA controller
>> -
>> -Required property:
>> -- #dma-cells: Must be at least 1. Used to provide DMA controller
>> - specific information. See DMA client binding below for
>> - more details.
>> -
>> -Optional properties:
>> -- dma-channels: Number of DMA channels supported by the controller.
>> -- dma-requests: Number of DMA request signals supported by the
>> - controller.
>> -- dma-channel-mask: Bitmask of available DMA channels in ascending order
>> - that are not reserved by firmware and are available to
>> - the kernel. i.e. first channel corresponds to LSB.
>> -
>> -Example:
>> -
>> - dma: dma@48000000 {
>> - compatible = "ti,omap-sdma";
>> - reg = <0x48000000 0x1000>;
>> - interrupts = <0 12 0x4
>> - 0 13 0x4
>> - 0 14 0x4
>> - 0 15 0x4>;
>> - #dma-cells = <1>;
>> - dma-channels = <32>;
>> - dma-requests = <127>;
>> - dma-channel-mask = <0xfffe>
>> - };
>> -
>> -* DMA router
>> -
>> -DMA routers are transparent IP blocks used to route DMA request lines from
>> -devices to the DMA controller. Some SoCs (like TI DRA7x) have more peripherals
>> -integrated with DMA requests than what the DMA controller can handle directly.
>> -
>> -Required property:
>> -- dma-masters: phandle of the DMA controller or list of phandles for
>> - the DMA controllers the router can direct the signal to.
>> -- #dma-cells: Must be at least 1. Used to provide DMA router specific
>> - information. See DMA client binding below for more
>> - details.
>> -
>> -Optional properties:
>> -- dma-requests: Number of incoming request lines the router can handle.
>> -- In the node pointed by the dma-masters:
>> - - dma-requests: The router driver might need to look for this in order
>> - to configure the routing.
>> -
>> -Example:
>> - sdma_xbar: dma-router@4a002b78 {
>> - compatible = "ti,dra7-dma-crossbar";
>> - reg = <0x4a002b78 0xfc>;
>> - #dma-cells = <1>;
>> - dma-requests = <205>;
>> - ti,dma-safe-map = <0>;
>> - dma-masters = <&sdma>;
>> - };
>> -
>> -* DMA client
>> -
>> -Client drivers should specify the DMA property using a phandle to the controller
>> -followed by DMA controller specific data.
>> -
>> -Required property:
>> -- dmas: List of one or more DMA specifiers, each consisting of
>> - - A phandle pointing to DMA controller node
>> - - A number of integer cells, as determined by the
>> - #dma-cells property in the node referenced by phandle
>> - containing DMA controller specific information. This
>> - typically contains a DMA request line number or a
>> - channel number, but can contain any data that is
>> - required for configuring a channel.
>> -- dma-names: Contains one identifier string for each DMA specifier in
>> - the dmas property. The specific strings that can be used
>> - are defined in the binding of the DMA client device.
>> - Multiple DMA specifiers can be used to represent
>> - alternatives and in this case the dma-names for those
>> - DMA specifiers must be identical (see examples).
>> -
>> -Examples:
>> -
>> -1. A device with one DMA read channel, one DMA write channel:
>> -
>> - i2c1: i2c@1 {
>> - ...
>> - dmas = <&dma 2 /* read channel */
>> - &dma 3>; /* write channel */
>> - dma-names = "rx", "tx";
>> - ...
>> - };
>> -
>> -2. A single read-write channel with three alternative DMA controllers:
>> -
>> - dmas = <&dma1 5
>> - &dma2 7
>> - &dma3 2>;
>> - dma-names = "rx-tx", "rx-tx", "rx-tx";
>> -
>> -3. A device with three channels, one of which has two alternatives:
>> -
>> - dmas = <&dma1 2 /* read channel */
>> - &dma1 3 /* write channel */
>> - &dma2 0 /* error read */
>> - &dma3 0>; /* alternative error read */
>> - dma-names = "rx", "tx", "error", "error";
>> +This file has been moved to dma-controller.yaml.
>> --
>> 2.21.0
>>
--
Peter
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] dt-bindings: dma: Add YAML schemas for the generic DMA bindings
2019-07-12 21:27 ` Peter Ujfalusi
@ 2019-07-12 21:49 ` Rob Herring
0 siblings, 0 replies; 8+ messages in thread
From: Rob Herring @ 2019-07-12 21:49 UTC (permalink / raw)
To: Peter Ujfalusi
Cc: Maxime Ripard, Jon Hunter, Mark Rutland, Frank Rowand,
Vinod Koul, devicetree,
open list:DMA GENERIC OFFLOAD ENGINE SUBSYSTEM, Chen-Yu Tsai,
moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE
On Fri, Jul 12, 2019 at 3:24 PM Peter Ujfalusi <peter.ujfalusi@ti.com> wrote:
>
>
>
> On 11.7.2019 20.33, Rob Herring wrote:
> > On Thu, Jul 11, 2019 at 3:34 AM Maxime Ripard <maxime.ripard@bootlin.com> wrote:
> >>
> >> The DMA controllers and consumers have a bunch of generic properties that
> >> are needed in a device tree. Add a YAML schemas for those.
> >>
> >> Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
> >> ---
> >> .../devicetree/bindings/dma/dma-consumer.yaml | 60 +++++++++
> >
> > This already exists in the dt-schema/schemas/dma/dma.yaml though not
> > the descriptions because that needs relicensing.
> >
> > Looks like we need NVidia's (Jon H) and TI's (Peter U) permission.
>
> If I'm not mistaken the new license is GPL-2.0, if so I don't see any
> issue, but I'll ask our legal to be sure.
To move it to the schema repository we need it to be (GPL-2.0 OR
BSD-2-Clause). I'd prefer to have the core bindings in the dt-schema
repo rather than add to the kernel.
Rob
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2019-07-20 9:24 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-07-20 6:41 [PATCH 1/3] dt-bindings: dma: Add YAML schemas for the generic DMA bindings Maxime Ripard
2019-07-20 6:41 ` [PATCH 2/3] dt-bindings: dma: Convert Allwinner A10 DMA to a schema Maxime Ripard
2019-07-20 6:41 ` [PATCH 3/3] dt-bindings: dma: Convert Allwinner A31 and A64 " Maxime Ripard
2019-07-20 9:24 ` [PATCH 1/3] dt-bindings: dma: Add YAML schemas for the generic DMA bindings Maxime Ripard
-- strict thread matches above, loose matches on Subject: below --
2019-07-11 9:21 Maxime Ripard
2019-07-11 17:33 ` Rob Herring
2019-07-12 21:27 ` Peter Ujfalusi
2019-07-12 21:49 ` Rob Herring
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).