Lines Matching refs:c
24 #define TRACE(c, ...) \ argument
26 fprintf(stderr, "=== %s: ", (c)->name); \
31 #define TRACE(c, fmt, ...) do { } while (0) argument
43 typedef void (*check_fn)(struct check *c, struct dt_info *dti, struct node *node);
76 static inline void check_msg(struct check *c, const char *fmt, ...) __attribute__((format (printf, …
78 static inline void check_msg(struct check *c, const char *fmt, ...) in check_msg() argument
83 if ((c->warn && (quiet < 1)) in check_msg()
84 || (c->error && (quiet < 2))) { in check_msg()
86 (c->error) ? "ERROR" : "Warning", c->name); in check_msg()
93 #define FAIL(c, ...) \ argument
95 TRACE((c), "\t\tFAILED at %s:%d", __FILE__, __LINE__); \
96 (c)->status = FAILED; \
97 check_msg((c), __VA_ARGS__); \
100 static void check_nodes_props(struct check *c, struct dt_info *dti, struct node *node) in check_nodes_props() argument
104 TRACE(c, "%s", node->fullpath); in check_nodes_props()
105 if (c->fn) in check_nodes_props()
106 c->fn(c, dti, node); in check_nodes_props()
109 check_nodes_props(c, dti, child); in check_nodes_props()
112 static bool run_check(struct check *c, struct dt_info *dti) in run_check() argument
118 assert(!c->inprogress); in run_check()
120 if (c->status != UNCHECKED) in run_check()
123 c->inprogress = true; in run_check()
125 for (i = 0; i < c->num_prereqs; i++) { in run_check()
126 struct check *prq = c->prereq[i]; in run_check()
129 c->status = PREREQ; in run_check()
130 check_msg(c, "Failed prerequisite '%s'", in run_check()
131 c->prereq[i]->name); in run_check()
135 if (c->status != UNCHECKED) in run_check()
138 check_nodes_props(c, dti, dt); in run_check()
140 if (c->status == UNCHECKED) in run_check()
141 c->status = PASSED; in run_check()
143 TRACE(c, "\tCompleted, status %d", c->status); in run_check()
146 c->inprogress = false; in run_check()
147 if ((c->status != PASSED) && (c->error)) in run_check()
157 static inline void check_always_fail(struct check *c, struct dt_info *dti, in check_always_fail() argument
160 FAIL(c, "always_fail check"); in check_always_fail()
164 static void check_is_string(struct check *c, struct dt_info *dti, in check_is_string() argument
168 char *propname = c->data; in check_is_string()
175 FAIL(c, "\"%s\" property in %s is not a string", in check_is_string()
183 static void check_is_cell(struct check *c, struct dt_info *dti, in check_is_cell() argument
187 char *propname = c->data; in check_is_cell()
194 FAIL(c, "\"%s\" property in %s is not a single cell", in check_is_cell()
206 static void check_duplicate_node_names(struct check *c, struct dt_info *dti, in check_duplicate_node_names() argument
216 FAIL(c, "Duplicate node name %s", in check_duplicate_node_names()
221 static void check_duplicate_property_names(struct check *c, struct dt_info *dti, in check_duplicate_property_names() argument
231 FAIL(c, "Duplicate property name %s in %s", in check_duplicate_property_names()
243 static void check_node_name_chars(struct check *c, struct dt_info *dti, in check_node_name_chars() argument
246 int n = strspn(node->name, c->data); in check_node_name_chars()
249 FAIL(c, "Bad character '%c' in node %s", in check_node_name_chars()
254 static void check_node_name_format(struct check *c, struct dt_info *dti, in check_node_name_format() argument
258 FAIL(c, "Node %s has multiple '@' characters in name", in check_node_name_format()
263 static void check_unit_address_vs_reg(struct check *c, struct dt_info *dti, in check_unit_address_vs_reg() argument
277 FAIL(c, "Node %s has a reg or ranges property, but no unit name", in check_unit_address_vs_reg()
281 FAIL(c, "Node %s has a unit name, but no reg property", in check_unit_address_vs_reg()
287 static void check_property_name_chars(struct check *c, struct dt_info *dti, in check_property_name_chars() argument
293 int n = strspn(prop->name, c->data); in check_property_name_chars()
296 FAIL(c, "Bad character '%c' in property name \"%s\", node %s", in check_property_name_chars()
309 static void check_duplicate_label(struct check *c, struct dt_info *dti, in check_duplicate_label() argument
330 FAIL(c, "Duplicate label '%s' on " DESCLABEL_FMT in check_duplicate_label()
336 static void check_duplicate_label_node(struct check *c, struct dt_info *dti, in check_duplicate_label_node() argument
343 check_duplicate_label(c, dti, l->label, node, NULL, NULL); in check_duplicate_label_node()
349 check_duplicate_label(c, dti, l->label, node, prop, NULL); in check_duplicate_label_node()
352 check_duplicate_label(c, dti, m->ref, node, prop, m); in check_duplicate_label_node()
357 static cell_t check_phandle_prop(struct check *c, struct dt_info *dti, in check_phandle_prop() argument
370 FAIL(c, "%s has bad length (%d) %s property", in check_phandle_prop()
382 FAIL(c, "%s in %s is a reference to another node", in check_phandle_prop()
396 FAIL(c, "%s has bad value (0x%x) in %s property", in check_phandle_prop()
404 static void check_explicit_phandles(struct check *c, struct dt_info *dti, in check_explicit_phandles() argument
414 phandle = check_phandle_prop(c, dti, node, "phandle"); in check_explicit_phandles()
416 linux_phandle = check_phandle_prop(c, dti, node, "linux,phandle"); in check_explicit_phandles()
423 FAIL(c, "%s has mismatching 'phandle' and 'linux,phandle'" in check_explicit_phandles()
431 FAIL(c, "%s has duplicated phandle 0x%x (seen before at %s)", in check_explicit_phandles()
440 static void check_name_properties(struct check *c, struct dt_info *dti, in check_name_properties() argument
456 FAIL(c, "\"name\" property in %s is incorrect (\"%s\" instead" in check_name_properties()
474 static void fixup_phandle_references(struct check *c, struct dt_info *dti, in fixup_phandle_references() argument
491 FAIL(c, "Reference to non-existent node or " in fixup_phandle_references()
507 static void fixup_path_references(struct check *c, struct dt_info *dti, in fixup_path_references() argument
523 FAIL(c, "Reference to non-existent node or label \"%s\"\n", in fixup_path_references()
547 static void fixup_addr_size_cells(struct check *c, struct dt_info *dti, in fixup_addr_size_cells() argument
571 static void check_reg_format(struct check *c, struct dt_info *dti, in check_reg_format() argument
582 FAIL(c, "Root node has a \"reg\" property"); in check_reg_format()
587 FAIL(c, "\"reg\" property in %s is empty", node->fullpath); in check_reg_format()
594 FAIL(c, "\"reg\" property in %s has invalid length (%d bytes) " in check_reg_format()
600 static void check_ranges_format(struct check *c, struct dt_info *dti, in check_ranges_format() argument
611 FAIL(c, "Root node has a \"ranges\" property"); in check_ranges_format()
623 FAIL(c, "%s has empty \"ranges\" property but its " in check_ranges_format()
628 FAIL(c, "%s has empty \"ranges\" property but its " in check_ranges_format()
633 FAIL(c, "\"ranges\" property in %s has invalid length (%d bytes) " in check_ranges_format()
644 static void check_avoid_default_addr_size(struct check *c, struct dt_info *dti, in check_avoid_default_addr_size() argument
659 FAIL(c, "Relying on default #address-cells value for %s", in check_avoid_default_addr_size()
663 FAIL(c, "Relying on default #size-cells value for %s", in check_avoid_default_addr_size()
669 static void check_obsolete_chosen_interrupt_controller(struct check *c, in check_obsolete_chosen_interrupt_controller() argument
687 FAIL(c, "/chosen has obsolete \"interrupt-controller\" " in check_obsolete_chosen_interrupt_controller()
716 static void enable_warning_error(struct check *c, bool warn, bool error) in enable_warning_error() argument
721 if ((warn && !c->warn) || (error && !c->error)) in enable_warning_error()
722 for (i = 0; i < c->num_prereqs; i++) in enable_warning_error()
723 enable_warning_error(c->prereq[i], warn, error); in enable_warning_error()
725 c->warn = c->warn || warn; in enable_warning_error()
726 c->error = c->error || error; in enable_warning_error()
729 static void disable_warning_error(struct check *c, bool warn, bool error) in disable_warning_error() argument
735 if ((warn && c->warn) || (error && c->error)) { in disable_warning_error()
741 if (cc->prereq[j] == c) in disable_warning_error()
746 c->warn = c->warn && !warn; in disable_warning_error()
747 c->error = c->error && !error; in disable_warning_error()
763 struct check *c = check_table[i]; in parse_checks_option() local
765 if (streq(c->name, name)) { in parse_checks_option()
767 enable_warning_error(c, warn, error); in parse_checks_option()
769 disable_warning_error(c, warn, error); in parse_checks_option()
783 struct check *c = check_table[i]; in process_checks() local
785 if (c->warn || c->error) in process_checks()
786 error = error || run_check(c, dti); in process_checks()