xref: /OK3568_Linux_fs/u-boot/test/dm/clk.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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