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