lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20240926134218.20863-1-krzysztof.kozlowski@linaro.org>
Date: Thu, 26 Sep 2024 15:42:18 +0200
From: Krzysztof Kozlowski <krzysztof.kozlowski@...aro.org>
To: Rob Herring <robh@...nel.org>,
	Krzysztof Kozlowski <krzk+dt@...nel.org>,
	Conor Dooley <conor+dt@...nel.org>,
	devicetree@...r.kernel.org,
	linux-kernel@...r.kernel.org
Cc: Krzysztof Kozlowski <krzysztof.kozlowski@...aro.org>,
	Nishanth Menon <nm@...com>,
	Bjorn Andersson <andersson@...nel.org>
Subject: [PATCH] dt-bindings: examples: Add GPIO hogs and variable-lists

Same Devicetree binding can be expressed multiple ways thus no wonder
we have multiple variants of similar concept.  All such code could be
cleaned up, but even then new contributor might not be able to find
good, existing binding solving their case.

Add subdirectory with two Devicetree schema examples (GPIO hog and
variable lists like clocks), hoping it will grow with reference-designs.
All these bindings use valid compatibles, although with "test" vendor
prefix, so they will be validated by DT schema.

Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@...aro.org>

---

If approach is accepted, I will come with more ideas, as commented
during LPC DT BoF to creates examples based on review.

Cc: Nishanth Menon <nm@...com>
Cc: Bjorn Andersson <andersson@...nel.org>
---
 .../devicetree/bindings/example-schema.yaml   |   2 +
 .../examples/gpio-controller-and-hogs.yaml    |  72 ++++++++++++
 .../multiple-variants-and-variable-lists.yaml | 110 ++++++++++++++++++
 .../devicetree/bindings/writing-schema.rst    |   6 +-
 4 files changed, 189 insertions(+), 1 deletion(-)
 create mode 100644 Documentation/devicetree/bindings/examples/gpio-controller-and-hogs.yaml
 create mode 100644 Documentation/devicetree/bindings/examples/multiple-variants-and-variable-lists.yaml

diff --git a/Documentation/devicetree/bindings/example-schema.yaml b/Documentation/devicetree/bindings/example-schema.yaml
index a41f9b9a196b..0aece1823fde 100644
--- a/Documentation/devicetree/bindings/example-schema.yaml
+++ b/Documentation/devicetree/bindings/example-schema.yaml
@@ -25,6 +25,8 @@ description: |
   indentation less than the first line of the literal block. Lines also cannot
   begin with a tab character.
 
+  See also examples/ subdirectory for more detailed code snippets.
+
 select: false
   # 'select' is a schema applied to a DT node to determine if this binding
   # schema should be applied to the node. It is optional and by default the
