Re: [PATCH v3 7/7] of: Add KUnit test to confirm DTB is loaded
From: Rob Herring <robh+dt@kernel.org>
Date: 2024-02-13 17:52:15
Also in:
linux-devicetree, linux-kselftest, linux-patches, linux-um, lkml
On Fri, Feb 9, 2024 at 8:59 PM Stephen Boyd [off-list ref] wrote:
quoted hunk ↗ jump to hunk
Quoting Geert Uytterhoeven (2024-02-05 11:55:29)quoted
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)
of_root is another thing I'd like to remove direct access to. That check could be inside unflatten_device_tree().
+ unflatten_device_tree();
That's back to what Frank had essentially and I wanted to avoid. I think I'd just disable the tests on the above arches and let them opt-in. I could be convinced otherwise though. Rob _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel