dts: edtlib: Add 'type: path' for path references
Add binding support for a 'path' property type, for properties that are assigned node paths. Usually, paths are assigned with path references like 'foo = &label' (common in /chosen), but plain strings are accepted as well as long as they're valid paths. The 'path' type is mostly for completeness at this point, but might be useful for https://github.com/zephyrproject-rtos/zephyr/issues/21623. The support is there already in dtlib. Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
This commit is contained in:
parent
960779a622
commit
23a5b4963b
5 changed files with 25 additions and 4 deletions
|
@ -182,9 +182,19 @@ on-bus: <string describing bus type, e.g. "i2c">
|
||||||
# All phandle-array properties support mapping through *-map properties,
|
# All phandle-array properties support mapping through *-map properties,
|
||||||
# e.g. gpio-map. See the devicetree spec.
|
# e.g. gpio-map. See the devicetree spec.
|
||||||
#
|
#
|
||||||
|
# - 'type: path' is for properties that are assigned a path. Usually, this
|
||||||
|
# would be done with a path reference:
|
||||||
|
#
|
||||||
|
# foo = &label;
|
||||||
|
#
|
||||||
|
# Plain strings are accepted too, and are verified to be a path to an
|
||||||
|
# existing node:
|
||||||
|
#
|
||||||
|
# foo = "/path/to/some/node";
|
||||||
|
#
|
||||||
# - 'type: compound' is a catch-all for more complex types, e.g.
|
# - 'type: compound' is a catch-all for more complex types, e.g.
|
||||||
#
|
#
|
||||||
# foo = <&label1>, [01 02];
|
# foo = <&label>, [01 02];
|
||||||
#
|
#
|
||||||
# 'type: array' and the other array types also allow splitting the value into
|
# 'type: array' and the other array types also allow splitting the value into
|
||||||
# several <> blocks, e.g. like this:
|
# several <> blocks, e.g. like this:
|
||||||
|
|
|
@ -1109,6 +1109,9 @@ class Node:
|
||||||
|
|
||||||
return self._standard_phandle_val_list(prop)
|
return self._standard_phandle_val_list(prop)
|
||||||
|
|
||||||
|
if prop_type == "path":
|
||||||
|
return self.edt._node2enode[prop.to_path()]
|
||||||
|
|
||||||
# prop_type == "compound". We have already checked that the 'type:'
|
# prop_type == "compound". We have already checked that the 'type:'
|
||||||
# value is valid, in _check_binding().
|
# value is valid, in _check_binding().
|
||||||
#
|
#
|
||||||
|
@ -1438,7 +1441,8 @@ class Property:
|
||||||
- For 'type: int/array/string/string-array', 'val' is what you'd expect
|
- For 'type: int/array/string/string-array', 'val' is what you'd expect
|
||||||
(a Python integer or string, or a list of them)
|
(a Python integer or string, or a list of them)
|
||||||
|
|
||||||
- For 'type: phandle', 'val' is the pointed-to Node instance
|
- For 'type: phandle' and 'type: path', 'val' is the pointed-to Node
|
||||||
|
instance
|
||||||
|
|
||||||
- For 'type: phandles', 'val' is a list of the pointed-to Node
|
- For 'type: phandles', 'val' is a list of the pointed-to Node
|
||||||
instances
|
instances
|
||||||
|
@ -1651,7 +1655,7 @@ def _check_prop_type_and_default(prop_name, prop_type, required, default,
|
||||||
|
|
||||||
ok_types = {"boolean", "int", "array", "uint8-array", "string",
|
ok_types = {"boolean", "int", "array", "uint8-array", "string",
|
||||||
"string-array", "phandle", "phandles", "phandle-array",
|
"string-array", "phandle", "phandles", "phandle-array",
|
||||||
"compound"}
|
"path", "compound"}
|
||||||
|
|
||||||
if prop_type not in ok_types:
|
if prop_type not in ok_types:
|
||||||
_err("'{}' in 'properties:' in {} has unknown type '{}', expected one "
|
_err("'{}' in 'properties:' in {} has unknown type '{}', expected one "
|
||||||
|
@ -1670,7 +1674,7 @@ def _check_prop_type_and_default(prop_name, prop_type, required, default,
|
||||||
return
|
return
|
||||||
|
|
||||||
if prop_type in {"boolean", "compound", "phandle", "phandles",
|
if prop_type in {"boolean", "compound", "phandle", "phandles",
|
||||||
"phandle-array"}:
|
"phandle-array", "path"}:
|
||||||
_err("'default:' can't be combined with 'type: {}' for '{}' in "
|
_err("'default:' can't be combined with 'type: {}' for '{}' in "
|
||||||
"'properties:' in {}".format(prop_type, prop_name, binding_path))
|
"'properties:' in {}".format(prop_type, prop_name, binding_path))
|
||||||
|
|
||||||
|
|
|
@ -42,3 +42,6 @@ properties:
|
||||||
# too
|
# too
|
||||||
foo-gpios:
|
foo-gpios:
|
||||||
type: phandle-array
|
type: phandle-array
|
||||||
|
|
||||||
|
path:
|
||||||
|
type: path
|
||||||
|
|
|
@ -246,6 +246,7 @@
|
||||||
phandle-refs = < &{/props/ctrl-1} &{/props/ctrl-2} >;
|
phandle-refs = < &{/props/ctrl-1} &{/props/ctrl-2} >;
|
||||||
phandle-array-foos = < &{/props/ctrl-1} 1 &{/props/ctrl-2} 2 3 >;
|
phandle-array-foos = < &{/props/ctrl-1} 1 &{/props/ctrl-2} 2 3 >;
|
||||||
foo-gpios = < &{/props/ctrl-1} 1 >;
|
foo-gpios = < &{/props/ctrl-1} 1 >;
|
||||||
|
path = &{/props/ctrl-1};
|
||||||
|
|
||||||
ctrl-1 {
|
ctrl-1 {
|
||||||
compatible = "phandle-array-controller-1";
|
compatible = "phandle-array-controller-1";
|
||||||
|
|
|
@ -211,6 +211,9 @@ warning: "#cells:" in test-bindings/deprecated.yaml is deprecated and will be re
|
||||||
verify_streq(edt.get_node("/props").props["foo-gpios"],
|
verify_streq(edt.get_node("/props").props["foo-gpios"],
|
||||||
"<Property, name: foo-gpios, type: phandle-array, value: [<ControllerAndData, controller: <Node /props/ctrl-1 in 'test.dts', binding test-bindings/phandle-array-controller-1.yaml>, data: OrderedDict([('gpio-one', 1)])>]>")
|
"<Property, name: foo-gpios, type: phandle-array, value: [<ControllerAndData, controller: <Node /props/ctrl-1 in 'test.dts', binding test-bindings/phandle-array-controller-1.yaml>, data: OrderedDict([('gpio-one', 1)])>]>")
|
||||||
|
|
||||||
|
verify_streq(edt.get_node("/props").props["path"],
|
||||||
|
"<Property, name: path, type: path, value: <Node /props/ctrl-1 in 'test.dts', binding test-bindings/phandle-array-controller-1.yaml>>")
|
||||||
|
|
||||||
#
|
#
|
||||||
# Test <prefix>-map, via gpio-map (the most common case)
|
# Test <prefix>-map, via gpio-map (the most common case)
|
||||||
#
|
#
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue