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: FAILEDquoted
$ 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