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:
Rob Herring 2017-12-12 16:46:25 -06:00 committed by David Gibson
parent 6c57308196
commit 8fe94fd6f1
3 changed files with 40 additions and 1 deletions

View file

@ -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,

View file

@ -5,4 +5,9 @@
model = <0xdeadbeef>;
status = <0xdeadbeef>;
label = <0xdeadbeef>;
node {
compatible = "good", <0xdeadbeef>;
};
};

View file

@ -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