checks: add string list check
Add a check for string list properties with compatible being the first check. Signed-off-by: Rob Herring <robh@kernel.org> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
6c57308196
commit
8fe94fd6f1
3 changed files with 40 additions and 1 deletions
34
checks.c
34
checks.c
|
@ -179,6 +179,36 @@ static void check_is_string(struct check *c, struct dt_info *dti,
|
|||
#define ERROR_IF_NOT_STRING(nm, propname) \
|
||||
ERROR(nm, check_is_string, (propname))
|
||||
|
||||
static void check_is_string_list(struct check *c, struct dt_info *dti,
|
||||
struct node *node)
|
||||
{
|
||||
int rem, l;
|
||||
struct property *prop;
|
||||
char *propname = c->data;
|
||||
char *str;
|
||||
|
||||
prop = get_property(node, propname);
|
||||
if (!prop)
|
||||
return; /* Not present, assumed ok */
|
||||
|
||||
str = prop->val.val;
|
||||
rem = prop->val.len;
|
||||
while (rem > 0) {
|
||||
l = strnlen(str, rem);
|
||||
if (l == rem) {
|
||||
FAIL(c, dti, "\"%s\" property in %s is not a string list",
|
||||
propname, node->fullpath);
|
||||
break;
|
||||
}
|
||||
rem -= l + 1;
|
||||
str += l + 1;
|
||||
}
|
||||
}
|
||||
#define WARNING_IF_NOT_STRING_LIST(nm, propname) \
|
||||
WARNING(nm, check_is_string_list, (propname))
|
||||
#define ERROR_IF_NOT_STRING_LIST(nm, propname) \
|
||||
ERROR(nm, check_is_string_list, (propname))
|
||||
|
||||
static void check_is_cell(struct check *c, struct dt_info *dti,
|
||||
struct node *node)
|
||||
{
|
||||
|
@ -588,6 +618,8 @@ WARNING_IF_NOT_STRING(model_is_string, "model");
|
|||
WARNING_IF_NOT_STRING(status_is_string, "status");
|
||||
WARNING_IF_NOT_STRING(label_is_string, "label");
|
||||
|
||||
WARNING_IF_NOT_STRING_LIST(compatible_is_string_list, "compatible");
|
||||
|
||||
static void fixup_addr_size_cells(struct check *c, struct dt_info *dti,
|
||||
struct node *node)
|
||||
{
|
||||
|
@ -1239,6 +1271,8 @@ static struct check *check_table[] = {
|
|||
&device_type_is_string, &model_is_string, &status_is_string,
|
||||
&label_is_string,
|
||||
|
||||
&compatible_is_string_list,
|
||||
|
||||
&property_name_chars_strict,
|
||||
&node_name_chars_strict,
|
||||
|
||||
|
|
|
@ -5,4 +5,9 @@
|
|||
model = <0xdeadbeef>;
|
||||
status = <0xdeadbeef>;
|
||||
label = <0xdeadbeef>;
|
||||
|
||||
|
||||
node {
|
||||
compatible = "good", <0xdeadbeef>;
|
||||
};
|
||||
};
|
||||
|
|
|
@ -546,7 +546,7 @@ dtc_tests () {
|
|||
check_tests bad-name-property.dts name_properties
|
||||
|
||||
check_tests bad-ncells.dts address_cells_is_cell size_cells_is_cell interrupt_cells_is_cell
|
||||
check_tests bad-string-props.dts device_type_is_string model_is_string status_is_string label_is_string
|
||||
check_tests bad-string-props.dts device_type_is_string model_is_string status_is_string label_is_string compatible_is_string_list
|
||||
check_tests bad-reg-ranges.dts reg_format ranges_format
|
||||
check_tests bad-empty-ranges.dts ranges_format
|
||||
check_tests reg-ranges-root.dts reg_format ranges_format
|
||||
|
|
Loading…
Reference in a new issue