Commit | Line | Data |
---|---|---|
a64459c4 AM |
1 | /* |
2 | * TI81XX Clock Domain data. | |
3 | * | |
4 | * Copyright (C) 2010 Texas Instruments, Inc. - http://www.ti.com/ | |
5 | * Copyright (C) 2013 SKTB SKiT, http://www.skitlab.ru/ | |
6 | * | |
7 | * This program is free software; you can redistribute it and/or | |
8 | * modify it under the terms of the GNU General Public License as | |
9 | * published by the Free Software Foundation version 2. | |
10 | * | |
11 | * This program is distributed "as is" WITHOUT ANY WARRANTY of any | |
12 | * kind, whether express or implied; without even the implied warranty | |
13 | * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | * GNU General Public License for more details. | |
15 | */ | |
16 | ||
17 | #ifndef __ARCH_ARM_MACH_OMAP2_CLOCKDOMAINS_81XX_H | |
18 | #define __ARCH_ARM_MACH_OMAP2_CLOCKDOMAINS_81XX_H | |
19 | ||
20 | #include <linux/kernel.h> | |
21 | #include <linux/io.h> | |
22 | ||
23 | #include "clockdomain.h" | |
24 | #include "cm81xx.h" | |
25 | ||
26 | /* | |
27 | * Note that 814x seems to have HWSUP_SWSUP for many clockdomains | |
28 | * while 816x does not. According to the TRM, 816x only has HWSUP | |
29 | * for ALWON_L3_FAST. Also note that the TI tree clockdomains81xx.h | |
30 | * seems to have the related ifdef the wrong way around claiming | |
31 | * 816x supports HWSUP while 814x does not. For now, we only set | |
32 | * HWSUP for ALWON_L3_FAST as that seems to be supported for both | |
33 | * dm814x and dm816x. | |
34 | */ | |
35 | ||
36 | /* Common for 81xx */ | |
37 | ||
38 | static struct clockdomain alwon_l3_slow_81xx_clkdm = { | |
39 | .name = "alwon_l3s_clkdm", | |
40 | .pwrdm = { .name = "alwon_pwrdm" }, | |
41 | .cm_inst = TI81XX_CM_ALWON_MOD, | |
42 | .clkdm_offs = TI81XX_CM_ALWON_L3_SLOW_CLKDM, | |
43 | .flags = CLKDM_CAN_SWSUP, | |
44 | }; | |
45 | ||
46 | static struct clockdomain alwon_l3_med_81xx_clkdm = { | |
47 | .name = "alwon_l3_med_clkdm", | |
48 | .pwrdm = { .name = "alwon_pwrdm" }, | |
49 | .cm_inst = TI81XX_CM_ALWON_MOD, | |
50 | .clkdm_offs = TI81XX_CM_ALWON_L3_MED_CLKDM, | |
51 | .flags = CLKDM_CAN_SWSUP, | |
52 | }; | |
53 | ||
54 | static struct clockdomain alwon_l3_fast_81xx_clkdm = { | |
55 | .name = "alwon_l3_fast_clkdm", | |
56 | .pwrdm = { .name = "alwon_pwrdm" }, | |
57 | .cm_inst = TI81XX_CM_ALWON_MOD, | |
58 | .clkdm_offs = TI81XX_CM_ALWON_L3_FAST_CLKDM, | |
59 | .flags = CLKDM_CAN_HWSUP_SWSUP, | |
60 | }; | |
61 | ||
62 | static struct clockdomain alwon_ethernet_81xx_clkdm = { | |
63 | .name = "alwon_ethernet_clkdm", | |
64 | .pwrdm = { .name = "alwon_pwrdm" }, | |
65 | .cm_inst = TI81XX_CM_ALWON_MOD, | |
66 | .clkdm_offs = TI81XX_CM_ETHERNET_CLKDM, | |
67 | .flags = CLKDM_CAN_SWSUP, | |
68 | }; | |
69 | ||
70 | static struct clockdomain mmu_81xx_clkdm = { | |
71 | .name = "mmu_clkdm", | |
72 | .pwrdm = { .name = "alwon_pwrdm" }, | |
73 | .cm_inst = TI81XX_CM_ALWON_MOD, | |
74 | .clkdm_offs = TI81XX_CM_MMU_CLKDM, | |
75 | .flags = CLKDM_CAN_SWSUP, | |
76 | }; | |
77 | ||
78 | static struct clockdomain mmu_cfg_81xx_clkdm = { | |
79 | .name = "mmu_cfg_clkdm", | |
80 | .pwrdm = { .name = "alwon_pwrdm" }, | |
81 | .cm_inst = TI81XX_CM_ALWON_MOD, | |
82 | .clkdm_offs = TI81XX_CM_MMUCFG_CLKDM, | |
83 | .flags = CLKDM_CAN_SWSUP, | |
84 | }; | |
85 | ||
418d4ebc TL |
86 | static struct clockdomain default_l3_slow_81xx_clkdm = { |
87 | .name = "default_l3_slow_clkdm", | |
88 | .pwrdm = { .name = "default_pwrdm" }, | |
89 | .cm_inst = TI81XX_CM_DEFAULT_MOD, | |
90 | .clkdm_offs = TI816X_CM_DEFAULT_L3_SLOW_CLKDM, | |
91 | .flags = CLKDM_CAN_SWSUP, | |
92 | }; | |
93 | ||
a64459c4 AM |
94 | /* 816x only */ |
95 | ||
96 | static struct clockdomain alwon_mpu_816x_clkdm = { | |
97 | .name = "alwon_mpu_clkdm", | |
98 | .pwrdm = { .name = "alwon_pwrdm" }, | |
99 | .cm_inst = TI81XX_CM_ALWON_MOD, | |
100 | .clkdm_offs = TI81XX_CM_ALWON_MPU_CLKDM, | |
101 | .flags = CLKDM_CAN_SWSUP, | |
102 | }; | |
103 | ||
104 | static struct clockdomain active_gem_816x_clkdm = { | |
105 | .name = "active_gem_clkdm", | |
106 | .pwrdm = { .name = "active_pwrdm" }, | |
418d4ebc | 107 | .cm_inst = TI81XX_CM_ACTIVE_MOD, |
a64459c4 AM |
108 | .clkdm_offs = TI816X_CM_ACTIVE_GEM_CLKDM, |
109 | .flags = CLKDM_CAN_SWSUP, | |
110 | }; | |
111 | ||
112 | static struct clockdomain ivahd0_816x_clkdm = { | |
113 | .name = "ivahd0_clkdm", | |
114 | .pwrdm = { .name = "ivahd0_pwrdm" }, | |
115 | .cm_inst = TI816X_CM_IVAHD0_MOD, | |
116 | .clkdm_offs = TI816X_CM_IVAHD0_CLKDM, | |
117 | .flags = CLKDM_CAN_SWSUP, | |
118 | }; | |
119 | ||
120 | static struct clockdomain ivahd1_816x_clkdm = { | |
121 | .name = "ivahd1_clkdm", | |
122 | .pwrdm = { .name = "ivahd1_pwrdm" }, | |
123 | .cm_inst = TI816X_CM_IVAHD1_MOD, | |
124 | .clkdm_offs = TI816X_CM_IVAHD1_CLKDM, | |
125 | .flags = CLKDM_CAN_SWSUP, | |
126 | }; | |
127 | ||
128 | static struct clockdomain ivahd2_816x_clkdm = { | |
129 | .name = "ivahd2_clkdm", | |
130 | .pwrdm = { .name = "ivahd2_pwrdm" }, | |
131 | .cm_inst = TI816X_CM_IVAHD2_MOD, | |
132 | .clkdm_offs = TI816X_CM_IVAHD2_CLKDM, | |
133 | .flags = CLKDM_CAN_SWSUP, | |
134 | }; | |
135 | ||
136 | static struct clockdomain sgx_816x_clkdm = { | |
137 | .name = "sgx_clkdm", | |
138 | .pwrdm = { .name = "sgx_pwrdm" }, | |
418d4ebc | 139 | .cm_inst = TI81XX_CM_SGX_MOD, |
a64459c4 AM |
140 | .clkdm_offs = TI816X_CM_SGX_CLKDM, |
141 | .flags = CLKDM_CAN_SWSUP, | |
142 | }; | |
143 | ||
144 | static struct clockdomain default_l3_med_816x_clkdm = { | |
145 | .name = "default_l3_med_clkdm", | |
146 | .pwrdm = { .name = "default_pwrdm" }, | |
418d4ebc | 147 | .cm_inst = TI81XX_CM_DEFAULT_MOD, |
a64459c4 AM |
148 | .clkdm_offs = TI816X_CM_DEFAULT_L3_MED_CLKDM, |
149 | .flags = CLKDM_CAN_SWSUP, | |
150 | }; | |
151 | ||
152 | static struct clockdomain default_ducati_816x_clkdm = { | |
153 | .name = "default_ducati_clkdm", | |
154 | .pwrdm = { .name = "default_pwrdm" }, | |
418d4ebc | 155 | .cm_inst = TI81XX_CM_DEFAULT_MOD, |
a64459c4 AM |
156 | .clkdm_offs = TI816X_CM_DEFAULT_DUCATI_CLKDM, |
157 | .flags = CLKDM_CAN_SWSUP, | |
158 | }; | |
159 | ||
160 | static struct clockdomain default_pci_816x_clkdm = { | |
161 | .name = "default_pci_clkdm", | |
162 | .pwrdm = { .name = "default_pwrdm" }, | |
418d4ebc | 163 | .cm_inst = TI81XX_CM_DEFAULT_MOD, |
a64459c4 AM |
164 | .clkdm_offs = TI816X_CM_DEFAULT_PCI_CLKDM, |
165 | .flags = CLKDM_CAN_SWSUP, | |
166 | }; | |
167 | ||
185fde6d TL |
168 | static struct clockdomain *clockdomains_ti814x[] __initdata = { |
169 | &alwon_l3_slow_81xx_clkdm, | |
170 | &alwon_l3_med_81xx_clkdm, | |
171 | &alwon_l3_fast_81xx_clkdm, | |
172 | &alwon_ethernet_81xx_clkdm, | |
173 | &mmu_81xx_clkdm, | |
174 | &mmu_cfg_81xx_clkdm, | |
418d4ebc | 175 | &default_l3_slow_81xx_clkdm, |
185fde6d TL |
176 | NULL, |
177 | }; | |
178 | ||
179 | void __init ti814x_clockdomains_init(void) | |
180 | { | |
181 | clkdm_register_platform_funcs(&am33xx_clkdm_operations); | |
182 | clkdm_register_clkdms(clockdomains_ti814x); | |
183 | clkdm_complete_init(); | |
184 | } | |
185 | ||
186 | static struct clockdomain *clockdomains_ti816x[] __initdata = { | |
a64459c4 AM |
187 | &alwon_mpu_816x_clkdm, |
188 | &alwon_l3_slow_81xx_clkdm, | |
189 | &alwon_l3_med_81xx_clkdm, | |
190 | &alwon_l3_fast_81xx_clkdm, | |
191 | &alwon_ethernet_81xx_clkdm, | |
192 | &mmu_81xx_clkdm, | |
193 | &mmu_cfg_81xx_clkdm, | |
194 | &active_gem_816x_clkdm, | |
195 | &ivahd0_816x_clkdm, | |
196 | &ivahd1_816x_clkdm, | |
197 | &ivahd2_816x_clkdm, | |
198 | &sgx_816x_clkdm, | |
199 | &default_l3_med_816x_clkdm, | |
200 | &default_ducati_816x_clkdm, | |
201 | &default_pci_816x_clkdm, | |
418d4ebc | 202 | &default_l3_slow_81xx_clkdm, |
a64459c4 AM |
203 | NULL, |
204 | }; | |
205 | ||
185fde6d | 206 | void __init ti816x_clockdomains_init(void) |
a64459c4 AM |
207 | { |
208 | clkdm_register_platform_funcs(&am33xx_clkdm_operations); | |
185fde6d | 209 | clkdm_register_clkdms(clockdomains_ti816x); |
a64459c4 AM |
210 | clkdm_complete_init(); |
211 | } | |
212 | #endif |