788e43e59e1a9b533502e93ea3475523b9ed6518
[profile/mobile/platform/kernel/u-boot-tm1.git] / arch / arm / cpu / armv7 / sc8830 / clock_test.c
1 #include <ubi_uboot.h>\r
2 #include <linux/compiler.h>\r
3 #include <asm/arch/clock.h>\r
4 \r
5 extern const u32 __clkinit0 __clkinit_begin;\r
6 extern const u32 __clkinit2 __clkinit_end;\r
7 \r
8 static unsigned int get_clock_rate(const char *clk_name)\r
9 {       \r
10         unsigned int rate;\r
11         struct clk *clk;\r
12 \r
13         clk =clk_get(0, clk_name);\r
14 \r
15         if (clk == NULL)\r
16         {\r
17                 printf("%s can't find!\r\n");\r
18                 return 0;\r
19         }\r
20 \r
21         if (clk->ops)\r
22         {\r
23                 rate = clk->ops->get_rate(clk);\r
24         }\r
25         else\r
26         {\r
27                 rate = clk->rate;\r
28         }\r
29         printf("%s : %d\r\n", clk_name, rate);\r
30         return rate;\r
31 }\r
32 \r
33 static unsigned int change_clock_rate(const *clk_name, unsigned int rate)\r
34 {\r
35         struct clk *clk;\r
36 \r
37         clk =clk_get(0, clk_name);\r
38 \r
39         if (clk == NULL)\r
40         {\r
41                 printf("%s can't find!\r\n");\r
42                 return -1;\r
43         }\r
44 \r
45         if (clk->ops)\r
46         {\r
47                 if (clk->ops->set_rate)\r
48                 {\r
49                         clk->ops->set_rate(clk, rate);\r
50                 }\r
51                 else\r
52                 {\r
53                         return -1;\r
54                 }\r
55         }\r
56         else\r
57         {\r
58                 return -1;\r
59         }\r
60         printf("%s ==> %d\r\n", clk_name, rate);\r
61         return 0;\r
62 }\r
63 \r
64 void clock_test()\r
65 {\r
66         struct clk *clk;\r
67                 \r
68         sci_clock_init();\r
69 \r
70         printf("clock_test, __clkinit_begin:%08X (%08X), __clkinit_end:%08X (%08X)\r\n\r\n", \r
71                 &__clkinit_begin, __clkinit_begin, &__clkinit_end, __clkinit_end);\r
72 \r
73         {\r
74                 struct clk_lookup *cl = (struct clk_lookup *)(&__clkinit_begin + 1);\r
75                 while (cl < (struct clk_lookup *)&__clkinit_end)\r
76                 {\r
77                         clk =clk_get(0, cl->con_id);\r
78                         if (clk != ERR_PTR(-2))\r
79                         {\r
80                                 if (clk->ops)\r
81                                 {\r
82                                         printf("1.clk: %s, rate: %d\r\n", cl->con_id, clk->ops->get_rate(clk));\r
83                                 }\r
84                                 else\r
85                                 {\r
86                                         printf("2.clk: %s, rate: %d\r\n", cl->con_id, clk->rate);\r
87                                 }\r
88                         }\r
89                         else\r
90                         {\r
91                                 printf("get %s error!\r\n", cl->con_id);\r
92                         }\r
93                         cl++;\r
94                 }
95         }\r
96         printf("---------------------------------------\r\n");\r
97         get_clock_rate("clk_arm");\r
98         get_clock_rate("clk_axi");\r
99         get_clock_rate("clk_ahb");\r
100         get_clock_rate("clk_apb");\r
101         \r
102         get_clock_rate("clk_emmc");\r
103         change_clock_rate("clk_emmc", 192000000);\r
104         get_clock_rate("clk_emmc");\r
105         \r
106         get_clock_rate("clk_apb");\r
107         change_clock_rate("clk_apb", 100000000);\r
108         get_clock_rate("clk_apb");\r
109 \r
110 \r
111         get_clock_rate("clk_emc");\r
112         change_clock_rate("clk_emc", 100000000);\r
113         get_clock_rate("clk_emc");\r
114 \r
115         get_clock_rate("clk_dbg");\r
116         change_clock_rate("clk_dbg", 200000000);\r
117         get_clock_rate("clk_dbg");\r
118 \r
119         printf("clock test end!\r\n");\r
120 }\r
121 \r