Lines Matching refs:dti
29 typedef void (*check_fn)(struct check *c, struct dt_info *dti, struct node *node);
61 static inline void PRINTF(5, 6) check_msg(struct check *c, struct dt_info *dti,
83 } else if (streq(dti->outname, "-")) {
86 xasprintf(&str, "%s", dti->outname);
119 #define FAIL(c, dti, node, ...) \
123 check_msg((c), dti, node, NULL, __VA_ARGS__); \
126 #define FAIL_PROP(c, dti, node, prop, ...) \
130 check_msg((c), dti, node, prop, __VA_ARGS__); \
134 static void check_nodes_props(struct check *c, struct dt_info *dti, struct node *node)
140 c->fn(c, dti, node);
143 check_nodes_props(c, dti, child);
146 static bool run_check(struct check *c, struct dt_info *dti)
148 struct node *dt = dti->dt;
161 error = error || run_check(prq, dti);
164 check_msg(c, dti, NULL, NULL, "Failed prerequisite '%s'",
172 check_nodes_props(c, dti, dt);
191 static inline void check_always_fail(struct check *c, struct dt_info *dti,
194 FAIL(c, dti, node, "always_fail check");
198 static void check_is_string(struct check *c, struct dt_info *dti,
209 FAIL_PROP(c, dti, node, prop, "property is not a string");
216 static void check_is_string_list(struct check *c, struct dt_info *dti,
233 FAIL_PROP(c, dti, node, prop, "property is not a string list");
245 static void check_is_cell(struct check *c, struct dt_info *dti,
256 FAIL_PROP(c, dti, node, prop, "property is not a single cell");
267 static void check_duplicate_node_names(struct check *c, struct dt_info *dti,
277 FAIL(c, dti, child2, "Duplicate node name");
281 static void check_duplicate_property_names(struct check *c, struct dt_info *dti,
291 FAIL_PROP(c, dti, node, prop, "Duplicate property name");
303 static void check_node_name_chars(struct check *c, struct dt_info *dti,
309 FAIL(c, dti, node, "Bad character '%c' in node name",
314 static void check_node_name_chars_strict(struct check *c, struct dt_info *dti,
320 FAIL(c, dti, node, "Character '%c' not recommended in node name",
325 static void check_node_name_format(struct check *c, struct dt_info *dti,
329 FAIL(c, dti, node, "multiple '@' characters in node name");
333 static void check_unit_address_vs_reg(struct check *c, struct dt_info *dti,
352 FAIL(c, dti, node, "node has a reg or ranges property, but no unit name");
355 FAIL(c, dti, node, "node has a unit name, but no reg or ranges property");
360 static void check_property_name_chars(struct check *c, struct dt_info *dti,
369 FAIL_PROP(c, dti, node, prop, "Bad character '%c' in property name",
376 struct dt_info *dti,
401 FAIL_PROP(c, dti, node, prop, "Character '%c' not recommended in property name",
414 static void check_duplicate_label(struct check *c, struct dt_info *dti,
418 struct node *dt = dti->dt;
435 FAIL(c, dti, node, "Duplicate label '%s' on " DESCLABEL_FMT
441 static void check_duplicate_label_node(struct check *c, struct dt_info *dti,
448 check_duplicate_label(c, dti, l->label, node, NULL, NULL);
454 check_duplicate_label(c, dti, l->label, node, prop, NULL);
457 check_duplicate_label(c, dti, m->ref, node, prop, m);
462 static cell_t check_phandle_prop(struct check *c, struct dt_info *dti,
465 struct node *root = dti->dt;
475 FAIL_PROP(c, dti, node, prop, "bad length (%d) %s property",
487 FAIL(c, dti, node, "%s is a reference to another node",
501 FAIL_PROP(c, dti, node, prop, "bad value (0x%x) in %s property",
509 static void check_explicit_phandles(struct check *c, struct dt_info *dti,
512 struct node *root = dti->dt;
519 phandle = check_phandle_prop(c, dti, node, "phandle");
521 linux_phandle = check_phandle_prop(c, dti, node, "linux,phandle");
528 FAIL(c, dti, node, "mismatching 'phandle' and 'linux,phandle'"
536 FAIL(c, dti, node, "duplicated phandle 0x%x (seen before at %s)",
545 static void check_name_properties(struct check *c, struct dt_info *dti,
561 FAIL(c, dti, node, "\"name\" property is incorrect (\"%s\" instead"
579 static void fixup_phandle_references(struct check *c, struct dt_info *dti,
582 struct node *dt = dti->dt;
595 if (!(dti->dtsflags & DTSF_PLUGIN))
596 FAIL(c, dti, node, "Reference to non-existent node or "
614 static void fixup_path_references(struct check *c, struct dt_info *dti,
617 struct node *dt = dti->dt;
630 FAIL(c, dti, node, "Reference to non-existent node or label \"%s\"\n",
645 static void fixup_omit_unused_nodes(struct check *c, struct dt_info *dti,
669 static void check_names_is_string_list(struct check *c, struct dt_info *dti,
680 check_is_string_list(c, dti, node);
685 static void check_alias_paths(struct check *c, struct dt_info *dti,
699 if (!prop->val.val || !get_node_by_path(dti->dt, prop->val.val)) {
700 FAIL_PROP(c, dti, node, prop, "aliases property is not a valid node (%s)",
705 FAIL(c, dti, node, "aliases property name must include only lowercase and '-'");
710 static void fixup_addr_size_cells(struct check *c, struct dt_info *dti,
734 static void check_reg_format(struct check *c, struct dt_info *dti,
745 FAIL(c, dti, node, "Root node has a \"reg\" property");
750 FAIL_PROP(c, dti, node, prop, "property is empty");
757 FAIL_PROP(c, dti, node, prop, "property has invalid length (%d bytes) "
763 static void check_ranges_format(struct check *c, struct dt_info *dti,
775 FAIL_PROP(c, dti, node, prop, "Root node has a \"%s\" property",
788 FAIL_PROP(c, dti, node, prop, "empty \"%s\" property but its "
793 FAIL_PROP(c, dti, node, prop, "empty \"%s\" property but its "
798 FAIL_PROP(c, dti, node, prop, "\"%s\" property has invalid length (%d bytes) "
811 static void check_pci_bridge(struct check *c, struct dt_info *dti, struct node *node)
824 FAIL(c, dti, node, "node name is not \"pci\" or \"pcie\"");
828 FAIL(c, dti, node, "missing ranges for PCI bridge (or not a bridge)");
831 FAIL(c, dti, node, "incorrect #address-cells for PCI bridge");
833 FAIL(c, dti, node, "incorrect #size-cells for PCI bridge");
840 FAIL_PROP(c, dti, node, prop, "value must be 2 cells");
845 FAIL_PROP(c, dti, node, prop, "1st cell must be less than or equal to 2nd cell");
847 FAIL_PROP(c, dti, node, prop, "maximum bus number must be less than 256");
852 static void check_pci_device_bus_num(struct check *c, struct dt_info *dti, struct node *node)
877 FAIL_PROP(c, dti, node, prop, "PCI bus number %d out of range, expected (%d - %d)",
882 static void check_pci_device_reg(struct check *c, struct dt_info *dti, struct node *node)
899 FAIL_PROP(c, dti, node, prop, "PCI reg config space address cells 2 and 3 must be 0");
906 FAIL_PROP(c, dti, node, prop, "PCI reg address is not configuration space");
908 FAIL_PROP(c, dti, node, prop, "PCI reg config space address register number must be 0");
920 FAIL(c, dti, node, "PCI unit address format error, expected \"%s\"",
946 static void check_simple_bus_bridge(struct check *c, struct dt_info *dti, struct node *node)
954 static void check_simple_bus_reg(struct check *c, struct dt_info *dti, struct node *node)
978 FAIL(c, dti, node, "missing or empty reg/ranges property");
988 FAIL(c, dti, node, "simple-bus unit address format error, expected \"%s\"",
997 static void check_i2c_bus_bridge(struct check *c, struct dt_info *dti, struct node *node)
1016 FAIL(c, dti, node, "incorrect #address-cells for I2C bus");
1018 FAIL(c, dti, node, "incorrect #size-cells for I2C bus");
1026 static void check_i2c_bus_reg(struct check *c, struct dt_info *dti, struct node *node)
1043 FAIL(c, dti, node, "missing or empty reg property");
1052 FAIL(c, dti, node, "I2C bus unit address format error, expected \"%s\"",
1061 FAIL_PROP(c, dti, node, prop, "I2C address must be less than 10-bits, got \"0x%x\"",
1064 FAIL_PROP(c, dti, node, prop, "I2C address must be less than 7-bits, got \"0x%x\". Set I2C_TEN_BIT_ADDRESS for 10 bit addresses or fix the property",
1074 static void check_spi_bus_bridge(struct check *c, struct dt_info *dti, struct node *node)
1100 FAIL(c, dti, node, "node name for SPI buses should be 'spi'");
1108 FAIL(c, dti, node, "incorrect #address-cells for SPI bus");
1110 FAIL(c, dti, node, "incorrect #size-cells for SPI bus");
1115 static void check_spi_bus_reg(struct check *c, struct dt_info *dti, struct node *node)
1134 FAIL(c, dti, node, "missing or empty reg property");
1141 FAIL(c, dti, node, "SPI bus unit address format error, expected \"%s\"",
1146 static void check_unit_address_format(struct check *c, struct dt_info *dti,
1158 FAIL(c, dti, node, "unit name should not have leading \"0x\"");
1163 FAIL(c, dti, node, "unit name should not have leading 0s");
1171 static void check_avoid_default_addr_size(struct check *c, struct dt_info *dti,
1186 FAIL(c, dti, node, "Relying on default #address-cells value");
1189 FAIL(c, dti, node, "Relying on default #size-cells value");
1194 static void check_avoid_unnecessary_addr_size(struct check *c, struct dt_info *dti,
1214 FAIL(c, dti, node, "unnecessary #address-cells/#size-cells without \"ranges\" or child \"reg\" property");
1233 struct dt_info *dti,
1264 FAIL(c, dti, childb, "duplicate unit-address (also used in node %s)", childa->fullpath);
1269 static void check_unique_unit_address(struct check *c, struct dt_info *dti,
1272 check_unique_unit_address_common(c, dti, node, false);
1276 static void check_unique_unit_address_if_enabled(struct check *c, struct dt_info *dti,
1279 check_unique_unit_address_common(c, dti, node, true);
1285 struct dt_info *dti,
1288 struct node *dt = dti->dt;
1302 FAIL_PROP(c, dti, node, prop,
1308 static void check_chosen_node_is_root(struct check *c, struct dt_info *dti,
1314 if (node->parent != dti->dt)
1315 FAIL(c, dti, node, "chosen node must be at root node");
1319 static void check_chosen_node_bootargs(struct check *c, struct dt_info *dti,
1332 check_is_string(c, dti, node);
1336 static void check_chosen_node_stdout_path(struct check *c, struct dt_info *dti,
1349 FAIL_PROP(c, dti, node, prop, "Use 'stdout-path' instead");
1353 check_is_string(c, dti, node);
1364 struct dt_info *dti,
1369 struct node *root = dti->dt;
1373 FAIL_PROP(c, dti, node, prop,
1391 if (dti->dtsflags & DTSF_PLUGIN)
1406 FAIL_PROP(c, dti, node, prop,
1413 FAIL_PROP(c, dti, node, prop,
1425 FAIL(c, dti, node, "Missing property '%s' in node %s or bad phandle (referred from %s[%d])",
1433 FAIL_PROP(c, dti, node, prop,
1441 struct dt_info *dti,
1451 check_property_phandle_args(c, dti, node, prop, provider);
1497 struct dt_info *dti,
1515 check_property_phandle_args(c, dti, node, prop, &provider);
1522 struct dt_info *dti,
1537 FAIL_PROP(c, dti, node, prop,
1560 struct dt_info *dti,
1570 FAIL(c, dti, node,
1575 FAIL(c, dti, node,
1581 struct dt_info *dti,
1584 struct node *root = dti->dt;
1594 FAIL_PROP(c, dti, node, irq_prop, "size (%d) is invalid, expected multiple of %zu",
1609 if (dti->dtsflags & DTSF_PLUGIN)
1611 FAIL_PROP(c, dti, parent, prop, "Invalid phandle");
1617 FAIL_PROP(c, dti, parent, prop, "Bad phandle");
1621 FAIL(c, dti, irq_node,
1631 FAIL(c, dti, node, "Missing interrupt-parent");
1643 FAIL_PROP(c, dti, node, prop,
1658 static void check_graph_nodes(struct check *c, struct dt_info *dti,
1681 static void check_graph_child_address(struct check *c, struct dt_info *dti,
1701 FAIL(c, dti, node, "graph node has single child node '%s', #address-cells/#size-cells are not necessary",
1706 static void check_graph_reg(struct check *c, struct dt_info *dti,
1718 FAIL(c, dti, node, "graph node malformed 'reg' property");
1724 FAIL(c, dti, node, "graph node unit address error, expected \"%s\"",
1728 FAIL_PROP(c, dti, node, get_property(node, "#address-cells"),
1732 FAIL_PROP(c, dti, node, get_property(node, "#size-cells"),
1737 static void check_graph_port(struct check *c, struct dt_info *dti,
1744 FAIL(c, dti, node, "graph port node name should be 'port'");
1746 check_graph_reg(c, dti, node);
1750 static struct node *get_remote_endpoint(struct check *c, struct dt_info *dti,
1766 node = get_node_by_phandle(dti->dt, phandle);
1768 FAIL_PROP(c, dti, endpoint, prop, "graph phandle is not valid");
1773 static void check_graph_endpoint(struct check *c, struct dt_info *dti,
1782 FAIL(c, dti, node, "graph endpoint node name should be 'endpoint'");
1784 check_graph_reg(c, dti, node);
1786 remote_node = get_remote_endpoint(c, dti, node);
1790 if (get_remote_endpoint(c, dti, remote_node) != node)
1791 FAIL(c, dti, node, "graph connection to node '%s' is not bidirectional",
1931 void process_checks(bool force, struct dt_info *dti)
1940 error = error || run_check(c, dti);