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