imx6_ccmvar.h revision 1.1 1 1.1 skrll /* $NetBSD: imx6_ccmvar.h,v 1.1 2020/12/23 14:42:38 skrll Exp $ */
2 1.1 skrll /*
3 1.1 skrll * Copyright (c) 2012,2019 Genetec Corporation. All rights reserved.
4 1.1 skrll * Written by Hashimoto Kenichi for Genetec Corporation.
5 1.1 skrll *
6 1.1 skrll * Redistribution and use in source and binary forms, with or without
7 1.1 skrll * modification, are permitted provided that the following conditions
8 1.1 skrll * are met:
9 1.1 skrll * 1. Redistributions of source code must retain the above copyright
10 1.1 skrll * notice, this list of conditions and the following disclaimer.
11 1.1 skrll * 2. Redistributions in binary form must reproduce the above copyright
12 1.1 skrll * notice, this list of conditions and the following disclaimer in the
13 1.1 skrll * documentation and/or other materials provided with the distribution.
14 1.1 skrll *
15 1.1 skrll * THIS SOFTWARE IS PROVIDED BY GENETEC CORPORATION ``AS IS'' AND
16 1.1 skrll * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17 1.1 skrll * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18 1.1 skrll * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GENETEC CORPORATION
19 1.1 skrll * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 1.1 skrll * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 1.1 skrll * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 1.1 skrll * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 1.1 skrll * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 1.1 skrll * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 1.1 skrll * POSSIBILITY OF SUCH DAMAGE.
26 1.1 skrll */
27 1.1 skrll
28 1.1 skrll #ifndef _ARM_NXP_IMX6_CCMVAR_H_
29 1.1 skrll #define _ARM_NXP_IMX6_CCMVAR_H_
30 1.1 skrll
31 1.1 skrll #include <dev/clk/clk.h>
32 1.1 skrll #include <dev/clk/clk_backend.h>
33 1.1 skrll
34 1.1 skrll struct imx6ccm_softc {
35 1.1 skrll device_t sc_dev;
36 1.1 skrll bus_space_tag_t sc_iot;
37 1.1 skrll bus_space_handle_t sc_ioh;
38 1.1 skrll bus_space_handle_t sc_ioh_analog;
39 1.1 skrll
40 1.1 skrll struct clk_domain sc_clkdom;
41 1.1 skrll };
42 1.1 skrll
43 1.1 skrll void imx6ccm_attach_common(device_t);
44 1.1 skrll
45 1.1 skrll struct clk *imx6_get_clock(const char *);
46 1.1 skrll struct clk *imx6_get_clock_by_id(u_int);
47 1.1 skrll
48 1.1 skrll /* Clock IDs */
49 1.1 skrll #define IMX6CLK_DUMMY 0
50 1.1 skrll #define IMX6CLK_CKIL 1
51 1.1 skrll #define IMX6CLK_CKIH 2
52 1.1 skrll #define IMX6CLK_OSC 3
53 1.1 skrll #define IMX6CLK_PLL2_PFD0_352M 4
54 1.1 skrll #define IMX6CLK_PLL2_PFD1_594M 5
55 1.1 skrll #define IMX6CLK_PLL2_PFD2_396M 6
56 1.1 skrll #define IMX6CLK_PLL3_PFD0_720M 7
57 1.1 skrll #define IMX6CLK_PLL3_PFD1_540M 8
58 1.1 skrll #define IMX6CLK_PLL3_PFD2_508M 9
59 1.1 skrll #define IMX6CLK_PLL3_PFD3_454M 10
60 1.1 skrll #define IMX6CLK_PLL2_198M 11
61 1.1 skrll #define IMX6CLK_PLL3_120M 12
62 1.1 skrll #define IMX6CLK_PLL3_80M 13
63 1.1 skrll #define IMX6CLK_PLL3_60M 14
64 1.1 skrll #define IMX6CLK_TWD 15
65 1.1 skrll #define IMX6CLK_STEP 16
66 1.1 skrll #define IMX6CLK_PLL1_SW 17
67 1.1 skrll #define IMX6CLK_PERIPH_PRE 18
68 1.1 skrll #define IMX6CLK_PERIPH2_PRE 19
69 1.1 skrll #define IMX6CLK_PERIPH_CLK2_SEL 20
70 1.1 skrll #define IMX6CLK_PERIPH2_CLK2_SEL 21
71 1.1 skrll #define IMX6CLK_AXI_SEL 22
72 1.1 skrll #define IMX6CLK_ESAI_SEL 23
73 1.1 skrll #define IMX6CLK_ASRC_SEL 24
74 1.1 skrll #define IMX6CLK_SPDIF_SEL 25
75 1.1 skrll #define IMX6CLK_GPU2D_AXI 26
76 1.1 skrll #define IMX6CLK_GPU3D_AXI 27
77 1.1 skrll #define IMX6CLK_GPU2D_CORE_SEL 28
78 1.1 skrll #define IMX6CLK_GPU3D_CORE_SEL 29
79 1.1 skrll #define IMX6CLK_GPU3D_SHADER_SEL 30
80 1.1 skrll #define IMX6CLK_IPU1_SEL 31
81 1.1 skrll #define IMX6CLK_IPU2_SEL 32
82 1.1 skrll #define IMX6CLK_LDB_DI0_SEL 33
83 1.1 skrll #define IMX6CLK_LDB_DI1_SEL 34
84 1.1 skrll #define IMX6CLK_IPU1_DI0_PRE_SEL 35
85 1.1 skrll #define IMX6CLK_IPU1_DI1_PRE_SEL 36
86 1.1 skrll #define IMX6CLK_IPU2_DI0_PRE_SEL 37
87 1.1 skrll #define IMX6CLK_IPU2_DI1_PRE_SEL 38
88 1.1 skrll #define IMX6CLK_IPU1_DI0_SEL 39
89 1.1 skrll #define IMX6CLK_IPU1_DI1_SEL 40
90 1.1 skrll #define IMX6CLK_IPU2_DI0_SEL 41
91 1.1 skrll #define IMX6CLK_IPU2_DI1_SEL 42
92 1.1 skrll #define IMX6CLK_HSI_TX_SEL 43
93 1.1 skrll #define IMX6CLK_PCIE_AXI_SEL 44
94 1.1 skrll #define IMX6CLK_SSI1_SEL 45
95 1.1 skrll #define IMX6CLK_SSI2_SEL 46
96 1.1 skrll #define IMX6CLK_SSI3_SEL 47
97 1.1 skrll #define IMX6CLK_USDHC1_SEL 48
98 1.1 skrll #define IMX6CLK_USDHC2_SEL 49
99 1.1 skrll #define IMX6CLK_USDHC3_SEL 50
100 1.1 skrll #define IMX6CLK_USDHC4_SEL 51
101 1.1 skrll #define IMX6CLK_ENFC_SEL 52
102 1.1 skrll #define IMX6CLK_EIM_SEL 53
103 1.1 skrll #define IMX6CLK_EIM_SLOW_SEL 54
104 1.1 skrll #define IMX6CLK_VDO_AXI_SEL 55
105 1.1 skrll #define IMX6CLK_VPU_AXI_SEL 56
106 1.1 skrll #define IMX6CLK_CKO1_SEL 57
107 1.1 skrll #define IMX6CLK_PERIPH 58
108 1.1 skrll #define IMX6CLK_PERIPH2 59
109 1.1 skrll #define IMX6CLK_PERIPH_CLK2 60
110 1.1 skrll #define IMX6CLK_PERIPH2_CLK2 61
111 1.1 skrll #define IMX6CLK_IPG 62
112 1.1 skrll #define IMX6CLK_IPG_PER 63
113 1.1 skrll #define IMX6CLK_ESAI_PRED 64
114 1.1 skrll #define IMX6CLK_ESAI_PODF 65
115 1.1 skrll #define IMX6CLK_ASRC_PRED 66
116 1.1 skrll #define IMX6CLK_ASRC_PODF 67
117 1.1 skrll #define IMX6CLK_SPDIF_PRED 68
118 1.1 skrll #define IMX6CLK_SPDIF_PODF 69
119 1.1 skrll #define IMX6CLK_CAN_ROOT 70
120 1.1 skrll #define IMX6CLK_ECSPI_ROOT 71
121 1.1 skrll #define IMX6CLK_GPU2D_CORE_PODF 72
122 1.1 skrll #define IMX6CLK_GPU3D_CORE_PODF 73
123 1.1 skrll #define IMX6CLK_GPU3D_SHADER 74
124 1.1 skrll #define IMX6CLK_IPU1_PODF 75
125 1.1 skrll #define IMX6CLK_IPU2_PODF 76
126 1.1 skrll #define IMX6CLK_LDB_DI0_PODF 77
127 1.1 skrll #define IMX6CLK_LDB_DI1_PODF 78
128 1.1 skrll #define IMX6CLK_IPU1_DI0_PRE 79
129 1.1 skrll #define IMX6CLK_IPU1_DI1_PRE 80
130 1.1 skrll #define IMX6CLK_IPU2_DI0_PRE 81
131 1.1 skrll #define IMX6CLK_IPU2_DI1_PRE 82
132 1.1 skrll #define IMX6CLK_HSI_TX_PODF 83
133 1.1 skrll #define IMX6CLK_SSI1_PRED 84
134 1.1 skrll #define IMX6CLK_SSI1_PODF 85
135 1.1 skrll #define IMX6CLK_SSI2_PRED 86
136 1.1 skrll #define IMX6CLK_SSI2_PODF 87
137 1.1 skrll #define IMX6CLK_SSI3_PRED 88
138 1.1 skrll #define IMX6CLK_SSI3_PODF 89
139 1.1 skrll #define IMX6CLK_UART_SERIAL_PODF 90
140 1.1 skrll #define IMX6CLK_USDHC1_PODF 91
141 1.1 skrll #define IMX6CLK_USDHC2_PODF 92
142 1.1 skrll #define IMX6CLK_USDHC3_PODF 93
143 1.1 skrll #define IMX6CLK_USDHC4_PODF 94
144 1.1 skrll #define IMX6CLK_ENFC_PRED 95
145 1.1 skrll #define IMX6CLK_ENFC_PODF 96
146 1.1 skrll #define IMX6CLK_EIM_PODF 97
147 1.1 skrll #define IMX6CLK_EIM_SLOW_PODF 98
148 1.1 skrll #define IMX6CLK_VPU_AXI_PODF 99
149 1.1 skrll #define IMX6CLK_CKO1_PODF 100
150 1.1 skrll #define IMX6CLK_AXI 101
151 1.1 skrll #define IMX6CLK_MMDC_CH0_AXI_PODF 102
152 1.1 skrll #define IMX6CLK_MMDC_CH1_AXI_PODF 103
153 1.1 skrll #define IMX6CLK_ARM 104
154 1.1 skrll #define IMX6CLK_AHB 105
155 1.1 skrll #define IMX6CLK_APBH_DMA 106
156 1.1 skrll #define IMX6CLK_ASRC 107
157 1.1 skrll #define IMX6CLK_CAN1_IPG 108
158 1.1 skrll #define IMX6CLK_CAN1_SERIAL 109
159 1.1 skrll #define IMX6CLK_CAN2_IPG 110
160 1.1 skrll #define IMX6CLK_CAN2_SERIAL 111
161 1.1 skrll #define IMX6CLK_ECSPI1 112
162 1.1 skrll #define IMX6CLK_ECSPI2 113
163 1.1 skrll #define IMX6CLK_ECSPI3 114
164 1.1 skrll #define IMX6CLK_ECSPI4 115
165 1.1 skrll #define IMX6CLK_ECSPI5 116 /* i.MX6Q */
166 1.1 skrll #define IMX6CLK_I2C4 116 /* i.MX6DL */
167 1.1 skrll #define IMX6CLK_ENET 117
168 1.1 skrll #define IMX6CLK_ESAI_EXTAL 118
169 1.1 skrll #define IMX6CLK_GPT_IPG 119
170 1.1 skrll #define IMX6CLK_GPT_IPG_PER 120
171 1.1 skrll #define IMX6CLK_GPU2D_CORE 121
172 1.1 skrll #define IMX6CLK_GPU3D_CORE 122
173 1.1 skrll #define IMX6CLK_HDMI_IAHB 123
174 1.1 skrll #define IMX6CLK_HDMI_ISFR 124
175 1.1 skrll #define IMX6CLK_I2C1 125
176 1.1 skrll #define IMX6CLK_I2C2 126
177 1.1 skrll #define IMX6CLK_I2C3 127
178 1.1 skrll #define IMX6CLK_IIM 128
179 1.1 skrll #define IMX6CLK_ENFC 129
180 1.1 skrll #define IMX6CLK_IPU1 130
181 1.1 skrll #define IMX6CLK_IPU1_DI0 131
182 1.1 skrll #define IMX6CLK_IPU1_DI1 132
183 1.1 skrll #define IMX6CLK_IPU2 133
184 1.1 skrll #define IMX6CLK_IPU2_DI0 134
185 1.1 skrll #define IMX6CLK_LDB_DI0 135
186 1.1 skrll #define IMX6CLK_LDB_DI1 136
187 1.1 skrll #define IMX6CLK_IPU2_DI1 137
188 1.1 skrll #define IMX6CLK_HSI_TX 138
189 1.1 skrll #define IMX6CLK_MLB 139
190 1.1 skrll #define IMX6CLK_MMDC_CH0_AXI 140
191 1.1 skrll #define IMX6CLK_MMDC_CH1_AXI 141
192 1.1 skrll #define IMX6CLK_OCRAM 142
193 1.1 skrll #define IMX6CLK_OPENVG_AXI 143
194 1.1 skrll #define IMX6CLK_PCIE_AXI 144
195 1.1 skrll #define IMX6CLK_PWM1 145
196 1.1 skrll #define IMX6CLK_PWM2 146
197 1.1 skrll #define IMX6CLK_PWM3 147
198 1.1 skrll #define IMX6CLK_PWM4 148
199 1.1 skrll #define IMX6CLK_PER1_BCH 149
200 1.1 skrll #define IMX6CLK_GPMI_BCH_APB 150
201 1.1 skrll #define IMX6CLK_GPMI_BCH 151
202 1.1 skrll #define IMX6CLK_GPMI_IO 152
203 1.1 skrll #define IMX6CLK_GPMI_APB 153
204 1.1 skrll #define IMX6CLK_SATA 154
205 1.1 skrll #define IMX6CLK_SDMA 155
206 1.1 skrll #define IMX6CLK_SPBA 156
207 1.1 skrll #define IMX6CLK_SSI1 157
208 1.1 skrll #define IMX6CLK_SSI2 158
209 1.1 skrll #define IMX6CLK_SSI3 159
210 1.1 skrll #define IMX6CLK_UART_IPG 160
211 1.1 skrll #define IMX6CLK_UART_SERIAL 161
212 1.1 skrll #define IMX6CLK_USBOH3 162
213 1.1 skrll #define IMX6CLK_USDHC1 163
214 1.1 skrll #define IMX6CLK_USDHC2 164
215 1.1 skrll #define IMX6CLK_USDHC3 165
216 1.1 skrll #define IMX6CLK_USDHC4 166
217 1.1 skrll #define IMX6CLK_VDO_AXI 167
218 1.1 skrll #define IMX6CLK_VPU_AXI 168
219 1.1 skrll #define IMX6CLK_CKO1 169
220 1.1 skrll #define IMX6CLK_PLL1_SYS 170
221 1.1 skrll #define IMX6CLK_PLL2_BUS 171
222 1.1 skrll #define IMX6CLK_PLL3_USB_OTG 172
223 1.1 skrll #define IMX6CLK_PLL4_AUDIO 173
224 1.1 skrll #define IMX6CLK_PLL5_VIDEO 174
225 1.1 skrll #define IMX6CLK_PLL8_MLB 175
226 1.1 skrll #define IMX6CLK_PLL7_USB_HOST 176
227 1.1 skrll #define IMX6CLK_PLL6_ENET 177
228 1.1 skrll #define IMX6CLK_SSI1_IPG 178
229 1.1 skrll #define IMX6CLK_SSI2_IPG 179
230 1.1 skrll #define IMX6CLK_SSI3_IPG 180
231 1.1 skrll #define IMX6CLK_ROM 181
232 1.1 skrll #define IMX6CLK_USBPHY1 182
233 1.1 skrll #define IMX6CLK_USBPHY2 183
234 1.1 skrll #define IMX6CLK_LDB_DI0_DIV_3_5 184
235 1.1 skrll #define IMX6CLK_LDB_DI1_DIV_3_5 185
236 1.1 skrll #define IMX6CLK_SATA_REF 186
237 1.1 skrll #define IMX6CLK_SATA_REF_100M 187
238 1.1 skrll #define IMX6CLK_PCIE_REF 188
239 1.1 skrll #define IMX6CLK_PCIE_REF_125M 189
240 1.1 skrll #define IMX6CLK_ENET_REF 190
241 1.1 skrll #define IMX6CLK_USBPHY1_GATE 191
242 1.1 skrll #define IMX6CLK_USBPHY2_GATE 192
243 1.1 skrll #define IMX6CLK_PLL4_POST_DIV 193
244 1.1 skrll #define IMX6CLK_PLL5_POST_DIV 194
245 1.1 skrll #define IMX6CLK_PLL5_VIDEO_DIV 195
246 1.1 skrll #define IMX6CLK_EIM_SLOW 196
247 1.1 skrll #define IMX6CLK_SPDIF 197
248 1.1 skrll #define IMX6CLK_CKO2_SEL 198
249 1.1 skrll #define IMX6CLK_CKO2_PODF 199
250 1.1 skrll #define IMX6CLK_CKO2 200
251 1.1 skrll #define IMX6CLK_CKO 201
252 1.1 skrll #define IMX6CLK_VDOA 202
253 1.1 skrll #define IMX6CLK_PLL4_AUDIO_DIV 203
254 1.1 skrll #define IMX6CLK_LVDS1_SEL 204
255 1.1 skrll #define IMX6CLK_LVDS2_SEL 205
256 1.1 skrll #define IMX6CLK_LVDS1_GATE 206
257 1.1 skrll #define IMX6CLK_LVDS2_GATE 207
258 1.1 skrll #define IMX6CLK_ESAI_IPG 208
259 1.1 skrll #define IMX6CLK_ESAI_MEM 209
260 1.1 skrll #define IMX6CLK_ASRC_IPG 210
261 1.1 skrll #define IMX6CLK_ASRC_MEM 211
262 1.1 skrll #define IMX6CLK_LVDS1_IN 212
263 1.1 skrll #define IMX6CLK_LVDS2_IN 213
264 1.1 skrll #define IMX6CLK_ANACLK1 214
265 1.1 skrll #define IMX6CLK_ANACLK2 215
266 1.1 skrll #define IMX6CLK_PLL1_BYPASS_SRC 216
267 1.1 skrll #define IMX6CLK_PLL2_BYPASS_SRC 217
268 1.1 skrll #define IMX6CLK_PLL3_BYPASS_SRC 218
269 1.1 skrll #define IMX6CLK_PLL4_BYPASS_SRC 219
270 1.1 skrll #define IMX6CLK_PLL5_BYPASS_SRC 220
271 1.1 skrll #define IMX6CLK_PLL6_BYPASS_SRC 221
272 1.1 skrll #define IMX6CLK_PLL7_BYPASS_SRC 222
273 1.1 skrll #define IMX6CLK_PLL1 223
274 1.1 skrll #define IMX6CLK_PLL2 224
275 1.1 skrll #define IMX6CLK_PLL3 225
276 1.1 skrll #define IMX6CLK_PLL4 226
277 1.1 skrll #define IMX6CLK_PLL5 227
278 1.1 skrll #define IMX6CLK_PLL6 228
279 1.1 skrll #define IMX6CLK_PLL7 229
280 1.1 skrll #define IMX6CLK_PLL1_BYPASS 230
281 1.1 skrll #define IMX6CLK_PLL2_BYPASS 231
282 1.1 skrll #define IMX6CLK_PLL3_BYPASS 232
283 1.1 skrll #define IMX6CLK_PLL4_BYPASS 233
284 1.1 skrll #define IMX6CLK_PLL5_BYPASS 234
285 1.1 skrll #define IMX6CLK_PLL6_BYPASS 235
286 1.1 skrll #define IMX6CLK_PLL7_BYPASS 236
287 1.1 skrll #define IMX6CLK_GPT_3M 237
288 1.1 skrll #define IMX6CLK_VIDEO_27M 238
289 1.1 skrll #define IMX6CLK_MIPI_CORE_CFG 239
290 1.1 skrll #define IMX6CLK_MIPI_IPG 240
291 1.1 skrll #define IMX6CLK_CAAM_MEM 241
292 1.1 skrll #define IMX6CLK_CAAM_ACLK 242
293 1.1 skrll #define IMX6CLK_CAAM_IPG 243
294 1.1 skrll #define IMX6CLK_SPDIF_GCLK 244
295 1.1 skrll #define IMX6CLK_UART_SEL 245
296 1.1 skrll #define IMX6CLK_IPG_PER_SEL 246
297 1.1 skrll #define IMX6CLK_ECSPI_SEL 247
298 1.1 skrll #define IMX6CLK_CAN_SEL 248
299 1.1 skrll #define IMX6CLK_MMDC_CH1_AXI_CG 249
300 1.1 skrll #define IMX6CLK_PRE0 250
301 1.1 skrll #define IMX6CLK_PRE1 251
302 1.1 skrll #define IMX6CLK_PRE2 252
303 1.1 skrll #define IMX6CLK_PRE3 253
304 1.1 skrll #define IMX6CLK_PRG0_AXI 254
305 1.1 skrll #define IMX6CLK_PRG1_AXI 255
306 1.1 skrll #define IMX6CLK_PRG0_APB 256
307 1.1 skrll #define IMX6CLK_PRG1_APB 257
308 1.1 skrll #define IMX6CLK_PRE_AXI 258
309 1.1 skrll #define IMX6CLK_MLB_SEL 259
310 1.1 skrll #define IMX6CLK_MLB_PODF 260
311 1.1 skrll #define IMX6CLK_END 261
312 1.1 skrll
313 1.1 skrll enum imx6_clk_type {
314 1.1 skrll IMX6_CLK_FIXED,
315 1.1 skrll IMX6_CLK_FIXED_FACTOR,
316 1.1 skrll IMX6_CLK_PLL,
317 1.1 skrll IMX6_CLK_MUX,
318 1.1 skrll IMX6_CLK_GATE,
319 1.1 skrll IMX6_CLK_PFD,
320 1.1 skrll IMX6_CLK_DIV,
321 1.1 skrll };
322 1.1 skrll
323 1.1 skrll enum imx6_clk_reg {
324 1.1 skrll IMX6_CLK_REG_CCM,
325 1.1 skrll IMX6_CLK_REG_CCM_ANALOG,
326 1.1 skrll };
327 1.1 skrll
328 1.1 skrll enum imx6_clk_pll_type {
329 1.1 skrll IMX6_CLK_PLL_GENERIC,
330 1.1 skrll IMX6_CLK_PLL_SYS,
331 1.1 skrll IMX6_CLK_PLL_USB,
332 1.1 skrll IMX6_CLK_PLL_AUDIO_VIDEO,
333 1.1 skrll IMX6_CLK_PLL_ENET,
334 1.1 skrll };
335 1.1 skrll
336 1.1 skrll enum imx6_clk_div_type {
337 1.1 skrll IMX6_CLK_DIV_NORMAL,
338 1.1 skrll IMX6_CLK_DIV_BUSY,
339 1.1 skrll IMX6_CLK_DIV_TABLE,
340 1.1 skrll };
341 1.1 skrll
342 1.1 skrll enum imx6_clk_mux_type {
343 1.1 skrll IMX6_CLK_MUX_NORMAL,
344 1.1 skrll IMX6_CLK_MUX_BUSY,
345 1.1 skrll };
346 1.1 skrll
347 1.1 skrll struct imx6_clk_fixed {
348 1.1 skrll u_int rate;
349 1.1 skrll };
350 1.1 skrll
351 1.1 skrll struct imx6_clk_fixed_factor {
352 1.1 skrll u_int div;
353 1.1 skrll u_int mult;
354 1.1 skrll };
355 1.1 skrll
356 1.1 skrll struct imx6_clk_pfd {
357 1.1 skrll uint32_t reg;
358 1.1 skrll int index;
359 1.1 skrll };
360 1.1 skrll
361 1.1 skrll struct imx6_clk_pll {
362 1.1 skrll enum imx6_clk_pll_type type;
363 1.1 skrll uint32_t reg;
364 1.1 skrll uint32_t mask;
365 1.1 skrll uint32_t powerdown;
366 1.1 skrll unsigned long ref;
367 1.1 skrll };
368 1.1 skrll
369 1.1 skrll struct imx6_clk_div {
370 1.1 skrll enum imx6_clk_div_type type;
371 1.1 skrll enum imx6_clk_reg base;
372 1.1 skrll uint32_t reg;
373 1.1 skrll uint32_t mask;
374 1.1 skrll uint32_t busy_reg;
375 1.1 skrll uint32_t busy_mask;
376 1.1 skrll const int *tbl;
377 1.1 skrll };
378 1.1 skrll
379 1.1 skrll struct imx6_clk_mux {
380 1.1 skrll enum imx6_clk_mux_type type;
381 1.1 skrll enum imx6_clk_reg base;
382 1.1 skrll uint32_t reg;
383 1.1 skrll uint32_t mask;
384 1.1 skrll const char **parents;
385 1.1 skrll u_int nparents;
386 1.1 skrll uint32_t busy_reg;
387 1.1 skrll uint32_t busy_mask;
388 1.1 skrll };
389 1.1 skrll
390 1.1 skrll struct imx6_clk_gate {
391 1.1 skrll enum imx6_clk_reg base;
392 1.1 skrll uint32_t reg;
393 1.1 skrll uint32_t mask;
394 1.1 skrll uint32_t exclusive_mask;
395 1.1 skrll };
396 1.1 skrll
397 1.1 skrll struct imx6_clk {
398 1.1 skrll struct clk base; /* must be first */
399 1.1 skrll
400 1.1 skrll const char *parent;
401 1.1 skrll u_int refcnt;
402 1.1 skrll
403 1.1 skrll enum imx6_clk_type type;
404 1.1 skrll union {
405 1.1 skrll struct imx6_clk_fixed fixed;
406 1.1 skrll struct imx6_clk_fixed_factor fixed_factor;
407 1.1 skrll struct imx6_clk_pfd pfd;
408 1.1 skrll struct imx6_clk_pll pll;
409 1.1 skrll struct imx6_clk_div div;
410 1.1 skrll struct imx6_clk_mux mux;
411 1.1 skrll struct imx6_clk_gate gate;
412 1.1 skrll } clk;
413 1.1 skrll };
414 1.1 skrll
415 1.1 skrll #define CLK_FIXED(_name, _rate) { \
416 1.1 skrll .base = { .name = (_name) }, \
417 1.1 skrll .type = IMX6_CLK_FIXED, \
418 1.1 skrll .clk = { \
419 1.1 skrll .fixed = { \
420 1.1 skrll .rate = (_rate), \
421 1.1 skrll } \
422 1.1 skrll } \
423 1.1 skrll }
424 1.1 skrll
425 1.1 skrll #define CLK_FIXED_FACTOR(_name, _parent, _div, _mult) { \
426 1.1 skrll .base = { .name = (_name) }, \
427 1.1 skrll .type = IMX6_CLK_FIXED_FACTOR, \
428 1.1 skrll .parent = (_parent), \
429 1.1 skrll .clk = { \
430 1.1 skrll .fixed_factor = { \
431 1.1 skrll .div = (_div), \
432 1.1 skrll .mult = (_mult), \
433 1.1 skrll } \
434 1.1 skrll } \
435 1.1 skrll }
436 1.1 skrll
437 1.1 skrll #define CLK_PFD(_name, _parent, _reg, _index) { \
438 1.1 skrll .base = { .name = (_name) }, \
439 1.1 skrll .type = IMX6_CLK_PFD, \
440 1.1 skrll .parent = (_parent), \
441 1.1 skrll .clk = { \
442 1.1 skrll .pfd = { \
443 1.1 skrll .reg = (CCM_ANALOG_##_reg), \
444 1.1 skrll .index = (_index), \
445 1.1 skrll } \
446 1.1 skrll } \
447 1.1 skrll }
448 1.1 skrll
449 1.1 skrll #define CLK_PLL(_name, _parent, _type, _reg, _mask, _powerdown, _ref) { \
450 1.1 skrll .base = { .name = (_name) }, \
451 1.1 skrll .type = IMX6_CLK_PLL, \
452 1.1 skrll .parent = (_parent), \
453 1.1 skrll .clk = { \
454 1.1 skrll .pll = { \
455 1.1 skrll .type = (IMX6_CLK_PLL_##_type), \
456 1.1 skrll .reg = (CCM_ANALOG_##_reg), \
457 1.1 skrll .mask = (CCM_ANALOG_##_reg##_##_mask), \
458 1.1 skrll .powerdown = (CCM_ANALOG_##_reg##_##_powerdown), \
459 1.1 skrll .ref = (_ref), \
460 1.1 skrll } \
461 1.1 skrll } \
462 1.1 skrll }
463 1.1 skrll
464 1.1 skrll #define CLK_DIV(_name, _parent, _reg, _mask) { \
465 1.1 skrll .base = { .name = (_name) }, \
466 1.1 skrll .type = IMX6_CLK_DIV, \
467 1.1 skrll .parent = (_parent), \
468 1.1 skrll .clk = { \
469 1.1 skrll .div = { \
470 1.1 skrll .type = (IMX6_CLK_DIV_NORMAL), \
471 1.1 skrll .base = (IMX6_CLK_REG_CCM), \
472 1.1 skrll .reg = (CCM_##_reg), \
473 1.1 skrll .mask = (CCM_##_reg##_##_mask), \
474 1.1 skrll } \
475 1.1 skrll } \
476 1.1 skrll }
477 1.1 skrll
478 1.1 skrll #define CLK_DIV_BUSY(_name, _parent, _reg, _mask, _busy_reg, _busy_mask) { \
479 1.1 skrll .base = { .name = (_name) }, \
480 1.1 skrll .type = IMX6_CLK_DIV, \
481 1.1 skrll .parent = (_parent), \
482 1.1 skrll .clk = { \
483 1.1 skrll .div = { \
484 1.1 skrll .type = (IMX6_CLK_DIV_BUSY), \
485 1.1 skrll .base = (IMX6_CLK_REG_CCM), \
486 1.1 skrll .reg = (CCM_##_reg), \
487 1.1 skrll .mask = (CCM_##_reg##_##_mask), \
488 1.1 skrll .busy_reg = (CCM_##_busy_reg), \
489 1.1 skrll .busy_mask = (CCM_##_busy_reg##_##_busy_mask) \
490 1.1 skrll } \
491 1.1 skrll } \
492 1.1 skrll }
493 1.1 skrll
494 1.1 skrll #define CLK_DIV_TABLE(_name, _parent, _reg, _mask, _tbl) { \
495 1.1 skrll .base = { .name = (_name) }, \
496 1.1 skrll .type = IMX6_CLK_DIV, \
497 1.1 skrll .parent = (_parent), \
498 1.1 skrll .clk = { \
499 1.1 skrll .div = { \
500 1.1 skrll .type = (IMX6_CLK_DIV_TABLE), \
501 1.1 skrll .base = (IMX6_CLK_REG_CCM_ANALOG), \
502 1.1 skrll .reg = (CCM_ANALOG_##_reg), \
503 1.1 skrll .mask = (CCM_ANALOG_##_reg##_##_mask), \
504 1.1 skrll .tbl = (_tbl) \
505 1.1 skrll } \
506 1.1 skrll } \
507 1.1 skrll }
508 1.1 skrll
509 1.1 skrll #define CLK_MUX(_name, _parents, _base, _reg, _mask) { \
510 1.1 skrll .base = { .name = (_name), .flags = CLK_SET_RATE_PARENT }, \
511 1.1 skrll .type = IMX6_CLK_MUX, \
512 1.1 skrll .clk = { \
513 1.1 skrll .mux = { \
514 1.1 skrll .type = (IMX6_CLK_MUX_NORMAL), \
515 1.1 skrll .base = (IMX6_CLK_REG_##_base), \
516 1.1 skrll .reg = (_base##_##_reg), \
517 1.1 skrll .mask = (_base##_##_reg##_##_mask), \
518 1.1 skrll .parents = (_parents), \
519 1.1 skrll .nparents = __arraycount(_parents) \
520 1.1 skrll } \
521 1.1 skrll } \
522 1.1 skrll }
523 1.1 skrll
524 1.1 skrll #define CLK_MUX_BUSY(_name, _parents, _reg, _mask, _busy_reg, _busy_mask) { \
525 1.1 skrll .base = { .name = (_name), .flags = CLK_SET_RATE_PARENT }, \
526 1.1 skrll .type = IMX6_CLK_MUX, \
527 1.1 skrll .clk = { \
528 1.1 skrll .mux = { \
529 1.1 skrll .type = (IMX6_CLK_MUX_BUSY), \
530 1.1 skrll .base = (IMX6_CLK_REG_CCM), \
531 1.1 skrll .reg = (CCM_##_reg), \
532 1.1 skrll .mask = (CCM_##_reg##_##_mask), \
533 1.1 skrll .parents = (_parents), \
534 1.1 skrll .nparents = __arraycount(_parents), \
535 1.1 skrll .busy_reg = (CCM_##_busy_reg), \
536 1.1 skrll .busy_mask = (CCM_##_busy_reg##_##_busy_mask) \
537 1.1 skrll } \
538 1.1 skrll } \
539 1.1 skrll }
540 1.1 skrll
541 1.1 skrll #define CLK_GATE(_name, _parent, _base, _reg, _mask) { \
542 1.1 skrll .base = { .name = (_name), .flags = CLK_SET_RATE_PARENT }, \
543 1.1 skrll .type = IMX6_CLK_GATE, \
544 1.1 skrll .parent = (_parent), \
545 1.1 skrll .clk = { \
546 1.1 skrll .gate = { \
547 1.1 skrll .base = (IMX6_CLK_REG_##_base), \
548 1.1 skrll .reg = (_base##_##_reg), \
549 1.1 skrll .mask = (_base##_##_reg##_##_mask), \
550 1.1 skrll .exclusive_mask = 0 \
551 1.1 skrll } \
552 1.1 skrll } \
553 1.1 skrll }
554 1.1 skrll
555 1.1 skrll #define CLK_GATE_EXCLUSIVE(_name, _parent, _base, _reg, _mask, _exclusive_mask) { \
556 1.1 skrll .base = { .name = (_name), .flags = CLK_SET_RATE_PARENT }, \
557 1.1 skrll .type = IMX6_CLK_GATE, \
558 1.1 skrll .parent = (_parent), \
559 1.1 skrll .clk = { \
560 1.1 skrll .gate = { \
561 1.1 skrll .base = (IMX6_CLK_REG_##_base), \
562 1.1 skrll .reg = (_base##_##_reg), \
563 1.1 skrll .mask = (_base##_##_reg##_##_mask), \
564 1.1 skrll .exclusive_mask = (_base##_##_reg##_##_exclusive_mask) \
565 1.1 skrll } \
566 1.1 skrll } \
567 1.1 skrll }
568 1.1 skrll
569 1.1 skrll #endif /* _ARM_NXP_IMX6_CCMVAR_H_ */
570