History

Merge tag 'devicetree-fixes-for-6.8-1' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux

Pull devicetree fixes from Rob Herring: - Improve devlink dependency parsing for DT graphs - Fix devlink handling of io-channels dependencies - Fix PCI addressing in marvell,prestera example - A few schema fixes for property constraints - Improve performance of DT unprobed devices kselftest - Fix regression in DT_SCHEMA_FILES handling - Fix compile error in unittest for !OF_DYNAMIC * tag 'devicetree-fixes-for-6.8-1' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux: dt-bindings: ufs: samsung,exynos-ufs: Add size constraints on "samsung,sysreg" of: property: Add in-ports/out-ports support to of_graph_get_port_parent() of: property: Improve finding the supplier of a remote-endpoint property of: property: Improve finding the consumer of a remote-endpoint property net: marvell,prestera: Fix example PCI bus addressing of: unittest: Fix compile in the non-dynamic case of: property: fix typo in io-channels dt-bindings: tpm: Drop type from "resets" dt-bindings: display: nxp,tda998x: Fix 'audio-ports' constraints dt-bindings: xilinx: replace Piyush Mehta maintainership kselftest: dt: Stop relying on dirname to improve performance dt-bindings: don't anchor DT_SCHEMA_FILES to bindings directory

Linus Torvalds committed 2 years ago

Commit 339e2fc2 parents a00cf19 4e06ec014 files · +71 −64Browse files

Unified · Split

14 files
  1. Documentation/devicetree/bindings/Makefile +4 −1
  2. Documentation/devicetree/bindings/ata/ceva,ahci-1v84.yaml +2 −1
  3. Documentation/devicetree/bindings/display/bridge/nxp,tda998x.yaml +5 −2
  4. Documentation/devicetree/bindings/gpio/xlnx,zynqmp-gpio-modepin.yaml +2 −1
  5. Documentation/devicetree/bindings/net/marvell,prestera.yaml +2 −2
  6. Documentation/devicetree/bindings/reset/xlnx,zynqmp-reset.yaml +2 −1
  7. Documentation/devicetree/bindings/tpm/tpm-common.yaml +1 −1
  8. Documentation/devicetree/bindings/ufs/samsung,exynos-ufs.yaml +6 −3
  9. Documentation/devicetree/bindings/usb/dwc3-xilinx.yaml +2 −1
  10. Documentation/devicetree/bindings/usb/microchip,usb5744.yaml +2 −1
  11. Documentation/devicetree/bindings/usb/xlnx,usb2.yaml +2 −1
  12. drivers/of/property.c +25 −40
  13. drivers/of/unittest.c +9 −3
  14. tools/testing/selftests/dt/test_unprobed_devices.sh +7 −6
