[PATCH 4/6] dtc: dt-check-style: Add test for node and property name styles
From: Krzysztof Kozlowski
Date: Sat Aug 29 2026 - 15:55:02 EST
Common style violation is usage of underscores in node or property
names, so add rules for following recommended names. There is plenty of
legacy approach, so add the rules only for 'strict' mode of checking.
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxxxxxxxx>
---
scripts/dtc/dt-check-style | 31 +++++++++++
.../dtc/dt-style-selftest/bad/dts-node-name.dts | 60 ++++++++++++++++++++++
.../dt-style-selftest/bad/dts-property-name.dts | 28 ++++++++++
.../dtc/dt-style-selftest/bad/yaml-node-name.yaml | 54 +++++++++++++++++++
.../dt-style-selftest/bad/yaml-property-name.yaml | 46 +++++++++++++++++
.../expected/dts-node-name.dts.txt | 13 +++++
.../expected/dts-property-name.dts.txt | 14 +++++
.../expected/yaml-node-name.yaml.txt | 7 +++
.../expected/yaml-property-name.yaml.txt | 14 +++++
9 files changed, 267 insertions(+)
diff --git a/scripts/dtc/dt-check-style b/scripts/dtc/dt-check-style
index 7c3ee1432dc6..16586d0029ff 100755
--- a/scripts/dtc/dt-check-style
+++ b/scripts/dtc/dt-check-style
@@ -676,6 +676,31 @@ def check_node_close_alone(ctx):
'closing brace must be on its own line')
+def check_node_name(ctx):
+ """Only recommended characters are used in node names."""
+ for dl in ctx.lines:
+ if not dl.node_name in (None, '/'):
+ if not re.match(r'[0-9a-z][0-9a-z-]*(?<!-)$', dl.node_name):
+ yield (dl.lineno, f'node name "{dl.node_name}" is using discouraged style')
+
+
+def check_property_name(ctx):
+ """Only recommended characters are used in property names."""
+ for dl in ctx.lines:
+ if dl.prop_name:
+ exceptions = ['cpu_off', 'cpu_on', 'cpu_suspend',
+ 'device_type', 'dr_mode',
+ 'mmc-hs200-1_2v', 'mmc-hs200-1_8v', 'mmc-hs400-1_2v', 'mmc-hs400-1_8v',
+ 'opp-avg-kBps', 'opp-peak-kBps', 'phy_type']
+
+ if re.match(r'\#([0-9a-z][0-9a-z-]*(?<!-),)?[a-z-]+-cells$', dl.prop_name):
+ continue
+ if dl.prop_name in exceptions:
+ continue
+ if not re.match(r'([0-9a-z][0-9a-z-]*(?<!-),)?[0-9a-z][0-9a-z-]*(?<!-)$', dl.prop_name):
+ yield (dl.lineno, f'property name "{dl.prop_name}" is using discouraged style')
+
+
def _property_bucket(name):
"""Return the canonical bucket index for a property:
0 device_type
@@ -1098,6 +1123,12 @@ RULES = [
Rule('node-close-alone', 'strict',
'closing brace must be on its own line',
check_node_close_alone),
+ Rule('node-name', 'strict',
+ 'node names use only recommended characters (see DTS Coding Style)',
+ check_node_name),
+ Rule('property-name', 'strict',
+ 'property names use only recommended characters (see DTS Coding Style)',
+ check_property_name),
Rule('property-order', 'strict',
'canonical bucket + pairing + natural-sort order of properties',
check_property_order),
diff --git a/scripts/dtc/dt-style-selftest/bad/dts-node-name.dts b/scripts/dtc/dt-style-selftest/bad/dts-node-name.dts
new file mode 100644
index 000000000000..b897cbd74dd6
--- /dev/null
+++ b/scripts/dtc/dt-style-selftest/bad/dts-node-name.dts
@@ -0,0 +1,60 @@
+// SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+/dts-v1/;
+
+/ {
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ foo_bar {
+ compatible = "example,test-node-name";
+ };
+
+ foo,bar {
+ compatible = "example,test-node-name";
+ };
+
+ foo.bar {
+ compatible = "example,test-node-name";
+ };
+
+ foo+bar {
+ compatible = "example,test-node-name";
+ };
+
+ foo-bar- {
+ compatible = "example,test-node-name";
+ };
+
+ soc@0 {
+ compatible = "simple-bus";
+ ranges = <0 0 0 0xc0000000>;
+
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ foo_bar@1000 {
+ compatible = "example,test-node-name";
+ reg = <0x1000 0x100>;
+ };
+
+ foo,bar@2000 {
+ compatible = "example,test-node-name";
+ reg = <0x2000 0x100>;
+ };
+
+ foo.bar@3000 {
+ compatible = "example,test-node-name";
+ reg = <0x3000 0x100>;
+ };
+
+ foo+bar@4000 {
+ compatible = "example,test-node-name";
+ reg = <0x4000 0x100>;
+ };
+
+ foo-bar-@5000 {
+ compatible = "example,test-node-name";
+ reg = <0x5000 0x100>;
+ };
+ };
+};
diff --git a/scripts/dtc/dt-style-selftest/bad/dts-property-name.dts b/scripts/dtc/dt-style-selftest/bad/dts-property-name.dts
new file mode 100644
index 000000000000..110e33a524dd
--- /dev/null
+++ b/scripts/dtc/dt-style-selftest/bad/dts-property-name.dts
@@ -0,0 +1,28 @@
+// SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+/dts-v1/;
+
+/ {
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ foo {
+ compatible = "example,test-property-name";
+
+ property#foo;
+ property+foo;
+ property-foo;
+ property-foo-;
+ property.foo;
+ property?foo;
+ property_foo;
+
+ vendor,property#foo;
+ vendor,property+foo;
+ vendor,property,foo;
+ vendor,property-foo;
+ vendor,property-foo-;
+ vendor,property.foo;
+ vendor,property?foo;
+ vendor,property_foo;
+ };
+};
diff --git a/scripts/dtc/dt-style-selftest/bad/yaml-node-name.yaml b/scripts/dtc/dt-style-selftest/bad/yaml-node-name.yaml
new file mode 100644
index 000000000000..03373cae9a66
--- /dev/null
+++ b/scripts/dtc/dt-style-selftest/bad/yaml-node-name.yaml
@@ -0,0 +1,54 @@
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/test-node-name.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Test fixture with incorrect node names
+
+maintainers:
+ - Rob Herring <robh@xxxxxxxxxx>
+
+properties:
+ compatible:
+ const: example,test-node-name
+ reg:
+ maxItems: 1
+
+required:
+ - compatible
+
+additionalProperties: false
+
+examples:
+ - |
+ foo_bar@1000 {
+ compatible = "example,test-node-name";
+ reg = <0x1000 0x100>;
+ };
+
+ foo,bar@2000 {
+ compatible = "example,test-node-name";
+ reg = <0x2000 0x100>;
+ };
+
+ foo.bar@3000 {
+ compatible = "example,test-node-name";
+ reg = <0x3000 0x100>;
+ };
+
+ foo+bar@4000 {
+ compatible = "example,test-node-name";
+ reg = <0x4000 0x100>;
+ };
+
+ foo-bar-@5000 {
+ compatible = "example,test-node-name";
+ reg = <0x5000 0x100>;
+ };
+
+ // TODO handle also "-foo-bar" which is against spec but accepted by DTC
+
+ foo_bar {
+ compatible = "example,test-node-name";
+ };
diff --git a/scripts/dtc/dt-style-selftest/bad/yaml-property-name.yaml b/scripts/dtc/dt-style-selftest/bad/yaml-property-name.yaml
new file mode 100644
index 000000000000..08e0d1eb152a
--- /dev/null
+++ b/scripts/dtc/dt-style-selftest/bad/yaml-property-name.yaml
@@ -0,0 +1,46 @@
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/test-property-name.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Test fixture with incorrect property names
+
+maintainers:
+ - Rob Herring <robh@xxxxxxxxxx>
+
+properties:
+ compatible:
+ const: example,test-property-name
+ reg:
+ maxItems: 1
+
+required:
+ - compatible
+ - reg
+
+additionalProperties: false
+
+examples:
+ - |
+ foo@1000 {
+ compatible = "example,test-property-name";
+ reg = <0x1000 0x100>;
+
+ property#foo;
+ property+foo;
+ property-foo;
+ property-foo-;
+ property.foo;
+ property?foo;
+ property_foo;
+
+ vendor,property#foo;
+ vendor,property+foo;
+ vendor,property,foo;
+ vendor,property-foo;
+ vendor,property-foo-;
+ vendor,property.foo;
+ vendor,property?foo;
+ vendor,property_foo;
+ };
diff --git a/scripts/dtc/dt-style-selftest/expected/dts-node-name.dts.txt b/scripts/dtc/dt-style-selftest/expected/dts-node-name.dts.txt
new file mode 100644
index 000000000000..bd8d7e21e243
--- /dev/null
+++ b/scripts/dtc/dt-style-selftest/expected/dts-node-name.dts.txt
@@ -0,0 +1,13 @@
+# mode=strict
+bad/dts-node-name.dts:8: [node-name] node name "foo_bar" is using discouraged style
+bad/dts-node-name.dts:12: [child-name-order] child node 'foo,bar' out of name order
+bad/dts-node-name.dts:12: [node-name] node name "foo,bar" is using discouraged style
+bad/dts-node-name.dts:16: [node-name] node name "foo.bar" is using discouraged style
+bad/dts-node-name.dts:20: [child-name-order] child node 'foo+bar' out of name order
+bad/dts-node-name.dts:20: [node-name] node name "foo+bar" is using discouraged style
+bad/dts-node-name.dts:24: [node-name] node name "foo-bar-" is using discouraged style
+bad/dts-node-name.dts:35: [node-name] node name "foo_bar" is using discouraged style
+bad/dts-node-name.dts:40: [node-name] node name "foo,bar" is using discouraged style
+bad/dts-node-name.dts:45: [node-name] node name "foo.bar" is using discouraged style
+bad/dts-node-name.dts:50: [node-name] node name "foo+bar" is using discouraged style
+bad/dts-node-name.dts:55: [node-name] node name "foo-bar-" is using discouraged style
diff --git a/scripts/dtc/dt-style-selftest/expected/dts-property-name.dts.txt b/scripts/dtc/dt-style-selftest/expected/dts-property-name.dts.txt
new file mode 100644
index 000000000000..f447743383da
--- /dev/null
+++ b/scripts/dtc/dt-style-selftest/expected/dts-property-name.dts.txt
@@ -0,0 +1,14 @@
+# mode=strict
+bad/dts-property-name.dts:11: [property-name] property name "property#foo" is using discouraged style
+bad/dts-property-name.dts:12: [property-name] property name "property+foo" is using discouraged style
+bad/dts-property-name.dts:14: [property-name] property name "property-foo-" is using discouraged style
+bad/dts-property-name.dts:15: [property-name] property name "property.foo" is using discouraged style
+bad/dts-property-name.dts:16: [property-name] property name "property?foo" is using discouraged style
+bad/dts-property-name.dts:17: [property-name] property name "property_foo" is using discouraged style
+bad/dts-property-name.dts:19: [property-name] property name "vendor,property#foo" is using discouraged style
+bad/dts-property-name.dts:20: [property-name] property name "vendor,property+foo" is using discouraged style
+bad/dts-property-name.dts:21: [property-name] property name "vendor,property,foo" is using discouraged style
+bad/dts-property-name.dts:23: [property-name] property name "vendor,property-foo-" is using discouraged style
+bad/dts-property-name.dts:24: [property-name] property name "vendor,property.foo" is using discouraged style
+bad/dts-property-name.dts:25: [property-name] property name "vendor,property?foo" is using discouraged style
+bad/dts-property-name.dts:26: [property-name] property name "vendor,property_foo" is using discouraged style
diff --git a/scripts/dtc/dt-style-selftest/expected/yaml-node-name.yaml.txt b/scripts/dtc/dt-style-selftest/expected/yaml-node-name.yaml.txt
new file mode 100644
index 000000000000..d9cf749e35c2
--- /dev/null
+++ b/scripts/dtc/dt-style-selftest/expected/yaml-node-name.yaml.txt
@@ -0,0 +1,7 @@
+# mode=strict
+bad/yaml-node-name.yaml:25: example 0 [node-name] node name "foo_bar" is using discouraged style
+bad/yaml-node-name.yaml:30: example 0 [node-name] node name "foo,bar" is using discouraged style
+bad/yaml-node-name.yaml:35: example 0 [node-name] node name "foo.bar" is using discouraged style
+bad/yaml-node-name.yaml:40: example 0 [node-name] node name "foo+bar" is using discouraged style
+bad/yaml-node-name.yaml:45: example 0 [node-name] node name "foo-bar-" is using discouraged style
+bad/yaml-node-name.yaml:52: example 0 [node-name] node name "foo_bar" is using discouraged style
diff --git a/scripts/dtc/dt-style-selftest/expected/yaml-property-name.yaml.txt b/scripts/dtc/dt-style-selftest/expected/yaml-property-name.yaml.txt
new file mode 100644
index 000000000000..6aa3a004532b
--- /dev/null
+++ b/scripts/dtc/dt-style-selftest/expected/yaml-property-name.yaml.txt
@@ -0,0 +1,14 @@
+# mode=strict
+bad/yaml-property-name.yaml:30: example 0 [property-name] property name "property#foo" is using discouraged style
+bad/yaml-property-name.yaml:31: example 0 [property-name] property name "property+foo" is using discouraged style
+bad/yaml-property-name.yaml:33: example 0 [property-name] property name "property-foo-" is using discouraged style
+bad/yaml-property-name.yaml:34: example 0 [property-name] property name "property.foo" is using discouraged style
+bad/yaml-property-name.yaml:35: example 0 [property-name] property name "property?foo" is using discouraged style
+bad/yaml-property-name.yaml:36: example 0 [property-name] property name "property_foo" is using discouraged style
+bad/yaml-property-name.yaml:38: example 0 [property-name] property name "vendor,property#foo" is using discouraged style
+bad/yaml-property-name.yaml:39: example 0 [property-name] property name "vendor,property+foo" is using discouraged style
+bad/yaml-property-name.yaml:40: example 0 [property-name] property name "vendor,property,foo" is using discouraged style
+bad/yaml-property-name.yaml:42: example 0 [property-name] property name "vendor,property-foo-" is using discouraged style
+bad/yaml-property-name.yaml:43: example 0 [property-name] property name "vendor,property.foo" is using discouraged style
+bad/yaml-property-name.yaml:44: example 0 [property-name] property name "vendor,property?foo" is using discouraged style
+bad/yaml-property-name.yaml:45: example 0 [property-name] property name "vendor,property_foo" is using discouraged style
--
2.53.0