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, in check_msg() argument
83 } else if (streq(dti->outname, "-")) { in check_msg()
86 xasprintf(&str, "%s", dti->outname); in check_msg()
119 #define FAIL(c, dti, node, ...) \ argument
123 check_msg((c), dti, node, NULL, __VA_ARGS__); \
126 #define FAIL_PROP(c, dti, node, prop, ...) \ argument
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) in check_nodes_props() argument
140 c->fn(c, dti, node); in check_nodes_props()
143 check_nodes_props(c, dti, child); in check_nodes_props()
154 static bool run_check(struct check *c, struct dt_info *dti) in run_check() argument
156 struct node *dt = dti->dt; in run_check()
169 error = error || run_check(prq, dti); in run_check()
172 check_msg(c, dti, NULL, NULL, "Failed prerequisite '%s'", in run_check()
180 check_nodes_props(c, dti, dt); in run_check()
199 static inline void check_always_fail(struct check *c, struct dt_info *dti, in check_always_fail() argument
202 FAIL(c, dti, node, "always_fail check"); in check_always_fail()
206 static void check_is_string(struct check *c, struct dt_info *dti, in check_is_string() argument
217 FAIL_PROP(c, dti, node, prop, "property is not a string"); in check_is_string()
224 static void check_is_string_list(struct check *c, struct dt_info *dti, in check_is_string_list() argument
241 FAIL_PROP(c, dti, node, prop, "property is not a string list"); in check_is_string_list()
253 static void check_is_cell(struct check *c, struct dt_info *dti, in check_is_cell() argument
264 FAIL_PROP(c, dti, node, prop, "property is not a single cell"); in check_is_cell()
275 static void check_duplicate_node_names(struct check *c, struct dt_info *dti, in check_duplicate_node_names() argument
285 FAIL(c, dti, child2, "Duplicate node name"); in check_duplicate_node_names()
289 static void check_duplicate_property_names(struct check *c, struct dt_info *dti, in check_duplicate_property_names() argument
299 FAIL_PROP(c, dti, node, prop, "Duplicate property name"); in check_duplicate_property_names()
312 static void check_node_name_chars(struct check *c, struct dt_info *dti, in check_node_name_chars() argument
318 FAIL(c, dti, node, "Bad character '%c' in node name", in check_node_name_chars()
323 static void check_node_name_chars_strict(struct check *c, struct dt_info *dti, in check_node_name_chars_strict() argument
329 FAIL(c, dti, node, "Character '%c' not recommended in node name", in check_node_name_chars_strict()
334 static void check_node_name_format(struct check *c, struct dt_info *dti, in check_node_name_format() argument
338 FAIL(c, dti, node, "multiple '@' characters in node name"); in check_node_name_format()
343 struct dt_info *dti, in check_node_name_vs_property_name() argument
350 FAIL(c, dti, node, "node name and property name conflict"); in check_node_name_vs_property_name()
356 static void check_unit_address_vs_reg(struct check *c, struct dt_info *dti, in check_unit_address_vs_reg() argument
375 FAIL(c, dti, node, "node has a reg or ranges property, but no unit name"); in check_unit_address_vs_reg()
378 FAIL(c, dti, node, "node has a unit name, but no reg or ranges property"); in check_unit_address_vs_reg()
383 static void check_property_name_chars(struct check *c, struct dt_info *dti, in check_property_name_chars() argument
392 FAIL_PROP(c, dti, node, prop, "Bad character '%c' in property name", in check_property_name_chars()
399 struct dt_info *dti, in check_property_name_chars_strict() argument
424 FAIL_PROP(c, dti, node, prop, "Character '%c' not recommended in property name", in check_property_name_chars_strict()
437 static void check_duplicate_label(struct check *c, struct dt_info *dti, in check_duplicate_label() argument
441 struct node *dt = dti->dt; in check_duplicate_label()
458 FAIL(c, dti, node, "Duplicate label '%s' on " DESCLABEL_FMT in check_duplicate_label()
464 static void check_duplicate_label_node(struct check *c, struct dt_info *dti, in check_duplicate_label_node() argument
471 check_duplicate_label(c, dti, l->label, node, NULL, NULL); in check_duplicate_label_node()
477 check_duplicate_label(c, dti, l->label, node, prop, NULL); in check_duplicate_label_node()
480 check_duplicate_label(c, dti, m->ref, node, prop, m); in check_duplicate_label_node()
485 static cell_t check_phandle_prop(struct check *c, struct dt_info *dti, in check_phandle_prop() argument
488 struct node *root = dti->dt; in check_phandle_prop()
498 FAIL_PROP(c, dti, node, prop, "bad length (%d) %s property", in check_phandle_prop()
510 FAIL(c, dti, node, "%s is a reference to another node", in check_phandle_prop()
524 FAIL_PROP(c, dti, node, prop, "bad value (0x%x) in %s property", in check_phandle_prop()
532 static void check_explicit_phandles(struct check *c, struct dt_info *dti, in check_explicit_phandles() argument
535 struct node *root = dti->dt; in check_explicit_phandles()
542 phandle = check_phandle_prop(c, dti, node, "phandle"); in check_explicit_phandles()
544 linux_phandle = check_phandle_prop(c, dti, node, "linux,phandle"); in check_explicit_phandles()
551 FAIL(c, dti, node, "mismatching 'phandle' and 'linux,phandle'" in check_explicit_phandles()
559 FAIL(c, dti, node, "duplicated phandle 0x%x (seen before at %s)", in check_explicit_phandles()
568 static void check_name_properties(struct check *c, struct dt_info *dti, in check_name_properties() argument
584 FAIL(c, dti, node, "\"name\" property is incorrect (\"%s\" instead" in check_name_properties()
602 static void fixup_phandle_references(struct check *c, struct dt_info *dti, in fixup_phandle_references() argument
605 struct node *dt = dti->dt; in fixup_phandle_references()
618 if (!(dti->dtsflags & DTSF_PLUGIN)) in fixup_phandle_references()
619 FAIL(c, dti, node, "Reference to non-existent node or " in fixup_phandle_references()
637 static void fixup_path_references(struct check *c, struct dt_info *dti, in fixup_path_references() argument
640 struct node *dt = dti->dt; in fixup_path_references()
653 FAIL(c, dti, node, "Reference to non-existent node or label \"%s\"\n", in fixup_path_references()
668 static void fixup_omit_unused_nodes(struct check *c, struct dt_info *dti, in fixup_omit_unused_nodes() argument
691 static void check_names_is_string_list(struct check *c, struct dt_info *dti, in check_names_is_string_list() argument
701 check_is_string_list(c, dti, node); in check_names_is_string_list()
706 static void check_alias_paths(struct check *c, struct dt_info *dti, in check_alias_paths() argument
720 if (!prop->val.val || !get_node_by_path(dti->dt, prop->val.val)) { in check_alias_paths()
721 FAIL_PROP(c, dti, node, prop, "aliases property is not a valid node (%s)", in check_alias_paths()
726 FAIL(c, dti, node, "aliases property name must include only lowercase and '-'"); in check_alias_paths()
731 static void fixup_addr_size_cells(struct check *c, struct dt_info *dti, in fixup_addr_size_cells() argument
755 static void check_reg_format(struct check *c, struct dt_info *dti, in check_reg_format() argument
766 FAIL(c, dti, node, "Root node has a \"reg\" property"); in check_reg_format()
771 FAIL_PROP(c, dti, node, prop, "property is empty"); in check_reg_format()
778 FAIL_PROP(c, dti, node, prop, "property has invalid length (%d bytes) " in check_reg_format()
784 static void check_ranges_format(struct check *c, struct dt_info *dti, in check_ranges_format() argument
796 FAIL_PROP(c, dti, node, prop, "Root node has a \"%s\" property", in check_ranges_format()
809 FAIL_PROP(c, dti, node, prop, "empty \"%s\" property but its " in check_ranges_format()
814 FAIL_PROP(c, dti, node, prop, "empty \"%s\" property but its " in check_ranges_format()
819 FAIL_PROP(c, dti, node, prop, "\"%s\" property has invalid length (%d bytes) " in check_ranges_format()
832 static void check_pci_bridge(struct check *c, struct dt_info *dti, struct node *node) in check_pci_bridge() argument
845 FAIL(c, dti, node, "node name is not \"pci\" or \"pcie\""); in check_pci_bridge()
849 FAIL(c, dti, node, "missing ranges for PCI bridge (or not a bridge)"); in check_pci_bridge()
852 FAIL(c, dti, node, "incorrect #address-cells for PCI bridge"); in check_pci_bridge()
854 FAIL(c, dti, node, "incorrect #size-cells for PCI bridge"); in check_pci_bridge()
861 FAIL_PROP(c, dti, node, prop, "value must be 2 cells"); in check_pci_bridge()
866 FAIL_PROP(c, dti, node, prop, "1st cell must be less than or equal to 2nd cell"); in check_pci_bridge()
868 FAIL_PROP(c, dti, node, prop, "maximum bus number must be less than 256"); in check_pci_bridge()
873 static void check_pci_device_bus_num(struct check *c, struct dt_info *dti, struct node *node) in check_pci_device_bus_num() argument
898 FAIL_PROP(c, dti, node, prop, "PCI bus number %d out of range, expected (%d - %d)", in check_pci_device_bus_num()
903 static void check_pci_device_reg(struct check *c, struct dt_info *dti, struct node *node) in check_pci_device_reg() argument
920 FAIL_PROP(c, dti, node, prop, "PCI reg config space address cells 2 and 3 must be 0"); in check_pci_device_reg()
927 FAIL_PROP(c, dti, node, prop, "PCI reg address is not configuration space"); in check_pci_device_reg()
929 FAIL_PROP(c, dti, node, prop, "PCI reg config space address register number must be 0"); in check_pci_device_reg()
941 FAIL(c, dti, node, "PCI unit address format error, expected \"%s\"", in check_pci_device_reg()
967 static void check_simple_bus_bridge(struct check *c, struct dt_info *dti, struct node *node) in check_simple_bus_bridge() argument
975 static void check_simple_bus_reg(struct check *c, struct dt_info *dti, struct node *node) in check_simple_bus_reg() argument
999 FAIL(c, dti, node, "missing or empty reg/ranges property"); in check_simple_bus_reg()
1009 FAIL(c, dti, node, "simple-bus unit address format error, expected \"%s\"", in check_simple_bus_reg()
1018 static void check_i2c_bus_bridge(struct check *c, struct dt_info *dti, struct node *node) in check_i2c_bus_bridge() argument
1037 FAIL(c, dti, node, "incorrect #address-cells for I2C bus"); in check_i2c_bus_bridge()
1039 FAIL(c, dti, node, "incorrect #size-cells for I2C bus"); in check_i2c_bus_bridge()
1047 static void check_i2c_bus_reg(struct check *c, struct dt_info *dti, struct node *node) in check_i2c_bus_reg() argument
1064 FAIL(c, dti, node, "missing or empty reg property"); in check_i2c_bus_reg()
1073 FAIL(c, dti, node, "I2C bus unit address format error, expected \"%s\"", in check_i2c_bus_reg()
1082 FAIL_PROP(c, dti, node, prop, "I2C address must be less than 10-bits, got \"0x%x\"", in check_i2c_bus_reg()
1085 …FAIL_PROP(c, dti, node, prop, "I2C address must be less than 7-bits, got \"0x%x\". Set I2C_TEN_BIT… in check_i2c_bus_reg()
1095 static void check_spi_bus_bridge(struct check *c, struct dt_info *dti, struct node *node) in check_spi_bus_bridge() argument
1121 FAIL(c, dti, node, "node name for SPI buses should be 'spi'"); in check_spi_bus_bridge()
1129 FAIL(c, dti, node, "incorrect #address-cells for SPI bus"); in check_spi_bus_bridge()
1131 FAIL(c, dti, node, "incorrect #size-cells for SPI bus"); in check_spi_bus_bridge()
1136 static void check_spi_bus_reg(struct check *c, struct dt_info *dti, struct node *node) in check_spi_bus_reg() argument
1155 FAIL(c, dti, node, "missing or empty reg property"); in check_spi_bus_reg()
1162 FAIL(c, dti, node, "SPI bus unit address format error, expected \"%s\"", in check_spi_bus_reg()
1167 static void check_unit_address_format(struct check *c, struct dt_info *dti, in check_unit_address_format() argument
1179 FAIL(c, dti, node, "unit name should not have leading \"0x\""); in check_unit_address_format()
1184 FAIL(c, dti, node, "unit name should not have leading 0s"); in check_unit_address_format()
1192 static void check_avoid_default_addr_size(struct check *c, struct dt_info *dti, in check_avoid_default_addr_size() argument
1207 FAIL(c, dti, node, "Relying on default #address-cells value"); in check_avoid_default_addr_size()
1210 FAIL(c, dti, node, "Relying on default #size-cells value"); in check_avoid_default_addr_size()
1215 static void check_avoid_unnecessary_addr_size(struct check *c, struct dt_info *dti, in check_avoid_unnecessary_addr_size() argument
1235 …FAIL(c, dti, node, "unnecessary #address-cells/#size-cells without \"ranges\" or child \"reg\" pro… in check_avoid_unnecessary_addr_size()
1254 struct dt_info *dti, in check_unique_unit_address_common() argument
1285 FAIL(c, dti, childb, "duplicate unit-address (also used in node %s)", childa->fullpath); in check_unique_unit_address_common()
1290 static void check_unique_unit_address(struct check *c, struct dt_info *dti, in check_unique_unit_address() argument
1293 check_unique_unit_address_common(c, dti, node, false); in check_unique_unit_address()
1297 static void check_unique_unit_address_if_enabled(struct check *c, struct dt_info *dti, in check_unique_unit_address_if_enabled() argument
1300 check_unique_unit_address_common(c, dti, node, true); in check_unique_unit_address_if_enabled()
1306 struct dt_info *dti, in check_obsolete_chosen_interrupt_controller() argument
1309 struct node *dt = dti->dt; in check_obsolete_chosen_interrupt_controller()
1323 FAIL_PROP(c, dti, node, prop, in check_obsolete_chosen_interrupt_controller()
1329 static void check_chosen_node_is_root(struct check *c, struct dt_info *dti, in check_chosen_node_is_root() argument
1335 if (node->parent != dti->dt) in check_chosen_node_is_root()
1336 FAIL(c, dti, node, "chosen node must be at root node"); in check_chosen_node_is_root()
1340 static void check_chosen_node_bootargs(struct check *c, struct dt_info *dti, in check_chosen_node_bootargs() argument
1353 check_is_string(c, dti, node); in check_chosen_node_bootargs()
1357 static void check_chosen_node_stdout_path(struct check *c, struct dt_info *dti, in check_chosen_node_stdout_path() argument
1370 FAIL_PROP(c, dti, node, prop, "Use 'stdout-path' instead"); in check_chosen_node_stdout_path()
1374 check_is_string(c, dti, node); in check_chosen_node_stdout_path()
1385 struct dt_info *dti, in check_property_phandle_args() argument
1390 struct node *root = dti->dt; in check_property_phandle_args()
1394 FAIL_PROP(c, dti, node, prop, in check_property_phandle_args()
1412 if (dti->dtsflags & DTSF_PLUGIN) in check_property_phandle_args()
1427 FAIL_PROP(c, dti, node, prop, in check_property_phandle_args()
1434 FAIL_PROP(c, dti, node, prop, in check_property_phandle_args()
1446 FAIL(c, dti, node, "Missing property '%s' in node %s or bad phandle (referred from %s[%d])", in check_property_phandle_args()
1454 FAIL_PROP(c, dti, node, prop, in check_property_phandle_args()
1462 struct dt_info *dti, in check_provider_cells_property() argument
1472 check_property_phandle_args(c, dti, node, prop, provider); in check_provider_cells_property()
1512 struct dt_info *dti, in check_gpios_property() argument
1530 check_property_phandle_args(c, dti, node, prop, &provider); in check_gpios_property()
1537 struct dt_info *dti, in check_deprecated_gpio_property() argument
1549 FAIL_PROP(c, dti, node, prop, in check_deprecated_gpio_property()
1572 struct dt_info *dti, in check_interrupt_provider() argument
1580 FAIL(c, dti, node, in check_interrupt_provider()
1586 FAIL(c, dti, node, in check_interrupt_provider()
1594 struct dt_info *dti, in check_interrupt_map() argument
1597 struct node *root = dti->dt; in check_interrupt_map()
1606 FAIL(c, dti, node, in check_interrupt_map()
1615 FAIL_PROP(c, dti, node, prop, in check_interrupt_map()
1620 FAIL_PROP(c, dti, node, irq_map_prop, in check_interrupt_map()
1634 FAIL_PROP(c, dti, node, irq_map_prop, in check_interrupt_map()
1644 if (!(dti->dtsflags & DTSF_PLUGIN)) in check_interrupt_map()
1645 FAIL_PROP(c, dti, node, irq_map_prop, in check_interrupt_map()
1653 FAIL_PROP(c, dti, node, irq_map_prop, in check_interrupt_map()
1663 …FAIL(c, dti, node, "Missing property '#interrupt-cells' in node %s or bad phandle (referred from i… in check_interrupt_map()
1678 struct dt_info *dti, in check_interrupts_property() argument
1681 struct node *root = dti->dt; in check_interrupts_property()
1691 FAIL_PROP(c, dti, node, irq_prop, "size (%d) is invalid, expected multiple of %zu", in check_interrupts_property()
1706 if (dti->dtsflags & DTSF_PLUGIN) in check_interrupts_property()
1708 FAIL_PROP(c, dti, parent, prop, "Invalid phandle"); in check_interrupts_property()
1714 FAIL_PROP(c, dti, parent, prop, "Bad phandle"); in check_interrupts_property()
1718 FAIL(c, dti, irq_node, in check_interrupts_property()
1728 FAIL(c, dti, node, "Missing interrupt-parent"); in check_interrupts_property()
1740 FAIL_PROP(c, dti, node, prop, in check_interrupts_property()
1755 static void check_graph_nodes(struct check *c, struct dt_info *dti, in check_graph_nodes() argument
1778 static void check_graph_child_address(struct check *c, struct dt_info *dti, in check_graph_child_address() argument
1798 …FAIL(c, dti, node, "graph node has single child node '%s', #address-cells/#size-cells are not nece… in check_graph_child_address()
1803 static void check_graph_reg(struct check *c, struct dt_info *dti, in check_graph_reg() argument
1815 FAIL(c, dti, node, "graph node malformed 'reg' property"); in check_graph_reg()
1821 FAIL(c, dti, node, "graph node unit address error, expected \"%s\"", in check_graph_reg()
1825 FAIL_PROP(c, dti, node, get_property(node, "#address-cells"), in check_graph_reg()
1829 FAIL_PROP(c, dti, node, get_property(node, "#size-cells"), in check_graph_reg()
1834 static void check_graph_port(struct check *c, struct dt_info *dti, in check_graph_port() argument
1841 FAIL(c, dti, node, "graph port node name should be 'port'"); in check_graph_port()
1843 check_graph_reg(c, dti, node); in check_graph_port()
1847 static struct node *get_remote_endpoint(struct check *c, struct dt_info *dti, in get_remote_endpoint() argument
1863 node = get_node_by_phandle(dti->dt, phandle); in get_remote_endpoint()
1865 FAIL_PROP(c, dti, endpoint, prop, "graph phandle is not valid"); in get_remote_endpoint()
1870 static void check_graph_endpoint(struct check *c, struct dt_info *dti, in check_graph_endpoint() argument
1879 FAIL(c, dti, node, "graph endpoint node name should be 'endpoint'"); in check_graph_endpoint()
1881 check_graph_reg(c, dti, node); in check_graph_endpoint()
1883 remote_node = get_remote_endpoint(c, dti, node); in check_graph_endpoint()
1887 if (get_remote_endpoint(c, dti, remote_node) != node) in check_graph_endpoint()
1888 FAIL(c, dti, node, "graph connection to node '%s' is not bidirectional", in check_graph_endpoint()
2045 void process_checks(bool force, struct dt_info *dti) in process_checks() argument
2054 error = error || run_check(c, dti); in process_checks()