Lines Matching refs:c
10 #define TRACE(c, ...) \ argument
12 fprintf(stderr, "=== %s: ", (c)->name); \
17 #define TRACE(c, fmt, ...) do { } while (0) argument
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
71 if (!(c->warn && (quiet < 1)) && !(c->error && (quiet < 2))) in check_msg()
90 (c->error) ? "ERROR" : "Warning", c->name); in check_msg()
120 #define FAIL(c, dti, node, ...) \ argument
122 TRACE((c), "\t\tFAILED at %s:%d", __FILE__, __LINE__); \
123 (c)->status = FAILED; \
124 check_msg((c), dti, node, NULL, __VA_ARGS__); \
127 #define FAIL_PROP(c, dti, node, prop, ...) \ argument
129 TRACE((c), "\t\tFAILED at %s:%d", __FILE__, __LINE__); \
130 (c)->status = FAILED; \
131 check_msg((c), dti, node, prop, __VA_ARGS__); \
135 static void check_nodes_props(struct check *c, struct dt_info *dti, struct node *node) in check_nodes_props() argument
139 TRACE(c, "%s", node->fullpath); in check_nodes_props()
140 if (c->fn) in check_nodes_props()
141 c->fn(c, dti, node); in check_nodes_props()
144 check_nodes_props(c, dti, child); in check_nodes_props()
155 static bool run_check(struct check *c, struct dt_info *dti) in run_check() argument
161 assert(!c->inprogress); in run_check()
163 if (c->status != UNCHECKED) in run_check()
166 c->inprogress = true; in run_check()
168 for (i = 0; i < c->num_prereqs; i++) { in run_check()
169 struct check *prq = c->prereq[i]; in run_check()
172 c->status = PREREQ; in run_check()
173 check_msg(c, dti, NULL, NULL, "Failed prerequisite '%s'", in run_check()
174 c->prereq[i]->name); in run_check()
178 if (c->status != UNCHECKED) in run_check()
181 check_nodes_props(c, dti, dt); in run_check()
183 if (c->status == UNCHECKED) in run_check()
184 c->status = PASSED; in run_check()
186 TRACE(c, "\tCompleted, status %d", c->status); in run_check()
189 c->inprogress = false; in run_check()
190 if ((c->status != PASSED) && (c->error)) in run_check()
200 static inline void check_always_fail(struct check *c, struct dt_info *dti, in check_always_fail() argument
203 FAIL(c, dti, node, "always_fail check"); in check_always_fail()
207 static void check_is_string(struct check *c, struct dt_info *dti, in check_is_string() argument
211 const char *propname = c->data; in check_is_string()
218 FAIL_PROP(c, dti, node, prop, "property is not a string"); in check_is_string()
225 static void check_is_string_list(struct check *c, struct dt_info *dti, in check_is_string_list() argument
230 const char *propname = c->data; in check_is_string_list()
242 FAIL_PROP(c, dti, node, prop, "property is not a string list"); in check_is_string_list()
254 static void check_is_cell(struct check *c, struct dt_info *dti, in check_is_cell() argument
258 const char *propname = c->data; in check_is_cell()
265 FAIL_PROP(c, dti, node, prop, "property is not a single cell"); in check_is_cell()
276 static void check_duplicate_node_names(struct check *c, struct dt_info *dti, in check_duplicate_node_names() argument
286 FAIL(c, dti, child2, "Duplicate node name"); in check_duplicate_node_names()
290 static void check_duplicate_property_names(struct check *c, struct dt_info *dti, in check_duplicate_property_names() argument
300 FAIL_PROP(c, dti, node, prop, "Duplicate property name"); in check_duplicate_property_names()
313 static void check_node_name_chars(struct check *c, struct dt_info *dti, in check_node_name_chars() argument
316 size_t n = strspn(node->name, c->data); in check_node_name_chars()
319 FAIL(c, dti, node, "Bad character '%c' in node name", in check_node_name_chars()
324 static void check_node_name_chars_strict(struct check *c, struct dt_info *dti, in check_node_name_chars_strict() argument
327 int n = strspn(node->name, c->data); in check_node_name_chars_strict()
330 FAIL(c, dti, node, "Character '%c' not recommended in node name", in check_node_name_chars_strict()
335 static void check_node_name_format(struct check *c, struct dt_info *dti, in check_node_name_format() argument
339 FAIL(c, dti, node, "multiple '@' characters in node name"); in check_node_name_format()
343 static void check_node_name_vs_property_name(struct check *c, in check_node_name_vs_property_name() argument
351 FAIL(c, dti, node, "node name and property name conflict"); in check_node_name_vs_property_name()
357 static void check_unit_address_vs_reg(struct check *c, struct dt_info *dti, in check_unit_address_vs_reg() argument
376 FAIL(c, dti, node, "node has a reg or ranges property, but no unit name"); in check_unit_address_vs_reg()
379 FAIL(c, dti, node, "node has a unit name, but no reg or ranges property"); in check_unit_address_vs_reg()
384 static void check_property_name_chars(struct check *c, struct dt_info *dti, in check_property_name_chars() argument
390 size_t n = strspn(prop->name, c->data); in check_property_name_chars()
393 FAIL_PROP(c, dti, node, prop, "Bad character '%c' in property name", in check_property_name_chars()
399 static void check_property_name_chars_strict(struct check *c, in check_property_name_chars_strict() argument
407 size_t n = strspn(name, c->data); in check_property_name_chars_strict()
422 n = strspn(name, c->data); in check_property_name_chars_strict()
425 FAIL_PROP(c, dti, node, prop, "Character '%c' not recommended in property name", in check_property_name_chars_strict()
438 static void check_duplicate_label(struct check *c, struct dt_info *dti, in check_duplicate_label() argument
459 FAIL(c, dti, node, "Duplicate label '%s' on " DESCLABEL_FMT in check_duplicate_label()
465 static void check_duplicate_label_node(struct check *c, struct dt_info *dti, in check_duplicate_label_node() argument
472 check_duplicate_label(c, dti, l->label, node, NULL, NULL); in check_duplicate_label_node()
478 check_duplicate_label(c, dti, l->label, node, prop, NULL); in check_duplicate_label_node()
481 check_duplicate_label(c, dti, m->ref, node, prop, m); in check_duplicate_label_node()
486 static cell_t check_phandle_prop(struct check *c, struct dt_info *dti, in check_phandle_prop() argument
499 FAIL_PROP(c, dti, node, prop, "bad length (%d) %s property", in check_phandle_prop()
511 FAIL(c, dti, node, "%s is a reference to another node", in check_phandle_prop()
525 FAIL_PROP(c, dti, node, prop, "bad value (0x%x) in %s property", in check_phandle_prop()
533 static void check_explicit_phandles(struct check *c, struct dt_info *dti, in check_explicit_phandles() argument
543 phandle = check_phandle_prop(c, dti, node, "phandle"); in check_explicit_phandles()
545 linux_phandle = check_phandle_prop(c, dti, node, "linux,phandle"); in check_explicit_phandles()
552 FAIL(c, dti, node, "mismatching 'phandle' and 'linux,phandle'" in check_explicit_phandles()
560 FAIL(c, dti, node, "duplicated phandle 0x%x (seen before at %s)", in check_explicit_phandles()
569 static void check_name_properties(struct check *c, struct dt_info *dti, in check_name_properties() argument
585 FAIL(c, dti, node, "\"name\" property is incorrect (\"%s\" instead" in check_name_properties()
603 static void fixup_phandle_references(struct check *c, struct dt_info *dti, in fixup_phandle_references() argument
620 FAIL(c, dti, node, "Reference to non-existent node or " in fixup_phandle_references()
638 static void fixup_path_references(struct check *c, struct dt_info *dti, in fixup_path_references() argument
654 FAIL(c, dti, node, "Reference to non-existent node or label \"%s\"\n", in fixup_path_references()
669 static void fixup_omit_unused_nodes(struct check *c, struct dt_info *dti, in fixup_omit_unused_nodes() argument
692 static void check_names_is_string_list(struct check *c, struct dt_info *dti, in check_names_is_string_list() argument
701 c->data = prop->name; in check_names_is_string_list()
702 check_is_string_list(c, dti, node); in check_names_is_string_list()
707 static void check_alias_paths(struct check *c, struct dt_info *dti, in check_alias_paths() argument
722 FAIL_PROP(c, dti, node, prop, "aliases property is not a valid node (%s)", in check_alias_paths()
727 FAIL(c, dti, node, "aliases property name must include only lowercase and '-'"); in check_alias_paths()
732 static void fixup_addr_size_cells(struct check *c, struct dt_info *dti, in fixup_addr_size_cells() argument
756 static void check_reg_format(struct check *c, struct dt_info *dti, in check_reg_format() argument
767 FAIL(c, dti, node, "Root node has a \"reg\" property"); in check_reg_format()
772 FAIL_PROP(c, dti, node, prop, "property is empty"); in check_reg_format()
779 FAIL_PROP(c, dti, node, prop, "property has invalid length (%d bytes) " in check_reg_format()
785 static void check_ranges_format(struct check *c, struct dt_info *dti, in check_ranges_format() argument
790 const char *ranges = c->data; in check_ranges_format()
797 FAIL_PROP(c, dti, node, prop, "Root node has a \"%s\" property", in check_ranges_format()
810 FAIL_PROP(c, dti, node, prop, "empty \"%s\" property but its " in check_ranges_format()
815 FAIL_PROP(c, dti, node, prop, "empty \"%s\" property but its " in check_ranges_format()
820 FAIL_PROP(c, dti, node, prop, "\"%s\" property has invalid length (%d bytes) " in check_ranges_format()
833 static void check_pci_bridge(struct check *c, struct dt_info *dti, struct node *node) in check_pci_bridge() argument
846 FAIL(c, dti, node, "node name is not \"pci\" or \"pcie\""); in check_pci_bridge()
850 FAIL(c, dti, node, "missing ranges for PCI bridge (or not a bridge)"); in check_pci_bridge()
853 FAIL(c, dti, node, "incorrect #address-cells for PCI bridge"); in check_pci_bridge()
855 FAIL(c, dti, node, "incorrect #size-cells for PCI bridge"); in check_pci_bridge()
862 FAIL_PROP(c, dti, node, prop, "value must be 2 cells"); in check_pci_bridge()
867 FAIL_PROP(c, dti, node, prop, "1st cell must be less than or equal to 2nd cell"); in check_pci_bridge()
869 FAIL_PROP(c, dti, node, prop, "maximum bus number must be less than 256"); in check_pci_bridge()
874 static void check_pci_device_bus_num(struct check *c, struct dt_info *dti, struct node *node) in check_pci_device_bus_num() argument
899 FAIL_PROP(c, dti, node, prop, "PCI bus number %d out of range, expected (%d - %d)", in check_pci_device_bus_num()
904 static void check_pci_device_reg(struct check *c, struct dt_info *dti, struct node *node) in check_pci_device_reg() argument
921 FAIL_PROP(c, dti, node, prop, "PCI reg config space address cells 2 and 3 must be 0"); in check_pci_device_reg()
928 FAIL_PROP(c, dti, node, prop, "PCI reg address is not configuration space"); in check_pci_device_reg()
930 FAIL_PROP(c, dti, node, prop, "PCI reg config space address register number must be 0"); in check_pci_device_reg()
942 FAIL(c, dti, node, "PCI unit address format error, expected \"%s\"", in check_pci_device_reg()
968 static void check_simple_bus_bridge(struct check *c, struct dt_info *dti, struct node *node) in check_simple_bus_bridge() argument
976 static void check_simple_bus_reg(struct check *c, struct dt_info *dti, struct node *node) in check_simple_bus_reg() argument
1000 FAIL(c, dti, node, "missing or empty reg/ranges property"); in check_simple_bus_reg()
1010 FAIL(c, dti, node, "simple-bus unit address format error, expected \"%s\"", in check_simple_bus_reg()
1019 static void check_i2c_bus_bridge(struct check *c, struct dt_info *dti, struct node *node) in check_i2c_bus_bridge() argument
1038 FAIL(c, dti, node, "incorrect #address-cells for I2C bus"); in check_i2c_bus_bridge()
1040 FAIL(c, dti, node, "incorrect #size-cells for I2C bus"); in check_i2c_bus_bridge()
1048 static void check_i2c_bus_reg(struct check *c, struct dt_info *dti, struct node *node) in check_i2c_bus_reg() argument
1065 FAIL(c, dti, node, "missing or empty reg property"); in check_i2c_bus_reg()
1074 FAIL(c, dti, node, "I2C bus unit address format error, expected \"%s\"", in check_i2c_bus_reg()
1084 FAIL_PROP(c, dti, node, prop, "I2C address must be less than 10-bits, got \"0x%x\"", in check_i2c_bus_reg()
1087 …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()
1097 static void check_spi_bus_bridge(struct check *c, struct dt_info *dti, struct node *node) in check_spi_bus_bridge() argument
1123 FAIL(c, dti, node, "node name for SPI buses should be 'spi'"); in check_spi_bus_bridge()
1131 FAIL(c, dti, node, "incorrect #address-cells for SPI bus"); in check_spi_bus_bridge()
1133 FAIL(c, dti, node, "incorrect #size-cells for SPI bus"); in check_spi_bus_bridge()
1138 static void check_spi_bus_reg(struct check *c, struct dt_info *dti, struct node *node) in check_spi_bus_reg() argument
1157 FAIL(c, dti, node, "missing or empty reg property"); in check_spi_bus_reg()
1164 FAIL(c, dti, node, "SPI bus unit address format error, expected \"%s\"", in check_spi_bus_reg()
1169 static void check_unit_address_format(struct check *c, struct dt_info *dti, in check_unit_address_format() argument
1181 FAIL(c, dti, node, "unit name should not have leading \"0x\""); in check_unit_address_format()
1186 FAIL(c, dti, node, "unit name should not have leading 0s"); in check_unit_address_format()
1194 static void check_avoid_default_addr_size(struct check *c, struct dt_info *dti, in check_avoid_default_addr_size() argument
1209 FAIL(c, dti, node, "Relying on default #address-cells value"); in check_avoid_default_addr_size()
1212 FAIL(c, dti, node, "Relying on default #size-cells value"); in check_avoid_default_addr_size()
1217 static void check_avoid_unnecessary_addr_size(struct check *c, struct dt_info *dti, in check_avoid_unnecessary_addr_size() argument
1237 …FAIL(c, dti, node, "unnecessary #address-cells/#size-cells without \"ranges\", \"dma-ranges\" or c… in check_avoid_unnecessary_addr_size()
1255 static void check_unique_unit_address_common(struct check *c, in check_unique_unit_address_common() argument
1287 FAIL(c, dti, childb, "duplicate unit-address (also used in node %s)", childa->fullpath); in check_unique_unit_address_common()
1292 static void check_unique_unit_address(struct check *c, struct dt_info *dti, in check_unique_unit_address() argument
1295 check_unique_unit_address_common(c, dti, node, false); in check_unique_unit_address()
1299 static void check_unique_unit_address_if_enabled(struct check *c, struct dt_info *dti, in check_unique_unit_address_if_enabled() argument
1302 check_unique_unit_address_common(c, dti, node, true); in check_unique_unit_address_if_enabled()
1307 static void check_obsolete_chosen_interrupt_controller(struct check *c, in check_obsolete_chosen_interrupt_controller() argument
1325 FAIL_PROP(c, dti, node, prop, in check_obsolete_chosen_interrupt_controller()
1331 static void check_chosen_node_is_root(struct check *c, struct dt_info *dti, in check_chosen_node_is_root() argument
1338 FAIL(c, dti, node, "chosen node must be at root node"); in check_chosen_node_is_root()
1342 static void check_chosen_node_bootargs(struct check *c, struct dt_info *dti, in check_chosen_node_bootargs() argument
1354 c->data = prop->name; in check_chosen_node_bootargs()
1355 check_is_string(c, dti, node); in check_chosen_node_bootargs()
1359 static void check_chosen_node_stdout_path(struct check *c, struct dt_info *dti, in check_chosen_node_stdout_path() argument
1372 FAIL_PROP(c, dti, node, prop, "Use 'stdout-path' instead"); in check_chosen_node_stdout_path()
1375 c->data = prop->name; in check_chosen_node_stdout_path()
1376 check_is_string(c, dti, node); in check_chosen_node_stdout_path()
1386 static void check_property_phandle_args(struct check *c, in check_property_phandle_args() argument
1396 FAIL_PROP(c, dti, node, prop, in check_property_phandle_args()
1430 FAIL_PROP(c, dti, node, prop, in check_property_phandle_args()
1437 FAIL_PROP(c, dti, node, prop, in check_property_phandle_args()
1449 FAIL(c, dti, node, "Missing property '%s' in node %s or bad phandle (referred from %s[%d])", in check_property_phandle_args()
1458 FAIL_PROP(c, dti, node, prop, in check_property_phandle_args()
1466 static void check_provider_cells_property(struct check *c, in check_provider_cells_property() argument
1470 const struct provider *provider = c->data; in check_provider_cells_property()
1477 check_property_phandle_args(c, dti, node, prop, provider); in check_provider_cells_property()
1516 static void check_gpios_property(struct check *c, in check_gpios_property() argument
1535 check_property_phandle_args(c, dti, node, prop, &provider); in check_gpios_property()
1541 static void check_deprecated_gpio_property(struct check *c, in check_deprecated_gpio_property() argument
1554 FAIL_PROP(c, dti, node, prop, in check_deprecated_gpio_property()
1576 static void check_interrupt_provider(struct check *c, in check_interrupt_provider() argument
1585 FAIL(c, dti, node, in check_interrupt_provider()
1591 FAIL(c, dti, node, in check_interrupt_provider()
1598 static void check_interrupt_map(struct check *c, in check_interrupt_map() argument
1611 FAIL(c, dti, node, in check_interrupt_map()
1620 FAIL_PROP(c, dti, node, prop, in check_interrupt_map()
1625 FAIL_PROP(c, dti, node, irq_map_prop, in check_interrupt_map()
1639 FAIL_PROP(c, dti, node, irq_map_prop, in check_interrupt_map()
1650 FAIL_PROP(c, dti, node, irq_map_prop, in check_interrupt_map()
1658 FAIL_PROP(c, dti, node, irq_map_prop, in check_interrupt_map()
1668 …FAIL(c, dti, node, "Missing property '#interrupt-cells' in node %s or bad phandle (referred from i… in check_interrupt_map()
1679 FAIL_PROP(c, dti, node, irq_map_prop, in check_interrupt_map()
1686 static void check_interrupts_property(struct check *c, in check_interrupts_property() argument
1700 FAIL_PROP(c, dti, node, irq_prop, "size (%d) is invalid, expected multiple of %zu", in check_interrupts_property()
1717 FAIL_PROP(c, dti, parent, prop, "Invalid phandle"); in check_interrupts_property()
1723 FAIL_PROP(c, dti, parent, prop, "Bad phandle"); in check_interrupts_property()
1727 FAIL(c, dti, irq_node, in check_interrupts_property()
1737 FAIL(c, dti, node, "Missing interrupt-parent"); in check_interrupts_property()
1749 FAIL_PROP(c, dti, node, prop, in check_interrupts_property()
1764 static void check_graph_nodes(struct check *c, struct dt_info *dti, in check_graph_nodes() argument
1776 …FAIL(c, dti, node, "root node contains endpoint node '%s', potentially misplaced remote-endpoint p… in check_graph_nodes()
1792 static void check_graph_reg(struct check *c, struct dt_info *dti, in check_graph_reg() argument
1804 FAIL(c, dti, node, "graph node malformed 'reg' property"); in check_graph_reg()
1810 FAIL(c, dti, node, "graph node unit address error, expected \"%s\"", in check_graph_reg()
1814 FAIL_PROP(c, dti, node, get_property(node, "#address-cells"), in check_graph_reg()
1818 FAIL_PROP(c, dti, node, get_property(node, "#size-cells"), in check_graph_reg()
1823 static void check_graph_port(struct check *c, struct dt_info *dti, in check_graph_port() argument
1829 check_graph_reg(c, dti, node); in check_graph_port()
1836 FAIL(c, dti, node, "graph port node name should be 'port'"); in check_graph_port()
1840 static struct node *get_remote_endpoint(struct check *c, struct dt_info *dti, in get_remote_endpoint() argument
1858 FAIL_PROP(c, dti, endpoint, prop, "graph phandle is not valid"); in get_remote_endpoint()
1863 static void check_graph_endpoint(struct check *c, struct dt_info *dti, in check_graph_endpoint() argument
1871 check_graph_reg(c, dti, node); in check_graph_endpoint()
1878 FAIL(c, dti, node, "graph endpoint node name should be 'endpoint'"); in check_graph_endpoint()
1880 remote_node = get_remote_endpoint(c, dti, node); in check_graph_endpoint()
1884 if (get_remote_endpoint(c, dti, remote_node) != node) in check_graph_endpoint()
1885 FAIL(c, dti, node, "graph connection to node '%s' is not bidirectional", in check_graph_endpoint()
1890 static void check_graph_child_address(struct check *c, struct dt_info *dti, in check_graph_child_address() argument
1910 …FAIL(c, dti, node, "graph node has single child node '%s', #address-cells/#size-cells are not nece… in check_graph_child_address()
2006 static void enable_warning_error(struct check *c, bool warn, bool error) in enable_warning_error() argument
2011 if ((warn && !c->warn) || (error && !c->error)) in enable_warning_error()
2012 for (i = 0; i < c->num_prereqs; i++) in enable_warning_error()
2013 enable_warning_error(c->prereq[i], warn, error); in enable_warning_error()
2015 c->warn = c->warn || warn; in enable_warning_error()
2016 c->error = c->error || error; in enable_warning_error()
2019 static void disable_warning_error(struct check *c, bool warn, bool error) in disable_warning_error() argument
2025 if ((warn && c->warn) || (error && c->error)) { in disable_warning_error()
2031 if (cc->prereq[j] == c) in disable_warning_error()
2036 c->warn = c->warn && !warn; in disable_warning_error()
2037 c->error = c->error && !error; in disable_warning_error()
2053 struct check *c = check_table[i]; in parse_checks_option() local
2055 if (streq(c->name, name)) { in parse_checks_option()
2057 enable_warning_error(c, warn, error); in parse_checks_option()
2059 disable_warning_error(c, warn, error); in parse_checks_option()
2073 struct check *c = check_table[i]; in process_checks() local
2075 if (c->warn || c->error) in process_checks()
2076 error = error || run_check(c, dti); in process_checks()