1 | // SPDX-License-Identifier: GPL-2.0-only |
2 | /* |
3 | * Copyright (C) 2022 Kernkonzept GmbH. |
4 | * |
5 | * Based on gcc-msm8916.c: |
6 | * Copyright 2015 Linaro Limited |
7 | * adapted with data from clock-gcc-8909.c in Qualcomm's msm-3.18 release: |
8 | * Copyright (c) 2014-2016, The Linux Foundation. All rights reserved. |
9 | */ |
10 | |
11 | #include <linux/bitops.h> |
12 | #include <linux/clk-provider.h> |
13 | #include <linux/err.h> |
14 | #include <linux/kernel.h> |
15 | #include <linux/module.h> |
16 | #include <linux/of.h> |
17 | #include <linux/platform_device.h> |
18 | #include <linux/regmap.h> |
19 | #include <linux/reset-controller.h> |
20 | |
21 | #include <dt-bindings/clock/qcom,gcc-msm8909.h> |
22 | |
23 | #include "clk-alpha-pll.h" |
24 | #include "clk-branch.h" |
25 | #include "clk-pll.h" |
26 | #include "clk-rcg.h" |
27 | #include "clk-regmap.h" |
28 | #include "common.h" |
29 | #include "gdsc.h" |
30 | #include "reset.h" |
31 | |
32 | /* Need to match the order of clocks in DT binding */ |
33 | enum { |
34 | DT_XO, |
35 | DT_SLEEP_CLK, |
36 | DT_DSI0PLL, |
37 | DT_DSI0PLL_BYTE, |
38 | }; |
39 | |
40 | enum { |
41 | P_XO, |
42 | P_SLEEP_CLK, |
43 | P_GPLL0, |
44 | P_GPLL1, |
45 | P_GPLL2, |
46 | P_BIMC, |
47 | P_DSI0PLL, |
48 | P_DSI0PLL_BYTE, |
49 | }; |
50 | |
51 | static const struct parent_map gcc_xo_map[] = { |
52 | { P_XO, 0 }, |
53 | }; |
54 | |
55 | static const struct clk_parent_data gcc_xo_data[] = { |
56 | { .index = DT_XO }, |
57 | }; |
58 | |
59 | static const struct clk_parent_data gcc_sleep_clk_data[] = { |
60 | { .index = DT_SLEEP_CLK }, |
61 | }; |
62 | |
63 | static struct clk_alpha_pll gpll0_early = { |
64 | .offset = 0x21000, |
65 | .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], |
66 | .clkr = { |
67 | .enable_reg = 0x45000, |
68 | .enable_mask = BIT(0), |
69 | .hw.init = &(struct clk_init_data) { |
70 | .name = "gpll0_early" , |
71 | .parent_data = gcc_xo_data, |
72 | .num_parents = ARRAY_SIZE(gcc_xo_data), |
73 | /* Avoid rate changes for shared clock */ |
74 | .ops = &clk_alpha_pll_fixed_ops, |
75 | }, |
76 | }, |
77 | }; |
78 | |
79 | static struct clk_alpha_pll_postdiv gpll0 = { |
80 | .offset = 0x21000, |
81 | .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], |
82 | .clkr.hw.init = &(struct clk_init_data) { |
83 | .name = "gpll0" , |
84 | .parent_hws = (const struct clk_hw*[]) { |
85 | &gpll0_early.clkr.hw, |
86 | }, |
87 | .num_parents = 1, |
88 | /* Avoid rate changes for shared clock */ |
89 | .ops = &clk_alpha_pll_postdiv_ro_ops, |
90 | }, |
91 | }; |
92 | |
93 | static struct clk_pll gpll1 = { |
94 | .l_reg = 0x20004, |
95 | .m_reg = 0x20008, |
96 | .n_reg = 0x2000c, |
97 | .config_reg = 0x20010, |
98 | .mode_reg = 0x20000, |
99 | .status_reg = 0x2001c, |
100 | .status_bit = 17, |
101 | .clkr.hw.init = &(struct clk_init_data) { |
102 | .name = "gpll1" , |
103 | .parent_data = gcc_xo_data, |
104 | .num_parents = ARRAY_SIZE(gcc_xo_data), |
105 | .ops = &clk_pll_ops, |
106 | }, |
107 | }; |
108 | |
109 | static struct clk_regmap gpll1_vote = { |
110 | .enable_reg = 0x45000, |
111 | .enable_mask = BIT(1), |
112 | .hw.init = &(struct clk_init_data) { |
113 | .name = "gpll1_vote" , |
114 | .parent_hws = (const struct clk_hw*[]) { |
115 | &gpll1.clkr.hw, |
116 | }, |
117 | .num_parents = 1, |
118 | .ops = &clk_pll_vote_ops, |
119 | }, |
120 | }; |
121 | |
122 | static struct clk_alpha_pll gpll2_early = { |
123 | .offset = 0x25000, |
124 | .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], |
125 | .clkr = { |
126 | .enable_reg = 0x45000, |
127 | .enable_mask = BIT(3), |
128 | .hw.init = &(struct clk_init_data) { |
129 | .name = "gpll2_early" , |
130 | .parent_data = gcc_xo_data, |
131 | .num_parents = ARRAY_SIZE(gcc_xo_data), |
132 | /* Avoid rate changes for shared clock */ |
133 | .ops = &clk_alpha_pll_fixed_ops, |
134 | }, |
135 | }, |
136 | }; |
137 | |
138 | static struct clk_alpha_pll_postdiv gpll2 = { |
139 | .offset = 0x25000, |
140 | .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], |
141 | .clkr.hw.init = &(struct clk_init_data) { |
142 | .name = "gpll2" , |
143 | .parent_hws = (const struct clk_hw*[]) { |
144 | &gpll2_early.clkr.hw, |
145 | }, |
146 | .num_parents = 1, |
147 | /* Avoid rate changes for shared clock */ |
148 | .ops = &clk_alpha_pll_postdiv_ro_ops, |
149 | }, |
150 | }; |
151 | |
152 | static struct clk_alpha_pll bimc_pll_early = { |
153 | .offset = 0x23000, |
154 | .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], |
155 | .clkr = { |
156 | .enable_reg = 0x45000, |
157 | .enable_mask = BIT(2), |
158 | .hw.init = &(struct clk_init_data) { |
159 | .name = "bimc_pll_early" , |
160 | .parent_data = gcc_xo_data, |
161 | .num_parents = ARRAY_SIZE(gcc_xo_data), |
162 | /* Avoid rate changes for shared clock */ |
163 | .ops = &clk_alpha_pll_fixed_ops, |
164 | }, |
165 | }, |
166 | }; |
167 | |
168 | static struct clk_alpha_pll_postdiv bimc_pll = { |
169 | .offset = 0x23000, |
170 | .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT], |
171 | .clkr.hw.init = &(struct clk_init_data) { |
172 | .name = "bimc_pll" , |
173 | .parent_hws = (const struct clk_hw*[]) { |
174 | &bimc_pll_early.clkr.hw, |
175 | }, |
176 | .num_parents = 1, |
177 | /* Avoid rate changes for shared clock */ |
178 | .ops = &clk_alpha_pll_postdiv_ro_ops, |
179 | }, |
180 | }; |
181 | |
182 | static const struct parent_map gcc_xo_gpll0_map[] = { |
183 | { P_XO, 0 }, |
184 | { P_GPLL0, 1 }, |
185 | }; |
186 | |
187 | static const struct clk_parent_data gcc_xo_gpll0_data[] = { |
188 | { .index = DT_XO }, |
189 | { .hw = &gpll0.clkr.hw }, |
190 | }; |
191 | |
192 | static const struct parent_map gcc_xo_gpll0_bimc_map[] = { |
193 | { P_XO, 0 }, |
194 | { P_GPLL0, 1 }, |
195 | { P_BIMC, 2 }, |
196 | }; |
197 | |
198 | static const struct clk_parent_data gcc_xo_gpll0_bimc_data[] = { |
199 | { .index = DT_XO }, |
200 | { .hw = &gpll0.clkr.hw }, |
201 | { .hw = &bimc_pll.clkr.hw }, |
202 | }; |
203 | |
204 | static const struct freq_tbl ftbl_apss_ahb_clk_src[] = { |
205 | F(19200000, P_XO, 1, 0, 0), |
206 | F(50000000, P_GPLL0, 16, 0, 0), |
207 | F(100000000, P_GPLL0, 8, 0, 0), |
208 | { } |
209 | }; |
210 | |
211 | static struct clk_rcg2 apss_ahb_clk_src = { |
212 | .cmd_rcgr = 0x46000, |
213 | .hid_width = 5, |
214 | .freq_tbl = ftbl_apss_ahb_clk_src, |
215 | .parent_map = gcc_xo_gpll0_map, |
216 | .clkr.hw.init = &(struct clk_init_data) { |
217 | .name = "apss_ahb_clk_src" , |
218 | .parent_data = gcc_xo_gpll0_data, |
219 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), |
220 | .ops = &clk_rcg2_ops, |
221 | } |
222 | }; |
223 | |
224 | static struct clk_rcg2 bimc_ddr_clk_src = { |
225 | .cmd_rcgr = 0x32004, |
226 | .hid_width = 5, |
227 | .parent_map = gcc_xo_gpll0_bimc_map, |
228 | .clkr.hw.init = &(struct clk_init_data) { |
229 | .name = "bimc_ddr_clk_src" , |
230 | .parent_data = gcc_xo_gpll0_bimc_data, |
231 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc_data), |
232 | .ops = &clk_rcg2_ops, |
233 | .flags = CLK_GET_RATE_NOCACHE, |
234 | }, |
235 | }; |
236 | |
237 | static struct clk_rcg2 bimc_gpu_clk_src = { |
238 | .cmd_rcgr = 0x31028, |
239 | .hid_width = 5, |
240 | .parent_map = gcc_xo_gpll0_bimc_map, |
241 | .clkr.hw.init = &(struct clk_init_data) { |
242 | .name = "bimc_gpu_clk_src" , |
243 | .parent_data = gcc_xo_gpll0_bimc_data, |
244 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc_data), |
245 | .ops = &clk_rcg2_ops, |
246 | .flags = CLK_GET_RATE_NOCACHE, |
247 | }, |
248 | }; |
249 | |
250 | static const struct freq_tbl ftbl_blsp_i2c_apps_clk_src[] = { |
251 | F(19200000, P_XO, 1, 0, 0), |
252 | F(50000000, P_GPLL0, 16, 0, 0), |
253 | { } |
254 | }; |
255 | |
256 | static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = { |
257 | .cmd_rcgr = 0x0200c, |
258 | .hid_width = 5, |
259 | .freq_tbl = ftbl_blsp_i2c_apps_clk_src, |
260 | .parent_map = gcc_xo_gpll0_map, |
261 | .clkr.hw.init = &(struct clk_init_data) { |
262 | .name = "blsp1_qup1_i2c_apps_clk_src" , |
263 | .parent_data = gcc_xo_gpll0_data, |
264 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), |
265 | .ops = &clk_rcg2_ops, |
266 | } |
267 | }; |
268 | |
269 | static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = { |
270 | .cmd_rcgr = 0x03000, |
271 | .hid_width = 5, |
272 | .freq_tbl = ftbl_blsp_i2c_apps_clk_src, |
273 | .parent_map = gcc_xo_gpll0_map, |
274 | .clkr.hw.init = &(struct clk_init_data) { |
275 | .name = "blsp1_qup2_i2c_apps_clk_src" , |
276 | .parent_data = gcc_xo_gpll0_data, |
277 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), |
278 | .ops = &clk_rcg2_ops, |
279 | } |
280 | }; |
281 | |
282 | static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = { |
283 | .cmd_rcgr = 0x04000, |
284 | .hid_width = 5, |
285 | .freq_tbl = ftbl_blsp_i2c_apps_clk_src, |
286 | .parent_map = gcc_xo_gpll0_map, |
287 | .clkr.hw.init = &(struct clk_init_data) { |
288 | .name = "blsp1_qup3_i2c_apps_clk_src" , |
289 | .parent_data = gcc_xo_gpll0_data, |
290 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), |
291 | .ops = &clk_rcg2_ops, |
292 | } |
293 | }; |
294 | |
295 | static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = { |
296 | .cmd_rcgr = 0x05000, |
297 | .hid_width = 5, |
298 | .freq_tbl = ftbl_blsp_i2c_apps_clk_src, |
299 | .parent_map = gcc_xo_gpll0_map, |
300 | .clkr.hw.init = &(struct clk_init_data) { |
301 | .name = "blsp1_qup4_i2c_apps_clk_src" , |
302 | .parent_data = gcc_xo_gpll0_data, |
303 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), |
304 | .ops = &clk_rcg2_ops, |
305 | } |
306 | }; |
307 | |
308 | static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = { |
309 | .cmd_rcgr = 0x06000, |
310 | .hid_width = 5, |
311 | .freq_tbl = ftbl_blsp_i2c_apps_clk_src, |
312 | .parent_map = gcc_xo_gpll0_map, |
313 | .clkr.hw.init = &(struct clk_init_data) { |
314 | .name = "blsp1_qup5_i2c_apps_clk_src" , |
315 | .parent_data = gcc_xo_gpll0_data, |
316 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), |
317 | .ops = &clk_rcg2_ops, |
318 | } |
319 | }; |
320 | |
321 | static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = { |
322 | .cmd_rcgr = 0x07000, |
323 | .hid_width = 5, |
324 | .freq_tbl = ftbl_blsp_i2c_apps_clk_src, |
325 | .parent_map = gcc_xo_gpll0_map, |
326 | .clkr.hw.init = &(struct clk_init_data) { |
327 | .name = "blsp1_qup6_i2c_apps_clk_src" , |
328 | .parent_data = gcc_xo_gpll0_data, |
329 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), |
330 | .ops = &clk_rcg2_ops, |
331 | } |
332 | }; |
333 | |
334 | static const struct freq_tbl ftbl_blsp_spi_apps_clk_src[] = { |
335 | F(960000, P_XO, 10, 1, 2), |
336 | F(4800000, P_XO, 4, 0, 0), |
337 | F(9600000, P_XO, 2, 0, 0), |
338 | F(16000000, P_GPLL0, 10, 1, 5), |
339 | F(19200000, P_XO, 1, 0, 0), |
340 | F(25000000, P_GPLL0, 16, 1, 2), |
341 | F(50000000, P_GPLL0, 16, 0, 0), |
342 | { } |
343 | }; |
344 | |
345 | static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = { |
346 | .cmd_rcgr = 0x02024, |
347 | .hid_width = 5, |
348 | .mnd_width = 8, |
349 | .freq_tbl = ftbl_blsp_spi_apps_clk_src, |
350 | .parent_map = gcc_xo_gpll0_map, |
351 | .clkr.hw.init = &(struct clk_init_data) { |
352 | .name = "blsp1_qup1_spi_apps_clk_src" , |
353 | .parent_data = gcc_xo_gpll0_data, |
354 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), |
355 | .ops = &clk_rcg2_ops, |
356 | } |
357 | }; |
358 | |
359 | static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = { |
360 | .cmd_rcgr = 0x03014, |
361 | .hid_width = 5, |
362 | .mnd_width = 8, |
363 | .freq_tbl = ftbl_blsp_spi_apps_clk_src, |
364 | .parent_map = gcc_xo_gpll0_map, |
365 | .clkr.hw.init = &(struct clk_init_data) { |
366 | .name = "blsp1_qup2_spi_apps_clk_src" , |
367 | .parent_data = gcc_xo_gpll0_data, |
368 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), |
369 | .ops = &clk_rcg2_ops, |
370 | } |
371 | }; |
372 | |
373 | static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = { |
374 | .cmd_rcgr = 0x04024, |
375 | .hid_width = 5, |
376 | .mnd_width = 8, |
377 | .freq_tbl = ftbl_blsp_spi_apps_clk_src, |
378 | .parent_map = gcc_xo_gpll0_map, |
379 | .clkr.hw.init = &(struct clk_init_data) { |
380 | .name = "blsp1_qup3_spi_apps_clk_src" , |
381 | .parent_data = gcc_xo_gpll0_data, |
382 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), |
383 | .ops = &clk_rcg2_ops, |
384 | } |
385 | }; |
386 | |
387 | static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = { |
388 | .cmd_rcgr = 0x05024, |
389 | .hid_width = 5, |
390 | .mnd_width = 8, |
391 | .freq_tbl = ftbl_blsp_spi_apps_clk_src, |
392 | .parent_map = gcc_xo_gpll0_map, |
393 | .clkr.hw.init = &(struct clk_init_data) { |
394 | .name = "blsp1_qup4_spi_apps_clk_src" , |
395 | .parent_data = gcc_xo_gpll0_data, |
396 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), |
397 | .ops = &clk_rcg2_ops, |
398 | } |
399 | }; |
400 | |
401 | static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = { |
402 | .cmd_rcgr = 0x06024, |
403 | .hid_width = 5, |
404 | .mnd_width = 8, |
405 | .freq_tbl = ftbl_blsp_spi_apps_clk_src, |
406 | .parent_map = gcc_xo_gpll0_map, |
407 | .clkr.hw.init = &(struct clk_init_data) { |
408 | .name = "blsp1_qup5_spi_apps_clk_src" , |
409 | .parent_data = gcc_xo_gpll0_data, |
410 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), |
411 | .ops = &clk_rcg2_ops, |
412 | } |
413 | }; |
414 | |
415 | static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = { |
416 | .cmd_rcgr = 0x07024, |
417 | .hid_width = 5, |
418 | .mnd_width = 8, |
419 | .freq_tbl = ftbl_blsp_spi_apps_clk_src, |
420 | .parent_map = gcc_xo_gpll0_map, |
421 | .clkr.hw.init = &(struct clk_init_data) { |
422 | .name = "blsp1_qup6_spi_apps_clk_src" , |
423 | .parent_data = gcc_xo_gpll0_data, |
424 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), |
425 | .ops = &clk_rcg2_ops, |
426 | } |
427 | }; |
428 | |
429 | static const struct freq_tbl ftbl_blsp_uart_apps_clk_src[] = { |
430 | F(3686400, P_GPLL0, 1, 72, 15625), |
431 | F(7372800, P_GPLL0, 1, 144, 15625), |
432 | F(14745600, P_GPLL0, 1, 288, 15625), |
433 | F(16000000, P_GPLL0, 10, 1, 5), |
434 | F(19200000, P_XO, 1, 0, 0), |
435 | F(24000000, P_GPLL0, 1, 3, 100), |
436 | F(25000000, P_GPLL0, 16, 1, 2), |
437 | F(32000000, P_GPLL0, 1, 1, 25), |
438 | F(40000000, P_GPLL0, 1, 1, 20), |
439 | F(46400000, P_GPLL0, 1, 29, 500), |
440 | F(48000000, P_GPLL0, 1, 3, 50), |
441 | F(51200000, P_GPLL0, 1, 8, 125), |
442 | F(56000000, P_GPLL0, 1, 7, 100), |
443 | F(58982400, P_GPLL0, 1, 1152, 15625), |
444 | F(60000000, P_GPLL0, 1, 3, 40), |
445 | { } |
446 | }; |
447 | |
448 | static struct clk_rcg2 blsp1_uart1_apps_clk_src = { |
449 | .cmd_rcgr = 0x02044, |
450 | .hid_width = 5, |
451 | .mnd_width = 16, |
452 | .freq_tbl = ftbl_blsp_uart_apps_clk_src, |
453 | .parent_map = gcc_xo_gpll0_map, |
454 | .clkr.hw.init = &(struct clk_init_data) { |
455 | .name = "blsp1_uart1_apps_clk_src" , |
456 | .parent_data = gcc_xo_gpll0_data, |
457 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), |
458 | .ops = &clk_rcg2_ops, |
459 | } |
460 | }; |
461 | |
462 | static struct clk_rcg2 blsp1_uart2_apps_clk_src = { |
463 | .cmd_rcgr = 0x03034, |
464 | .hid_width = 5, |
465 | .mnd_width = 16, |
466 | .freq_tbl = ftbl_blsp_uart_apps_clk_src, |
467 | .parent_map = gcc_xo_gpll0_map, |
468 | .clkr.hw.init = &(struct clk_init_data) { |
469 | .name = "blsp1_uart2_apps_clk_src" , |
470 | .parent_data = gcc_xo_gpll0_data, |
471 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), |
472 | .ops = &clk_rcg2_ops, |
473 | } |
474 | }; |
475 | |
476 | static const struct parent_map gcc_byte0_map[] = { |
477 | { P_XO, 0 }, |
478 | { P_DSI0PLL_BYTE, 1 }, |
479 | }; |
480 | |
481 | static const struct clk_parent_data gcc_byte_data[] = { |
482 | { .index = DT_XO }, |
483 | { .index = DT_DSI0PLL_BYTE }, |
484 | }; |
485 | |
486 | static struct clk_rcg2 byte0_clk_src = { |
487 | .cmd_rcgr = 0x4d044, |
488 | .hid_width = 5, |
489 | .parent_map = gcc_byte0_map, |
490 | .clkr.hw.init = &(struct clk_init_data) { |
491 | .name = "byte0_clk_src" , |
492 | .parent_data = gcc_byte_data, |
493 | .num_parents = ARRAY_SIZE(gcc_byte_data), |
494 | .ops = &clk_byte2_ops, |
495 | .flags = CLK_SET_RATE_PARENT, |
496 | } |
497 | }; |
498 | |
499 | static const struct freq_tbl ftbl_camss_gp_clk_src[] = { |
500 | F(100000000, P_GPLL0, 8, 0, 0), |
501 | F(200000000, P_GPLL0, 4, 0, 0), |
502 | { } |
503 | }; |
504 | |
505 | static struct clk_rcg2 camss_gp0_clk_src = { |
506 | .cmd_rcgr = 0x54000, |
507 | .hid_width = 5, |
508 | .mnd_width = 8, |
509 | .freq_tbl = ftbl_camss_gp_clk_src, |
510 | .parent_map = gcc_xo_gpll0_map, |
511 | .clkr.hw.init = &(struct clk_init_data) { |
512 | .name = "camss_gp0_clk_src" , |
513 | .parent_data = gcc_xo_gpll0_data, |
514 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), |
515 | .ops = &clk_rcg2_ops, |
516 | } |
517 | }; |
518 | |
519 | static struct clk_rcg2 camss_gp1_clk_src = { |
520 | .cmd_rcgr = 0x55000, |
521 | .hid_width = 5, |
522 | .mnd_width = 8, |
523 | .freq_tbl = ftbl_camss_gp_clk_src, |
524 | .parent_map = gcc_xo_gpll0_map, |
525 | .clkr.hw.init = &(struct clk_init_data) { |
526 | .name = "camss_gp1_clk_src" , |
527 | .parent_data = gcc_xo_gpll0_data, |
528 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), |
529 | .ops = &clk_rcg2_ops, |
530 | } |
531 | }; |
532 | |
533 | static const struct freq_tbl ftbl_camss_top_ahb_clk_src[] = { |
534 | F(40000000, P_GPLL0, 10, 1, 2), |
535 | F(80000000, P_GPLL0, 10, 0, 0), |
536 | { } |
537 | }; |
538 | |
539 | static struct clk_rcg2 camss_top_ahb_clk_src = { |
540 | .cmd_rcgr = 0x5a000, |
541 | .hid_width = 5, |
542 | .mnd_width = 8, |
543 | .freq_tbl = ftbl_camss_top_ahb_clk_src, |
544 | .parent_map = gcc_xo_gpll0_map, |
545 | .clkr.hw.init = &(struct clk_init_data) { |
546 | .name = "camss_top_ahb_clk_src" , |
547 | .parent_data = gcc_xo_gpll0_data, |
548 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), |
549 | .ops = &clk_rcg2_ops, |
550 | } |
551 | }; |
552 | |
553 | static const struct freq_tbl ftbl_crypto_clk_src[] = { |
554 | F(50000000, P_GPLL0, 16, 0, 0), |
555 | F(80000000, P_GPLL0, 10, 0, 0), |
556 | F(100000000, P_GPLL0, 8, 0, 0), |
557 | F(160000000, P_GPLL0, 5, 0, 0), |
558 | { } |
559 | }; |
560 | |
561 | static struct clk_rcg2 crypto_clk_src = { |
562 | .cmd_rcgr = 0x16004, |
563 | .hid_width = 5, |
564 | .freq_tbl = ftbl_crypto_clk_src, |
565 | .parent_map = gcc_xo_gpll0_map, |
566 | .clkr.hw.init = &(struct clk_init_data) { |
567 | .name = "crypto_clk_src" , |
568 | .parent_data = gcc_xo_gpll0_data, |
569 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), |
570 | .ops = &clk_rcg2_ops, |
571 | } |
572 | }; |
573 | |
574 | static const struct freq_tbl ftbl_csi_clk_src[] = { |
575 | F(100000000, P_GPLL0, 8, 0, 0), |
576 | F(200000000, P_GPLL0, 4, 0, 0), |
577 | { } |
578 | }; |
579 | |
580 | static struct clk_rcg2 csi0_clk_src = { |
581 | .cmd_rcgr = 0x4e020, |
582 | .hid_width = 5, |
583 | .freq_tbl = ftbl_csi_clk_src, |
584 | .parent_map = gcc_xo_gpll0_map, |
585 | .clkr.hw.init = &(struct clk_init_data) { |
586 | .name = "csi0_clk_src" , |
587 | .parent_data = gcc_xo_gpll0_data, |
588 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_map), |
589 | .ops = &clk_rcg2_ops, |
590 | } |
591 | }; |
592 | |
593 | static struct clk_rcg2 csi1_clk_src = { |
594 | .cmd_rcgr = 0x4f020, |
595 | .hid_width = 5, |
596 | .freq_tbl = ftbl_csi_clk_src, |
597 | .parent_map = gcc_xo_gpll0_map, |
598 | .clkr.hw.init = &(struct clk_init_data) { |
599 | .name = "csi1_clk_src" , |
600 | .parent_data = gcc_xo_gpll0_data, |
601 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), |
602 | .ops = &clk_rcg2_ops, |
603 | } |
604 | }; |
605 | |
606 | static const struct freq_tbl ftbl_csi_phytimer_clk_src[] = { |
607 | F(100000000, P_GPLL0, 8, 0, 0), |
608 | F(200000000, P_GPLL0, 4, 0, 0), |
609 | { } |
610 | }; |
611 | |
612 | static struct clk_rcg2 csi0phytimer_clk_src = { |
613 | .cmd_rcgr = 0x4e000, |
614 | .hid_width = 5, |
615 | .freq_tbl = ftbl_csi_phytimer_clk_src, |
616 | .parent_map = gcc_xo_gpll0_map, |
617 | .clkr.hw.init = &(struct clk_init_data) { |
618 | .name = "csi0phytimer_clk_src" , |
619 | .parent_data = gcc_xo_gpll0_data, |
620 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), |
621 | .ops = &clk_rcg2_ops, |
622 | } |
623 | }; |
624 | |
625 | static const struct freq_tbl ftbl_esc0_clk_src[] = { |
626 | F(19200000, P_XO, 1, 0, 0), |
627 | { } |
628 | }; |
629 | |
630 | static struct clk_rcg2 esc0_clk_src = { |
631 | .cmd_rcgr = 0x4d05c, |
632 | .hid_width = 5, |
633 | .freq_tbl = ftbl_esc0_clk_src, |
634 | .parent_map = gcc_xo_map, |
635 | .clkr.hw.init = &(struct clk_init_data) { |
636 | .name = "esc0_clk_src" , |
637 | .parent_data = gcc_xo_data, |
638 | .num_parents = ARRAY_SIZE(gcc_xo_data), |
639 | .ops = &clk_rcg2_ops, |
640 | } |
641 | }; |
642 | |
643 | static const struct parent_map gcc_gfx3d_map[] = { |
644 | { P_XO, 0 }, |
645 | { P_GPLL0, 1 }, |
646 | { P_GPLL1, 2 }, |
647 | }; |
648 | |
649 | static const struct clk_parent_data gcc_gfx3d_data[] = { |
650 | { .index = DT_XO }, |
651 | { .hw = &gpll0.clkr.hw }, |
652 | { .hw = &gpll1_vote.hw }, |
653 | }; |
654 | |
655 | static const struct freq_tbl ftbl_gfx3d_clk_src[] = { |
656 | F(19200000, P_XO, 1, 0, 0), |
657 | F(50000000, P_GPLL0, 16, 0, 0), |
658 | F(80000000, P_GPLL0, 10, 0, 0), |
659 | F(100000000, P_GPLL0, 8, 0, 0), |
660 | F(160000000, P_GPLL0, 5, 0, 0), |
661 | F(177780000, P_GPLL0, 4.5, 0, 0), |
662 | F(200000000, P_GPLL0, 4, 0, 0), |
663 | F(266670000, P_GPLL0, 3, 0, 0), |
664 | F(307200000, P_GPLL1, 4, 0, 0), |
665 | F(409600000, P_GPLL1, 3, 0, 0), |
666 | { } |
667 | }; |
668 | |
669 | static struct clk_rcg2 gfx3d_clk_src = { |
670 | .cmd_rcgr = 0x59000, |
671 | .hid_width = 5, |
672 | .freq_tbl = ftbl_gfx3d_clk_src, |
673 | .parent_map = gcc_gfx3d_map, |
674 | .clkr.hw.init = &(struct clk_init_data) { |
675 | .name = "gfx3d_clk_src" , |
676 | .parent_data = gcc_gfx3d_data, |
677 | .num_parents = ARRAY_SIZE(gcc_gfx3d_data), |
678 | .ops = &clk_rcg2_ops, |
679 | } |
680 | }; |
681 | |
682 | static const struct freq_tbl ftbl_gp_clk_src[] = { |
683 | F(150000, P_XO, 1, 1, 128), |
684 | F(19200000, P_XO, 1, 0, 0), |
685 | { } |
686 | }; |
687 | |
688 | static struct clk_rcg2 gp1_clk_src = { |
689 | .cmd_rcgr = 0x08004, |
690 | .hid_width = 5, |
691 | .mnd_width = 8, |
692 | .freq_tbl = ftbl_gp_clk_src, |
693 | .parent_map = gcc_xo_map, |
694 | .clkr.hw.init = &(struct clk_init_data) { |
695 | .name = "gp1_clk_src" , |
696 | .parent_data = gcc_xo_data, |
697 | .num_parents = ARRAY_SIZE(gcc_xo_data), |
698 | .ops = &clk_rcg2_ops, |
699 | } |
700 | }; |
701 | |
702 | static struct clk_rcg2 gp2_clk_src = { |
703 | .cmd_rcgr = 0x09004, |
704 | .hid_width = 5, |
705 | .mnd_width = 8, |
706 | .freq_tbl = ftbl_gp_clk_src, |
707 | .parent_map = gcc_xo_map, |
708 | .clkr.hw.init = &(struct clk_init_data) { |
709 | .name = "gp2_clk_src" , |
710 | .parent_data = gcc_xo_data, |
711 | .num_parents = ARRAY_SIZE(gcc_xo_data), |
712 | .ops = &clk_rcg2_ops, |
713 | } |
714 | }; |
715 | |
716 | static struct clk_rcg2 gp3_clk_src = { |
717 | .cmd_rcgr = 0x0a004, |
718 | .hid_width = 5, |
719 | .mnd_width = 8, |
720 | .freq_tbl = ftbl_gp_clk_src, |
721 | .parent_map = gcc_xo_map, |
722 | .clkr.hw.init = &(struct clk_init_data) { |
723 | .name = "gp3_clk_src" , |
724 | .parent_data = gcc_xo_data, |
725 | .num_parents = ARRAY_SIZE(gcc_xo_data), |
726 | .ops = &clk_rcg2_ops, |
727 | } |
728 | }; |
729 | |
730 | static const struct parent_map gcc_mclk_map[] = { |
731 | { P_XO, 0 }, |
732 | { P_GPLL0, 1 }, |
733 | { P_GPLL2, 3 }, |
734 | }; |
735 | |
736 | static const struct clk_parent_data gcc_mclk_data[] = { |
737 | { .index = DT_XO }, |
738 | { .hw = &gpll0.clkr.hw }, |
739 | { .hw = &gpll2.clkr.hw }, |
740 | }; |
741 | |
742 | static const struct freq_tbl ftbl_mclk_clk_src[] = { |
743 | F(24000000, P_GPLL2, 1, 1, 33), |
744 | F(66667000, P_GPLL0, 12, 0, 0), |
745 | { } |
746 | }; |
747 | |
748 | static struct clk_rcg2 mclk0_clk_src = { |
749 | .cmd_rcgr = 0x52000, |
750 | .hid_width = 5, |
751 | .mnd_width = 8, |
752 | .freq_tbl = ftbl_mclk_clk_src, |
753 | .parent_map = gcc_mclk_map, |
754 | .clkr.hw.init = &(struct clk_init_data) { |
755 | .name = "mclk0_clk_src" , |
756 | .parent_data = gcc_mclk_data, |
757 | .num_parents = ARRAY_SIZE(gcc_mclk_data), |
758 | .ops = &clk_rcg2_ops, |
759 | } |
760 | }; |
761 | |
762 | static struct clk_rcg2 mclk1_clk_src = { |
763 | .cmd_rcgr = 0x53000, |
764 | .hid_width = 5, |
765 | .mnd_width = 8, |
766 | .freq_tbl = ftbl_mclk_clk_src, |
767 | .parent_map = gcc_mclk_map, |
768 | .clkr.hw.init = &(struct clk_init_data) { |
769 | .name = "mclk1_clk_src" , |
770 | .parent_data = gcc_mclk_data, |
771 | .num_parents = ARRAY_SIZE(gcc_mclk_data), |
772 | .ops = &clk_rcg2_ops, |
773 | } |
774 | }; |
775 | |
776 | static const struct parent_map gcc_mdp_map[] = { |
777 | { P_XO, 0 }, |
778 | { P_GPLL0, 1 }, |
779 | { P_GPLL1, 3 }, |
780 | }; |
781 | |
782 | static const struct clk_parent_data gcc_mdp_data[] = { |
783 | { .index = DT_XO }, |
784 | { .hw = &gpll0.clkr.hw }, |
785 | { .hw = &gpll1_vote.hw }, |
786 | }; |
787 | |
788 | static const struct freq_tbl ftbl_mdp_clk_src[] = { |
789 | F(50000000, P_GPLL0, 16, 0, 0), |
790 | F(80000000, P_GPLL0, 10, 0, 0), |
791 | F(100000000, P_GPLL0, 8, 0, 0), |
792 | F(160000000, P_GPLL0, 5, 0, 0), |
793 | F(177780000, P_GPLL0, 4.5, 0, 0), |
794 | F(200000000, P_GPLL0, 4, 0, 0), |
795 | F(266670000, P_GPLL0, 3, 0, 0), |
796 | F(307200000, P_GPLL1, 4, 0, 0), |
797 | { } |
798 | }; |
799 | |
800 | static struct clk_rcg2 mdp_clk_src = { |
801 | .cmd_rcgr = 0x4d014, |
802 | .hid_width = 5, |
803 | .freq_tbl = ftbl_mdp_clk_src, |
804 | .parent_map = gcc_mdp_map, |
805 | .clkr.hw.init = &(struct clk_init_data) { |
806 | .name = "mdp_clk_src" , |
807 | .parent_data = gcc_mdp_data, |
808 | .num_parents = ARRAY_SIZE(gcc_mdp_data), |
809 | .ops = &clk_rcg2_ops, |
810 | } |
811 | }; |
812 | |
813 | static const struct parent_map gcc_pclk0_map[] = { |
814 | { P_XO, 0 }, |
815 | { P_DSI0PLL, 1 }, |
816 | }; |
817 | |
818 | static const struct clk_parent_data gcc_pclk_data[] = { |
819 | { .index = DT_XO }, |
820 | { .index = DT_DSI0PLL }, |
821 | }; |
822 | |
823 | static struct clk_rcg2 pclk0_clk_src = { |
824 | .cmd_rcgr = 0x4d000, |
825 | .hid_width = 5, |
826 | .mnd_width = 8, |
827 | .parent_map = gcc_pclk0_map, |
828 | .clkr.hw.init = &(struct clk_init_data) { |
829 | .name = "pclk0_clk_src" , |
830 | .parent_data = gcc_pclk_data, |
831 | .num_parents = ARRAY_SIZE(gcc_pclk_data), |
832 | .ops = &clk_pixel_ops, |
833 | .flags = CLK_SET_RATE_PARENT, |
834 | } |
835 | }; |
836 | |
837 | static struct clk_rcg2 pcnoc_bfdcd_clk_src = { |
838 | .cmd_rcgr = 0x27000, |
839 | .hid_width = 5, |
840 | .parent_map = gcc_xo_gpll0_bimc_map, |
841 | .clkr.hw.init = &(struct clk_init_data) { |
842 | .name = "pcnoc_bfdcd_clk_src" , |
843 | .parent_data = gcc_xo_gpll0_bimc_data, |
844 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc_data), |
845 | .ops = &clk_rcg2_ops, |
846 | }, |
847 | }; |
848 | |
849 | static const struct freq_tbl ftbl_pdm2_clk_src[] = { |
850 | F(64000000, P_GPLL0, 12.5, 0, 0), |
851 | { } |
852 | }; |
853 | |
854 | static struct clk_rcg2 pdm2_clk_src = { |
855 | .cmd_rcgr = 0x44010, |
856 | .hid_width = 5, |
857 | .freq_tbl = ftbl_pdm2_clk_src, |
858 | .parent_map = gcc_xo_gpll0_map, |
859 | .clkr.hw.init = &(struct clk_init_data) { |
860 | .name = "pdm2_clk_src" , |
861 | .parent_data = gcc_xo_gpll0_data, |
862 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), |
863 | .ops = &clk_rcg2_ops, |
864 | } |
865 | }; |
866 | |
867 | static const struct freq_tbl ftbl_gcc_sdcc1_2_apps_clk[] = { |
868 | F(144000, P_XO, 16, 3, 25), |
869 | F(400000, P_XO, 12, 1, 4), |
870 | F(20000000, P_GPLL0, 10, 1, 4), |
871 | F(25000000, P_GPLL0, 16, 1, 2), |
872 | F(50000000, P_GPLL0, 16, 0, 0), |
873 | F(100000000, P_GPLL0, 8, 0, 0), |
874 | F(177770000, P_GPLL0, 4.5, 0, 0), |
875 | F(200000000, P_GPLL0, 4, 0, 0), |
876 | { } |
877 | }; |
878 | |
879 | static struct clk_rcg2 sdcc1_apps_clk_src = { |
880 | .cmd_rcgr = 0x42004, |
881 | .hid_width = 5, |
882 | .mnd_width = 8, |
883 | .freq_tbl = ftbl_gcc_sdcc1_2_apps_clk, |
884 | .parent_map = gcc_xo_gpll0_map, |
885 | .clkr.hw.init = &(struct clk_init_data) { |
886 | .name = "sdcc1_apps_clk_src" , |
887 | .parent_data = gcc_xo_gpll0_data, |
888 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), |
889 | .ops = &clk_rcg2_floor_ops, |
890 | } |
891 | }; |
892 | |
893 | static struct clk_rcg2 sdcc2_apps_clk_src = { |
894 | .cmd_rcgr = 0x43004, |
895 | .hid_width = 5, |
896 | .mnd_width = 8, |
897 | .freq_tbl = ftbl_gcc_sdcc1_2_apps_clk, |
898 | .parent_map = gcc_xo_gpll0_map, |
899 | .clkr.hw.init = &(struct clk_init_data) { |
900 | .name = "sdcc2_apps_clk_src" , |
901 | .parent_data = gcc_xo_gpll0_data, |
902 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), |
903 | .ops = &clk_rcg2_floor_ops, |
904 | } |
905 | }; |
906 | |
907 | static struct clk_rcg2 system_noc_bfdcd_clk_src = { |
908 | .cmd_rcgr = 0x26004, |
909 | .hid_width = 5, |
910 | .parent_map = gcc_xo_gpll0_bimc_map, |
911 | .clkr.hw.init = &(struct clk_init_data) { |
912 | .name = "system_noc_bfdcd_clk_src" , |
913 | .parent_data = gcc_xo_gpll0_bimc_data, |
914 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc_data), |
915 | .ops = &clk_rcg2_ops, |
916 | }, |
917 | }; |
918 | |
919 | static const struct freq_tbl ftbl_gcc_usb_hs_system_clk[] = { |
920 | F(57140000, P_GPLL0, 14, 0, 0), |
921 | F(80000000, P_GPLL0, 10, 0, 0), |
922 | F(100000000, P_GPLL0, 8, 0, 0), |
923 | { } |
924 | }; |
925 | |
926 | static struct clk_rcg2 usb_hs_system_clk_src = { |
927 | .cmd_rcgr = 0x41010, |
928 | .hid_width = 5, |
929 | .freq_tbl = ftbl_gcc_usb_hs_system_clk, |
930 | .parent_map = gcc_xo_gpll0_map, |
931 | .clkr.hw.init = &(struct clk_init_data) { |
932 | .name = "usb_hs_system_clk_src" , |
933 | .parent_data = gcc_xo_gpll0_data, |
934 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), |
935 | .ops = &clk_rcg2_ops, |
936 | } |
937 | }; |
938 | |
939 | static const struct parent_map gcc_vcodec0_map[] = { |
940 | { P_XO, 0 }, |
941 | { P_GPLL0, 1 }, |
942 | { P_GPLL1, 3 }, |
943 | }; |
944 | |
945 | static const struct clk_parent_data gcc_vcodec0_data[] = { |
946 | { .index = DT_XO }, |
947 | { .hw = &gpll0.clkr.hw }, |
948 | { .hw = &gpll1_vote.hw }, |
949 | }; |
950 | |
951 | static const struct freq_tbl ftbl_vcodec0_clk_src[] = { |
952 | F(133330000, P_GPLL0, 6, 0, 0), |
953 | F(266670000, P_GPLL0, 3, 0, 0), |
954 | F(307200000, P_GPLL1, 4, 0, 0), |
955 | { } |
956 | }; |
957 | |
958 | static struct clk_rcg2 vcodec0_clk_src = { |
959 | .cmd_rcgr = 0x4c000, |
960 | .hid_width = 5, |
961 | .mnd_width = 8, |
962 | .freq_tbl = ftbl_vcodec0_clk_src, |
963 | .parent_map = gcc_vcodec0_map, |
964 | .clkr.hw.init = &(struct clk_init_data) { |
965 | .name = "vcodec0_clk_src" , |
966 | .parent_data = gcc_vcodec0_data, |
967 | .num_parents = ARRAY_SIZE(gcc_vcodec0_data), |
968 | .ops = &clk_rcg2_ops, |
969 | } |
970 | }; |
971 | |
972 | static const struct freq_tbl ftbl_gcc_camss_vfe0_clk[] = { |
973 | F(50000000, P_GPLL0, 16, 0, 0), |
974 | F(80000000, P_GPLL0, 10, 0, 0), |
975 | F(100000000, P_GPLL0, 8, 0, 0), |
976 | F(133330000, P_GPLL0, 6, 0, 0), |
977 | F(160000000, P_GPLL0, 5, 0, 0), |
978 | F(177780000, P_GPLL0, 4.5, 0, 0), |
979 | F(200000000, P_GPLL0, 4, 0, 0), |
980 | F(266670000, P_GPLL0, 3, 0, 0), |
981 | F(320000000, P_GPLL0, 2.5, 0, 0), |
982 | { } |
983 | }; |
984 | |
985 | static struct clk_rcg2 vfe0_clk_src = { |
986 | .cmd_rcgr = 0x58000, |
987 | .hid_width = 5, |
988 | .freq_tbl = ftbl_gcc_camss_vfe0_clk, |
989 | .parent_map = gcc_xo_gpll0_map, |
990 | .clkr.hw.init = &(struct clk_init_data) { |
991 | .name = "vfe0_clk_src" , |
992 | .parent_data = gcc_xo_gpll0_data, |
993 | .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), |
994 | .ops = &clk_rcg2_ops, |
995 | } |
996 | }; |
997 | |
998 | static const struct freq_tbl ftbl_vsync_clk_src[] = { |
999 | F(19200000, P_XO, 1, 0, 0), |
1000 | { } |
1001 | }; |
1002 | |
1003 | static struct clk_rcg2 vsync_clk_src = { |
1004 | .cmd_rcgr = 0x4d02c, |
1005 | .hid_width = 5, |
1006 | .freq_tbl = ftbl_vsync_clk_src, |
1007 | .parent_map = gcc_xo_map, |
1008 | .clkr.hw.init = &(struct clk_init_data) { |
1009 | .name = "vsync_clk_src" , |
1010 | .parent_data = gcc_xo_data, |
1011 | .num_parents = ARRAY_SIZE(gcc_xo_data), |
1012 | .ops = &clk_rcg2_ops, |
1013 | } |
1014 | }; |
1015 | |
1016 | static struct clk_branch gcc_apss_tcu_clk = { |
1017 | .halt_reg = 0x12018, |
1018 | .halt_check = BRANCH_HALT_VOTED, |
1019 | .clkr = { |
1020 | .enable_reg = 0x4500c, |
1021 | .enable_mask = BIT(1), |
1022 | .hw.init = &(struct clk_init_data) { |
1023 | .name = "gcc_apss_tcu_clk" , |
1024 | .parent_hws = (const struct clk_hw*[]) { |
1025 | &bimc_ddr_clk_src.clkr.hw, |
1026 | }, |
1027 | .num_parents = 1, |
1028 | .ops = &clk_branch2_ops, |
1029 | } |
1030 | } |
1031 | }; |
1032 | |
1033 | static struct clk_branch gcc_blsp1_ahb_clk = { |
1034 | .halt_reg = 0x01008, |
1035 | .halt_check = BRANCH_HALT_VOTED, |
1036 | .clkr = { |
1037 | .enable_reg = 0x45004, |
1038 | .enable_mask = BIT(10), |
1039 | .hw.init = &(struct clk_init_data) { |
1040 | .name = "gcc_blsp1_ahb_clk" , |
1041 | .parent_hws = (const struct clk_hw*[]) { |
1042 | &pcnoc_bfdcd_clk_src.clkr.hw, |
1043 | }, |
1044 | .num_parents = 1, |
1045 | .ops = &clk_branch2_ops, |
1046 | } |
1047 | } |
1048 | }; |
1049 | |
1050 | static struct clk_branch gcc_blsp1_sleep_clk = { |
1051 | .halt_reg = 0x01004, |
1052 | .halt_check = BRANCH_HALT_VOTED, |
1053 | .clkr = { |
1054 | .enable_reg = 0x45004, |
1055 | .enable_mask = BIT(9), |
1056 | .hw.init = &(struct clk_init_data) { |
1057 | .name = "gcc_blsp1_sleep_clk" , |
1058 | .parent_data = gcc_sleep_clk_data, |
1059 | .num_parents = ARRAY_SIZE(gcc_sleep_clk_data), |
1060 | .ops = &clk_branch2_ops, |
1061 | } |
1062 | } |
1063 | }; |
1064 | |
1065 | static struct clk_branch gcc_boot_rom_ahb_clk = { |
1066 | .halt_reg = 0x1300c, |
1067 | .halt_check = BRANCH_HALT_VOTED, |
1068 | .clkr = { |
1069 | .enable_reg = 0x45004, |
1070 | .enable_mask = BIT(7), |
1071 | .hw.init = &(struct clk_init_data) { |
1072 | .name = "gcc_boot_rom_ahb_clk" , |
1073 | .parent_hws = (const struct clk_hw*[]) { |
1074 | &pcnoc_bfdcd_clk_src.clkr.hw, |
1075 | }, |
1076 | .num_parents = 1, |
1077 | .ops = &clk_branch2_ops, |
1078 | } |
1079 | } |
1080 | }; |
1081 | |
1082 | static struct clk_branch gcc_crypto_clk = { |
1083 | .halt_reg = 0x1601c, |
1084 | .halt_check = BRANCH_HALT_VOTED, |
1085 | .clkr = { |
1086 | .enable_reg = 0x45004, |
1087 | .enable_mask = BIT(2), |
1088 | .hw.init = &(struct clk_init_data) { |
1089 | .name = "gcc_crypto_clk" , |
1090 | .parent_hws = (const struct clk_hw*[]) { |
1091 | &crypto_clk_src.clkr.hw, |
1092 | }, |
1093 | .num_parents = 1, |
1094 | .ops = &clk_branch2_ops, |
1095 | .flags = CLK_SET_RATE_PARENT, |
1096 | } |
1097 | } |
1098 | }; |
1099 | |
1100 | static struct clk_branch gcc_crypto_ahb_clk = { |
1101 | .halt_reg = 0x16024, |
1102 | .halt_check = BRANCH_HALT_VOTED, |
1103 | .clkr = { |
1104 | .enable_reg = 0x45004, |
1105 | .enable_mask = BIT(0), |
1106 | .hw.init = &(struct clk_init_data) { |
1107 | .name = "gcc_crypto_ahb_clk" , |
1108 | .parent_hws = (const struct clk_hw*[]) { |
1109 | &pcnoc_bfdcd_clk_src.clkr.hw, |
1110 | }, |
1111 | .num_parents = 1, |
1112 | .ops = &clk_branch2_ops, |
1113 | } |
1114 | } |
1115 | }; |
1116 | |
1117 | static struct clk_branch gcc_crypto_axi_clk = { |
1118 | .halt_reg = 0x16020, |
1119 | .halt_check = BRANCH_HALT_VOTED, |
1120 | .clkr = { |
1121 | .enable_reg = 0x45004, |
1122 | .enable_mask = BIT(1), |
1123 | .hw.init = &(struct clk_init_data) { |
1124 | .name = "gcc_crypto_axi_clk" , |
1125 | .parent_hws = (const struct clk_hw*[]) { |
1126 | &pcnoc_bfdcd_clk_src.clkr.hw, |
1127 | }, |
1128 | .num_parents = 1, |
1129 | .ops = &clk_branch2_ops, |
1130 | } |
1131 | } |
1132 | }; |
1133 | |
1134 | static struct clk_branch gcc_gfx_tbu_clk = { |
1135 | .halt_reg = 0x12010, |
1136 | .halt_check = BRANCH_HALT_VOTED, |
1137 | .clkr = { |
1138 | .enable_reg = 0x4500c, |
1139 | .enable_mask = BIT(3), |
1140 | .hw.init = &(struct clk_init_data) { |
1141 | .name = "gcc_gfx_tbu_clk" , |
1142 | .parent_hws = (const struct clk_hw*[]) { |
1143 | &bimc_ddr_clk_src.clkr.hw, |
1144 | }, |
1145 | .num_parents = 1, |
1146 | .ops = &clk_branch2_ops, |
1147 | } |
1148 | } |
1149 | }; |
1150 | |
1151 | static struct clk_branch gcc_gfx_tcu_clk = { |
1152 | .halt_reg = 0x12020, |
1153 | .halt_check = BRANCH_HALT_VOTED, |
1154 | .clkr = { |
1155 | .enable_reg = 0x4500c, |
1156 | .enable_mask = BIT(2), |
1157 | .hw.init = &(struct clk_init_data) { |
1158 | .name = "gcc_gfx_tcu_clk" , |
1159 | .parent_hws = (const struct clk_hw*[]) { |
1160 | &bimc_ddr_clk_src.clkr.hw, |
1161 | }, |
1162 | .num_parents = 1, |
1163 | .ops = &clk_branch2_ops, |
1164 | } |
1165 | } |
1166 | }; |
1167 | |
1168 | static struct clk_branch gcc_gtcu_ahb_clk = { |
1169 | .halt_reg = 0x12044, |
1170 | .halt_check = BRANCH_HALT_VOTED, |
1171 | .clkr = { |
1172 | .enable_reg = 0x4500c, |
1173 | .enable_mask = BIT(13), |
1174 | .hw.init = &(struct clk_init_data) { |
1175 | .name = "gcc_gtcu_ahb_clk" , |
1176 | .parent_hws = (const struct clk_hw*[]) { |
1177 | &pcnoc_bfdcd_clk_src.clkr.hw, |
1178 | }, |
1179 | .num_parents = 1, |
1180 | .ops = &clk_branch2_ops, |
1181 | } |
1182 | } |
1183 | }; |
1184 | |
1185 | static struct clk_branch gcc_mdp_tbu_clk = { |
1186 | .halt_reg = 0x1201c, |
1187 | .halt_check = BRANCH_HALT_VOTED, |
1188 | .clkr = { |
1189 | .enable_reg = 0x4500c, |
1190 | .enable_mask = BIT(4), |
1191 | .hw.init = &(struct clk_init_data) { |
1192 | .name = "gcc_mdp_tbu_clk" , |
1193 | .parent_hws = (const struct clk_hw*[]) { |
1194 | &system_noc_bfdcd_clk_src.clkr.hw, |
1195 | }, |
1196 | .num_parents = 1, |
1197 | .ops = &clk_branch2_ops, |
1198 | } |
1199 | } |
1200 | }; |
1201 | |
1202 | static struct clk_branch gcc_prng_ahb_clk = { |
1203 | .halt_reg = 0x13004, |
1204 | .halt_check = BRANCH_HALT_VOTED, |
1205 | .clkr = { |
1206 | .enable_reg = 0x45004, |
1207 | .enable_mask = BIT(8), |
1208 | .hw.init = &(struct clk_init_data) { |
1209 | .name = "gcc_prng_ahb_clk" , |
1210 | .parent_hws = (const struct clk_hw*[]) { |
1211 | &pcnoc_bfdcd_clk_src.clkr.hw, |
1212 | }, |
1213 | .num_parents = 1, |
1214 | .ops = &clk_branch2_ops, |
1215 | } |
1216 | } |
1217 | }; |
1218 | |
1219 | static struct clk_branch gcc_smmu_cfg_clk = { |
1220 | .halt_reg = 0x12038, |
1221 | .halt_check = BRANCH_HALT_VOTED, |
1222 | .clkr = { |
1223 | .enable_reg = 0x4500c, |
1224 | .enable_mask = BIT(12), |
1225 | .hw.init = &(struct clk_init_data) { |
1226 | .name = "gcc_smmu_cfg_clk" , |
1227 | .parent_hws = (const struct clk_hw*[]) { |
1228 | &pcnoc_bfdcd_clk_src.clkr.hw, |
1229 | }, |
1230 | .num_parents = 1, |
1231 | .ops = &clk_branch2_ops, |
1232 | } |
1233 | } |
1234 | }; |
1235 | |
1236 | static struct clk_branch gcc_venus_tbu_clk = { |
1237 | .halt_reg = 0x12014, |
1238 | .halt_check = BRANCH_HALT_VOTED, |
1239 | .clkr = { |
1240 | .enable_reg = 0x4500c, |
1241 | .enable_mask = BIT(5), |
1242 | .hw.init = &(struct clk_init_data) { |
1243 | .name = "gcc_venus_tbu_clk" , |
1244 | .parent_hws = (const struct clk_hw*[]) { |
1245 | &system_noc_bfdcd_clk_src.clkr.hw, |
1246 | }, |
1247 | .num_parents = 1, |
1248 | .ops = &clk_branch2_ops, |
1249 | } |
1250 | } |
1251 | }; |
1252 | |
1253 | static struct clk_branch gcc_vfe_tbu_clk = { |
1254 | .halt_reg = 0x1203c, |
1255 | .halt_check = BRANCH_HALT_VOTED, |
1256 | .clkr = { |
1257 | .enable_reg = 0x4500c, |
1258 | .enable_mask = BIT(9), |
1259 | .hw.init = &(struct clk_init_data) { |
1260 | .name = "gcc_vfe_tbu_clk" , |
1261 | .parent_hws = (const struct clk_hw*[]) { |
1262 | &system_noc_bfdcd_clk_src.clkr.hw, |
1263 | }, |
1264 | .num_parents = 1, |
1265 | .ops = &clk_branch2_ops, |
1266 | } |
1267 | } |
1268 | }; |
1269 | |
1270 | static struct clk_branch gcc_bimc_gfx_clk = { |
1271 | .halt_reg = 0x31024, |
1272 | .halt_check = BRANCH_HALT, |
1273 | .clkr = { |
1274 | .enable_reg = 0x31024, |
1275 | .enable_mask = BIT(0), |
1276 | .hw.init = &(struct clk_init_data) { |
1277 | .name = "gcc_bimc_gfx_clk" , |
1278 | .parent_hws = (const struct clk_hw*[]) { |
1279 | &bimc_gpu_clk_src.clkr.hw, |
1280 | }, |
1281 | .num_parents = 1, |
1282 | .ops = &clk_branch2_ops, |
1283 | } |
1284 | } |
1285 | }; |
1286 | |
1287 | static struct clk_branch gcc_bimc_gpu_clk = { |
1288 | .halt_reg = 0x31040, |
1289 | .halt_check = BRANCH_HALT, |
1290 | .clkr = { |
1291 | .enable_reg = 0x31040, |
1292 | .enable_mask = BIT(0), |
1293 | .hw.init = &(struct clk_init_data) { |
1294 | .name = "gcc_bimc_gpu_clk" , |
1295 | .parent_hws = (const struct clk_hw*[]) { |
1296 | &bimc_gpu_clk_src.clkr.hw, |
1297 | }, |
1298 | .num_parents = 1, |
1299 | .ops = &clk_branch2_ops, |
1300 | } |
1301 | } |
1302 | }; |
1303 | |
1304 | static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = { |
1305 | .halt_reg = 0x02008, |
1306 | .halt_check = BRANCH_HALT, |
1307 | .clkr = { |
1308 | .enable_reg = 0x02008, |
1309 | .enable_mask = BIT(0), |
1310 | .hw.init = &(struct clk_init_data) { |
1311 | .name = "gcc_blsp1_qup1_i2c_apps_clk" , |
1312 | .parent_hws = (const struct clk_hw*[]) { |
1313 | &blsp1_qup1_i2c_apps_clk_src.clkr.hw, |
1314 | }, |
1315 | .num_parents = 1, |
1316 | .ops = &clk_branch2_ops, |
1317 | .flags = CLK_SET_RATE_PARENT, |
1318 | } |
1319 | } |
1320 | }; |
1321 | |
1322 | static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = { |
1323 | .halt_reg = 0x03010, |
1324 | .halt_check = BRANCH_HALT, |
1325 | .clkr = { |
1326 | .enable_reg = 0x03010, |
1327 | .enable_mask = BIT(0), |
1328 | .hw.init = &(struct clk_init_data) { |
1329 | .name = "gcc_blsp1_qup2_i2c_apps_clk" , |
1330 | .parent_hws = (const struct clk_hw*[]) { |
1331 | &blsp1_qup2_i2c_apps_clk_src.clkr.hw, |
1332 | }, |
1333 | .num_parents = 1, |
1334 | .ops = &clk_branch2_ops, |
1335 | .flags = CLK_SET_RATE_PARENT, |
1336 | } |
1337 | } |
1338 | }; |
1339 | |
1340 | static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = { |
1341 | .halt_reg = 0x04020, |
1342 | .halt_check = BRANCH_HALT, |
1343 | .clkr = { |
1344 | .enable_reg = 0x04020, |
1345 | .enable_mask = BIT(0), |
1346 | .hw.init = &(struct clk_init_data) { |
1347 | .name = "gcc_blsp1_qup3_i2c_apps_clk" , |
1348 | .parent_hws = (const struct clk_hw*[]) { |
1349 | &blsp1_qup3_i2c_apps_clk_src.clkr.hw, |
1350 | }, |
1351 | .num_parents = 1, |
1352 | .ops = &clk_branch2_ops, |
1353 | .flags = CLK_SET_RATE_PARENT, |
1354 | } |
1355 | } |
1356 | }; |
1357 | |
1358 | static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = { |
1359 | .halt_reg = 0x05020, |
1360 | .halt_check = BRANCH_HALT, |
1361 | .clkr = { |
1362 | .enable_reg = 0x05020, |
1363 | .enable_mask = BIT(0), |
1364 | .hw.init = &(struct clk_init_data) { |
1365 | .name = "gcc_blsp1_qup4_i2c_apps_clk" , |
1366 | .parent_hws = (const struct clk_hw*[]) { |
1367 | &blsp1_qup4_i2c_apps_clk_src.clkr.hw, |
1368 | }, |
1369 | .num_parents = 1, |
1370 | .ops = &clk_branch2_ops, |
1371 | .flags = CLK_SET_RATE_PARENT, |
1372 | } |
1373 | } |
1374 | }; |
1375 | |
1376 | static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = { |
1377 | .halt_reg = 0x06020, |
1378 | .halt_check = BRANCH_HALT, |
1379 | .clkr = { |
1380 | .enable_reg = 0x06020, |
1381 | .enable_mask = BIT(0), |
1382 | .hw.init = &(struct clk_init_data) { |
1383 | .name = "gcc_blsp1_qup5_i2c_apps_clk" , |
1384 | .parent_hws = (const struct clk_hw*[]) { |
1385 | &blsp1_qup5_i2c_apps_clk_src.clkr.hw, |
1386 | }, |
1387 | .num_parents = 1, |
1388 | .ops = &clk_branch2_ops, |
1389 | .flags = CLK_SET_RATE_PARENT, |
1390 | } |
1391 | } |
1392 | }; |
1393 | |
1394 | static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = { |
1395 | .halt_reg = 0x07020, |
1396 | .halt_check = BRANCH_HALT, |
1397 | .clkr = { |
1398 | .enable_reg = 0x07020, |
1399 | .enable_mask = BIT(0), |
1400 | .hw.init = &(struct clk_init_data) { |
1401 | .name = "gcc_blsp1_qup6_i2c_apps_clk" , |
1402 | .parent_hws = (const struct clk_hw*[]) { |
1403 | &blsp1_qup6_i2c_apps_clk_src.clkr.hw, |
1404 | }, |
1405 | .num_parents = 1, |
1406 | .ops = &clk_branch2_ops, |
1407 | .flags = CLK_SET_RATE_PARENT, |
1408 | } |
1409 | } |
1410 | }; |
1411 | |
1412 | static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = { |
1413 | .halt_reg = 0x02004, |
1414 | .halt_check = BRANCH_HALT, |
1415 | .clkr = { |
1416 | .enable_reg = 0x02004, |
1417 | .enable_mask = BIT(0), |
1418 | .hw.init = &(struct clk_init_data) { |
1419 | .name = "gcc_blsp1_qup1_spi_apps_clk" , |
1420 | .parent_hws = (const struct clk_hw*[]) { |
1421 | &blsp1_qup1_spi_apps_clk_src.clkr.hw, |
1422 | }, |
1423 | .num_parents = 1, |
1424 | .ops = &clk_branch2_ops, |
1425 | .flags = CLK_SET_RATE_PARENT, |
1426 | } |
1427 | } |
1428 | }; |
1429 | |
1430 | static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = { |
1431 | .halt_reg = 0x0300c, |
1432 | .halt_check = BRANCH_HALT, |
1433 | .clkr = { |
1434 | .enable_reg = 0x0300c, |
1435 | .enable_mask = BIT(0), |
1436 | .hw.init = &(struct clk_init_data) { |
1437 | .name = "gcc_blsp1_qup2_spi_apps_clk" , |
1438 | .parent_hws = (const struct clk_hw*[]) { |
1439 | &blsp1_qup2_spi_apps_clk_src.clkr.hw, |
1440 | }, |
1441 | .num_parents = 1, |
1442 | .ops = &clk_branch2_ops, |
1443 | .flags = CLK_SET_RATE_PARENT, |
1444 | } |
1445 | } |
1446 | }; |
1447 | |
1448 | static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = { |
1449 | .halt_reg = 0x0401c, |
1450 | .halt_check = BRANCH_HALT, |
1451 | .clkr = { |
1452 | .enable_reg = 0x0401c, |
1453 | .enable_mask = BIT(0), |
1454 | .hw.init = &(struct clk_init_data) { |
1455 | .name = "gcc_blsp1_qup3_spi_apps_clk" , |
1456 | .parent_hws = (const struct clk_hw*[]) { |
1457 | &blsp1_qup3_spi_apps_clk_src.clkr.hw, |
1458 | }, |
1459 | .num_parents = 1, |
1460 | .ops = &clk_branch2_ops, |
1461 | .flags = CLK_SET_RATE_PARENT, |
1462 | } |
1463 | } |
1464 | }; |
1465 | |
1466 | static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = { |
1467 | .halt_reg = 0x0501c, |
1468 | .halt_check = BRANCH_HALT, |
1469 | .clkr = { |
1470 | .enable_reg = 0x0501c, |
1471 | .enable_mask = BIT(0), |
1472 | .hw.init = &(struct clk_init_data) { |
1473 | .name = "gcc_blsp1_qup4_spi_apps_clk" , |
1474 | .parent_hws = (const struct clk_hw*[]) { |
1475 | &blsp1_qup4_spi_apps_clk_src.clkr.hw, |
1476 | }, |
1477 | .num_parents = 1, |
1478 | .ops = &clk_branch2_ops, |
1479 | .flags = CLK_SET_RATE_PARENT, |
1480 | } |
1481 | } |
1482 | }; |
1483 | |
1484 | static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = { |
1485 | .halt_reg = 0x0601c, |
1486 | .halt_check = BRANCH_HALT, |
1487 | .clkr = { |
1488 | .enable_reg = 0x0601c, |
1489 | .enable_mask = BIT(0), |
1490 | .hw.init = &(struct clk_init_data) { |
1491 | .name = "gcc_blsp1_qup5_spi_apps_clk" , |
1492 | .parent_hws = (const struct clk_hw*[]) { |
1493 | &blsp1_qup5_spi_apps_clk_src.clkr.hw, |
1494 | }, |
1495 | .num_parents = 1, |
1496 | .ops = &clk_branch2_ops, |
1497 | .flags = CLK_SET_RATE_PARENT, |
1498 | } |
1499 | } |
1500 | }; |
1501 | |
1502 | static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = { |
1503 | .halt_reg = 0x0701c, |
1504 | .halt_check = BRANCH_HALT, |
1505 | .clkr = { |
1506 | .enable_reg = 0x0701c, |
1507 | .enable_mask = BIT(0), |
1508 | .hw.init = &(struct clk_init_data) { |
1509 | .name = "gcc_blsp1_qup6_spi_apps_clk" , |
1510 | .parent_hws = (const struct clk_hw*[]) { |
1511 | &blsp1_qup6_spi_apps_clk_src.clkr.hw, |
1512 | }, |
1513 | .num_parents = 1, |
1514 | .ops = &clk_branch2_ops, |
1515 | .flags = CLK_SET_RATE_PARENT, |
1516 | } |
1517 | } |
1518 | }; |
1519 | |
1520 | static struct clk_branch gcc_blsp1_uart1_apps_clk = { |
1521 | .halt_reg = 0x0203c, |
1522 | .halt_check = BRANCH_HALT, |
1523 | .clkr = { |
1524 | .enable_reg = 0x0203c, |
1525 | .enable_mask = BIT(0), |
1526 | .hw.init = &(struct clk_init_data) { |
1527 | .name = "gcc_blsp1_uart1_apps_clk" , |
1528 | .parent_hws = (const struct clk_hw*[]) { |
1529 | &blsp1_uart1_apps_clk_src.clkr.hw, |
1530 | }, |
1531 | .num_parents = 1, |
1532 | .ops = &clk_branch2_ops, |
1533 | .flags = CLK_SET_RATE_PARENT, |
1534 | } |
1535 | } |
1536 | }; |
1537 | |
1538 | static struct clk_branch gcc_blsp1_uart2_apps_clk = { |
1539 | .halt_reg = 0x0302c, |
1540 | .halt_check = BRANCH_HALT, |
1541 | .clkr = { |
1542 | .enable_reg = 0x0302c, |
1543 | .enable_mask = BIT(0), |
1544 | .hw.init = &(struct clk_init_data) { |
1545 | .name = "gcc_blsp1_uart2_apps_clk" , |
1546 | .parent_hws = (const struct clk_hw*[]) { |
1547 | &blsp1_uart2_apps_clk_src.clkr.hw, |
1548 | }, |
1549 | .num_parents = 1, |
1550 | .ops = &clk_branch2_ops, |
1551 | .flags = CLK_SET_RATE_PARENT, |
1552 | } |
1553 | } |
1554 | }; |
1555 | |
1556 | static struct clk_branch gcc_camss_ahb_clk = { |
1557 | .halt_reg = 0x5a014, |
1558 | .halt_check = BRANCH_HALT, |
1559 | .clkr = { |
1560 | .enable_reg = 0x5a014, |
1561 | .enable_mask = BIT(0), |
1562 | .hw.init = &(struct clk_init_data) { |
1563 | .name = "gcc_camss_ahb_clk" , |
1564 | .parent_hws = (const struct clk_hw*[]) { |
1565 | &pcnoc_bfdcd_clk_src.clkr.hw, |
1566 | }, |
1567 | .num_parents = 1, |
1568 | .ops = &clk_branch2_ops, |
1569 | } |
1570 | } |
1571 | }; |
1572 | |
1573 | static struct clk_branch gcc_camss_csi0_clk = { |
1574 | .halt_reg = 0x4e03c, |
1575 | .halt_check = BRANCH_HALT, |
1576 | .clkr = { |
1577 | .enable_reg = 0x4e03c, |
1578 | .enable_mask = BIT(0), |
1579 | .hw.init = &(struct clk_init_data) { |
1580 | .name = "gcc_camss_csi0_clk" , |
1581 | .parent_hws = (const struct clk_hw*[]) { |
1582 | &csi0_clk_src.clkr.hw, |
1583 | }, |
1584 | .num_parents = 1, |
1585 | .ops = &clk_branch2_ops, |
1586 | .flags = CLK_SET_RATE_PARENT, |
1587 | } |
1588 | } |
1589 | }; |
1590 | |
1591 | static struct clk_branch gcc_camss_csi0_ahb_clk = { |
1592 | .halt_reg = 0x4e040, |
1593 | .halt_check = BRANCH_HALT, |
1594 | .clkr = { |
1595 | .enable_reg = 0x4e040, |
1596 | .enable_mask = BIT(0), |
1597 | .hw.init = &(struct clk_init_data) { |
1598 | .name = "gcc_camss_csi0_ahb_clk" , |
1599 | .parent_hws = (const struct clk_hw*[]) { |
1600 | &camss_top_ahb_clk_src.clkr.hw, |
1601 | }, |
1602 | .num_parents = 1, |
1603 | .ops = &clk_branch2_ops, |
1604 | .flags = CLK_SET_RATE_PARENT, |
1605 | } |
1606 | } |
1607 | }; |
1608 | |
1609 | static struct clk_branch gcc_camss_csi0phy_clk = { |
1610 | .halt_reg = 0x4e048, |
1611 | .halt_check = BRANCH_HALT, |
1612 | .clkr = { |
1613 | .enable_reg = 0x4e048, |
1614 | .enable_mask = BIT(0), |
1615 | .hw.init = &(struct clk_init_data) { |
1616 | .name = "gcc_camss_csi0phy_clk" , |
1617 | .parent_hws = (const struct clk_hw*[]) { |
1618 | &csi0_clk_src.clkr.hw, |
1619 | }, |
1620 | .num_parents = 1, |
1621 | .ops = &clk_branch2_ops, |
1622 | .flags = CLK_SET_RATE_PARENT, |
1623 | } |
1624 | } |
1625 | }; |
1626 | |
1627 | static struct clk_branch gcc_camss_csi0phytimer_clk = { |
1628 | .halt_reg = 0x4e01c, |
1629 | .halt_check = BRANCH_HALT, |
1630 | .clkr = { |
1631 | .enable_reg = 0x4e01c, |
1632 | .enable_mask = BIT(0), |
1633 | .hw.init = &(struct clk_init_data) { |
1634 | .name = "gcc_camss_csi0phytimer_clk" , |
1635 | .parent_hws = (const struct clk_hw*[]) { |
1636 | &csi0phytimer_clk_src.clkr.hw, |
1637 | }, |
1638 | .num_parents = 1, |
1639 | .ops = &clk_branch2_ops, |
1640 | .flags = CLK_SET_RATE_PARENT, |
1641 | } |
1642 | } |
1643 | }; |
1644 | |
1645 | static struct clk_branch gcc_camss_csi0pix_clk = { |
1646 | .halt_reg = 0x4e058, |
1647 | .halt_check = BRANCH_HALT, |
1648 | .clkr = { |
1649 | .enable_reg = 0x4e058, |
1650 | .enable_mask = BIT(0), |
1651 | .hw.init = &(struct clk_init_data) { |
1652 | .name = "gcc_camss_csi0pix_clk" , |
1653 | .parent_hws = (const struct clk_hw*[]) { |
1654 | &csi0_clk_src.clkr.hw, |
1655 | }, |
1656 | .num_parents = 1, |
1657 | .ops = &clk_branch2_ops, |
1658 | .flags = CLK_SET_RATE_PARENT, |
1659 | } |
1660 | } |
1661 | }; |
1662 | |
1663 | static struct clk_branch gcc_camss_csi0rdi_clk = { |
1664 | .halt_reg = 0x4e050, |
1665 | .halt_check = BRANCH_HALT, |
1666 | .clkr = { |
1667 | .enable_reg = 0x4e050, |
1668 | .enable_mask = BIT(0), |
1669 | .hw.init = &(struct clk_init_data) { |
1670 | .name = "gcc_camss_csi0rdi_clk" , |
1671 | .parent_hws = (const struct clk_hw*[]) { |
1672 | &csi0_clk_src.clkr.hw, |
1673 | }, |
1674 | .num_parents = 1, |
1675 | .ops = &clk_branch2_ops, |
1676 | .flags = CLK_SET_RATE_PARENT, |
1677 | } |
1678 | } |
1679 | }; |
1680 | |
1681 | static struct clk_branch gcc_camss_csi1_clk = { |
1682 | .halt_reg = 0x4f03c, |
1683 | .halt_check = BRANCH_HALT, |
1684 | .clkr = { |
1685 | .enable_reg = 0x4f03c, |
1686 | .enable_mask = BIT(0), |
1687 | .hw.init = &(struct clk_init_data) { |
1688 | .name = "gcc_camss_csi1_clk" , |
1689 | .parent_hws = (const struct clk_hw*[]) { |
1690 | &csi1_clk_src.clkr.hw, |
1691 | }, |
1692 | .num_parents = 1, |
1693 | .ops = &clk_branch2_ops, |
1694 | .flags = CLK_SET_RATE_PARENT, |
1695 | } |
1696 | } |
1697 | }; |
1698 | |
1699 | static struct clk_branch gcc_camss_csi1_ahb_clk = { |
1700 | .halt_reg = 0x4f040, |
1701 | .halt_check = BRANCH_HALT, |
1702 | .clkr = { |
1703 | .enable_reg = 0x4f040, |
1704 | .enable_mask = BIT(0), |
1705 | .hw.init = &(struct clk_init_data) { |
1706 | .name = "gcc_camss_csi1_ahb_clk" , |
1707 | .parent_hws = (const struct clk_hw*[]) { |
1708 | &camss_top_ahb_clk_src.clkr.hw, |
1709 | }, |
1710 | .num_parents = 1, |
1711 | .ops = &clk_branch2_ops, |
1712 | .flags = CLK_SET_RATE_PARENT, |
1713 | } |
1714 | } |
1715 | }; |
1716 | |
1717 | static struct clk_branch gcc_camss_csi1phy_clk = { |
1718 | .halt_reg = 0x4f048, |
1719 | .halt_check = BRANCH_HALT, |
1720 | .clkr = { |
1721 | .enable_reg = 0x4f048, |
1722 | .enable_mask = BIT(0), |
1723 | .hw.init = &(struct clk_init_data) { |
1724 | .name = "gcc_camss_csi1phy_clk" , |
1725 | .parent_hws = (const struct clk_hw*[]) { |
1726 | &csi1_clk_src.clkr.hw, |
1727 | }, |
1728 | .num_parents = 1, |
1729 | .ops = &clk_branch2_ops, |
1730 | .flags = CLK_SET_RATE_PARENT, |
1731 | } |
1732 | } |
1733 | }; |
1734 | |
1735 | static struct clk_branch gcc_camss_csi1pix_clk = { |
1736 | .halt_reg = 0x4f058, |
1737 | .halt_check = BRANCH_HALT, |
1738 | .clkr = { |
1739 | .enable_reg = 0x4f058, |
1740 | .enable_mask = BIT(0), |
1741 | .hw.init = &(struct clk_init_data) { |
1742 | .name = "gcc_camss_csi1pix_clk" , |
1743 | .parent_hws = (const struct clk_hw*[]) { |
1744 | &csi1_clk_src.clkr.hw, |
1745 | }, |
1746 | .num_parents = 1, |
1747 | .ops = &clk_branch2_ops, |
1748 | .flags = CLK_SET_RATE_PARENT, |
1749 | } |
1750 | } |
1751 | }; |
1752 | |
1753 | static struct clk_branch gcc_camss_csi1rdi_clk = { |
1754 | .halt_reg = 0x4f050, |
1755 | .halt_check = BRANCH_HALT, |
1756 | .clkr = { |
1757 | .enable_reg = 0x4f050, |
1758 | .enable_mask = BIT(0), |
1759 | .hw.init = &(struct clk_init_data) { |
1760 | .name = "gcc_camss_csi1rdi_clk" , |
1761 | .parent_hws = (const struct clk_hw*[]) { |
1762 | &csi1_clk_src.clkr.hw, |
1763 | }, |
1764 | .num_parents = 1, |
1765 | .ops = &clk_branch2_ops, |
1766 | .flags = CLK_SET_RATE_PARENT, |
1767 | } |
1768 | } |
1769 | }; |
1770 | |
1771 | static struct clk_branch gcc_camss_csi_vfe0_clk = { |
1772 | .halt_reg = 0x58050, |
1773 | .halt_check = BRANCH_HALT, |
1774 | .clkr = { |
1775 | .enable_reg = 0x58050, |
1776 | .enable_mask = BIT(0), |
1777 | .hw.init = &(struct clk_init_data) { |
1778 | .name = "gcc_camss_csi_vfe0_clk" , |
1779 | .parent_hws = (const struct clk_hw*[]) { |
1780 | &vfe0_clk_src.clkr.hw, |
1781 | }, |
1782 | .num_parents = 1, |
1783 | .ops = &clk_branch2_ops, |
1784 | .flags = CLK_SET_RATE_PARENT, |
1785 | } |
1786 | } |
1787 | }; |
1788 | |
1789 | static struct clk_branch gcc_camss_gp0_clk = { |
1790 | .halt_reg = 0x54018, |
1791 | .halt_check = BRANCH_HALT, |
1792 | .clkr = { |
1793 | .enable_reg = 0x54018, |
1794 | .enable_mask = BIT(0), |
1795 | .hw.init = &(struct clk_init_data) { |
1796 | .name = "gcc_camss_gp0_clk" , |
1797 | .parent_hws = (const struct clk_hw*[]) { |
1798 | &camss_gp0_clk_src.clkr.hw, |
1799 | }, |
1800 | .num_parents = 1, |
1801 | .ops = &clk_branch2_ops, |
1802 | .flags = CLK_SET_RATE_PARENT, |
1803 | } |
1804 | } |
1805 | }; |
1806 | |
1807 | static struct clk_branch gcc_camss_gp1_clk = { |
1808 | .halt_reg = 0x55018, |
1809 | .halt_check = BRANCH_HALT, |
1810 | .clkr = { |
1811 | .enable_reg = 0x55018, |
1812 | .enable_mask = BIT(0), |
1813 | .hw.init = &(struct clk_init_data) { |
1814 | .name = "gcc_camss_gp1_clk" , |
1815 | .parent_hws = (const struct clk_hw*[]) { |
1816 | &camss_gp1_clk_src.clkr.hw, |
1817 | }, |
1818 | .num_parents = 1, |
1819 | .ops = &clk_branch2_ops, |
1820 | .flags = CLK_SET_RATE_PARENT, |
1821 | } |
1822 | } |
1823 | }; |
1824 | |
1825 | static struct clk_branch gcc_camss_ispif_ahb_clk = { |
1826 | .halt_reg = 0x50004, |
1827 | .halt_check = BRANCH_HALT, |
1828 | .clkr = { |
1829 | .enable_reg = 0x50004, |
1830 | .enable_mask = BIT(0), |
1831 | .hw.init = &(struct clk_init_data) { |
1832 | .name = "gcc_camss_ispif_ahb_clk" , |
1833 | .parent_hws = (const struct clk_hw*[]) { |
1834 | &camss_top_ahb_clk_src.clkr.hw, |
1835 | }, |
1836 | .num_parents = 1, |
1837 | .ops = &clk_branch2_ops, |
1838 | .flags = CLK_SET_RATE_PARENT, |
1839 | } |
1840 | } |
1841 | }; |
1842 | |
1843 | static struct clk_branch gcc_camss_mclk0_clk = { |
1844 | .halt_reg = 0x52018, |
1845 | .halt_check = BRANCH_HALT, |
1846 | .clkr = { |
1847 | .enable_reg = 0x52018, |
1848 | .enable_mask = BIT(0), |
1849 | .hw.init = &(struct clk_init_data) { |
1850 | .name = "gcc_camss_mclk0_clk" , |
1851 | .parent_hws = (const struct clk_hw*[]) { |
1852 | &mclk0_clk_src.clkr.hw, |
1853 | }, |
1854 | .num_parents = 1, |
1855 | .ops = &clk_branch2_ops, |
1856 | .flags = CLK_SET_RATE_PARENT, |
1857 | } |
1858 | } |
1859 | }; |
1860 | |
1861 | static struct clk_branch gcc_camss_mclk1_clk = { |
1862 | .halt_reg = 0x53018, |
1863 | .halt_check = BRANCH_HALT, |
1864 | .clkr = { |
1865 | .enable_reg = 0x53018, |
1866 | .enable_mask = BIT(0), |
1867 | .hw.init = &(struct clk_init_data) { |
1868 | .name = "gcc_camss_mclk1_clk" , |
1869 | .parent_hws = (const struct clk_hw*[]) { |
1870 | &mclk1_clk_src.clkr.hw, |
1871 | }, |
1872 | .num_parents = 1, |
1873 | .ops = &clk_branch2_ops, |
1874 | .flags = CLK_SET_RATE_PARENT, |
1875 | } |
1876 | } |
1877 | }; |
1878 | |
1879 | static struct clk_branch gcc_camss_top_ahb_clk = { |
1880 | .halt_reg = 0x56004, |
1881 | .halt_check = BRANCH_HALT, |
1882 | .clkr = { |
1883 | .enable_reg = 0x56004, |
1884 | .enable_mask = BIT(0), |
1885 | .hw.init = &(struct clk_init_data) { |
1886 | .name = "gcc_camss_top_ahb_clk" , |
1887 | .parent_hws = (const struct clk_hw*[]) { |
1888 | &camss_top_ahb_clk_src.clkr.hw, |
1889 | }, |
1890 | .num_parents = 1, |
1891 | .ops = &clk_branch2_ops, |
1892 | .flags = CLK_SET_RATE_PARENT, |
1893 | } |
1894 | } |
1895 | }; |
1896 | |
1897 | static struct clk_branch gcc_camss_vfe0_clk = { |
1898 | .halt_reg = 0x58038, |
1899 | .halt_check = BRANCH_HALT, |
1900 | .clkr = { |
1901 | .enable_reg = 0x58038, |
1902 | .enable_mask = BIT(0), |
1903 | .hw.init = &(struct clk_init_data) { |
1904 | .name = "gcc_camss_vfe0_clk" , |
1905 | .parent_hws = (const struct clk_hw*[]) { |
1906 | &vfe0_clk_src.clkr.hw, |
1907 | }, |
1908 | .num_parents = 1, |
1909 | .ops = &clk_branch2_ops, |
1910 | .flags = CLK_SET_RATE_PARENT, |
1911 | } |
1912 | } |
1913 | }; |
1914 | |
1915 | static struct clk_branch gcc_camss_vfe_ahb_clk = { |
1916 | .halt_reg = 0x58044, |
1917 | .halt_check = BRANCH_HALT, |
1918 | .clkr = { |
1919 | .enable_reg = 0x58044, |
1920 | .enable_mask = BIT(0), |
1921 | .hw.init = &(struct clk_init_data) { |
1922 | .name = "gcc_camss_vfe_ahb_clk" , |
1923 | .parent_hws = (const struct clk_hw*[]) { |
1924 | &camss_top_ahb_clk_src.clkr.hw, |
1925 | }, |
1926 | .num_parents = 1, |
1927 | .ops = &clk_branch2_ops, |
1928 | .flags = CLK_SET_RATE_PARENT, |
1929 | } |
1930 | } |
1931 | }; |
1932 | |
1933 | static struct clk_branch gcc_camss_vfe_axi_clk = { |
1934 | .halt_reg = 0x58048, |
1935 | .halt_check = BRANCH_HALT, |
1936 | .clkr = { |
1937 | .enable_reg = 0x58048, |
1938 | .enable_mask = BIT(0), |
1939 | .hw.init = &(struct clk_init_data) { |
1940 | .name = "gcc_camss_vfe_axi_clk" , |
1941 | .parent_hws = (const struct clk_hw*[]) { |
1942 | &system_noc_bfdcd_clk_src.clkr.hw, |
1943 | }, |
1944 | .num_parents = 1, |
1945 | .ops = &clk_branch2_ops, |
1946 | } |
1947 | } |
1948 | }; |
1949 | |
1950 | static struct clk_branch gcc_gp1_clk = { |
1951 | .halt_reg = 0x08000, |
1952 | .halt_check = BRANCH_HALT, |
1953 | .clkr = { |
1954 | .enable_reg = 0x08000, |
1955 | .enable_mask = BIT(0), |
1956 | .hw.init = &(struct clk_init_data) { |
1957 | .name = "gcc_gp1_clk" , |
1958 | .parent_hws = (const struct clk_hw*[]) { |
1959 | &gp1_clk_src.clkr.hw, |
1960 | }, |
1961 | .num_parents = 1, |
1962 | .ops = &clk_branch2_ops, |
1963 | .flags = CLK_SET_RATE_PARENT, |
1964 | } |
1965 | } |
1966 | }; |
1967 | |
1968 | static struct clk_branch gcc_gp2_clk = { |
1969 | .halt_reg = 0x09000, |
1970 | .halt_check = BRANCH_HALT, |
1971 | .clkr = { |
1972 | .enable_reg = 0x09000, |
1973 | .enable_mask = BIT(0), |
1974 | .hw.init = &(struct clk_init_data) { |
1975 | .name = "gcc_gp2_clk" , |
1976 | .parent_hws = (const struct clk_hw*[]) { |
1977 | &gp2_clk_src.clkr.hw, |
1978 | }, |
1979 | .num_parents = 1, |
1980 | .ops = &clk_branch2_ops, |
1981 | .flags = CLK_SET_RATE_PARENT, |
1982 | } |
1983 | } |
1984 | }; |
1985 | |
1986 | static struct clk_branch gcc_gp3_clk = { |
1987 | .halt_reg = 0x0a000, |
1988 | .halt_check = BRANCH_HALT, |
1989 | .clkr = { |
1990 | .enable_reg = 0x0a000, |
1991 | .enable_mask = BIT(0), |
1992 | .hw.init = &(struct clk_init_data) { |
1993 | .name = "gcc_gp3_clk" , |
1994 | .parent_hws = (const struct clk_hw*[]) { |
1995 | &gp3_clk_src.clkr.hw, |
1996 | }, |
1997 | .num_parents = 1, |
1998 | .ops = &clk_branch2_ops, |
1999 | .flags = CLK_SET_RATE_PARENT, |
2000 | } |
2001 | } |
2002 | }; |
2003 | |
2004 | static struct clk_branch gcc_mdss_ahb_clk = { |
2005 | .halt_reg = 0x4d07c, |
2006 | .halt_check = BRANCH_HALT, |
2007 | .clkr = { |
2008 | .enable_reg = 0x4d07c, |
2009 | .enable_mask = BIT(0), |
2010 | .hw.init = &(struct clk_init_data) { |
2011 | .name = "gcc_mdss_ahb_clk" , |
2012 | .parent_hws = (const struct clk_hw*[]) { |
2013 | &pcnoc_bfdcd_clk_src.clkr.hw, |
2014 | }, |
2015 | .num_parents = 1, |
2016 | .ops = &clk_branch2_ops, |
2017 | } |
2018 | } |
2019 | }; |
2020 | |
2021 | static struct clk_branch gcc_mdss_axi_clk = { |
2022 | .halt_reg = 0x4d080, |
2023 | .halt_check = BRANCH_HALT, |
2024 | .clkr = { |
2025 | .enable_reg = 0x4d080, |
2026 | .enable_mask = BIT(0), |
2027 | .hw.init = &(struct clk_init_data) { |
2028 | .name = "gcc_mdss_axi_clk" , |
2029 | .parent_hws = (const struct clk_hw*[]) { |
2030 | &system_noc_bfdcd_clk_src.clkr.hw, |
2031 | }, |
2032 | .num_parents = 1, |
2033 | .ops = &clk_branch2_ops, |
2034 | } |
2035 | } |
2036 | }; |
2037 | |
2038 | static struct clk_branch gcc_mdss_byte0_clk = { |
2039 | .halt_reg = 0x4d094, |
2040 | .halt_check = BRANCH_HALT, |
2041 | .clkr = { |
2042 | .enable_reg = 0x4d094, |
2043 | .enable_mask = BIT(0), |
2044 | .hw.init = &(struct clk_init_data) { |
2045 | .name = "gcc_mdss_byte0_clk" , |
2046 | .parent_hws = (const struct clk_hw*[]) { |
2047 | &byte0_clk_src.clkr.hw, |
2048 | }, |
2049 | .num_parents = 1, |
2050 | .ops = &clk_branch2_ops, |
2051 | .flags = CLK_SET_RATE_PARENT, |
2052 | } |
2053 | } |
2054 | }; |
2055 | |
2056 | static struct clk_branch gcc_mdss_esc0_clk = { |
2057 | .halt_reg = 0x4d098, |
2058 | .halt_check = BRANCH_HALT, |
2059 | .clkr = { |
2060 | .enable_reg = 0x4d098, |
2061 | .enable_mask = BIT(0), |
2062 | .hw.init = &(struct clk_init_data) { |
2063 | .name = "gcc_mdss_esc0_clk" , |
2064 | .parent_hws = (const struct clk_hw*[]) { |
2065 | &esc0_clk_src.clkr.hw, |
2066 | }, |
2067 | .num_parents = 1, |
2068 | .ops = &clk_branch2_ops, |
2069 | .flags = CLK_SET_RATE_PARENT, |
2070 | } |
2071 | } |
2072 | }; |
2073 | |
2074 | static struct clk_branch gcc_mdss_mdp_clk = { |
2075 | .halt_reg = 0x4d088, |
2076 | .halt_check = BRANCH_HALT, |
2077 | .clkr = { |
2078 | .enable_reg = 0x4d088, |
2079 | .enable_mask = BIT(0), |
2080 | .hw.init = &(struct clk_init_data) { |
2081 | .name = "gcc_mdss_mdp_clk" , |
2082 | .parent_hws = (const struct clk_hw*[]) { |
2083 | &mdp_clk_src.clkr.hw, |
2084 | }, |
2085 | .num_parents = 1, |
2086 | .ops = &clk_branch2_ops, |
2087 | .flags = CLK_SET_RATE_PARENT, |
2088 | } |
2089 | } |
2090 | }; |
2091 | |
2092 | static struct clk_branch gcc_mdss_pclk0_clk = { |
2093 | .halt_reg = 0x4d084, |
2094 | .halt_check = BRANCH_HALT, |
2095 | .clkr = { |
2096 | .enable_reg = 0x4d084, |
2097 | .enable_mask = BIT(0), |
2098 | .hw.init = &(struct clk_init_data) { |
2099 | .name = "gcc_mdss_pclk0_clk" , |
2100 | .parent_hws = (const struct clk_hw*[]) { |
2101 | &pclk0_clk_src.clkr.hw, |
2102 | }, |
2103 | .num_parents = 1, |
2104 | .ops = &clk_branch2_ops, |
2105 | .flags = CLK_SET_RATE_PARENT, |
2106 | } |
2107 | } |
2108 | }; |
2109 | |
2110 | static struct clk_branch gcc_mdss_vsync_clk = { |
2111 | .halt_reg = 0x4d090, |
2112 | .halt_check = BRANCH_HALT, |
2113 | .clkr = { |
2114 | .enable_reg = 0x4d090, |
2115 | .enable_mask = BIT(0), |
2116 | .hw.init = &(struct clk_init_data) { |
2117 | .name = "gcc_mdss_vsync_clk" , |
2118 | .parent_hws = (const struct clk_hw*[]) { |
2119 | &vsync_clk_src.clkr.hw, |
2120 | }, |
2121 | .num_parents = 1, |
2122 | .ops = &clk_branch2_ops, |
2123 | .flags = CLK_SET_RATE_PARENT, |
2124 | } |
2125 | } |
2126 | }; |
2127 | |
2128 | static struct clk_branch gcc_mss_cfg_ahb_clk = { |
2129 | .halt_reg = 0x49000, |
2130 | .halt_check = BRANCH_HALT, |
2131 | .clkr = { |
2132 | .enable_reg = 0x49000, |
2133 | .enable_mask = BIT(0), |
2134 | .hw.init = &(struct clk_init_data) { |
2135 | .name = "gcc_mss_cfg_ahb_clk" , |
2136 | .parent_hws = (const struct clk_hw*[]) { |
2137 | &pcnoc_bfdcd_clk_src.clkr.hw, |
2138 | }, |
2139 | .num_parents = 1, |
2140 | .ops = &clk_branch2_ops, |
2141 | } |
2142 | } |
2143 | }; |
2144 | |
2145 | static struct clk_branch gcc_mss_q6_bimc_axi_clk = { |
2146 | .halt_reg = 0x49004, |
2147 | .halt_check = BRANCH_HALT, |
2148 | .clkr = { |
2149 | .enable_reg = 0x49004, |
2150 | .enable_mask = BIT(0), |
2151 | .hw.init = &(struct clk_init_data) { |
2152 | .name = "gcc_mss_q6_bimc_axi_clk" , |
2153 | .parent_hws = (const struct clk_hw*[]) { |
2154 | &bimc_ddr_clk_src.clkr.hw, |
2155 | }, |
2156 | .num_parents = 1, |
2157 | .ops = &clk_branch2_ops, |
2158 | } |
2159 | } |
2160 | }; |
2161 | |
2162 | static struct clk_branch gcc_oxili_ahb_clk = { |
2163 | .halt_reg = 0x59028, |
2164 | .halt_check = BRANCH_HALT, |
2165 | .clkr = { |
2166 | .enable_reg = 0x59028, |
2167 | .enable_mask = BIT(0), |
2168 | .hw.init = &(struct clk_init_data) { |
2169 | .name = "gcc_oxili_ahb_clk" , |
2170 | .parent_hws = (const struct clk_hw*[]) { |
2171 | &pcnoc_bfdcd_clk_src.clkr.hw, |
2172 | }, |
2173 | .num_parents = 1, |
2174 | .ops = &clk_branch2_ops, |
2175 | } |
2176 | } |
2177 | }; |
2178 | |
2179 | static struct clk_branch gcc_oxili_gfx3d_clk = { |
2180 | .halt_reg = 0x59020, |
2181 | .halt_check = BRANCH_HALT, |
2182 | .clkr = { |
2183 | .enable_reg = 0x59020, |
2184 | .enable_mask = BIT(0), |
2185 | .hw.init = &(struct clk_init_data) { |
2186 | .name = "gcc_oxili_gfx3d_clk" , |
2187 | .parent_hws = (const struct clk_hw*[]) { |
2188 | &gfx3d_clk_src.clkr.hw, |
2189 | }, |
2190 | .num_parents = 1, |
2191 | .ops = &clk_branch2_ops, |
2192 | .flags = CLK_SET_RATE_PARENT, |
2193 | } |
2194 | } |
2195 | }; |
2196 | |
2197 | static struct clk_branch gcc_pdm2_clk = { |
2198 | .halt_reg = 0x4400c, |
2199 | .halt_check = BRANCH_HALT, |
2200 | .clkr = { |
2201 | .enable_reg = 0x4400c, |
2202 | .enable_mask = BIT(0), |
2203 | .hw.init = &(struct clk_init_data) { |
2204 | .name = "gcc_pdm2_clk" , |
2205 | .parent_hws = (const struct clk_hw*[]) { |
2206 | &pdm2_clk_src.clkr.hw, |
2207 | }, |
2208 | .num_parents = 1, |
2209 | .ops = &clk_branch2_ops, |
2210 | .flags = CLK_SET_RATE_PARENT, |
2211 | } |
2212 | } |
2213 | }; |
2214 | |
2215 | static struct clk_branch gcc_pdm_ahb_clk = { |
2216 | .halt_reg = 0x44004, |
2217 | .halt_check = BRANCH_HALT, |
2218 | .clkr = { |
2219 | .enable_reg = 0x44004, |
2220 | .enable_mask = BIT(0), |
2221 | .hw.init = &(struct clk_init_data) { |
2222 | .name = "gcc_pdm_ahb_clk" , |
2223 | .parent_hws = (const struct clk_hw*[]) { |
2224 | &pcnoc_bfdcd_clk_src.clkr.hw, |
2225 | }, |
2226 | .num_parents = 1, |
2227 | .ops = &clk_branch2_ops, |
2228 | } |
2229 | } |
2230 | }; |
2231 | |
2232 | static struct clk_branch gcc_sdcc1_ahb_clk = { |
2233 | .halt_reg = 0x4201c, |
2234 | .halt_check = BRANCH_HALT, |
2235 | .clkr = { |
2236 | .enable_reg = 0x4201c, |
2237 | .enable_mask = BIT(0), |
2238 | .hw.init = &(struct clk_init_data) { |
2239 | .name = "gcc_sdcc1_ahb_clk" , |
2240 | .parent_hws = (const struct clk_hw*[]) { |
2241 | &pcnoc_bfdcd_clk_src.clkr.hw, |
2242 | }, |
2243 | .num_parents = 1, |
2244 | .ops = &clk_branch2_ops, |
2245 | } |
2246 | } |
2247 | }; |
2248 | |
2249 | static struct clk_branch gcc_sdcc1_apps_clk = { |
2250 | .halt_reg = 0x42018, |
2251 | .halt_check = BRANCH_HALT, |
2252 | .clkr = { |
2253 | .enable_reg = 0x42018, |
2254 | .enable_mask = BIT(0), |
2255 | .hw.init = &(struct clk_init_data) { |
2256 | .name = "gcc_sdcc1_apps_clk" , |
2257 | .parent_hws = (const struct clk_hw*[]) { |
2258 | &sdcc1_apps_clk_src.clkr.hw, |
2259 | }, |
2260 | .num_parents = 1, |
2261 | .ops = &clk_branch2_ops, |
2262 | .flags = CLK_SET_RATE_PARENT, |
2263 | } |
2264 | } |
2265 | }; |
2266 | |
2267 | static struct clk_branch gcc_sdcc2_ahb_clk = { |
2268 | .halt_reg = 0x4301c, |
2269 | .halt_check = BRANCH_HALT, |
2270 | .clkr = { |
2271 | .enable_reg = 0x4301c, |
2272 | .enable_mask = BIT(0), |
2273 | .hw.init = &(struct clk_init_data) { |
2274 | .name = "gcc_sdcc2_ahb_clk" , |
2275 | .parent_hws = (const struct clk_hw*[]) { |
2276 | &pcnoc_bfdcd_clk_src.clkr.hw, |
2277 | }, |
2278 | .num_parents = 1, |
2279 | .ops = &clk_branch2_ops, |
2280 | } |
2281 | } |
2282 | }; |
2283 | |
2284 | static struct clk_branch gcc_sdcc2_apps_clk = { |
2285 | .halt_reg = 0x43018, |
2286 | .halt_check = BRANCH_HALT, |
2287 | .clkr = { |
2288 | .enable_reg = 0x43018, |
2289 | .enable_mask = BIT(0), |
2290 | .hw.init = &(struct clk_init_data) { |
2291 | .name = "gcc_sdcc2_apps_clk" , |
2292 | .parent_hws = (const struct clk_hw*[]) { |
2293 | &sdcc2_apps_clk_src.clkr.hw, |
2294 | }, |
2295 | .num_parents = 1, |
2296 | .ops = &clk_branch2_ops, |
2297 | .flags = CLK_SET_RATE_PARENT, |
2298 | } |
2299 | } |
2300 | }; |
2301 | |
2302 | static struct clk_branch gcc_usb2a_phy_sleep_clk = { |
2303 | .halt_reg = 0x4102c, |
2304 | .halt_check = BRANCH_HALT, |
2305 | .clkr = { |
2306 | .enable_reg = 0x4102c, |
2307 | .enable_mask = BIT(0), |
2308 | .hw.init = &(struct clk_init_data) { |
2309 | .name = "gcc_usb2a_phy_sleep_clk" , |
2310 | .parent_data = gcc_sleep_clk_data, |
2311 | .num_parents = ARRAY_SIZE(gcc_sleep_clk_data), |
2312 | .ops = &clk_branch2_ops, |
2313 | } |
2314 | } |
2315 | }; |
2316 | |
2317 | static struct clk_branch gcc_usb_hs_ahb_clk = { |
2318 | .halt_reg = 0x41008, |
2319 | .halt_check = BRANCH_HALT, |
2320 | .clkr = { |
2321 | .enable_reg = 0x41008, |
2322 | .enable_mask = BIT(0), |
2323 | .hw.init = &(struct clk_init_data) { |
2324 | .name = "gcc_usb_hs_ahb_clk" , |
2325 | .parent_hws = (const struct clk_hw*[]) { |
2326 | &pcnoc_bfdcd_clk_src.clkr.hw, |
2327 | }, |
2328 | .num_parents = 1, |
2329 | .ops = &clk_branch2_ops, |
2330 | } |
2331 | } |
2332 | }; |
2333 | |
2334 | static struct clk_branch gcc_usb_hs_phy_cfg_ahb_clk = { |
2335 | .halt_reg = 0x41030, |
2336 | .halt_check = BRANCH_HALT, |
2337 | .clkr = { |
2338 | .enable_reg = 0x41030, |
2339 | .enable_mask = BIT(0), |
2340 | .hw.init = &(struct clk_init_data) { |
2341 | .name = "gcc_usb_hs_phy_cfg_ahb_clk" , |
2342 | .parent_hws = (const struct clk_hw*[]) { |
2343 | &pcnoc_bfdcd_clk_src.clkr.hw, |
2344 | }, |
2345 | .num_parents = 1, |
2346 | .ops = &clk_branch2_ops, |
2347 | } |
2348 | } |
2349 | }; |
2350 | |
2351 | static struct clk_branch gcc_usb_hs_system_clk = { |
2352 | .halt_reg = 0x41004, |
2353 | .halt_check = BRANCH_HALT, |
2354 | .clkr = { |
2355 | .enable_reg = 0x41004, |
2356 | .enable_mask = BIT(0), |
2357 | .hw.init = &(struct clk_init_data) { |
2358 | .name = "gcc_usb_hs_system_clk" , |
2359 | .parent_hws = (const struct clk_hw*[]) { |
2360 | &usb_hs_system_clk_src.clkr.hw, |
2361 | }, |
2362 | .num_parents = 1, |
2363 | .ops = &clk_branch2_ops, |
2364 | .flags = CLK_SET_RATE_PARENT, |
2365 | } |
2366 | } |
2367 | }; |
2368 | |
2369 | static struct clk_branch gcc_venus0_ahb_clk = { |
2370 | .halt_reg = 0x4c020, |
2371 | .halt_check = BRANCH_HALT, |
2372 | .clkr = { |
2373 | .enable_reg = 0x4c020, |
2374 | .enable_mask = BIT(0), |
2375 | .hw.init = &(struct clk_init_data) { |
2376 | .name = "gcc_venus0_ahb_clk" , |
2377 | .parent_hws = (const struct clk_hw*[]) { |
2378 | &pcnoc_bfdcd_clk_src.clkr.hw, |
2379 | }, |
2380 | .num_parents = 1, |
2381 | .ops = &clk_branch2_ops, |
2382 | } |
2383 | } |
2384 | }; |
2385 | |
2386 | static struct clk_branch gcc_venus0_axi_clk = { |
2387 | .halt_reg = 0x4c024, |
2388 | .halt_check = BRANCH_HALT, |
2389 | .clkr = { |
2390 | .enable_reg = 0x4c024, |
2391 | .enable_mask = BIT(0), |
2392 | .hw.init = &(struct clk_init_data) { |
2393 | .name = "gcc_venus0_axi_clk" , |
2394 | .parent_hws = (const struct clk_hw*[]) { |
2395 | &system_noc_bfdcd_clk_src.clkr.hw, |
2396 | }, |
2397 | .num_parents = 1, |
2398 | .ops = &clk_branch2_ops, |
2399 | } |
2400 | } |
2401 | }; |
2402 | |
2403 | static struct clk_branch gcc_venus0_core0_vcodec0_clk = { |
2404 | .halt_reg = 0x4c02c, |
2405 | .halt_check = BRANCH_HALT, |
2406 | .clkr = { |
2407 | .enable_reg = 0x4c02c, |
2408 | .enable_mask = BIT(0), |
2409 | .hw.init = &(struct clk_init_data) { |
2410 | .name = "gcc_venus0_core0_vcodec0_clk" , |
2411 | .parent_hws = (const struct clk_hw*[]) { |
2412 | &vcodec0_clk_src.clkr.hw, |
2413 | }, |
2414 | .num_parents = 1, |
2415 | .ops = &clk_branch2_ops, |
2416 | .flags = CLK_SET_RATE_PARENT, |
2417 | } |
2418 | } |
2419 | }; |
2420 | |
2421 | static struct clk_branch gcc_venus0_vcodec0_clk = { |
2422 | .halt_reg = 0x4c01c, |
2423 | .halt_check = BRANCH_HALT, |
2424 | .clkr = { |
2425 | .enable_reg = 0x4c01c, |
2426 | .enable_mask = BIT(0), |
2427 | .hw.init = &(struct clk_init_data) { |
2428 | .name = "gcc_venus0_vcodec0_clk" , |
2429 | .parent_hws = (const struct clk_hw*[]) { |
2430 | &vcodec0_clk_src.clkr.hw, |
2431 | }, |
2432 | .num_parents = 1, |
2433 | .ops = &clk_branch2_ops, |
2434 | .flags = CLK_SET_RATE_PARENT, |
2435 | } |
2436 | } |
2437 | }; |
2438 | |
2439 | static struct gdsc mdss_gdsc = { |
2440 | .gdscr = 0x4d078, |
2441 | .cxcs = (unsigned int []) { 0x4d080, 0x4d088 }, |
2442 | .cxc_count = 2, |
2443 | .pd = { |
2444 | .name = "mdss_gdsc" , |
2445 | }, |
2446 | .pwrsts = PWRSTS_OFF_ON, |
2447 | }; |
2448 | |
2449 | static struct gdsc oxili_gdsc = { |
2450 | .gdscr = 0x5901c, |
2451 | .cxcs = (unsigned int []) { 0x59020 }, |
2452 | .cxc_count = 1, |
2453 | .pd = { |
2454 | .name = "oxili_gdsc" , |
2455 | }, |
2456 | .pwrsts = PWRSTS_OFF_ON, |
2457 | }; |
2458 | |
2459 | static struct gdsc venus_gdsc = { |
2460 | .gdscr = 0x4c018, |
2461 | .cxcs = (unsigned int []) { 0x4c024, 0x4c01c }, |
2462 | .cxc_count = 2, |
2463 | .pd = { |
2464 | .name = "venus_gdsc" , |
2465 | }, |
2466 | .pwrsts = PWRSTS_OFF_ON, |
2467 | }; |
2468 | |
2469 | static struct gdsc venus_core0_gdsc = { |
2470 | .gdscr = 0x4c028, |
2471 | .cxcs = (unsigned int []) { 0x4c02c }, |
2472 | .cxc_count = 1, |
2473 | .pd = { |
2474 | .name = "venus_core0_gdsc" , |
2475 | }, |
2476 | .flags = HW_CTRL, |
2477 | .pwrsts = PWRSTS_OFF_ON, |
2478 | }; |
2479 | |
2480 | static struct gdsc vfe_gdsc = { |
2481 | .gdscr = 0x58034, |
2482 | .cxcs = (unsigned int []) { 0x58038, 0x58048, 0x58050 }, |
2483 | .cxc_count = 3, |
2484 | .pd = { |
2485 | .name = "vfe_gdsc" , |
2486 | }, |
2487 | .pwrsts = PWRSTS_OFF_ON, |
2488 | }; |
2489 | |
2490 | static struct clk_regmap *gcc_msm8909_clocks[] = { |
2491 | [GPLL0_EARLY] = &gpll0_early.clkr, |
2492 | [GPLL0] = &gpll0.clkr, |
2493 | [GPLL1] = &gpll1.clkr, |
2494 | [GPLL1_VOTE] = &gpll1_vote, |
2495 | [GPLL2_EARLY] = &gpll2_early.clkr, |
2496 | [GPLL2] = &gpll2.clkr, |
2497 | [BIMC_PLL_EARLY] = &bimc_pll_early.clkr, |
2498 | [BIMC_PLL] = &bimc_pll.clkr, |
2499 | [APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr, |
2500 | [BIMC_DDR_CLK_SRC] = &bimc_ddr_clk_src.clkr, |
2501 | [BIMC_GPU_CLK_SRC] = &bimc_gpu_clk_src.clkr, |
2502 | [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr, |
2503 | [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr, |
2504 | [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr, |
2505 | [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr, |
2506 | [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr, |
2507 | [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr, |
2508 | [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr, |
2509 | [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr, |
2510 | [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr, |
2511 | [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr, |
2512 | [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr, |
2513 | [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr, |
2514 | [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr, |
2515 | [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr, |
2516 | [BYTE0_CLK_SRC] = &byte0_clk_src.clkr, |
2517 | [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr, |
2518 | [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr, |
2519 | [CAMSS_TOP_AHB_CLK_SRC] = &camss_top_ahb_clk_src.clkr, |
2520 | [CRYPTO_CLK_SRC] = &crypto_clk_src.clkr, |
2521 | [CSI0_CLK_SRC] = &csi0_clk_src.clkr, |
2522 | [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr, |
2523 | [CSI1_CLK_SRC] = &csi1_clk_src.clkr, |
2524 | [ESC0_CLK_SRC] = &esc0_clk_src.clkr, |
2525 | [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr, |
2526 | [GP1_CLK_SRC] = &gp1_clk_src.clkr, |
2527 | [GP2_CLK_SRC] = &gp2_clk_src.clkr, |
2528 | [GP3_CLK_SRC] = &gp3_clk_src.clkr, |
2529 | [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr, |
2530 | [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr, |
2531 | [MDP_CLK_SRC] = &mdp_clk_src.clkr, |
2532 | [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr, |
2533 | [PCNOC_BFDCD_CLK_SRC] = &pcnoc_bfdcd_clk_src.clkr, |
2534 | [PDM2_CLK_SRC] = &pdm2_clk_src.clkr, |
2535 | [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr, |
2536 | [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr, |
2537 | [SYSTEM_NOC_BFDCD_CLK_SRC] = &system_noc_bfdcd_clk_src.clkr, |
2538 | [USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr, |
2539 | [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr, |
2540 | [VFE0_CLK_SRC] = &vfe0_clk_src.clkr, |
2541 | [VSYNC_CLK_SRC] = &vsync_clk_src.clkr, |
2542 | [GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr, |
2543 | [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr, |
2544 | [GCC_BLSP1_SLEEP_CLK] = &gcc_blsp1_sleep_clk.clkr, |
2545 | [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr, |
2546 | [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr, |
2547 | [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr, |
2548 | [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr, |
2549 | [GCC_GFX_TBU_CLK] = &gcc_gfx_tbu_clk.clkr, |
2550 | [GCC_GFX_TCU_CLK] = &gcc_gfx_tcu_clk.clkr, |
2551 | [GCC_GTCU_AHB_CLK] = &gcc_gtcu_ahb_clk.clkr, |
2552 | [GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr, |
2553 | [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr, |
2554 | [GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr, |
2555 | [GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr, |
2556 | [GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr, |
2557 | [GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr, |
2558 | [GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr, |
2559 | [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr, |
2560 | [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr, |
2561 | [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr, |
2562 | [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr, |
2563 | [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr, |
2564 | [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr, |
2565 | [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr, |
2566 | [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr, |
2567 | [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr, |
2568 | [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr, |
2569 | [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr, |
2570 | [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr, |
2571 | [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr, |
2572 | [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr, |
2573 | [GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr, |
2574 | [GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr, |
2575 | [GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr, |
2576 | [GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr, |
2577 | [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr, |
2578 | [GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr, |
2579 | [GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr, |
2580 | [GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr, |
2581 | [GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr, |
2582 | [GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr, |
2583 | [GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr, |
2584 | [GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr, |
2585 | [GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr, |
2586 | [GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr, |
2587 | [GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr, |
2588 | [GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr, |
2589 | [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr, |
2590 | [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr, |
2591 | [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr, |
2592 | [GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr, |
2593 | [GCC_CAMSS_VFE_AHB_CLK] = &gcc_camss_vfe_ahb_clk.clkr, |
2594 | [GCC_CAMSS_VFE_AXI_CLK] = &gcc_camss_vfe_axi_clk.clkr, |
2595 | [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, |
2596 | [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, |
2597 | [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, |
2598 | [GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr, |
2599 | [GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr, |
2600 | [GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr, |
2601 | [GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr, |
2602 | [GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr, |
2603 | [GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr, |
2604 | [GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr, |
2605 | [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr, |
2606 | [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr, |
2607 | [GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr, |
2608 | [GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr, |
2609 | [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr, |
2610 | [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr, |
2611 | [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr, |
2612 | [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr, |
2613 | [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr, |
2614 | [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr, |
2615 | [GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr, |
2616 | [GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr, |
2617 | [GCC_USB_HS_PHY_CFG_AHB_CLK] = &gcc_usb_hs_phy_cfg_ahb_clk.clkr, |
2618 | [GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr, |
2619 | [GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr, |
2620 | [GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr, |
2621 | [GCC_VENUS0_CORE0_VCODEC0_CLK] = &gcc_venus0_core0_vcodec0_clk.clkr, |
2622 | [GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr, |
2623 | }; |
2624 | |
2625 | static struct gdsc *gcc_msm8909_gdscs[] = { |
2626 | [MDSS_GDSC] = &mdss_gdsc, |
2627 | [OXILI_GDSC] = &oxili_gdsc, |
2628 | [VENUS_GDSC] = &venus_gdsc, |
2629 | [VENUS_CORE0_GDSC] = &venus_core0_gdsc, |
2630 | [VFE_GDSC] = &vfe_gdsc, |
2631 | }; |
2632 | |
2633 | static const struct qcom_reset_map gcc_msm8909_resets[] = { |
2634 | [GCC_AUDIO_CORE_BCR] = { 0x1c008 }, |
2635 | [GCC_BLSP1_BCR] = { 0x01000 }, |
2636 | [GCC_BLSP1_QUP1_BCR] = { 0x02000 }, |
2637 | [GCC_BLSP1_QUP2_BCR] = { 0x03008 }, |
2638 | [GCC_BLSP1_QUP3_BCR] = { 0x04018 }, |
2639 | [GCC_BLSP1_QUP4_BCR] = { 0x05018 }, |
2640 | [GCC_BLSP1_QUP5_BCR] = { 0x06018 }, |
2641 | [GCC_BLSP1_QUP6_BCR] = { 0x07018 }, |
2642 | [GCC_BLSP1_UART1_BCR] = { 0x02038 }, |
2643 | [GCC_BLSP1_UART2_BCR] = { 0x03028 }, |
2644 | [GCC_CAMSS_CSI0_BCR] = { 0x4e038 }, |
2645 | [GCC_CAMSS_CSI0PHY_BCR] = { 0x4e044 }, |
2646 | [GCC_CAMSS_CSI0PIX_BCR] = { 0x4e054 }, |
2647 | [GCC_CAMSS_CSI0RDI_BCR] = { 0x4e04c }, |
2648 | [GCC_CAMSS_CSI1_BCR] = { 0x4f038 }, |
2649 | [GCC_CAMSS_CSI1PHY_BCR] = { 0x4f044 }, |
2650 | [GCC_CAMSS_CSI1PIX_BCR] = { 0x4f054 }, |
2651 | [GCC_CAMSS_CSI1RDI_BCR] = { 0x4f04c }, |
2652 | [GCC_CAMSS_CSI_VFE0_BCR] = { 0x5804c }, |
2653 | [GCC_CAMSS_GP0_BCR] = { 0x54014 }, |
2654 | [GCC_CAMSS_GP1_BCR] = { 0x55014 }, |
2655 | [GCC_CAMSS_ISPIF_BCR] = { 0x50000 }, |
2656 | [GCC_CAMSS_MCLK0_BCR] = { 0x52014 }, |
2657 | [GCC_CAMSS_MCLK1_BCR] = { 0x53014 }, |
2658 | [GCC_CAMSS_PHY0_BCR] = { 0x4e018 }, |
2659 | [GCC_CAMSS_TOP_BCR] = { 0x56000 }, |
2660 | [GCC_CAMSS_TOP_AHB_BCR] = { 0x5a018 }, |
2661 | [GCC_CAMSS_VFE_BCR] = { 0x58030 }, |
2662 | [GCC_CRYPTO_BCR] = { 0x16000 }, |
2663 | [GCC_MDSS_BCR] = { 0x4d074 }, |
2664 | [GCC_OXILI_BCR] = { 0x59018 }, |
2665 | [GCC_PDM_BCR] = { 0x44000 }, |
2666 | [GCC_PRNG_BCR] = { 0x13000 }, |
2667 | [GCC_QUSB2_PHY_BCR] = { 0x4103c }, |
2668 | [GCC_SDCC1_BCR] = { 0x42000 }, |
2669 | [GCC_SDCC2_BCR] = { 0x43000 }, |
2670 | [GCC_ULT_AUDIO_BCR] = { 0x1c0b4 }, |
2671 | [GCC_USB2A_PHY_BCR] = { 0x41028 }, |
2672 | [GCC_USB2_HS_PHY_ONLY_BCR] = { .reg = 0x41034, .udelay = 15 }, |
2673 | [GCC_USB_HS_BCR] = { 0x41000 }, |
2674 | [GCC_VENUS0_BCR] = { 0x4c014 }, |
2675 | /* Subsystem Restart */ |
2676 | [GCC_MSS_RESTART] = { 0x3e000 }, |
2677 | }; |
2678 | |
2679 | static const struct regmap_config gcc_msm8909_regmap_config = { |
2680 | .reg_bits = 32, |
2681 | .reg_stride = 4, |
2682 | .val_bits = 32, |
2683 | .max_register = 0x80000, |
2684 | .fast_io = true, |
2685 | }; |
2686 | |
2687 | static const struct qcom_cc_desc gcc_msm8909_desc = { |
2688 | .config = &gcc_msm8909_regmap_config, |
2689 | .clks = gcc_msm8909_clocks, |
2690 | .num_clks = ARRAY_SIZE(gcc_msm8909_clocks), |
2691 | .resets = gcc_msm8909_resets, |
2692 | .num_resets = ARRAY_SIZE(gcc_msm8909_resets), |
2693 | .gdscs = gcc_msm8909_gdscs, |
2694 | .num_gdscs = ARRAY_SIZE(gcc_msm8909_gdscs), |
2695 | }; |
2696 | |
2697 | static const struct of_device_id gcc_msm8909_match_table[] = { |
2698 | { .compatible = "qcom,gcc-msm8909" }, |
2699 | { } |
2700 | }; |
2701 | MODULE_DEVICE_TABLE(of, gcc_msm8909_match_table); |
2702 | |
2703 | static int gcc_msm8909_probe(struct platform_device *pdev) |
2704 | { |
2705 | return qcom_cc_probe(pdev, desc: &gcc_msm8909_desc); |
2706 | } |
2707 | |
2708 | static struct platform_driver gcc_msm8909_driver = { |
2709 | .probe = gcc_msm8909_probe, |
2710 | .driver = { |
2711 | .name = "gcc-msm8909" , |
2712 | .of_match_table = gcc_msm8909_match_table, |
2713 | }, |
2714 | }; |
2715 | |
2716 | static int __init gcc_msm8909_init(void) |
2717 | { |
2718 | return platform_driver_register(&gcc_msm8909_driver); |
2719 | } |
2720 | core_initcall(gcc_msm8909_init); |
2721 | |
2722 | static void __exit gcc_msm8909_exit(void) |
2723 | { |
2724 | platform_driver_unregister(&gcc_msm8909_driver); |
2725 | } |
2726 | module_exit(gcc_msm8909_exit); |
2727 | |
2728 | MODULE_DESCRIPTION("Qualcomm GCC MSM8909 Driver" ); |
2729 | MODULE_LICENSE("GPL" ); |
2730 | MODULE_ALIAS("platform:gcc-msm8909" ); |
2731 | |