mirror of
https://github.com/freebsd/freebsd-src
synced 2024-09-06 17:18:32 +00:00
Add a checker to dtc, based on a feature request from rwatson / brooks.
This checks that every node that has children specifies their register sizes. This is not enabled by default, as the default sizes are sometimes required (including by some DTS in the tree), but can help when writing new device trees so that you can check that you actually meant the defaults.
This commit is contained in:
parent
0f78a367ab
commit
e29c18df28
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=251856
|
@ -33,6 +33,8 @@
|
|||
#include "checking.hh"
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
|
||||
namespace dtc
|
||||
{
|
||||
namespace fdt
|
||||
|
@ -40,6 +42,54 @@ namespace fdt
|
|||
namespace checking
|
||||
{
|
||||
|
||||
namespace
|
||||
{
|
||||
/**
|
||||
* Checker that verifies that every node that has children has
|
||||
* #address-cells and #size-cells properties.
|
||||
*/
|
||||
struct address_cells_checker : public checker
|
||||
{
|
||||
address_cells_checker(const char *name) : checker(name) {}
|
||||
virtual bool check_node(device_tree *tree, node *n)
|
||||
{
|
||||
// If this has no children, it trivially meets the
|
||||
// conditions.
|
||||
if (n->child_begin() == n->child_end())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
bool found_address = false;
|
||||
bool found_size = false;
|
||||
for (node::property_iterator i=n->property_begin(),
|
||||
e=n->property_end() ; i!=e ; ++i)
|
||||
{
|
||||
if (!found_address)
|
||||
{
|
||||
found_address = ((*i)->get_key() == "#address-cells");
|
||||
}
|
||||
if (!found_size)
|
||||
{
|
||||
found_size = ((*i)->get_key() == "#size-cells");
|
||||
}
|
||||
if (found_size && found_address)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found_address)
|
||||
{
|
||||
report_error("Missing #address-cells property");
|
||||
}
|
||||
if (!found_size)
|
||||
{
|
||||
report_error("Missing #size-cells property");
|
||||
}
|
||||
return found_address && found_size;
|
||||
}
|
||||
};
|
||||
} // anonymous namespace
|
||||
|
||||
bool
|
||||
checker::visit_node(device_tree *tree, node *n)
|
||||
{
|
||||
|
@ -157,6 +207,8 @@ check_manager::check_manager()
|
|||
add_property_type_checker<property_value::STRING>(
|
||||
"type-model", string("model"));
|
||||
add_property_size_checker("type-phandle", string("phandle"), 4);
|
||||
disabled_checkers.insert(std::make_pair(string("cells-attributes"),
|
||||
new address_cells_checker("cells-attributes")));
|
||||
}
|
||||
|
||||
bool
|
||||
|
|
|
@ -214,6 +214,12 @@ property.
|
|||
Checks the type of the
|
||||
.Va compatible
|
||||
property.
|
||||
.It cells-attributes
|
||||
Checks that all nodes with children have both
|
||||
.Va #address-cells
|
||||
and
|
||||
.Va #size-cells
|
||||
properties.
|
||||
.El
|
||||
.Sh EXAMPLES
|
||||
The command:
|
||||
|
|
Loading…
Reference in a new issue