Schema errors can cause make to exit before useful information is
printed. This leaves developers wondering what's wrong. It can be
overcome passing '-k' to make, but that's not an obvious solution.
There's 2 scenarios where this happens.
When using DT_SCHEMA_FILES to validate with a single schema, any error
in the schema results in processed-schema.yaml being empty causing a
make error. The result is the specific errors in the schema are never
shown because processed-schema.yaml is the first target built. Simply
making processed-schema.yaml last in extra-y ensures the full schema
validation with detailed error messages happen first.
The 2nd problem is while schema errors are ignored for
processed-schema.yaml, full validation of the schema still runs in
parallel and any schema validation errors will still stop the build when
running validation of dts files. The fix is to not add the schema
examples to extra-y in this case. This means 'dtbs_check' is no longer a
superset of 'dt_binding_check'. Update the documentation to make this
clear.
Rob Herring [Thu, 7 Nov 2019 02:19:59 +0000 (20:19 -0600)]
dt-bindings: example-schema: Standard unit should be microvolt not microvolts
Even the DT maintainer gets confused. The schema in dt-schema was wrong
too, so this was passing validation until trying to add some common
incorrect patterns to check.
Fixes: 58fbe999ff40 ("dt-bindings: example-schema: Add some additional examples and commentary") Signed-off-by: Rob Herring <[email protected]>
Now that we have the DT validation in place, let's convert the device tree
bindings for the Amlogic G12A DWC3 Glue Bindings over to a YAML schemas,
the AXG and GXL glue bindings will be converted later.
dt-bindings: net: davinci-mdio: convert bindings to json-schema
Now that we have the DT validation in place, let's convert the device tree
bindings for the TI SoC Davinci/OMAP/Keystone2 MDIO Controllerr over to a
YAML schemas.
Maxime Ripard [Fri, 1 Nov 2019 13:58:08 +0000 (14:58 +0100)]
dt-bindings: Remove FIXME in yaml bindings
Some binding that were introduced early on got a comment to enable
additionalProperties, but we couldn't due to the generic properties being
reported as errors.
The way we're dealing with this now is to use the draft-08's
unevaluatedProperties (even though the tools doesn't do anything with it
yet).
dt-bindings: arm: samsung: Drop syscon compatible from CHIPID binding
The "syscon" compatible string was introduced mainly to allow sharing
of the CHIPID IO region between multiple drivers. However, such sharing
can be also done without an additional compatible so remove "syscon".
Pavel Modilaynen [Fri, 12 Jul 2019 11:52:19 +0000 (13:52 +0200)]
dtc: Use pkg-config to locate libyaml
Using Makefile's wildcard with absolute path to detect
the presence of libyaml results in false-positive
detection when cross-compiling e.g. in yocto environment.
The latter results in build error:
| scripts/dtc/yamltree.o: In function `yaml_propval_int':
| yamltree.c: undefined reference to `yaml_sequence_start_event_initialize'
| yamltree.c: undefined reference to `yaml_emitter_emit'
| yamltree.c: undefined reference to `yaml_scalar_event_initialize'
...
Use pkg-config to locate libyaml to address this scenario.
dt-bindings: sram: Convert SRAM bindings to json-schema
Convert generic mmio-sram bindings to DT schema format using
json-schema. Require the address/size cells to be 1, not equal to root
node. This also fixes the check for clocks property to be in main root
node instead of children.
Rob Herring [Thu, 17 Oct 2019 16:25:38 +0000 (11:25 -0500)]
dt-bindings: example-schema: Add some additional examples and commentary
Add examples for properties with standard units, child nodes,
dependencies, and if/then schema. Also, make some minor updates based on
common questions and review issues.
Rob Herring [Tue, 15 Oct 2019 15:47:49 +0000 (10:47 -0500)]
dt: submitting-patches: Document requirements for DT schema
Update the DT submitting-patches.txt with additional requirements for DT
binding schemas. New binding documents should generally use the schema
format and have an explicit license.
Rob Herring [Tue, 15 Oct 2019 15:26:00 +0000 (10:26 -0500)]
dt: writing-schema: Add a note about tools PATH setup
Users without an existing python install may not have their PATH setup
for pip installed python programs already. Add a note about having the
DT validation programs in the PATH.
dt-bindings: arm: samsung: Update the CHIPID binding for ASV
This patch adds documentation of new optional "samsung,asv-bin"
property in the chipid device node and documents requirement of
"syscon" compatible string. These additions are needed to support
Exynos ASV (Adaptive Supply Voltage) feature.
Reviewed-by: Krzysztof Kozlowski <[email protected]> Signed-off-by: Sylwester Nawrocki <[email protected]>
[robh: drop 'select' which is no longer needed. Fix up example whitespace] Signed-off-by: Rob Herring <[email protected]>
Masahiro Yamada [Mon, 17 Jun 2019 16:21:23 +0000 (01:21 +0900)]
libfdt: reduce the number of headers included from libfdt_env.h
Currently, libfdt_env.h includes <linux/kernel.h> just for INT_MAX.
<linux/kernel.h> pulls in a lots of broat.
Thanks to commit 54d50897d544 ("linux/kernel.h: split *_MAX and *_MIN
macros into <linux/limits.h>"), <linux/kernel.h> can be replaced with
<linux/limits.h>.
of: reserved_mem: add missing of_node_put() for proper ref-counting
Commit d698a388146c ("of: reserved-memory: ignore disabled memory-region
nodes") added an early return in of_reserved_mem_device_init_by_idx(), but
didn't call of_node_put() on a device_node whose ref-count was incremented
in the call to of_parse_phandle() preceding the early exit.
Navid Emamdoost [Fri, 4 Oct 2019 18:58:43 +0000 (13:58 -0500)]
of: unittest: fix memory leak in unittest_data_add
In unittest_data_add, a copy buffer is created via kmemdup. This buffer
is leaked if of_fdt_unflatten_tree fails. The release for the
unittest_data buffer is added.
Fixes: b951f9dc7f25 ("Enabling OF selftest to run without machine's devicetree") Signed-off-by: Navid Emamdoost <[email protected]> Reviewed-by: Frank Rowand <[email protected]> Signed-off-by: Rob Herring <[email protected]>
Rob Herring [Tue, 24 Sep 2019 19:37:56 +0000 (14:37 -0500)]
dt-bindings: riscv: Fix CPU schema errors
Fix the errors in the RiscV CPU DT schema:
Documentation/devicetree/bindings/riscv/cpus.example.dt.yaml: cpu@0: 'timebase-frequency' is a required property
Documentation/devicetree/bindings/riscv/cpus.example.dt.yaml: cpu@1: 'timebase-frequency' is a required property
Documentation/devicetree/bindings/riscv/cpus.example.dt.yaml: cpu@0: compatible:0: 'riscv' is not one of ['sifive,rocket0', 'sifive,e5', 'sifive,e51', 'sifive,u54-mc', 'sifive,u54', 'sifive,u5']
Documentation/devicetree/bindings/riscv/cpus.example.dt.yaml: cpu@0: compatible: ['riscv'] is too short
Documentation/devicetree/bindings/riscv/cpus.example.dt.yaml: cpu@0: 'timebase-frequency' is a required property
The DT spec allows for 'timebase-frequency' to be in 'cpu' or 'cpus' node
and RiscV requires it in /cpus node, so make it disallowed in cpu
nodes.
Rob Herring [Fri, 20 Sep 2019 13:48:28 +0000 (08:48 -0500)]
dt-bindings: iommu: Convert Arm SMMU to DT schema
Convert the Arm SMMU binding to DT schema.
The existing binding doc doesn't cover the number of variations of
compatible properties found in .dts files. "qcom,msm8998-smmu-v2" was
also missing, so add it.
SoCFPGA Stratix10 has a single clock defined which doesn't match the
binding. This issue remains.
"companion" entry is present in "generic.txt" usb binding file. This commit
adds it also in generic-ehci yaml binding.
Signed-off-by: Alexandre Torgue <[email protected]>
[robh: restrict type to phandle instead of phandle-array] Signed-off-by: Rob Herring <[email protected]>
dt-bindings: pinctrl: stm32: Fix 'st, syscfg' description field
As there is only one item "st,syscfg" this commit moves phandle description
fields under "description" tag. It'll fix a validation issue seen during
stm32 DT check.
dt-bindings: rtc: s3c: Include generic dt-schema bindings
Include the generic rtc.yaml bindings in Samsung S3C RTC bindings. This
brings the requirement of proper node names and adds parsing of
additional properties.
dt-bindings: samsung: Indent examples with four spaces
Change the indentation of examples used in json-schema bindings from two
to four spaces as this makes the code easier to read and seems to be
preferred in other files.
dt-bindings: display: Convert stm32 display bindings to json-schema
Convert the STM32 display binding to DT schema format using json-schema.
Split the original bindings in two yaml files:
- one for display controller (ltdc)
- one for DSI controller
Signed-off-by: Benjamin Gaignard <[email protected]>
[robh: drop maxItems from phy-dsi-supply] Signed-off-by: Rob Herring <[email protected]>
Rob Herring [Fri, 11 Oct 2019 18:44:13 +0000 (13:44 -0500)]
dt-bindings: Clean-up regulator '-supply' schemas
Regulator '*-supply' properties are always a single phandle, so
'maxItems: 1' or a $ref is not necessary. All that's needed is either
'true' or an optional 'description'. Following this clean-up, the
meta-schema will enforce this pattern.
There's one case in tree with 'innolux,n156bge-l21' having 2 phandles.
This appears to be a mistake or abuse of simple-panel as it's 2 different
voltage rails connected to 'power-supply'.
Rob Herring [Thu, 12 Sep 2019 14:18:20 +0000 (15:18 +0100)]
checkpatch: Warn if DT bindings are not in schema format
DT bindings are moving to using a json-schema based schema format
instead of freeform text. Add a checkpatch.pl check to encourage using
the schema for new bindings. It's not yet a requirement, but is
progressively being required by some maintainers.
Rob Herring [Tue, 24 Sep 2019 19:37:56 +0000 (14:37 -0500)]
dt-bindings: riscv: Fix CPU schema errors
Fix the errors in the RiscV CPU DT schema:
Documentation/devicetree/bindings/riscv/cpus.example.dt.yaml: cpu@0: 'timebase-frequency' is a required property
Documentation/devicetree/bindings/riscv/cpus.example.dt.yaml: cpu@1: 'timebase-frequency' is a required property
Documentation/devicetree/bindings/riscv/cpus.example.dt.yaml: cpu@0: compatible:0: 'riscv' is not one of ['sifive,rocket0', 'sifive,e5', 'sifive,e51', 'sifive,u54-mc', 'sifive,u54', 'sifive,u5']
Documentation/devicetree/bindings/riscv/cpus.example.dt.yaml: cpu@0: compatible: ['riscv'] is too short
Documentation/devicetree/bindings/riscv/cpus.example.dt.yaml: cpu@0: 'timebase-frequency' is a required property
The DT spec allows for 'timebase-frequency' to be in 'cpu' or 'cpus' node
and RiscV requires it in /cpus node, so make it disallowed in cpu
nodes.
Simon Horman [Mon, 23 Sep 2019 12:14:04 +0000 (14:14 +0200)]
dt-bindings: rtc: rtc-sh: convert bindings to json-schema
Convert Real Time Clock for Renesas SH and ARM SoCs bindings documentation
to json-schema. Also name bindings documentation file according to the
compat string being documented.
Also correct syntax error in interrupts field in example.
dt-bindings: at24: convert the binding document to yaml
Convert the binding document for at24 EEPROMs from txt to yaml. The
compatible property uses a regex pattern to address all the possible
combinations of "vendor,model" strings.
Signed-off-by: Bartosz Golaszewski <[email protected]>
[robh: rework compatible schema, fix missing allOf for $ref, fix errors in example] Signed-off-by: Rob Herring <[email protected]>
[Bartosz: added comments explaining the compatible property] Signed-off-by: Bartosz Golaszewski <[email protected]> Signed-off-by: Rob Herring <[email protected]>
Robin Murphy [Wed, 3 Jul 2019 17:42:20 +0000 (18:42 +0100)]
of: Make of_dma_get_range() work on bus nodes
Since the "dma-ranges" property is only valid for a node representing a
bus, of_dma_get_range() currently assumes the node passed in is a leaf
representing a device, and starts the walk from its parent. In cases
like PCI host controllers on typical FDT systems, however, where the PCI
endpoints are probed dynamically the initial leaf node represents the
'bus' itself, and this logic means we fail to consider any "dma-ranges"
describing the host bridge itself. Rework the logic such that
of_dma_get_range() also works correctly starting from a bus node
containing "dma-ranges".
While this does mean "dma-ranges" could incorrectly be in a device leaf
node, there isn't really any way in this function to ensure that a leaf
node is or isn't a bus node.
Rob Herring [Thu, 5 Sep 2019 09:47:26 +0000 (10:47 +0100)]
of/address: Fix of_pci_range_parser_one translation of DMA addresses
of_pci_range_parser_one() has a bug when parsing dma-ranges. When it
translates the parent address (aka cpu address in the code), 'ranges' is
always being used. This happens to work because most users are just 1:1
translation.
Rob Herring [Wed, 4 Sep 2019 10:43:30 +0000 (11:43 +0100)]
of/address: Translate 'dma-ranges' for parent nodes missing 'dma-ranges'
'dma-ranges' frequently exists without parent nodes having 'dma-ranges'.
While this is an error for 'ranges', this is fine because DMA capable
devices always have a translatable DMA address. Also, with no
'dma-ranges' at all, the assumption is that DMA addresses are 1:1 with
no restrictions unless perhaps the device itself has implicit
restrictions.
The functions for parsing 'dma-ranges' ranges are buggy and fail to
handle several conditions. Add new tests for of_dma_get_range() and
for_each_of_pci_range().
With this test, we get 5 new failures which are fixed in subsequent
commits:
OF: translation of DMA address(0) to CPU address failed node(/testcase-data/address-tests/device@70000000)
FAIL of_unittest_dma_ranges_one():798 of_dma_get_range failed on node /testcase-data/address-tests/device@70000000 rc=-22
OF: translation of DMA address(10000000) to CPU address failed node(/testcase-data/address-tests/bus@80000000/device@1000)
FAIL of_unittest_dma_ranges_one():798 of_dma_get_range failed on node /testcase-data/address-tests/bus@80000000/device@1000 rc=-22
OF: translation of DMA address(0) to CPU address failed node(/testcase-data/address-tests/pci@90000000)
FAIL of_unittest_dma_ranges_one():798 of_dma_get_range failed on node /testcase-data/address-tests/pci@90000000 rc=-22
FAIL of_unittest_pci_dma_ranges():851 for_each_of_pci_range wrong CPU addr (d0000000) on node /testcase-data/address-tests/pci@90000000
FAIL of_unittest_pci_dma_ranges():861 for_each_of_pci_range wrong CPU addr (ffffffffffffffff) on node /testcase-data/address-tests/pci@90000000
Robin Murphy [Tue, 2 Jul 2019 17:42:39 +0000 (18:42 +0100)]
of: Factor out #{addr,size}-cells parsing
In some cases such as PCI host controllers, we may have a "parent bus"
which is an OF leaf node, but still need to correctly parse ranges from
the point of view of that bus. For that, factor out variants of the
"#addr-cells" and "#size-cells" parsers which do not assume they have a
device node and thus immediately traverse upwards before reading the
relevant property.
Robin Murphy [Wed, 3 Jul 2019 13:47:31 +0000 (14:47 +0100)]
of: address: Follow DMA parent for "dma-coherent"
Much like for address translation, when checking for DMA coherence we
should be sure to walk up the DMA hierarchy, rather than the MMIO one,
now that we can accommodate them being different.
Add of_get_next_dma_parent() helper which is similar to
__of_get_dma_parent(), but can be used in iterators and decrements the
ref count on the prior parent.
dt-bindings: watchdog: Add missing clocks requirement in Samsung SoC watchdog
The Samsung SoC watchdog driver always required providing a clock
(either through platform data or from DT). However when bindings were
added in commit 9487a9cc7140 ("watchdog: s3c2410: Add support for device
tree based probe"), they missed the requirement of clock.
Maxime Ripard [Wed, 2 Oct 2019 14:46:40 +0000 (16:46 +0200)]
dt-bindings: phy: lantiq: Fix Property Name
The binding has a typo where resets-names should read reset-names, which in
turn leads to a warning when the example is validated, since reset-names is
being used, and the binding prevent the usage of any property that isn't
described.
Fixes: 088e88be5a38 ("dt-bindings: phy: add binding for the Lantiq VRX200 and ARX300 PCIe PHYs") Signed-off-by: Maxime Ripard <[email protected]> Signed-off-by: Rob Herring <[email protected]>
Maxime Ripard [Wed, 2 Oct 2019 14:45:42 +0000 (16:45 +0200)]
dt-bindings: iio: ad7192: Fix DTC warning in the example
The example contains an SPI bus and device, but doesn't have the
appropriate size and address cells size.
This creates a DTC warning when the example is compiled since the default
ones will not match what the device uses. Let's add them to remove that
warning.
Fixes: f7356e47032c ("dt-bindings: iio: adc: ad7192: Add binding documentation for AD7192") Signed-off-by: Maxime Ripard <[email protected]> Signed-off-by: Rob Herring <[email protected]>
The AD7192 binding describes two regulator properties, avdd-supply and
dvdd-supply, but describes it as a constant string that must be avdd and
dvdd. This is wrong since a *-supply property is actually a phandle, and
results in warnings when the example is validated (or any device tree using
that device, for that matter).
Let's remove that requirement.
Fixes: f7356e47032c ("dt-bindings: iio: adc: ad7192: Add binding documentation for AD7192") Signed-off-by: Maxime Ripard <[email protected]> Signed-off-by: Rob Herring <[email protected]>