aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRob Herring <robh@kernel.org>2016-03-04 09:56:58 -0500
committerRob Herring <robh@kernel.org>2016-03-29 14:29:22 -0400
commitb993734718c0106418e068f21c7be01afc12306c (patch)
tree8b098809bcc9edb85d0e76c52c1abebd8100440f
parentf55532a0c0b8bb6148f4e07853b876ef73bc69ca (diff)
scripts/dtc: Update to upstream version 53bf130b1cdd
Sync to upstream dtc commit 53bf130b1cdd ("libfdt: simplify fdt_node_check_compatible()"). This adds the following commits from upstream: 53bf130 libfdt: simplify fdt_node_check_compatible() c9d9121 Warn on node name unit-address presence/absence mismatch 2e53f9d Catch unsigned 32bit overflow when parsing flattened device tree offsets Signed-off-by: Rob Herring <robh@kernel.org>
-rw-r--r--scripts/dtc/checks.c26
-rw-r--r--scripts/dtc/flattree.c4
-rw-r--r--scripts/dtc/libfdt/fdt_ro.c6
-rw-r--r--scripts/dtc/version_gen.h2
4 files changed, 31 insertions, 7 deletions
diff --git a/scripts/dtc/checks.c b/scripts/dtc/checks.c
index 0c03ac9159c1..386f9563313f 100644
--- a/scripts/dtc/checks.c
+++ b/scripts/dtc/checks.c
@@ -294,6 +294,30 @@ static void check_node_name_format(struct check *c, struct node *dt,
294} 294}
295NODE_ERROR(node_name_format, NULL, &node_name_chars); 295NODE_ERROR(node_name_format, NULL, &node_name_chars);
296 296
297static void check_unit_address_vs_reg(struct check *c, struct node *dt,
298 struct node *node)
299{
300 const char *unitname = get_unitname(node);
301 struct property *prop = get_property(node, "reg");
302
303 if (!prop) {
304 prop = get_property(node, "ranges");
305 if (prop && !prop->val.len)
306 prop = NULL;
307 }
308
309 if (prop) {
310 if (!unitname[0])
311 FAIL(c, "Node %s has a reg or ranges property, but no unit name",
312 node->fullpath);
313 } else {
314 if (unitname[0])
315 FAIL(c, "Node %s has a unit name, but no reg property",
316 node->fullpath);
317 }
318}
319NODE_WARNING(unit_address_vs_reg, NULL);
320
297static void check_property_name_chars(struct check *c, struct node *dt, 321static void check_property_name_chars(struct check *c, struct node *dt,
298 struct node *node, struct property *prop) 322 struct node *node, struct property *prop)
299{ 323{
@@ -667,6 +691,8 @@ static struct check *check_table[] = {
667 691
668 &addr_size_cells, &reg_format, &ranges_format, 692 &addr_size_cells, &reg_format, &ranges_format,
669 693
694 &unit_address_vs_reg,
695
670 &avoid_default_addr_size, 696 &avoid_default_addr_size,
671 &obsolete_chosen_interrupt_controller, 697 &obsolete_chosen_interrupt_controller,
672 698
diff --git a/scripts/dtc/flattree.c b/scripts/dtc/flattree.c
index bd99fa2d33b8..ec14954f5810 100644
--- a/scripts/dtc/flattree.c
+++ b/scripts/dtc/flattree.c
@@ -889,7 +889,7 @@ struct boot_info *dt_from_blob(const char *fname)
889 889
890 if (version >= 3) { 890 if (version >= 3) {
891 uint32_t size_str = fdt32_to_cpu(fdt->size_dt_strings); 891 uint32_t size_str = fdt32_to_cpu(fdt->size_dt_strings);
892 if (off_str+size_str > totalsize) 892 if ((off_str+size_str < off_str) || (off_str+size_str > totalsize))
893 die("String table extends past total size\n"); 893 die("String table extends past total size\n");
894 inbuf_init(&strbuf, blob + off_str, blob + off_str + size_str); 894 inbuf_init(&strbuf, blob + off_str, blob + off_str + size_str);
895 } else { 895 } else {
@@ -898,7 +898,7 @@ struct boot_info *dt_from_blob(const char *fname)
898 898
899 if (version >= 17) { 899 if (version >= 17) {
900 size_dt = fdt32_to_cpu(fdt->size_dt_struct); 900 size_dt = fdt32_to_cpu(fdt->size_dt_struct);
901 if (off_dt+size_dt > totalsize) 901 if ((off_dt+size_dt < off_dt) || (off_dt+size_dt > totalsize))
902 die("Structure block extends past total size\n"); 902 die("Structure block extends past total size\n");
903 } 903 }
904 904
diff --git a/scripts/dtc/libfdt/fdt_ro.c b/scripts/dtc/libfdt/fdt_ro.c
index e5b313682007..50cce864283c 100644
--- a/scripts/dtc/libfdt/fdt_ro.c
+++ b/scripts/dtc/libfdt/fdt_ro.c
@@ -647,10 +647,8 @@ int fdt_node_check_compatible(const void *fdt, int nodeoffset,
647 prop = fdt_getprop(fdt, nodeoffset, "compatible", &len); 647 prop = fdt_getprop(fdt, nodeoffset, "compatible", &len);
648 if (!prop) 648 if (!prop)
649 return len; 649 return len;
650 if (fdt_stringlist_contains(prop, len, compatible)) 650
651 return 0; 651 return !fdt_stringlist_contains(prop, len, compatible);
652 else
653 return 1;
654} 652}
655 653
656int fdt_node_offset_by_compatible(const void *fdt, int startoffset, 654int fdt_node_offset_by_compatible(const void *fdt, int startoffset,
diff --git a/scripts/dtc/version_gen.h b/scripts/dtc/version_gen.h
index 11d93e6d8220..ad9b05ae698b 100644
--- a/scripts/dtc/version_gen.h
+++ b/scripts/dtc/version_gen.h
@@ -1 +1 @@
#define DTC_VERSION "DTC 1.4.1-gb06e55c8" #define DTC_VERSION "DTC 1.4.1-g53bf130b"