[Crosstoolchain-logs] [device-tree-compiler] 338/357: dtc: Automatically pick a sensible boot_cpuid_phys

Hector Oron zumbi at moszumanska.debian.org
Thu Dec 8 17:06:29 UTC 2016


This is an automated email from the git hooks/post-receive script.

zumbi pushed a commit to branch upstream/1.3.x
in repository device-tree-compiler.

commit 15ad6d862ec7f66dc00783798705a8db1c5d9aca
Author: David Gibson <david at gibson.dropbear.id.au>
Date:   Fri Feb 19 15:50:50 2010 +1100

    dtc: Automatically pick a sensible boot_cpuid_phys
    
    Currently, when in -Idts -Odtb or -Ifs -Odtb modes, dtc always
    defaults to using 0 as the value for the boot_cpuid_phys header field.
    That's correct quite often, but there are some systems where there is
    no CPU with hardware ID of 0, or where we don't want to use the CPU
    with hardware ID 0 at all (e.g. for AMP-style partitioning).  The only
    way to override this default currently, is with the -b command line
    option.
    
    This patch improves dtc to instead base the default boot_cpuid_phys
    value on the reg property of the first listed subnode of /cpus.  This
    means that dtc will get boot_cpuid_phys correct by default in a
    greater proportion of cases (since the boot cpu is usually listed
    first, and this way at least the boot_cpuid_phys default will match
    some existing cpu node).  If the node doesn't exist or has an invalid
    'reg' property (missing or not 4 bytes in length), then
    boot_cpuid_phys is set to 0.
    
    Signed-off-by: David Gibson <david at gibson.dropbear.id.au>
---
 dtc-parser.y         |  3 ++-
 dtc.h                |  2 ++
 fstree.c             |  2 +-
 livetree.c           | 23 +++++++++++++++++++++++
 tests/boot-cpuid.dts | 16 ++++++++++++++++
 tests/run_tests.sh   | 26 ++++++++++++++++++++------
 6 files changed, 64 insertions(+), 8 deletions(-)

diff --git a/dtc-parser.y b/dtc-parser.y
index a2c0925..bd9e097 100644
--- a/dtc-parser.y
+++ b/dtc-parser.y
@@ -85,7 +85,8 @@ static unsigned long long eval_literal(const char *s, int base, int bits);
 sourcefile:
 	  DT_V1 ';' memreserves devicetree
 		{
-			the_boot_info = build_boot_info($3, $4, 0);
+			the_boot_info = build_boot_info($3, $4,
+							guess_boot_cpuid($4));
 		}
 	;
 
diff --git a/dtc.h b/dtc.h
index a85e5b7..13136e4 100644
--- a/dtc.h
+++ b/dtc.h
@@ -178,6 +178,8 @@ struct node *get_node_by_phandle(struct node *tree, cell_t phandle);
 struct node *get_node_by_ref(struct node *tree, const char *ref);
 cell_t get_node_phandle(struct node *root, struct node *node);
 
+uint32_t guess_boot_cpuid(struct node *tree);
+
 /* Boot info (tree plus memreserve information */
 
 struct reserve_info {
diff --git a/fstree.c b/fstree.c
index 7aee982..d43343a 100644
--- a/fstree.c
+++ b/fstree.c
@@ -87,6 +87,6 @@ struct boot_info *dt_from_fs(const char *dirname)
 	tree = read_fstree(dirname);
 	tree = name_node(tree, "", NULL);
 
-	return build_boot_info(NULL, tree, 0);
+	return build_boot_info(NULL, tree, guess_boot_cpuid(tree));
 }
 
diff --git a/livetree.c b/livetree.c
index 9a482a8..0230949 100644
--- a/livetree.c
+++ b/livetree.c
@@ -318,3 +318,26 @@ cell_t get_node_phandle(struct node *root, struct node *node)
 
 	return node->phandle;
 }
