mirror of https://gitlab.com/qemu-project/dtc.git
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
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) \
|
#define ERROR_IF_NOT_STRING(nm, propname) \
|
||||||
ERROR(nm, check_is_string, (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,
|
static void check_is_cell(struct check *c, struct dt_info *dti,
|
||||||
struct node *node)
|
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(status_is_string, "status");
|
||||||
WARNING_IF_NOT_STRING(label_is_string, "label");
|
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,
|
static void fixup_addr_size_cells(struct check *c, struct dt_info *dti,
|
||||||
struct node *node)
|
struct node *node)
|
||||||
{
|
{
|
||||||
|
@ -1239,6 +1271,8 @@ static struct check *check_table[] = {
|
||||||
&device_type_is_string, &model_is_string, &status_is_string,
|
&device_type_is_string, &model_is_string, &status_is_string,
|
||||||
&label_is_string,
|
&label_is_string,
|
||||||
|
|
||||||
|
&compatible_is_string_list,
|
||||||
|
|
||||||
&property_name_chars_strict,
|
&property_name_chars_strict,
|
||||||
&node_name_chars_strict,
|
&node_name_chars_strict,
|
||||||
|
|
||||||
|
|
|
@ -5,4 +5,9 @@
|
||||||
model = <0xdeadbeef>;
|
model = <0xdeadbeef>;
|
||||||
status = <0xdeadbeef>;
|
status = <0xdeadbeef>;
|
||||||
label = <0xdeadbeef>;
|
label = <0xdeadbeef>;
|
||||||
|
|
||||||
|
|
||||||
|
node {
|
||||||
|
compatible = "good", <0xdeadbeef>;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -546,7 +546,7 @@ dtc_tests () {
|
||||||
check_tests bad-name-property.dts name_properties
|
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-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-reg-ranges.dts reg_format ranges_format
|
||||||
check_tests bad-empty-ranges.dts ranges_format
|
check_tests bad-empty-ranges.dts ranges_format
|
||||||
check_tests reg-ranges-root.dts reg_format ranges_format
|
check_tests reg-ranges-root.dts reg_format ranges_format
|
||||||
|
|
Loading…
Reference in New Issue