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);
154 static bool run_check(struct check *c, struct dt_info *dti)
156 struct node *dt = dti->dt;
169 error = error || run_check(prq, dti);
172 check_msg(c, dti, NULL, NULL, "Failed prerequisite '%s'",
180 check_nodes_props(c, dti, dt);
199 static inline void check_always_fail(struct check *c, struct dt_info *dti,
202 FAIL(c, dti, node, "always_fail check");
206 static void check_is_string(struct check *c, struct dt_info *dti,
217 FAIL_PROP(c, dti, node, prop, "property is not a string");
224 static void check_is_string_list(struct check *c, struct dt_info *dti,
241 FAIL_PROP(c, dti, node, prop, "property is not a string list");
253 static void check_is_cell(struct check *c, struct dt_info *dti,
264 FAIL_PROP(c, dti, node, prop, "property is not a single cell");
275 static void check_duplicate_node_names(struct check *c, struct dt_info *dti,
285 FAIL(c, dti, child2, "Duplicate node name");
289 static void check_duplicate_property_names(struct check *c, struct dt_info *dti,
299 FAIL_PROP(c, dti, node, prop, "Duplicate property name");
312 static void check_node_name_chars(struct check *c, struct dt_info *dti,
318 FAIL(c, dti, node, "Bad character '%c' in node name",
323 static void check_node_name_chars_strict(struct check *c, struct dt_info *dti,
329 FAIL(c, dti, node, "Character '%c' not recommended in node name",
334 static void check_node_name_format(struct check *c, struct dt_info *dti,
338 FAIL(c, dti, node, "multiple '@' characters in node name");
343 struct dt_info *dti,
350 FAIL(c, dti, node, "node name and property name conflict");
356 static void check_unit_address_vs_reg(struct check *c, struct dt_info *dti,
375 FAIL(c, dti, node, "node has a reg or ranges property, but no unit name");
378 FAIL(c, dti, node, "node has a unit name, but no reg or ranges property");
383 static void check_property_name_chars(struct check *c, struct dt_info *dti,
392 FAIL_PROP(c, dti, node, prop, "Bad character '%c' in property name",
399 struct dt_info *dti,
424 FAIL_PROP(c, dti, node, prop, "Character '%c' not recommended in property name",
437 static void check_duplicate_label(struct check *c, struct dt_info *dti,
441 struct node *dt = dti->dt;
458 FAIL(c, dti, node, "Duplicate label '%s' on " DESCLABEL_FMT
464 static void check_duplicate_label_node(struct check *c, struct dt_info *dti,
471 check_duplicate_label(c, dti, l->label, node, NULL, NULL);
477 check_duplicate_label(c, dti, l->label, node, prop, NULL);
480 check_duplicate_label(c, dti, m->ref, node, prop, m);
485 static cell_t check_phandle_prop(struct check *c, struct dt_info *dti,
488 struct node *root = dti->dt;
498 FAIL_PROP(c, dti, node, prop, "bad length (%d) %s property",
510 FAIL(c, dti, node, "%s is a reference to another node",
524 FAIL_PROP(c, dti, node, prop, "bad value (0x%x) in %s property",
532 static void check_explicit_phandles(struct check *c, struct dt_info *dti,
535 struct node *root = dti->dt;
542 phandle = check_phandle_prop(c, dti, node, "phandle");
544 linux_phandle = check_phandle_prop(c, dti, node, "linux,phandle");
551 FAIL(c, dti, node, "mismatching 'phandle' and 'linux,phandle'"
559 FAIL(c, dti, node, "duplicated phandle 0x%x (seen before at %s)",
568 static void check_name_properties(struct check *c, struct dt_info *dti,
584 FAIL(c, dti, node, "\"name\" property is incorrect (\"%s\" instead"
602 static void fixup_phandle_references(struct check *c, struct dt_info *dti,
605 struct node *dt = dti->dt;
618 if (!(dti->dtsflags & DTSF_PLUGIN))
619 FAIL(c, dti, node, "Reference to non-existent node or "
637 static void fixup_path_references(struct check *c, struct dt_info *dti,
640 struct node *dt = dti->dt;
653 FAIL(c, dti, node, "Reference to non-existent node or label \"%s\"\n",
668 static void fixup_omit_unused_nodes(struct check *c, struct dt_info *dti,
691 static void check_names_is_string_list(struct check *c, struct dt_info *dti,
701 check_is_string_list(c, dti, node);
706 static void check_alias_paths(struct check *c, struct dt_info *dti,
720 if (!prop->val.val || !get_node_by_path(dti->dt, prop->val.val)) {
721 FAIL_PROP(c, dti, node, prop, "aliases property is not a valid node (%s)",
726 FAIL(c, dti, node, "aliases property name must include only lowercase and '-'");
731 static void fixup_addr_size_cells(struct check *c, struct dt_info *dti,
755 static void check_reg_format(struct check *c, struct dt_info *dti,
766 FAIL(c, dti, node, "Root node has a \"reg\" property");
771 FAIL_PROP(c, dti, node, prop, "property is empty");
778 FAIL_PROP(c, dti, node, prop, "property has invalid length (%d bytes) "
784 static void check_ranges_format(struct check *c, struct dt_info *dti,
796 FAIL_PROP(c, dti, node, prop, "Root node has a \"%s\" property",
809 FAIL_PROP(c, dti, node, prop, "empty \"%s\" property but its "
814 FAIL_PROP(c, dti, node, prop, "empty \"%s\" property but its "
819 FAIL_PROP(c, dti, node, prop, "\"%s\" property has invalid length (%d bytes) "
832 static void check_pci_bridge(struct check *c, struct dt_info *dti, struct node *node)
845 FAIL(c, dti, node, "node name is not \"pci\" or \"pcie\"");
849 FAIL(c, dti, node, "missing ranges for PCI bridge (or not a bridge)");
852 FAIL(c, dti, node, "incorrect #address-cells for PCI bridge");
854 FAIL(c, dti, node, "incorrect #size-cells for PCI bridge");
861 FAIL_PROP(c, dti, node, prop, "value must be 2 cells");
866 FAIL_PROP(c, dti, node, prop, "1st cell must be less than or equal to 2nd cell");
868 FAIL_PROP(c, dti, node, prop, "maximum bus number must be less than 256");
873 static void check_pci_device_bus_num(struct check *c, struct dt_info *dti, struct node *node)
898 FAIL_PROP(c, dti, node, prop, "PCI bus number %d out of range, expected (%d - %d)",
903 static void check_pci_device_reg(struct check *c, struct dt_info *dti, struct node *node)
920 FAIL_PROP(c, dti, node, prop, "PCI reg config space address cells 2 and 3 must be 0");
927 FAIL_PROP(c, dti, node, prop, "PCI reg address is not configuration space");
929 FAIL_PROP(c, dti, node, prop, "PCI reg config space address register number must be 0");
941 FAIL(c, dti, node, "PCI unit address format error, expected \"%s\"",
967 static void check_simple_bus_bridge(struct check *c, struct dt_info *dti, struct node *node)
975 static void check_simple_bus_reg(struct check *c, struct dt_info *dti, struct node *node)
999 FAIL(c, dti, node, "missing or empty reg/ranges property");
1009 FAIL(c, dti, node, "simple-bus unit address format error, expected \"%s\"",
1018 static void check_i2c_bus_bridge(struct check *c, struct dt_info *dti, struct node *node)
1037 FAIL(c, dti, node, "incorrect #address-cells for I2C bus");
1039 FAIL(c, dti, node, "incorrect #size-cells for I2C bus");
1047 static void check_i2c_bus_reg(struct check *c, struct dt_info *dti, struct node *node)
1064 FAIL(c, dti, node, "missing or empty reg property");
1073 FAIL(c, dti, node, "I2C bus unit address format error, expected \"%s\"",
1082 FAIL_PROP(c, dti, node, prop, "I2C address must be less than 10-bits, got \"0x%x\"",
1085 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",
1095 static void check_spi_bus_bridge(struct check *c, struct dt_info *dti, struct node *node)
1121 FAIL(c, dti, node, "node name for SPI buses should be 'spi'");
1129 FAIL(c, dti, node, "incorrect #address-cells for SPI bus");
1131 FAIL(c, dti, node, "incorrect #size-cells for SPI bus");
1136 static void check_spi_bus_reg(struct check *c, struct dt_info *dti, struct node *node)
1155 FAIL(c, dti, node, "missing or empty reg property");
1162 FAIL(c, dti, node, "SPI bus unit address format error, expected \"%s\"",
1167 static void check_unit_address_format(struct check *c, struct dt_info *dti,
1179 FAIL(c, dti, node, "unit name should not have leading \"0x\"");
1184 FAIL(c, dti, node, "unit name should not have leading 0s");
1192 static void check_avoid_default_addr_size(struct check *c, struct dt_info *dti,
1207 FAIL(c, dti, node, "Relying on default #address-cells value");
1210 FAIL(c, dti, node, "Relying on default #size-cells value");
1215 static void check_avoid_unnecessary_addr_size(struct check *c, struct dt_info *dti,
1235 FAIL(c, dti, node, "unnecessary #address-cells/#size-cells without \"ranges\" or child \"reg\" property");
1254 struct dt_info *dti,
1285 FAIL(c, dti, childb, "duplicate unit-address (also used in node %s)", childa->fullpath);
1290 static void check_unique_unit_address(struct check *c, struct dt_info *dti,
1293 check_unique_unit_address_common(c, dti, node, false);
1297 static void check_unique_unit_address_if_enabled(struct check *c, struct dt_info *dti,
1300 check_unique_unit_address_common(c, dti, node, true);
1306 struct dt_info *dti,
1309 struct node *dt = dti->dt;
1323 FAIL_PROP(c, dti, node, prop,
1329 static void check_chosen_node_is_root(struct check *c, struct dt_info *dti,
1335 if (node->parent != dti->dt)
1336 FAIL(c, dti, node, "chosen node must be at root node");
1340 static void check_chosen_node_bootargs(struct check *c, struct dt_info *dti,
1353 check_is_string(c, dti, node);
1357 static void check_chosen_node_stdout_path(struct check *c, struct dt_info *dti,
1370 FAIL_PROP(c, dti, node, prop, "Use 'stdout-path' instead");
1374 check_is_string(c, dti, node);
1385 struct dt_info *dti,
1390 struct node *root = dti->dt;
1394 FAIL_PROP(c, dti, node, prop,
1413 if (dti->dtsflags & DTSF_PLUGIN)
1428 FAIL_PROP(c, dti, node, prop,
1435 FAIL_PROP(c, dti, node, prop,
1447 FAIL(c, dti, node, "Missing property '%s' in node %s or bad phandle (referred from %s[%d])",
1456 FAIL_PROP(c, dti, node, prop,
1465 struct dt_info *dti,
1475 check_property_phandle_args(c, dti, node, prop, provider);
1515 struct dt_info *dti,
1533 check_property_phandle_args(c, dti, node, prop, &provider);
1540 struct dt_info *dti,
1552 FAIL_PROP(c, dti, node, prop,
1575 struct dt_info *dti,
1583 FAIL(c, dti, node,
1589 FAIL(c, dti, node,
1597 struct dt_info *dti,
1600 struct node *root = dti->dt;
1609 FAIL(c, dti, node,
1618 FAIL_PROP(c, dti, node, prop,
1623 FAIL_PROP(c, dti, node, irq_map_prop,
1637 FAIL_PROP(c, dti, node, irq_map_prop,
1647 if (!(dti->dtsflags & DTSF_PLUGIN))
1648 FAIL_PROP(c, dti, node, irq_map_prop,
1656 FAIL_PROP(c, dti, node, irq_map_prop,
1666 FAIL(c, dti, node, "Missing property '#interrupt-cells' in node %s or bad phandle (referred from interrupt-map[%zu])",
1681 struct dt_info *dti,
1684 struct node *root = dti->dt;
1694 FAIL_PROP(c, dti, node, irq_prop, "size (%d) is invalid, expected multiple of %zu",
1709 if (dti->dtsflags & DTSF_PLUGIN)
1711 FAIL_PROP(c, dti, parent, prop, "Invalid phandle");
1717 FAIL_PROP(c, dti, parent, prop, "Bad phandle");
1721 FAIL(c, dti, irq_node,
1731 FAIL(c, dti, node, "Missing interrupt-parent");
1743 FAIL_PROP(c, dti, node, prop,
1758 static void check_graph_nodes(struct check *c, struct dt_info *dti,
1781 static void check_graph_child_address(struct check *c, struct dt_info *dti,
1801 FAIL(c, dti, node, "graph node has single child node '%s', #address-cells/#size-cells are not necessary",
1806 static void check_graph_reg(struct check *c, struct dt_info *dti,
1818 FAIL(c, dti, node, "graph node malformed 'reg' property");
1824 FAIL(c, dti, node, "graph node unit address error, expected \"%s\"",
1828 FAIL_PROP(c, dti, node, get_property(node, "#address-cells"),
1832 FAIL_PROP(c, dti, node, get_property(node, "#size-cells"),
1837 static void check_graph_port(struct check *c, struct dt_info *dti,
1844 FAIL(c, dti, node, "graph port node name should be 'port'");
1846 check_graph_reg(c, dti, node);
1850 static struct node *get_remote_endpoint(struct check *c, struct dt_info *dti,
1866 node = get_node_by_phandle(dti->dt, phandle);
1868 FAIL_PROP(c, dti, endpoint, prop, "graph phandle is not valid");
1873 static void check_graph_endpoint(struct check *c, struct dt_info *dti,
1882 FAIL(c, dti, node, "graph endpoint node name should be 'endpoint'");
1884 check_graph_reg(c, dti, node);
1886 remote_node = get_remote_endpoint(c, dti, node);
1890 if (get_remote_endpoint(c, dti, remote_node) != node)
1891 FAIL(c, dti, node, "graph connection to node '%s' is not bidirectional",
2048 void process_checks(bool force, struct dt_info *dti)
2057 error = error || run_check(c, dti);