Merge git://git.denx.de/u-boot-i2c
[oweals/u-boot.git] / test / dm / clk.c
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
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
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);