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
WARNING: multiple messages have this Message-ID (diff)
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
_______________________________________________
linux-um mailing list
linux-um@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-um
next prev parent reply other threads:[~2023-03-08 19:49 UTC|newest]
Thread overview: 120+ 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 ` Stephen Boyd
2023-03-02 1:38 ` [PATCH 1/8] dt-bindings: Add linux,kunit binding Stephen Boyd
2023-03-02 1:38 ` Stephen Boyd
2023-03-03 7:14 ` David Gow
2023-03-03 7:14 ` David Gow
2023-03-03 7:49 ` Geert Uytterhoeven
2023-03-03 7:49 ` Geert Uytterhoeven
2023-03-09 23:12 ` Stephen Boyd
2023-03-09 23:12 ` Stephen Boyd
2023-03-10 7:55 ` David Gow
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-02 1:38 ` Stephen Boyd
2023-03-03 7:15 ` David Gow
2023-03-03 7:15 ` David Gow
2023-03-09 23:19 ` Stephen Boyd
2023-03-09 23:19 ` Stephen Boyd
2023-03-10 8:09 ` David Gow
2023-03-10 8:09 ` David Gow
2023-03-10 23:34 ` Stephen Boyd
2023-03-10 23:34 ` Stephen Boyd
2023-03-11 6:42 ` David Gow
2023-03-11 6:42 ` David Gow
2023-03-13 16:02 ` Frank Rowand
2023-03-13 16:02 ` Frank Rowand
2023-03-14 4:28 ` Frank Rowand
2023-03-14 4:28 ` Frank Rowand
2023-03-15 7:04 ` David Gow
2023-03-15 7:04 ` David Gow
2023-03-15 21:35 ` Frank Rowand
2023-03-15 21:35 ` Frank Rowand
2023-03-16 0:45 ` Frank Rowand
2023-03-16 0:45 ` Frank Rowand
2023-03-16 4:15 ` David Gow
2023-03-16 4:15 ` David Gow
2023-03-21 20:56 ` Stephen Boyd
2023-03-21 20:56 ` Stephen Boyd
2023-03-08 19:46 ` Rob Herring [this message]
2023-03-08 19:46 ` Rob Herring
2023-03-02 1:38 ` [PATCH 3/8] kunit: Add test managed platform_device/driver APIs Stephen Boyd
2023-03-02 1:38 ` Stephen Boyd
2023-03-03 7:15 ` David Gow
2023-03-03 7:15 ` David Gow
2023-03-03 14:35 ` Maxime Ripard
2023-03-03 14:35 ` Maxime Ripard
2023-03-09 23:31 ` Stephen Boyd
2023-03-09 23:31 ` Stephen Boyd
2023-03-15 8:27 ` Maxime Ripard
2023-03-15 8:27 ` Maxime Ripard
2023-03-09 23:25 ` Stephen Boyd
2023-03-09 23:25 ` Stephen Boyd
2023-03-10 8:19 ` David Gow
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-02 1:38 ` Stephen Boyd
2023-03-03 7:15 ` David Gow
2023-03-03 7:15 ` David Gow
2023-03-10 23:21 ` Stephen Boyd
2023-03-10 23:21 ` Stephen Boyd
2023-03-11 6:32 ` David Gow
2023-03-11 6:32 ` David Gow
2023-03-21 14:32 ` Maxime Ripard
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 ` 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 ` 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 ` 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 1:38 ` 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 8:13 ` David Gow
2023-03-02 17:32 ` Rob Herring
2023-03-02 17:32 ` Rob Herring
2023-03-02 19:27 ` Stephen Boyd
2023-03-02 19:27 ` Stephen Boyd
2023-03-02 19:47 ` Geert Uytterhoeven
2023-03-02 19:47 ` Geert Uytterhoeven
2023-03-05 3:32 ` Frank Rowand
2023-03-05 3:32 ` Frank Rowand
2023-03-05 9:26 ` Geert Uytterhoeven
2023-03-05 9:26 ` Geert Uytterhoeven
2023-03-06 5:32 ` Frank Rowand
2023-03-06 5:32 ` Frank Rowand
2023-03-04 15:04 ` Frank Rowand
2023-03-04 15:04 ` Frank Rowand
2023-03-07 21:53 ` Stephen Boyd
2023-03-07 21:53 ` Stephen Boyd
2023-03-04 14:48 ` Frank Rowand
2023-03-04 14:48 ` Frank Rowand
2023-03-02 17:13 ` Rob Herring
2023-03-02 17:13 ` Rob Herring
2023-03-02 19:44 ` Stephen Boyd
2023-03-02 19:44 ` Stephen Boyd
2023-03-02 20:18 ` Rob Herring
2023-03-02 20:18 ` Rob Herring
2023-03-02 23:57 ` Stephen Boyd
2023-03-02 23:57 ` Stephen Boyd
2023-03-04 15:39 ` Frank Rowand
2023-03-04 15:39 ` Frank Rowand
2023-03-06 12:53 ` Rob Herring
2023-03-06 12:53 ` Rob Herring
2023-03-06 15:03 ` Frank Rowand
2023-03-06 15:03 ` Frank Rowand
2023-03-04 15:37 ` Frank Rowand
2023-03-04 15:37 ` Frank Rowand
2023-03-04 15:33 ` Frank Rowand
2023-03-04 15:33 ` Frank Rowand
2023-03-03 14:38 ` Maxime Ripard
2023-03-03 14:38 ` Maxime Ripard
2023-03-07 22:37 ` Stephen Boyd
2023-03-07 22:37 ` Stephen Boyd
2023-03-04 15:50 ` Frank Rowand
2023-03-04 15:50 ` Frank Rowand
2023-03-10 7:48 ` David Gow
2023-03-10 7:48 ` David Gow
2023-03-13 15:30 ` Frank Rowand
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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.