Thread (14 messages) 14 messages, 4 authors, 2024-02-15

Re: [PATCH v3 7/7] of: Add KUnit test to confirm DTB is loaded

From: Stephen Boyd <sboyd@kernel.org>
Date: 2024-02-10 02:59:35
Also in: linux-devicetree, linux-kselftest, linux-patches, linux-um, lkml
Subsystem: the rest · Maintainer: Linus Torvalds

Quoting Geert Uytterhoeven (2024-02-05 11:55:29)
On Mon, Feb 5, 2024 at 8:19 PM Stephen Boyd [off-list ref] wrote:
quoted
Quoting David Gow (2024-02-02 20:10:17)
quoted
On Sat, 3 Feb 2024 at 03:59, Stephen Boyd [off-list ref] wrote:
quoted
Add a KUnit test that confirms a DTB has been loaded, i.e. there is a
root node, and that the of_have_populated_dt() API works properly.

Cc: Rob Herring <robh+dt@kernel.org>
Cc: Frank Rowand <redacted>
Cc: David Gow <redacted>
Cc: Brendan Higgins <brendan.higgins@linux.dev>
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
---
This looks pretty good to me test-wise, though it still fails on m68k.
(Everything else I tried it on works, though I've definitely not tried
_every_ architecture.)

aarch64: PASSED
i386: PASSED
x86_64: PASSED
x86_64 KASAN: PASSED
powerpc64: PASSED
UML: PASSED
UML LLVM: PASSED
m68k: FAILED
quoted
$ qemu-system-m68k -nodefaults -m 1024 -kernel .kunit-all-m68k/vmlinux -append 'kunit.enable=1 console=hvc0 kunit_shutdown=reboot' -no-reboot -nographic -serial stdio -machine virt
[11:55:05] ===================== dtb (2 subtests) =====================
[11:55:05] # dtb_root_node_found_by_path: EXPECTATION FAILED at drivers/of/of_test.c:18
[11:55:05] Expected np is not null, but is
[11:55:05] [FAILED] dtb_root_node_found_by_path
[11:55:05] # dtb_root_node_populates_of_root: EXPECTATION FAILED at drivers/of/of_test.c:28
[11:55:05] Expected of_root is not null, but is
[11:55:05] [FAILED] dtb_root_node_populates_of_root
[11:55:05]     # module: of_test
[11:55:05] # dtb: pass:0 fail:2 skip:0 total:2
[11:55:05] # Totals: pass:0 fail:2 skip:0 total:2
[11:55:05] ======================= [FAILED] dtb =======================
Ah yeah I forgot to mention that. m68k fails because it doesn't call the
unflatten_(and_copy)?_device_tree() function, so we don't populate a
root node on that architecture. One solution would be to make CONFIG_OF
unavailable on m68k. Or we have to make sure DT works on any
architecture. Rob, what do you prefer here?
I guess the latter?
Alpha, hexagon, parisc, s390, and sparc are also lacking calls
to unflatten.*device_tree().
sparc does that on purpose. Perhaps it's simplest to call
unflatten_device_tree() if of_root is still NULL after setup_arch()
returns.

---8<---
diff --git a/init/main.c b/init/main.c
index e24b0780fdff..02f5cf8be6c1 100644
--- a/init/main.c
+++ b/init/main.c
@@ -97,6 +97,8 @@
 #include <linux/jump_label.h>
 #include <linux/kcsan.h>
 #include <linux/init_syscalls.h>
+#include <linux/of.h>
+#include <linux/of_fdt.h>
 #include <linux/stackdepot.h>
 #include <linux/randomize_kstack.h>
 #include <net/net_namespace.h>
@@ -895,6 +897,8 @@ void start_kernel(void)
 	pr_notice("%s", linux_banner);
 	early_security_init();
 	setup_arch(&command_line);
+	if (!of_root)
+		unflatten_device_tree();
 	setup_boot_config();
 	setup_command_line(command_line);
 	setup_nr_cpu_ids();
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help