diff --git a/Documentation/devicetree/bindings/examples/gpio-controller-and-hogs.yaml b/Documentation/devicetree/bindings/examples/gpio-controller-and-hogs.yaml
new file mode 100644
index 000000000000..597a847daa12
--- /dev/null
+++ b/Documentation/devicetree/bindings/examples/gpio-controller-and-hogs.yaml
@@ -0,0 +1,72 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/examples/gpio-controller-and-hogs.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: An Example GPIO Controller with Hogs
+
+maintainers:
+  - Rob Herring <robh@...nel.org>
+  - Krzysztof Kozlowski <krzk@...nel.org>
+  - Conor Dooley <conor@...nel.org>
+
+properties:
+  compatible:
+    const: test,gpio-controller-and-hogs
+
+  gpio-controller: true
+
+  "#gpio-cells":
+    const: 2
+
+  gpio-line-names:
+    minItems: 1
+    maxItems: 32
+
+  gpio-ranges:
+    minItems: 1
+    maxItems: 16
+
+  # Not every GPIO controller is an interrupt-controller
+  interrupt-controller: true
+
+  "#interrupt-cells":
+    const: 2
+
+patternProperties:
+  "-hog(-[0-9]+)?$":
+    type: object
+    required:
+      - gpio-hog
+
+required:
+  - compatible
+  - interrupt-controller
+  - "#interrupt-cells"
+  - gpio-controller
+  - "#gpio-cells"
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/gpio/gpio.h>
+    #include <dt-bindings/interrupt-controller/arm-gic.h>
+
+    gpio {
+        compatible = "test,gpio-controller-and-hogs";
+
+        gpio-controller;
+        #gpio-cells = <2>;
+        gpio-ranges = <&iomuxc 0 0 32>;
+        interrupt-controller;
+        #interrupt-cells = <2>;
+
+        usb3-sata-sel-hog {
+            gpio-hog;
+            gpios = <4 GPIO_ACTIVE_HIGH>;
+            line-name = "usb3_sata_sel";
+            output-low;
+        };
+    };
diff --git a/Documentation/devicetree/bindings/examples/multiple-variants-and-variable-lists.yaml b/Documentation/devicetree/bindings/examples/multiple-variants-and-variable-lists.yaml
new file mode 100644
index 000000000000..8763791a8adb
--- /dev/null
+++ b/Documentation/devicetree/bindings/examples/multiple-variants-and-variable-lists.yaml
@@ -0,0 +1,110 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/examples/multiple-variants-and-variable-lists.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: An Example Device with Multiple Variants and Variable Clock Inputs
+
+maintainers:
+  - Rob Herring <robh@...nel.org>
+  - Krzysztof Kozlowski <krzk@...nel.org>
+  - Conor Dooley <conor@...nel.org>
+
+properties:
+  compatible:
+    enum:
+      - test,variant-2-clocks
+      - test,variant-3-clocks
+      - test,variant-4-clocks
+
+  # Same principles as for clocks apply also to all list-based properties, like
+  # power-domains, reg, resets, etc.
+  clocks:
+    minItems: 2
+    maxItems: 4
+
+  # It is preferred that variants (devices) share as much as possible from
+  # lists, e.g. the list has common part with 'minItems: X'.  Example shows
+  # case when list cannot be constructed that way.
+  clock-names:
+    minItems: 2
+    maxItems: 4
+
+required:
+  - compatible
+  - clocks
+  - clock-names
+
+allOf:
+  - if:
+      properties:
+        compatible:
+          const: test,variant-2-clocks
+    then:
+      properties:
+        clocks:
+          maxItems: 2
+        clock-names:
+          items:
+            - const: bus
+            - const: core
+
+  - if:
+      properties:
+        compatible:
+          const: test,variant-3-clocks
+    then:
+      properties:
+        clocks:
+          minItems: 3
+          maxItems: 3
+        clock-names:
+          items:
+            - const: bus
+            - const: ref
+            - const: lane
+
+  - if:
+      properties:
+        compatible:
+          const: test,variant-4-clocks
+    then:
+      properties:
+        clocks:
+          minItems: 4
+        clock-names:
+          items:
+            - const: bus
+            - const: ref
+            - const: tx_lane
+            - const: rx_lane
+
+additionalProperties: false
+
+# Usually, if examples different by one property only one example is useful.
+# For the purpose of the excercise all variants are described.
+examples:
+  - |
+    device {
+        compatible = "test,variant-2-clocks";
+
+        clocks = <&cc 1>, <&cc 2>;
+        clock-names = "bus", "core";
+    };
+
+  - |
+    device {
+        compatible = "test,variant-3-clocks";
+
+        clocks = <&cc 1>, <&cc 2>, <&cc 3>;
+        clock-names = "bus", "ref", "lane";
+    };
+
+  - |
+    device {
+        compatible = "test,variant-4-clocks";
+
+        clocks = <&cc 1>, <&cc 2>, <&cc 3>, <&cc 4>;
+        clock-names = "bus", "ref", "tx_lane", "rx_lane";
+    };
diff --git a/Documentation/devicetree/bindings/writing-schema.rst b/Documentation/devicetree/bindings/writing-schema.rst
index 7e71cdd1d6de..4ecd4b309276 100644
--- a/Documentation/devicetree/bindings/writing-schema.rst
+++ b/Documentation/devicetree/bindings/writing-schema.rst
@@ -206,6 +206,10 @@ json-schema Resources
 Annotated Example Schema
 ------------------------
 
-Also available as a separate file: :download:`example-schema.yaml`
+Several examples for typical cases:
+ - :download:`examples/gpio-controller-and-hogs.yaml`
+ - :download:`examples/multiple-variants-and-variable-lists.yaml`
+
+Example-schema available as a separate file: :download:`example-schema.yaml`
 
 .. literalinclude:: example-schema.yaml
-- 
2.43.0


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