From: Rob Herring <robh@kernel.org>
To: Stephen Boyd <sboyd@kernel.org>
Cc: Michael Turquette <mturquette@baylibre.com>,
linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org,
patches@lists.linux.dev,
Brendan Higgins <brendan.higgins@linux.dev>,
David Gow <davidgow@google.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
"Rafael J . Wysocki" <rafael@kernel.org>,
Richard Weinberger <richard@nod.at>,
Anton Ivanov <anton.ivanov@cambridgegreys.com>,
Johannes Berg <johannes@sipsolutions.net>,
Vincent Whitchurch <vincent.whitchurch@axis.com>,
Frank Rowand <frowand.list@gmail.com>,
Christian Marangi <ansuelsmth@gmail.com>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
devicetree@vger.kernel.org, linux-um@lists.infradead.org,
linux-kselftest@vger.kernel.org, kunit-dev@googlegroups.com
Subject: Re: [PATCH 2/8] of: Enable DTB loading on UML for KUnit tests
Date: Wed, 8 Mar 2023 13:46:52 -0600 [thread overview]
Message-ID: <20230308194652.GA3656473-robh@kernel.org> (raw)
In-Reply-To: <20230302013822.1808711-3-sboyd@kernel.org>
On Wed, Mar 01, 2023 at 05:38:15PM -0800, Stephen Boyd wrote:
> To fully exercise common clk framework code in KUnit we need to
> associate 'struct device' pointers with 'struct device_node' pointers so
> that things like clk_get() can parse DT nodes for 'clocks' and so that
> clk providers can use DT to provide clks; the most common mode of
> operation for clk providers.
>
> Adding support to KUnit so that it loads a DTB is fairly simple after
> commit b31297f04e86 ("um: Add devicetree support"). We can simply pass a
> pre-compiled deviectree blob (DTB) on the kunit.py commandline and UML
> will load it. The problem is that tests won't know that the commandline
> has been modified, nor that a DTB has been loaded. Take a different
> approach so that tests can skip if a DTB hasn't been loaded.
>
> Reuse the Makefile logic from the OF unittests to build a DTB into the
> kernel. This DTB will be for the mythical machine "linux,kunit", i.e.
> the devicetree for the KUnit "board". In practice, it is a dtsi file
> that will gather includes for kunit tests that rely in part on a
> devicetree being loaded. The devicetree should only be loaded if
> CONFIG_OF_KUNIT=y. Make that a choice config parallel to the existing
> CONFIG_OF_UNITTEST so that only one devicetree can be loaded in the
> system at a time. Similarly, the kernel commandline option to load a
> DTB is ignored if CONFIG_OF_KUNIT is enabled so that only one DTB is
> loaded at a time.
>
> Add a simple unit test to confirm that the DTB loading worked. Future
> tests will add to the kunit.dtsi file to include their specific test
> nodes.
>
> Cc: Richard Weinberger <richard@nod.at>
> Cc: Anton Ivanov <anton.ivanov@cambridgegreys.com>
> Cc: Johannes Berg <johannes@sipsolutions.net>
> Cc: Vincent Whitchurch <vincent.whitchurch@axis.com>
> Cc: Rob Herring <robh+dt@kernel.org>
> Cc: Frank Rowand <frowand.list@gmail.com>
> Signed-off-by: Stephen Boyd <sboyd@kernel.org>
> ---
> arch/um/kernel/dtb.c | 29 +++++++++++++++--
> drivers/of/Kconfig | 26 ++++++++++++++++
> drivers/of/Makefile | 1 +
> drivers/of/kunit/.kunitconfig | 4 +++
> drivers/of/kunit/Makefile | 4 +++
> drivers/of/kunit/kunit.dtsi | 8 +++++
> drivers/of/kunit/kunit.dtso | 4 +++
> drivers/of/kunit/uml_dtb_test.c | 55 +++++++++++++++++++++++++++++++++
> 8 files changed, 128 insertions(+), 3 deletions(-)
> create mode 100644 drivers/of/kunit/.kunitconfig
> create mode 100644 drivers/of/kunit/Makefile
> create mode 100644 drivers/of/kunit/kunit.dtsi
> create mode 100644 drivers/of/kunit/kunit.dtso
> create mode 100644 drivers/of/kunit/uml_dtb_test.c
>
> diff --git a/arch/um/kernel/dtb.c b/arch/um/kernel/dtb.c
> index 484141b06938..ee63951b12df 100644
> --- a/arch/um/kernel/dtb.c
> +++ b/arch/um/kernel/dtb.c
> @@ -15,9 +15,32 @@ void uml_dtb_init(void)
> long long size;
> void *area;
>
> - area = uml_load_file(dtb, &size);
> - if (!area)
> - return;
> + if (IS_ENABLED(CONFIG_OF_KUNIT)) {
> + /*
> + * __dtbo_kunit_begin[] and __dtbo_kunit_end[] are magically
> + * created by cmd_dt_S_dtbo in scripts/Makefile.lib from the
> + * drivers/of/kunit/kunit.dtsi file.
> + */
> + extern uint8_t __dtbo_kunit_begin[];
> + extern uint8_t __dtbo_kunit_end[];
> +
> + size = __dtbo_kunit_end - __dtbo_kunit_begin;
> + if (!size) {
> + pr_warn("%s: kunit testcases is empty\n", __func__);
> + return;
> + }
> +
> + /* creating copy */
> + area = memblock_alloc(size, 8);
> + if (!area)
> + return;
> +
> + memcpy(area, __dtbo_kunit_begin, size);
> + } else {
> + area = uml_load_file(dtb, &size);
> + if (!area)
> + return;
> + }
>
> if (!early_init_dt_scan(area)) {
> pr_err("invalid DTB %s\n", dtb);
> diff --git a/drivers/of/Kconfig b/drivers/of/Kconfig
> index 80b5fd44ab1c..1f968b6a3dde 100644
> --- a/drivers/of/Kconfig
> +++ b/drivers/of/Kconfig
> @@ -12,6 +12,20 @@ menuconfig OF
>
> if OF
>
> +choice
No. This needs to be reworked such that a kernel rebuild is not needed
to run different tests. I suspect that the overlay approach will do that
for you.
> + prompt "Devicetree Runtime Tests"
> + default OF_UNITTEST
> +
> +config OF_KUNIT
> + bool "Devicetree KUnit support" if KUNIT
> + depends on UML
This is not a great dependency either...
Rob
next prev parent reply other threads:[~2023-03-08 19:49 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-02 1:38 [PATCH 0/8] clk: Add kunit tests for fixed rate and parent data Stephen Boyd
2023-03-02 1:38 ` [PATCH 1/8] dt-bindings: Add linux,kunit binding Stephen Boyd
2023-03-03 7:14 ` David Gow
2023-03-03 7:49 ` Geert Uytterhoeven
[not found] ` <377046f369227a11fbf9e67c3c122d79.sboyd@kernel.org>
2023-03-10 7:55 ` David Gow
2023-03-02 1:38 ` [PATCH 2/8] of: Enable DTB loading on UML for KUnit tests Stephen Boyd
2023-03-03 7:15 ` David Gow
[not found] ` <a97c9bb3a5addfb34af8ccabaa513026.sboyd@kernel.org>
2023-03-10 8:09 ` David Gow
[not found] ` <d64a086ddcb7c5ca5abecab0ca654259.sboyd@kernel.org>
2023-03-11 6:42 ` David Gow
2023-03-13 16:02 ` Frank Rowand
2023-03-14 4:28 ` Frank Rowand
2023-03-15 7:04 ` David Gow
2023-03-15 21:35 ` Frank Rowand
2023-03-16 0:45 ` Frank Rowand
2023-03-16 4:15 ` David Gow
2023-03-08 19:46 ` Rob Herring [this message]
2023-03-02 1:38 ` [PATCH 3/8] kunit: Add test managed platform_device/driver APIs Stephen Boyd
2023-03-03 7:15 ` David Gow
2023-03-03 14:35 ` Maxime Ripard
[not found] ` <dea61f59ea83c772b693b18db43c3eb7.sboyd@kernel.org>
2023-03-15 8:27 ` Maxime Ripard
[not found] ` <b0d4d450a7ad9b39336771b74b48f086.sboyd@kernel.org>
2023-03-10 8:19 ` David Gow
2023-03-02 1:38 ` [PATCH 4/8] clk: Add test managed clk provider/consumer APIs Stephen Boyd
2023-03-03 7:15 ` David Gow
[not found] ` <77b315f6b89eb256c516ee08b1c17312.sboyd@kernel.org>
2023-03-11 6:32 ` David Gow
2023-03-21 14:32 ` Maxime Ripard
2023-03-02 1:38 ` [PATCH 5/8] dt-bindings: kunit: Add fixed rate clk consumer test Stephen Boyd
2023-03-02 1:38 ` [PATCH 6/8] clk: Add KUnit tests for clk fixed rate basic type Stephen Boyd
2023-03-02 1:38 ` [PATCH 7/8] dt-bindings: clk: Add KUnit clk_parent_data test Stephen Boyd
2023-03-02 1:38 ` [PATCH 8/8] clk: Add KUnit tests for clks registered with struct clk_parent_data Stephen Boyd
2023-03-02 8:13 ` [PATCH 0/8] clk: Add kunit tests for fixed rate and parent data David Gow
2023-03-02 17:32 ` Rob Herring
[not found] ` <3759b28cca7ab751296d4dd83f2dcc51.sboyd@kernel.org>
2023-03-02 19:47 ` Geert Uytterhoeven
2023-03-05 3:32 ` Frank Rowand
2023-03-05 9:26 ` Geert Uytterhoeven
2023-03-06 5:32 ` Frank Rowand
2023-03-04 15:04 ` Frank Rowand
2023-03-04 14:48 ` Frank Rowand
2023-03-02 17:13 ` Rob Herring
[not found] ` <093867df6137ad9e964b7dd90fb58f1a.sboyd@kernel.org>
2023-03-02 20:18 ` Rob Herring
2023-03-04 15:37 ` Frank Rowand
[not found] ` <ecb5ede44d5bcc0430dad99e53d4477d.sboyd@kernel.org>
2023-03-04 15:39 ` Frank Rowand
2023-03-06 12:53 ` Rob Herring
2023-03-06 15:03 ` Frank Rowand
2023-03-04 15:33 ` Frank Rowand
2023-03-03 14:38 ` Maxime Ripard
2023-03-04 15:50 ` Frank Rowand
2023-03-10 7:48 ` David Gow
2023-03-13 15:30 ` Frank Rowand
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230308194652.GA3656473-robh@kernel.org \
--to=robh@kernel.org \
--cc=ansuelsmth@gmail.com \
--cc=anton.ivanov@cambridgegreys.com \
--cc=brendan.higgins@linux.dev \
--cc=davidgow@google.com \
--cc=devicetree@vger.kernel.org \
--cc=frowand.list@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=johannes@sipsolutions.net \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=kunit-dev@googlegroups.com \
--cc=linux-clk@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-um@lists.infradead.org \
--cc=mturquette@baylibre.com \
--cc=patches@lists.linux.dev \
--cc=rafael@kernel.org \
--cc=richard@nod.at \
--cc=sboyd@kernel.org \
--cc=vincent.whitchurch@axis.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).