Documentation/devicetree/bindings/Makefile+4−1
@@ -28,7 +28,10 @@ $(obj)/%.example.dts: $(src)/%.yaml check_dtschema_version FORCE · 27 unmodified lines
28find_all_cmd = find $(srctree)/$(src) \( -name '*.yaml' ! \28find_all_cmd = find $(srctree)/$(src) \( -name '*.yaml' ! \
29 -name 'processed-schema*' \)29 -name 'processed-schema*' \)
30 30
31find_cmd = $(find_all_cmd) | sed 's|^$(srctree)/$(src)/||' | grep -F -e "$(subst :," -e ",$(DT_SCHEMA_FILES))" | sed 's|^|$(srctree)/$(src)/|'31find_cmd = $(find_all_cmd) | \
32 sed 's|^$(srctree)/||' | \
33 grep -F -e "$(subst :," -e ",$(DT_SCHEMA_FILES))" | \
34 sed 's|^|$(srctree)/|'
32CHK_DT_DOCS := $(shell $(find_cmd))35CHK_DT_DOCS := $(shell $(find_cmd))
33 36
34quiet_cmd_yamllint = LINT $(src)37quiet_cmd_yamllint = LINT $(src)
Documentation/devicetree/bindings/ata/ceva,ahci-1v84.yaml+2−1
@@ -7,7 +7,8 @@ $schema: http://devicetree.org/meta-schemas/core.yaml# · 6 unmodified lines
7title: Ceva AHCI SATA Controller7title: Ceva AHCI SATA Controller
8 8
9maintainers:9maintainers:
10 - Piyush Mehta <piyush.mehta@amd.com>10 - Mubin Sayyed <mubin.sayyed@amd.com>
11 - Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
11 12
12description: |13description: |
13 The Ceva SATA controller mostly conforms to the AHCI interface with some14 The Ceva SATA controller mostly conforms to the AHCI interface with some
Documentation/devicetree/bindings/display/bridge/nxp,tda998x.yaml+5−2
@@ -29,19 +29,22 @@ properties: · 28 unmodified lines
29 29
30 audio-ports:30 audio-ports:
31 description:31 description:
32 Array of 8-bit values, 2 values per DAI (Documentation/sound/soc/dai.rst).32 Array of 2 values per DAI (Documentation/sound/soc/dai.rst).
33 The implementation allows one or two DAIs.33 The implementation allows one or two DAIs.
34 If two DAIs are defined, they must be of different type.34 If two DAIs are defined, they must be of different type.
35 $ref: /schemas/types.yaml#/definitions/uint32-matrix35 $ref: /schemas/types.yaml#/definitions/uint32-matrix
36 minItems: 1
37 maxItems: 2
36 items:38 items:
37 minItems: 1
38 items:39 items:
39 - description: |40 - description: |
40 The first value defines the DAI type: TDA998x_SPDIF or TDA998x_I2S41 The first value defines the DAI type: TDA998x_SPDIF or TDA998x_I2S
41 (see include/dt-bindings/display/tda998x.h).42 (see include/dt-bindings/display/tda998x.h).
43 enum: [ 1, 2 ]
42 - description:44 - description:
43 The second value defines the tda998x AP_ENA reg content when the45 The second value defines the tda998x AP_ENA reg content when the
44 DAI in question is used.46 DAI in question is used.
47 maximum: 0xff
45 48
46 '#sound-dai-cells':49 '#sound-dai-cells':
47 enum: [ 0, 1 ]50 enum: [ 0, 1 ]
Documentation/devicetree/bindings/gpio/xlnx,zynqmp-gpio-modepin.yaml+2−1
@@ -12,7 +12,8 @@ description: · 11 unmodified lines
12 PS_MODE). Every pin can be configured as input/output.12 PS_MODE). Every pin can be configured as input/output.
13 13
14maintainers:14maintainers:
15 - Piyush Mehta <piyush.mehta@amd.com>15 - Mubin Sayyed <mubin.sayyed@amd.com>
16 - Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
16 17
17properties:18properties:
18 compatible:19 compatible:
Documentation/devicetree/bindings/net/marvell,prestera.yaml+2−2
@@ -78,8 +78,8 @@ examples: · 77 unmodified lines
78 pcie@0 {78 pcie@0 {
79 #address-cells = <3>;79 #address-cells = <3>;
80 #size-cells = <2>;80 #size-cells = <2>;
81 ranges = <0x0 0x0 0x0 0x0 0x0 0x0>;81 ranges = <0x02000000 0x0 0x100000 0x10000000 0x0 0x0>;
82 reg = <0x0 0x0 0x0 0x0 0x0 0x0>;82 reg = <0x0 0x1000>;
83 device_type = "pci";83 device_type = "pci";
84 84
85 switch@0,0 {85 switch@0,0 {
Documentation/devicetree/bindings/reset/xlnx,zynqmp-reset.yaml+2−1
@@ -7,7 +7,8 @@ $schema: http://devicetree.org/meta-schemas/core.yaml# · 6 unmodified lines
7title: Zynq UltraScale+ MPSoC and Versal reset7title: Zynq UltraScale+ MPSoC and Versal reset
8 8
9maintainers:9maintainers:
10 - Piyush Mehta <piyush.mehta@amd.com>10 - Mubin Sayyed <mubin.sayyed@amd.com>
11 - Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
11 12
12description: |13description: |
13 The Zynq UltraScale+ MPSoC and Versal has several different resets.14 The Zynq UltraScale+ MPSoC and Versal has several different resets.
Documentation/devicetree/bindings/tpm/tpm-common.yaml+1−1
@@ -42,7 +42,7 @@ properties: · 41 unmodified lines
42 42
43 resets:43 resets:
44 description: Reset controller to reset the TPM44 description: Reset controller to reset the TPM
45 $ref: /schemas/types.yaml#/definitions/phandle45 maxItems: 1
46 46
47 reset-gpios:47 reset-gpios:
48 description: Output GPIO pin to reset the TPM48 description: Output GPIO pin to reset the TPM
Documentation/devicetree/bindings/ufs/samsung,exynos-ufs.yaml+6−3
@@ -55,9 +55,12 @@ properties: · 54 unmodified lines
55 55
56 samsung,sysreg:56 samsung,sysreg:
57 $ref: /schemas/types.yaml#/definitions/phandle-array57 $ref: /schemas/types.yaml#/definitions/phandle-array
58 description: Should be phandle/offset pair. The phandle to the syscon node58 items:
59 which indicates the FSYSx sysreg interface and the offset of59 - items:
60 the control register for UFS io coherency setting.60 - description: phandle to FSYSx sysreg node
61 - description: offset of the control register for UFS io coherency setting
62 description:
63 Phandle and offset to the FSYSx sysreg for UFS io coherency setting.
61 64
62 dma-coherent: true65 dma-coherent: true
63 66
Documentation/devicetree/bindings/usb/dwc3-xilinx.yaml+2−1
@@ -7,7 +7,8 @@ $schema: http://devicetree.org/meta-schemas/core.yaml# · 6 unmodified lines
7title: Xilinx SuperSpeed DWC3 USB SoC controller7title: Xilinx SuperSpeed DWC3 USB SoC controller
8 8
9maintainers:9maintainers:
10 - Piyush Mehta <piyush.mehta@amd.com>10 - Mubin Sayyed <mubin.sayyed@amd.com>
11 - Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
11 12
12properties:13properties:
13 compatible:14 compatible:
Documentation/devicetree/bindings/usb/microchip,usb5744.yaml+2−1
@@ -16,8 +16,9 @@ description: · 15 unmodified lines
16 USB 2.0 traffic.16 USB 2.0 traffic.
17 17
18maintainers:18maintainers:
19 - Piyush Mehta <piyush.mehta@amd.com>
20 - Michal Simek <michal.simek@amd.com>19 - Michal Simek <michal.simek@amd.com>
20 - Mubin Sayyed <mubin.sayyed@amd.com>
21 - Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
21 22
22properties:23properties:
23 compatible:24 compatible:
Documentation/devicetree/bindings/usb/xlnx,usb2.yaml+2−1
@@ -7,7 +7,8 @@ $schema: http://devicetree.org/meta-schemas/core.yaml# · 6 unmodified lines
7title: Xilinx udc controller7title: Xilinx udc controller
8 8
9maintainers:9maintainers:
10 - Piyush Mehta <piyush.mehta@amd.com>10 - Mubin Sayyed <mubin.sayyed@amd.com>
11 - Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
11 12
12properties:13properties:
13 compatible:14 compatible:
drivers/of/property.c+25−40
@@ -763,7 +763,9 @@ struct device_node *of_graph_get_port_parent(struct device_node *node) · 762 unmodified lines
763 /* Walk 3 levels up only if there is 'ports' node. */763 /* Walk 3 levels up only if there is 'ports' node. */
764 for (depth = 3; depth && node; depth--) {764 for (depth = 3; depth && node; depth--) {
765 node = of_get_next_parent(node);765 node = of_get_next_parent(node);
766 if (depth == 2 && !of_node_name_eq(node, "ports"))766 if (depth == 2 && !of_node_name_eq(node, "ports") &&
767 !of_node_name_eq(node, "in-ports") &&
768 !of_node_name_eq(node, "out-ports"))
767 break;769 break;
768 }770 }
769 return node;771 return node;
@@ -1063,36 +1065,6 @@ of_fwnode_device_get_match_data(const struct fwnode_handle *fwnode, · 293 unmodified lines
1063 return of_device_get_match_data(dev);1065 return of_device_get_match_data(dev);
1064}1066}
1065 1067
1066static struct device_node *of_get_compat_node(struct device_node *np)
1067{
1068 of_node_get(np);
1069
1070 while (np) {
1071 if (!of_device_is_available(np)) {
1072 of_node_put(np);
1073 np = NULL;
1074 }
1075
1076 if (of_property_present(np, "compatible"))
1077 break;
1078
1079 np = of_get_next_parent(np);
1080 }
1081
1082 return np;
1083}
1084
1085static struct device_node *of_get_compat_node_parent(struct device_node *np)
1086{
1087 struct device_node *parent, *node;
1088
1089 parent = of_get_parent(np);
1090 node = of_get_compat_node(parent);
1091 of_node_put(parent);
1092
1093 return node;
1094}
1095
1096static void of_link_to_phandle(struct device_node *con_np,1068static void of_link_to_phandle(struct device_node *con_np,
1097 struct device_node *sup_np)1069 struct device_node *sup_np)
1098{1070{
@@ -1222,10 +1194,10 @@ static struct device_node *parse_##fname(struct device_node *np, \ · 123 unmodified lines
1222 * parse_prop.prop_name: Name of property holding a phandle value1194 * parse_prop.prop_name: Name of property holding a phandle value
1223 * parse_prop.index: For properties holding a list of phandles, this is the1195 * parse_prop.index: For properties holding a list of phandles, this is the
1224 * index into the list1196 * index into the list
1197 * @get_con_dev: If the consumer node containing the property is never converted
1198 * to a struct device, implement this ops so fw_devlink can use it
1199 * to find the true consumer.
1225 * @optional: Describes whether a supplier is mandatory or not1200 * @optional: Describes whether a supplier is mandatory or not
1226 * @node_not_dev: The consumer node containing the property is never converted
1227 * to a struct device. Instead, parse ancestor nodes for the
1228 * compatible property to find a node corresponding to a device.
1229 *1201 *
1230 * Returns:1202 * Returns:
1231 * parse_prop() return values are1203 * parse_prop() return values are
@@ -1236,15 +1208,15 @@ static struct device_node *parse_##fname(struct device_node *np, \ · 4 unmodified lines
1236struct supplier_bindings {1208struct supplier_bindings {
1237 struct device_node *(*parse_prop)(struct device_node *np,1209 struct device_node *(*parse_prop)(struct device_node *np,
1238 const char *prop_name, int index);1210 const char *prop_name, int index);
1211 struct device_node *(*get_con_dev)(struct device_node *np);
1239 bool optional;1212 bool optional;
1240 bool node_not_dev;
1241};1213};
1242 1214
1243DEFINE_SIMPLE_PROP(clocks, "clocks", "#clock-cells")1215DEFINE_SIMPLE_PROP(clocks, "clocks", "#clock-cells")
1244DEFINE_SIMPLE_PROP(interconnects, "interconnects", "#interconnect-cells")1216DEFINE_SIMPLE_PROP(interconnects, "interconnects", "#interconnect-cells")
1245DEFINE_SIMPLE_PROP(iommus, "iommus", "#iommu-cells")1217DEFINE_SIMPLE_PROP(iommus, "iommus", "#iommu-cells")
1246DEFINE_SIMPLE_PROP(mboxes, "mboxes", "#mbox-cells")1218DEFINE_SIMPLE_PROP(mboxes, "mboxes", "#mbox-cells")
1247DEFINE_SIMPLE_PROP(io_channels, "io-channel", "#io-channel-cells")1219DEFINE_SIMPLE_PROP(io_channels, "io-channels", "#io-channel-cells")
1248DEFINE_SIMPLE_PROP(interrupt_parent, "interrupt-parent", NULL)1220DEFINE_SIMPLE_PROP(interrupt_parent, "interrupt-parent", NULL)
1249DEFINE_SIMPLE_PROP(dmas, "dmas", "#dma-cells")1221DEFINE_SIMPLE_PROP(dmas, "dmas", "#dma-cells")
1250DEFINE_SIMPLE_PROP(power_domains, "power-domains", "#power-domain-cells")1222DEFINE_SIMPLE_PROP(power_domains, "power-domains", "#power-domain-cells")
@@ -1262,7 +1234,6 @@ DEFINE_SIMPLE_PROP(pinctrl5, "pinctrl-5", NULL) · 11 unmodified lines
1262DEFINE_SIMPLE_PROP(pinctrl6, "pinctrl-6", NULL)1234DEFINE_SIMPLE_PROP(pinctrl6, "pinctrl-6", NULL)
1263DEFINE_SIMPLE_PROP(pinctrl7, "pinctrl-7", NULL)1235DEFINE_SIMPLE_PROP(pinctrl7, "pinctrl-7", NULL)
1264DEFINE_SIMPLE_PROP(pinctrl8, "pinctrl-8", NULL)1236DEFINE_SIMPLE_PROP(pinctrl8, "pinctrl-8", NULL)
1265DEFINE_SIMPLE_PROP(remote_endpoint, "remote-endpoint", NULL)
1266DEFINE_SIMPLE_PROP(pwms, "pwms", "#pwm-cells")1237DEFINE_SIMPLE_PROP(pwms, "pwms", "#pwm-cells")
1267DEFINE_SIMPLE_PROP(resets, "resets", "#reset-cells")1238DEFINE_SIMPLE_PROP(resets, "resets", "#reset-cells")
1268DEFINE_SIMPLE_PROP(leds, "leds", NULL)1239DEFINE_SIMPLE_PROP(leds, "leds", NULL)
@@ -1328,6 +1299,17 @@ static struct device_node *parse_interrupts(struct device_node *np, · 59 unmodified lines
1328 return of_irq_parse_one(np, index, &sup_args) ? NULL : sup_args.np;1299 return of_irq_parse_one(np, index, &sup_args) ? NULL : sup_args.np;
1329}1300}
1330 1301
1302static struct device_node *parse_remote_endpoint(struct device_node *np,
1303 const char *prop_name,
1304 int index)
1305{
1306 /* Return NULL for index > 0 to signify end of remote-endpoints. */
1307 if (!index || strcmp(prop_name, "remote-endpoint"))
1308 return NULL;
1309
1310 return of_graph_get_remote_port_parent(np);
1311}
1312
1331static const struct supplier_bindings of_supplier_bindings[] = {1313static const struct supplier_bindings of_supplier_bindings[] = {
1332 { .parse_prop = parse_clocks, },1314 { .parse_prop = parse_clocks, },
1333 { .parse_prop = parse_interconnects, },1315 { .parse_prop = parse_interconnects, },
@@ -1352,7 +1334,10 @@ static const struct supplier_bindings of_supplier_bindings[] = { · 18 unmodified lines
1352 { .parse_prop = parse_pinctrl6, },1334 { .parse_prop = parse_pinctrl6, },
1353 { .parse_prop = parse_pinctrl7, },1335 { .parse_prop = parse_pinctrl7, },
1354 { .parse_prop = parse_pinctrl8, },1336 { .parse_prop = parse_pinctrl8, },
1355 { .parse_prop = parse_remote_endpoint, .node_not_dev = true, },1337 {
1338 .parse_prop = parse_remote_endpoint,
1339 .get_con_dev = of_graph_get_port_parent,
1340 },
1356 { .parse_prop = parse_pwms, },1341 { .parse_prop = parse_pwms, },
1357 { .parse_prop = parse_resets, },1342 { .parse_prop = parse_resets, },
1358 { .parse_prop = parse_leds, },1343 { .parse_prop = parse_leds, },
@@ -1403,8 +1388,8 @@ static int of_link_property(struct device_node *con_np, const char *prop_name) · 44 unmodified lines
1403 while ((phandle = s->parse_prop(con_np, prop_name, i))) {1388 while ((phandle = s->parse_prop(con_np, prop_name, i))) {
1404 struct device_node *con_dev_np;1389 struct device_node *con_dev_np;
1405 1390
1406 con_dev_np = s->node_not_dev1391 con_dev_np = s->get_con_dev
1407 ? of_get_compat_node_parent(con_np)1392 ? s->get_con_dev(con_np)
1408 : of_node_get(con_np);1393 : of_node_get(con_np);
1409 matched = true;1394 matched = true;
1410 i++;1395 i++;
drivers/of/unittest.c+9−3
@@ -50,6 +50,12 @@ static struct unittest_results { · 49 unmodified lines
50 failed; \50 failed; \
51})51})
52 52
53#ifdef CONFIG_OF_KOBJ
54#define OF_KREF_READ(NODE) kref_read(&(NODE)->kobj.kref)
55#else
56#define OF_KREF_READ(NODE) 1
57#endif
58
53/*59/*
54 * Expected message may have a message level other than KERN_INFO.60 * Expected message may have a message level other than KERN_INFO.
55 * Print the expected message only if the current loglevel will allow61 * Print the expected message only if the current loglevel will allow
@@ -570,7 +576,7 @@ static void __init of_unittest_parse_phandle_with_args_map(void) · 514 unmodified lines
570 pr_err("missing testcase data\n");576 pr_err("missing testcase data\n");
571 return;577 return;
572 }578 }
573 prefs[i] = kref_read(&p[i]->kobj.kref);579 prefs[i] = OF_KREF_READ(p[i]);
574 }580 }
575 581
576 rc = of_count_phandle_with_args(np, "phandle-list", "#phandle-cells");582 rc = of_count_phandle_with_args(np, "phandle-list", "#phandle-cells");
@@ -693,9 +699,9 @@ static void __init of_unittest_parse_phandle_with_args_map(void) · 116 unmodified lines
693 unittest(rc == -EINVAL, "expected:%i got:%i\n", -EINVAL, rc);699 unittest(rc == -EINVAL, "expected:%i got:%i\n", -EINVAL, rc);
694 700
695 for (i = 0; i < ARRAY_SIZE(p); ++i) {701 for (i = 0; i < ARRAY_SIZE(p); ++i) {
696 unittest(prefs[i] == kref_read(&p[i]->kobj.kref),702 unittest(prefs[i] == OF_KREF_READ(p[i]),
697 "provider%d: expected:%d got:%d\n",703 "provider%d: expected:%d got:%d\n",
698 i, prefs[i], kref_read(&p[i]->kobj.kref));704 i, prefs[i], OF_KREF_READ(p[i]));
699 of_node_put(p[i]);705 of_node_put(p[i]);
700 }706 }
701}707}
tools/testing/selftests/dt/test_unprobed_devices.sh+7−6
@@ -33,8 +33,8 @@ if [[ ! -d "${PDT}" ]]; then · 32 unmodified lines
33fi33fi
34 34
35nodes_compatible=$(35nodes_compatible=$(
36 for node_compat in $(find ${PDT} -name compatible); do36 for node in $(find ${PDT} -type d); do
37 node=$(dirname "${node_compat}")37 [ ! -f "${node}"/compatible ] && continue
38 # Check if node is available38 # Check if node is available
39 if [[ -e "${node}"/status ]]; then39 if [[ -e "${node}"/status ]]; then
40 status=$(tr -d '\000' < "${node}"/status)40 status=$(tr -d '\000' < "${node}"/status)
@@ -46,10 +46,11 @@ nodes_compatible=$( · 5 unmodified lines
46 46
47nodes_dev_bound=$(47nodes_dev_bound=$(
48 IFS=$'\n'48 IFS=$'\n'
49 for uevent in $(find /sys/devices -name uevent); do49 for dev_dir in $(find /sys/devices -type d); do
50 if [[ -d "$(dirname "${uevent}")"/driver ]]; then50 [ ! -f "${dev_dir}"/uevent ] && continue
51 grep '^OF_FULLNAME=' "${uevent}" | sed -e 's|OF_FULLNAME=||'51 [ ! -d "${dev_dir}"/driver ] && continue
52 fi52
53 grep '^OF_FULLNAME=' "${dev_dir}"/uevent | sed -e 's|OF_FULLNAME=||'
53 done54 done
54 )55 )
55 56

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t