From: Brian Masney <bmasney@redhat.com>
To: sboyd@kernel.org, mturquette@baylibre.com
Cc: linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org,
mripard@redhat.com
Subject: [PATCH 6/8] clk: test: introduce helper to create a mock mux
Date: Mon, 7 Apr 2025 09:12:56 -0400 [thread overview]
Message-ID: <20250407131258.70638-7-bmasney@redhat.com> (raw)
In-Reply-To: <20250407131258.70638-1-bmasney@redhat.com>
Introduce a helper to create a mock mux to reduce code duplication.
This also changes it so that the relevant clk_hws are registered with
the kunit framework.
Signed-off-by: Brian Masney <bmasney@redhat.com>
---
drivers/clk/clk_test.c | 141 +++++++++++++++--------------------------
1 file changed, 52 insertions(+), 89 deletions(-)
diff --git a/drivers/clk/clk_test.c b/drivers/clk/clk_test.c
index df5d4b25aa69..d72ce0226dc7 100644
--- a/drivers/clk/clk_test.c
+++ b/drivers/clk/clk_test.c
@@ -538,45 +538,64 @@ static struct kunit_suite clk_uncached_test_suite = {
.test_cases = clk_uncached_test_cases,
};
-static int
-clk_multiple_parents_mux_test_init(struct kunit *test)
-{
- struct clk_multiple_parent_ctx *ctx;
- const char *parents[2] = { "parent-0", "parent-1"};
+static int clk_init_multiple_parent_ctx(struct kunit *test,
+ struct clk_multiple_parent_ctx *ctx,
+ const char *parent0_name,
+ unsigned long parent0_rate,
+ const char *parent1_name,
+ unsigned long parent1_rate,
+ const char *mux_name, int mux_flags,
+ const struct clk_ops *mux_ops)
+{
+ const struct clk_hw *parents[2];
int ret;
- ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL);
- if (!ctx)
- return -ENOMEM;
- test->priv = ctx;
-
- ctx->parents_ctx[0].hw.init = CLK_HW_INIT_NO_PARENT("parent-0",
+ ctx->parents_ctx[0].hw.init = CLK_HW_INIT_NO_PARENT(parent0_name,
&clk_dummy_rate_ops,
0);
- ctx->parents_ctx[0].rate = DUMMY_CLOCK_RATE_1;
+ ctx->parents_ctx[0].rate = parent0_rate;
ret = clk_hw_register_kunit(test, NULL, &ctx->parents_ctx[0].hw);
if (ret)
return ret;
- ctx->parents_ctx[1].hw.init = CLK_HW_INIT_NO_PARENT("parent-1",
+ ctx->parents_ctx[1].hw.init = CLK_HW_INIT_NO_PARENT(parent1_name,
&clk_dummy_rate_ops,
0);
- ctx->parents_ctx[1].rate = DUMMY_CLOCK_RATE_2;
+ ctx->parents_ctx[1].rate = parent1_rate;
ret = clk_hw_register_kunit(test, NULL, &ctx->parents_ctx[1].hw);
if (ret)
return ret;
- ctx->current_parent = 0;
- ctx->hw.init = CLK_HW_INIT_PARENTS("test-mux", parents,
- &clk_multiple_parents_mux_ops,
- CLK_SET_RATE_PARENT);
+ parents[0] = &ctx->parents_ctx[0].hw;
+ parents[1] = &ctx->parents_ctx[1].hw;
+ ctx->hw.init = CLK_HW_INIT_PARENTS_HW(mux_name, parents,
+ mux_ops, mux_flags);
ret = clk_hw_register_kunit(test, NULL, &ctx->hw);
if (ret)
return ret;
+ ctx->current_parent = 0;
+
return 0;
}
+static int
+clk_multiple_parents_mux_test_init(struct kunit *test)
+{
+ struct clk_multiple_parent_ctx *ctx;
+
+ ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL);
+ if (!ctx)
+ return -ENOMEM;
+ test->priv = ctx;
+
+ return clk_init_multiple_parent_ctx(test, ctx,
+ "parent-0", DUMMY_CLOCK_RATE_1,
+ "parent-1", DUMMY_CLOCK_RATE_2,
+ "test-mux", CLK_SET_RATE_PARENT,
+ &clk_multiple_parents_mux_ops);
+}
+
/*
* Test that for a clock with multiple parents, clk_get_parent()
* actually returns the current one.
@@ -2532,7 +2551,6 @@ static int
clk_leaf_mux_set_rate_parent_test_init(struct kunit *test)
{
struct clk_leaf_mux_ctx *ctx;
- const char *top_parents[2] = { "parent-0", "parent-1" };
int ret;
ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL);
@@ -2540,27 +2558,11 @@ clk_leaf_mux_set_rate_parent_test_init(struct kunit *test)
return -ENOMEM;
test->priv = ctx;
- ctx->mux_ctx.parents_ctx[0].hw.init = CLK_HW_INIT_NO_PARENT("parent-0",
- &clk_dummy_rate_ops,
- 0);
- ctx->mux_ctx.parents_ctx[0].rate = DUMMY_CLOCK_RATE_1;
- ret = clk_hw_register(NULL, &ctx->mux_ctx.parents_ctx[0].hw);
- if (ret)
- return ret;
-
- ctx->mux_ctx.parents_ctx[1].hw.init = CLK_HW_INIT_NO_PARENT("parent-1",
- &clk_dummy_rate_ops,
- 0);
- ctx->mux_ctx.parents_ctx[1].rate = DUMMY_CLOCK_RATE_2;
- ret = clk_hw_register(NULL, &ctx->mux_ctx.parents_ctx[1].hw);
- if (ret)
- return ret;
-
- ctx->mux_ctx.current_parent = 0;
- ctx->mux_ctx.hw.init = CLK_HW_INIT_PARENTS("test-mux", top_parents,
- &clk_multiple_parents_mux_ops,
- 0);
- ret = clk_hw_register(NULL, &ctx->mux_ctx.hw);
+ ret = clk_init_multiple_parent_ctx(test, &ctx->mux_ctx,
+ "parent-0", DUMMY_CLOCK_RATE_1,
+ "parent-1", DUMMY_CLOCK_RATE_2,
+ "test-mux", 0,
+ &clk_multiple_parents_mux_ops);
if (ret)
return ret;
@@ -2748,7 +2750,6 @@ static int clk_mux_notifier_callback(struct notifier_block *nb,
static int clk_mux_notifier_test_init(struct kunit *test)
{
struct clk_mux_notifier_ctx *ctx;
- const char *top_parents[2] = { "parent-0", "parent-1" };
int ret;
ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL);
@@ -2759,27 +2760,11 @@ static int clk_mux_notifier_test_init(struct kunit *test)
init_waitqueue_head(&ctx->pre_rate_change.wq);
init_waitqueue_head(&ctx->post_rate_change.wq);
- ctx->mux_ctx.parents_ctx[0].hw.init = CLK_HW_INIT_NO_PARENT("parent-0",
- &clk_dummy_rate_ops,
- 0);
- ctx->mux_ctx.parents_ctx[0].rate = DUMMY_CLOCK_RATE_1;
- ret = clk_hw_register(NULL, &ctx->mux_ctx.parents_ctx[0].hw);
- if (ret)
- return ret;
-
- ctx->mux_ctx.parents_ctx[1].hw.init = CLK_HW_INIT_NO_PARENT("parent-1",
- &clk_dummy_rate_ops,
- 0);
- ctx->mux_ctx.parents_ctx[1].rate = DUMMY_CLOCK_RATE_2;
- ret = clk_hw_register(NULL, &ctx->mux_ctx.parents_ctx[1].hw);
- if (ret)
- return ret;
-
- ctx->mux_ctx.current_parent = 0;
- ctx->mux_ctx.hw.init = CLK_HW_INIT_PARENTS("test-mux", top_parents,
- &clk_multiple_parents_mux_ops,
- 0);
- ret = clk_hw_register(NULL, &ctx->mux_ctx.hw);
+ ret = clk_init_multiple_parent_ctx(test, &ctx->mux_ctx,
+ "parent-0", DUMMY_CLOCK_RATE_1,
+ "parent-1", DUMMY_CLOCK_RATE_2,
+ "test-mux", 0,
+ &clk_multiple_parents_mux_ops);
if (ret)
return ret;
@@ -2862,39 +2847,17 @@ static int
clk_mux_no_reparent_test_init(struct kunit *test)
{
struct clk_multiple_parent_ctx *ctx;
- const char *parents[2] = { "parent-0", "parent-1"};
- int ret;
ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL);
if (!ctx)
return -ENOMEM;
test->priv = ctx;
- ctx->parents_ctx[0].hw.init = CLK_HW_INIT_NO_PARENT("parent-0",
- &clk_dummy_rate_ops,
- 0);
- ctx->parents_ctx[0].rate = DUMMY_CLOCK_RATE_1;
- ret = clk_hw_register(NULL, &ctx->parents_ctx[0].hw);
- if (ret)
- return ret;
-
- ctx->parents_ctx[1].hw.init = CLK_HW_INIT_NO_PARENT("parent-1",
- &clk_dummy_rate_ops,
- 0);
- ctx->parents_ctx[1].rate = DUMMY_CLOCK_RATE_2;
- ret = clk_hw_register(NULL, &ctx->parents_ctx[1].hw);
- if (ret)
- return ret;
-
- ctx->current_parent = 0;
- ctx->hw.init = CLK_HW_INIT_PARENTS("test-mux", parents,
- &clk_multiple_parents_no_reparent_mux_ops,
- 0);
- ret = clk_hw_register(NULL, &ctx->hw);
- if (ret)
- return ret;
-
- return 0;
+ return clk_init_multiple_parent_ctx(test, ctx,
+ "parent-0", DUMMY_CLOCK_RATE_1,
+ "parent-1", DUMMY_CLOCK_RATE_2,
+ "test-mux", 0,
+ &clk_multiple_parents_no_reparent_mux_ops);
}
static void
--
2.49.0
next prev parent reply other threads:[~2025-04-07 13:13 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-07 13:12 [PATCH 0/8] clk: test: add tests for inconsistencies and limitations in the framework Brian Masney
2025-04-07 13:12 ` [PATCH 1/8] clk: test: introduce a few specific rate constants for mock testing Brian Masney
2025-04-07 13:12 ` [PATCH 2/8] clk: test: introduce clk_dummy_div for a mock divider Brian Masney
2025-04-07 13:12 ` [PATCH 3/8] clk: test: introduce test suite for sibling rate changes on a divider Brian Masney
2025-04-07 13:12 ` [PATCH 4/8] clk: test: introduce clk_dummy_gate for a mock gate Brian Masney
2025-04-07 13:12 ` [PATCH 5/8] clk: test: introduce test suite for sibling rate changes on a gate Brian Masney
2025-04-07 13:12 ` Brian Masney [this message]
2025-04-07 13:12 ` [PATCH 7/8] clk: test: introduce test variation for sibling rate changes on a mux Brian Masney
2025-04-07 13:12 ` [PATCH 8/8] clk: test: introduce test variation for sibling rate changes on a gate/mux Brian Masney
2025-05-28 23:22 ` [PATCH 0/8] clk: test: add tests for inconsistencies and limitations in the framework Brian Masney
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=20250407131258.70638-7-bmasney@redhat.com \
--to=bmasney@redhat.com \
--cc=linux-clk@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mripard@redhat.com \
--cc=mturquette@baylibre.com \
--cc=sboyd@kernel.org \
/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.