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