sunxi: Add Bananapi M2+ H5 board
[platform/kernel/u-boot.git] / test / dm / clk.c
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * Copyright (C) 2015 Google, Inc
4  */
5
6 #include <common.h>
7 #include <dm.h>
8 #include <asm/clk.h>
9 #include <dm/test.h>
10 #include <linux/err.h>
11 #include <test/ut.h>
12
13 static int dm_test_clk(struct unit_test_state *uts)
14 {
15         struct udevice *dev_fixed, *dev_clk, *dev_test;
16         ulong rate;
17
18         ut_assertok(uclass_get_device_by_name(UCLASS_CLK, "clk-fixed",
19                                               &dev_fixed));
20
21         ut_assertok(uclass_get_device_by_name(UCLASS_CLK, "clk-sbox",
22                                               &dev_clk));
23         ut_asserteq(0, sandbox_clk_query_enable(dev_clk, SANDBOX_CLK_ID_SPI));
24         ut_asserteq(0, sandbox_clk_query_enable(dev_clk, SANDBOX_CLK_ID_I2C));
25         ut_asserteq(0, sandbox_clk_query_rate(dev_clk, SANDBOX_CLK_ID_SPI));
26         ut_asserteq(0, sandbox_clk_query_rate(dev_clk, SANDBOX_CLK_ID_I2C));
27
28         ut_assertok(uclass_get_device_by_name(UCLASS_MISC, "clk-test",
29                                               &dev_test));
30         ut_assertok(sandbox_clk_test_get(dev_test));
31         ut_assertok(sandbox_clk_test_valid(dev_test));
32
33         ut_asserteq(1234,
34                     sandbox_clk_test_get_rate(dev_test,
35                                               SANDBOX_CLK_TEST_ID_FIXED));
36         ut_asserteq(0, sandbox_clk_test_get_rate(dev_test,
37                                                  SANDBOX_CLK_TEST_ID_SPI));
38         ut_asserteq(0, sandbox_clk_test_get_rate(dev_test,
39                                                  SANDBOX_CLK_TEST_ID_I2C));
40
41         rate = sandbox_clk_test_set_rate(dev_test, SANDBOX_CLK_TEST_ID_FIXED,
42                                          12345);
43         ut_assert(IS_ERR_VALUE(rate));
44         rate = sandbox_clk_test_get_rate(dev_test, SANDBOX_CLK_TEST_ID_FIXED);
45         ut_asserteq(1234, rate);
46
47         ut_asserteq(0, sandbox_clk_test_set_rate(dev_test,
48                                                  SANDBOX_CLK_TEST_ID_SPI,
49                                                  1000));
50         ut_asserteq(0, sandbox_clk_test_set_rate(dev_test,
51                                                  SANDBOX_CLK_TEST_ID_I2C,
52                                                  2000));
53
54         ut_asserteq(1000, sandbox_clk_test_get_rate(dev_test,
55                                                     SANDBOX_CLK_TEST_ID_SPI));
56         ut_asserteq(2000, sandbox_clk_test_get_rate(dev_test,
57                                                     SANDBOX_CLK_TEST_ID_I2C));
58
59         ut_asserteq(1000, sandbox_clk_test_set_rate(dev_test,
60                                                     SANDBOX_CLK_TEST_ID_SPI,
61                                                     10000));
62         ut_asserteq(2000, sandbox_clk_test_set_rate(dev_test,
63                                                     SANDBOX_CLK_TEST_ID_I2C,
64                                                     20000));
65
66         rate = sandbox_clk_test_set_rate(dev_test, SANDBOX_CLK_TEST_ID_SPI, 0);
67         ut_assert(IS_ERR_VALUE(rate));
68         rate = sandbox_clk_test_set_rate(dev_test, SANDBOX_CLK_TEST_ID_I2C, 0);
69         ut_assert(IS_ERR_VALUE(rate));
70
71         ut_asserteq(10000, sandbox_clk_test_get_rate(dev_test,
72                                                      SANDBOX_CLK_TEST_ID_SPI));
73         ut_asserteq(20000, sandbox_clk_test_get_rate(dev_test,
74                                                      SANDBOX_CLK_TEST_ID_I2C));
75
76         ut_asserteq(0, sandbox_clk_query_enable(dev_clk, SANDBOX_CLK_ID_SPI));
77         ut_asserteq(0, sandbox_clk_query_enable(dev_clk, SANDBOX_CLK_ID_I2C));
78         ut_asserteq(10000, sandbox_clk_query_rate(dev_clk, SANDBOX_CLK_ID_SPI));
79         ut_asserteq(20000, sandbox_clk_query_rate(dev_clk, SANDBOX_CLK_ID_I2C));
80
81         ut_assertok(sandbox_clk_test_enable(dev_test, SANDBOX_CLK_TEST_ID_SPI));
82         ut_asserteq(1, sandbox_clk_query_enable(dev_clk, SANDBOX_CLK_ID_SPI));
83         ut_asserteq(0, sandbox_clk_query_enable(dev_clk, SANDBOX_CLK_ID_I2C));
84
85         ut_assertok(sandbox_clk_test_enable(dev_test, SANDBOX_CLK_TEST_ID_I2C));
86         ut_asserteq(1, sandbox_clk_query_enable(dev_clk, SANDBOX_CLK_ID_SPI));
87         ut_asserteq(1, sandbox_clk_query_enable(dev_clk, SANDBOX_CLK_ID_I2C));
88
89         ut_assertok(sandbox_clk_test_disable(dev_test,
90                                              SANDBOX_CLK_TEST_ID_SPI));
91         ut_asserteq(0, sandbox_clk_query_enable(dev_clk, SANDBOX_CLK_ID_SPI));
92         ut_asserteq(1, sandbox_clk_query_enable(dev_clk, SANDBOX_CLK_ID_I2C));
93
94         ut_assertok(sandbox_clk_test_disable(dev_test,
95                                              SANDBOX_CLK_TEST_ID_I2C));
96         ut_asserteq(0, sandbox_clk_query_enable(dev_clk, SANDBOX_CLK_ID_SPI));
97         ut_asserteq(0, sandbox_clk_query_enable(dev_clk, SANDBOX_CLK_ID_I2C));
98
99         ut_assertok(sandbox_clk_test_free(dev_test));
100
101         return 0;
102 }
103 DM_TEST(dm_test_clk, DM_TESTF_SCAN_FDT);
104
105 static int dm_test_clk_bulk(struct unit_test_state *uts)
106 {
107         struct udevice *dev_clk, *dev_test;
108
109         ut_assertok(uclass_get_device_by_name(UCLASS_CLK, "clk-sbox",
110                                               &dev_clk));
111         ut_assertok(uclass_get_device_by_name(UCLASS_MISC, "clk-test",
112                                               &dev_test));
113         ut_assertok(sandbox_clk_test_get_bulk(dev_test));
114
115         ut_asserteq(0, sandbox_clk_query_enable(dev_clk, SANDBOX_CLK_ID_SPI));
116         ut_asserteq(0, sandbox_clk_query_enable(dev_clk, SANDBOX_CLK_ID_I2C));
117
118         /* Fixed clock does not support enable, thus should not fail */
119         ut_assertok(sandbox_clk_test_enable_bulk(dev_test));
120         ut_asserteq(1, sandbox_clk_query_enable(dev_clk, SANDBOX_CLK_ID_SPI));
121         ut_asserteq(1, sandbox_clk_query_enable(dev_clk, SANDBOX_CLK_ID_I2C));
122
123         /* Fixed clock does not support disable, thus should not fail */
124         ut_assertok(sandbox_clk_test_disable_bulk(dev_test));
125         ut_asserteq(0, sandbox_clk_query_enable(dev_clk, SANDBOX_CLK_ID_SPI));
126         ut_asserteq(0, sandbox_clk_query_enable(dev_clk, SANDBOX_CLK_ID_I2C));
127
128         /* Fixed clock does not support enable, thus should not fail */
129         ut_assertok(sandbox_clk_test_enable_bulk(dev_test));
130         ut_asserteq(1, sandbox_clk_query_enable(dev_clk, SANDBOX_CLK_ID_SPI));
131         ut_asserteq(1, sandbox_clk_query_enable(dev_clk, SANDBOX_CLK_ID_I2C));
132
133         /* Fixed clock does not support disable, thus should not fail */
134         ut_assertok(sandbox_clk_test_release_bulk(dev_test));
135         ut_asserteq(0, sandbox_clk_query_enable(dev_clk, SANDBOX_CLK_ID_SPI));
136         ut_asserteq(0, sandbox_clk_query_enable(dev_clk, SANDBOX_CLK_ID_I2C));
137
138         return 0;
139 }
140 DM_TEST(dm_test_clk_bulk, DM_TESTF_SCAN_FDT);