svn commit: r251856 - head/usr.bin/dtc

David Chisnall theraven at FreeBSD.org
Mon Jun 17 15:34:23 UTC 2013


Author: theraven
Date: Mon Jun 17 15:34:22 2013
New Revision: 251856
URL: http://svnweb.freebsd.org/changeset/base/251856

Log:
  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.

Modified:
  head/usr.bin/dtc/checking.cc
  head/usr.bin/dtc/dtc.1

Modified: head/usr.bin/dtc/checking.cc
==============================================================================
--- head/usr.bin/dtc/checking.cc	Mon Jun 17 15:30:47 2013	(r251855)
+++ head/usr.bin/dtc/checking.cc	Mon Jun 17 15:34:22 2013	(r251856)
@@ -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

Modified: head/usr.bin/dtc/dtc.1
==============================================================================
--- head/usr.bin/dtc/dtc.1	Mon Jun 17 15:30:47 2013	(r251855)
+++ head/usr.bin/dtc/dtc.1	Mon Jun 17 15:34:22 2013	(r251856)
@@ -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:


More information about the svn-src-all mailing list