Skip to contentSkip to conversation

checkpatch: add DT compatible string documentation checks

PATCH Superseded Rob Herring 2 participants 2 messages Dec 4, 2013 Checkpatch

v2 of 4 Superseded Latest is v4 →

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 checkpatch: add DT compatible string documentation checks

From: Rob Herring <rob.herring-bsGFqQB8/[email protected]>

This adds a simple check that any compatible strings in DeviceTree dts files are present in Documentation/devicetree/bindings. Vendor prefixes are also checked for existing in vendor-prefixes.txt These should be temporary checks until we have more sophisticated binding schema checking.

---
v2:
- Add vendor string checking against vendor-prefixes.txt
- Add '_', '.' and '+' as valid compatible string characters
- Use 'grep -E' instead of egrep

 scripts/checkpatch.pl | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
scripts/checkpatch.pl +23 -0
index 9c98100..5eea031 100755
@@ -2034,6 +2034,29 @@ sub process {
 			     "Use of $flag is deprecated, please use \`$replacement->{$flag} instead.\n" . $herecurr) if ($replacement->{$flag});
 		}
 
+# check for DT compatible documentation
+		if ($realfile =~ /\.dts/ && $rawline =~ /\+\s*compatible\s*=/) {
+			my @compats = $rawline =~ /\"([a-zA-Z0-9\-\,\.\+_]+)\"/g;
+
+			foreach my $compat (@compats) {
+				my $compat2 = $compat;
+				my $dt_path = "Documentation/devicetree/bindings/";
+				$compat2 =~ s/\,[a-z]*\-/\,<\.\*>\-/;
+				`grep -Erq "$compat|$compat2" $dt_path`;
+				if ( $? >> 8 ) {
+					WARN("UNDOCUMENTED_DT_BINDING",
+					     "DT compatible string \"$compat\" appears un-documented -- check $dt_path\n" . $herecurr);
+				}
+				my $vendor = $compat;
+				$vendor =~ s/^([a-zA-Z0-9]+)\,.*/$1/;
+				`grep -Eq "$vendor" "${dt_path}vendor-prefixes.txt"`;
+				if ( $? >> 8 ) {
+					WARN("UNDOCUMENTED_DT_VENDOR",
+					     "DT compatible string vendor \"$vendor\" appears un-documented -- check ${dt_path}vendor-prefixes.txt\n" . $herecurr);
+				}
+			}
+		}
+
 # check we are in a valid source file if not then ignore this hunk
 		next if ($realfile !~ /\.(h|c|s|S|pl|sh)$/);
 
Signature · 6 lines
1.8.3.2

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
maintainer
#1 lore raw
Quoted 11 lines · Rob Herring

From: Rob Herring <rob.herring-bsGFqQB8/[email protected]>

This adds a simple check that any compatible strings in DeviceTree dts files are present in Documentation/devicetree/bindings. Vendor prefixes are also checked for existing in vendor-prefixes.txt These should be temporary checks until we have more sophisticated binding schema checking.

Quoted 5 lines

---
v2:
- Add vendor string checking against vendor-prefixes.txt
- Add '_', '.' and '+' as valid compatible string characters
- Use 'grep -E' instead of egrep

Some more trivial notes:

scripts/checkpatch.pl

Quoted 1 line
scripts/checkpatch.pl +0 -0

[]

scripts/checkpatch.pl sub process { · line 2038

Quoted 6 lines
scripts/checkpatch.pl +2 -0
@@ -2034,6 +2034,29 @@ sub process {
 			     "Use of $flag is deprecated, please use \`$replacement->{$flag} instead.\n" . $herecurr) if ($replacement->{$flag});
 		}
 
+# check for DT compatible documentation
+		if ($realfile =~ /\.dts/ && $rawline =~ /\+\s*compatible\s*=/) {

this should probably be $rawline =~ /^\+\s*compatible...

Quoted 4 lines
scripts/checkpatch.pl +4 -0
+			my @compats = $rawline =~ /\"([a-zA-Z0-9\-\,\.\+_]+)\"/g;
+
+			foreach my $compat (@compats) {
+				my $compat2 = $compat;

scripts/checkpatch.pl sub process { · line 2052

Quoted 10 lines
scripts/checkpatch.pl +10 -0
+				my $dt_path = "Documentation/devicetree/bindings/";
+				$compat2 =~ s/\,[a-z]*\-/\,<\.\*>\-/;
+				`grep -Erq "$compat|$compat2" $dt_path`;
+				if ( $? >> 8 ) {
+					WARN("UNDOCUMENTED_DT_BINDING",
+					     "DT compatible string \"$compat\" appears un-documented -- check $dt_path\n" . $herecurr);
+				}
+				my $vendor = $compat;
+				$vendor =~ s/^([a-zA-Z0-9]+)\,.*/$1/;
+				`grep -Eq "$vendor" "${dt_path}vendor-prefixes.txt"`;

It maybe simpler to read as:

	my $vendor_path = $dt_path . "vendor-prefixes.txt";
	`grep -Eq $vendor $vendor_path`;

scripts/checkpatch.pl sub process { · line 2055

Quoted 3 lines
scripts/checkpatch.pl +3 -0
+				if ( $? >> 8 ) {
+					WARN("UNDOCUMENTED_DT_VENDOR",
+					     "DT compatible string vendor \"$vendor\" appears un-documented -- check ${dt_path}vendor-prefixes.txt\n" . $herecurr);

"DT compatible string vendor \"$vendor\" appears un-documented -- check $vendor_path\n" . $herecurr)

Also I suggest using the same message type
instead of 2 distinct ones.

Maybe "UNDOCUMENTED_DT_STRING"

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html