Browse Source

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>
main
Rob Herring 7 years ago committed by David Gibson
parent
commit
8fe94fd6f1
  1. 34
      checks.c
  2. 5
      tests/bad-string-props.dts
  3. 2
      tests/run_tests.sh

34
checks.c

@ -179,6 +179,36 @@ static void check_is_string(struct check *c, struct dt_info *dti, @@ -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"); @@ -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[] = { @@ -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
tests/bad-string-props.dts

@ -5,4 +5,9 @@ @@ -5,4 +5,9 @@
model = <0xdeadbeef>;
status = <0xdeadbeef>;
label = <0xdeadbeef>;


node {
compatible = "good", <0xdeadbeef>;
};
};

2
tests/run_tests.sh

@ -546,7 +546,7 @@ dtc_tests () { @@ -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…
Cancel
Save