[PATCH v3] dtc: Add an option to generate __local_fixups__ and __fixups__

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

This records detailed usage of labels in a dtb. This is needed in
overlays (and enabled implicitly for these). For ordinary device trees
it can be used to restore labels when compiling back to dts format.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@xxxxxxxxxxxxxx>
 Documentation/manual.txt | 14 ++++++++++++++
 dtc.c                    |  8 +++++++-
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/Documentation/manual.txt b/Documentation/manual.txt
index 15a7837d3cef..598c6e694c55 100644
--- a/Documentation/manual.txt
+++ b/Documentation/manual.txt
@@ -126,6 +126,20 @@ Options:
 	property for each label. The property's name is the label name and the
 	value is the path of the labeled node.
+    -L
+	Possibly generates a __local_fixups__ and a __fixups__ node at the root node.
+	For each property that contains a phandle reference using a locally
+	defined phandle, the __local_fixups__ node contains a property (at path
+	/__local_fixups__/$a if $a is the path of the node). Its value is a list
+	of offsets that are phandle values. If there are no such properties, no
+	__local_fixups__ node is generated.
+	For each undefined label used in at least one reference, the __fixups__
+	node contains a property. Its name is the label name, its value is a
+	list of locations where the label is used in a reference in the format
+	"path:property:offset". If there is no undefined label, no __fixups__
+	nodes is generated.
+	Enabled by default for compiling overlays (i.e. dts files with a
+	/plugin/ tag).
 	Generate automatically aliases for all node labels. This is similar to
diff --git a/dtc.c b/dtc.c
index bc786c543b7e..d2e4e2b55b5c 100644
--- a/dtc.c
+++ b/dtc.c
@@ -47,7 +47,7 @@ static void fill_fullpaths(struct node *tree, const char *prefix)
 /* Usage related data. */
 static const char usage_synopsis[] = "dtc [options] <input file>";
-static const char usage_short_opts[] = "qI:O:o:V:d:R:S:p:a:fb:i:H:sW:E:@AThv";
+static const char usage_short_opts[] = "qI:O:o:V:d:R:S:p:a:fb:i:H:sW:E:@LAThv";
 static struct option const usage_long_opts[] = {
 	{"quiet",            no_argument, NULL, 'q'},
 	{"in-format",         a_argument, NULL, 'I'},
@@ -67,6 +67,7 @@ static struct option const usage_long_opts[] = {
 	{"warning",           a_argument, NULL, 'W'},
 	{"error",             a_argument, NULL, 'E'},
 	{"symbols",	     no_argument, NULL, '@'},
+	{"local-fixups",     no_argument, NULL, 'L'},
 	{"auto-alias",       no_argument, NULL, 'A'},
 	{"annotate",         no_argument, NULL, 'T'},
 	{"help",             no_argument, NULL, 'h'},
@@ -252,6 +253,11 @@ int main(int argc, char *argv[])
 		case '@':
 			generate_symbols = 1;
+		case 'L':
+			generate_fixups = 1;
+			break;
 		case 'A':
 			auto_label_aliases = 1;

base-commit: 3b02a94b486f998aa22d898b427820a805d0904f

[Index of Archives]     [Device Tree]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux