Merge tag 'kvm-s390-next-6.4-2' of https://git.kernel.org/pub/scm/linux/kernel/git...
[linux-block.git] / drivers / clk / clk_test.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Kunit test for clk rate management
4  */
5 #include <linux/clk.h>
6 #include <linux/clk-provider.h>
7
8 /* Needed for clk_hw_get_clk() */
9 #include "clk.h"
10
11 #include <kunit/test.h>
12
13 #define DUMMY_CLOCK_INIT_RATE   (42 * 1000 * 1000)
14 #define DUMMY_CLOCK_RATE_1      (142 * 1000 * 1000)
15 #define DUMMY_CLOCK_RATE_2      (242 * 1000 * 1000)
16
17 struct clk_dummy_context {
18         struct clk_hw hw;
19         unsigned long rate;
20 };
21
22 static unsigned long clk_dummy_recalc_rate(struct clk_hw *hw,
23                                            unsigned long parent_rate)
24 {
25         struct clk_dummy_context *ctx =
26                 container_of(hw, struct clk_dummy_context, hw);
27
28         return ctx->rate;
29 }
30
31 static int clk_dummy_determine_rate(struct clk_hw *hw,
32                                     struct clk_rate_request *req)
33 {
34         /* Just return the same rate without modifying it */
35         return 0;
36 }
37
38 static int clk_dummy_maximize_rate(struct clk_hw *hw,
39                                    struct clk_rate_request *req)
40 {
41         /*
42          * If there's a maximum set, always run the clock at the maximum
43          * allowed.
44          */
45         if (req->max_rate < ULONG_MAX)
46                 req->rate = req->max_rate;
47
48         return 0;
49 }
50
51 static int clk_dummy_minimize_rate(struct clk_hw *hw,
52                                    struct clk_rate_request *req)
53 {
54         /*
55          * If there's a minimum set, always run the clock at the minimum
56          * allowed.
57          */
58         if (req->min_rate > 0)
59                 req->rate = req->min_rate;
60
61         return 0;
62 }
63
64 static int clk_dummy_set_rate(struct clk_hw *hw,
65                               unsigned long rate,
66                               unsigned long parent_rate)
67 {
68         struct clk_dummy_context *ctx =
69                 container_of(hw, struct clk_dummy_context, hw);
70
71         ctx->rate = rate;
72         return 0;
73 }
74
75 static int clk_dummy_single_set_parent(struct clk_hw *hw, u8 index)
76 {
77         if (index >= clk_hw_get_num_parents(hw))
78                 return -EINVAL;
79
80         return 0;
81 }
82
83 static u8 clk_dummy_single_get_parent(struct clk_hw *hw)
84 {
85         return 0;
86 }
87
88 static const struct clk_ops clk_dummy_rate_ops = {
89         .recalc_rate = clk_dummy_recalc_rate,
90         .determine_rate = clk_dummy_determine_rate,
91         .set_rate = clk_dummy_set_rate,
92 };
93
94 static const struct clk_ops clk_dummy_maximize_rate_ops = {
95         .recalc_rate = clk_dummy_recalc_rate,
96         .determine_rate = clk_dummy_maximize_rate,
97         .set_rate = clk_dummy_set_rate,
98 };
99
100 static const struct clk_ops clk_dummy_minimize_rate_ops = {
101         .recalc_rate = clk_dummy_recalc_rate,
102         .determine_rate = clk_dummy_minimize_rate,
103         .set_rate = clk_dummy_set_rate,
104 };
105
106 static const struct clk_ops clk_dummy_single_parent_ops = {
107         .set_parent = clk_dummy_single_set_parent,
108         .get_parent = clk_dummy_single_get_parent,
109 };
110
111 struct clk_multiple_parent_ctx {
112         struct clk_dummy_context parents_ctx[2];
113         struct clk_hw hw;
114         u8 current_parent;
115 };
116
117 static int clk_multiple_parents_mux_set_parent(struct clk_hw *hw, u8 index)
118 {
119         struct clk_multiple_parent_ctx *ctx =
120                 container_of(hw, struct clk_multiple_parent_ctx, hw);
121
122         if (index >= clk_hw_get_num_parents(hw))
123                 return -EINVAL;
124
125         ctx->current_parent = index;
126
127         return 0;
128 }
129
130 static u8 clk_multiple_parents_mux_get_parent(struct clk_hw *hw)
131 {
132         struct clk_multiple_parent_ctx *ctx =
133                 container_of(hw, struct clk_multiple_parent_ctx, hw);
134
135         return ctx->current_parent;
136 }
137
138 static const struct clk_ops clk_multiple_parents_mux_ops = {
139         .get_parent = clk_multiple_parents_mux_get_parent,
140         .set_parent = clk_multiple_parents_mux_set_parent,
141         .determine_rate = __clk_mux_determine_rate_closest,
142 };
143
144 static int clk_test_init_with_ops(struct kunit *test, const struct clk_ops *ops)
145 {
146         struct clk_dummy_context *ctx;
147         struct clk_init_data init = { };
148         int ret;
149
150         ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL);
151         if (!ctx)
152                 return -ENOMEM;
153         ctx->rate = DUMMY_CLOCK_INIT_RATE;
154         test->priv = ctx;
155
156         init.name = "test_dummy_rate";
157         init.ops = ops;
158         ctx->hw.init = &init;
159
160         ret = clk_hw_register(NULL, &ctx->hw);
161         if (ret)
162                 return ret;
163
164         return 0;
165 }
166
167 static int clk_test_init(struct kunit *test)
168 {
169         return clk_test_init_with_ops(test, &clk_dummy_rate_ops);
170 }
171
172 static int clk_maximize_test_init(struct kunit *test)
173 {
174         return clk_test_init_with_ops(test, &clk_dummy_maximize_rate_ops);
175 }
176
177 static int clk_minimize_test_init(struct kunit *test)
178 {
179         return clk_test_init_with_ops(test, &clk_dummy_minimize_rate_ops);
180 }
181
182 static void clk_test_exit(struct kunit *test)
183 {
184         struct clk_dummy_context *ctx = test->priv;
185
186         clk_hw_unregister(&ctx->hw);
187 }
188
189 /*
190  * Test that the actual rate matches what is returned by clk_get_rate()
191  */
192 static void clk_test_get_rate(struct kunit *test)
193 {
194         struct clk_dummy_context *ctx = test->priv;
195         struct clk_hw *hw = &ctx->hw;
196         struct clk *clk = clk_hw_get_clk(hw, NULL);
197         unsigned long rate;
198
199         rate = clk_get_rate(clk);
200         KUNIT_ASSERT_GT(test, rate, 0);
201         KUNIT_EXPECT_EQ(test, rate, ctx->rate);
202
203         clk_put(clk);
204 }
205
206 /*
207  * Test that, after a call to clk_set_rate(), the rate returned by
208  * clk_get_rate() matches.
209  *
210  * This assumes that clk_ops.determine_rate or clk_ops.round_rate won't
211  * modify the requested rate, which is our case in clk_dummy_rate_ops.
212  */
213 static void clk_test_set_get_rate(struct kunit *test)
214 {
215         struct clk_dummy_context *ctx = test->priv;
216         struct clk_hw *hw = &ctx->hw;
217         struct clk *clk = clk_hw_get_clk(hw, NULL);
218         unsigned long rate;
219
220         KUNIT_ASSERT_EQ(test,
221                         clk_set_rate(clk, DUMMY_CLOCK_RATE_1),
222                         0);
223
224         rate = clk_get_rate(clk);
225         KUNIT_ASSERT_GT(test, rate, 0);
226         KUNIT_EXPECT_EQ(test, rate, DUMMY_CLOCK_RATE_1);
227
228         clk_put(clk);
229 }
230
231 /*
232  * Test that, after several calls to clk_set_rate(), the rate returned
233  * by clk_get_rate() matches the last one.
234  *
235  * This assumes that clk_ops.determine_rate or clk_ops.round_rate won't
236  * modify the requested rate, which is our case in clk_dummy_rate_ops.
237  */
238 static void clk_test_set_set_get_rate(struct kunit *test)
239 {
240         struct clk_dummy_context *ctx = test->priv;
241         struct clk_hw *hw = &ctx->hw;
242         struct clk *clk = clk_hw_get_clk(hw, NULL);
243         unsigned long rate;
244
245         KUNIT_ASSERT_EQ(test,
246                         clk_set_rate(clk, DUMMY_CLOCK_RATE_1),
247                         0);
248
249         KUNIT_ASSERT_EQ(test,
250                         clk_set_rate(clk, DUMMY_CLOCK_RATE_2),
251                         0);
252
253         rate = clk_get_rate(clk);
254         KUNIT_ASSERT_GT(test, rate, 0);
255         KUNIT_EXPECT_EQ(test, rate, DUMMY_CLOCK_RATE_2);
256
257         clk_put(clk);
258 }
259
260 /*
261  * Test that clk_round_rate and clk_set_rate are consitent and will
262  * return the same frequency.
263  */
264 static void clk_test_round_set_get_rate(struct kunit *test)
265 {
266         struct clk_dummy_context *ctx = test->priv;
267         struct clk_hw *hw = &ctx->hw;
268         struct clk *clk = clk_hw_get_clk(hw, NULL);
269         unsigned long rounded_rate, set_rate;
270
271         rounded_rate = clk_round_rate(clk, DUMMY_CLOCK_RATE_1);
272         KUNIT_ASSERT_GT(test, rounded_rate, 0);
273         KUNIT_EXPECT_EQ(test, rounded_rate, DUMMY_CLOCK_RATE_1);
274
275         KUNIT_ASSERT_EQ(test,
276                         clk_set_rate(clk, DUMMY_CLOCK_RATE_1),
277                         0);
278
279         set_rate = clk_get_rate(clk);
280         KUNIT_ASSERT_GT(test, set_rate, 0);
281         KUNIT_EXPECT_EQ(test, rounded_rate, set_rate);
282
283         clk_put(clk);
284 }
285
286 static struct kunit_case clk_test_cases[] = {
287         KUNIT_CASE(clk_test_get_rate),
288         KUNIT_CASE(clk_test_set_get_rate),
289         KUNIT_CASE(clk_test_set_set_get_rate),
290         KUNIT_CASE(clk_test_round_set_get_rate),
291         {}
292 };
293
294 /*
295  * Test suite for a basic rate clock, without any parent.
296  *
297  * These tests exercise the rate API with simple scenarios
298  */
299 static struct kunit_suite clk_test_suite = {
300         .name = "clk-test",
301         .init = clk_test_init,
302         .exit = clk_test_exit,
303         .test_cases = clk_test_cases,
304 };
305
306 static int clk_uncached_test_init(struct kunit *test)
307 {
308         struct clk_dummy_context *ctx;
309         int ret;
310
311         ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL);
312         if (!ctx)
313                 return -ENOMEM;
314         test->priv = ctx;
315
316         ctx->rate = DUMMY_CLOCK_INIT_RATE;
317         ctx->hw.init = CLK_HW_INIT_NO_PARENT("test-clk",
318                                              &clk_dummy_rate_ops,
319                                              CLK_GET_RATE_NOCACHE);
320
321         ret = clk_hw_register(NULL, &ctx->hw);
322         if (ret)
323                 return ret;
324
325         return 0;
326 }
327
328 /*
329  * Test that for an uncached clock, the clock framework doesn't cache
330  * the rate and clk_get_rate() will return the underlying clock rate
331  * even if it changed.
332  */
333 static void clk_test_uncached_get_rate(struct kunit *test)
334 {
335         struct clk_dummy_context *ctx = test->priv;
336         struct clk_hw *hw = &ctx->hw;
337         struct clk *clk = clk_hw_get_clk(hw, NULL);
338         unsigned long rate;
339
340         rate = clk_get_rate(clk);
341         KUNIT_ASSERT_GT(test, rate, 0);
342         KUNIT_EXPECT_EQ(test, rate, DUMMY_CLOCK_INIT_RATE);
343
344         /* We change the rate behind the clock framework's back */
345         ctx->rate = DUMMY_CLOCK_RATE_1;
346         rate = clk_get_rate(clk);
347         KUNIT_ASSERT_GT(test, rate, 0);
348         KUNIT_EXPECT_EQ(test, rate, DUMMY_CLOCK_RATE_1);
349
350         clk_put(clk);
351 }
352
353 /*
354  * Test that for an uncached clock, clk_set_rate_range() will work
355  * properly if the rate hasn't changed.
356  */
357 static void clk_test_uncached_set_range(struct kunit *test)
358 {
359         struct clk_dummy_context *ctx = test->priv;
360         struct clk_hw *hw = &ctx->hw;
361         struct clk *clk = clk_hw_get_clk(hw, NULL);
362         unsigned long rate;
363
364         KUNIT_ASSERT_EQ(test,
365                         clk_set_rate_range(clk,
366                                            DUMMY_CLOCK_RATE_1,
367                                            DUMMY_CLOCK_RATE_2),
368                         0);
369
370         rate = clk_get_rate(clk);
371         KUNIT_ASSERT_GT(test, rate, 0);
372         KUNIT_EXPECT_GE(test, rate, DUMMY_CLOCK_RATE_1);
373         KUNIT_EXPECT_LE(test, rate, DUMMY_CLOCK_RATE_2);
374
375         clk_put(clk);
376 }
377
378 /*
379  * Test that for an uncached clock, clk_set_rate_range() will work
380  * properly if the rate has changed in hardware.
381  *
382  * In this case, it means that if the rate wasn't initially in the range
383  * we're trying to set, but got changed at some point into the range
384  * without the kernel knowing about it, its rate shouldn't be affected.
385  */
386 static void clk_test_uncached_updated_rate_set_range(struct kunit *test)
387 {
388         struct clk_dummy_context *ctx = test->priv;
389         struct clk_hw *hw = &ctx->hw;
390         struct clk *clk = clk_hw_get_clk(hw, NULL);
391         unsigned long rate;
392
393         /* We change the rate behind the clock framework's back */
394         ctx->rate = DUMMY_CLOCK_RATE_1 + 1000;
395         KUNIT_ASSERT_EQ(test,
396                         clk_set_rate_range(clk,
397                                            DUMMY_CLOCK_RATE_1,
398                                            DUMMY_CLOCK_RATE_2),
399                         0);
400
401         rate = clk_get_rate(clk);
402         KUNIT_ASSERT_GT(test, rate, 0);
403         KUNIT_EXPECT_EQ(test, rate, DUMMY_CLOCK_RATE_1 + 1000);
404
405         clk_put(clk);
406 }
407
408 static struct kunit_case clk_uncached_test_cases[] = {
409         KUNIT_CASE(clk_test_uncached_get_rate),
410         KUNIT_CASE(clk_test_uncached_set_range),
411         KUNIT_CASE(clk_test_uncached_updated_rate_set_range),
412         {}
413 };
414
415 /*
416  * Test suite for a basic, uncached, rate clock, without any parent.
417  *
418  * These tests exercise the rate API with simple scenarios
419  */
420 static struct kunit_suite clk_uncached_test_suite = {
421         .name = "clk-uncached-test",
422         .init = clk_uncached_test_init,
423         .exit = clk_test_exit,
424         .test_cases = clk_uncached_test_cases,
425 };
426
427 static int
428 clk_multiple_parents_mux_test_init(struct kunit *test)
429 {
430         struct clk_multiple_parent_ctx *ctx;
431         const char *parents[2] = { "parent-0", "parent-1"};
432         int ret;
433
434         ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL);
435         if (!ctx)
436                 return -ENOMEM;
437         test->priv = ctx;
438
439         ctx->parents_ctx[0].hw.init = CLK_HW_INIT_NO_PARENT("parent-0",
440                                                             &clk_dummy_rate_ops,
441                                                             0);
442         ctx->parents_ctx[0].rate = DUMMY_CLOCK_RATE_1;
443         ret = clk_hw_register(NULL, &ctx->parents_ctx[0].hw);
444         if (ret)
445                 return ret;
446
447         ctx->parents_ctx[1].hw.init = CLK_HW_INIT_NO_PARENT("parent-1",
448                                                             &clk_dummy_rate_ops,
449                                                             0);
450         ctx->parents_ctx[1].rate = DUMMY_CLOCK_RATE_2;
451         ret = clk_hw_register(NULL, &ctx->parents_ctx[1].hw);
452         if (ret)
453                 return ret;
454
455         ctx->current_parent = 0;
456         ctx->hw.init = CLK_HW_INIT_PARENTS("test-mux", parents,
457                                            &clk_multiple_parents_mux_ops,
458                                            CLK_SET_RATE_PARENT);
459         ret = clk_hw_register(NULL, &ctx->hw);
460         if (ret)
461                 return ret;
462
463         return 0;
464 }
465
466 static void
467 clk_multiple_parents_mux_test_exit(struct kunit *test)
468 {
469         struct clk_multiple_parent_ctx *ctx = test->priv;
470
471         clk_hw_unregister(&ctx->hw);
472         clk_hw_unregister(&ctx->parents_ctx[0].hw);
473         clk_hw_unregister(&ctx->parents_ctx[1].hw);
474 }
475
476 /*
477  * Test that for a clock with multiple parents, clk_get_parent()
478  * actually returns the current one.
479  */
480 static void
481 clk_test_multiple_parents_mux_get_parent(struct kunit *test)
482 {
483         struct clk_multiple_parent_ctx *ctx = test->priv;
484         struct clk_hw *hw = &ctx->hw;
485         struct clk *clk = clk_hw_get_clk(hw, NULL);
486         struct clk *parent = clk_hw_get_clk(&ctx->parents_ctx[0].hw, NULL);
487
488         KUNIT_EXPECT_TRUE(test, clk_is_match(clk_get_parent(clk), parent));
489
490         clk_put(parent);
491         clk_put(clk);
492 }
493
494 /*
495  * Test that for a clock with a multiple parents, clk_has_parent()
496  * actually reports all of them as parents.
497  */
498 static void
499 clk_test_multiple_parents_mux_has_parent(struct kunit *test)
500 {
501         struct clk_multiple_parent_ctx *ctx = test->priv;
502         struct clk_hw *hw = &ctx->hw;
503         struct clk *clk = clk_hw_get_clk(hw, NULL);
504         struct clk *parent;
505
506         parent = clk_hw_get_clk(&ctx->parents_ctx[0].hw, NULL);
507         KUNIT_EXPECT_TRUE(test, clk_has_parent(clk, parent));
508         clk_put(parent);
509
510         parent = clk_hw_get_clk(&ctx->parents_ctx[1].hw, NULL);
511         KUNIT_EXPECT_TRUE(test, clk_has_parent(clk, parent));
512         clk_put(parent);
513
514         clk_put(clk);
515 }
516
517 /*
518  * Test that for a clock with a multiple parents, if we set a range on
519  * that clock and the parent is changed, its rate after the reparenting
520  * is still within the range we asked for.
521  *
522  * FIXME: clk_set_parent() only does the reparenting but doesn't
523  * reevaluate whether the new clock rate is within its boundaries or
524  * not.
525  */
526 static void
527 clk_test_multiple_parents_mux_set_range_set_parent_get_rate(struct kunit *test)
528 {
529         struct clk_multiple_parent_ctx *ctx = test->priv;
530         struct clk_hw *hw = &ctx->hw;
531         struct clk *clk = clk_hw_get_clk(hw, NULL);
532         struct clk *parent1, *parent2;
533         unsigned long rate;
534         int ret;
535
536         kunit_skip(test, "This needs to be fixed in the core.");
537
538         parent1 = clk_hw_get_clk(&ctx->parents_ctx[0].hw, NULL);
539         KUNIT_ASSERT_NOT_ERR_OR_NULL(test, parent1);
540         KUNIT_ASSERT_TRUE(test, clk_is_match(clk_get_parent(clk), parent1));
541
542         parent2 = clk_hw_get_clk(&ctx->parents_ctx[1].hw, NULL);
543         KUNIT_ASSERT_NOT_ERR_OR_NULL(test, parent2);
544
545         ret = clk_set_rate(parent1, DUMMY_CLOCK_RATE_1);
546         KUNIT_ASSERT_EQ(test, ret, 0);
547
548         ret = clk_set_rate(parent2, DUMMY_CLOCK_RATE_2);
549         KUNIT_ASSERT_EQ(test, ret, 0);
550
551         ret = clk_set_rate_range(clk,
552                                  DUMMY_CLOCK_RATE_1 - 1000,
553                                  DUMMY_CLOCK_RATE_1 + 1000);
554         KUNIT_ASSERT_EQ(test, ret, 0);
555
556         ret = clk_set_parent(clk, parent2);
557         KUNIT_ASSERT_EQ(test, ret, 0);
558
559         rate = clk_get_rate(clk);
560         KUNIT_ASSERT_GT(test, rate, 0);
561         KUNIT_EXPECT_GE(test, rate, DUMMY_CLOCK_RATE_1 - 1000);
562         KUNIT_EXPECT_LE(test, rate, DUMMY_CLOCK_RATE_1 + 1000);
563
564         clk_put(parent2);
565         clk_put(parent1);
566         clk_put(clk);
567 }
568
569 static struct kunit_case clk_multiple_parents_mux_test_cases[] = {
570         KUNIT_CASE(clk_test_multiple_parents_mux_get_parent),
571         KUNIT_CASE(clk_test_multiple_parents_mux_has_parent),
572         KUNIT_CASE(clk_test_multiple_parents_mux_set_range_set_parent_get_rate),
573         {}
574 };
575
576 /*
577  * Test suite for a basic mux clock with two parents, with
578  * CLK_SET_RATE_PARENT on the child.
579  *
580  * These tests exercise the consumer API and check that the state of the
581  * child and parents are sane and consistent.
582  */
583 static struct kunit_suite
584 clk_multiple_parents_mux_test_suite = {
585         .name = "clk-multiple-parents-mux-test",
586         .init = clk_multiple_parents_mux_test_init,
587         .exit = clk_multiple_parents_mux_test_exit,
588         .test_cases = clk_multiple_parents_mux_test_cases,
589 };
590
591 static int
592 clk_orphan_transparent_multiple_parent_mux_test_init(struct kunit *test)
593 {
594         struct clk_multiple_parent_ctx *ctx;
595         const char *parents[2] = { "missing-parent", "proper-parent"};
596         int ret;
597
598         ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL);
599         if (!ctx)
600                 return -ENOMEM;
601         test->priv = ctx;
602
603         ctx->parents_ctx[1].hw.init = CLK_HW_INIT_NO_PARENT("proper-parent",
604                                                             &clk_dummy_rate_ops,
605                                                             0);
606         ctx->parents_ctx[1].rate = DUMMY_CLOCK_INIT_RATE;
607         ret = clk_hw_register(NULL, &ctx->parents_ctx[1].hw);
608         if (ret)
609                 return ret;
610
611         ctx->hw.init = CLK_HW_INIT_PARENTS("test-orphan-mux", parents,
612                                            &clk_multiple_parents_mux_ops,
613                                            CLK_SET_RATE_PARENT);
614         ret = clk_hw_register(NULL, &ctx->hw);
615         if (ret)
616                 return ret;
617
618         return 0;
619 }
620
621 static void
622 clk_orphan_transparent_multiple_parent_mux_test_exit(struct kunit *test)
623 {
624         struct clk_multiple_parent_ctx *ctx = test->priv;
625
626         clk_hw_unregister(&ctx->hw);
627         clk_hw_unregister(&ctx->parents_ctx[1].hw);
628 }
629
630 /*
631  * Test that, for a mux whose current parent hasn't been registered yet and is
632  * thus orphan, clk_get_parent() will return NULL.
633  */
634 static void
635 clk_test_orphan_transparent_multiple_parent_mux_get_parent(struct kunit *test)
636 {
637         struct clk_multiple_parent_ctx *ctx = test->priv;
638         struct clk_hw *hw = &ctx->hw;
639         struct clk *clk = clk_hw_get_clk(hw, NULL);
640
641         KUNIT_EXPECT_PTR_EQ(test, clk_get_parent(clk), NULL);
642
643         clk_put(clk);
644 }
645
646 /*
647  * Test that, for a mux whose current parent hasn't been registered yet,
648  * calling clk_set_parent() to a valid parent will properly update the
649  * mux parent and its orphan status.
650  */
651 static void
652 clk_test_orphan_transparent_multiple_parent_mux_set_parent(struct kunit *test)
653 {
654         struct clk_multiple_parent_ctx *ctx = test->priv;
655         struct clk_hw *hw = &ctx->hw;
656         struct clk *clk = clk_hw_get_clk(hw, NULL);
657         struct clk *parent, *new_parent;
658         int ret;
659
660         parent = clk_hw_get_clk(&ctx->parents_ctx[1].hw, NULL);
661         KUNIT_ASSERT_NOT_ERR_OR_NULL(test, parent);
662
663         ret = clk_set_parent(clk, parent);
664         KUNIT_ASSERT_EQ(test, ret, 0);
665
666         new_parent = clk_get_parent(clk);
667         KUNIT_ASSERT_NOT_ERR_OR_NULL(test, parent);
668         KUNIT_EXPECT_TRUE(test, clk_is_match(parent, new_parent));
669
670         clk_put(parent);
671         clk_put(clk);
672 }
673
674 /*
675  * Test that, for a mux that started orphan but got switched to a valid
676  * parent, calling clk_drop_range() on the mux won't affect the parent
677  * rate.
678  */
679 static void
680 clk_test_orphan_transparent_multiple_parent_mux_set_parent_drop_range(struct kunit *test)
681 {
682         struct clk_multiple_parent_ctx *ctx = test->priv;
683         struct clk_hw *hw = &ctx->hw;
684         struct clk *clk = clk_hw_get_clk(hw, NULL);
685         struct clk *parent;
686         unsigned long parent_rate, new_parent_rate;
687         int ret;
688
689         parent = clk_hw_get_clk(&ctx->parents_ctx[1].hw, NULL);
690         KUNIT_ASSERT_NOT_ERR_OR_NULL(test, parent);
691
692         parent_rate = clk_get_rate(parent);
693         KUNIT_ASSERT_GT(test, parent_rate, 0);
694
695         ret = clk_set_parent(clk, parent);
696         KUNIT_ASSERT_EQ(test, ret, 0);
697
698         ret = clk_drop_range(clk);
699         KUNIT_ASSERT_EQ(test, ret, 0);
700
701         new_parent_rate = clk_get_rate(clk);
702         KUNIT_ASSERT_GT(test, new_parent_rate, 0);
703         KUNIT_EXPECT_EQ(test, parent_rate, new_parent_rate);
704
705         clk_put(parent);
706         clk_put(clk);
707 }
708
709 /*
710  * Test that, for a mux that started orphan but got switched to a valid
711  * parent, the rate of the mux and its new parent are consistent.
712  */
713 static void
714 clk_test_orphan_transparent_multiple_parent_mux_set_parent_get_rate(struct kunit *test)
715 {
716         struct clk_multiple_parent_ctx *ctx = test->priv;
717         struct clk_hw *hw = &ctx->hw;
718         struct clk *clk = clk_hw_get_clk(hw, NULL);
719         struct clk *parent;
720         unsigned long parent_rate, rate;
721         int ret;
722
723         parent = clk_hw_get_clk(&ctx->parents_ctx[1].hw, NULL);
724         KUNIT_ASSERT_NOT_ERR_OR_NULL(test, parent);
725
726         parent_rate = clk_get_rate(parent);
727         KUNIT_ASSERT_GT(test, parent_rate, 0);
728
729         ret = clk_set_parent(clk, parent);
730         KUNIT_ASSERT_EQ(test, ret, 0);
731
732         rate = clk_get_rate(clk);
733         KUNIT_ASSERT_GT(test, rate, 0);
734         KUNIT_EXPECT_EQ(test, parent_rate, rate);
735
736         clk_put(parent);
737         clk_put(clk);
738 }
739
740 /*
741  * Test that, for a mux that started orphan but got switched to a valid
742  * parent, calling clk_put() on the mux won't affect the parent rate.
743  */
744 static void
745 clk_test_orphan_transparent_multiple_parent_mux_set_parent_put(struct kunit *test)
746 {
747         struct clk_multiple_parent_ctx *ctx = test->priv;
748         struct clk *clk, *parent;
749         unsigned long parent_rate, new_parent_rate;
750         int ret;
751
752         parent = clk_hw_get_clk(&ctx->parents_ctx[1].hw, NULL);
753         KUNIT_ASSERT_NOT_ERR_OR_NULL(test, parent);
754
755         clk = clk_hw_get_clk(&ctx->hw, NULL);
756         KUNIT_ASSERT_NOT_ERR_OR_NULL(test, clk);
757
758         parent_rate = clk_get_rate(parent);
759         KUNIT_ASSERT_GT(test, parent_rate, 0);
760
761         ret = clk_set_parent(clk, parent);
762         KUNIT_ASSERT_EQ(test, ret, 0);
763
764         clk_put(clk);
765
766         new_parent_rate = clk_get_rate(parent);
767         KUNIT_ASSERT_GT(test, new_parent_rate, 0);
768         KUNIT_EXPECT_EQ(test, parent_rate, new_parent_rate);
769
770         clk_put(parent);
771 }
772
773 /*
774  * Test that, for a mux that started orphan but got switched to a valid
775  * parent, calling clk_set_rate_range() will affect the parent state if
776  * its rate is out of range.
777  */
778 static void
779 clk_test_orphan_transparent_multiple_parent_mux_set_parent_set_range_modified(struct kunit *test)
780 {
781         struct clk_multiple_parent_ctx *ctx = test->priv;
782         struct clk_hw *hw = &ctx->hw;
783         struct clk *clk = clk_hw_get_clk(hw, NULL);
784         struct clk *parent;
785         unsigned long rate;
786         int ret;
787
788         parent = clk_hw_get_clk(&ctx->parents_ctx[1].hw, NULL);
789         KUNIT_ASSERT_NOT_ERR_OR_NULL(test, parent);
790
791         ret = clk_set_parent(clk, parent);
792         KUNIT_ASSERT_EQ(test, ret, 0);
793
794         ret = clk_set_rate_range(clk, DUMMY_CLOCK_RATE_1, DUMMY_CLOCK_RATE_2);
795         KUNIT_ASSERT_EQ(test, ret, 0);
796
797         rate = clk_get_rate(clk);
798         KUNIT_ASSERT_GT(test, rate, 0);
799         KUNIT_EXPECT_GE(test, rate, DUMMY_CLOCK_RATE_1);
800         KUNIT_EXPECT_LE(test, rate, DUMMY_CLOCK_RATE_2);
801
802         clk_put(parent);
803         clk_put(clk);
804 }
805
806 /*
807  * Test that, for a mux that started orphan but got switched to a valid
808  * parent, calling clk_set_rate_range() won't affect the parent state if
809  * its rate is within range.
810  */
811 static void
812 clk_test_orphan_transparent_multiple_parent_mux_set_parent_set_range_untouched(struct kunit *test)
813 {
814         struct clk_multiple_parent_ctx *ctx = test->priv;
815         struct clk_hw *hw = &ctx->hw;
816         struct clk *clk = clk_hw_get_clk(hw, NULL);
817         struct clk *parent;
818         unsigned long parent_rate, new_parent_rate;
819         int ret;
820
821         parent = clk_hw_get_clk(&ctx->parents_ctx[1].hw, NULL);
822         KUNIT_ASSERT_NOT_ERR_OR_NULL(test, parent);
823
824         parent_rate = clk_get_rate(parent);
825         KUNIT_ASSERT_GT(test, parent_rate, 0);
826
827         ret = clk_set_parent(clk, parent);
828         KUNIT_ASSERT_EQ(test, ret, 0);
829
830         ret = clk_set_rate_range(clk,
831                                  DUMMY_CLOCK_INIT_RATE - 1000,
832                                  DUMMY_CLOCK_INIT_RATE + 1000);
833         KUNIT_ASSERT_EQ(test, ret, 0);
834
835         new_parent_rate = clk_get_rate(parent);
836         KUNIT_ASSERT_GT(test, new_parent_rate, 0);
837         KUNIT_EXPECT_EQ(test, parent_rate, new_parent_rate);
838
839         clk_put(parent);
840         clk_put(clk);
841 }
842
843 /*
844  * Test that, for a mux whose current parent hasn't been registered yet,
845  * calling clk_set_rate_range() will succeed, and will be taken into
846  * account when rounding a rate.
847  */
848 static void
849 clk_test_orphan_transparent_multiple_parent_mux_set_range_round_rate(struct kunit *test)
850 {
851         struct clk_multiple_parent_ctx *ctx = test->priv;
852         struct clk_hw *hw = &ctx->hw;
853         struct clk *clk = clk_hw_get_clk(hw, NULL);
854         unsigned long rate;
855         int ret;
856
857         ret = clk_set_rate_range(clk, DUMMY_CLOCK_RATE_1, DUMMY_CLOCK_RATE_2);
858         KUNIT_ASSERT_EQ(test, ret, 0);
859
860         rate = clk_round_rate(clk, DUMMY_CLOCK_RATE_1 - 1000);
861         KUNIT_ASSERT_GT(test, rate, 0);
862         KUNIT_EXPECT_GE(test, rate, DUMMY_CLOCK_RATE_1);
863         KUNIT_EXPECT_LE(test, rate, DUMMY_CLOCK_RATE_2);
864
865         clk_put(clk);
866 }
867
868 /*
869  * Test that, for a mux that started orphan, was assigned and rate and
870  * then got switched to a valid parent, its rate is eventually within
871  * range.
872  *
873  * FIXME: Even though we update the rate as part of clk_set_parent(), we
874  * don't evaluate whether that new rate is within range and needs to be
875  * adjusted.
876  */
877 static void
878 clk_test_orphan_transparent_multiple_parent_mux_set_range_set_parent_get_rate(struct kunit *test)
879 {
880         struct clk_multiple_parent_ctx *ctx = test->priv;
881         struct clk_hw *hw = &ctx->hw;
882         struct clk *clk = clk_hw_get_clk(hw, NULL);
883         struct clk *parent;
884         unsigned long rate;
885         int ret;
886
887         kunit_skip(test, "This needs to be fixed in the core.");
888
889         clk_hw_set_rate_range(hw, DUMMY_CLOCK_RATE_1, DUMMY_CLOCK_RATE_2);
890
891         parent = clk_hw_get_clk(&ctx->parents_ctx[1].hw, NULL);
892         KUNIT_ASSERT_NOT_ERR_OR_NULL(test, parent);
893
894         ret = clk_set_parent(clk, parent);
895         KUNIT_ASSERT_EQ(test, ret, 0);
896
897         rate = clk_get_rate(clk);
898         KUNIT_ASSERT_GT(test, rate, 0);
899         KUNIT_EXPECT_GE(test, rate, DUMMY_CLOCK_RATE_1);
900         KUNIT_EXPECT_LE(test, rate, DUMMY_CLOCK_RATE_2);
901
902         clk_put(parent);
903         clk_put(clk);
904 }
905
906 static struct kunit_case clk_orphan_transparent_multiple_parent_mux_test_cases[] = {
907         KUNIT_CASE(clk_test_orphan_transparent_multiple_parent_mux_get_parent),
908         KUNIT_CASE(clk_test_orphan_transparent_multiple_parent_mux_set_parent),
909         KUNIT_CASE(clk_test_orphan_transparent_multiple_parent_mux_set_parent_drop_range),
910         KUNIT_CASE(clk_test_orphan_transparent_multiple_parent_mux_set_parent_get_rate),
911         KUNIT_CASE(clk_test_orphan_transparent_multiple_parent_mux_set_parent_put),
912         KUNIT_CASE(clk_test_orphan_transparent_multiple_parent_mux_set_parent_set_range_modified),
913         KUNIT_CASE(clk_test_orphan_transparent_multiple_parent_mux_set_parent_set_range_untouched),
914         KUNIT_CASE(clk_test_orphan_transparent_multiple_parent_mux_set_range_round_rate),
915         KUNIT_CASE(clk_test_orphan_transparent_multiple_parent_mux_set_range_set_parent_get_rate),
916         {}
917 };
918
919 /*
920  * Test suite for a basic mux clock with two parents. The default parent
921  * isn't registered, only the second parent is. By default, the clock
922  * will thus be orphan.
923  *
924  * These tests exercise the behaviour of the consumer API when dealing
925  * with an orphan clock, and how we deal with the transition to a valid
926  * parent.
927  */
928 static struct kunit_suite clk_orphan_transparent_multiple_parent_mux_test_suite = {
929         .name = "clk-orphan-transparent-multiple-parent-mux-test",
930         .init = clk_orphan_transparent_multiple_parent_mux_test_init,
931         .exit = clk_orphan_transparent_multiple_parent_mux_test_exit,
932         .test_cases = clk_orphan_transparent_multiple_parent_mux_test_cases,
933 };
934
935 struct clk_single_parent_ctx {
936         struct clk_dummy_context parent_ctx;
937         struct clk_hw hw;
938 };
939
940 static int clk_single_parent_mux_test_init(struct kunit *test)
941 {
942         struct clk_single_parent_ctx *ctx;
943         int ret;
944
945         ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL);
946         if (!ctx)
947                 return -ENOMEM;
948         test->priv = ctx;
949
950         ctx->parent_ctx.rate = DUMMY_CLOCK_INIT_RATE;
951         ctx->parent_ctx.hw.init =
952                 CLK_HW_INIT_NO_PARENT("parent-clk",
953                                       &clk_dummy_rate_ops,
954                                       0);
955
956         ret = clk_hw_register(NULL, &ctx->parent_ctx.hw);
957         if (ret)
958                 return ret;
959
960         ctx->hw.init = CLK_HW_INIT("test-clk", "parent-clk",
961                                    &clk_dummy_single_parent_ops,
962                                    CLK_SET_RATE_PARENT);
963
964         ret = clk_hw_register(NULL, &ctx->hw);
965         if (ret)
966                 return ret;
967
968         return 0;
969 }
970
971 static void
972 clk_single_parent_mux_test_exit(struct kunit *test)
973 {
974         struct clk_single_parent_ctx *ctx = test->priv;
975
976         clk_hw_unregister(&ctx->hw);
977         clk_hw_unregister(&ctx->parent_ctx.hw);
978 }
979
980 /*
981  * Test that for a clock with a single parent, clk_get_parent() actually
982  * returns the parent.
983  */
984 static void
985 clk_test_single_parent_mux_get_parent(struct kunit *test)
986 {
987         struct clk_single_parent_ctx *ctx = test->priv;
988         struct clk_hw *hw = &ctx->hw;
989         struct clk *clk = clk_hw_get_clk(hw, NULL);
990         struct clk *parent = clk_hw_get_clk(&ctx->parent_ctx.hw, NULL);
991
992         KUNIT_EXPECT_TRUE(test, clk_is_match(clk_get_parent(clk), parent));
993
994         clk_put(parent);
995         clk_put(clk);
996 }
997
998 /*
999  * Test that for a clock with a single parent, clk_has_parent() actually
1000  * reports it as a parent.
1001  */
1002 static void
1003 clk_test_single_parent_mux_has_parent(struct kunit *test)
1004 {
1005         struct clk_single_parent_ctx *ctx = test->priv;
1006         struct clk_hw *hw = &ctx->hw;
1007         struct clk *clk = clk_hw_get_clk(hw, NULL);
1008         struct clk *parent = clk_hw_get_clk(&ctx->parent_ctx.hw, NULL);
1009
1010         KUNIT_EXPECT_TRUE(test, clk_has_parent(clk, parent));
1011
1012         clk_put(parent);
1013         clk_put(clk);
1014 }
1015
1016 /*
1017  * Test that for a clock that can't modify its rate and with a single
1018  * parent, if we set disjoints range on the parent and then the child,
1019  * the second will return an error.
1020  *
1021  * FIXME: clk_set_rate_range() only considers the current clock when
1022  * evaluating whether ranges are disjoints and not the upstream clocks
1023  * ranges.
1024  */
1025 static void
1026 clk_test_single_parent_mux_set_range_disjoint_child_last(struct kunit *test)
1027 {
1028         struct clk_single_parent_ctx *ctx = test->priv;
1029         struct clk_hw *hw = &ctx->hw;
1030         struct clk *clk = clk_hw_get_clk(hw, NULL);
1031         struct clk *parent;
1032         int ret;
1033
1034         kunit_skip(test, "This needs to be fixed in the core.");
1035
1036         parent = clk_get_parent(clk);
1037         KUNIT_ASSERT_PTR_NE(test, parent, NULL);
1038
1039         ret = clk_set_rate_range(parent, 1000, 2000);
1040         KUNIT_ASSERT_EQ(test, ret, 0);
1041
1042         ret = clk_set_rate_range(clk, 3000, 4000);
1043         KUNIT_EXPECT_LT(test, ret, 0);
1044
1045         clk_put(clk);
1046 }
1047
1048 /*
1049  * Test that for a clock that can't modify its rate and with a single
1050  * parent, if we set disjoints range on the child and then the parent,
1051  * the second will return an error.
1052  *
1053  * FIXME: clk_set_rate_range() only considers the current clock when
1054  * evaluating whether ranges are disjoints and not the downstream clocks
1055  * ranges.
1056  */
1057 static void
1058 clk_test_single_parent_mux_set_range_disjoint_parent_last(struct kunit *test)
1059 {
1060         struct clk_single_parent_ctx *ctx = test->priv;
1061         struct clk_hw *hw = &ctx->hw;
1062         struct clk *clk = clk_hw_get_clk(hw, NULL);
1063         struct clk *parent;
1064         int ret;
1065
1066         kunit_skip(test, "This needs to be fixed in the core.");
1067
1068         parent = clk_get_parent(clk);
1069         KUNIT_ASSERT_PTR_NE(test, parent, NULL);
1070
1071         ret = clk_set_rate_range(clk, 1000, 2000);
1072         KUNIT_ASSERT_EQ(test, ret, 0);
1073
1074         ret = clk_set_rate_range(parent, 3000, 4000);
1075         KUNIT_EXPECT_LT(test, ret, 0);
1076
1077         clk_put(clk);
1078 }
1079
1080 /*
1081  * Test that for a clock that can't modify its rate and with a single
1082  * parent, if we set a range on the parent and then call
1083  * clk_round_rate(), the boundaries of the parent are taken into
1084  * account.
1085  */
1086 static void
1087 clk_test_single_parent_mux_set_range_round_rate_parent_only(struct kunit *test)
1088 {
1089         struct clk_single_parent_ctx *ctx = test->priv;
1090         struct clk_hw *hw = &ctx->hw;
1091         struct clk *clk = clk_hw_get_clk(hw, NULL);
1092         struct clk *parent;
1093         unsigned long rate;
1094         int ret;
1095
1096         parent = clk_get_parent(clk);
1097         KUNIT_ASSERT_PTR_NE(test, parent, NULL);
1098
1099         ret = clk_set_rate_range(parent, DUMMY_CLOCK_RATE_1, DUMMY_CLOCK_RATE_2);
1100         KUNIT_ASSERT_EQ(test, ret, 0);
1101
1102         rate = clk_round_rate(clk, DUMMY_CLOCK_RATE_1 - 1000);
1103         KUNIT_ASSERT_GT(test, rate, 0);
1104         KUNIT_EXPECT_GE(test, rate, DUMMY_CLOCK_RATE_1);
1105         KUNIT_EXPECT_LE(test, rate, DUMMY_CLOCK_RATE_2);
1106
1107         clk_put(clk);
1108 }
1109
1110 /*
1111  * Test that for a clock that can't modify its rate and with a single
1112  * parent, if we set a range on the parent and a more restrictive one on
1113  * the child, and then call clk_round_rate(), the boundaries of the
1114  * two clocks are taken into account.
1115  */
1116 static void
1117 clk_test_single_parent_mux_set_range_round_rate_child_smaller(struct kunit *test)
1118 {
1119         struct clk_single_parent_ctx *ctx = test->priv;
1120         struct clk_hw *hw = &ctx->hw;
1121         struct clk *clk = clk_hw_get_clk(hw, NULL);
1122         struct clk *parent;
1123         unsigned long rate;
1124         int ret;
1125
1126         parent = clk_get_parent(clk);
1127         KUNIT_ASSERT_PTR_NE(test, parent, NULL);
1128
1129         ret = clk_set_rate_range(parent, DUMMY_CLOCK_RATE_1, DUMMY_CLOCK_RATE_2);
1130         KUNIT_ASSERT_EQ(test, ret, 0);
1131
1132         ret = clk_set_rate_range(clk, DUMMY_CLOCK_RATE_1 + 1000, DUMMY_CLOCK_RATE_2 - 1000);
1133         KUNIT_ASSERT_EQ(test, ret, 0);
1134
1135         rate = clk_round_rate(clk, DUMMY_CLOCK_RATE_1 - 1000);
1136         KUNIT_ASSERT_GT(test, rate, 0);
1137         KUNIT_EXPECT_GE(test, rate, DUMMY_CLOCK_RATE_1 + 1000);
1138         KUNIT_EXPECT_LE(test, rate, DUMMY_CLOCK_RATE_2 - 1000);
1139
1140         rate = clk_round_rate(clk, DUMMY_CLOCK_RATE_2 + 1000);
1141         KUNIT_ASSERT_GT(test, rate, 0);
1142         KUNIT_EXPECT_GE(test, rate, DUMMY_CLOCK_RATE_1 + 1000);
1143         KUNIT_EXPECT_LE(test, rate, DUMMY_CLOCK_RATE_2 - 1000);
1144
1145         clk_put(clk);
1146 }
1147
1148 /*
1149  * Test that for a clock that can't modify its rate and with a single
1150  * parent, if we set a range on the child and a more restrictive one on
1151  * the parent, and then call clk_round_rate(), the boundaries of the
1152  * two clocks are taken into account.
1153  */
1154 static void
1155 clk_test_single_parent_mux_set_range_round_rate_parent_smaller(struct kunit *test)
1156 {
1157         struct clk_single_parent_ctx *ctx = test->priv;
1158         struct clk_hw *hw = &ctx->hw;
1159         struct clk *clk = clk_hw_get_clk(hw, NULL);
1160         struct clk *parent;
1161         unsigned long rate;
1162         int ret;
1163
1164         parent = clk_get_parent(clk);
1165         KUNIT_ASSERT_PTR_NE(test, parent, NULL);
1166
1167         ret = clk_set_rate_range(parent, DUMMY_CLOCK_RATE_1 + 1000, DUMMY_CLOCK_RATE_2 - 1000);
1168         KUNIT_ASSERT_EQ(test, ret, 0);
1169
1170         ret = clk_set_rate_range(clk, DUMMY_CLOCK_RATE_1, DUMMY_CLOCK_RATE_2);
1171         KUNIT_ASSERT_EQ(test, ret, 0);
1172
1173         rate = clk_round_rate(clk, DUMMY_CLOCK_RATE_1 - 1000);
1174         KUNIT_ASSERT_GT(test, rate, 0);
1175         KUNIT_EXPECT_GE(test, rate, DUMMY_CLOCK_RATE_1 + 1000);
1176         KUNIT_EXPECT_LE(test, rate, DUMMY_CLOCK_RATE_2 - 1000);
1177
1178         rate = clk_round_rate(clk, DUMMY_CLOCK_RATE_2 + 1000);
1179         KUNIT_ASSERT_GT(test, rate, 0);
1180         KUNIT_EXPECT_GE(test, rate, DUMMY_CLOCK_RATE_1 + 1000);
1181         KUNIT_EXPECT_LE(test, rate, DUMMY_CLOCK_RATE_2 - 1000);
1182
1183         clk_put(clk);
1184 }
1185
1186 static struct kunit_case clk_single_parent_mux_test_cases[] = {
1187         KUNIT_CASE(clk_test_single_parent_mux_get_parent),
1188         KUNIT_CASE(clk_test_single_parent_mux_has_parent),
1189         KUNIT_CASE(clk_test_single_parent_mux_set_range_disjoint_child_last),
1190         KUNIT_CASE(clk_test_single_parent_mux_set_range_disjoint_parent_last),
1191         KUNIT_CASE(clk_test_single_parent_mux_set_range_round_rate_child_smaller),
1192         KUNIT_CASE(clk_test_single_parent_mux_set_range_round_rate_parent_only),
1193         KUNIT_CASE(clk_test_single_parent_mux_set_range_round_rate_parent_smaller),
1194         {}
1195 };
1196
1197 /*
1198  * Test suite for a basic mux clock with one parent, with
1199  * CLK_SET_RATE_PARENT on the child.
1200  *
1201  * These tests exercise the consumer API and check that the state of the
1202  * child and parent are sane and consistent.
1203  */
1204 static struct kunit_suite
1205 clk_single_parent_mux_test_suite = {
1206         .name = "clk-single-parent-mux-test",
1207         .init = clk_single_parent_mux_test_init,
1208         .exit = clk_single_parent_mux_test_exit,
1209         .test_cases = clk_single_parent_mux_test_cases,
1210 };
1211
1212 static int clk_orphan_transparent_single_parent_mux_test_init(struct kunit *test)
1213 {
1214         struct clk_single_parent_ctx *ctx;
1215         struct clk_init_data init = { };
1216         const char * const parents[] = { "orphan_parent" };
1217         int ret;
1218
1219         ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL);
1220         if (!ctx)
1221                 return -ENOMEM;
1222         test->priv = ctx;
1223
1224         init.name = "test_orphan_dummy_parent";
1225         init.ops = &clk_dummy_single_parent_ops;
1226         init.parent_names = parents;
1227         init.num_parents = ARRAY_SIZE(parents);
1228         init.flags = CLK_SET_RATE_PARENT;
1229         ctx->hw.init = &init;
1230
1231         ret = clk_hw_register(NULL, &ctx->hw);
1232         if (ret)
1233                 return ret;
1234
1235         memset(&init, 0, sizeof(init));
1236         init.name = "orphan_parent";
1237         init.ops = &clk_dummy_rate_ops;
1238         ctx->parent_ctx.hw.init = &init;
1239         ctx->parent_ctx.rate = DUMMY_CLOCK_INIT_RATE;
1240
1241         ret = clk_hw_register(NULL, &ctx->parent_ctx.hw);
1242         if (ret)
1243                 return ret;
1244
1245         return 0;
1246 }
1247
1248 /*
1249  * Test that a mux-only clock, with an initial rate within a range,
1250  * will still have the same rate after the range has been enforced.
1251  *
1252  * See:
1253  * https://lore.kernel.org/linux-clk/7720158d-10a7-a17b-73a4-a8615c9c6d5c@collabora.com/
1254  */
1255 static void clk_test_orphan_transparent_parent_mux_set_range(struct kunit *test)
1256 {
1257         struct clk_single_parent_ctx *ctx = test->priv;
1258         struct clk_hw *hw = &ctx->hw;
1259         struct clk *clk = clk_hw_get_clk(hw, NULL);
1260         unsigned long rate, new_rate;
1261
1262         rate = clk_get_rate(clk);
1263         KUNIT_ASSERT_GT(test, rate, 0);
1264
1265         KUNIT_ASSERT_EQ(test,
1266                         clk_set_rate_range(clk,
1267                                            ctx->parent_ctx.rate - 1000,
1268                                            ctx->parent_ctx.rate + 1000),
1269                         0);
1270
1271         new_rate = clk_get_rate(clk);
1272         KUNIT_ASSERT_GT(test, new_rate, 0);
1273         KUNIT_EXPECT_EQ(test, rate, new_rate);
1274
1275         clk_put(clk);
1276 }
1277
1278 static struct kunit_case clk_orphan_transparent_single_parent_mux_test_cases[] = {
1279         KUNIT_CASE(clk_test_orphan_transparent_parent_mux_set_range),
1280         {}
1281 };
1282
1283 /*
1284  * Test suite for a basic mux clock with one parent. The parent is
1285  * registered after its child. The clock will thus be an orphan when
1286  * registered, but will no longer be when the tests run.
1287  *
1288  * These tests make sure a clock that used to be orphan has a sane,
1289  * consistent, behaviour.
1290  */
1291 static struct kunit_suite clk_orphan_transparent_single_parent_test_suite = {
1292         .name = "clk-orphan-transparent-single-parent-test",
1293         .init = clk_orphan_transparent_single_parent_mux_test_init,
1294         .exit = clk_single_parent_mux_test_exit,
1295         .test_cases = clk_orphan_transparent_single_parent_mux_test_cases,
1296 };
1297
1298 struct clk_single_parent_two_lvl_ctx {
1299         struct clk_dummy_context parent_parent_ctx;
1300         struct clk_dummy_context parent_ctx;
1301         struct clk_hw hw;
1302 };
1303
1304 static int
1305 clk_orphan_two_level_root_last_test_init(struct kunit *test)
1306 {
1307         struct clk_single_parent_two_lvl_ctx *ctx;
1308         int ret;
1309
1310         ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL);
1311         if (!ctx)
1312                 return -ENOMEM;
1313         test->priv = ctx;
1314
1315         ctx->parent_ctx.hw.init =
1316                 CLK_HW_INIT("intermediate-parent",
1317                             "root-parent",
1318                             &clk_dummy_single_parent_ops,
1319                             CLK_SET_RATE_PARENT);
1320         ret = clk_hw_register(NULL, &ctx->parent_ctx.hw);
1321         if (ret)
1322                 return ret;
1323
1324         ctx->hw.init =
1325                 CLK_HW_INIT("test-clk", "intermediate-parent",
1326                             &clk_dummy_single_parent_ops,
1327                             CLK_SET_RATE_PARENT);
1328         ret = clk_hw_register(NULL, &ctx->hw);
1329         if (ret)
1330                 return ret;
1331
1332         ctx->parent_parent_ctx.rate = DUMMY_CLOCK_INIT_RATE;
1333         ctx->parent_parent_ctx.hw.init =
1334                 CLK_HW_INIT_NO_PARENT("root-parent",
1335                                       &clk_dummy_rate_ops,
1336                                       0);
1337         ret = clk_hw_register(NULL, &ctx->parent_parent_ctx.hw);
1338         if (ret)
1339                 return ret;
1340
1341         return 0;
1342 }
1343
1344 static void
1345 clk_orphan_two_level_root_last_test_exit(struct kunit *test)
1346 {
1347         struct clk_single_parent_two_lvl_ctx *ctx = test->priv;
1348
1349         clk_hw_unregister(&ctx->hw);
1350         clk_hw_unregister(&ctx->parent_ctx.hw);
1351         clk_hw_unregister(&ctx->parent_parent_ctx.hw);
1352 }
1353
1354 /*
1355  * Test that, for a clock whose parent used to be orphan, clk_get_rate()
1356  * will return the proper rate.
1357  */
1358 static void
1359 clk_orphan_two_level_root_last_test_get_rate(struct kunit *test)
1360 {
1361         struct clk_single_parent_two_lvl_ctx *ctx = test->priv;
1362         struct clk_hw *hw = &ctx->hw;
1363         struct clk *clk = clk_hw_get_clk(hw, NULL);
1364         unsigned long rate;
1365
1366         rate = clk_get_rate(clk);
1367         KUNIT_EXPECT_EQ(test, rate, DUMMY_CLOCK_INIT_RATE);
1368
1369         clk_put(clk);
1370 }
1371
1372 /*
1373  * Test that, for a clock whose parent used to be orphan,
1374  * clk_set_rate_range() won't affect its rate if it is already within
1375  * range.
1376  *
1377  * See (for Exynos 4210):
1378  * https://lore.kernel.org/linux-clk/366a0232-bb4a-c357-6aa8-636e398e05eb@samsung.com/
1379  */
1380 static void
1381 clk_orphan_two_level_root_last_test_set_range(struct kunit *test)
1382 {
1383         struct clk_single_parent_two_lvl_ctx *ctx = test->priv;
1384         struct clk_hw *hw = &ctx->hw;
1385         struct clk *clk = clk_hw_get_clk(hw, NULL);
1386         unsigned long rate;
1387         int ret;
1388
1389         ret = clk_set_rate_range(clk,
1390                                  DUMMY_CLOCK_INIT_RATE - 1000,
1391                                  DUMMY_CLOCK_INIT_RATE + 1000);
1392         KUNIT_ASSERT_EQ(test, ret, 0);
1393
1394         rate = clk_get_rate(clk);
1395         KUNIT_ASSERT_GT(test, rate, 0);
1396         KUNIT_EXPECT_EQ(test, rate, DUMMY_CLOCK_INIT_RATE);
1397
1398         clk_put(clk);
1399 }
1400
1401 static struct kunit_case
1402 clk_orphan_two_level_root_last_test_cases[] = {
1403         KUNIT_CASE(clk_orphan_two_level_root_last_test_get_rate),
1404         KUNIT_CASE(clk_orphan_two_level_root_last_test_set_range),
1405         {}
1406 };
1407
1408 /*
1409  * Test suite for a basic, transparent, clock with a parent that is also
1410  * such a clock. The parent's parent is registered last, while the
1411  * parent and its child are registered in that order. The intermediate
1412  * and leaf clocks will thus be orphan when registered, but the leaf
1413  * clock itself will always have its parent and will never be
1414  * reparented. Indeed, it's only orphan because its parent is.
1415  *
1416  * These tests exercise the behaviour of the consumer API when dealing
1417  * with an orphan clock, and how we deal with the transition to a valid
1418  * parent.
1419  */
1420 static struct kunit_suite
1421 clk_orphan_two_level_root_last_test_suite = {
1422         .name = "clk-orphan-two-level-root-last-test",
1423         .init = clk_orphan_two_level_root_last_test_init,
1424         .exit = clk_orphan_two_level_root_last_test_exit,
1425         .test_cases = clk_orphan_two_level_root_last_test_cases,
1426 };
1427
1428 /*
1429  * Test that clk_set_rate_range won't return an error for a valid range
1430  * and that it will make sure the rate of the clock is within the
1431  * boundaries.
1432  */
1433 static void clk_range_test_set_range(struct kunit *test)
1434 {
1435         struct clk_dummy_context *ctx = test->priv;
1436         struct clk_hw *hw = &ctx->hw;
1437         struct clk *clk = clk_hw_get_clk(hw, NULL);
1438         unsigned long rate;
1439
1440         KUNIT_ASSERT_EQ(test,
1441                         clk_set_rate_range(clk,
1442                                            DUMMY_CLOCK_RATE_1,
1443                                            DUMMY_CLOCK_RATE_2),
1444                         0);
1445
1446         rate = clk_get_rate(clk);
1447         KUNIT_ASSERT_GT(test, rate, 0);
1448         KUNIT_EXPECT_GE(test, rate, DUMMY_CLOCK_RATE_1);
1449         KUNIT_EXPECT_LE(test, rate, DUMMY_CLOCK_RATE_2);
1450
1451         clk_put(clk);
1452 }
1453
1454 /*
1455  * Test that calling clk_set_rate_range with a minimum rate higher than
1456  * the maximum rate returns an error.
1457  */
1458 static void clk_range_test_set_range_invalid(struct kunit *test)
1459 {
1460         struct clk_dummy_context *ctx = test->priv;
1461         struct clk_hw *hw = &ctx->hw;
1462         struct clk *clk = clk_hw_get_clk(hw, NULL);
1463
1464         KUNIT_EXPECT_LT(test,
1465                         clk_set_rate_range(clk,
1466                                            DUMMY_CLOCK_RATE_1 + 1000,
1467                                            DUMMY_CLOCK_RATE_1),
1468                         0);
1469
1470         clk_put(clk);
1471 }
1472
1473 /*
1474  * Test that users can't set multiple, disjoints, range that would be
1475  * impossible to meet.
1476  */
1477 static void clk_range_test_multiple_disjoints_range(struct kunit *test)
1478 {
1479         struct clk_dummy_context *ctx = test->priv;
1480         struct clk_hw *hw = &ctx->hw;
1481         struct clk *user1, *user2;
1482
1483         user1 = clk_hw_get_clk(hw, NULL);
1484         KUNIT_ASSERT_NOT_ERR_OR_NULL(test, user1);
1485
1486         user2 = clk_hw_get_clk(hw, NULL);
1487         KUNIT_ASSERT_NOT_ERR_OR_NULL(test, user2);
1488
1489         KUNIT_ASSERT_EQ(test,
1490                         clk_set_rate_range(user1, 1000, 2000),
1491                         0);
1492
1493         KUNIT_EXPECT_LT(test,
1494                         clk_set_rate_range(user2, 3000, 4000),
1495                         0);
1496
1497         clk_put(user2);
1498         clk_put(user1);
1499 }
1500
1501 /*
1502  * Test that if our clock has some boundaries and we try to round a rate
1503  * lower than the minimum, the returned rate will be within range.
1504  */
1505 static void clk_range_test_set_range_round_rate_lower(struct kunit *test)
1506 {
1507         struct clk_dummy_context *ctx = test->priv;
1508         struct clk_hw *hw = &ctx->hw;
1509         struct clk *clk = clk_hw_get_clk(hw, NULL);
1510         long rate;
1511
1512         KUNIT_ASSERT_EQ(test,
1513                         clk_set_rate_range(clk,
1514                                            DUMMY_CLOCK_RATE_1,
1515                                            DUMMY_CLOCK_RATE_2),
1516                         0);
1517
1518         rate = clk_round_rate(clk, DUMMY_CLOCK_RATE_1 - 1000);
1519         KUNIT_ASSERT_GT(test, rate, 0);
1520         KUNIT_EXPECT_GE(test, rate, DUMMY_CLOCK_RATE_1);
1521         KUNIT_EXPECT_LE(test, rate, DUMMY_CLOCK_RATE_2);
1522
1523         clk_put(clk);
1524 }
1525
1526 /*
1527  * Test that if our clock has some boundaries and we try to set a rate
1528  * higher than the maximum, the new rate will be within range.
1529  */
1530 static void clk_range_test_set_range_set_rate_lower(struct kunit *test)
1531 {
1532         struct clk_dummy_context *ctx = test->priv;
1533         struct clk_hw *hw = &ctx->hw;
1534         struct clk *clk = clk_hw_get_clk(hw, NULL);
1535         unsigned long rate;
1536
1537         KUNIT_ASSERT_EQ(test,
1538                         clk_set_rate_range(clk,
1539                                            DUMMY_CLOCK_RATE_1,
1540                                            DUMMY_CLOCK_RATE_2),
1541                         0);
1542
1543         KUNIT_ASSERT_EQ(test,
1544                         clk_set_rate(clk, DUMMY_CLOCK_RATE_1 - 1000),
1545                         0);
1546
1547         rate = clk_get_rate(clk);
1548         KUNIT_ASSERT_GT(test, rate, 0);
1549         KUNIT_EXPECT_GE(test, rate, DUMMY_CLOCK_RATE_1);
1550         KUNIT_EXPECT_LE(test, rate, DUMMY_CLOCK_RATE_2);
1551
1552         clk_put(clk);
1553 }
1554
1555 /*
1556  * Test that if our clock has some boundaries and we try to round and
1557  * set a rate lower than the minimum, the rate returned by
1558  * clk_round_rate() will be consistent with the new rate set by
1559  * clk_set_rate().
1560  */
1561 static void clk_range_test_set_range_set_round_rate_consistent_lower(struct kunit *test)
1562 {
1563         struct clk_dummy_context *ctx = test->priv;
1564         struct clk_hw *hw = &ctx->hw;
1565         struct clk *clk = clk_hw_get_clk(hw, NULL);
1566         long rounded;
1567
1568         KUNIT_ASSERT_EQ(test,
1569                         clk_set_rate_range(clk,
1570                                            DUMMY_CLOCK_RATE_1,
1571                                            DUMMY_CLOCK_RATE_2),
1572                         0);
1573
1574         rounded = clk_round_rate(clk, DUMMY_CLOCK_RATE_1 - 1000);
1575         KUNIT_ASSERT_GT(test, rounded, 0);
1576
1577         KUNIT_ASSERT_EQ(test,
1578                         clk_set_rate(clk, DUMMY_CLOCK_RATE_1 - 1000),
1579                         0);
1580
1581         KUNIT_EXPECT_EQ(test, rounded, clk_get_rate(clk));
1582
1583         clk_put(clk);
1584 }
1585
1586 /*
1587  * Test that if our clock has some boundaries and we try to round a rate
1588  * higher than the maximum, the returned rate will be within range.
1589  */
1590 static void clk_range_test_set_range_round_rate_higher(struct kunit *test)
1591 {
1592         struct clk_dummy_context *ctx = test->priv;
1593         struct clk_hw *hw = &ctx->hw;
1594         struct clk *clk = clk_hw_get_clk(hw, NULL);
1595         long rate;
1596
1597         KUNIT_ASSERT_EQ(test,
1598                         clk_set_rate_range(clk,
1599                                            DUMMY_CLOCK_RATE_1,
1600                                            DUMMY_CLOCK_RATE_2),
1601                         0);
1602
1603         rate = clk_round_rate(clk, DUMMY_CLOCK_RATE_2 + 1000);
1604         KUNIT_ASSERT_GT(test, rate, 0);
1605         KUNIT_EXPECT_GE(test, rate, DUMMY_CLOCK_RATE_1);
1606         KUNIT_EXPECT_LE(test, rate, DUMMY_CLOCK_RATE_2);
1607
1608         clk_put(clk);
1609 }
1610
1611 /*
1612  * Test that if our clock has some boundaries and we try to set a rate
1613  * higher than the maximum, the new rate will be within range.
1614  */
1615 static void clk_range_test_set_range_set_rate_higher(struct kunit *test)
1616 {
1617         struct clk_dummy_context *ctx = test->priv;
1618         struct clk_hw *hw = &ctx->hw;
1619         struct clk *clk = clk_hw_get_clk(hw, NULL);
1620         unsigned long rate;
1621
1622         KUNIT_ASSERT_EQ(test,
1623                         clk_set_rate_range(clk,
1624                                            DUMMY_CLOCK_RATE_1,
1625                                            DUMMY_CLOCK_RATE_2),
1626                         0);
1627
1628         KUNIT_ASSERT_EQ(test,
1629                         clk_set_rate(clk, DUMMY_CLOCK_RATE_2 + 1000),
1630                         0);
1631
1632         rate = clk_get_rate(clk);
1633         KUNIT_ASSERT_GT(test, rate, 0);
1634         KUNIT_EXPECT_GE(test, rate, DUMMY_CLOCK_RATE_1);
1635         KUNIT_EXPECT_LE(test, rate, DUMMY_CLOCK_RATE_2);
1636
1637         clk_put(clk);
1638 }
1639
1640 /*
1641  * Test that if our clock has some boundaries and we try to round and
1642  * set a rate higher than the maximum, the rate returned by
1643  * clk_round_rate() will be consistent with the new rate set by
1644  * clk_set_rate().
1645  */
1646 static void clk_range_test_set_range_set_round_rate_consistent_higher(struct kunit *test)
1647 {
1648         struct clk_dummy_context *ctx = test->priv;
1649         struct clk_hw *hw = &ctx->hw;
1650         struct clk *clk = clk_hw_get_clk(hw, NULL);
1651         long rounded;
1652
1653         KUNIT_ASSERT_EQ(test,
1654                         clk_set_rate_range(clk,
1655                                            DUMMY_CLOCK_RATE_1,
1656                                            DUMMY_CLOCK_RATE_2),
1657                         0);
1658
1659         rounded = clk_round_rate(clk, DUMMY_CLOCK_RATE_2 + 1000);
1660         KUNIT_ASSERT_GT(test, rounded, 0);
1661
1662         KUNIT_ASSERT_EQ(test,
1663                         clk_set_rate(clk, DUMMY_CLOCK_RATE_2 + 1000),
1664                         0);
1665
1666         KUNIT_EXPECT_EQ(test, rounded, clk_get_rate(clk));
1667
1668         clk_put(clk);
1669 }
1670
1671 /*
1672  * Test that if our clock has a rate lower than the minimum set by a
1673  * call to clk_set_rate_range(), the rate will be raised to match the
1674  * new minimum.
1675  *
1676  * This assumes that clk_ops.determine_rate or clk_ops.round_rate won't
1677  * modify the requested rate, which is our case in clk_dummy_rate_ops.
1678  */
1679 static void clk_range_test_set_range_get_rate_raised(struct kunit *test)
1680 {
1681         struct clk_dummy_context *ctx = test->priv;
1682         struct clk_hw *hw = &ctx->hw;
1683         struct clk *clk = clk_hw_get_clk(hw, NULL);
1684         unsigned long rate;
1685
1686         KUNIT_ASSERT_EQ(test,
1687                         clk_set_rate(clk, DUMMY_CLOCK_RATE_1 - 1000),
1688                         0);
1689
1690         KUNIT_ASSERT_EQ(test,
1691                         clk_set_rate_range(clk,
1692                                            DUMMY_CLOCK_RATE_1,
1693                                            DUMMY_CLOCK_RATE_2),
1694                         0);
1695
1696         rate = clk_get_rate(clk);
1697         KUNIT_ASSERT_GT(test, rate, 0);
1698         KUNIT_EXPECT_EQ(test, rate, DUMMY_CLOCK_RATE_1);
1699
1700         clk_put(clk);
1701 }
1702
1703 /*
1704  * Test that if our clock has a rate higher than the maximum set by a
1705  * call to clk_set_rate_range(), the rate will be lowered to match the
1706  * new maximum.
1707  *
1708  * This assumes that clk_ops.determine_rate or clk_ops.round_rate won't
1709  * modify the requested rate, which is our case in clk_dummy_rate_ops.
1710  */
1711 static void clk_range_test_set_range_get_rate_lowered(struct kunit *test)
1712 {
1713         struct clk_dummy_context *ctx = test->priv;
1714         struct clk_hw *hw = &ctx->hw;
1715         struct clk *clk = clk_hw_get_clk(hw, NULL);
1716         unsigned long rate;
1717
1718         KUNIT_ASSERT_EQ(test,
1719                         clk_set_rate(clk, DUMMY_CLOCK_RATE_2 + 1000),
1720                         0);
1721
1722         KUNIT_ASSERT_EQ(test,
1723                         clk_set_rate_range(clk,
1724                                            DUMMY_CLOCK_RATE_1,
1725                                            DUMMY_CLOCK_RATE_2),
1726                         0);
1727
1728         rate = clk_get_rate(clk);
1729         KUNIT_ASSERT_GT(test, rate, 0);
1730         KUNIT_EXPECT_EQ(test, rate, DUMMY_CLOCK_RATE_2);
1731
1732         clk_put(clk);
1733 }
1734
1735 static struct kunit_case clk_range_test_cases[] = {
1736         KUNIT_CASE(clk_range_test_set_range),
1737         KUNIT_CASE(clk_range_test_set_range_invalid),
1738         KUNIT_CASE(clk_range_test_multiple_disjoints_range),
1739         KUNIT_CASE(clk_range_test_set_range_round_rate_lower),
1740         KUNIT_CASE(clk_range_test_set_range_set_rate_lower),
1741         KUNIT_CASE(clk_range_test_set_range_set_round_rate_consistent_lower),
1742         KUNIT_CASE(clk_range_test_set_range_round_rate_higher),
1743         KUNIT_CASE(clk_range_test_set_range_set_rate_higher),
1744         KUNIT_CASE(clk_range_test_set_range_set_round_rate_consistent_higher),
1745         KUNIT_CASE(clk_range_test_set_range_get_rate_raised),
1746         KUNIT_CASE(clk_range_test_set_range_get_rate_lowered),
1747         {}
1748 };
1749
1750 /*
1751  * Test suite for a basic rate clock, without any parent.
1752  *
1753  * These tests exercise the rate range API: clk_set_rate_range(),
1754  * clk_set_min_rate(), clk_set_max_rate(), clk_drop_range().
1755  */
1756 static struct kunit_suite clk_range_test_suite = {
1757         .name = "clk-range-test",
1758         .init = clk_test_init,
1759         .exit = clk_test_exit,
1760         .test_cases = clk_range_test_cases,
1761 };
1762
1763 /*
1764  * Test that if we have several subsequent calls to
1765  * clk_set_rate_range(), the core will reevaluate whether a new rate is
1766  * needed each and every time.
1767  *
1768  * With clk_dummy_maximize_rate_ops, this means that the rate will
1769  * trail along the maximum as it evolves.
1770  */
1771 static void clk_range_test_set_range_rate_maximized(struct kunit *test)
1772 {
1773         struct clk_dummy_context *ctx = test->priv;
1774         struct clk_hw *hw = &ctx->hw;
1775         struct clk *clk = clk_hw_get_clk(hw, NULL);
1776         unsigned long rate;
1777
1778         KUNIT_ASSERT_EQ(test,
1779                         clk_set_rate(clk, DUMMY_CLOCK_RATE_2 + 1000),
1780                         0);
1781
1782         KUNIT_ASSERT_EQ(test,
1783                         clk_set_rate_range(clk,
1784                                            DUMMY_CLOCK_RATE_1,
1785                                            DUMMY_CLOCK_RATE_2),
1786                         0);
1787
1788         rate = clk_get_rate(clk);
1789         KUNIT_ASSERT_GT(test, rate, 0);
1790         KUNIT_EXPECT_EQ(test, rate, DUMMY_CLOCK_RATE_2);
1791
1792         KUNIT_ASSERT_EQ(test,
1793                         clk_set_rate_range(clk,
1794                                            DUMMY_CLOCK_RATE_1,
1795                                            DUMMY_CLOCK_RATE_2 - 1000),
1796                         0);
1797
1798         rate = clk_get_rate(clk);
1799         KUNIT_ASSERT_GT(test, rate, 0);
1800         KUNIT_EXPECT_EQ(test, rate, DUMMY_CLOCK_RATE_2 - 1000);
1801
1802         KUNIT_ASSERT_EQ(test,
1803                         clk_set_rate_range(clk,
1804                                            DUMMY_CLOCK_RATE_1,
1805                                            DUMMY_CLOCK_RATE_2),
1806                         0);
1807
1808         rate = clk_get_rate(clk);
1809         KUNIT_ASSERT_GT(test, rate, 0);
1810         KUNIT_EXPECT_EQ(test, rate, DUMMY_CLOCK_RATE_2);
1811
1812         clk_put(clk);
1813 }
1814
1815 /*
1816  * Test that if we have several subsequent calls to
1817  * clk_set_rate_range(), across multiple users, the core will reevaluate
1818  * whether a new rate is needed each and every time.
1819  *
1820  * With clk_dummy_maximize_rate_ops, this means that the rate will
1821  * trail along the maximum as it evolves.
1822  */
1823 static void clk_range_test_multiple_set_range_rate_maximized(struct kunit *test)
1824 {
1825         struct clk_dummy_context *ctx = test->priv;
1826         struct clk_hw *hw = &ctx->hw;
1827         struct clk *clk = clk_hw_get_clk(hw, NULL);
1828         struct clk *user1, *user2;
1829         unsigned long rate;
1830
1831         user1 = clk_hw_get_clk(hw, NULL);
1832         KUNIT_ASSERT_NOT_ERR_OR_NULL(test, user1);
1833
1834         user2 = clk_hw_get_clk(hw, NULL);
1835         KUNIT_ASSERT_NOT_ERR_OR_NULL(test, user2);
1836
1837         KUNIT_ASSERT_EQ(test,
1838                         clk_set_rate(clk, DUMMY_CLOCK_RATE_2 + 1000),
1839                         0);
1840
1841         KUNIT_ASSERT_EQ(test,
1842                         clk_set_rate_range(user1,
1843                                            0,
1844                                            DUMMY_CLOCK_RATE_2),
1845                         0);
1846
1847         rate = clk_get_rate(clk);
1848         KUNIT_ASSERT_GT(test, rate, 0);
1849         KUNIT_EXPECT_EQ(test, rate, DUMMY_CLOCK_RATE_2);
1850
1851         KUNIT_ASSERT_EQ(test,
1852                         clk_set_rate_range(user2,
1853                                            0,
1854                                            DUMMY_CLOCK_RATE_1),
1855                         0);
1856
1857         rate = clk_get_rate(clk);
1858         KUNIT_ASSERT_GT(test, rate, 0);
1859         KUNIT_EXPECT_EQ(test, rate, DUMMY_CLOCK_RATE_1);
1860
1861         KUNIT_ASSERT_EQ(test,
1862                         clk_drop_range(user2),
1863                         0);
1864
1865         rate = clk_get_rate(clk);
1866         KUNIT_ASSERT_GT(test, rate, 0);
1867         KUNIT_EXPECT_EQ(test, rate, DUMMY_CLOCK_RATE_2);
1868
1869         clk_put(user2);
1870         clk_put(user1);
1871         clk_put(clk);
1872 }
1873
1874 /*
1875  * Test that if we have several subsequent calls to
1876  * clk_set_rate_range(), across multiple users, the core will reevaluate
1877  * whether a new rate is needed, including when a user drop its clock.
1878  *
1879  * With clk_dummy_maximize_rate_ops, this means that the rate will
1880  * trail along the maximum as it evolves.
1881  */
1882 static void clk_range_test_multiple_set_range_rate_put_maximized(struct kunit *test)
1883 {
1884         struct clk_dummy_context *ctx = test->priv;
1885         struct clk_hw *hw = &ctx->hw;
1886         struct clk *clk = clk_hw_get_clk(hw, NULL);
1887         struct clk *user1, *user2;
1888         unsigned long rate;
1889
1890         user1 = clk_hw_get_clk(hw, NULL);
1891         KUNIT_ASSERT_NOT_ERR_OR_NULL(test, user1);
1892
1893         user2 = clk_hw_get_clk(hw, NULL);
1894         KUNIT_ASSERT_NOT_ERR_OR_NULL(test, user2);
1895
1896         KUNIT_ASSERT_EQ(test,
1897                         clk_set_rate(clk, DUMMY_CLOCK_RATE_2 + 1000),
1898                         0);
1899
1900         KUNIT_ASSERT_EQ(test,
1901                         clk_set_rate_range(user1,
1902                                            0,
1903                                            DUMMY_CLOCK_RATE_2),
1904                         0);
1905
1906         rate = clk_get_rate(clk);
1907         KUNIT_ASSERT_GT(test, rate, 0);
1908         KUNIT_EXPECT_EQ(test, rate, DUMMY_CLOCK_RATE_2);
1909
1910         KUNIT_ASSERT_EQ(test,
1911                         clk_set_rate_range(user2,
1912                                            0,
1913                                            DUMMY_CLOCK_RATE_1),
1914                         0);
1915
1916         rate = clk_get_rate(clk);
1917         KUNIT_ASSERT_GT(test, rate, 0);
1918         KUNIT_EXPECT_EQ(test, rate, DUMMY_CLOCK_RATE_1);
1919
1920         clk_put(user2);
1921
1922         rate = clk_get_rate(clk);
1923         KUNIT_ASSERT_GT(test, rate, 0);
1924         KUNIT_EXPECT_EQ(test, rate, DUMMY_CLOCK_RATE_2);
1925
1926         clk_put(user1);
1927         clk_put(clk);
1928 }
1929
1930 static struct kunit_case clk_range_maximize_test_cases[] = {
1931         KUNIT_CASE(clk_range_test_set_range_rate_maximized),
1932         KUNIT_CASE(clk_range_test_multiple_set_range_rate_maximized),
1933         KUNIT_CASE(clk_range_test_multiple_set_range_rate_put_maximized),
1934         {}
1935 };
1936
1937 /*
1938  * Test suite for a basic rate clock, without any parent.
1939  *
1940  * These tests exercise the rate range API: clk_set_rate_range(),
1941  * clk_set_min_rate(), clk_set_max_rate(), clk_drop_range(), with a
1942  * driver that will always try to run at the highest possible rate.
1943  */
1944 static struct kunit_suite clk_range_maximize_test_suite = {
1945         .name = "clk-range-maximize-test",
1946         .init = clk_maximize_test_init,
1947         .exit = clk_test_exit,
1948         .test_cases = clk_range_maximize_test_cases,
1949 };
1950
1951 /*
1952  * Test that if we have several subsequent calls to
1953  * clk_set_rate_range(), the core will reevaluate whether a new rate is
1954  * needed each and every time.
1955  *
1956  * With clk_dummy_minimize_rate_ops, this means that the rate will
1957  * trail along the minimum as it evolves.
1958  */
1959 static void clk_range_test_set_range_rate_minimized(struct kunit *test)
1960 {
1961         struct clk_dummy_context *ctx = test->priv;
1962         struct clk_hw *hw = &ctx->hw;
1963         struct clk *clk = clk_hw_get_clk(hw, NULL);
1964         unsigned long rate;
1965
1966         KUNIT_ASSERT_EQ(test,
1967                         clk_set_rate(clk, DUMMY_CLOCK_RATE_1 - 1000),
1968                         0);
1969
1970         KUNIT_ASSERT_EQ(test,
1971                         clk_set_rate_range(clk,
1972                                            DUMMY_CLOCK_RATE_1,
1973                                            DUMMY_CLOCK_RATE_2),
1974                         0);
1975
1976         rate = clk_get_rate(clk);
1977         KUNIT_ASSERT_GT(test, rate, 0);
1978         KUNIT_EXPECT_EQ(test, rate, DUMMY_CLOCK_RATE_1);
1979
1980         KUNIT_ASSERT_EQ(test,
1981                         clk_set_rate_range(clk,
1982                                            DUMMY_CLOCK_RATE_1 + 1000,
1983                                            DUMMY_CLOCK_RATE_2),
1984                         0);
1985
1986         rate = clk_get_rate(clk);
1987         KUNIT_ASSERT_GT(test, rate, 0);
1988         KUNIT_EXPECT_EQ(test, rate, DUMMY_CLOCK_RATE_1 + 1000);
1989
1990         KUNIT_ASSERT_EQ(test,
1991                         clk_set_rate_range(clk,
1992                                            DUMMY_CLOCK_RATE_1,
1993                                            DUMMY_CLOCK_RATE_2),
1994                         0);
1995
1996         rate = clk_get_rate(clk);
1997         KUNIT_ASSERT_GT(test, rate, 0);
1998         KUNIT_EXPECT_EQ(test, rate, DUMMY_CLOCK_RATE_1);
1999
2000         clk_put(clk);
2001 }
2002
2003 /*
2004  * Test that if we have several subsequent calls to
2005  * clk_set_rate_range(), across multiple users, the core will reevaluate
2006  * whether a new rate is needed each and every time.
2007  *
2008  * With clk_dummy_minimize_rate_ops, this means that the rate will
2009  * trail along the minimum as it evolves.
2010  */
2011 static void clk_range_test_multiple_set_range_rate_minimized(struct kunit *test)
2012 {
2013         struct clk_dummy_context *ctx = test->priv;
2014         struct clk_hw *hw = &ctx->hw;
2015         struct clk *clk = clk_hw_get_clk(hw, NULL);
2016         struct clk *user1, *user2;
2017         unsigned long rate;
2018
2019         user1 = clk_hw_get_clk(hw, NULL);
2020         KUNIT_ASSERT_NOT_ERR_OR_NULL(test, user1);
2021
2022         user2 = clk_hw_get_clk(hw, NULL);
2023         KUNIT_ASSERT_NOT_ERR_OR_NULL(test, user2);
2024
2025         KUNIT_ASSERT_EQ(test,
2026                         clk_set_rate_range(user1,
2027                                            DUMMY_CLOCK_RATE_1,
2028                                            ULONG_MAX),
2029                         0);
2030
2031         rate = clk_get_rate(clk);
2032         KUNIT_ASSERT_GT(test, rate, 0);
2033         KUNIT_EXPECT_EQ(test, rate, DUMMY_CLOCK_RATE_1);
2034
2035         KUNIT_ASSERT_EQ(test,
2036                         clk_set_rate_range(user2,
2037                                            DUMMY_CLOCK_RATE_2,
2038                                            ULONG_MAX),
2039                         0);
2040
2041         rate = clk_get_rate(clk);
2042         KUNIT_ASSERT_GT(test, rate, 0);
2043         KUNIT_EXPECT_EQ(test, rate, DUMMY_CLOCK_RATE_2);
2044
2045         KUNIT_ASSERT_EQ(test,
2046                         clk_drop_range(user2),
2047                         0);
2048
2049         rate = clk_get_rate(clk);
2050         KUNIT_ASSERT_GT(test, rate, 0);
2051         KUNIT_EXPECT_EQ(test, rate, DUMMY_CLOCK_RATE_1);
2052
2053         clk_put(user2);
2054         clk_put(user1);
2055         clk_put(clk);
2056 }
2057
2058 /*
2059  * Test that if we have several subsequent calls to
2060  * clk_set_rate_range(), across multiple users, the core will reevaluate
2061  * whether a new rate is needed, including when a user drop its clock.
2062  *
2063  * With clk_dummy_minimize_rate_ops, this means that the rate will
2064  * trail along the minimum as it evolves.
2065  */
2066 static void clk_range_test_multiple_set_range_rate_put_minimized(struct kunit *test)
2067 {
2068         struct clk_dummy_context *ctx = test->priv;
2069         struct clk_hw *hw = &ctx->hw;
2070         struct clk *clk = clk_hw_get_clk(hw, NULL);
2071         struct clk *user1, *user2;
2072         unsigned long rate;
2073
2074         user1 = clk_hw_get_clk(hw, NULL);
2075         KUNIT_ASSERT_NOT_ERR_OR_NULL(test, user1);
2076
2077         user2 = clk_hw_get_clk(hw, NULL);
2078         KUNIT_ASSERT_NOT_ERR_OR_NULL(test, user2);
2079
2080         KUNIT_ASSERT_EQ(test,
2081                         clk_set_rate_range(user1,
2082                                            DUMMY_CLOCK_RATE_1,
2083                                            ULONG_MAX),
2084                         0);
2085
2086         rate = clk_get_rate(clk);
2087         KUNIT_ASSERT_GT(test, rate, 0);
2088         KUNIT_EXPECT_EQ(test, rate, DUMMY_CLOCK_RATE_1);
2089
2090         KUNIT_ASSERT_EQ(test,
2091                         clk_set_rate_range(user2,
2092                                            DUMMY_CLOCK_RATE_2,
2093                                            ULONG_MAX),
2094                         0);
2095
2096         rate = clk_get_rate(clk);
2097         KUNIT_ASSERT_GT(test, rate, 0);
2098         KUNIT_EXPECT_EQ(test, rate, DUMMY_CLOCK_RATE_2);
2099
2100         clk_put(user2);
2101
2102         rate = clk_get_rate(clk);
2103         KUNIT_ASSERT_GT(test, rate, 0);
2104         KUNIT_EXPECT_EQ(test, rate, DUMMY_CLOCK_RATE_1);
2105
2106         clk_put(user1);
2107         clk_put(clk);
2108 }
2109
2110 static struct kunit_case clk_range_minimize_test_cases[] = {
2111         KUNIT_CASE(clk_range_test_set_range_rate_minimized),
2112         KUNIT_CASE(clk_range_test_multiple_set_range_rate_minimized),
2113         KUNIT_CASE(clk_range_test_multiple_set_range_rate_put_minimized),
2114         {}
2115 };
2116
2117 /*
2118  * Test suite for a basic rate clock, without any parent.
2119  *
2120  * These tests exercise the rate range API: clk_set_rate_range(),
2121  * clk_set_min_rate(), clk_set_max_rate(), clk_drop_range(), with a
2122  * driver that will always try to run at the lowest possible rate.
2123  */
2124 static struct kunit_suite clk_range_minimize_test_suite = {
2125         .name = "clk-range-minimize-test",
2126         .init = clk_minimize_test_init,
2127         .exit = clk_test_exit,
2128         .test_cases = clk_range_minimize_test_cases,
2129 };
2130
2131 struct clk_leaf_mux_ctx {
2132         struct clk_multiple_parent_ctx mux_ctx;
2133         struct clk_hw hw;
2134 };
2135
2136 static int
2137 clk_leaf_mux_set_rate_parent_test_init(struct kunit *test)
2138 {
2139         struct clk_leaf_mux_ctx *ctx;
2140         const char *top_parents[2] = { "parent-0", "parent-1" };
2141         int ret;
2142
2143         ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL);
2144         if (!ctx)
2145                 return -ENOMEM;
2146         test->priv = ctx;
2147
2148         ctx->mux_ctx.parents_ctx[0].hw.init = CLK_HW_INIT_NO_PARENT("parent-0",
2149                                                                     &clk_dummy_rate_ops,
2150                                                                     0);
2151         ctx->mux_ctx.parents_ctx[0].rate = DUMMY_CLOCK_RATE_1;
2152         ret = clk_hw_register(NULL, &ctx->mux_ctx.parents_ctx[0].hw);
2153         if (ret)
2154                 return ret;
2155
2156         ctx->mux_ctx.parents_ctx[1].hw.init = CLK_HW_INIT_NO_PARENT("parent-1",
2157                                                                     &clk_dummy_rate_ops,
2158                                                                     0);
2159         ctx->mux_ctx.parents_ctx[1].rate = DUMMY_CLOCK_RATE_2;
2160         ret = clk_hw_register(NULL, &ctx->mux_ctx.parents_ctx[1].hw);
2161         if (ret)
2162                 return ret;
2163
2164         ctx->mux_ctx.current_parent = 0;
2165         ctx->mux_ctx.hw.init = CLK_HW_INIT_PARENTS("test-mux", top_parents,
2166                                                    &clk_multiple_parents_mux_ops,
2167                                                    0);
2168         ret = clk_hw_register(NULL, &ctx->mux_ctx.hw);
2169         if (ret)
2170                 return ret;
2171
2172         ctx->hw.init = CLK_HW_INIT_HW("test-clock", &ctx->mux_ctx.hw,
2173                                       &clk_dummy_single_parent_ops,
2174                                       CLK_SET_RATE_PARENT);
2175         ret = clk_hw_register(NULL, &ctx->hw);
2176         if (ret)
2177                 return ret;
2178
2179         return 0;
2180 }
2181
2182 static void clk_leaf_mux_set_rate_parent_test_exit(struct kunit *test)
2183 {
2184         struct clk_leaf_mux_ctx *ctx = test->priv;
2185
2186         clk_hw_unregister(&ctx->hw);
2187         clk_hw_unregister(&ctx->mux_ctx.hw);
2188         clk_hw_unregister(&ctx->mux_ctx.parents_ctx[0].hw);
2189         clk_hw_unregister(&ctx->mux_ctx.parents_ctx[1].hw);
2190 }
2191
2192 /*
2193  * Test that, for a clock that will forward any rate request to its
2194  * parent, the rate request structure returned by __clk_determine_rate
2195  * is sane and will be what we expect.
2196  */
2197 static void clk_leaf_mux_set_rate_parent_determine_rate(struct kunit *test)
2198 {
2199         struct clk_leaf_mux_ctx *ctx = test->priv;
2200         struct clk_hw *hw = &ctx->hw;
2201         struct clk *clk = clk_hw_get_clk(hw, NULL);
2202         struct clk_rate_request req;
2203         unsigned long rate;
2204         int ret;
2205
2206         rate = clk_get_rate(clk);
2207         KUNIT_ASSERT_EQ(test, rate, DUMMY_CLOCK_RATE_1);
2208
2209         clk_hw_init_rate_request(hw, &req, DUMMY_CLOCK_RATE_2);
2210
2211         ret = __clk_determine_rate(hw, &req);
2212         KUNIT_ASSERT_EQ(test, ret, 0);
2213
2214         KUNIT_EXPECT_EQ(test, req.rate, DUMMY_CLOCK_RATE_2);
2215         KUNIT_EXPECT_EQ(test, req.best_parent_rate, DUMMY_CLOCK_RATE_2);
2216         KUNIT_EXPECT_PTR_EQ(test, req.best_parent_hw, &ctx->mux_ctx.hw);
2217
2218         clk_put(clk);
2219 }
2220
2221 static struct kunit_case clk_leaf_mux_set_rate_parent_test_cases[] = {
2222         KUNIT_CASE(clk_leaf_mux_set_rate_parent_determine_rate),
2223         {}
2224 };
2225
2226 /*
2227  * Test suite for a clock whose parent is a mux with multiple parents.
2228  * The leaf clock has CLK_SET_RATE_PARENT, and will forward rate
2229  * requests to the mux, which will then select which parent is the best
2230  * fit for a given rate.
2231  *
2232  * These tests exercise the behaviour of muxes, and the proper selection
2233  * of parents.
2234  */
2235 static struct kunit_suite clk_leaf_mux_set_rate_parent_test_suite = {
2236         .name = "clk-leaf-mux-set-rate-parent",
2237         .init = clk_leaf_mux_set_rate_parent_test_init,
2238         .exit = clk_leaf_mux_set_rate_parent_test_exit,
2239         .test_cases = clk_leaf_mux_set_rate_parent_test_cases,
2240 };
2241
2242 struct clk_mux_notifier_rate_change {
2243         bool done;
2244         unsigned long old_rate;
2245         unsigned long new_rate;
2246         wait_queue_head_t wq;
2247 };
2248
2249 struct clk_mux_notifier_ctx {
2250         struct clk_multiple_parent_ctx mux_ctx;
2251         struct clk *clk;
2252         struct notifier_block clk_nb;
2253         struct clk_mux_notifier_rate_change pre_rate_change;
2254         struct clk_mux_notifier_rate_change post_rate_change;
2255 };
2256
2257 #define NOTIFIER_TIMEOUT_MS 100
2258
2259 static int clk_mux_notifier_callback(struct notifier_block *nb,
2260                                      unsigned long action, void *data)
2261 {
2262         struct clk_notifier_data *clk_data = data;
2263         struct clk_mux_notifier_ctx *ctx = container_of(nb,
2264                                                         struct clk_mux_notifier_ctx,
2265                                                         clk_nb);
2266
2267         if (action & PRE_RATE_CHANGE) {
2268                 ctx->pre_rate_change.old_rate = clk_data->old_rate;
2269                 ctx->pre_rate_change.new_rate = clk_data->new_rate;
2270                 ctx->pre_rate_change.done = true;
2271                 wake_up_interruptible(&ctx->pre_rate_change.wq);
2272         }
2273
2274         if (action & POST_RATE_CHANGE) {
2275                 ctx->post_rate_change.old_rate = clk_data->old_rate;
2276                 ctx->post_rate_change.new_rate = clk_data->new_rate;
2277                 ctx->post_rate_change.done = true;
2278                 wake_up_interruptible(&ctx->post_rate_change.wq);
2279         }
2280
2281         return 0;
2282 }
2283
2284 static int clk_mux_notifier_test_init(struct kunit *test)
2285 {
2286         struct clk_mux_notifier_ctx *ctx;
2287         const char *top_parents[2] = { "parent-0", "parent-1" };
2288         int ret;
2289
2290         ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL);
2291         if (!ctx)
2292                 return -ENOMEM;
2293         test->priv = ctx;
2294         ctx->clk_nb.notifier_call = clk_mux_notifier_callback;
2295         init_waitqueue_head(&ctx->pre_rate_change.wq);
2296         init_waitqueue_head(&ctx->post_rate_change.wq);
2297
2298         ctx->mux_ctx.parents_ctx[0].hw.init = CLK_HW_INIT_NO_PARENT("parent-0",
2299                                                                     &clk_dummy_rate_ops,
2300                                                                     0);
2301         ctx->mux_ctx.parents_ctx[0].rate = DUMMY_CLOCK_RATE_1;
2302         ret = clk_hw_register(NULL, &ctx->mux_ctx.parents_ctx[0].hw);
2303         if (ret)
2304                 return ret;
2305
2306         ctx->mux_ctx.parents_ctx[1].hw.init = CLK_HW_INIT_NO_PARENT("parent-1",
2307                                                                     &clk_dummy_rate_ops,
2308                                                                     0);
2309         ctx->mux_ctx.parents_ctx[1].rate = DUMMY_CLOCK_RATE_2;
2310         ret = clk_hw_register(NULL, &ctx->mux_ctx.parents_ctx[1].hw);
2311         if (ret)
2312                 return ret;
2313
2314         ctx->mux_ctx.current_parent = 0;
2315         ctx->mux_ctx.hw.init = CLK_HW_INIT_PARENTS("test-mux", top_parents,
2316                                                    &clk_multiple_parents_mux_ops,
2317                                                    0);
2318         ret = clk_hw_register(NULL, &ctx->mux_ctx.hw);
2319         if (ret)
2320                 return ret;
2321
2322         ctx->clk = clk_hw_get_clk(&ctx->mux_ctx.hw, NULL);
2323         ret = clk_notifier_register(ctx->clk, &ctx->clk_nb);
2324         if (ret)
2325                 return ret;
2326
2327         return 0;
2328 }
2329
2330 static void clk_mux_notifier_test_exit(struct kunit *test)
2331 {
2332         struct clk_mux_notifier_ctx *ctx = test->priv;
2333         struct clk *clk = ctx->clk;
2334
2335         clk_notifier_unregister(clk, &ctx->clk_nb);
2336         clk_put(clk);
2337
2338         clk_hw_unregister(&ctx->mux_ctx.hw);
2339         clk_hw_unregister(&ctx->mux_ctx.parents_ctx[0].hw);
2340         clk_hw_unregister(&ctx->mux_ctx.parents_ctx[1].hw);
2341 }
2342
2343 /*
2344  * Test that if the we have a notifier registered on a mux, the core
2345  * will notify us when we switch to another parent, and with the proper
2346  * old and new rates.
2347  */
2348 static void clk_mux_notifier_set_parent_test(struct kunit *test)
2349 {
2350         struct clk_mux_notifier_ctx *ctx = test->priv;
2351         struct clk_hw *hw = &ctx->mux_ctx.hw;
2352         struct clk *clk = clk_hw_get_clk(hw, NULL);
2353         struct clk *new_parent = clk_hw_get_clk(&ctx->mux_ctx.parents_ctx[1].hw, NULL);
2354         int ret;
2355
2356         ret = clk_set_parent(clk, new_parent);
2357         KUNIT_ASSERT_EQ(test, ret, 0);
2358
2359         ret = wait_event_interruptible_timeout(ctx->pre_rate_change.wq,
2360                                                ctx->pre_rate_change.done,
2361                                                msecs_to_jiffies(NOTIFIER_TIMEOUT_MS));
2362         KUNIT_ASSERT_GT(test, ret, 0);
2363
2364         KUNIT_EXPECT_EQ(test, ctx->pre_rate_change.old_rate, DUMMY_CLOCK_RATE_1);
2365         KUNIT_EXPECT_EQ(test, ctx->pre_rate_change.new_rate, DUMMY_CLOCK_RATE_2);
2366
2367         ret = wait_event_interruptible_timeout(ctx->post_rate_change.wq,
2368                                                ctx->post_rate_change.done,
2369                                                msecs_to_jiffies(NOTIFIER_TIMEOUT_MS));
2370         KUNIT_ASSERT_GT(test, ret, 0);
2371
2372         KUNIT_EXPECT_EQ(test, ctx->post_rate_change.old_rate, DUMMY_CLOCK_RATE_1);
2373         KUNIT_EXPECT_EQ(test, ctx->post_rate_change.new_rate, DUMMY_CLOCK_RATE_2);
2374
2375         clk_put(new_parent);
2376         clk_put(clk);
2377 }
2378
2379 static struct kunit_case clk_mux_notifier_test_cases[] = {
2380         KUNIT_CASE(clk_mux_notifier_set_parent_test),
2381         {}
2382 };
2383
2384 /*
2385  * Test suite for a mux with multiple parents, and a notifier registered
2386  * on the mux.
2387  *
2388  * These tests exercise the behaviour of notifiers.
2389  */
2390 static struct kunit_suite clk_mux_notifier_test_suite = {
2391         .name = "clk-mux-notifier",
2392         .init = clk_mux_notifier_test_init,
2393         .exit = clk_mux_notifier_test_exit,
2394         .test_cases = clk_mux_notifier_test_cases,
2395 };
2396
2397 kunit_test_suites(
2398         &clk_leaf_mux_set_rate_parent_test_suite,
2399         &clk_test_suite,
2400         &clk_multiple_parents_mux_test_suite,
2401         &clk_mux_notifier_test_suite,
2402         &clk_orphan_transparent_multiple_parent_mux_test_suite,
2403         &clk_orphan_transparent_single_parent_test_suite,
2404         &clk_orphan_two_level_root_last_test_suite,
2405         &clk_range_test_suite,
2406         &clk_range_maximize_test_suite,
2407         &clk_range_minimize_test_suite,
2408         &clk_single_parent_mux_test_suite,
2409         &clk_uncached_test_suite
2410 );
2411 MODULE_LICENSE("GPL v2");