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

source code of linux/drivers/clk/qcom/gcc-msm8976.c