diff options
author | Rob Herring <robh@kernel.org> | 2017-12-12 16:46:27 -0600 |
---|---|---|
committer | David Gibson <david@gibson.dropbear.id.au> | 2017-12-13 21:03:29 +1100 |
commit | d0c44ebe3f4265dab3c9797eda1dacc569a1e953 (patch) | |
tree | bd571776355c889d4b4d00d19e3d81213cfff4fe | |
parent | 18a3d84bb802d3281d8df91a973dce271f5523fb (diff) | |
download | dtc-d0c44ebe3f4265dab3c9797eda1dacc569a1e953.zip dtc-d0c44ebe3f4265dab3c9797eda1dacc569a1e953.tar.gz dtc-d0c44ebe3f4265dab3c9797eda1dacc569a1e953.tar.bz2 |
checks: check for #{size,address}-cells without child nodes
Add a check for unnecessary "#{size,address}-cells" when there's neither
a 'ranges' property nor child nodes with a 'reg' property.
An exception may be an overlay that adds nodes, but this case would need
"#{size,address}-cells" in the overlay to properly compile already.
Signed-off-by: Rob Herring <robh@kernel.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
-rw-r--r-- | checks.c | 26 |
1 files changed, 26 insertions, 0 deletions
@@ -981,6 +981,31 @@ static void check_avoid_default_addr_size(struct check *c, struct dt_info *dti, WARNING(avoid_default_addr_size, check_avoid_default_addr_size, NULL, &addr_size_cells); +static void check_avoid_unnecessary_addr_size(struct check *c, struct dt_info *dti, + struct node *node) +{ + struct property *prop; + struct node *child; + bool has_reg = false; + + if (!node->parent || node->addr_cells < 0 || node->size_cells < 0) + return; + + if (get_property(node, "ranges") || !node->children) + return; + + for_each_child(node, child) { + prop = get_property(child, "reg"); + if (prop) + has_reg = true; + } + + if (!has_reg) + FAIL(c, dti, "unnecessary #address-cells/#size-cells without \"ranges\" or child \"reg\" property in %s", + node->fullpath); +} +WARNING(avoid_unnecessary_addr_size, check_avoid_unnecessary_addr_size, NULL, &avoid_default_addr_size); + static void check_obsolete_chosen_interrupt_controller(struct check *c, struct dt_info *dti, struct node *node) @@ -1305,6 +1330,7 @@ static struct check *check_table[] = { &simple_bus_reg, &avoid_default_addr_size, + &avoid_unnecessary_addr_size, &obsolete_chosen_interrupt_controller, &clocks_property, |