1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3 * Copyright (C) 2023 Otto Pflüger
4 *
5 * Based on gcc-msm8953.c:
6 * Copyright 2021, The Linux Foundation. All rights reserved.
7 * with parts taken from gcc-qcs404.c:
8 * Copyright 2018, The Linux Foundation. All rights reserved.
9 * and gcc-msm8939.c:
10 * Copyright 2020 Linaro Limited
11 * adapted with data from clock-gcc-8952.c in Qualcomm's msm-4.9 release:
12 * Copyright (c) 2014-2020, The Linux Foundation. All rights reserved.
13 */
14
15 #include <linux/bitops.h>
16 #include <linux/clk-provider.h>
17 #include <linux/err.h>
18 #include <linux/kernel.h>
19 #include <linux/module.h>
20 #include <linux/of.h>
21 #include <linux/platform_device.h>
22 #include <linux/regmap.h>
23 #include <linux/reset-controller.h>
24
25 #include <dt-bindings/clock/qcom,gcc-msm8917.h>
26
27 #include "clk-alpha-pll.h"
28 #include "clk-branch.h"
29 #include "clk-pll.h"
30 #include "clk-rcg.h"
31 #include "common.h"
32 #include "gdsc.h"
33 #include "reset.h"
34
35 enum {
36 DT_XO,
37 DT_SLEEP_CLK,
38 DT_DSI0PLL,
39 DT_DSI0PLL_BYTE,
40 DT_DSI1PLL,
41 DT_DSI1PLL_BYTE,
42 };
43
44 enum {
45 P_XO,
46 P_SLEEP_CLK,
47 P_GPLL0,
48 P_GPLL3,
49 P_GPLL4,
50 P_GPLL6,
51 P_DSI0PLL,
52 P_DSI0PLL_BYTE,
53 P_DSI1PLL,
54 P_DSI1PLL_BYTE,
55 };
56
57 static struct clk_alpha_pll gpll0_sleep_clk_src = {
58 .offset = 0x21000,
59 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
60 .clkr = {
61 .enable_reg = 0x45008,
62 .enable_mask = BIT(23),
63 .enable_is_inverted = true,
64 .hw.init = &(struct clk_init_data){
65 .name = "gpll0_sleep_clk_src",
66 .parent_data = &(const struct clk_parent_data) {
67 .index = DT_XO,
68 },
69 .num_parents = 1,
70 .ops = &clk_branch_simple_ops,
71 },
72 },
73 };
74
75 static struct clk_alpha_pll gpll0_early = {
76 .offset = 0x21000,
77 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
78 .clkr = {
79 .enable_reg = 0x45000,
80 .enable_mask = BIT(0),
81 .hw.init = &(struct clk_init_data) {
82 .name = "gpll0_early",
83 .parent_hws = (const struct clk_hw*[]){
84 &gpll0_sleep_clk_src.clkr.hw,
85 },
86 .num_parents = 1,
87 .ops = &clk_alpha_pll_fixed_ops,
88 },
89 },
90 };
91
92 static struct clk_alpha_pll_postdiv gpll0 = {
93 .offset = 0x21000,
94 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
95 .clkr.hw.init = &(struct clk_init_data){
96 .name = "gpll0",
97 .parent_hws = (const struct clk_hw*[]){
98 &gpll0_early.clkr.hw,
99 },
100 .num_parents = 1,
101 .ops = &clk_alpha_pll_postdiv_ro_ops,
102 },
103 };
104
105 static const struct pll_vco gpll3_p_vco[] = {
106 { 700000000, 1400000000, 0 },
107 };
108
109 static const struct pll_vco gpll3_p_vco_msm8937[] = {
110 { 525000000, 1066000000, 0 },
111 };
112
113 static struct alpha_pll_config gpll3_early_config = {
114 .l = 63,
115 .config_ctl_val = 0x4001055b,
116 .early_output_mask = 0,
117 .post_div_mask = GENMASK(11, 8),
118 .post_div_val = BIT(8),
119 };
120
121 static struct clk_alpha_pll gpll3_early = {
122 .offset = 0x22000,
123 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
124 .vco_table = gpll3_p_vco,
125 .num_vco = ARRAY_SIZE(gpll3_p_vco),
126 .flags = SUPPORTS_DYNAMIC_UPDATE,
127 .clkr = {
128 .hw.init = &(struct clk_init_data){
129 .name = "gpll3_early",
130 .parent_data = &(const struct clk_parent_data) {
131 .index = DT_XO,
132 },
133 .num_parents = 1,
134 .ops = &clk_alpha_pll_ops,
135 },
136 },
137 };
138
139 static struct clk_alpha_pll_postdiv gpll3 = {
140 .offset = 0x22000,
141 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
142 .clkr.hw.init = &(struct clk_init_data){
143 .name = "gpll3",
144 .parent_hws = (const struct clk_hw*[]){
145 &gpll3_early.clkr.hw,
146 },
147 .num_parents = 1,
148 .ops = &clk_alpha_pll_postdiv_ops,
149 .flags = CLK_SET_RATE_PARENT,
150 },
151 };
152
153 static struct clk_alpha_pll gpll4_early = {
154 .offset = 0x24000,
155 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
156 .clkr = {
157 .enable_reg = 0x45000,
158 .enable_mask = BIT(5),
159 .hw.init = &(struct clk_init_data){
160 .name = "gpll4_early",
161 .parent_data = &(const struct clk_parent_data) {
162 .index = DT_XO,
163 },
164 .num_parents = 1,
165 .ops = &clk_alpha_pll_fixed_ops,
166 },
167 },
168 };
169
170 static struct clk_alpha_pll_postdiv gpll4 = {
171 .offset = 0x24000,
172 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
173 .clkr.hw.init = &(struct clk_init_data){
174 .name = "gpll4",
175 .parent_hws = (const struct clk_hw*[]){
176 &gpll4_early.clkr.hw,
177 },
178 .num_parents = 1,
179 .ops = &clk_alpha_pll_postdiv_ro_ops,
180 },
181 };
182
183 static struct clk_pll gpll6_early = {
184 .l_reg = 0x37004,
185 .m_reg = 0x37008,
186 .n_reg = 0x3700c,
187 .config_reg = 0x37014,
188 .mode_reg = 0x37000,
189 .status_reg = 0x3701c,
190 .status_bit = 17,
191 .clkr.hw.init = &(struct clk_init_data){
192 .name = "gpll6_early",
193 .parent_data = &(const struct clk_parent_data) {
194 .index = DT_XO,
195 },
196 .num_parents = 1,
197 .ops = &clk_pll_ops,
198 },
199 };
200
201 static struct clk_regmap gpll6 = {
202 .enable_reg = 0x45000,
203 .enable_mask = BIT(7),
204 .hw.init = &(struct clk_init_data){
205 .name = "gpll6",
206 .parent_hws = (const struct clk_hw*[]){
207 &gpll6_early.clkr.hw,
208 },
209 .num_parents = 1,
210 .ops = &clk_pll_vote_ops,
211 },
212 };
213
214 static const struct parent_map gcc_xo_gpll0_map[] = {
215 { P_XO, 0 },
216 { P_GPLL0, 1 },
217 };
218
219 static const struct parent_map gcc_xo_gpll0_out_aux_map[] = {
220 { P_XO, 0 },
221 { P_GPLL0, 2 },
222 };
223
224 static const struct clk_parent_data gcc_xo_gpll0_data[] = {
225 { .index = DT_XO },
226 { .hw = &gpll0.clkr.hw },
227 };
228
229 static const struct parent_map gcc_xo_gpll0_gpll6_sleep_map[] = {
230 { P_XO, 0 },
231 { P_GPLL0, 1 },
232 { P_GPLL6, 2 },
233 { P_SLEEP_CLK, 6 },
234 };
235
236 static const struct clk_parent_data gcc_xo_gpll0_gpll6_sleep_data[] = {
237 { .index = DT_XO },
238 { .hw = &gpll0.clkr.hw },
239 { .hw = &gpll6.hw },
240 { .index = DT_SLEEP_CLK },
241 };
242
243 static const struct parent_map gcc_xo_gpll0_gpll6_gpll4_map[] = {
244 { P_XO, 0 },
245 { P_GPLL0, 1 },
246 { P_GPLL6, 2 },
247 { P_GPLL4, 3 },
248 };
249
250 static const struct clk_parent_data gcc_xo_gpll0_gpll6_gpll4_data[] = {
251 { .index = DT_XO },
252 { .hw = &gpll0.clkr.hw },
253 { .hw = &gpll6.hw },
254 { .hw = &gpll4.clkr.hw },
255 };
256
257 static const struct freq_tbl ftbl_apss_ahb_clk_src[] = {
258 F(19200000, P_XO, 1, 0, 0),
259 F(50000000, P_GPLL0, 16, 0, 0),
260 F(100000000, P_GPLL0, 8, 0, 0),
261 F(133330000, P_GPLL0, 6, 0, 0),
262 { }
263 };
264
265 static struct clk_rcg2 apss_ahb_clk_src = {
266 .cmd_rcgr = 0x46000,
267 .hid_width = 5,
268 .freq_tbl = ftbl_apss_ahb_clk_src,
269 .parent_map = gcc_xo_gpll0_map,
270 .clkr.hw.init = &(struct clk_init_data) {
271 .name = "apss_ahb_clk_src",
272 .parent_data = gcc_xo_gpll0_data,
273 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
274 .ops = &clk_rcg2_ops,
275 }
276 };
277
278 static const struct freq_tbl ftbl_blsp_i2c_apps_clk_src[] = {
279 F(19200000, P_XO, 1, 0, 0),
280 F(50000000, P_GPLL0, 16, 0, 0),
281 { }
282 };
283
284 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
285 .cmd_rcgr = 0x0200c,
286 .hid_width = 5,
287 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
288 .parent_map = gcc_xo_gpll0_map,
289 .clkr.hw.init = &(struct clk_init_data){
290 .name = "blsp1_qup1_i2c_apps_clk_src",
291 .parent_data = gcc_xo_gpll0_data,
292 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
293 .ops = &clk_rcg2_ops,
294 },
295 };
296
297 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
298 .cmd_rcgr = 0x03000,
299 .hid_width = 5,
300 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
301 .parent_map = gcc_xo_gpll0_map,
302 .clkr.hw.init = &(struct clk_init_data) {
303 .name = "blsp1_qup2_i2c_apps_clk_src",
304 .parent_data = gcc_xo_gpll0_data,
305 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
306 .ops = &clk_rcg2_ops,
307 }
308 };
309
310 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
311 .cmd_rcgr = 0x04000,
312 .hid_width = 5,
313 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
314 .parent_map = gcc_xo_gpll0_map,
315 .clkr.hw.init = &(struct clk_init_data) {
316 .name = "blsp1_qup3_i2c_apps_clk_src",
317 .parent_data = gcc_xo_gpll0_data,
318 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
319 .ops = &clk_rcg2_ops,
320 }
321 };
322
323 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
324 .cmd_rcgr = 0x05000,
325 .hid_width = 5,
326 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
327 .parent_map = gcc_xo_gpll0_map,
328 .clkr.hw.init = &(struct clk_init_data) {
329 .name = "blsp1_qup4_i2c_apps_clk_src",
330 .parent_data = gcc_xo_gpll0_data,
331 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
332 .ops = &clk_rcg2_ops,
333 }
334 };
335
336 static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
337 .cmd_rcgr = 0x0c00c,
338 .hid_width = 5,
339 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
340 .parent_map = gcc_xo_gpll0_map,
341 .clkr.hw.init = &(struct clk_init_data) {
342 .name = "blsp2_qup1_i2c_apps_clk_src",
343 .parent_data = gcc_xo_gpll0_data,
344 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
345 .ops = &clk_rcg2_ops,
346 }
347 };
348
349 static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
350 .cmd_rcgr = 0x0d000,
351 .hid_width = 5,
352 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
353 .parent_map = gcc_xo_gpll0_map,
354 .clkr.hw.init = &(struct clk_init_data) {
355 .name = "blsp2_qup2_i2c_apps_clk_src",
356 .parent_data = gcc_xo_gpll0_data,
357 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
358 .ops = &clk_rcg2_ops,
359 }
360 };
361
362 static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
363 .cmd_rcgr = 0x0f000,
364 .hid_width = 5,
365 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
366 .parent_map = gcc_xo_gpll0_map,
367 .clkr.hw.init = &(struct clk_init_data) {
368 .name = "blsp2_qup3_i2c_apps_clk_src",
369 .parent_data = gcc_xo_gpll0_data,
370 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
371 .ops = &clk_rcg2_ops,
372 }
373 };
374
375 static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
376 .cmd_rcgr = 0x18000,
377 .hid_width = 5,
378 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
379 .parent_map = gcc_xo_gpll0_map,
380 .clkr.hw.init = &(struct clk_init_data){
381 .name = "blsp2_qup4_i2c_apps_clk_src",
382 .parent_data = gcc_xo_gpll0_data,
383 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
384 .ops = &clk_rcg2_ops,
385 },
386 };
387
388 static const struct freq_tbl ftbl_blsp_spi_apps_clk_src[] = {
389 F(960000, P_XO, 10, 1, 2),
390 F(4800000, P_XO, 4, 0, 0),
391 F(9600000, P_XO, 2, 0, 0),
392 F(16000000, P_GPLL0, 10, 1, 5),
393 F(19200000, P_XO, 1, 0, 0),
394 F(25000000, P_GPLL0, 16, 1, 2),
395 F(50000000, P_GPLL0, 16, 0, 0),
396 { }
397 };
398
399 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
400 .cmd_rcgr = 0x02024,
401 .mnd_width = 8,
402 .hid_width = 5,
403 .freq_tbl = ftbl_blsp_spi_apps_clk_src,
404 .parent_map = gcc_xo_gpll0_map,
405 .clkr.hw.init = &(struct clk_init_data){
406 .name = "blsp1_qup1_spi_apps_clk_src",
407 .parent_data = gcc_xo_gpll0_data,
408 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
409 .ops = &clk_rcg2_ops,
410 },
411 };
412
413 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
414 .cmd_rcgr = 0x03014,
415 .hid_width = 5,
416 .mnd_width = 8,
417 .freq_tbl = ftbl_blsp_spi_apps_clk_src,
418 .parent_map = gcc_xo_gpll0_map,
419 .clkr.hw.init = &(struct clk_init_data) {
420 .name = "blsp1_qup2_spi_apps_clk_src",
421 .parent_data = gcc_xo_gpll0_data,
422 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
423 .ops = &clk_rcg2_ops,
424 }
425 };
426
427 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
428 .cmd_rcgr = 0x04024,
429 .hid_width = 5,
430 .mnd_width = 8,
431 .freq_tbl = ftbl_blsp_spi_apps_clk_src,
432 .parent_map = gcc_xo_gpll0_map,
433 .clkr.hw.init = &(struct clk_init_data) {
434 .name = "blsp1_qup3_spi_apps_clk_src",
435 .parent_data = gcc_xo_gpll0_data,
436 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
437 .ops = &clk_rcg2_ops,
438 }
439 };
440
441 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
442 .cmd_rcgr = 0x05024,
443 .hid_width = 5,
444 .mnd_width = 8,
445 .freq_tbl = ftbl_blsp_spi_apps_clk_src,
446 .parent_map = gcc_xo_gpll0_map,
447 .clkr.hw.init = &(struct clk_init_data) {
448 .name = "blsp1_qup4_spi_apps_clk_src",
449 .parent_data = gcc_xo_gpll0_data,
450 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
451 .ops = &clk_rcg2_ops,
452 }
453 };
454
455 static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
456 .cmd_rcgr = 0x0c024,
457 .hid_width = 5,
458 .mnd_width = 8,
459 .freq_tbl = ftbl_blsp_spi_apps_clk_src,
460 .parent_map = gcc_xo_gpll0_map,
461 .clkr.hw.init = &(struct clk_init_data) {
462 .name = "blsp2_qup1_spi_apps_clk_src",
463 .parent_data = gcc_xo_gpll0_data,
464 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
465 .ops = &clk_rcg2_ops,
466 }
467 };
468
469 static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
470 .cmd_rcgr = 0x0d014,
471 .hid_width = 5,
472 .mnd_width = 8,
473 .freq_tbl = ftbl_blsp_spi_apps_clk_src,
474 .parent_map = gcc_xo_gpll0_map,
475 .clkr.hw.init = &(struct clk_init_data) {
476 .name = "blsp2_qup2_spi_apps_clk_src",
477 .parent_data = gcc_xo_gpll0_data,
478 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
479 .ops = &clk_rcg2_ops,
480 }
481 };
482
483 static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
484 .cmd_rcgr = 0x0f024,
485 .hid_width = 5,
486 .mnd_width = 8,
487 .freq_tbl = ftbl_blsp_spi_apps_clk_src,
488 .parent_map = gcc_xo_gpll0_map,
489 .clkr.hw.init = &(struct clk_init_data) {
490 .name = "blsp2_qup3_spi_apps_clk_src",
491 .parent_data = gcc_xo_gpll0_data,
492 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
493 .ops = &clk_rcg2_ops,
494 }
495 };
496
497 static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
498 .cmd_rcgr = 0x18024,
499 .mnd_width = 8,
500 .hid_width = 5,
501 .freq_tbl = ftbl_blsp_spi_apps_clk_src,
502 .parent_map = gcc_xo_gpll0_map,
503 .clkr.hw.init = &(struct clk_init_data){
504 .name = "blsp2_qup4_spi_apps_clk_src",
505 .parent_data = gcc_xo_gpll0_data,
506 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
507 .ops = &clk_rcg2_ops,
508 },
509 };
510
511 static const struct freq_tbl ftbl_blsp_uart_apps_clk_src[] = {
512 F(3686400, P_GPLL0, 1, 72, 15625),
513 F(7372800, P_GPLL0, 1, 144, 15625),
514 F(14745600, P_GPLL0, 1, 288, 15625),
515 F(16000000, P_GPLL0, 10, 1, 5),
516 F(19200000, P_XO, 1, 0, 0),
517 F(24000000, P_GPLL0, 1, 3, 100),
518 F(25000000, P_GPLL0, 16, 1, 2),
519 F(32000000, P_GPLL0, 1, 1, 25),
520 F(40000000, P_GPLL0, 1, 1, 20),
521 F(46400000, P_GPLL0, 1, 29, 500),
522 F(48000000, P_GPLL0, 1, 3, 50),
523 F(51200000, P_GPLL0, 1, 8, 125),
524 F(56000000, P_GPLL0, 1, 7, 100),
525 F(58982400, P_GPLL0, 1, 1152, 15625),
526 F(60000000, P_GPLL0, 1, 3, 40),
527 F(64000000, P_GPLL0, 1, 2, 25),
528 { }
529 };
530
531 static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
532 .cmd_rcgr = 0x02044,
533 .hid_width = 5,
534 .mnd_width = 16,
535 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
536 .parent_map = gcc_xo_gpll0_map,
537 .clkr.hw.init = &(struct clk_init_data) {
538 .name = "blsp1_uart1_apps_clk_src",
539 .parent_data = gcc_xo_gpll0_data,
540 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
541 .ops = &clk_rcg2_ops,
542 }
543 };
544
545 static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
546 .cmd_rcgr = 0x03034,
547 .hid_width = 5,
548 .mnd_width = 16,
549 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
550 .parent_map = gcc_xo_gpll0_map,
551 .clkr.hw.init = &(struct clk_init_data) {
552 .name = "blsp1_uart2_apps_clk_src",
553 .parent_data = gcc_xo_gpll0_data,
554 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
555 .ops = &clk_rcg2_ops,
556 }
557 };
558
559 static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
560 .cmd_rcgr = 0x0c044,
561 .hid_width = 5,
562 .mnd_width = 16,
563 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
564 .parent_map = gcc_xo_gpll0_map,
565 .clkr.hw.init = &(struct clk_init_data) {
566 .name = "blsp2_uart1_apps_clk_src",
567 .parent_data = gcc_xo_gpll0_data,
568 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
569 .ops = &clk_rcg2_ops,
570 }
571 };
572
573 static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
574 .cmd_rcgr = 0x0d034,
575 .hid_width = 5,
576 .mnd_width = 16,
577 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
578 .parent_map = gcc_xo_gpll0_map,
579 .clkr.hw.init = &(struct clk_init_data) {
580 .name = "blsp2_uart2_apps_clk_src",
581 .parent_data = gcc_xo_gpll0_data,
582 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
583 .ops = &clk_rcg2_ops,
584 }
585 };
586
587 static const struct parent_map gcc_byte0_map[] = {
588 { P_XO, 0 },
589 { P_DSI0PLL_BYTE, 1 },
590 { P_DSI1PLL_BYTE, 3 },
591 };
592
593 static const struct parent_map gcc_byte1_map[] = {
594 { P_XO, 0 },
595 { P_DSI0PLL_BYTE, 3 },
596 { P_DSI1PLL_BYTE, 1 },
597 };
598
599 static const struct clk_parent_data gcc_byte_data[] = {
600 { .index = DT_XO },
601 { .index = DT_DSI0PLL_BYTE },
602 { .index = DT_DSI1PLL_BYTE },
603 };
604
605 static struct clk_rcg2 byte0_clk_src = {
606 .cmd_rcgr = 0x4d044,
607 .hid_width = 5,
608 .parent_map = gcc_byte0_map,
609 .clkr.hw.init = &(struct clk_init_data) {
610 .name = "byte0_clk_src",
611 .parent_data = gcc_byte_data,
612 .num_parents = ARRAY_SIZE(gcc_byte_data),
613 .ops = &clk_byte2_ops,
614 .flags = CLK_SET_RATE_PARENT,
615 }
616 };
617
618 static struct clk_rcg2 byte1_clk_src = {
619 .cmd_rcgr = 0x4d0b0,
620 .hid_width = 5,
621 .parent_map = gcc_byte1_map,
622 .clkr.hw.init = &(struct clk_init_data){
623 .name = "byte1_clk_src",
624 .parent_data = gcc_byte_data,
625 .num_parents = ARRAY_SIZE(gcc_byte_data),
626 .ops = &clk_byte2_ops,
627 .flags = CLK_SET_RATE_PARENT,
628 },
629 };
630
631 static const struct freq_tbl ftbl_camss_gp_clk_src[] = {
632 F(100000000, P_GPLL0, 8, 0, 0),
633 F(160000000, P_GPLL0, 5, 0, 0),
634 F(200000000, P_GPLL0, 4, 0, 0),
635 { }
636 };
637
638 static struct clk_rcg2 camss_gp0_clk_src = {
639 .cmd_rcgr = 0x54000,
640 .hid_width = 5,
641 .mnd_width = 8,
642 .freq_tbl = ftbl_camss_gp_clk_src,
643 .parent_map = gcc_xo_gpll0_gpll6_sleep_map,
644 .clkr.hw.init = &(struct clk_init_data) {
645 .name = "camss_gp0_clk_src",
646 .parent_data = gcc_xo_gpll0_gpll6_sleep_data,
647 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
648 .ops = &clk_rcg2_ops,
649 }
650 };
651
652 static struct clk_rcg2 camss_gp1_clk_src = {
653 .cmd_rcgr = 0x55000,
654 .hid_width = 5,
655 .mnd_width = 8,
656 .freq_tbl = ftbl_camss_gp_clk_src,
657 .parent_map = gcc_xo_gpll0_gpll6_sleep_map,
658 .clkr.hw.init = &(struct clk_init_data) {
659 .name = "camss_gp1_clk_src",
660 .parent_data = gcc_xo_gpll0_gpll6_sleep_data,
661 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
662 .ops = &clk_rcg2_ops,
663 }
664 };
665
666 static const struct freq_tbl ftbl_camss_top_ahb_clk_src[] = {
667 F(40000000, P_GPLL0, 10, 1, 2),
668 F(61540000, P_GPLL0, 13, 0, 0),
669 F(80000000, P_GPLL0, 10, 0, 0),
670 { }
671 };
672
673 static struct clk_rcg2 camss_top_ahb_clk_src = {
674 .cmd_rcgr = 0x5a000,
675 .hid_width = 5,
676 .freq_tbl = ftbl_camss_top_ahb_clk_src,
677 .parent_map = gcc_xo_gpll0_map,
678 .clkr.hw.init = &(struct clk_init_data) {
679 .name = "camss_top_ahb_clk_src",
680 .parent_data = gcc_xo_gpll0_data,
681 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
682 .ops = &clk_rcg2_ops,
683 }
684 };
685
686 static const struct freq_tbl ftbl_cci_clk_src[] = {
687 F(19200000, P_XO, 1, 0, 0),
688 F(37500000, P_GPLL0, 1, 3, 64),
689 { }
690 };
691
692 static struct clk_rcg2 cci_clk_src = {
693 .cmd_rcgr = 0x51000,
694 .hid_width = 5,
695 .mnd_width = 8,
696 .freq_tbl = ftbl_cci_clk_src,
697 .parent_map = gcc_xo_gpll0_out_aux_map,
698 .clkr.hw.init = &(struct clk_init_data) {
699 .name = "cci_clk_src",
700 .parent_data = gcc_xo_gpll0_data,
701 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
702 .ops = &clk_rcg2_ops,
703 }
704 };
705
706 static const struct parent_map gcc_cpp_map[] = {
707 { P_XO, 0 },
708 { P_GPLL0, 1 },
709 { P_GPLL6, 3 },
710 };
711
712 static const struct clk_parent_data gcc_cpp_data[] = {
713 { .index = DT_XO },
714 { .hw = &gpll0.clkr.hw },
715 { .hw = &gpll6.hw },
716 };
717
718 static const struct freq_tbl ftbl_cpp_clk_src[] = {
719 F(133330000, P_GPLL0, 6, 0, 0),
720 F(160000000, P_GPLL0, 5, 0, 0),
721 F(266670000, P_GPLL0, 3, 0, 0),
722 F(308570000, P_GPLL0, 3.5, 0, 0),
723 F(320000000, P_GPLL0, 2.5, 0, 0),
724 F(360000000, P_GPLL6, 3, 0, 0),
725 { }
726 };
727
728 static const struct freq_tbl ftbl_cpp_clk_src_msm8937[] = {
729 F(133330000, P_GPLL0, 6, 0, 0),
730 F(160000000, P_GPLL0, 5, 0, 0),
731 F(200000000, P_GPLL0, 5, 0, 0),
732 F(266666667, P_GPLL0, 3, 0, 0),
733 F(308570000, P_GPLL6, 3.5, 0, 0),
734 F(320000000, P_GPLL0, 2.5, 0, 0),
735 F(360000000, P_GPLL6, 3, 0, 0),
736 { }
737 };
738
739 static struct clk_rcg2 cpp_clk_src = {
740 .cmd_rcgr = 0x58018,
741 .hid_width = 5,
742 .freq_tbl = ftbl_cpp_clk_src,
743 .parent_map = gcc_cpp_map,
744 .clkr.hw.init = &(struct clk_init_data) {
745 .name = "cpp_clk_src",
746 .parent_data = gcc_cpp_data,
747 .num_parents = ARRAY_SIZE(gcc_cpp_data),
748 .ops = &clk_rcg2_ops,
749 }
750 };
751
752 static struct clk_init_data vcodec0_clk_src_init_msm8937 = {
753 .name = "vcodec0_clk_src",
754 .parent_data = gcc_cpp_data,
755 .num_parents = ARRAY_SIZE(gcc_cpp_data),
756 .ops = &clk_rcg2_ops,
757 };
758
759 static const struct freq_tbl ftbl_crypto_clk_src[] = {
760 F(50000000, P_GPLL0, 16, 0, 0),
761 F(80000000, P_GPLL0, 10, 0, 0),
762 F(100000000, P_GPLL0, 8, 0, 0),
763 F(160000000, P_GPLL0, 5, 0, 0),
764 { }
765 };
766
767 static struct clk_rcg2 crypto_clk_src = {
768 .cmd_rcgr = 0x16004,
769 .hid_width = 5,
770 .freq_tbl = ftbl_crypto_clk_src,
771 .parent_map = gcc_xo_gpll0_map,
772 .clkr.hw.init = &(struct clk_init_data) {
773 .name = "crypto_clk_src",
774 .parent_data = gcc_xo_gpll0_data,
775 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
776 .ops = &clk_rcg2_ops,
777 }
778 };
779
780 static const struct freq_tbl ftbl_csi_clk_src[] = {
781 F(100000000, P_GPLL0, 8, 0, 0),
782 F(160000000, P_GPLL0, 5, 0, 0),
783 F(200000000, P_GPLL0, 4, 0, 0),
784 { }
785 };
786
787 static struct clk_rcg2 csi0_clk_src = {
788 .cmd_rcgr = 0x4e020,
789 .hid_width = 5,
790 .freq_tbl = ftbl_csi_clk_src,
791 .parent_map = gcc_xo_gpll0_map,
792 .clkr.hw.init = &(struct clk_init_data) {
793 .name = "csi0_clk_src",
794 .parent_data = gcc_xo_gpll0_data,
795 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
796 .ops = &clk_rcg2_ops,
797 }
798 };
799
800 static struct clk_rcg2 csi1_clk_src = {
801 .cmd_rcgr = 0x4f020,
802 .hid_width = 5,
803 .freq_tbl = ftbl_csi_clk_src,
804 .parent_map = gcc_xo_gpll0_map,
805 .clkr.hw.init = &(struct clk_init_data) {
806 .name = "csi1_clk_src",
807 .parent_data = gcc_xo_gpll0_data,
808 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
809 .ops = &clk_rcg2_ops,
810 }
811 };
812
813 static struct clk_rcg2 csi2_clk_src = {
814 .cmd_rcgr = 0x3c020,
815 .hid_width = 5,
816 .freq_tbl = ftbl_csi_clk_src,
817 .parent_map = gcc_xo_gpll0_map,
818 .clkr.hw.init = &(struct clk_init_data) {
819 .name = "csi2_clk_src",
820 .parent_data = gcc_xo_gpll0_data,
821 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
822 .ops = &clk_rcg2_ops,
823 }
824 };
825
826 static const struct freq_tbl ftbl_csi_phytimer_clk_src[] = {
827 F(100000000, P_GPLL0, 8, 0, 0),
828 F(160000000, P_GPLL0, 5, 0, 0),
829 F(200000000, P_GPLL0, 4, 0, 0),
830 F(266670000, P_GPLL0, 3, 0, 0),
831 { }
832 };
833
834 static const struct freq_tbl ftbl_csi_phytimer_clk_src_msm8937[] = {
835 F(100000000, P_GPLL0, 8, 0, 0),
836 F(160000000, P_GPLL0, 5, 0, 0),
837 F(200000000, P_GPLL0, 4, 0, 0),
838 { }
839 };
840
841 static struct clk_rcg2 csi0phytimer_clk_src = {
842 .cmd_rcgr = 0x4e000,
843 .hid_width = 5,
844 .freq_tbl = ftbl_csi_phytimer_clk_src,
845 .parent_map = gcc_xo_gpll0_map,
846 .clkr.hw.init = &(struct clk_init_data) {
847 .name = "csi0phytimer_clk_src",
848 .parent_data = gcc_xo_gpll0_data,
849 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
850 .ops = &clk_rcg2_ops,
851 }
852 };
853
854 static struct clk_rcg2 csi1phytimer_clk_src = {
855 .cmd_rcgr = 0x4f000,
856 .hid_width = 5,
857 .freq_tbl = ftbl_csi_phytimer_clk_src,
858 .parent_map = gcc_xo_gpll0_map,
859 .clkr.hw.init = &(struct clk_init_data) {
860 .name = "csi1phytimer_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_esc0_1_clk_src[] = {
868 F(19200000, P_XO, 1, 0, 0),
869 { }
870 };
871
872 static struct clk_rcg2 esc0_clk_src = {
873 .cmd_rcgr = 0x4d05c,
874 .hid_width = 5,
875 .freq_tbl = ftbl_esc0_1_clk_src,
876 .parent_map = gcc_xo_gpll0_out_aux_map,
877 .clkr.hw.init = &(struct clk_init_data) {
878 .name = "esc0_clk_src",
879 .parent_data = gcc_xo_gpll0_data,
880 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
881 .ops = &clk_rcg2_ops,
882 }
883 };
884
885 static struct clk_rcg2 esc1_clk_src = {
886 .cmd_rcgr = 0x4d0a8,
887 .hid_width = 5,
888 .freq_tbl = ftbl_esc0_1_clk_src,
889 .parent_map = gcc_xo_gpll0_out_aux_map,
890 .clkr.hw.init = &(struct clk_init_data){
891 .name = "esc1_clk_src",
892 .parent_data = gcc_xo_gpll0_data,
893 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
894 .ops = &clk_rcg2_ops,
895 },
896 };
897
898 static const struct parent_map gcc_gfx3d_map[] = {
899 { P_XO, 0 },
900 { P_GPLL0, 1 },
901 { P_GPLL3, 2 },
902 { P_GPLL6, 3 },
903 };
904
905 static const struct parent_map gcc_gfx3d_map_qm215[] = {
906 { P_XO, 0 },
907 { P_GPLL0, 5 },
908 { P_GPLL3, 2 },
909 { P_GPLL6, 6 },
910 };
911
912 static const struct clk_parent_data gcc_gfx3d_data[] = {
913 { .index = DT_XO },
914 { .hw = &gpll0.clkr.hw },
915 { .hw = &gpll3.clkr.hw },
916 { .hw = &gpll6.hw },
917 };
918
919 static const struct freq_tbl ftbl_gfx3d_clk_src[] = {
920 F(19200000, P_XO, 1, 0, 0),
921 F(50000000, P_GPLL0, 16, 0, 0),
922 F(80000000, P_GPLL0, 10, 0, 0),
923 F(100000000, P_GPLL0, 8, 0, 0),
924 F(160000000, P_GPLL0, 5, 0, 0),
925 F(200000000, P_GPLL0, 4, 0, 0),
926 F(228570000, P_GPLL0, 3.5, 0, 0),
927 F(240000000, P_GPLL6, 4.5, 0, 0),
928 F(266670000, P_GPLL0, 3, 0, 0),
929 F(270000000, P_GPLL6, 4, 0, 0),
930 F(320000000, P_GPLL0, 2.5, 0, 0),
931 F(400000000, P_GPLL0, 2, 0, 0),
932 F(465000000, P_GPLL3, 1, 0, 0),
933 F(484800000, P_GPLL3, 1, 0, 0),
934 F(500000000, P_GPLL3, 1, 0, 0),
935 F(523200000, P_GPLL3, 1, 0, 0),
936 F(550000000, P_GPLL3, 1, 0, 0),
937 F(598000000, P_GPLL3, 1, 0, 0),
938 { }
939 };
940
941 static const struct freq_tbl ftbl_gfx3d_clk_src_msm8937[] = {
942 F(19200000, P_XO, 1, 0, 0),
943 F(50000000, P_GPLL0, 16, 0, 0),
944 F(80000000, P_GPLL0, 10, 0, 0),
945 F(100000000, P_GPLL0, 8, 0, 0),
946 F(160000000, P_GPLL0, 5, 0, 0),
947 F(200000000, P_GPLL0, 4, 0, 0),
948 F(216000000, P_GPLL6, 5, 0, 0),
949 F(228570000, P_GPLL0, 3.5, 0, 0),
950 F(240000000, P_GPLL6, 4.5, 0, 0),
951 F(266670000, P_GPLL0, 3, 0, 0),
952 F(300000000, P_GPLL3, 1, 0, 0),
953 F(320000000, P_GPLL0, 2.5, 0, 0),
954 F(375000000, P_GPLL3, 1, 0, 0),
955 F(400000000, P_GPLL0, 2, 0, 0),
956 F(450000000, P_GPLL3, 1, 0, 0),
957 { }
958 };
959
960 static struct clk_rcg2 gfx3d_clk_src = {
961 .cmd_rcgr = 0x59000,
962 .hid_width = 5,
963 .freq_tbl = ftbl_gfx3d_clk_src,
964 .parent_map = gcc_gfx3d_map,
965 .clkr.hw.init = &(struct clk_init_data) {
966 .name = "gfx3d_clk_src",
967 .parent_data = gcc_gfx3d_data,
968 .num_parents = ARRAY_SIZE(gcc_gfx3d_data),
969 .ops = &clk_rcg2_ops,
970 .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
971 }
972 };
973
974 static const struct freq_tbl ftbl_gp_clk_src[] = {
975 F(19200000, P_XO, 1, 0, 0),
976 { }
977 };
978
979 static struct clk_rcg2 gp1_clk_src = {
980 .cmd_rcgr = 0x08004,
981 .hid_width = 5,
982 .mnd_width = 8,
983 .freq_tbl = ftbl_gp_clk_src,
984 .parent_map = gcc_xo_gpll0_gpll6_sleep_map,
985 .clkr.hw.init = &(struct clk_init_data) {
986 .name = "gp1_clk_src",
987 .parent_data = gcc_xo_gpll0_gpll6_sleep_data,
988 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
989 .ops = &clk_rcg2_ops,
990 }
991 };
992
993 static struct clk_rcg2 gp2_clk_src = {
994 .cmd_rcgr = 0x09004,
995 .hid_width = 5,
996 .mnd_width = 8,
997 .freq_tbl = ftbl_gp_clk_src,
998 .parent_map = gcc_xo_gpll0_gpll6_sleep_map,
999 .clkr.hw.init = &(struct clk_init_data) {
1000 .name = "gp2_clk_src",
1001 .parent_data = gcc_xo_gpll0_gpll6_sleep_data,
1002 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
1003 .ops = &clk_rcg2_ops,
1004 }
1005 };
1006
1007 static struct clk_rcg2 gp3_clk_src = {
1008 .cmd_rcgr = 0x0a004,
1009 .hid_width = 5,
1010 .mnd_width = 8,
1011 .freq_tbl = ftbl_gp_clk_src,
1012 .parent_map = gcc_xo_gpll0_gpll6_sleep_map,
1013 .clkr.hw.init = &(struct clk_init_data) {
1014 .name = "gp3_clk_src",
1015 .parent_data = gcc_xo_gpll0_gpll6_sleep_data,
1016 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
1017 .ops = &clk_rcg2_ops,
1018 }
1019 };
1020
1021 static const struct freq_tbl ftbl_jpeg0_clk_src[] = {
1022 F(133330000, P_GPLL0, 6, 0, 0),
1023 F(266670000, P_GPLL0, 3, 0, 0),
1024 F(320000000, P_GPLL0, 2.5, 0, 0),
1025 { }
1026 };
1027
1028 static struct clk_rcg2 jpeg0_clk_src = {
1029 .cmd_rcgr = 0x57000,
1030 .hid_width = 5,
1031 .freq_tbl = ftbl_jpeg0_clk_src,
1032 .parent_map = gcc_xo_gpll0_map,
1033 .clkr.hw.init = &(struct clk_init_data) {
1034 .name = "jpeg0_clk_src",
1035 .parent_data = gcc_xo_gpll0_data,
1036 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
1037 .ops = &clk_rcg2_ops,
1038 }
1039 };
1040
1041 static const struct freq_tbl ftbl_mclk_clk_src[] = {
1042 F(19200000, P_XO, 1, 0, 0),
1043 F(24000000, P_GPLL6, 1, 1, 45),
1044 F(66667000, P_GPLL0, 12, 0, 0),
1045 { }
1046 };
1047
1048 static struct clk_rcg2 mclk0_clk_src = {
1049 .cmd_rcgr = 0x52000,
1050 .hid_width = 5,
1051 .mnd_width = 8,
1052 .freq_tbl = ftbl_mclk_clk_src,
1053 .parent_map = gcc_xo_gpll0_gpll6_sleep_map,
1054 .clkr.hw.init = &(struct clk_init_data) {
1055 .name = "mclk0_clk_src",
1056 .parent_data = gcc_xo_gpll0_gpll6_sleep_data,
1057 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
1058 .ops = &clk_rcg2_ops,
1059 }
1060 };
1061
1062 static struct clk_rcg2 mclk1_clk_src = {
1063 .cmd_rcgr = 0x53000,
1064 .hid_width = 5,
1065 .mnd_width = 8,
1066 .freq_tbl = ftbl_mclk_clk_src,
1067 .parent_map = gcc_xo_gpll0_gpll6_sleep_map,
1068 .clkr.hw.init = &(struct clk_init_data) {
1069 .name = "mclk1_clk_src",
1070 .parent_data = gcc_xo_gpll0_gpll6_sleep_data,
1071 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
1072 .ops = &clk_rcg2_ops,
1073 }
1074 };
1075
1076 static struct clk_rcg2 mclk2_clk_src = {
1077 .cmd_rcgr = 0x5c000,
1078 .hid_width = 5,
1079 .mnd_width = 8,
1080 .freq_tbl = ftbl_mclk_clk_src,
1081 .parent_map = gcc_xo_gpll0_gpll6_sleep_map,
1082 .clkr.hw.init = &(struct clk_init_data) {
1083 .name = "mclk2_clk_src",
1084 .parent_data = gcc_xo_gpll0_gpll6_sleep_data,
1085 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
1086 .ops = &clk_rcg2_ops,
1087 }
1088 };
1089
1090 static const struct freq_tbl ftbl_mdp_clk_src[] = {
1091 F(50000000, P_GPLL0, 16, 0, 0),
1092 F(80000000, P_GPLL0, 10, 0, 0),
1093 F(100000000, P_GPLL0, 8, 0, 0),
1094 F(145450000, P_GPLL0, 5.5, 0, 0),
1095 F(160000000, P_GPLL0, 5, 0, 0),
1096 F(177780000, P_GPLL0, 4.5, 0, 0),
1097 F(200000000, P_GPLL0, 4, 0, 0),
1098 F(266670000, P_GPLL0, 3, 0, 0),
1099 F(320000000, P_GPLL0, 2.5, 0, 0),
1100 { }
1101 };
1102
1103 static struct clk_rcg2 mdp_clk_src = {
1104 .cmd_rcgr = 0x4d014,
1105 .hid_width = 5,
1106 .freq_tbl = ftbl_mdp_clk_src,
1107 .parent_map = gcc_xo_gpll0_map,
1108 .clkr.hw.init = &(struct clk_init_data) {
1109 .name = "mdp_clk_src",
1110 .parent_data = gcc_xo_gpll0_data,
1111 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
1112 .ops = &clk_rcg2_ops,
1113 }
1114 };
1115
1116 static const struct parent_map gcc_pclk0_map[] = {
1117 { P_XO, 0 },
1118 { P_DSI0PLL, 1 },
1119 { P_DSI1PLL, 3 },
1120 };
1121
1122 static const struct parent_map gcc_pclk1_map[] = {
1123 { P_XO, 0 },
1124 { P_DSI0PLL, 3 },
1125 { P_DSI1PLL, 1 },
1126 };
1127
1128 static const struct clk_parent_data gcc_pclk_data[] = {
1129 { .index = DT_XO },
1130 { .index = DT_DSI0PLL },
1131 { .index = DT_DSI1PLL },
1132 };
1133
1134 static struct clk_rcg2 pclk0_clk_src = {
1135 .cmd_rcgr = 0x4d000,
1136 .hid_width = 5,
1137 .mnd_width = 8,
1138 .parent_map = gcc_pclk0_map,
1139 .clkr.hw.init = &(struct clk_init_data) {
1140 .name = "pclk0_clk_src",
1141 .parent_data = gcc_pclk_data,
1142 .num_parents = ARRAY_SIZE(gcc_pclk_data),
1143 .ops = &clk_pixel_ops,
1144 .flags = CLK_SET_RATE_PARENT,
1145 }
1146 };
1147
1148 static struct clk_rcg2 pclk1_clk_src = {
1149 .cmd_rcgr = 0x4d0b8,
1150 .hid_width = 5,
1151 .mnd_width = 8,
1152 .parent_map = gcc_pclk1_map,
1153 .clkr.hw.init = &(struct clk_init_data){
1154 .name = "pclk1_clk_src",
1155 .parent_data = gcc_pclk_data,
1156 .num_parents = ARRAY_SIZE(gcc_pclk_data),
1157 .ops = &clk_pixel_ops,
1158 .flags = CLK_SET_RATE_PARENT,
1159 },
1160 };
1161
1162 static const struct freq_tbl ftbl_pdm2_clk_src[] = {
1163 F(64000000, P_GPLL0, 12.5, 0, 0),
1164 { }
1165 };
1166
1167 static struct clk_rcg2 pdm2_clk_src = {
1168 .cmd_rcgr = 0x44010,
1169 .hid_width = 5,
1170 .freq_tbl = ftbl_pdm2_clk_src,
1171 .parent_map = gcc_xo_gpll0_map,
1172 .clkr.hw.init = &(struct clk_init_data) {
1173 .name = "pdm2_clk_src",
1174 .parent_data = gcc_xo_gpll0_data,
1175 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
1176 .ops = &clk_rcg2_ops,
1177 }
1178 };
1179
1180 static const struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = {
1181 F(100000000, P_GPLL0, 8, 0, 0),
1182 F(200000000, P_GPLL0, 4, 0, 0),
1183 { }
1184 };
1185
1186 static struct clk_rcg2 sdcc1_ice_core_clk_src = {
1187 .cmd_rcgr = 0x5d000,
1188 .hid_width = 5,
1189 .freq_tbl = ftbl_sdcc1_ice_core_clk_src,
1190 .parent_map = gcc_xo_gpll0_map,
1191 .clkr.hw.init = &(struct clk_init_data) {
1192 .name = "sdcc1_ice_core_clk_src",
1193 .parent_data = gcc_xo_gpll0_data,
1194 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
1195 .ops = &clk_rcg2_ops,
1196 }
1197 };
1198
1199 static const struct parent_map gcc_sdcc1_apps_map[] = {
1200 { P_XO, 0 },
1201 { P_GPLL0, 1 },
1202 { P_GPLL4, 2 },
1203 };
1204
1205 static const struct clk_parent_data gcc_sdcc1_apss_data[] = {
1206 { .index = DT_XO },
1207 { .hw = &gpll0.clkr.hw },
1208 { .hw = &gpll4.clkr.hw },
1209 };
1210
1211 static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
1212 F(144000, P_XO, 16, 3, 25),
1213 F(400000, P_XO, 12, 1, 4),
1214 F(20000000, P_GPLL0, 10, 1, 4),
1215 F(25000000, P_GPLL0, 16, 1, 2),
1216 F(50000000, P_GPLL0, 16, 0, 0),
1217 F(100000000, P_GPLL0, 8, 0, 0),
1218 F(177770000, P_GPLL0, 4.5, 0, 0),
1219 F(192000000, P_GPLL4, 6, 0, 0),
1220 F(200000000, P_GPLL0, 4, 0, 0),
1221 F(384000000, P_GPLL4, 3, 0, 0),
1222 { }
1223 };
1224
1225 static struct clk_rcg2 sdcc1_apps_clk_src = {
1226 .cmd_rcgr = 0x42004,
1227 .hid_width = 5,
1228 .mnd_width = 8,
1229 .freq_tbl = ftbl_sdcc1_apps_clk_src,
1230 .parent_map = gcc_sdcc1_apps_map,
1231 .clkr.hw.init = &(struct clk_init_data) {
1232 .name = "sdcc1_apps_clk_src",
1233 .parent_data = gcc_sdcc1_apss_data,
1234 .num_parents = ARRAY_SIZE(gcc_sdcc1_apss_data),
1235 .ops = &clk_rcg2_floor_ops,
1236 }
1237 };
1238
1239 static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = {
1240 F(144000, P_XO, 16, 3, 25),
1241 F(400000, P_XO, 12, 1, 4),
1242 F(20000000, P_GPLL0, 10, 1, 4),
1243 F(25000000, P_GPLL0, 16, 1, 2),
1244 F(50000000, P_GPLL0, 16, 0, 0),
1245 F(100000000, P_GPLL0, 8, 0, 0),
1246 F(177770000, P_GPLL0, 4.5, 0, 0),
1247 F(200000000, P_GPLL0, 4, 0, 0),
1248 { }
1249 };
1250
1251 static struct clk_rcg2 sdcc2_apps_clk_src = {
1252 .cmd_rcgr = 0x43004,
1253 .hid_width = 5,
1254 .mnd_width = 8,
1255 .freq_tbl = ftbl_sdcc2_apps_clk_src,
1256 .parent_map = gcc_xo_gpll0_map,
1257 .clkr.hw.init = &(struct clk_init_data) {
1258 .name = "sdcc2_apps_clk_src",
1259 .parent_data = gcc_xo_gpll0_data,
1260 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
1261 .ops = &clk_rcg2_floor_ops,
1262 }
1263 };
1264
1265 static const struct freq_tbl ftbl_usb_hs_system_clk_src[] = {
1266 F(80000000, P_GPLL0, 10, 0, 0),
1267 F(100000000, P_GPLL0, 8, 0, 0),
1268 F(133330000, P_GPLL0, 6, 0, 0),
1269 F(177780000, P_GPLL0, 4.5, 0, 0),
1270 { }
1271 };
1272
1273 static const struct freq_tbl ftbl_usb_hs_system_clk_src_msm8937[] = {
1274 F(57142857, P_GPLL0, 14, 0, 0),
1275 F(100000000, P_GPLL0, 8, 0, 0),
1276 F(133333333, P_GPLL0, 6, 0, 0),
1277 F(177777778, P_GPLL0, 4.5, 0, 0),
1278 { }
1279 };
1280
1281 static struct clk_rcg2 usb_hs_system_clk_src = {
1282 .cmd_rcgr = 0x41010,
1283 .hid_width = 5,
1284 .parent_map = gcc_xo_gpll0_map,
1285 .freq_tbl = ftbl_usb_hs_system_clk_src,
1286 .clkr.hw.init = &(struct clk_init_data){
1287 .name = "usb_hs_system_clk_src",
1288 .parent_data = gcc_xo_gpll0_data,
1289 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
1290 .ops = &clk_rcg2_ops,
1291 },
1292 };
1293
1294 static const struct freq_tbl ftbl_vcodec0_clk_src[] = {
1295 F(133330000, P_GPLL0, 6, 0, 0),
1296 F(180000000, P_GPLL6, 6, 0, 0),
1297 F(228570000, P_GPLL0, 3.5, 0, 0),
1298 F(266670000, P_GPLL0, 3, 0, 0),
1299 F(308570000, P_GPLL6, 3.5, 0, 0),
1300 F(329140000, P_GPLL4, 3.5, 0, 0),
1301 F(360000000, P_GPLL6, 3, 0, 0),
1302 { }
1303 };
1304
1305 static const struct freq_tbl ftbl_vcodec0_clk_src_msm8937[] = {
1306 F(166150000, P_GPLL6, 6.5, 0, 0),
1307 F(240000000, P_GPLL6, 4.5, 0, 0),
1308 F(308571428, P_GPLL6, 3.5, 0, 0),
1309 F(320000000, P_GPLL0, 2.5, 0, 0),
1310 F(360000000, P_GPLL6, 3, 0, 0),
1311 { }
1312 };
1313
1314 static struct clk_rcg2 vcodec0_clk_src = {
1315 .cmd_rcgr = 0x4c000,
1316 .hid_width = 5,
1317 .freq_tbl = ftbl_vcodec0_clk_src,
1318 .parent_map = gcc_xo_gpll0_gpll6_gpll4_map,
1319 .clkr.hw.init = &(struct clk_init_data) {
1320 .name = "vcodec0_clk_src",
1321 .parent_data = gcc_xo_gpll0_gpll6_gpll4_data,
1322 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_gpll4_data),
1323 .ops = &clk_rcg2_ops,
1324 }
1325 };
1326
1327 static const struct freq_tbl ftbl_vfe_clk_src[] = {
1328 F(50000000, P_GPLL0, 16, 0, 0),
1329 F(80000000, P_GPLL0, 10, 0, 0),
1330 F(100000000, P_GPLL0, 8, 0, 0),
1331 F(133330000, P_GPLL0, 6, 0, 0),
1332 F(160000000, P_GPLL0, 5, 0, 0),
1333 F(200000000, P_GPLL0, 4, 0, 0),
1334 F(266670000, P_GPLL0, 3, 0, 0),
1335 F(308570000, P_GPLL6, 3.5, 0, 0),
1336 F(320000000, P_GPLL0, 2.5, 0, 0),
1337 F(329140000, P_GPLL4, 3.5, 0, 0),
1338 F(360000000, P_GPLL6, 3, 0, 0),
1339 { }
1340 };
1341
1342 static const struct freq_tbl ftbl_vfe_clk_src_msm8937[] = {
1343 F(50000000, P_GPLL0, 16, 0, 0),
1344 F(80000000, P_GPLL0, 10, 0, 0),
1345 F(100000000, P_GPLL0, 8, 0, 0),
1346 F(133333333, P_GPLL0, 6, 0, 0),
1347 F(160000000, P_GPLL0, 5, 0, 0),
1348 F(177777778, P_GPLL0, 4.5, 0, 0),
1349 F(200000000, P_GPLL0, 4, 0, 0),
1350 F(266666667, P_GPLL0, 3, 0, 0),
1351 F(308571428, P_GPLL6, 3.5, 0, 0),
1352 F(320000000, P_GPLL0, 2.5, 0, 0),
1353 F(360000000, P_GPLL6, 3, 0, 0),
1354 F(400000000, P_GPLL0, 2, 0, 0),
1355 F(432000000, P_GPLL6, 2.5, 0, 0),
1356 { }
1357 };
1358
1359 static struct clk_rcg2 vfe0_clk_src = {
1360 .cmd_rcgr = 0x58000,
1361 .hid_width = 5,
1362 .freq_tbl = ftbl_vfe_clk_src,
1363 .parent_map = gcc_xo_gpll0_gpll6_gpll4_map,
1364 .clkr.hw.init = &(struct clk_init_data) {
1365 .name = "vfe0_clk_src",
1366 .parent_data = gcc_xo_gpll0_gpll6_gpll4_data,
1367 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_gpll4_data),
1368 .ops = &clk_rcg2_ops,
1369 }
1370 };
1371
1372 static struct clk_rcg2 vfe1_clk_src = {
1373 .cmd_rcgr = 0x58054,
1374 .hid_width = 5,
1375 .freq_tbl = ftbl_vfe_clk_src,
1376 .parent_map = gcc_xo_gpll0_gpll6_gpll4_map,
1377 .clkr.hw.init = &(struct clk_init_data) {
1378 .name = "vfe1_clk_src",
1379 .parent_data = gcc_xo_gpll0_gpll6_gpll4_data,
1380 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_gpll4_data),
1381 .ops = &clk_rcg2_ops,
1382 }
1383 };
1384
1385 static const struct freq_tbl ftbl_vsync_clk_src[] = {
1386 F(19200000, P_XO, 1, 0, 0),
1387 { }
1388 };
1389
1390 static struct clk_rcg2 vsync_clk_src = {
1391 .cmd_rcgr = 0x4d02c,
1392 .hid_width = 5,
1393 .freq_tbl = ftbl_vsync_clk_src,
1394 .parent_map = gcc_xo_gpll0_out_aux_map,
1395 .clkr.hw.init = &(struct clk_init_data) {
1396 .name = "vsync_clk_src",
1397 .parent_data = gcc_xo_gpll0_data,
1398 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
1399 .ops = &clk_rcg2_ops,
1400 }
1401 };
1402
1403 static struct clk_branch gcc_apss_tcu_clk = {
1404 .halt_reg = 0x12018,
1405 .halt_check = BRANCH_HALT_VOTED,
1406 .clkr = {
1407 .enable_reg = 0x4500c,
1408 .enable_mask = BIT(1),
1409 .hw.init = &(struct clk_init_data) {
1410 .name = "gcc_apss_tcu_clk",
1411 .ops = &clk_branch2_ops,
1412 }
1413 }
1414 };
1415
1416 static struct clk_branch gcc_bimc_gfx_clk = {
1417 .halt_reg = 0x59034,
1418 .halt_check = BRANCH_HALT,
1419 .clkr = {
1420 .enable_reg = 0x59034,
1421 .enable_mask = BIT(0),
1422 .hw.init = &(struct clk_init_data) {
1423 .name = "gcc_bimc_gfx_clk",
1424 .ops = &clk_branch2_ops,
1425 }
1426 }
1427 };
1428
1429 static struct clk_branch gcc_bimc_gpu_clk = {
1430 .halt_reg = 0x59030,
1431 .halt_check = BRANCH_HALT,
1432 .clkr = {
1433 .enable_reg = 0x59030,
1434 .enable_mask = BIT(0),
1435 .hw.init = &(struct clk_init_data) {
1436 .name = "gcc_bimc_gpu_clk",
1437 .ops = &clk_branch2_ops,
1438 }
1439 }
1440 };
1441
1442 static struct clk_branch gcc_blsp1_ahb_clk = {
1443 .halt_reg = 0x01008,
1444 .halt_check = BRANCH_HALT_VOTED,
1445 .clkr = {
1446 .enable_reg = 0x45004,
1447 .enable_mask = BIT(10),
1448 .hw.init = &(struct clk_init_data) {
1449 .name = "gcc_blsp1_ahb_clk",
1450 .ops = &clk_branch2_ops,
1451 }
1452 }
1453 };
1454
1455 static struct clk_branch gcc_blsp2_ahb_clk = {
1456 .halt_reg = 0x0b008,
1457 .halt_check = BRANCH_HALT_VOTED,
1458 .clkr = {
1459 .enable_reg = 0x45004,
1460 .enable_mask = BIT(20),
1461 .hw.init = &(struct clk_init_data) {
1462 .name = "gcc_blsp2_ahb_clk",
1463 .ops = &clk_branch2_ops,
1464 }
1465 }
1466 };
1467
1468 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1469 .halt_reg = 0x02008,
1470 .halt_check = BRANCH_HALT,
1471 .clkr = {
1472 .enable_reg = 0x02008,
1473 .enable_mask = BIT(0),
1474 .hw.init = &(struct clk_init_data){
1475 .name = "gcc_blsp1_qup1_i2c_apps_clk",
1476 .parent_hws = (const struct clk_hw*[]){
1477 &blsp1_qup1_i2c_apps_clk_src.clkr.hw,
1478 },
1479 .num_parents = 1,
1480 .ops = &clk_branch2_ops,
1481 .flags = CLK_SET_RATE_PARENT,
1482 },
1483 },
1484 };
1485
1486 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1487 .halt_reg = 0x03010,
1488 .halt_check = BRANCH_HALT,
1489 .clkr = {
1490 .enable_reg = 0x03010,
1491 .enable_mask = BIT(0),
1492 .hw.init = &(struct clk_init_data) {
1493 .name = "gcc_blsp1_qup2_i2c_apps_clk",
1494 .parent_hws = (const struct clk_hw*[]){
1495 &blsp1_qup2_i2c_apps_clk_src.clkr.hw,
1496 },
1497 .num_parents = 1,
1498 .ops = &clk_branch2_ops,
1499 .flags = CLK_SET_RATE_PARENT,
1500 }
1501 }
1502 };
1503
1504 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1505 .halt_reg = 0x04020,
1506 .halt_check = BRANCH_HALT,
1507 .clkr = {
1508 .enable_reg = 0x04020,
1509 .enable_mask = BIT(0),
1510 .hw.init = &(struct clk_init_data) {
1511 .name = "gcc_blsp1_qup3_i2c_apps_clk",
1512 .parent_hws = (const struct clk_hw*[]){
1513 &blsp1_qup3_i2c_apps_clk_src.clkr.hw,
1514 },
1515 .num_parents = 1,
1516 .ops = &clk_branch2_ops,
1517 .flags = CLK_SET_RATE_PARENT,
1518 }
1519 }
1520 };
1521
1522 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1523 .halt_reg = 0x05020,
1524 .halt_check = BRANCH_HALT,
1525 .clkr = {
1526 .enable_reg = 0x05020,
1527 .enable_mask = BIT(0),
1528 .hw.init = &(struct clk_init_data) {
1529 .name = "gcc_blsp1_qup4_i2c_apps_clk",
1530 .parent_hws = (const struct clk_hw*[]){
1531 &blsp1_qup4_i2c_apps_clk_src.clkr.hw,
1532 },
1533 .num_parents = 1,
1534 .ops = &clk_branch2_ops,
1535 .flags = CLK_SET_RATE_PARENT,
1536 }
1537 }
1538 };
1539
1540 static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
1541 .halt_reg = 0x0c008,
1542 .halt_check = BRANCH_HALT,
1543 .clkr = {
1544 .enable_reg = 0x0c008,
1545 .enable_mask = BIT(0),
1546 .hw.init = &(struct clk_init_data) {
1547 .name = "gcc_blsp2_qup1_i2c_apps_clk",
1548 .parent_hws = (const struct clk_hw*[]){
1549 &blsp2_qup1_i2c_apps_clk_src.clkr.hw,
1550 },
1551 .num_parents = 1,
1552 .ops = &clk_branch2_ops,
1553 .flags = CLK_SET_RATE_PARENT,
1554 }
1555 }
1556 };
1557
1558 static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
1559 .halt_reg = 0x0d010,
1560 .halt_check = BRANCH_HALT,
1561 .clkr = {
1562 .enable_reg = 0x0d010,
1563 .enable_mask = BIT(0),
1564 .hw.init = &(struct clk_init_data) {
1565 .name = "gcc_blsp2_qup2_i2c_apps_clk",
1566 .parent_hws = (const struct clk_hw*[]){
1567 &blsp2_qup2_i2c_apps_clk_src.clkr.hw,
1568 },
1569 .num_parents = 1,
1570 .ops = &clk_branch2_ops,
1571 .flags = CLK_SET_RATE_PARENT,
1572 }
1573 }
1574 };
1575
1576 static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
1577 .halt_reg = 0x0f020,
1578 .halt_check = BRANCH_HALT,
1579 .clkr = {
1580 .enable_reg = 0x0f020,
1581 .enable_mask = BIT(0),
1582 .hw.init = &(struct clk_init_data) {
1583 .name = "gcc_blsp2_qup3_i2c_apps_clk",
1584 .parent_hws = (const struct clk_hw*[]){
1585 &blsp2_qup3_i2c_apps_clk_src.clkr.hw,
1586 },
1587 .num_parents = 1,
1588 .ops = &clk_branch2_ops,
1589 .flags = CLK_SET_RATE_PARENT,
1590 }
1591 }
1592 };
1593
1594 static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
1595 .halt_reg = 0x18020,
1596 .halt_check = BRANCH_HALT,
1597 .clkr = {
1598 .enable_reg = 0x18020,
1599 .enable_mask = BIT(0),
1600 .hw.init = &(struct clk_init_data){
1601 .name = "gcc_blsp2_qup4_i2c_apps_clk",
1602 .parent_hws = (const struct clk_hw*[]){
1603 &blsp2_qup4_i2c_apps_clk_src.clkr.hw,
1604 },
1605 .num_parents = 1,
1606 .ops = &clk_branch2_ops,
1607 .flags = CLK_SET_RATE_PARENT,
1608 },
1609 },
1610 };
1611
1612 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1613 .halt_reg = 0x02004,
1614 .halt_check = BRANCH_HALT,
1615 .clkr = {
1616 .enable_reg = 0x02004,
1617 .enable_mask = BIT(0),
1618 .hw.init = &(struct clk_init_data){
1619 .name = "gcc_blsp1_qup1_spi_apps_clk",
1620 .parent_hws = (const struct clk_hw*[]){
1621 &blsp1_qup1_spi_apps_clk_src.clkr.hw,
1622 },
1623 .num_parents = 1,
1624 .ops = &clk_branch2_ops,
1625 .flags = CLK_SET_RATE_PARENT,
1626 },
1627 },
1628 };
1629
1630 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1631 .halt_reg = 0x0300c,
1632 .halt_check = BRANCH_HALT,
1633 .clkr = {
1634 .enable_reg = 0x0300c,
1635 .enable_mask = BIT(0),
1636 .hw.init = &(struct clk_init_data) {
1637 .name = "gcc_blsp1_qup2_spi_apps_clk",
1638 .parent_hws = (const struct clk_hw*[]){
1639 &blsp1_qup2_spi_apps_clk_src.clkr.hw,
1640 },
1641 .num_parents = 1,
1642 .ops = &clk_branch2_ops,
1643 .flags = CLK_SET_RATE_PARENT,
1644 }
1645 }
1646 };
1647
1648 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1649 .halt_reg = 0x0401c,
1650 .halt_check = BRANCH_HALT,
1651 .clkr = {
1652 .enable_reg = 0x0401c,
1653 .enable_mask = BIT(0),
1654 .hw.init = &(struct clk_init_data) {
1655 .name = "gcc_blsp1_qup3_spi_apps_clk",
1656 .parent_hws = (const struct clk_hw*[]){
1657 &blsp1_qup3_spi_apps_clk_src.clkr.hw,
1658 },
1659 .num_parents = 1,
1660 .ops = &clk_branch2_ops,
1661 .flags = CLK_SET_RATE_PARENT,
1662 }
1663 }
1664 };
1665
1666 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1667 .halt_reg = 0x0501c,
1668 .halt_check = BRANCH_HALT,
1669 .clkr = {
1670 .enable_reg = 0x0501c,
1671 .enable_mask = BIT(0),
1672 .hw.init = &(struct clk_init_data) {
1673 .name = "gcc_blsp1_qup4_spi_apps_clk",
1674 .parent_hws = (const struct clk_hw*[]){
1675 &blsp1_qup4_spi_apps_clk_src.clkr.hw,
1676 },
1677 .num_parents = 1,
1678 .ops = &clk_branch2_ops,
1679 .flags = CLK_SET_RATE_PARENT,
1680 }
1681 }
1682 };
1683
1684 static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
1685 .halt_reg = 0x0c004,
1686 .halt_check = BRANCH_HALT,
1687 .clkr = {
1688 .enable_reg = 0x0c004,
1689 .enable_mask = BIT(0),
1690 .hw.init = &(struct clk_init_data) {
1691 .name = "gcc_blsp2_qup1_spi_apps_clk",
1692 .parent_hws = (const struct clk_hw*[]){
1693 &blsp2_qup1_spi_apps_clk_src.clkr.hw,
1694 },
1695 .num_parents = 1,
1696 .ops = &clk_branch2_ops,
1697 .flags = CLK_SET_RATE_PARENT,
1698 }
1699 }
1700 };
1701
1702 static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
1703 .halt_reg = 0x0d00c,
1704 .halt_check = BRANCH_HALT,
1705 .clkr = {
1706 .enable_reg = 0x0d00c,
1707 .enable_mask = BIT(0),
1708 .hw.init = &(struct clk_init_data) {
1709 .name = "gcc_blsp2_qup2_spi_apps_clk",
1710 .parent_hws = (const struct clk_hw*[]){
1711 &blsp2_qup2_spi_apps_clk_src.clkr.hw,
1712 },
1713 .num_parents = 1,
1714 .ops = &clk_branch2_ops,
1715 .flags = CLK_SET_RATE_PARENT,
1716 }
1717 }
1718 };
1719
1720 static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
1721 .halt_reg = 0x0f01c,
1722 .halt_check = BRANCH_HALT,
1723 .clkr = {
1724 .enable_reg = 0x0f01c,
1725 .enable_mask = BIT(0),
1726 .hw.init = &(struct clk_init_data) {
1727 .name = "gcc_blsp2_qup3_spi_apps_clk",
1728 .parent_hws = (const struct clk_hw*[]){
1729 &blsp2_qup3_spi_apps_clk_src.clkr.hw,
1730 },
1731 .num_parents = 1,
1732 .ops = &clk_branch2_ops,
1733 .flags = CLK_SET_RATE_PARENT,
1734 }
1735 }
1736 };
1737
1738 static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
1739 .halt_reg = 0x1801c,
1740 .halt_check = BRANCH_HALT,
1741 .clkr = {
1742 .enable_reg = 0x1801c,
1743 .enable_mask = BIT(0),
1744 .hw.init = &(struct clk_init_data){
1745 .name = "gcc_blsp2_qup4_spi_apps_clk",
1746 .parent_hws = (const struct clk_hw*[]){
1747 &blsp2_qup4_spi_apps_clk_src.clkr.hw,
1748 },
1749 .num_parents = 1,
1750 .ops = &clk_branch2_ops,
1751 .flags = CLK_SET_RATE_PARENT,
1752 },
1753 },
1754 };
1755
1756 static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1757 .halt_reg = 0x0203c,
1758 .halt_check = BRANCH_HALT,
1759 .clkr = {
1760 .enable_reg = 0x0203c,
1761 .enable_mask = BIT(0),
1762 .hw.init = &(struct clk_init_data) {
1763 .name = "gcc_blsp1_uart1_apps_clk",
1764 .parent_hws = (const struct clk_hw*[]){
1765 &blsp1_uart1_apps_clk_src.clkr.hw,
1766 },
1767 .num_parents = 1,
1768 .ops = &clk_branch2_ops,
1769 .flags = CLK_SET_RATE_PARENT,
1770 }
1771 }
1772 };
1773
1774 static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1775 .halt_reg = 0x0302c,
1776 .halt_check = BRANCH_HALT,
1777 .clkr = {
1778 .enable_reg = 0x0302c,
1779 .enable_mask = BIT(0),
1780 .hw.init = &(struct clk_init_data) {
1781 .name = "gcc_blsp1_uart2_apps_clk",
1782 .parent_hws = (const struct clk_hw*[]){
1783 &blsp1_uart2_apps_clk_src.clkr.hw,
1784 },
1785 .num_parents = 1,
1786 .ops = &clk_branch2_ops,
1787 .flags = CLK_SET_RATE_PARENT,
1788 }
1789 }
1790 };
1791
1792 static struct clk_branch gcc_blsp2_uart1_apps_clk = {
1793 .halt_reg = 0x0c03c,
1794 .halt_check = BRANCH_HALT,
1795 .clkr = {
1796 .enable_reg = 0x0c03c,
1797 .enable_mask = BIT(0),
1798 .hw.init = &(struct clk_init_data) {
1799 .name = "gcc_blsp2_uart1_apps_clk",
1800 .parent_hws = (const struct clk_hw*[]){
1801 &blsp2_uart1_apps_clk_src.clkr.hw,
1802 },
1803 .num_parents = 1,
1804 .ops = &clk_branch2_ops,
1805 .flags = CLK_SET_RATE_PARENT,
1806 }
1807 }
1808 };
1809
1810 static struct clk_branch gcc_blsp2_uart2_apps_clk = {
1811 .halt_reg = 0x0d02c,
1812 .halt_check = BRANCH_HALT,
1813 .clkr = {
1814 .enable_reg = 0x0d02c,
1815 .enable_mask = BIT(0),
1816 .hw.init = &(struct clk_init_data) {
1817 .name = "gcc_blsp2_uart2_apps_clk",
1818 .parent_hws = (const struct clk_hw*[]){
1819 &blsp2_uart2_apps_clk_src.clkr.hw,
1820 },
1821 .num_parents = 1,
1822 .ops = &clk_branch2_ops,
1823 .flags = CLK_SET_RATE_PARENT,
1824 }
1825 }
1826 };
1827
1828 static struct clk_branch gcc_boot_rom_ahb_clk = {
1829 .halt_reg = 0x1300c,
1830 .halt_check = BRANCH_HALT_VOTED,
1831 .clkr = {
1832 .enable_reg = 0x45004,
1833 .enable_mask = BIT(7),
1834 .hw.init = &(struct clk_init_data) {
1835 .name = "gcc_boot_rom_ahb_clk",
1836 .ops = &clk_branch2_ops,
1837 }
1838 }
1839 };
1840
1841 static struct clk_branch gcc_camss_ahb_clk = {
1842 .halt_reg = 0x56004,
1843 .halt_check = BRANCH_HALT,
1844 .clkr = {
1845 .enable_reg = 0x56004,
1846 .enable_mask = BIT(0),
1847 .hw.init = &(struct clk_init_data) {
1848 .name = "gcc_camss_ahb_clk",
1849 .ops = &clk_branch2_ops,
1850 }
1851 }
1852 };
1853
1854 static struct clk_branch gcc_camss_cci_ahb_clk = {
1855 .halt_reg = 0x5101c,
1856 .halt_check = BRANCH_HALT,
1857 .clkr = {
1858 .enable_reg = 0x5101c,
1859 .enable_mask = BIT(0),
1860 .hw.init = &(struct clk_init_data) {
1861 .name = "gcc_camss_cci_ahb_clk",
1862 .parent_hws = (const struct clk_hw*[]){
1863 &camss_top_ahb_clk_src.clkr.hw,
1864 },
1865 .num_parents = 1,
1866 .ops = &clk_branch2_ops,
1867 .flags = CLK_SET_RATE_PARENT,
1868 }
1869 }
1870 };
1871
1872 static struct clk_branch gcc_camss_cci_clk = {
1873 .halt_reg = 0x51018,
1874 .halt_check = BRANCH_HALT,
1875 .clkr = {
1876 .enable_reg = 0x51018,
1877 .enable_mask = BIT(0),
1878 .hw.init = &(struct clk_init_data) {
1879 .name = "gcc_camss_cci_clk",
1880 .parent_hws = (const struct clk_hw*[]){
1881 &cci_clk_src.clkr.hw,
1882 },
1883 .num_parents = 1,
1884 .ops = &clk_branch2_ops,
1885 .flags = CLK_SET_RATE_PARENT,
1886 }
1887 }
1888 };
1889
1890 static struct clk_branch gcc_camss_cpp_ahb_clk = {
1891 .halt_reg = 0x58040,
1892 .halt_check = BRANCH_HALT,
1893 .clkr = {
1894 .enable_reg = 0x58040,
1895 .enable_mask = BIT(0),
1896 .hw.init = &(struct clk_init_data) {
1897 .name = "gcc_camss_cpp_ahb_clk",
1898 .parent_hws = (const struct clk_hw*[]){
1899 &camss_top_ahb_clk_src.clkr.hw,
1900 },
1901 .num_parents = 1,
1902 .ops = &clk_branch2_ops,
1903 .flags = CLK_SET_RATE_PARENT,
1904 }
1905 }
1906 };
1907
1908 static struct clk_branch gcc_camss_cpp_clk = {
1909 .halt_reg = 0x5803c,
1910 .halt_check = BRANCH_HALT,
1911 .clkr = {
1912 .enable_reg = 0x5803c,
1913 .enable_mask = BIT(0),
1914 .hw.init = &(struct clk_init_data) {
1915 .name = "gcc_camss_cpp_clk",
1916 .parent_hws = (const struct clk_hw*[]){
1917 &cpp_clk_src.clkr.hw,
1918 },
1919 .num_parents = 1,
1920 .ops = &clk_branch2_ops,
1921 .flags = CLK_SET_RATE_PARENT,
1922 }
1923 }
1924 };
1925
1926 static struct clk_branch gcc_camss_csi0_ahb_clk = {
1927 .halt_reg = 0x4e040,
1928 .halt_check = BRANCH_HALT,
1929 .clkr = {
1930 .enable_reg = 0x4e040,
1931 .enable_mask = BIT(0),
1932 .hw.init = &(struct clk_init_data) {
1933 .name = "gcc_camss_csi0_ahb_clk",
1934 .parent_hws = (const struct clk_hw*[]){
1935 &camss_top_ahb_clk_src.clkr.hw,
1936 },
1937 .num_parents = 1,
1938 .ops = &clk_branch2_ops,
1939 .flags = CLK_SET_RATE_PARENT,
1940 }
1941 }
1942 };
1943
1944 static struct clk_branch gcc_camss_csi1_ahb_clk = {
1945 .halt_reg = 0x4f040,
1946 .halt_check = BRANCH_HALT,
1947 .clkr = {
1948 .enable_reg = 0x4f040,
1949 .enable_mask = BIT(0),
1950 .hw.init = &(struct clk_init_data) {
1951 .name = "gcc_camss_csi1_ahb_clk",
1952 .parent_hws = (const struct clk_hw*[]){
1953 &camss_top_ahb_clk_src.clkr.hw,
1954 },
1955 .num_parents = 1,
1956 .ops = &clk_branch2_ops,
1957 .flags = CLK_SET_RATE_PARENT,
1958 }
1959 }
1960 };
1961
1962 static struct clk_branch gcc_camss_csi2_ahb_clk = {
1963 .halt_reg = 0x3c040,
1964 .halt_check = BRANCH_HALT,
1965 .clkr = {
1966 .enable_reg = 0x3c040,
1967 .enable_mask = BIT(0),
1968 .hw.init = &(struct clk_init_data) {
1969 .name = "gcc_camss_csi2_ahb_clk",
1970 .parent_hws = (const struct clk_hw*[]){
1971 &camss_top_ahb_clk_src.clkr.hw,
1972 },
1973 .num_parents = 1,
1974 .ops = &clk_branch2_ops,
1975 .flags = CLK_SET_RATE_PARENT,
1976 }
1977 }
1978 };
1979
1980 static struct clk_branch gcc_camss_csi0_clk = {
1981 .halt_reg = 0x4e03c,
1982 .halt_check = BRANCH_HALT,
1983 .clkr = {
1984 .enable_reg = 0x4e03c,
1985 .enable_mask = BIT(0),
1986 .hw.init = &(struct clk_init_data) {
1987 .name = "gcc_camss_csi0_clk",
1988 .parent_hws = (const struct clk_hw*[]){
1989 &csi0_clk_src.clkr.hw,
1990 },
1991 .num_parents = 1,
1992 .ops = &clk_branch2_ops,
1993 .flags = CLK_SET_RATE_PARENT,
1994 }
1995 }
1996 };
1997
1998 static struct clk_branch gcc_camss_csi1_clk = {
1999 .halt_reg = 0x4f03c,
2000 .halt_check = BRANCH_HALT,
2001 .clkr = {
2002 .enable_reg = 0x4f03c,
2003 .enable_mask = BIT(0),
2004 .hw.init = &(struct clk_init_data) {
2005 .name = "gcc_camss_csi1_clk",
2006 .parent_hws = (const struct clk_hw*[]){
2007 &csi1_clk_src.clkr.hw,
2008 },
2009 .num_parents = 1,
2010 .ops = &clk_branch2_ops,
2011 .flags = CLK_SET_RATE_PARENT,
2012 }
2013 }
2014 };
2015
2016 static struct clk_branch gcc_camss_csi2_clk = {
2017 .halt_reg = 0x3c03c,
2018 .halt_check = BRANCH_HALT,
2019 .clkr = {
2020 .enable_reg = 0x3c03c,
2021 .enable_mask = BIT(0),
2022 .hw.init = &(struct clk_init_data) {
2023 .name = "gcc_camss_csi2_clk",
2024 .parent_hws = (const struct clk_hw*[]){
2025 &csi2_clk_src.clkr.hw,
2026 },
2027 .num_parents = 1,
2028 .ops = &clk_branch2_ops,
2029 .flags = CLK_SET_RATE_PARENT,
2030 }
2031 }
2032 };
2033
2034 static struct clk_branch gcc_camss_csi0phy_clk = {
2035 .halt_reg = 0x4e048,
2036 .halt_check = BRANCH_HALT,
2037 .clkr = {
2038 .enable_reg = 0x4e048,
2039 .enable_mask = BIT(0),
2040 .hw.init = &(struct clk_init_data) {
2041 .name = "gcc_camss_csi0phy_clk",
2042 .parent_hws = (const struct clk_hw*[]){
2043 &csi0_clk_src.clkr.hw,
2044 },
2045 .num_parents = 1,
2046 .ops = &clk_branch2_ops,
2047 .flags = CLK_SET_RATE_PARENT,
2048 }
2049 }
2050 };
2051
2052 static struct clk_branch gcc_camss_csi1phy_clk = {
2053 .halt_reg = 0x4f048,
2054 .halt_check = BRANCH_HALT,
2055 .clkr = {
2056 .enable_reg = 0x4f048,
2057 .enable_mask = BIT(0),
2058 .hw.init = &(struct clk_init_data) {
2059 .name = "gcc_camss_csi1phy_clk",
2060 .parent_hws = (const struct clk_hw*[]){
2061 &csi1_clk_src.clkr.hw,
2062 },
2063 .num_parents = 1,
2064 .ops = &clk_branch2_ops,
2065 .flags = CLK_SET_RATE_PARENT,
2066 }
2067 }
2068 };
2069
2070 static struct clk_branch gcc_camss_csi2phy_clk = {
2071 .halt_reg = 0x3c048,
2072 .halt_check = BRANCH_HALT,
2073 .clkr = {
2074 .enable_reg = 0x3c048,
2075 .enable_mask = BIT(0),
2076 .hw.init = &(struct clk_init_data) {
2077 .name = "gcc_camss_csi2phy_clk",
2078 .parent_hws = (const struct clk_hw*[]){
2079 &csi2_clk_src.clkr.hw,
2080 },
2081 .num_parents = 1,
2082 .ops = &clk_branch2_ops,
2083 .flags = CLK_SET_RATE_PARENT,
2084 }
2085 }
2086 };
2087
2088 static struct clk_branch gcc_camss_csi0phytimer_clk = {
2089 .halt_reg = 0x4e01c,
2090 .halt_check = BRANCH_HALT,
2091 .clkr = {
2092 .enable_reg = 0x4e01c,
2093 .enable_mask = BIT(0),
2094 .hw.init = &(struct clk_init_data) {
2095 .name = "gcc_camss_csi0phytimer_clk",
2096 .parent_hws = (const struct clk_hw*[]){
2097 &csi0phytimer_clk_src.clkr.hw,
2098 },
2099 .num_parents = 1,
2100 .ops = &clk_branch2_ops,
2101 .flags = CLK_SET_RATE_PARENT,
2102 }
2103 }
2104 };
2105
2106 static struct clk_branch gcc_camss_csi1phytimer_clk = {
2107 .halt_reg = 0x4f01c,
2108 .halt_check = BRANCH_HALT,
2109 .clkr = {
2110 .enable_reg = 0x4f01c,
2111 .enable_mask = BIT(0),
2112 .hw.init = &(struct clk_init_data) {
2113 .name = "gcc_camss_csi1phytimer_clk",
2114 .parent_hws = (const struct clk_hw*[]){
2115 &csi1phytimer_clk_src.clkr.hw,
2116 },
2117 .num_parents = 1,
2118 .ops = &clk_branch2_ops,
2119 .flags = CLK_SET_RATE_PARENT,
2120 }
2121 }
2122 };
2123
2124 static struct clk_branch gcc_camss_csi0pix_clk = {
2125 .halt_reg = 0x4e058,
2126 .halt_check = BRANCH_HALT,
2127 .clkr = {
2128 .enable_reg = 0x4e058,
2129 .enable_mask = BIT(0),
2130 .hw.init = &(struct clk_init_data) {
2131 .name = "gcc_camss_csi0pix_clk",
2132 .parent_hws = (const struct clk_hw*[]){
2133 &csi0_clk_src.clkr.hw,
2134 },
2135 .num_parents = 1,
2136 .ops = &clk_branch2_ops,
2137 .flags = CLK_SET_RATE_PARENT,
2138 }
2139 }
2140 };
2141
2142 static struct clk_branch gcc_camss_csi1pix_clk = {
2143 .halt_reg = 0x4f058,
2144 .halt_check = BRANCH_HALT,
2145 .clkr = {
2146 .enable_reg = 0x4f058,
2147 .enable_mask = BIT(0),
2148 .hw.init = &(struct clk_init_data) {
2149 .name = "gcc_camss_csi1pix_clk",
2150 .parent_hws = (const struct clk_hw*[]){
2151 &csi1_clk_src.clkr.hw,
2152 },
2153 .num_parents = 1,
2154 .ops = &clk_branch2_ops,
2155 .flags = CLK_SET_RATE_PARENT,
2156 }
2157 }
2158 };
2159
2160 static struct clk_branch gcc_camss_csi2pix_clk = {
2161 .halt_reg = 0x3c058,
2162 .halt_check = BRANCH_HALT,
2163 .clkr = {
2164 .enable_reg = 0x3c058,
2165 .enable_mask = BIT(0),
2166 .hw.init = &(struct clk_init_data) {
2167 .name = "gcc_camss_csi2pix_clk",
2168 .parent_hws = (const struct clk_hw*[]){
2169 &csi2_clk_src.clkr.hw,
2170 },
2171 .num_parents = 1,
2172 .ops = &clk_branch2_ops,
2173 .flags = CLK_SET_RATE_PARENT,
2174 }
2175 }
2176 };
2177
2178 static struct clk_branch gcc_camss_csi0rdi_clk = {
2179 .halt_reg = 0x4e050,
2180 .halt_check = BRANCH_HALT,
2181 .clkr = {
2182 .enable_reg = 0x4e050,
2183 .enable_mask = BIT(0),
2184 .hw.init = &(struct clk_init_data) {
2185 .name = "gcc_camss_csi0rdi_clk",
2186 .parent_hws = (const struct clk_hw*[]){
2187 &csi0_clk_src.clkr.hw,
2188 },
2189 .num_parents = 1,
2190 .ops = &clk_branch2_ops,
2191 .flags = CLK_SET_RATE_PARENT,
2192 }
2193 }
2194 };
2195
2196 static struct clk_branch gcc_camss_csi1rdi_clk = {
2197 .halt_reg = 0x4f050,
2198 .halt_check = BRANCH_HALT,
2199 .clkr = {
2200 .enable_reg = 0x4f050,
2201 .enable_mask = BIT(0),
2202 .hw.init = &(struct clk_init_data) {
2203 .name = "gcc_camss_csi1rdi_clk",
2204 .parent_hws = (const struct clk_hw*[]){
2205 &csi1_clk_src.clkr.hw,
2206 },
2207 .num_parents = 1,
2208 .ops = &clk_branch2_ops,
2209 .flags = CLK_SET_RATE_PARENT,
2210 }
2211 }
2212 };
2213
2214 static struct clk_branch gcc_camss_csi2rdi_clk = {
2215 .halt_reg = 0x3c050,
2216 .halt_check = BRANCH_HALT,
2217 .clkr = {
2218 .enable_reg = 0x3c050,
2219 .enable_mask = BIT(0),
2220 .hw.init = &(struct clk_init_data) {
2221 .name = "gcc_camss_csi2rdi_clk",
2222 .parent_hws = (const struct clk_hw*[]){
2223 &csi2_clk_src.clkr.hw,
2224 },
2225 .num_parents = 1,
2226 .ops = &clk_branch2_ops,
2227 .flags = CLK_SET_RATE_PARENT,
2228 }
2229 }
2230 };
2231
2232 static struct clk_branch gcc_camss_csi_vfe0_clk = {
2233 .halt_reg = 0x58050,
2234 .halt_check = BRANCH_HALT,
2235 .clkr = {
2236 .enable_reg = 0x58050,
2237 .enable_mask = BIT(0),
2238 .hw.init = &(struct clk_init_data) {
2239 .name = "gcc_camss_csi_vfe0_clk",
2240 .parent_hws = (const struct clk_hw*[]){
2241 &vfe0_clk_src.clkr.hw,
2242 },
2243 .num_parents = 1,
2244 .ops = &clk_branch2_ops,
2245 .flags = CLK_SET_RATE_PARENT,
2246 }
2247 }
2248 };
2249
2250 static struct clk_branch gcc_camss_csi_vfe1_clk = {
2251 .halt_reg = 0x58074,
2252 .halt_check = BRANCH_HALT,
2253 .clkr = {
2254 .enable_reg = 0x58074,
2255 .enable_mask = BIT(0),
2256 .hw.init = &(struct clk_init_data) {
2257 .name = "gcc_camss_csi_vfe1_clk",
2258 .parent_hws = (const struct clk_hw*[]){
2259 &vfe1_clk_src.clkr.hw,
2260 },
2261 .num_parents = 1,
2262 .ops = &clk_branch2_ops,
2263 .flags = CLK_SET_RATE_PARENT,
2264 }
2265 }
2266 };
2267
2268 static struct clk_branch gcc_camss_gp0_clk = {
2269 .halt_reg = 0x54018,
2270 .halt_check = BRANCH_HALT,
2271 .clkr = {
2272 .enable_reg = 0x54018,
2273 .enable_mask = BIT(0),
2274 .hw.init = &(struct clk_init_data) {
2275 .name = "gcc_camss_gp0_clk",
2276 .parent_hws = (const struct clk_hw*[]){
2277 &camss_gp0_clk_src.clkr.hw,
2278 },
2279 .num_parents = 1,
2280 .ops = &clk_branch2_ops,
2281 .flags = CLK_SET_RATE_PARENT,
2282 }
2283 }
2284 };
2285
2286 static struct clk_branch gcc_camss_gp1_clk = {
2287 .halt_reg = 0x55018,
2288 .halt_check = BRANCH_HALT,
2289 .clkr = {
2290 .enable_reg = 0x55018,
2291 .enable_mask = BIT(0),
2292 .hw.init = &(struct clk_init_data) {
2293 .name = "gcc_camss_gp1_clk",
2294 .parent_hws = (const struct clk_hw*[]){
2295 &camss_gp1_clk_src.clkr.hw,
2296 },
2297 .num_parents = 1,
2298 .ops = &clk_branch2_ops,
2299 .flags = CLK_SET_RATE_PARENT,
2300 }
2301 }
2302 };
2303
2304 static struct clk_branch gcc_camss_ispif_ahb_clk = {
2305 .halt_reg = 0x50004,
2306 .halt_check = BRANCH_HALT,
2307 .clkr = {
2308 .enable_reg = 0x50004,
2309 .enable_mask = BIT(0),
2310 .hw.init = &(struct clk_init_data) {
2311 .name = "gcc_camss_ispif_ahb_clk",
2312 .parent_hws = (const struct clk_hw*[]){
2313 &camss_top_ahb_clk_src.clkr.hw,
2314 },
2315 .num_parents = 1,
2316 .ops = &clk_branch2_ops,
2317 .flags = CLK_SET_RATE_PARENT,
2318 }
2319 }
2320 };
2321
2322 static struct clk_branch gcc_camss_jpeg0_clk = {
2323 .halt_reg = 0x57020,
2324 .halt_check = BRANCH_HALT,
2325 .clkr = {
2326 .enable_reg = 0x57020,
2327 .enable_mask = BIT(0),
2328 .hw.init = &(struct clk_init_data) {
2329 .name = "gcc_camss_jpeg0_clk",
2330 .parent_hws = (const struct clk_hw*[]){
2331 &jpeg0_clk_src.clkr.hw,
2332 },
2333 .num_parents = 1,
2334 .ops = &clk_branch2_ops,
2335 .flags = CLK_SET_RATE_PARENT,
2336 }
2337 }
2338 };
2339
2340 static struct clk_branch gcc_camss_jpeg_ahb_clk = {
2341 .halt_reg = 0x57024,
2342 .halt_check = BRANCH_HALT,
2343 .clkr = {
2344 .enable_reg = 0x57024,
2345 .enable_mask = BIT(0),
2346 .hw.init = &(struct clk_init_data) {
2347 .name = "gcc_camss_jpeg_ahb_clk",
2348 .parent_hws = (const struct clk_hw*[]){
2349 &camss_top_ahb_clk_src.clkr.hw,
2350 },
2351 .num_parents = 1,
2352 .ops = &clk_branch2_ops,
2353 .flags = CLK_SET_RATE_PARENT,
2354 }
2355 }
2356 };
2357
2358 static struct clk_branch gcc_camss_jpeg_axi_clk = {
2359 .halt_reg = 0x57028,
2360 .halt_check = BRANCH_HALT,
2361 .clkr = {
2362 .enable_reg = 0x57028,
2363 .enable_mask = BIT(0),
2364 .hw.init = &(struct clk_init_data) {
2365 .name = "gcc_camss_jpeg_axi_clk",
2366 .ops = &clk_branch2_ops,
2367 }
2368 }
2369 };
2370
2371 static struct clk_branch gcc_camss_mclk0_clk = {
2372 .halt_reg = 0x52018,
2373 .halt_check = BRANCH_HALT,
2374 .clkr = {
2375 .enable_reg = 0x52018,
2376 .enable_mask = BIT(0),
2377 .hw.init = &(struct clk_init_data) {
2378 .name = "gcc_camss_mclk0_clk",
2379 .parent_hws = (const struct clk_hw*[]){
2380 &mclk0_clk_src.clkr.hw,
2381 },
2382 .num_parents = 1,
2383 .ops = &clk_branch2_ops,
2384 .flags = CLK_SET_RATE_PARENT,
2385 }
2386 }
2387 };
2388
2389 static struct clk_branch gcc_camss_mclk1_clk = {
2390 .halt_reg = 0x53018,
2391 .halt_check = BRANCH_HALT,
2392 .clkr = {
2393 .enable_reg = 0x53018,
2394 .enable_mask = BIT(0),
2395 .hw.init = &(struct clk_init_data) {
2396 .name = "gcc_camss_mclk1_clk",
2397 .parent_hws = (const struct clk_hw*[]){
2398 &mclk1_clk_src.clkr.hw,
2399 },
2400 .num_parents = 1,
2401 .ops = &clk_branch2_ops,
2402 .flags = CLK_SET_RATE_PARENT,
2403 }
2404 }
2405 };
2406
2407 static struct clk_branch gcc_camss_mclk2_clk = {
2408 .halt_reg = 0x5c018,
2409 .halt_check = BRANCH_HALT,
2410 .clkr = {
2411 .enable_reg = 0x5c018,
2412 .enable_mask = BIT(0),
2413 .hw.init = &(struct clk_init_data) {
2414 .name = "gcc_camss_mclk2_clk",
2415 .parent_hws = (const struct clk_hw*[]){
2416 &mclk2_clk_src.clkr.hw,
2417 },
2418 .num_parents = 1,
2419 .ops = &clk_branch2_ops,
2420 .flags = CLK_SET_RATE_PARENT,
2421 }
2422 }
2423 };
2424
2425 static struct clk_branch gcc_camss_micro_ahb_clk = {
2426 .halt_reg = 0x5600c,
2427 .halt_check = BRANCH_HALT,
2428 .clkr = {
2429 .enable_reg = 0x5600c,
2430 .enable_mask = BIT(0),
2431 .hw.init = &(struct clk_init_data) {
2432 .name = "gcc_camss_micro_ahb_clk",
2433 .parent_hws = (const struct clk_hw*[]){
2434 &camss_top_ahb_clk_src.clkr.hw,
2435 },
2436 .num_parents = 1,
2437 .ops = &clk_branch2_ops,
2438 .flags = CLK_SET_RATE_PARENT,
2439 }
2440 }
2441 };
2442
2443 static struct clk_branch gcc_camss_top_ahb_clk = {
2444 .halt_reg = 0x5a014,
2445 .halt_check = BRANCH_HALT,
2446 .clkr = {
2447 .enable_reg = 0x5a014,
2448 .enable_mask = BIT(0),
2449 .hw.init = &(struct clk_init_data) {
2450 .name = "gcc_camss_top_ahb_clk",
2451 .parent_hws = (const struct clk_hw*[]){
2452 &camss_top_ahb_clk_src.clkr.hw,
2453 },
2454 .num_parents = 1,
2455 .ops = &clk_branch2_ops,
2456 .flags = CLK_SET_RATE_PARENT,
2457 }
2458 }
2459 };
2460
2461 static struct clk_branch gcc_camss_vfe0_ahb_clk = {
2462 .halt_reg = 0x58044,
2463 .halt_check = BRANCH_HALT,
2464 .clkr = {
2465 .enable_reg = 0x58044,
2466 .enable_mask = BIT(0),
2467 .hw.init = &(struct clk_init_data) {
2468 .name = "gcc_camss_vfe0_ahb_clk",
2469 .parent_hws = (const struct clk_hw*[]){
2470 &camss_top_ahb_clk_src.clkr.hw,
2471 },
2472 .num_parents = 1,
2473 .ops = &clk_branch2_ops,
2474 .flags = CLK_SET_RATE_PARENT,
2475 }
2476 }
2477 };
2478
2479 static struct clk_branch gcc_camss_vfe0_axi_clk = {
2480 .halt_reg = 0x58048,
2481 .halt_check = BRANCH_HALT,
2482 .clkr = {
2483 .enable_reg = 0x58048,
2484 .enable_mask = BIT(0),
2485 .hw.init = &(struct clk_init_data) {
2486 .name = "gcc_camss_vfe0_axi_clk",
2487 .ops = &clk_branch2_ops,
2488 }
2489 }
2490 };
2491
2492 static struct clk_branch gcc_camss_vfe0_clk = {
2493 .halt_reg = 0x58038,
2494 .halt_check = BRANCH_HALT,
2495 .clkr = {
2496 .enable_reg = 0x58038,
2497 .enable_mask = BIT(0),
2498 .hw.init = &(struct clk_init_data) {
2499 .name = "gcc_camss_vfe0_clk",
2500 .parent_hws = (const struct clk_hw*[]){
2501 &vfe0_clk_src.clkr.hw,
2502 },
2503 .num_parents = 1,
2504 .ops = &clk_branch2_ops,
2505 .flags = CLK_SET_RATE_PARENT,
2506 }
2507 }
2508 };
2509
2510 static struct clk_branch gcc_camss_vfe1_ahb_clk = {
2511 .halt_reg = 0x58060,
2512 .halt_check = BRANCH_HALT,
2513 .clkr = {
2514 .enable_reg = 0x58060,
2515 .enable_mask = BIT(0),
2516 .hw.init = &(struct clk_init_data) {
2517 .name = "gcc_camss_vfe1_ahb_clk",
2518 .parent_hws = (const struct clk_hw*[]){
2519 &camss_top_ahb_clk_src.clkr.hw,
2520 },
2521 .num_parents = 1,
2522 .ops = &clk_branch2_ops,
2523 .flags = CLK_SET_RATE_PARENT,
2524 }
2525 }
2526 };
2527
2528 static struct clk_branch gcc_camss_vfe1_axi_clk = {
2529 .halt_reg = 0x58068,
2530 .halt_check = BRANCH_HALT,
2531 .clkr = {
2532 .enable_reg = 0x58068,
2533 .enable_mask = BIT(0),
2534 .hw.init = &(struct clk_init_data) {
2535 .name = "gcc_camss_vfe1_axi_clk",
2536 .ops = &clk_branch2_ops,
2537 }
2538 }
2539 };
2540
2541 static struct clk_branch gcc_camss_vfe1_clk = {
2542 .halt_reg = 0x5805c,
2543 .halt_check = BRANCH_HALT,
2544 .clkr = {
2545 .enable_reg = 0x5805c,
2546 .enable_mask = BIT(0),
2547 .hw.init = &(struct clk_init_data) {
2548 .name = "gcc_camss_vfe1_clk",
2549 .parent_hws = (const struct clk_hw*[]){
2550 &vfe1_clk_src.clkr.hw,
2551 },
2552 .num_parents = 1,
2553 .ops = &clk_branch2_ops,
2554 .flags = CLK_SET_RATE_PARENT,
2555 }
2556 }
2557 };
2558
2559 static struct clk_branch gcc_cpp_tbu_clk = {
2560 .halt_reg = 0x12040,
2561 .halt_check = BRANCH_HALT_VOTED,
2562 .clkr = {
2563 .enable_reg = 0x4500c,
2564 .enable_mask = BIT(14),
2565 .hw.init = &(struct clk_init_data) {
2566 .name = "gcc_cpp_tbu_clk",
2567 .ops = &clk_branch2_ops,
2568 }
2569 }
2570 };
2571
2572 static struct clk_branch gcc_crypto_ahb_clk = {
2573 .halt_reg = 0x16024,
2574 .halt_check = BRANCH_HALT_VOTED,
2575 .clkr = {
2576 .enable_reg = 0x45004,
2577 .enable_mask = BIT(0),
2578 .hw.init = &(struct clk_init_data) {
2579 .name = "gcc_crypto_ahb_clk",
2580 .ops = &clk_branch2_ops,
2581 }
2582 }
2583 };
2584
2585 static struct clk_branch gcc_crypto_axi_clk = {
2586 .halt_reg = 0x16020,
2587 .halt_check = BRANCH_HALT_VOTED,
2588 .clkr = {
2589 .enable_reg = 0x45004,
2590 .enable_mask = BIT(1),
2591 .hw.init = &(struct clk_init_data) {
2592 .name = "gcc_crypto_axi_clk",
2593 .ops = &clk_branch2_ops,
2594 }
2595 }
2596 };
2597
2598 static struct clk_branch gcc_crypto_clk = {
2599 .halt_reg = 0x1601c,
2600 .halt_check = BRANCH_HALT_VOTED,
2601 .clkr = {
2602 .enable_reg = 0x45004,
2603 .enable_mask = BIT(2),
2604 .hw.init = &(struct clk_init_data) {
2605 .name = "gcc_crypto_clk",
2606 .parent_hws = (const struct clk_hw*[]){
2607 &crypto_clk_src.clkr.hw,
2608 },
2609 .num_parents = 1,
2610 .ops = &clk_branch2_ops,
2611 .flags = CLK_SET_RATE_PARENT,
2612 }
2613 }
2614 };
2615
2616 static struct clk_branch gcc_dcc_clk = {
2617 .halt_reg = 0x77004,
2618 .halt_check = BRANCH_HALT,
2619 .clkr = {
2620 .enable_reg = 0x77004,
2621 .enable_mask = BIT(0),
2622 .hw.init = &(struct clk_init_data) {
2623 .name = "gcc_dcc_clk",
2624 .ops = &clk_branch2_ops,
2625 }
2626 }
2627 };
2628
2629 static struct clk_branch gcc_gfx_tbu_clk = {
2630 .halt_reg = 0x12010,
2631 .halt_check = BRANCH_HALT_VOTED,
2632 .clkr = {
2633 .enable_reg = 0x4500c,
2634 .enable_mask = BIT(3),
2635 .hw.init = &(struct clk_init_data){
2636 .name = "gcc_gfx_tbu_clk",
2637 .ops = &clk_branch2_ops,
2638 },
2639 },
2640 };
2641
2642 static struct clk_branch gcc_gfx_tcu_clk = {
2643 .halt_reg = 0x12020,
2644 .halt_check = BRANCH_HALT_VOTED,
2645 .clkr = {
2646 .enable_reg = 0x4500c,
2647 .enable_mask = BIT(2),
2648 .hw.init = &(struct clk_init_data){
2649 .name = "gcc_gfx_tcu_clk",
2650 .ops = &clk_branch2_ops,
2651 },
2652 },
2653 };
2654
2655 static struct clk_branch gcc_gtcu_ahb_clk = {
2656 .halt_reg = 0x12044,
2657 .halt_check = BRANCH_HALT_VOTED,
2658 .clkr = {
2659 .enable_reg = 0x4500c,
2660 .enable_mask = BIT(13),
2661 .hw.init = &(struct clk_init_data){
2662 .name = "gcc_gtcu_ahb_clk",
2663 .ops = &clk_branch2_ops,
2664 },
2665 },
2666 };
2667
2668 static struct clk_branch gcc_gp1_clk = {
2669 .halt_reg = 0x08000,
2670 .halt_check = BRANCH_HALT,
2671 .clkr = {
2672 .enable_reg = 0x08000,
2673 .enable_mask = BIT(0),
2674 .hw.init = &(struct clk_init_data) {
2675 .name = "gcc_gp1_clk",
2676 .parent_hws = (const struct clk_hw*[]){
2677 &gp1_clk_src.clkr.hw,
2678 },
2679 .num_parents = 1,
2680 .ops = &clk_branch2_ops,
2681 .flags = CLK_SET_RATE_PARENT,
2682 }
2683 }
2684 };
2685
2686 static struct clk_branch gcc_gp2_clk = {
2687 .halt_reg = 0x09000,
2688 .halt_check = BRANCH_HALT,
2689 .clkr = {
2690 .enable_reg = 0x09000,
2691 .enable_mask = BIT(0),
2692 .hw.init = &(struct clk_init_data) {
2693 .name = "gcc_gp2_clk",
2694 .parent_hws = (const struct clk_hw*[]){
2695 &gp2_clk_src.clkr.hw,
2696 },
2697 .num_parents = 1,
2698 .ops = &clk_branch2_ops,
2699 .flags = CLK_SET_RATE_PARENT,
2700 }
2701 }
2702 };
2703
2704 static struct clk_branch gcc_gp3_clk = {
2705 .halt_reg = 0x0a000,
2706 .halt_check = BRANCH_HALT,
2707 .clkr = {
2708 .enable_reg = 0x0a000,
2709 .enable_mask = BIT(0),
2710 .hw.init = &(struct clk_init_data) {
2711 .name = "gcc_gp3_clk",
2712 .parent_hws = (const struct clk_hw*[]){
2713 &gp3_clk_src.clkr.hw,
2714 },
2715 .num_parents = 1,
2716 .ops = &clk_branch2_ops,
2717 .flags = CLK_SET_RATE_PARENT,
2718 }
2719 }
2720 };
2721
2722 static struct clk_branch gcc_jpeg_tbu_clk = {
2723 .halt_reg = 0x12034,
2724 .halt_check = BRANCH_HALT_VOTED,
2725 .clkr = {
2726 .enable_reg = 0x4500c,
2727 .enable_mask = BIT(10),
2728 .hw.init = &(struct clk_init_data) {
2729 .name = "gcc_jpeg_tbu_clk",
2730 .ops = &clk_branch2_ops,
2731 }
2732 }
2733 };
2734
2735 static struct clk_branch gcc_mdp_tbu_clk = {
2736 .halt_reg = 0x1201c,
2737 .halt_check = BRANCH_HALT_VOTED,
2738 .clkr = {
2739 .enable_reg = 0x4500c,
2740 .enable_mask = BIT(4),
2741 .hw.init = &(struct clk_init_data) {
2742 .name = "gcc_mdp_tbu_clk",
2743 .ops = &clk_branch2_ops,
2744 }
2745 }
2746 };
2747
2748 static struct clk_branch gcc_mdss_ahb_clk = {
2749 .halt_reg = 0x4d07c,
2750 .halt_check = BRANCH_HALT,
2751 .clkr = {
2752 .enable_reg = 0x4d07c,
2753 .enable_mask = BIT(0),
2754 .hw.init = &(struct clk_init_data) {
2755 .name = "gcc_mdss_ahb_clk",
2756 .ops = &clk_branch2_ops,
2757 }
2758 }
2759 };
2760
2761 static struct clk_branch gcc_mdss_axi_clk = {
2762 .halt_reg = 0x4d080,
2763 .halt_check = BRANCH_HALT,
2764 .clkr = {
2765 .enable_reg = 0x4d080,
2766 .enable_mask = BIT(0),
2767 .hw.init = &(struct clk_init_data) {
2768 .name = "gcc_mdss_axi_clk",
2769 .ops = &clk_branch2_ops,
2770 }
2771 }
2772 };
2773
2774 static struct clk_branch gcc_mdss_byte0_clk = {
2775 .halt_reg = 0x4d094,
2776 .halt_check = BRANCH_HALT,
2777 .clkr = {
2778 .enable_reg = 0x4d094,
2779 .enable_mask = BIT(0),
2780 .hw.init = &(struct clk_init_data) {
2781 .name = "gcc_mdss_byte0_clk",
2782 .parent_hws = (const struct clk_hw*[]){
2783 &byte0_clk_src.clkr.hw,
2784 },
2785 .num_parents = 1,
2786 .ops = &clk_branch2_ops,
2787 .flags = CLK_SET_RATE_PARENT,
2788 }
2789 }
2790 };
2791
2792 static struct clk_branch gcc_mdss_byte1_clk = {
2793 .halt_reg = 0x4d0a0,
2794 .halt_check = BRANCH_HALT,
2795 .clkr = {
2796 .enable_reg = 0x4d0a0,
2797 .enable_mask = BIT(0),
2798 .hw.init = &(struct clk_init_data){
2799 .name = "gcc_mdss_byte1_clk",
2800 .parent_hws = (const struct clk_hw*[]){
2801 &byte1_clk_src.clkr.hw,
2802 },
2803 .num_parents = 1,
2804 .ops = &clk_branch2_ops,
2805 .flags = CLK_SET_RATE_PARENT,
2806 },
2807 },
2808 };
2809
2810 static struct clk_branch gcc_mdss_esc0_clk = {
2811 .halt_reg = 0x4d098,
2812 .halt_check = BRANCH_HALT,
2813 .clkr = {
2814 .enable_reg = 0x4d098,
2815 .enable_mask = BIT(0),
2816 .hw.init = &(struct clk_init_data) {
2817 .name = "gcc_mdss_esc0_clk",
2818 .parent_hws = (const struct clk_hw*[]){
2819 &esc0_clk_src.clkr.hw,
2820 },
2821 .num_parents = 1,
2822 .ops = &clk_branch2_ops,
2823 .flags = CLK_SET_RATE_PARENT,
2824 }
2825 }
2826 };
2827
2828 static struct clk_branch gcc_mdss_esc1_clk = {
2829 .halt_reg = 0x4d09c,
2830 .halt_check = BRANCH_HALT,
2831 .clkr = {
2832 .enable_reg = 0x4d09c,
2833 .enable_mask = BIT(0),
2834 .hw.init = &(struct clk_init_data){
2835 .name = "gcc_mdss_esc1_clk",
2836 .parent_hws = (const struct clk_hw*[]){
2837 &esc1_clk_src.clkr.hw,
2838 },
2839 .num_parents = 1,
2840 .ops = &clk_branch2_ops,
2841 .flags = CLK_SET_RATE_PARENT,
2842 },
2843 },
2844 };
2845
2846 static struct clk_branch gcc_mdss_mdp_clk = {
2847 .halt_reg = 0x4d088,
2848 .halt_check = BRANCH_HALT,
2849 .clkr = {
2850 .enable_reg = 0x4d088,
2851 .enable_mask = BIT(0),
2852 .hw.init = &(struct clk_init_data) {
2853 .name = "gcc_mdss_mdp_clk",
2854 .parent_hws = (const struct clk_hw*[]){
2855 &mdp_clk_src.clkr.hw,
2856 },
2857 .num_parents = 1,
2858 .ops = &clk_branch2_ops,
2859 .flags = CLK_SET_RATE_PARENT,
2860 }
2861 }
2862 };
2863
2864 static struct clk_branch gcc_mdss_pclk0_clk = {
2865 .halt_reg = 0x4d084,
2866 .halt_check = BRANCH_HALT,
2867 .clkr = {
2868 .enable_reg = 0x4d084,
2869 .enable_mask = BIT(0),
2870 .hw.init = &(struct clk_init_data) {
2871 .name = "gcc_mdss_pclk0_clk",
2872 .parent_hws = (const struct clk_hw*[]){
2873 &pclk0_clk_src.clkr.hw,
2874 },
2875 .num_parents = 1,
2876 .ops = &clk_branch2_ops,
2877 .flags = CLK_SET_RATE_PARENT,
2878 }
2879 }
2880 };
2881
2882 static struct clk_branch gcc_mdss_pclk1_clk = {
2883 .halt_reg = 0x4d0a4,
2884 .halt_check = BRANCH_HALT,
2885 .clkr = {
2886 .enable_reg = 0x4d0a4,
2887 .enable_mask = BIT(0),
2888 .hw.init = &(struct clk_init_data){
2889 .name = "gcc_mdss_pclk1_clk",
2890 .parent_hws = (const struct clk_hw*[]){
2891 &pclk1_clk_src.clkr.hw,
2892 },
2893 .num_parents = 1,
2894 .ops = &clk_branch2_ops,
2895 .flags = CLK_SET_RATE_PARENT,
2896 },
2897 },
2898 };
2899
2900 static struct clk_branch gcc_mdss_vsync_clk = {
2901 .halt_reg = 0x4d090,
2902 .halt_check = BRANCH_HALT,
2903 .clkr = {
2904 .enable_reg = 0x4d090,
2905 .enable_mask = BIT(0),
2906 .hw.init = &(struct clk_init_data) {
2907 .name = "gcc_mdss_vsync_clk",
2908 .parent_hws = (const struct clk_hw*[]){
2909 &vsync_clk_src.clkr.hw,
2910 },
2911 .num_parents = 1,
2912 .ops = &clk_branch2_ops,
2913 .flags = CLK_SET_RATE_PARENT,
2914 }
2915 }
2916 };
2917
2918 static struct clk_branch gcc_mss_cfg_ahb_clk = {
2919 .halt_reg = 0x49000,
2920 .halt_check = BRANCH_HALT,
2921 .clkr = {
2922 .enable_reg = 0x49000,
2923 .enable_mask = BIT(0),
2924 .hw.init = &(struct clk_init_data) {
2925 .name = "gcc_mss_cfg_ahb_clk",
2926 .ops = &clk_branch2_ops,
2927 }
2928 }
2929 };
2930
2931 static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
2932 .halt_reg = 0x49004,
2933 .halt_check = BRANCH_HALT,
2934 .clkr = {
2935 .enable_reg = 0x49004,
2936 .enable_mask = BIT(0),
2937 .hw.init = &(struct clk_init_data) {
2938 .name = "gcc_mss_q6_bimc_axi_clk",
2939 .ops = &clk_branch2_ops,
2940 }
2941 }
2942 };
2943
2944 static struct clk_branch gcc_oxili_ahb_clk = {
2945 .halt_reg = 0x59028,
2946 .halt_check = BRANCH_HALT,
2947 .clkr = {
2948 .enable_reg = 0x59028,
2949 .enable_mask = BIT(0),
2950 .hw.init = &(struct clk_init_data) {
2951 .name = "gcc_oxili_ahb_clk",
2952 .ops = &clk_branch2_ops,
2953 }
2954 }
2955 };
2956
2957 static struct clk_branch gcc_oxili_aon_clk = {
2958 .halt_reg = 0x5904c,
2959 .halt_check = BRANCH_HALT,
2960 .clkr = {
2961 .enable_reg = 0x5904c,
2962 .enable_mask = BIT(0),
2963 .hw.init = &(struct clk_init_data){
2964 .name = "gcc_oxili_aon_clk",
2965 .parent_hws = (const struct clk_hw*[]){
2966 &gfx3d_clk_src.clkr.hw,
2967 },
2968 .num_parents = 1,
2969 .ops = &clk_branch2_ops,
2970 .flags = CLK_SET_RATE_PARENT,
2971 },
2972 },
2973 };
2974
2975 static struct clk_branch gcc_oxili_gfx3d_clk = {
2976 .halt_reg = 0x59020,
2977 .halt_check = BRANCH_HALT,
2978 .clkr = {
2979 .enable_reg = 0x59020,
2980 .enable_mask = BIT(0),
2981 .hw.init = &(struct clk_init_data) {
2982 .name = "gcc_oxili_gfx3d_clk",
2983 .parent_hws = (const struct clk_hw*[]){
2984 &gfx3d_clk_src.clkr.hw,
2985 },
2986 .num_parents = 1,
2987 .ops = &clk_branch2_ops,
2988 .flags = CLK_SET_RATE_PARENT,
2989 }
2990 }
2991 };
2992
2993 static struct clk_branch gcc_oxili_timer_clk = {
2994 .halt_reg = 0x59040,
2995 .halt_check = BRANCH_HALT,
2996 .clkr = {
2997 .enable_reg = 0x59040,
2998 .enable_mask = BIT(0),
2999 .hw.init = &(struct clk_init_data){
3000 .name = "gcc_oxili_timer_clk",
3001 .ops = &clk_branch2_ops,
3002 },
3003 },
3004 };
3005
3006 static struct clk_branch gcc_pdm2_clk = {
3007 .halt_reg = 0x4400c,
3008 .halt_check = BRANCH_HALT,
3009 .clkr = {
3010 .enable_reg = 0x4400c,
3011 .enable_mask = BIT(0),
3012 .hw.init = &(struct clk_init_data) {
3013 .name = "gcc_pdm2_clk",
3014 .parent_hws = (const struct clk_hw*[]){
3015 &pdm2_clk_src.clkr.hw,
3016 },
3017 .num_parents = 1,
3018 .ops = &clk_branch2_ops,
3019 .flags = CLK_SET_RATE_PARENT,
3020 }
3021 }
3022 };
3023
3024 static struct clk_branch gcc_pdm_ahb_clk = {
3025 .halt_reg = 0x44004,
3026 .halt_check = BRANCH_HALT,
3027 .clkr = {
3028 .enable_reg = 0x44004,
3029 .enable_mask = BIT(0),
3030 .hw.init = &(struct clk_init_data) {
3031 .name = "gcc_pdm_ahb_clk",
3032 .ops = &clk_branch2_ops,
3033 }
3034 }
3035 };
3036
3037 static struct clk_branch gcc_prng_ahb_clk = {
3038 .halt_reg = 0x13004,
3039 .halt_check = BRANCH_HALT_VOTED,
3040 .clkr = {
3041 .enable_reg = 0x45004,
3042 .enable_mask = BIT(8),
3043 .hw.init = &(struct clk_init_data) {
3044 .name = "gcc_prng_ahb_clk",
3045 .ops = &clk_branch2_ops,
3046 }
3047 }
3048 };
3049
3050 static struct clk_branch gcc_qdss_dap_clk = {
3051 .halt_reg = 0x29084,
3052 .halt_check = BRANCH_HALT_VOTED,
3053 .clkr = {
3054 .enable_reg = 0x45004,
3055 .enable_mask = BIT(11),
3056 .hw.init = &(struct clk_init_data) {
3057 .name = "gcc_qdss_dap_clk",
3058 .ops = &clk_branch2_ops,
3059 }
3060 }
3061 };
3062
3063 static struct clk_branch gcc_sdcc1_ice_core_clk = {
3064 .halt_reg = 0x5d014,
3065 .halt_check = BRANCH_HALT,
3066 .clkr = {
3067 .enable_reg = 0x5d014,
3068 .enable_mask = BIT(0),
3069 .hw.init = &(struct clk_init_data) {
3070 .name = "gcc_sdcc1_ice_core_clk",
3071 .parent_hws = (const struct clk_hw*[]){
3072 &sdcc1_ice_core_clk_src.clkr.hw,
3073 },
3074 .num_parents = 1,
3075 .ops = &clk_branch2_ops,
3076 .flags = CLK_SET_RATE_PARENT,
3077 }
3078 }
3079 };
3080
3081 static struct clk_branch gcc_sdcc1_ahb_clk = {
3082 .halt_reg = 0x4201c,
3083 .halt_check = BRANCH_HALT,
3084 .clkr = {
3085 .enable_reg = 0x4201c,
3086 .enable_mask = BIT(0),
3087 .hw.init = &(struct clk_init_data) {
3088 .name = "gcc_sdcc1_ahb_clk",
3089 .ops = &clk_branch2_ops,
3090 }
3091 }
3092 };
3093
3094 static struct clk_branch gcc_sdcc2_ahb_clk = {
3095 .halt_reg = 0x4301c,
3096 .halt_check = BRANCH_HALT,
3097 .clkr = {
3098 .enable_reg = 0x4301c,
3099 .enable_mask = BIT(0),
3100 .hw.init = &(struct clk_init_data) {
3101 .name = "gcc_sdcc2_ahb_clk",
3102 .ops = &clk_branch2_ops,
3103 }
3104 }
3105 };
3106
3107 static struct clk_branch gcc_sdcc1_apps_clk = {
3108 .halt_reg = 0x42018,
3109 .halt_check = BRANCH_HALT,
3110 .clkr = {
3111 .enable_reg = 0x42018,
3112 .enable_mask = BIT(0),
3113 .hw.init = &(struct clk_init_data) {
3114 .name = "gcc_sdcc1_apps_clk",
3115 .parent_hws = (const struct clk_hw*[]){
3116 &sdcc1_apps_clk_src.clkr.hw,
3117 },
3118 .num_parents = 1,
3119 .ops = &clk_branch2_ops,
3120 .flags = CLK_SET_RATE_PARENT,
3121 }
3122 }
3123 };
3124
3125 static struct clk_branch gcc_sdcc2_apps_clk = {
3126 .halt_reg = 0x43018,
3127 .halt_check = BRANCH_HALT,
3128 .clkr = {
3129 .enable_reg = 0x43018,
3130 .enable_mask = BIT(0),
3131 .hw.init = &(struct clk_init_data) {
3132 .name = "gcc_sdcc2_apps_clk",
3133 .parent_hws = (const struct clk_hw*[]){
3134 &sdcc2_apps_clk_src.clkr.hw,
3135 },
3136 .num_parents = 1,
3137 .ops = &clk_branch2_ops,
3138 .flags = CLK_SET_RATE_PARENT,
3139 }
3140 }
3141 };
3142
3143 static struct clk_branch gcc_smmu_cfg_clk = {
3144 .halt_reg = 0x12038,
3145 .halt_check = BRANCH_HALT_VOTED,
3146 .clkr = {
3147 .enable_reg = 0x4500c,
3148 .enable_mask = BIT(12),
3149 .hw.init = &(struct clk_init_data) {
3150 .name = "gcc_smmu_cfg_clk",
3151 .ops = &clk_branch2_ops,
3152 }
3153 }
3154 };
3155
3156 static struct clk_branch gcc_usb2a_phy_sleep_clk = {
3157 .halt_reg = 0x4102c,
3158 .clkr = {
3159 .enable_reg = 0x4102c,
3160 .enable_mask = BIT(0),
3161 .hw.init = &(struct clk_init_data){
3162 .name = "gcc_usb2a_phy_sleep_clk",
3163 .ops = &clk_branch2_ops,
3164 },
3165 },
3166 };
3167
3168 static struct clk_branch gcc_usb_hs_ahb_clk = {
3169 .halt_reg = 0x41008,
3170 .clkr = {
3171 .enable_reg = 0x41008,
3172 .enable_mask = BIT(0),
3173 .hw.init = &(struct clk_init_data){
3174 .name = "gcc_usb_hs_ahb_clk",
3175 .ops = &clk_branch2_ops,
3176 },
3177 },
3178 };
3179
3180 static struct clk_branch gcc_usb_hs_phy_cfg_ahb_clk = {
3181 .halt_reg = 0x41030,
3182 .clkr = {
3183 .enable_reg = 0x41030,
3184 .enable_mask = BIT(0),
3185 .hw.init = &(struct clk_init_data){
3186 .name = "gcc_usb_hs_phy_cfg_ahb_clk",
3187 .ops = &clk_branch2_ops,
3188 },
3189 },
3190 };
3191
3192 static struct clk_branch gcc_usb_hs_system_clk = {
3193 .halt_reg = 0x41004,
3194 .clkr = {
3195 .enable_reg = 0x41004,
3196 .enable_mask = BIT(0),
3197 .hw.init = &(struct clk_init_data){
3198 .name = "gcc_usb_hs_system_clk",
3199 .parent_hws = (const struct clk_hw*[]){
3200 &usb_hs_system_clk_src.clkr.hw,
3201 },
3202 .num_parents = 1,
3203 .flags = CLK_SET_RATE_PARENT,
3204 .ops = &clk_branch2_ops,
3205 },
3206 },
3207 };
3208
3209 static struct clk_branch gcc_venus0_ahb_clk = {
3210 .halt_reg = 0x4c020,
3211 .halt_check = BRANCH_HALT,
3212 .clkr = {
3213 .enable_reg = 0x4c020,
3214 .enable_mask = BIT(0),
3215 .hw.init = &(struct clk_init_data) {
3216 .name = "gcc_venus0_ahb_clk",
3217 .ops = &clk_branch2_ops,
3218 }
3219 }
3220 };
3221
3222 static struct clk_branch gcc_venus0_axi_clk = {
3223 .halt_reg = 0x4c024,
3224 .halt_check = BRANCH_HALT,
3225 .clkr = {
3226 .enable_reg = 0x4c024,
3227 .enable_mask = BIT(0),
3228 .hw.init = &(struct clk_init_data) {
3229 .name = "gcc_venus0_axi_clk",
3230 .ops = &clk_branch2_ops,
3231 }
3232 }
3233 };
3234
3235 static struct clk_branch gcc_venus0_core0_vcodec0_clk = {
3236 .halt_reg = 0x4c02c,
3237 .halt_check = BRANCH_HALT,
3238 .clkr = {
3239 .enable_reg = 0x4c02c,
3240 .enable_mask = BIT(0),
3241 .hw.init = &(struct clk_init_data) {
3242 .name = "gcc_venus0_core0_vcodec0_clk",
3243 .parent_hws = (const struct clk_hw*[]){
3244 &vcodec0_clk_src.clkr.hw,
3245 },
3246 .num_parents = 1,
3247 .ops = &clk_branch2_ops,
3248 .flags = CLK_SET_RATE_PARENT,
3249 }
3250 }
3251 };
3252
3253 static struct clk_branch gcc_venus0_vcodec0_clk = {
3254 .halt_reg = 0x4c01c,
3255 .halt_check = BRANCH_HALT,
3256 .clkr = {
3257 .enable_reg = 0x4c01c,
3258 .enable_mask = BIT(0),
3259 .hw.init = &(struct clk_init_data) {
3260 .name = "gcc_venus0_vcodec0_clk",
3261 .parent_hws = (const struct clk_hw*[]){
3262 &vcodec0_clk_src.clkr.hw,
3263 },
3264 .num_parents = 1,
3265 .ops = &clk_branch2_ops,
3266 .flags = CLK_SET_RATE_PARENT,
3267 }
3268 }
3269 };
3270
3271 static struct clk_branch gcc_venus_tbu_clk = {
3272 .halt_reg = 0x12014,
3273 .halt_check = BRANCH_HALT_VOTED,
3274 .clkr = {
3275 .enable_reg = 0x4500c,
3276 .enable_mask = BIT(5),
3277 .hw.init = &(struct clk_init_data) {
3278 .name = "gcc_venus_tbu_clk",
3279 .ops = &clk_branch2_ops,
3280 }
3281 }
3282 };
3283
3284 static struct clk_branch gcc_vfe1_tbu_clk = {
3285 .halt_reg = 0x12090,
3286 .halt_check = BRANCH_HALT_VOTED,
3287 .clkr = {
3288 .enable_reg = 0x4500c,
3289 .enable_mask = BIT(17),
3290 .hw.init = &(struct clk_init_data) {
3291 .name = "gcc_vfe1_tbu_clk",
3292 .ops = &clk_branch2_ops,
3293 }
3294 }
3295 };
3296
3297 static struct clk_branch gcc_vfe_tbu_clk = {
3298 .halt_reg = 0x1203c,
3299 .halt_check = BRANCH_HALT_VOTED,
3300 .clkr = {
3301 .enable_reg = 0x4500c,
3302 .enable_mask = BIT(9),
3303 .hw.init = &(struct clk_init_data) {
3304 .name = "gcc_vfe_tbu_clk",
3305 .ops = &clk_branch2_ops,
3306 }
3307 }
3308 };
3309
3310 static struct gdsc venus_gdsc = {
3311 .gdscr = 0x4c018,
3312 .cxcs = (unsigned int []){ 0x4c024, 0x4c01c },
3313 .cxc_count = 2,
3314 .pd = {
3315 .name = "venus_gdsc",
3316 },
3317 .pwrsts = PWRSTS_OFF_ON,
3318 };
3319
3320 static struct gdsc venus_core0_gdsc = {
3321 .gdscr = 0x4c028,
3322 .cxcs = (unsigned int []){ 0x4c02c },
3323 .cxc_count = 1,
3324 .pd = {
3325 .name = "venus_core0",
3326 },
3327 .flags = HW_CTRL,
3328 .pwrsts = PWRSTS_OFF_ON,
3329 };
3330
3331 static struct gdsc mdss_gdsc = {
3332 .gdscr = 0x4d078,
3333 .cxcs = (unsigned int []){ 0x4d080, 0x4d088 },
3334 .cxc_count = 2,
3335 .pd = {
3336 .name = "mdss_gdsc",
3337 },
3338 .pwrsts = PWRSTS_OFF_ON,
3339 };
3340
3341 static struct gdsc jpeg_gdsc = {
3342 .gdscr = 0x5701c,
3343 .cxcs = (unsigned int []){ 0x57020, 0x57028 },
3344 .cxc_count = 2,
3345 .pd = {
3346 .name = "jpeg_gdsc",
3347 },
3348 .pwrsts = PWRSTS_OFF_ON,
3349 };
3350
3351 static struct gdsc vfe0_gdsc = {
3352 .gdscr = 0x58034,
3353 .cxcs = (unsigned int []){ 0x58038, 0x58048, 0x5600c, 0x58050 },
3354 .cxc_count = 4,
3355 .pd = {
3356 .name = "vfe0_gdsc",
3357 },
3358 .pwrsts = PWRSTS_OFF_ON,
3359 };
3360
3361 static struct gdsc vfe1_gdsc = {
3362 .gdscr = 0x5806c,
3363 .cxcs = (unsigned int []){ 0x5805c, 0x58068, 0x5600c, 0x58074 },
3364 .cxc_count = 4,
3365 .pd = {
3366 .name = "vfe1_gdsc",
3367 },
3368 .pwrsts = PWRSTS_OFF_ON,
3369 };
3370
3371 static struct gdsc oxili_gx_gdsc = {
3372 .gdscr = 0x5901c,
3373 .clamp_io_ctrl = 0x5b00c,
3374 .cxcs = (unsigned int []){ 0x59000, 0x59020 },
3375 .cxc_count = 2,
3376 .pd = {
3377 .name = "oxili_gx_gdsc",
3378 },
3379 .pwrsts = PWRSTS_OFF_ON,
3380 .flags = CLAMP_IO,
3381 };
3382
3383 static struct gdsc oxili_gx_gdsc_msm8937 = {
3384 .gdscr = 0x5901c,
3385 .clamp_io_ctrl = 0x5b00c,
3386 .cxcs = (unsigned int []){ 0x59000 },
3387 .cxc_count = 1,
3388 .pd = {
3389 .name = "oxili_gx_gdsc",
3390 },
3391 .pwrsts = PWRSTS_OFF_ON,
3392 .flags = CLAMP_IO,
3393 };
3394
3395 static struct gdsc oxili_cx_gdsc = {
3396 .gdscr = 0x59044,
3397 .cxcs = (unsigned int []){ 0x59020 },
3398 .cxc_count = 1,
3399 .pd = {
3400 .name = "oxili_cx_gdsc",
3401 },
3402 .pwrsts = PWRSTS_OFF_ON,
3403 };
3404
3405 static struct gdsc cpp_gdsc = {
3406 .gdscr = 0x58078,
3407 .cxcs = (unsigned int []){ 0x5803c, 0x58064 },
3408 .cxc_count = 2,
3409 .pd = {
3410 .name = "cpp_gdsc",
3411 },
3412 .flags = ALWAYS_ON,
3413 .pwrsts = PWRSTS_OFF_ON,
3414 };
3415
3416 static struct clk_regmap *gcc_msm8917_clocks[] = {
3417 [GPLL0] = &gpll0.clkr,
3418 [GPLL0_EARLY] = &gpll0_early.clkr,
3419 [GPLL0_SLEEP_CLK_SRC] = &gpll0_sleep_clk_src.clkr,
3420 [GPLL3] = &gpll3.clkr,
3421 [GPLL3_EARLY] = &gpll3_early.clkr,
3422 [GPLL4] = &gpll4.clkr,
3423 [GPLL4_EARLY] = &gpll4_early.clkr,
3424 [GPLL6] = &gpll6,
3425 [GPLL6_EARLY] = &gpll6_early.clkr,
3426 [APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
3427 [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
3428 [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
3429 [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
3430 [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
3431 [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
3432 [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
3433 [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
3434 [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
3435 [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
3436 [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
3437 [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
3438 [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
3439 [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
3440 [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
3441 [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
3442 [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
3443 [BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
3444 [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
3445 [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
3446 [CAMSS_TOP_AHB_CLK_SRC] = &camss_top_ahb_clk_src.clkr,
3447 [CCI_CLK_SRC] = &cci_clk_src.clkr,
3448 [CPP_CLK_SRC] = &cpp_clk_src.clkr,
3449 [CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
3450 [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
3451 [CSI0_CLK_SRC] = &csi0_clk_src.clkr,
3452 [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
3453 [CSI1_CLK_SRC] = &csi1_clk_src.clkr,
3454 [CSI2_CLK_SRC] = &csi2_clk_src.clkr,
3455 [ESC0_CLK_SRC] = &esc0_clk_src.clkr,
3456 [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
3457 [GP1_CLK_SRC] = &gp1_clk_src.clkr,
3458 [GP2_CLK_SRC] = &gp2_clk_src.clkr,
3459 [GP3_CLK_SRC] = &gp3_clk_src.clkr,
3460 [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
3461 [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
3462 [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
3463 [MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,
3464 [MDP_CLK_SRC] = &mdp_clk_src.clkr,
3465 [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
3466 [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
3467 [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
3468 [SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
3469 [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
3470 [USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
3471 [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
3472 [VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
3473 [VFE1_CLK_SRC] = &vfe1_clk_src.clkr,
3474 [VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
3475 [GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr,
3476 [GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
3477 [GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr,
3478 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
3479 [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
3480 [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
3481 [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
3482 [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
3483 [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
3484 [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
3485 [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
3486 [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
3487 [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
3488 [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
3489 [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
3490 [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
3491 [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
3492 [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
3493 [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
3494 [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
3495 [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
3496 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3497 [GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr,
3498 [GCC_CAMSS_CCI_AHB_CLK] = &gcc_camss_cci_ahb_clk.clkr,
3499 [GCC_CAMSS_CCI_CLK] = &gcc_camss_cci_clk.clkr,
3500 [GCC_CAMSS_CPP_AHB_CLK] = &gcc_camss_cpp_ahb_clk.clkr,
3501 [GCC_CAMSS_CPP_CLK] = &gcc_camss_cpp_clk.clkr,
3502 [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
3503 [GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr,
3504 [GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr,
3505 [GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr,
3506 [GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr,
3507 [GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr,
3508 [GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
3509 [GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr,
3510 [GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr,
3511 [GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr,
3512 [GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr,
3513 [GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr,
3514 [GCC_CAMSS_CSI2PHY_CLK] = &gcc_camss_csi2phy_clk.clkr,
3515 [GCC_CAMSS_CSI2PIX_CLK] = &gcc_camss_csi2pix_clk.clkr,
3516 [GCC_CAMSS_CSI2RDI_CLK] = &gcc_camss_csi2rdi_clk.clkr,
3517 [GCC_CAMSS_CSI2_AHB_CLK] = &gcc_camss_csi2_ahb_clk.clkr,
3518 [GCC_CAMSS_CSI2_CLK] = &gcc_camss_csi2_clk.clkr,
3519 [GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr,
3520 [GCC_CAMSS_CSI_VFE1_CLK] = &gcc_camss_csi_vfe1_clk.clkr,
3521 [GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr,
3522 [GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr,
3523 [GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr,
3524 [GCC_CAMSS_JPEG0_CLK] = &gcc_camss_jpeg0_clk.clkr,
3525 [GCC_CAMSS_JPEG_AHB_CLK] = &gcc_camss_jpeg_ahb_clk.clkr,
3526 [GCC_CAMSS_JPEG_AXI_CLK] = &gcc_camss_jpeg_axi_clk.clkr,
3527 [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
3528 [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
3529 [GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr,
3530 [GCC_CAMSS_MICRO_AHB_CLK] = &gcc_camss_micro_ahb_clk.clkr,
3531 [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
3532 [GCC_CAMSS_VFE0_AHB_CLK] = &gcc_camss_vfe0_ahb_clk.clkr,
3533 [GCC_CAMSS_VFE0_AXI_CLK] = &gcc_camss_vfe0_axi_clk.clkr,
3534 [GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr,
3535 [GCC_CAMSS_VFE1_AHB_CLK] = &gcc_camss_vfe1_ahb_clk.clkr,
3536 [GCC_CAMSS_VFE1_AXI_CLK] = &gcc_camss_vfe1_axi_clk.clkr,
3537 [GCC_CAMSS_VFE1_CLK] = &gcc_camss_vfe1_clk.clkr,
3538 [GCC_CPP_TBU_CLK] = &gcc_cpp_tbu_clk.clkr,
3539 [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
3540 [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
3541 [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
3542 [GCC_DCC_CLK] = &gcc_dcc_clk.clkr,
3543 [GCC_GFX_TBU_CLK] = &gcc_gfx_tbu_clk.clkr,
3544 [GCC_GFX_TCU_CLK] = &gcc_gfx_tcu_clk.clkr,
3545 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3546 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3547 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3548 [GCC_GTCU_AHB_CLK] = &gcc_gtcu_ahb_clk.clkr,
3549 [GCC_JPEG_TBU_CLK] = &gcc_jpeg_tbu_clk.clkr,
3550 [GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr,
3551 [GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr,
3552 [GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr,
3553 [GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr,
3554 [GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr,
3555 [GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr,
3556 [GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr,
3557 [GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr,
3558 [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
3559 [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
3560 [GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr,
3561 [GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr,
3562 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3563 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3564 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3565 [GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr,
3566 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
3567 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
3568 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
3569 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3570 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3571 [GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,
3572 [GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
3573 [GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
3574 [GCC_USB_HS_PHY_CFG_AHB_CLK] = &gcc_usb_hs_phy_cfg_ahb_clk.clkr,
3575 [GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
3576 [GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr,
3577 [GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr,
3578 [GCC_VENUS0_CORE0_VCODEC0_CLK] = &gcc_venus0_core0_vcodec0_clk.clkr,
3579 [GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr,
3580 [GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr,
3581 [GCC_VFE1_TBU_CLK] = &gcc_vfe1_tbu_clk.clkr,
3582 [GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr,
3583 };
3584
3585 static struct clk_regmap *gcc_msm8937_clocks[] = {
3586 [GPLL0] = &gpll0.clkr,
3587 [GPLL0_EARLY] = &gpll0_early.clkr,
3588 [GPLL0_SLEEP_CLK_SRC] = &gpll0_sleep_clk_src.clkr,
3589 [GPLL3] = &gpll3.clkr,
3590 [GPLL3_EARLY] = &gpll3_early.clkr,
3591 [GPLL4] = &gpll4.clkr,
3592 [GPLL4_EARLY] = &gpll4_early.clkr,
3593 [GPLL6] = &gpll6,
3594 [GPLL6_EARLY] = &gpll6_early.clkr,
3595 [APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
3596 [MSM8937_BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
3597 [MSM8937_BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
3598 [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
3599 [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
3600 [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
3601 [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
3602 [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
3603 [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
3604 [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
3605 [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
3606 [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
3607 [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
3608 [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
3609 [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
3610 [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
3611 [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
3612 [MSM8937_BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
3613 [MSM8937_BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
3614 [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
3615 [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
3616 [BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
3617 [MSM8937_BYTE1_CLK_SRC] = &byte1_clk_src.clkr,
3618 [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
3619 [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
3620 [CAMSS_TOP_AHB_CLK_SRC] = &camss_top_ahb_clk_src.clkr,
3621 [CCI_CLK_SRC] = &cci_clk_src.clkr,
3622 [CPP_CLK_SRC] = &cpp_clk_src.clkr,
3623 [CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
3624 [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
3625 [CSI0_CLK_SRC] = &csi0_clk_src.clkr,
3626 [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
3627 [CSI1_CLK_SRC] = &csi1_clk_src.clkr,
3628 [CSI2_CLK_SRC] = &csi2_clk_src.clkr,
3629 [ESC0_CLK_SRC] = &esc0_clk_src.clkr,
3630 [MSM8937_ESC1_CLK_SRC] = &esc1_clk_src.clkr,
3631 [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
3632 [GP1_CLK_SRC] = &gp1_clk_src.clkr,
3633 [GP2_CLK_SRC] = &gp2_clk_src.clkr,
3634 [GP3_CLK_SRC] = &gp3_clk_src.clkr,
3635 [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
3636 [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
3637 [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
3638 [MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,
3639 [MDP_CLK_SRC] = &mdp_clk_src.clkr,
3640 [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
3641 [MSM8937_PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,
3642 [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
3643 [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
3644 [SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
3645 [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
3646 [USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
3647 [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
3648 [VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
3649 [VFE1_CLK_SRC] = &vfe1_clk_src.clkr,
3650 [VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
3651 [GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr,
3652 [GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
3653 [GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr,
3654 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
3655 [MSM8937_GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
3656 [MSM8937_GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
3657 [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
3658 [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
3659 [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
3660 [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
3661 [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
3662 [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
3663 [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
3664 [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
3665 [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
3666 [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
3667 [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
3668 [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
3669 [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
3670 [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
3671 [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
3672 [MSM8937_GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
3673 [MSM8937_GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
3674 [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
3675 [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
3676 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3677 [GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr,
3678 [GCC_CAMSS_CCI_AHB_CLK] = &gcc_camss_cci_ahb_clk.clkr,
3679 [GCC_CAMSS_CCI_CLK] = &gcc_camss_cci_clk.clkr,
3680 [GCC_CAMSS_CPP_AHB_CLK] = &gcc_camss_cpp_ahb_clk.clkr,
3681 [GCC_CAMSS_CPP_CLK] = &gcc_camss_cpp_clk.clkr,
3682 [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
3683 [GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr,
3684 [GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr,
3685 [GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr,
3686 [GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr,
3687 [GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr,
3688 [GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
3689 [GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr,
3690 [GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr,
3691 [GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr,
3692 [GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr,
3693 [GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr,
3694 [GCC_CAMSS_CSI2PHY_CLK] = &gcc_camss_csi2phy_clk.clkr,
3695 [GCC_CAMSS_CSI2PIX_CLK] = &gcc_camss_csi2pix_clk.clkr,
3696 [GCC_CAMSS_CSI2RDI_CLK] = &gcc_camss_csi2rdi_clk.clkr,
3697 [GCC_CAMSS_CSI2_AHB_CLK] = &gcc_camss_csi2_ahb_clk.clkr,
3698 [GCC_CAMSS_CSI2_CLK] = &gcc_camss_csi2_clk.clkr,
3699 [GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr,
3700 [GCC_CAMSS_CSI_VFE1_CLK] = &gcc_camss_csi_vfe1_clk.clkr,
3701 [GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr,
3702 [GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr,
3703 [GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr,
3704 [GCC_CAMSS_JPEG0_CLK] = &gcc_camss_jpeg0_clk.clkr,
3705 [GCC_CAMSS_JPEG_AHB_CLK] = &gcc_camss_jpeg_ahb_clk.clkr,
3706 [GCC_CAMSS_JPEG_AXI_CLK] = &gcc_camss_jpeg_axi_clk.clkr,
3707 [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
3708 [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
3709 [GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr,
3710 [GCC_CAMSS_MICRO_AHB_CLK] = &gcc_camss_micro_ahb_clk.clkr,
3711 [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
3712 [GCC_CAMSS_VFE0_AHB_CLK] = &gcc_camss_vfe0_ahb_clk.clkr,
3713 [GCC_CAMSS_VFE0_AXI_CLK] = &gcc_camss_vfe0_axi_clk.clkr,
3714 [GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr,
3715 [GCC_CAMSS_VFE1_AHB_CLK] = &gcc_camss_vfe1_ahb_clk.clkr,
3716 [GCC_CAMSS_VFE1_AXI_CLK] = &gcc_camss_vfe1_axi_clk.clkr,
3717 [GCC_CAMSS_VFE1_CLK] = &gcc_camss_vfe1_clk.clkr,
3718 [GCC_CPP_TBU_CLK] = &gcc_cpp_tbu_clk.clkr,
3719 [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
3720 [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
3721 [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
3722 [GCC_DCC_CLK] = &gcc_dcc_clk.clkr,
3723 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3724 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3725 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3726 [GCC_JPEG_TBU_CLK] = &gcc_jpeg_tbu_clk.clkr,
3727 [GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr,
3728 [GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr,
3729 [GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr,
3730 [GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr,
3731 [MSM8937_GCC_MDSS_BYTE1_CLK] = &gcc_mdss_byte1_clk.clkr,
3732 [GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr,
3733 [MSM8937_GCC_MDSS_ESC1_CLK] = &gcc_mdss_esc1_clk.clkr,
3734 [GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr,
3735 [GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr,
3736 [MSM8937_GCC_MDSS_PCLK1_CLK] = &gcc_mdss_pclk1_clk.clkr,
3737 [GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr,
3738 [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
3739 [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
3740 [GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr,
3741 [MSM8937_GCC_OXILI_AON_CLK] = &gcc_oxili_aon_clk.clkr,
3742 [GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr,
3743 [MSM8937_GCC_OXILI_TIMER_CLK] = &gcc_oxili_timer_clk.clkr,
3744 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3745 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3746 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3747 [GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr,
3748 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
3749 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
3750 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
3751 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3752 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3753 [GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,
3754 [GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
3755 [GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
3756 [GCC_USB_HS_PHY_CFG_AHB_CLK] = &gcc_usb_hs_phy_cfg_ahb_clk.clkr,
3757 [GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
3758 [GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr,
3759 [GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr,
3760 [GCC_VENUS0_CORE0_VCODEC0_CLK] = &gcc_venus0_core0_vcodec0_clk.clkr,
3761 [GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr,
3762 [GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr,
3763 [GCC_VFE1_TBU_CLK] = &gcc_vfe1_tbu_clk.clkr,
3764 [GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr,
3765 };
3766
3767 static const struct qcom_reset_map gcc_msm8917_resets[] = {
3768 [GCC_CAMSS_MICRO_BCR] = { 0x56008 },
3769 [GCC_MSS_BCR] = { 0x71000 },
3770 [GCC_QUSB2_PHY_BCR] = { 0x4103c },
3771 [GCC_USB_HS_BCR] = { 0x41000 },
3772 [GCC_USB2_HS_PHY_ONLY_BCR] = { 0x41034 },
3773 };
3774
3775 static const struct regmap_config gcc_msm8917_regmap_config = {
3776 .reg_bits = 32,
3777 .reg_stride = 4,
3778 .val_bits = 32,
3779 .max_register = 0x80000,
3780 .fast_io = true,
3781 };
3782
3783 static struct gdsc *gcc_msm8917_gdscs[] = {
3784 [CPP_GDSC] = &cpp_gdsc,
3785 [JPEG_GDSC] = &jpeg_gdsc,
3786 [MDSS_GDSC] = &mdss_gdsc,
3787 [OXILI_GX_GDSC] = &oxili_gx_gdsc,
3788 [VENUS_CORE0_GDSC] = &venus_core0_gdsc,
3789 [VENUS_GDSC] = &venus_gdsc,
3790 [VFE0_GDSC] = &vfe0_gdsc,
3791 [VFE1_GDSC] = &vfe1_gdsc,
3792 };
3793
3794 static struct gdsc *gcc_msm8937_gdscs[] = {
3795 [CPP_GDSC] = &cpp_gdsc,
3796 [JPEG_GDSC] = &jpeg_gdsc,
3797 [MDSS_GDSC] = &mdss_gdsc,
3798 [OXILI_GX_GDSC] = &oxili_gx_gdsc_msm8937,
3799 [MSM8937_OXILI_CX_GDSC] = &oxili_cx_gdsc,
3800 [VENUS_CORE0_GDSC] = &venus_core0_gdsc,
3801 [VENUS_GDSC] = &venus_gdsc,
3802 [VFE0_GDSC] = &vfe0_gdsc,
3803 [VFE1_GDSC] = &vfe1_gdsc,
3804 };
3805
3806 static const struct qcom_cc_desc gcc_msm8917_desc = {
3807 .config = &gcc_msm8917_regmap_config,
3808 .clks = gcc_msm8917_clocks,
3809 .num_clks = ARRAY_SIZE(gcc_msm8917_clocks),
3810 .resets = gcc_msm8917_resets,
3811 .num_resets = ARRAY_SIZE(gcc_msm8917_resets),
3812 .gdscs = gcc_msm8917_gdscs,
3813 .num_gdscs = ARRAY_SIZE(gcc_msm8917_gdscs),
3814 };
3815
3816 static const struct qcom_cc_desc gcc_qm215_desc = {
3817 .config = &gcc_msm8917_regmap_config,
3818 .clks = gcc_msm8917_clocks,
3819 .num_clks = ARRAY_SIZE(gcc_msm8917_clocks),
3820 .resets = gcc_msm8917_resets,
3821 .num_resets = ARRAY_SIZE(gcc_msm8917_resets),
3822 .gdscs = gcc_msm8917_gdscs,
3823 .num_gdscs = ARRAY_SIZE(gcc_msm8917_gdscs),
3824 };
3825
3826 static const struct qcom_cc_desc gcc_msm8937_desc = {
3827 .config = &gcc_msm8917_regmap_config,
3828 .clks = gcc_msm8937_clocks,
3829 .num_clks = ARRAY_SIZE(gcc_msm8937_clocks),
3830 .resets = gcc_msm8917_resets,
3831 .num_resets = ARRAY_SIZE(gcc_msm8917_resets),
3832 .gdscs = gcc_msm8937_gdscs,
3833 .num_gdscs = ARRAY_SIZE(gcc_msm8937_gdscs),
3834 };
3835
msm8937_clock_override(void)3836 static void msm8937_clock_override(void)
3837 {
3838 /* GPLL3 750MHz configuration */
3839 gpll3_early_config.l = 47;
3840 gpll3_early.vco_table = gpll3_p_vco_msm8937;
3841 gpll3_early.num_vco = ARRAY_SIZE(gpll3_p_vco_msm8937);
3842
3843 /*
3844 * Set below clocks for use specific msm8937 parent map.
3845 */
3846 vcodec0_clk_src.parent_map = gcc_cpp_map;
3847 vcodec0_clk_src.clkr.hw.init = &vcodec0_clk_src_init_msm8937;
3848
3849 /*
3850 * Set below clocks for use specific msm8937 freq table.
3851 */
3852 vfe0_clk_src.freq_tbl = ftbl_vfe_clk_src_msm8937;
3853 vfe1_clk_src.freq_tbl = ftbl_vfe_clk_src_msm8937;
3854 cpp_clk_src.freq_tbl = ftbl_cpp_clk_src_msm8937;
3855 vcodec0_clk_src.freq_tbl = ftbl_vcodec0_clk_src_msm8937;
3856 csi0phytimer_clk_src.freq_tbl = ftbl_csi_phytimer_clk_src_msm8937;
3857 csi1phytimer_clk_src.freq_tbl = ftbl_csi_phytimer_clk_src_msm8937;
3858 usb_hs_system_clk_src.freq_tbl = ftbl_usb_hs_system_clk_src_msm8937;
3859 }
3860
gcc_msm8917_probe(struct platform_device * pdev)3861 static int gcc_msm8917_probe(struct platform_device *pdev)
3862 {
3863 struct regmap *regmap;
3864 const struct qcom_cc_desc *gcc_desc;
3865
3866 gcc_desc = of_device_get_match_data(&pdev->dev);
3867
3868 if (gcc_desc == &gcc_qm215_desc) {
3869 gfx3d_clk_src.parent_map = gcc_gfx3d_map_qm215;
3870 } else if (gcc_desc == &gcc_msm8937_desc) {
3871 msm8937_clock_override();
3872 gfx3d_clk_src.freq_tbl = ftbl_gfx3d_clk_src_msm8937;
3873 }
3874
3875 regmap = qcom_cc_map(pdev, gcc_desc);
3876 if (IS_ERR(regmap))
3877 return PTR_ERR(regmap);
3878
3879 clk_alpha_pll_configure(&gpll3_early, regmap, &gpll3_early_config);
3880
3881 return qcom_cc_really_probe(&pdev->dev, gcc_desc, regmap);
3882 }
3883
3884 static const struct of_device_id gcc_msm8917_match_table[] = {
3885 { .compatible = "qcom,gcc-msm8917", .data = &gcc_msm8917_desc },
3886 { .compatible = "qcom,gcc-qm215", .data = &gcc_qm215_desc },
3887 { .compatible = "qcom,gcc-msm8937", .data = &gcc_msm8937_desc },
3888 {},
3889 };
3890 MODULE_DEVICE_TABLE(of, gcc_msm8917_match_table);
3891
3892 static struct platform_driver gcc_msm8917_driver = {
3893 .probe = gcc_msm8917_probe,
3894 .driver = {
3895 .name = "gcc-msm8917",
3896 .of_match_table = gcc_msm8917_match_table,
3897 },
3898 };
3899
gcc_msm8917_init(void)3900 static int __init gcc_msm8917_init(void)
3901 {
3902 return platform_driver_register(&gcc_msm8917_driver);
3903 }
3904 core_initcall(gcc_msm8917_init);
3905
gcc_msm8917_exit(void)3906 static void __exit gcc_msm8917_exit(void)
3907 {
3908 platform_driver_unregister(&gcc_msm8917_driver);
3909 }
3910 module_exit(gcc_msm8917_exit);
3911
3912 MODULE_DESCRIPTION("Qualcomm GCC MSM8917 Driver");
3913 MODULE_LICENSE("GPL");
3914