+
+uint32_t guess_boot_cpuid(struct node *tree)
+{
+	struct node *cpus, *bootcpu;
+	struct property *reg;
+
+	cpus = get_node_by_path(tree, "/cpus");
+	if (!cpus)
+		return 0;
+
+
+	bootcpu = cpus->children;
+	if (!bootcpu)
+		return 0;
+
+	reg = get_property(bootcpu, "reg");
+	if (!reg || (reg->val.len != sizeof(uint32_t)))
+		return 0;
+
+	/* FIXME: Sanity check node? */
+
+	return propval_cell(reg);
+}
diff --git a/tests/boot-cpuid.dts b/tests/boot-cpuid.dts
new file mode 100644
index 0000000..7021a24
--- /dev/null
+++ b/tests/boot-cpuid.dts
@@ -0,0 +1,16 @@
+/dts-v1/;
+
+/ {
+	cpus {
+		cpu at 10 {
+			device_type = "cpu";
+			compatible = "fake-cpu";
+			reg = <0x10>;
+		};
+		cpu at 11 {
+			device_type = "cpu";
+			compatible = "fake-cpu";
+			reg = <0x11>;
+		};
+	};
+};
diff --git a/tests/run_tests.sh b/tests/run_tests.sh
index c532030..ca46051 100755
--- a/tests/run_tests.sh
+++ b/tests/run_tests.sh
@@ -242,12 +242,26 @@ dtc_tests () {
     run_test incbin incbin.test.dtb
 
     # Check boot_cpuid_phys handling
-    run_dtc_test -I dts -O dtb -b 17 -o boot_cpuid.test.dtb empty.dts
-    run_test boot-cpuid boot_cpuid.test.dtb 17
-    run_dtc_test -I dtb -O dtb -b 17 -o boot_cpuid_test_tree1.test.dtb test_tree1.dtb
-    run_test boot-cpuid boot_cpuid_test_tree1.test.dtb 17
-    run_dtc_test -I dtb -O dtb -o boot_cpuid_preserved_test_tree1.test.dtb boot_cpuid_test_tree1.test.dtb
-    run_test dtbs_equal_ordered boot_cpuid_preserved_test_tree1.test.dtb boot_cpuid_test_tree1.test.dtb
+    run_dtc_test -I dts -O dtb -o boot_cpuid.test.dtb boot-cpuid.dts
+    run_test boot-cpuid boot_cpuid.test.dtb 16
+
+    run_dtc_test -I dts -O dtb -b 17 -o boot_cpuid_17.test.dtb boot-cpuid.dts
+    run_test boot-cpuid boot_cpuid_17.test.dtb 17
+
+    run_dtc_test -I dtb -O dtb -o preserve_boot_cpuid.test.dtb boot_cpuid.test.dtb
+    run_test boot-cpuid preserve_boot_cpuid.test.dtb 16
+    run_test dtbs_equal_ordered preserve_boot_cpuid.test.dtb boot_cpuid.test.dtb
+
+    run_dtc_test -I dtb -O dtb -o preserve_boot_cpuid_17.test.dtb boot_cpuid_17.test.dtb
+    run_test boot-cpuid preserve_boot_cpuid_17.test.dtb 17
+    run_test dtbs_equal_ordered preserve_boot_cpuid_17.test.dtb boot_cpuid_17.test.dtb
+
+    run_dtc_test -I dtb -O dtb -b17 -o override17_boot_cpuid.test.dtb boot_cpuid.test.dtb
+    run_test boot-cpuid override17_boot_cpuid.test.dtb 17
+
+    run_dtc_test -I dtb -O dtb -b0 -o override0_boot_cpuid_17.test.dtb boot_cpuid_17.test.dtb
+    run_test boot-cpuid override0_boot_cpuid_17.test.dtb 0
+
 
     # Check -Oasm mode
     for tree in test_tree1.dts escapes.dts references.dts path-references.dts \

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/crosstoolchain/device-tree-compiler.git



More information about the Crosstoolchain-logs mailing list