checks: add chosen node checks
PATCH v3 1/1 checks: add chosen node checks
Add some checks for /chosen node. These check that chosen is located at the root level and that bootargs and stdout-path properties are strings.
---
v3:
- Split into 3 separate checks
- Move next to check_obsolete_chosen_interrupt_controller
v2:
- New patch making an explicit chosen node test.
checks.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ tests/bad-chosen.dts | 10 ++++++++++ tests/run_tests.sh | 3 +++ 3 files changed, 64 insertions(+) create mode 100644 tests/bad-chosen.dts
checks.c +51 -0
@@ -1052,6 +1052,56 @@ static void check_obsolete_chosen_interrupt_controller(struct check *c,WARNING (obsolete_chosen_interrupt_controller, check_obsolete_chosen_interrupt_controller,NULL ); +static void check_chosen_node_is_root (struct check *c,struct dt_info *dti, +struct node *node) +{ +if (!streq (node->name,"chosen" )) +return ; + +if (node->parent != dti->dt) +FAIL (c, dti,"chosen node '%s' must be at root node" , + node->fullpath); +} +WARNING (chosen_node_is_root, check_chosen_node_is_root,NULL ); + +static void check_chosen_node_bootargs (struct check *c,struct dt_info *dti, +struct node *node) +{ +struct property *prop; + +if (!streq (node->name,"chosen" )) +return ; + + prop =get_property (node,"bootargs" ); +if (!prop) +return ; + + c->data = prop->name; +check_is_string (c, dti, node); +} +WARNING (chosen_node_bootargs, check_chosen_node_bootargs,NULL ); + +static void check_chosen_node_stdout_path (struct check *c,struct dt_info *dti, +struct node *node) +{ +struct property *prop; + +if (!streq (node->name,"chosen" )) +return ; + + prop =get_property (node,"stdout-path" ); +if (!prop) { + prop =get_property (node,"linux,stdout-path" ); +if (!prop) +return ; +FAIL (c, dti,"Use 'stdout-path' instead of 'linux,stdout-path'" ); + } + + c->data = prop->name; +check_is_string (c, dti, node); +} +WARNING (chosen_node_stdout_path, check_chosen_node_stdout_path,NULL ); +struct provider {const char *prop_name;const char *cell_name;
@@ -1354,6 +1404,7 @@ static struct check *check_table[] = { &avoid_default_addr_size, &avoid_unnecessary_addr_size, &obsolete_chosen_interrupt_controller, + &chosen_node_is_root, &chosen_node_bootargs, &chosen_node_stdout_path, &clocks_property, &cooling_device_property,
tests/bad-chosen.dts new file +10 -0
@@ -0,0 +1,10 @@ +/dts-v1/; + +/ { + node2 { + chosen { + bootargs = <0xdeadbeef>; + stdout-path = <1>; + }; + }; +};
tests/run_tests.sh +3 -0
@@ -547,6 +547,9 @@ dtc_tests () { 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 compatible_is_string_list names_is_string_list + check_tests bad-chosen.dts chosen_node_is_root + check_tests bad-chosen.dts chosen_node_bootargs + check_tests bad-chosen.dts chosen_node_stdout_path 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
Signature · 1 line
2.14.1
A message that is not in the archive (sent off-list or not yet received): 20171214224001.17298-1-robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
David Gibson
AppliedQuoted 4 lines · Rob Herring
Add some checks for /chosen node. These check that chosen is located at the root level and that bootargs and stdout-path properties are strings.
Signed-off-by Rob Herring <[email protected]>
Applied, thanks.
One possible follow-on...
[snip]
Quoted 8 lines
checks.c +8
-0+static void check_chosen_node_stdout_path (struct check *c,struct dt_info *dti, +struct node *node) +{ +struct property *prop; + +if (!streq (node->name,"chosen" )) +return ; +
checks.c static void check_obsolete_chosen_interrupt_controller(struct check *c, · line 1101
Quoted 10 lines
checks.c +10
-0+ prop =get_property (node,"stdout-path" ); +if (!prop) { + prop =get_property (node,"linux,stdout-path" ); +if (!prop) +return ; +FAIL (c, dti,"Use 'stdout-path' instead of 'linux,stdout-path'" ); + } + + c->data = prop->name; +check_is_string (c, dti, node);
.. you could also check that it's actually a valid path to a node, couldn't you?
Quoted 44 lines
checks.c +4
-0+} +WARNING (chosen_node_stdout_path, check_chosen_node_stdout_path,NULL ); +struct provider {const char *prop_name;const char *cell_name;@@ -1354,6 +1404,7 @@ static struct check *check_table[] = { &avoid_default_addr_size, &avoid_unnecessary_addr_size, &obsolete_chosen_interrupt_controller, + &chosen_node_is_root, &chosen_node_bootargs, &chosen_node_stdout_path, &clocks_property, &cooling_device_property,tests/bad-chosen.dts new file +10
-0@@ -0,0 +1,10 @@ +/dts-v1/; + +/ { + node2 { + chosen { + bootargs = <0xdeadbeef>; + stdout-path = <1>; + }; + }; +};tests/run_tests.sh +3
-0@@ -547,6 +547,9 @@ dtc_tests () { 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 compatible_is_string_list names_is_string_list + check_tests bad-chosen.dts chosen_node_is_root + check_tests bad-chosen.dts chosen_node_bootargs + check_tests bad-chosen.dts chosen_node_stdout_path 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
Signature · 4 lines
David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson
A message that is not in the archive (sent off-list or not yet received): [email protected]
Quoted 24 lines · David Gibson
Quoted 4 lines · Rob Herring
Add some checks for /chosen node. These check that chosen is located at the root level and that bootargs and stdout-path properties are strings.
Signed-off-by Rob Herring <[email protected]>Applied, thanks.
One possible follow-on...
[snip]
Quoted 13 lines
checks.c +13
-0+static void check_chosen_node_stdout_path (struct check *c,struct dt_info *dti, +struct node *node) +{ +struct property *prop; + +if (!streq (node->name,"chosen" )) +return ; + + prop =get_property (node,"stdout-path" ); +if (!prop) { + prop =get_property (node,"linux,stdout-path" ); +if (!prop) +return ;
Quoted 8 lines
checks.c static void check_obsolete_chosen_interrupt_controller(struct check *c, · line 1101
Quoted 5 lines
checks.c +5
-0+FAIL (c, dti,"Use 'stdout-path' instead of 'linux,stdout-path'" ); + } + + c->data = prop->name; +check_is_string (c, dti, node);.. you could also check that it's actually a valid path to a node, couldn't you?
Yes I thought of that, but it's often an alias. I didn't look closely, but I don't think that would work unless I add that additional lookup.
Rob
A message that is not in the archive (sent off-list or not yet received): CAL_Jsq+M2jjKAstCmS8zPSf-SfFtq+vtKGYJtWvbJL9355L8cA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org
Quoted 35 lines · Rob Herring
Quoted 24 lines · David Gibson
Quoted 4 lines · Rob Herring
Add some checks for /chosen node. These check that chosen is located at the root level and that bootargs and stdout-path properties are strings.
Signed-off-by Rob Herring <[email protected]>Applied, thanks.
One possible follow-on...
[snip]
Quoted 13 lines
checks.c +13
-0+static void check_chosen_node_stdout_path (struct check *c,struct dt_info *dti, +struct node *node) +{ +struct property *prop; + +if (!streq (node->name,"chosen" )) +return ; + + prop =get_property (node,"stdout-path" ); +if (!prop) { + prop =get_property (node,"linux,stdout-path" ); +if (!prop) +return ;Quoted 8 lines
checks.c static void check_obsolete_chosen_interrupt_controller(struct check *c, · line 1101
Quoted 5 lines
checks.c +5
-0+FAIL (c, dti,"Use 'stdout-path' instead of 'linux,stdout-path'" ); + } + + c->data = prop->name; +check_is_string (c, dti, node);.. you could also check that it's actually a valid path to a node, couldn't you?
Quoted 3 lines
Yes I thought of that, but it's often an alias. I didn't look closely, but I don't think that would work unless I add that additional lookup.
Ah, good point, you would need to check against aliases as well. We probably should have a helper that looks up a path, including alias resolution (so both "/absolute/path" and "alias/path/from/alias"). Both forms are traditionally allowed in most contexts that accept a path in OF.
Signature · 4 lines
David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson