1 // SPDX-License-Identifier: GPL-2.0
2 // Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
4 #include <linux/kernel.h>
5 #include <linux/bitops.h>
7 #include <linux/platform_device.h>
8 #include <linux/module.h>
10 #include <linux/clk-provider.h>
11 #include <linux/regmap.h>
12 #include <linux/reset-controller.h>
14 #include <dt-bindings/clock/qcom,gcc-sm8150.h>
17 #include "clk-alpha-pll.h"
18 #include "clk-branch.h"
21 #include "clk-regmap.h"
35 static struct clk_alpha_pll gpll0 = {
37 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
39 .enable_reg = 0x52000,
40 .enable_mask = BIT(0),
41 .hw.init = &(struct clk_init_data){
43 .parent_data = &(const struct clk_parent_data){
48 .ops = &clk_alpha_pll_fixed_trion_ops,
53 static const struct clk_div_table post_div_table_trion_even[] = {
61 static struct clk_alpha_pll_postdiv gpll0_out_even = {
64 .post_div_table = post_div_table_trion_even,
65 .num_post_div = ARRAY_SIZE(post_div_table_trion_even),
66 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
68 .clkr.hw.init = &(struct clk_init_data){
69 .name = "gpll0_out_even",
70 .parent_hws = (const struct clk_hw*[]){
74 .ops = &clk_alpha_pll_postdiv_trion_ops,
78 static struct clk_alpha_pll gpll7 = {
80 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
82 .enable_reg = 0x52000,
83 .enable_mask = BIT(7),
84 .hw.init = &(struct clk_init_data){
86 .parent_data = &(const struct clk_parent_data){
91 .ops = &clk_alpha_pll_fixed_trion_ops,
96 static struct clk_alpha_pll gpll9 = {
98 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
100 .enable_reg = 0x52000,
101 .enable_mask = BIT(9),
102 .hw.init = &(struct clk_init_data){
104 .parent_data = &(const struct clk_parent_data){
105 .fw_name = "bi_tcxo",
109 .ops = &clk_alpha_pll_fixed_trion_ops,
114 static const struct parent_map gcc_parent_map_0[] = {
116 { P_GPLL0_OUT_MAIN, 1 },
117 { P_GPLL0_OUT_EVEN, 6 },
120 static const struct clk_parent_data gcc_parents_0[] = {
121 { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
122 { .hw = &gpll0.clkr.hw },
123 { .hw = &gpll0_out_even.clkr.hw },
126 static const struct parent_map gcc_parent_map_1[] = {
128 { P_GPLL0_OUT_MAIN, 1 },
130 { P_GPLL0_OUT_EVEN, 6 },
133 static const struct clk_parent_data gcc_parents_1[] = {
134 { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
135 { .hw = &gpll0.clkr.hw },
136 { .fw_name = "sleep_clk", .name = "sleep_clk" },
137 { .hw = &gpll0_out_even.clkr.hw },
140 static const struct parent_map gcc_parent_map_2[] = {
145 static const struct clk_parent_data gcc_parents_2[] = {
146 { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
147 { .fw_name = "sleep_clk", .name = "sleep_clk" },
150 static const struct parent_map gcc_parent_map_3[] = {
152 { P_GPLL0_OUT_MAIN, 1 },
155 static const struct clk_parent_data gcc_parents_3[] = {
156 { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
157 { .hw = &gpll0.clkr.hw },
160 static const struct parent_map gcc_parent_map_4[] = {
164 static const struct clk_parent_data gcc_parents_4[] = {
165 { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
168 static const struct parent_map gcc_parent_map_5[] = {
170 { P_GPLL0_OUT_MAIN, 1 },
171 { P_GPLL7_OUT_MAIN, 3 },
172 { P_GPLL0_OUT_EVEN, 6 },
175 static const struct clk_parent_data gcc_parents_5[] = {
176 { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
177 { .hw = &gpll0.clkr.hw },
178 { .hw = &gpll7.clkr.hw },
179 { .hw = &gpll0_out_even.clkr.hw },
182 static const struct parent_map gcc_parent_map_6[] = {
184 { P_GPLL0_OUT_MAIN, 1 },
185 { P_GPLL9_OUT_MAIN, 2 },
186 { P_GPLL0_OUT_EVEN, 6 },
189 static const struct clk_parent_data gcc_parents_6[] = {
190 { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
191 { .hw = &gpll0.clkr.hw },
192 { .hw = &gpll9.clkr.hw },
193 { .hw = &gpll0_out_even.clkr.hw },
196 static const struct parent_map gcc_parent_map_7[] = {
198 { P_GPLL0_OUT_MAIN, 1 },
199 { P_AUD_REF_CLK, 2 },
200 { P_GPLL0_OUT_EVEN, 6 },
203 static const struct clk_parent_data gcc_parents_7[] = {
204 { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
205 { .hw = &gpll0.clkr.hw },
206 { .fw_name = "aud_ref_clk", .name = "aud_ref_clk" },
207 { .hw = &gpll0_out_even.clkr.hw },
210 static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src[] = {
211 F(19200000, P_BI_TCXO, 1, 0, 0),
212 F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
213 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
217 static struct clk_rcg2 gcc_cpuss_ahb_clk_src = {
221 .parent_map = gcc_parent_map_0,
222 .freq_tbl = ftbl_gcc_cpuss_ahb_clk_src,
223 .clkr.hw.init = &(struct clk_init_data){
224 .name = "gcc_cpuss_ahb_clk_src",
225 .parent_data = gcc_parents_0,
226 .num_parents = ARRAY_SIZE(gcc_parents_0),
227 .flags = CLK_SET_RATE_PARENT,
228 .ops = &clk_rcg2_ops,
232 static const struct freq_tbl ftbl_gcc_emac_ptp_clk_src[] = {
233 F(19200000, P_BI_TCXO, 1, 0, 0),
234 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
235 F(125000000, P_GPLL7_OUT_MAIN, 4, 0, 0),
236 F(250000000, P_GPLL7_OUT_MAIN, 2, 0, 0),
240 static struct clk_rcg2 gcc_emac_ptp_clk_src = {
244 .parent_map = gcc_parent_map_5,
245 .freq_tbl = ftbl_gcc_emac_ptp_clk_src,
246 .clkr.hw.init = &(struct clk_init_data){
247 .name = "gcc_emac_ptp_clk_src",
248 .parent_data = gcc_parents_5,
249 .num_parents = ARRAY_SIZE(gcc_parents_5),
250 .flags = CLK_SET_RATE_PARENT,
251 .ops = &clk_rcg2_ops,
255 static const struct freq_tbl ftbl_gcc_emac_rgmii_clk_src[] = {
256 F(2500000, P_BI_TCXO, 1, 25, 192),
257 F(5000000, P_BI_TCXO, 1, 25, 96),
258 F(19200000, P_BI_TCXO, 1, 0, 0),
259 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
260 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
261 F(125000000, P_GPLL7_OUT_MAIN, 4, 0, 0),
262 F(250000000, P_GPLL7_OUT_MAIN, 2, 0, 0),
266 static struct clk_rcg2 gcc_emac_rgmii_clk_src = {
270 .parent_map = gcc_parent_map_5,
271 .freq_tbl = ftbl_gcc_emac_rgmii_clk_src,
272 .clkr.hw.init = &(struct clk_init_data){
273 .name = "gcc_emac_rgmii_clk_src",
274 .parent_data = gcc_parents_5,
275 .num_parents = ARRAY_SIZE(gcc_parents_5),
276 .flags = CLK_SET_RATE_PARENT,
277 .ops = &clk_rcg2_ops,
281 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
282 F(19200000, P_BI_TCXO, 1, 0, 0),
283 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
284 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
285 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
286 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
290 static struct clk_rcg2 gcc_gp1_clk_src = {
294 .parent_map = gcc_parent_map_1,
295 .freq_tbl = ftbl_gcc_gp1_clk_src,
296 .clkr.hw.init = &(struct clk_init_data){
297 .name = "gcc_gp1_clk_src",
298 .parent_data = gcc_parents_1,
299 .num_parents = ARRAY_SIZE(gcc_parents_1),
300 .flags = CLK_SET_RATE_PARENT,
301 .ops = &clk_rcg2_ops,
305 static struct clk_rcg2 gcc_gp2_clk_src = {
309 .parent_map = gcc_parent_map_1,
310 .freq_tbl = ftbl_gcc_gp1_clk_src,
311 .clkr.hw.init = &(struct clk_init_data){
312 .name = "gcc_gp2_clk_src",
313 .parent_data = gcc_parents_1,
314 .num_parents = ARRAY_SIZE(gcc_parents_1),
315 .flags = CLK_SET_RATE_PARENT,
316 .ops = &clk_rcg2_ops,
320 static struct clk_rcg2 gcc_gp3_clk_src = {
324 .parent_map = gcc_parent_map_1,
325 .freq_tbl = ftbl_gcc_gp1_clk_src,
326 .clkr.hw.init = &(struct clk_init_data){
327 .name = "gcc_gp3_clk_src",
328 .parent_data = gcc_parents_1,
329 .num_parents = ARRAY_SIZE(gcc_parents_1),
330 .flags = CLK_SET_RATE_PARENT,
331 .ops = &clk_rcg2_ops,
335 static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
336 F(9600000, P_BI_TCXO, 2, 0, 0),
337 F(19200000, P_BI_TCXO, 1, 0, 0),
341 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
345 .parent_map = gcc_parent_map_2,
346 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
347 .clkr.hw.init = &(struct clk_init_data){
348 .name = "gcc_pcie_0_aux_clk_src",
349 .parent_data = gcc_parents_2,
350 .num_parents = ARRAY_SIZE(gcc_parents_2),
351 .flags = CLK_SET_RATE_PARENT,
352 .ops = &clk_rcg2_ops,
356 static struct clk_rcg2 gcc_pcie_1_aux_clk_src = {
360 .parent_map = gcc_parent_map_2,
361 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
362 .clkr.hw.init = &(struct clk_init_data){
363 .name = "gcc_pcie_1_aux_clk_src",
364 .parent_data = gcc_parents_2,
365 .num_parents = ARRAY_SIZE(gcc_parents_2),
366 .flags = CLK_SET_RATE_PARENT,
367 .ops = &clk_rcg2_ops,
371 static const struct freq_tbl ftbl_gcc_pcie_phy_refgen_clk_src[] = {
372 F(19200000, P_BI_TCXO, 1, 0, 0),
373 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
377 static struct clk_rcg2 gcc_pcie_phy_refgen_clk_src = {
381 .parent_map = gcc_parent_map_0,
382 .freq_tbl = ftbl_gcc_pcie_phy_refgen_clk_src,
383 .clkr.hw.init = &(struct clk_init_data){
384 .name = "gcc_pcie_phy_refgen_clk_src",
385 .parent_data = gcc_parents_0,
386 .num_parents = ARRAY_SIZE(gcc_parents_0),
387 .flags = CLK_SET_RATE_PARENT,
388 .ops = &clk_rcg2_ops,
392 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
393 F(9600000, P_BI_TCXO, 2, 0, 0),
394 F(19200000, P_BI_TCXO, 1, 0, 0),
395 F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
399 static struct clk_rcg2 gcc_pdm2_clk_src = {
403 .parent_map = gcc_parent_map_0,
404 .freq_tbl = ftbl_gcc_pdm2_clk_src,
405 .clkr.hw.init = &(struct clk_init_data){
406 .name = "gcc_pdm2_clk_src",
407 .parent_data = gcc_parents_0,
408 .num_parents = ARRAY_SIZE(gcc_parents_0),
409 .flags = CLK_SET_RATE_PARENT,
410 .ops = &clk_rcg2_ops,
414 static const struct freq_tbl ftbl_gcc_qspi_core_clk_src[] = {
415 F(19200000, P_BI_TCXO, 1, 0, 0),
416 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
417 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
418 F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
422 static struct clk_rcg2 gcc_qspi_core_clk_src = {
426 .parent_map = gcc_parent_map_0,
427 .freq_tbl = ftbl_gcc_qspi_core_clk_src,
428 .clkr.hw.init = &(struct clk_init_data){
429 .name = "gcc_qspi_core_clk_src",
430 .parent_data = gcc_parents_0,
431 .num_parents = ARRAY_SIZE(gcc_parents_0),
432 .flags = CLK_SET_RATE_PARENT,
433 .ops = &clk_rcg2_ops,
437 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
438 F(7372800, P_GPLL0_OUT_EVEN, 1, 384, 15625),
439 F(14745600, P_GPLL0_OUT_EVEN, 1, 768, 15625),
440 F(19200000, P_BI_TCXO, 1, 0, 0),
441 F(29491200, P_GPLL0_OUT_EVEN, 1, 1536, 15625),
442 F(32000000, P_GPLL0_OUT_EVEN, 1, 8, 75),
443 F(48000000, P_GPLL0_OUT_EVEN, 1, 4, 25),
444 F(64000000, P_GPLL0_OUT_EVEN, 1, 16, 75),
445 F(80000000, P_GPLL0_OUT_EVEN, 1, 4, 15),
446 F(96000000, P_GPLL0_OUT_EVEN, 1, 8, 25),
447 F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
448 F(102400000, P_GPLL0_OUT_EVEN, 1, 128, 375),
449 F(112000000, P_GPLL0_OUT_EVEN, 1, 28, 75),
450 F(117964800, P_GPLL0_OUT_EVEN, 1, 6144, 15625),
451 F(120000000, P_GPLL0_OUT_EVEN, 2.5, 0, 0),
452 F(128000000, P_GPLL0_OUT_MAIN, 1, 16, 75),
456 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
460 .parent_map = gcc_parent_map_0,
461 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
462 .clkr.hw.init = &(struct clk_init_data){
463 .name = "gcc_qupv3_wrap0_s0_clk_src",
464 .parent_data = gcc_parents_0,
465 .num_parents = ARRAY_SIZE(gcc_parents_0),
466 .flags = CLK_SET_RATE_PARENT,
467 .ops = &clk_rcg2_ops,
471 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
475 .parent_map = gcc_parent_map_0,
476 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
477 .clkr.hw.init = &(struct clk_init_data){
478 .name = "gcc_qupv3_wrap0_s1_clk_src",
479 .parent_data = gcc_parents_0,
480 .num_parents = ARRAY_SIZE(gcc_parents_0),
481 .flags = CLK_SET_RATE_PARENT,
482 .ops = &clk_rcg2_ops,
486 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
490 .parent_map = gcc_parent_map_0,
491 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
492 .clkr.hw.init = &(struct clk_init_data){
493 .name = "gcc_qupv3_wrap0_s2_clk_src",
494 .parent_data = gcc_parents_0,
495 .num_parents = ARRAY_SIZE(gcc_parents_0),
496 .flags = CLK_SET_RATE_PARENT,
497 .ops = &clk_rcg2_ops,
501 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
505 .parent_map = gcc_parent_map_0,
506 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
507 .clkr.hw.init = &(struct clk_init_data){
508 .name = "gcc_qupv3_wrap0_s3_clk_src",
509 .parent_data = gcc_parents_0,
510 .num_parents = ARRAY_SIZE(gcc_parents_0),
511 .flags = CLK_SET_RATE_PARENT,
512 .ops = &clk_rcg2_ops,
516 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
520 .parent_map = gcc_parent_map_0,
521 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
522 .clkr.hw.init = &(struct clk_init_data){
523 .name = "gcc_qupv3_wrap0_s4_clk_src",
524 .parent_data = gcc_parents_0,
525 .num_parents = ARRAY_SIZE(gcc_parents_0),
526 .flags = CLK_SET_RATE_PARENT,
527 .ops = &clk_rcg2_ops,
531 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
535 .parent_map = gcc_parent_map_0,
536 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
537 .clkr.hw.init = &(struct clk_init_data){
538 .name = "gcc_qupv3_wrap0_s5_clk_src",
539 .parent_data = gcc_parents_0,
540 .num_parents = ARRAY_SIZE(gcc_parents_0),
541 .flags = CLK_SET_RATE_PARENT,
542 .ops = &clk_rcg2_ops,
546 static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
550 .parent_map = gcc_parent_map_0,
551 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
552 .clkr.hw.init = &(struct clk_init_data){
553 .name = "gcc_qupv3_wrap0_s6_clk_src",
554 .parent_data = gcc_parents_0,
555 .num_parents = ARRAY_SIZE(gcc_parents_0),
556 .flags = CLK_SET_RATE_PARENT,
557 .ops = &clk_rcg2_ops,
561 static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = {
565 .parent_map = gcc_parent_map_0,
566 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
567 .clkr.hw.init = &(struct clk_init_data){
568 .name = "gcc_qupv3_wrap0_s7_clk_src",
569 .parent_data = gcc_parents_0,
570 .num_parents = ARRAY_SIZE(gcc_parents_0),
571 .flags = CLK_SET_RATE_PARENT,
572 .ops = &clk_rcg2_ops,
576 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
580 .parent_map = gcc_parent_map_0,
581 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
582 .clkr.hw.init = &(struct clk_init_data){
583 .name = "gcc_qupv3_wrap1_s0_clk_src",
584 .parent_data = gcc_parents_0,
585 .num_parents = ARRAY_SIZE(gcc_parents_0),
586 .flags = CLK_SET_RATE_PARENT,
587 .ops = &clk_rcg2_ops,
591 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
595 .parent_map = gcc_parent_map_0,
596 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
597 .clkr.hw.init = &(struct clk_init_data){
598 .name = "gcc_qupv3_wrap1_s1_clk_src",
599 .parent_data = gcc_parents_0,
600 .num_parents = ARRAY_SIZE(gcc_parents_0),
601 .flags = CLK_SET_RATE_PARENT,
602 .ops = &clk_rcg2_ops,
606 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
610 .parent_map = gcc_parent_map_0,
611 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
612 .clkr.hw.init = &(struct clk_init_data){
613 .name = "gcc_qupv3_wrap1_s2_clk_src",
614 .parent_data = gcc_parents_0,
615 .num_parents = ARRAY_SIZE(gcc_parents_0),
616 .flags = CLK_SET_RATE_PARENT,
617 .ops = &clk_rcg2_ops,
621 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
625 .parent_map = gcc_parent_map_0,
626 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
627 .clkr.hw.init = &(struct clk_init_data){
628 .name = "gcc_qupv3_wrap1_s3_clk_src",
629 .parent_data = gcc_parents_0,
630 .num_parents = ARRAY_SIZE(gcc_parents_0),
631 .flags = CLK_SET_RATE_PARENT,
632 .ops = &clk_rcg2_ops,
636 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
640 .parent_map = gcc_parent_map_0,
641 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
642 .clkr.hw.init = &(struct clk_init_data){
643 .name = "gcc_qupv3_wrap1_s4_clk_src",
644 .parent_data = gcc_parents_0,
645 .num_parents = ARRAY_SIZE(gcc_parents_0),
646 .flags = CLK_SET_RATE_PARENT,
647 .ops = &clk_rcg2_ops,
651 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
655 .parent_map = gcc_parent_map_0,
656 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
657 .clkr.hw.init = &(struct clk_init_data){
658 .name = "gcc_qupv3_wrap1_s5_clk_src",
659 .parent_data = gcc_parents_0,
660 .num_parents = ARRAY_SIZE(gcc_parents_0),
661 .flags = CLK_SET_RATE_PARENT,
662 .ops = &clk_rcg2_ops,
666 static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = {
670 .parent_map = gcc_parent_map_0,
671 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
672 .clkr.hw.init = &(struct clk_init_data){
673 .name = "gcc_qupv3_wrap2_s0_clk_src",
674 .parent_data = gcc_parents_0,
675 .num_parents = ARRAY_SIZE(gcc_parents_0),
676 .flags = CLK_SET_RATE_PARENT,
677 .ops = &clk_rcg2_ops,
681 static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = {
685 .parent_map = gcc_parent_map_0,
686 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
687 .clkr.hw.init = &(struct clk_init_data){
688 .name = "gcc_qupv3_wrap2_s1_clk_src",
689 .parent_data = gcc_parents_0,
690 .num_parents = ARRAY_SIZE(gcc_parents_0),
691 .flags = CLK_SET_RATE_PARENT,
692 .ops = &clk_rcg2_ops,
696 static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src = {
700 .parent_map = gcc_parent_map_0,
701 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
702 .clkr.hw.init = &(struct clk_init_data){
703 .name = "gcc_qupv3_wrap2_s2_clk_src",
704 .parent_data = gcc_parents_0,
705 .num_parents = ARRAY_SIZE(gcc_parents_0),
706 .flags = CLK_SET_RATE_PARENT,
707 .ops = &clk_rcg2_ops,
711 static struct clk_rcg2 gcc_qupv3_wrap2_s3_clk_src = {
715 .parent_map = gcc_parent_map_0,
716 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
717 .clkr.hw.init = &(struct clk_init_data){
718 .name = "gcc_qupv3_wrap2_s3_clk_src",
719 .parent_data = gcc_parents_0,
720 .num_parents = ARRAY_SIZE(gcc_parents_0),
721 .flags = CLK_SET_RATE_PARENT,
722 .ops = &clk_rcg2_ops,
726 static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = {
730 .parent_map = gcc_parent_map_0,
731 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
732 .clkr.hw.init = &(struct clk_init_data){
733 .name = "gcc_qupv3_wrap2_s4_clk_src",
734 .parent_data = gcc_parents_0,
735 .num_parents = ARRAY_SIZE(gcc_parents_0),
736 .flags = CLK_SET_RATE_PARENT,
737 .ops = &clk_rcg2_ops,
741 static struct clk_rcg2 gcc_qupv3_wrap2_s5_clk_src = {
745 .parent_map = gcc_parent_map_0,
746 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
747 .clkr.hw.init = &(struct clk_init_data){
748 .name = "gcc_qupv3_wrap2_s5_clk_src",
749 .parent_data = gcc_parents_0,
750 .num_parents = ARRAY_SIZE(gcc_parents_0),
751 .flags = CLK_SET_RATE_PARENT,
752 .ops = &clk_rcg2_ops,
756 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
757 F(400000, P_BI_TCXO, 12, 1, 4),
758 F(9600000, P_BI_TCXO, 2, 0, 0),
759 F(19200000, P_BI_TCXO, 1, 0, 0),
760 F(25000000, P_GPLL0_OUT_MAIN, 12, 1, 2),
761 F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
762 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
763 F(202000000, P_GPLL9_OUT_MAIN, 4, 0, 0),
767 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
771 .parent_map = gcc_parent_map_6,
772 .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
773 .clkr.hw.init = &(struct clk_init_data){
774 .name = "gcc_sdcc2_apps_clk_src",
775 .parent_data = gcc_parents_6,
776 .num_parents = ARRAY_SIZE(gcc_parents_6),
777 .flags = CLK_SET_RATE_PARENT,
778 .ops = &clk_rcg2_floor_ops,
782 static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = {
783 F(400000, P_BI_TCXO, 12, 1, 4),
784 F(9600000, P_BI_TCXO, 2, 0, 0),
785 F(19200000, P_BI_TCXO, 1, 0, 0),
786 F(25000000, P_GPLL0_OUT_MAIN, 12, 1, 2),
787 F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
788 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
792 static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {
796 .parent_map = gcc_parent_map_3,
797 .freq_tbl = ftbl_gcc_sdcc4_apps_clk_src,
798 .clkr.hw.init = &(struct clk_init_data){
799 .name = "gcc_sdcc4_apps_clk_src",
800 .parent_data = gcc_parents_3,
801 .num_parents = ARRAY_SIZE(gcc_parents_3),
802 .flags = CLK_SET_RATE_PARENT,
803 .ops = &clk_rcg2_floor_ops,
807 static const struct freq_tbl ftbl_gcc_tsif_ref_clk_src[] = {
808 F(105495, P_BI_TCXO, 2, 1, 91),
812 static struct clk_rcg2 gcc_tsif_ref_clk_src = {
816 .parent_map = gcc_parent_map_7,
817 .freq_tbl = ftbl_gcc_tsif_ref_clk_src,
818 .clkr.hw.init = &(struct clk_init_data){
819 .name = "gcc_tsif_ref_clk_src",
820 .parent_data = gcc_parents_7,
821 .num_parents = ARRAY_SIZE(gcc_parents_7),
822 .flags = CLK_SET_RATE_PARENT,
823 .ops = &clk_rcg2_ops,
827 static const struct freq_tbl ftbl_gcc_ufs_card_axi_clk_src[] = {
828 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
829 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
830 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
831 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
832 F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
836 static struct clk_rcg2 gcc_ufs_card_axi_clk_src = {
840 .parent_map = gcc_parent_map_0,
841 .freq_tbl = ftbl_gcc_ufs_card_axi_clk_src,
842 .clkr.hw.init = &(struct clk_init_data){
843 .name = "gcc_ufs_card_axi_clk_src",
844 .parent_data = gcc_parents_0,
845 .num_parents = ARRAY_SIZE(gcc_parents_0),
846 .flags = CLK_SET_RATE_PARENT,
847 .ops = &clk_rcg2_ops,
851 static const struct freq_tbl ftbl_gcc_ufs_card_ice_core_clk_src[] = {
852 F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
853 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
854 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
855 F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
859 static struct clk_rcg2 gcc_ufs_card_ice_core_clk_src = {
863 .parent_map = gcc_parent_map_0,
864 .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
865 .clkr.hw.init = &(struct clk_init_data){
866 .name = "gcc_ufs_card_ice_core_clk_src",
867 .parent_data = gcc_parents_0,
868 .num_parents = ARRAY_SIZE(gcc_parents_0),
869 .flags = CLK_SET_RATE_PARENT,
870 .ops = &clk_rcg2_ops,
874 static const struct freq_tbl ftbl_gcc_ufs_card_phy_aux_clk_src[] = {
875 F(19200000, P_BI_TCXO, 1, 0, 0),
879 static struct clk_rcg2 gcc_ufs_card_phy_aux_clk_src = {
883 .parent_map = gcc_parent_map_4,
884 .freq_tbl = ftbl_gcc_ufs_card_phy_aux_clk_src,
885 .clkr.hw.init = &(struct clk_init_data){
886 .name = "gcc_ufs_card_phy_aux_clk_src",
887 .parent_data = gcc_parents_4,
888 .num_parents = ARRAY_SIZE(gcc_parents_4),
889 .flags = CLK_SET_RATE_PARENT,
890 .ops = &clk_rcg2_ops,
894 static const struct freq_tbl ftbl_gcc_ufs_card_unipro_core_clk_src[] = {
895 F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
896 F(75000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
897 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
901 static struct clk_rcg2 gcc_ufs_card_unipro_core_clk_src = {
905 .parent_map = gcc_parent_map_0,
906 .freq_tbl = ftbl_gcc_ufs_card_unipro_core_clk_src,
907 .clkr.hw.init = &(struct clk_init_data){
908 .name = "gcc_ufs_card_unipro_core_clk_src",
909 .parent_data = gcc_parents_0,
910 .num_parents = ARRAY_SIZE(gcc_parents_0),
911 .flags = CLK_SET_RATE_PARENT,
912 .ops = &clk_rcg2_ops,
916 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
917 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
918 F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
919 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
920 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
921 F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
925 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
929 .parent_map = gcc_parent_map_0,
930 .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
931 .clkr.hw.init = &(struct clk_init_data){
932 .name = "gcc_ufs_phy_axi_clk_src",
933 .parent_data = gcc_parents_0,
934 .num_parents = ARRAY_SIZE(gcc_parents_0),
935 .flags = CLK_SET_RATE_PARENT,
936 .ops = &clk_rcg2_ops,
940 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
944 .parent_map = gcc_parent_map_0,
945 .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
946 .clkr.hw.init = &(struct clk_init_data){
947 .name = "gcc_ufs_phy_ice_core_clk_src",
948 .parent_data = gcc_parents_0,
949 .num_parents = ARRAY_SIZE(gcc_parents_0),
950 .flags = CLK_SET_RATE_PARENT,
951 .ops = &clk_rcg2_ops,
955 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
959 .parent_map = gcc_parent_map_4,
960 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
961 .clkr.hw.init = &(struct clk_init_data){
962 .name = "gcc_ufs_phy_phy_aux_clk_src",
963 .parent_data = gcc_parents_4,
964 .num_parents = ARRAY_SIZE(gcc_parents_4),
965 .flags = CLK_SET_RATE_PARENT,
966 .ops = &clk_rcg2_ops,
970 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
974 .parent_map = gcc_parent_map_0,
975 .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
976 .clkr.hw.init = &(struct clk_init_data){
977 .name = "gcc_ufs_phy_unipro_core_clk_src",
978 .parent_data = gcc_parents_0,
979 .num_parents = ARRAY_SIZE(gcc_parents_0),
980 .flags = CLK_SET_RATE_PARENT,
981 .ops = &clk_rcg2_ops,
985 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
986 F(33333333, P_GPLL0_OUT_EVEN, 9, 0, 0),
987 F(66666667, P_GPLL0_OUT_EVEN, 4.5, 0, 0),
988 F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
989 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
990 F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
994 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
998 .parent_map = gcc_parent_map_0,
999 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1000 .clkr.hw.init = &(struct clk_init_data){
1001 .name = "gcc_usb30_prim_master_clk_src",
1002 .parent_data = gcc_parents_0,
1003 .num_parents = ARRAY_SIZE(gcc_parents_0),
1004 .flags = CLK_SET_RATE_PARENT,
1005 .ops = &clk_rcg2_ops,
1009 static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {
1010 F(19200000, P_BI_TCXO, 1, 0, 0),
1011 F(20000000, P_GPLL0_OUT_EVEN, 15, 0, 0),
1012 F(60000000, P_GPLL0_OUT_EVEN, 5, 0, 0),
1016 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1020 .parent_map = gcc_parent_map_0,
1021 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1022 .clkr.hw.init = &(struct clk_init_data){
1023 .name = "gcc_usb30_prim_mock_utmi_clk_src",
1024 .parent_data = gcc_parents_0,
1025 .num_parents = ARRAY_SIZE(gcc_parents_0),
1026 .flags = CLK_SET_RATE_PARENT,
1027 .ops = &clk_rcg2_ops,
1031 static struct clk_rcg2 gcc_usb30_sec_master_clk_src = {
1032 .cmd_rcgr = 0x1001c,
1035 .parent_map = gcc_parent_map_0,
1036 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1037 .clkr.hw.init = &(struct clk_init_data){
1038 .name = "gcc_usb30_sec_master_clk_src",
1039 .parent_data = gcc_parents_0,
1040 .num_parents = ARRAY_SIZE(gcc_parents_0),
1041 .flags = CLK_SET_RATE_PARENT,
1042 .ops = &clk_rcg2_ops,
1046 static struct clk_rcg2 gcc_usb30_sec_mock_utmi_clk_src = {
1047 .cmd_rcgr = 0x10034,
1050 .parent_map = gcc_parent_map_0,
1051 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1052 .clkr.hw.init = &(struct clk_init_data){
1053 .name = "gcc_usb30_sec_mock_utmi_clk_src",
1054 .parent_data = gcc_parents_0,
1055 .num_parents = ARRAY_SIZE(gcc_parents_0),
1056 .flags = CLK_SET_RATE_PARENT,
1057 .ops = &clk_rcg2_ops,
1061 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1065 .parent_map = gcc_parent_map_2,
1066 .freq_tbl = ftbl_gcc_ufs_card_phy_aux_clk_src,
1067 .clkr.hw.init = &(struct clk_init_data){
1068 .name = "gcc_usb3_prim_phy_aux_clk_src",
1069 .parent_data = gcc_parents_2,
1070 .num_parents = ARRAY_SIZE(gcc_parents_2),
1071 .flags = CLK_SET_RATE_PARENT,
1072 .ops = &clk_rcg2_ops,
1076 static struct clk_rcg2 gcc_usb3_sec_phy_aux_clk_src = {
1077 .cmd_rcgr = 0x10060,
1080 .parent_map = gcc_parent_map_2,
1081 .freq_tbl = ftbl_gcc_ufs_card_phy_aux_clk_src,
1082 .clkr.hw.init = &(struct clk_init_data){
1083 .name = "gcc_usb3_sec_phy_aux_clk_src",
1084 .parent_data = gcc_parents_2,
1085 .num_parents = ARRAY_SIZE(gcc_parents_2),
1086 .flags = CLK_SET_RATE_PARENT,
1087 .ops = &clk_rcg2_ops,
1091 static struct clk_branch gcc_aggre_noc_pcie_tbu_clk = {
1092 .halt_reg = 0x90018,
1093 .halt_check = BRANCH_HALT,
1095 .enable_reg = 0x90018,
1096 .enable_mask = BIT(0),
1097 .hw.init = &(struct clk_init_data){
1098 .name = "gcc_aggre_noc_pcie_tbu_clk",
1099 .ops = &clk_branch2_ops,
1104 static struct clk_branch gcc_aggre_ufs_card_axi_clk = {
1105 .halt_reg = 0x750c0,
1106 .halt_check = BRANCH_HALT,
1107 .hwcg_reg = 0x750c0,
1110 .enable_reg = 0x750c0,
1111 .enable_mask = BIT(0),
1112 .hw.init = &(struct clk_init_data){
1113 .name = "gcc_aggre_ufs_card_axi_clk",
1114 .parent_hws = (const struct clk_hw *[]){
1115 &gcc_ufs_card_axi_clk_src.clkr.hw },
1117 .flags = CLK_SET_RATE_PARENT,
1118 .ops = &clk_branch2_ops,
1123 static struct clk_branch gcc_aggre_ufs_card_axi_hw_ctl_clk = {
1124 .halt_reg = 0x750c0,
1125 .halt_check = BRANCH_HALT,
1126 .hwcg_reg = 0x750c0,
1129 .enable_reg = 0x750c0,
1130 .enable_mask = BIT(1),
1131 .hw.init = &(struct clk_init_data){
1132 .name = "gcc_aggre_ufs_card_axi_hw_ctl_clk",
1133 .parent_hws = (const struct clk_hw *[]){
1134 &gcc_aggre_ufs_card_axi_clk.clkr.hw },
1136 .flags = CLK_SET_RATE_PARENT,
1137 .ops = &clk_branch_simple_ops,
1142 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
1143 .halt_reg = 0x770c0,
1144 .halt_check = BRANCH_HALT,
1145 .hwcg_reg = 0x770c0,
1148 .enable_reg = 0x770c0,
1149 .enable_mask = BIT(0),
1150 .hw.init = &(struct clk_init_data){
1151 .name = "gcc_aggre_ufs_phy_axi_clk",
1152 .parent_hws = (const struct clk_hw *[]){
1153 &gcc_ufs_phy_axi_clk_src.clkr.hw },
1155 .flags = CLK_SET_RATE_PARENT,
1156 .ops = &clk_branch2_ops,
1161 static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = {
1162 .halt_reg = 0x770c0,
1163 .halt_check = BRANCH_HALT,
1164 .hwcg_reg = 0x770c0,
1167 .enable_reg = 0x770c0,
1168 .enable_mask = BIT(1),
1169 .hw.init = &(struct clk_init_data){
1170 .name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk",
1171 .parent_hws = (const struct clk_hw *[]){
1172 &gcc_aggre_ufs_phy_axi_clk.clkr.hw },
1174 .flags = CLK_SET_RATE_PARENT,
1175 .ops = &clk_branch_simple_ops,
1180 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
1182 .halt_check = BRANCH_HALT,
1184 .enable_reg = 0xf07c,
1185 .enable_mask = BIT(0),
1186 .hw.init = &(struct clk_init_data){
1187 .name = "gcc_aggre_usb3_prim_axi_clk",
1188 .parent_hws = (const struct clk_hw *[]){
1189 &gcc_usb30_prim_master_clk_src.clkr.hw },
1191 .flags = CLK_SET_RATE_PARENT,
1192 .ops = &clk_branch2_ops,
1197 static struct clk_branch gcc_aggre_usb3_sec_axi_clk = {
1198 .halt_reg = 0x1007c,
1199 .halt_check = BRANCH_HALT,
1201 .enable_reg = 0x1007c,
1202 .enable_mask = BIT(0),
1203 .hw.init = &(struct clk_init_data){
1204 .name = "gcc_aggre_usb3_sec_axi_clk",
1205 .parent_hws = (const struct clk_hw *[]){
1206 &gcc_usb30_sec_master_clk_src.clkr.hw },
1208 .flags = CLK_SET_RATE_PARENT,
1209 .ops = &clk_branch2_ops,
1214 static struct clk_branch gcc_boot_rom_ahb_clk = {
1215 .halt_reg = 0x38004,
1216 .halt_check = BRANCH_HALT_VOTED,
1217 .hwcg_reg = 0x38004,
1220 .enable_reg = 0x52004,
1221 .enable_mask = BIT(10),
1222 .hw.init = &(struct clk_init_data){
1223 .name = "gcc_boot_rom_ahb_clk",
1224 .ops = &clk_branch2_ops,
1230 * Clock ON depends on external parent 'config noc', so cant poll
1231 * delay and also mark as crtitical for camss boot
1233 static struct clk_branch gcc_camera_ahb_clk = {
1235 .halt_check = BRANCH_HALT_DELAY,
1239 .enable_reg = 0xb008,
1240 .enable_mask = BIT(0),
1241 .hw.init = &(struct clk_init_data){
1242 .name = "gcc_camera_ahb_clk",
1243 .flags = CLK_IS_CRITICAL,
1244 .ops = &clk_branch2_ops,
1249 static struct clk_branch gcc_camera_hf_axi_clk = {
1251 .halt_check = BRANCH_HALT,
1253 .enable_reg = 0xb030,
1254 .enable_mask = BIT(0),
1255 .hw.init = &(struct clk_init_data){
1256 .name = "gcc_camera_hf_axi_clk",
1257 .ops = &clk_branch2_ops,
1262 static struct clk_branch gcc_camera_sf_axi_clk = {
1264 .halt_check = BRANCH_HALT,
1266 .enable_reg = 0xb034,
1267 .enable_mask = BIT(0),
1268 .hw.init = &(struct clk_init_data){
1269 .name = "gcc_camera_sf_axi_clk",
1270 .ops = &clk_branch2_ops,
1275 /* XO critical input to camss, so no need to poll */
1276 static struct clk_branch gcc_camera_xo_clk = {
1278 .halt_check = BRANCH_HALT_DELAY,
1280 .enable_reg = 0xb044,
1281 .enable_mask = BIT(0),
1282 .hw.init = &(struct clk_init_data){
1283 .name = "gcc_camera_xo_clk",
1284 .flags = CLK_IS_CRITICAL,
1285 .ops = &clk_branch2_ops,
1290 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1292 .halt_check = BRANCH_HALT,
1294 .enable_reg = 0xf078,
1295 .enable_mask = BIT(0),
1296 .hw.init = &(struct clk_init_data){
1297 .name = "gcc_cfg_noc_usb3_prim_axi_clk",
1298 .parent_hws = (const struct clk_hw *[]){
1299 &gcc_usb30_prim_master_clk_src.clkr.hw },
1301 .flags = CLK_SET_RATE_PARENT,
1302 .ops = &clk_branch2_ops,
1307 static struct clk_branch gcc_cfg_noc_usb3_sec_axi_clk = {
1308 .halt_reg = 0x10078,
1309 .halt_check = BRANCH_HALT,
1311 .enable_reg = 0x10078,
1312 .enable_mask = BIT(0),
1313 .hw.init = &(struct clk_init_data){
1314 .name = "gcc_cfg_noc_usb3_sec_axi_clk",
1315 .parent_hws = (const struct clk_hw *[]){
1316 &gcc_usb30_sec_master_clk_src.clkr.hw },
1318 .flags = CLK_SET_RATE_PARENT,
1319 .ops = &clk_branch2_ops,
1324 static struct clk_branch gcc_cpuss_ahb_clk = {
1325 .halt_reg = 0x48000,
1326 .halt_check = BRANCH_HALT_VOTED,
1328 .enable_reg = 0x52004,
1329 .enable_mask = BIT(21),
1330 .hw.init = &(struct clk_init_data){
1331 .name = "gcc_cpuss_ahb_clk",
1332 .parent_hws = (const struct clk_hw *[]){
1333 &gcc_cpuss_ahb_clk_src.clkr.hw },
1335 /* required for cpuss */
1336 .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
1337 .ops = &clk_branch2_ops,
1342 static struct clk_branch gcc_cpuss_dvm_bus_clk = {
1343 .halt_reg = 0x48190,
1344 .halt_check = BRANCH_HALT,
1346 .enable_reg = 0x48190,
1347 .enable_mask = BIT(0),
1348 .hw.init = &(struct clk_init_data){
1349 .name = "gcc_cpuss_dvm_bus_clk",
1350 /* required for cpuss */
1351 .flags = CLK_IS_CRITICAL,
1352 .ops = &clk_branch2_ops,
1357 static struct clk_branch gcc_cpuss_gnoc_clk = {
1358 .halt_reg = 0x48004,
1359 .halt_check = BRANCH_HALT_VOTED,
1360 .hwcg_reg = 0x48004,
1363 .enable_reg = 0x52004,
1364 .enable_mask = BIT(22),
1365 .hw.init = &(struct clk_init_data){
1366 .name = "gcc_cpuss_gnoc_clk",
1367 /* required for cpuss */
1368 .flags = CLK_IS_CRITICAL,
1369 .ops = &clk_branch2_ops,
1374 static struct clk_branch gcc_cpuss_rbcpr_clk = {
1375 .halt_reg = 0x48008,
1376 .halt_check = BRANCH_HALT,
1378 .enable_reg = 0x48008,
1379 .enable_mask = BIT(0),
1380 .hw.init = &(struct clk_init_data){
1381 .name = "gcc_cpuss_rbcpr_clk",
1382 .ops = &clk_branch2_ops,
1387 static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1388 .halt_reg = 0x71154,
1389 .halt_check = BRANCH_VOTED,
1391 .enable_reg = 0x71154,
1392 .enable_mask = BIT(0),
1393 .hw.init = &(struct clk_init_data){
1394 .name = "gcc_ddrss_gpu_axi_clk",
1395 .ops = &clk_branch2_ops,
1401 * Clock ON depends on external parent 'config noc', so cant poll
1402 * delay and also mark as crtitical for disp boot
1404 static struct clk_branch gcc_disp_ahb_clk = {
1406 .halt_check = BRANCH_HALT_DELAY,
1410 .enable_reg = 0xb00c,
1411 .enable_mask = BIT(0),
1412 .hw.init = &(struct clk_init_data){
1413 .name = "gcc_disp_ahb_clk",
1414 .flags = CLK_IS_CRITICAL,
1415 .ops = &clk_branch2_ops,
1420 static struct clk_branch gcc_disp_hf_axi_clk = {
1422 .halt_check = BRANCH_HALT,
1424 .enable_reg = 0xb038,
1425 .enable_mask = BIT(0),
1426 .hw.init = &(struct clk_init_data){
1427 .name = "gcc_disp_hf_axi_clk",
1428 .ops = &clk_branch2_ops,
1433 static struct clk_branch gcc_disp_sf_axi_clk = {
1435 .halt_check = BRANCH_HALT,
1437 .enable_reg = 0xb03c,
1438 .enable_mask = BIT(0),
1439 .hw.init = &(struct clk_init_data){
1440 .name = "gcc_disp_sf_axi_clk",
1441 .ops = &clk_branch2_ops,
1446 /* XO critical input to disp, so no need to poll */
1447 static struct clk_branch gcc_disp_xo_clk = {
1449 .halt_check = BRANCH_HALT_DELAY,
1451 .enable_reg = 0xb048,
1452 .enable_mask = BIT(0),
1453 .hw.init = &(struct clk_init_data){
1454 .name = "gcc_disp_xo_clk",
1455 .flags = CLK_IS_CRITICAL,
1456 .ops = &clk_branch2_ops,
1461 static struct clk_branch gcc_emac_axi_clk = {
1463 .halt_check = BRANCH_HALT,
1465 .enable_reg = 0x6010,
1466 .enable_mask = BIT(0),
1467 .hw.init = &(struct clk_init_data){
1468 .name = "gcc_emac_axi_clk",
1469 .ops = &clk_branch2_ops,
1474 static struct clk_branch gcc_emac_ptp_clk = {
1476 .halt_check = BRANCH_HALT,
1478 .enable_reg = 0x6034,
1479 .enable_mask = BIT(0),
1480 .hw.init = &(struct clk_init_data){
1481 .name = "gcc_emac_ptp_clk",
1482 .parent_hws = (const struct clk_hw *[]){
1483 &gcc_emac_ptp_clk_src.clkr.hw },
1485 .flags = CLK_SET_RATE_PARENT,
1486 .ops = &clk_branch2_ops,
1491 static struct clk_branch gcc_emac_rgmii_clk = {
1493 .halt_check = BRANCH_HALT,
1495 .enable_reg = 0x6018,
1496 .enable_mask = BIT(0),
1497 .hw.init = &(struct clk_init_data){
1498 .name = "gcc_emac_rgmii_clk",
1499 .parent_hws = (const struct clk_hw *[]){
1500 &gcc_emac_rgmii_clk_src.clkr.hw },
1502 .flags = CLK_SET_RATE_PARENT,
1503 .ops = &clk_branch2_ops,
1508 static struct clk_branch gcc_emac_slv_ahb_clk = {
1510 .halt_check = BRANCH_HALT,
1514 .enable_reg = 0x6014,
1515 .enable_mask = BIT(0),
1516 .hw.init = &(struct clk_init_data){
1517 .name = "gcc_emac_slv_ahb_clk",
1518 .ops = &clk_branch2_ops,
1523 static struct clk_branch gcc_gp1_clk = {
1524 .halt_reg = 0x64000,
1525 .halt_check = BRANCH_HALT,
1527 .enable_reg = 0x64000,
1528 .enable_mask = BIT(0),
1529 .hw.init = &(struct clk_init_data){
1530 .name = "gcc_gp1_clk",
1531 .parent_hws = (const struct clk_hw *[]){
1532 &gcc_gp1_clk_src.clkr.hw },
1534 .flags = CLK_SET_RATE_PARENT,
1535 .ops = &clk_branch2_ops,
1540 static struct clk_branch gcc_gp2_clk = {
1541 .halt_reg = 0x65000,
1542 .halt_check = BRANCH_HALT,
1544 .enable_reg = 0x65000,
1545 .enable_mask = BIT(0),
1546 .hw.init = &(struct clk_init_data){
1547 .name = "gcc_gp2_clk",
1548 .parent_hws = (const struct clk_hw *[]){
1549 &gcc_gp2_clk_src.clkr.hw },
1551 .flags = CLK_SET_RATE_PARENT,
1552 .ops = &clk_branch2_ops,
1557 static struct clk_branch gcc_gp3_clk = {
1558 .halt_reg = 0x66000,
1559 .halt_check = BRANCH_HALT,
1561 .enable_reg = 0x66000,
1562 .enable_mask = BIT(0),
1563 .hw.init = &(struct clk_init_data){
1564 .name = "gcc_gp3_clk",
1565 .parent_hws = (const struct clk_hw *[]){
1566 &gcc_gp3_clk_src.clkr.hw },
1568 .flags = CLK_SET_RATE_PARENT,
1569 .ops = &clk_branch2_ops,
1574 static struct clk_branch gcc_gpu_cfg_ahb_clk = {
1575 .halt_reg = 0x71004,
1576 .halt_check = BRANCH_HALT,
1577 .hwcg_reg = 0x71004,
1580 .enable_reg = 0x71004,
1581 .enable_mask = BIT(0),
1582 .hw.init = &(struct clk_init_data){
1583 .name = "gcc_gpu_cfg_ahb_clk",
1584 /* required for gpu */
1585 .flags = CLK_IS_CRITICAL,
1586 .ops = &clk_branch2_ops,
1591 static struct clk_branch gcc_gpu_gpll0_clk_src = {
1592 .halt_check = BRANCH_HALT_SKIP,
1594 .enable_reg = 0x52004,
1595 .enable_mask = BIT(15),
1596 .hw.init = &(struct clk_init_data){
1597 .name = "gcc_gpu_gpll0_clk_src",
1598 .parent_hws = (const struct clk_hw *[]){
1601 .flags = CLK_SET_RATE_PARENT,
1602 .ops = &clk_branch2_ops,
1607 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
1608 .halt_check = BRANCH_HALT_SKIP,
1610 .enable_reg = 0x52004,
1611 .enable_mask = BIT(16),
1612 .hw.init = &(struct clk_init_data){
1613 .name = "gcc_gpu_gpll0_div_clk_src",
1614 .parent_hws = (const struct clk_hw *[]){
1615 &gpll0_out_even.clkr.hw },
1617 .flags = CLK_SET_RATE_PARENT,
1618 .ops = &clk_branch2_ops,
1623 static struct clk_branch gcc_gpu_iref_clk = {
1624 .halt_reg = 0x8c010,
1625 .halt_check = BRANCH_HALT,
1627 .enable_reg = 0x8c010,
1628 .enable_mask = BIT(0),
1629 .hw.init = &(struct clk_init_data){
1630 .name = "gcc_gpu_iref_clk",
1631 .ops = &clk_branch2_ops,
1636 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
1637 .halt_reg = 0x7100c,
1638 .halt_check = BRANCH_VOTED,
1640 .enable_reg = 0x7100c,
1641 .enable_mask = BIT(0),
1642 .hw.init = &(struct clk_init_data){
1643 .name = "gcc_gpu_memnoc_gfx_clk",
1644 .ops = &clk_branch2_ops,
1649 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
1650 .halt_reg = 0x71018,
1651 .halt_check = BRANCH_HALT,
1653 .enable_reg = 0x71018,
1654 .enable_mask = BIT(0),
1655 .hw.init = &(struct clk_init_data){
1656 .name = "gcc_gpu_snoc_dvm_gfx_clk",
1657 .ops = &clk_branch2_ops,
1662 static struct clk_branch gcc_npu_at_clk = {
1663 .halt_reg = 0x4d010,
1664 .halt_check = BRANCH_VOTED,
1666 .enable_reg = 0x4d010,
1667 .enable_mask = BIT(0),
1668 .hw.init = &(struct clk_init_data){
1669 .name = "gcc_npu_at_clk",
1670 .ops = &clk_branch2_ops,
1675 static struct clk_branch gcc_npu_axi_clk = {
1676 .halt_reg = 0x4d008,
1677 .halt_check = BRANCH_VOTED,
1679 .enable_reg = 0x4d008,
1680 .enable_mask = BIT(0),
1681 .hw.init = &(struct clk_init_data){
1682 .name = "gcc_npu_axi_clk",
1683 .ops = &clk_branch2_ops,
1688 static struct clk_branch gcc_npu_cfg_ahb_clk = {
1689 .halt_reg = 0x4d004,
1690 .halt_check = BRANCH_HALT,
1691 .hwcg_reg = 0x4d004,
1694 .enable_reg = 0x4d004,
1695 .enable_mask = BIT(0),
1696 .hw.init = &(struct clk_init_data){
1697 .name = "gcc_npu_cfg_ahb_clk",
1698 /* required for npu */
1699 .flags = CLK_IS_CRITICAL,
1700 .ops = &clk_branch2_ops,
1705 static struct clk_branch gcc_npu_gpll0_clk_src = {
1706 .halt_check = BRANCH_HALT_SKIP,
1708 .enable_reg = 0x52004,
1709 .enable_mask = BIT(18),
1710 .hw.init = &(struct clk_init_data){
1711 .name = "gcc_npu_gpll0_clk_src",
1712 .parent_hws = (const struct clk_hw *[]){
1715 .flags = CLK_SET_RATE_PARENT,
1716 .ops = &clk_branch2_ops,
1721 static struct clk_branch gcc_npu_gpll0_div_clk_src = {
1722 .halt_check = BRANCH_HALT_SKIP,
1724 .enable_reg = 0x52004,
1725 .enable_mask = BIT(19),
1726 .hw.init = &(struct clk_init_data){
1727 .name = "gcc_npu_gpll0_div_clk_src",
1728 .parent_hws = (const struct clk_hw *[]){
1729 &gpll0_out_even.clkr.hw },
1731 .flags = CLK_SET_RATE_PARENT,
1732 .ops = &clk_branch2_ops,
1737 static struct clk_branch gcc_npu_trig_clk = {
1738 .halt_reg = 0x4d00c,
1739 .halt_check = BRANCH_VOTED,
1741 .enable_reg = 0x4d00c,
1742 .enable_mask = BIT(0),
1743 .hw.init = &(struct clk_init_data){
1744 .name = "gcc_npu_trig_clk",
1745 .ops = &clk_branch2_ops,
1750 static struct clk_branch gcc_pcie0_phy_refgen_clk = {
1751 .halt_reg = 0x6f02c,
1752 .halt_check = BRANCH_HALT,
1754 .enable_reg = 0x6f02c,
1755 .enable_mask = BIT(0),
1756 .hw.init = &(struct clk_init_data){
1757 .name = "gcc_pcie0_phy_refgen_clk",
1758 .parent_hws = (const struct clk_hw *[]){
1759 &gcc_pcie_phy_refgen_clk_src.clkr.hw },
1761 .flags = CLK_SET_RATE_PARENT,
1762 .ops = &clk_branch2_ops,
1767 static struct clk_branch gcc_pcie1_phy_refgen_clk = {
1768 .halt_reg = 0x6f030,
1769 .halt_check = BRANCH_HALT,
1771 .enable_reg = 0x6f030,
1772 .enable_mask = BIT(0),
1773 .hw.init = &(struct clk_init_data){
1774 .name = "gcc_pcie1_phy_refgen_clk",
1775 .parent_hws = (const struct clk_hw *[]){
1776 &gcc_pcie_phy_refgen_clk_src.clkr.hw },
1778 .flags = CLK_SET_RATE_PARENT,
1779 .ops = &clk_branch2_ops,
1784 static struct clk_branch gcc_pcie_0_aux_clk = {
1785 .halt_reg = 0x6b020,
1786 .halt_check = BRANCH_HALT_VOTED,
1788 .enable_reg = 0x5200c,
1789 .enable_mask = BIT(3),
1790 .hw.init = &(struct clk_init_data){
1791 .name = "gcc_pcie_0_aux_clk",
1792 .parent_hws = (const struct clk_hw *[]){
1793 &gcc_pcie_0_aux_clk_src.clkr.hw },
1795 .flags = CLK_SET_RATE_PARENT,
1796 .ops = &clk_branch2_ops,
1801 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
1802 .halt_reg = 0x6b01c,
1803 .halt_check = BRANCH_HALT_VOTED,
1804 .hwcg_reg = 0x6b01c,
1807 .enable_reg = 0x5200c,
1808 .enable_mask = BIT(2),
1809 .hw.init = &(struct clk_init_data){
1810 .name = "gcc_pcie_0_cfg_ahb_clk",
1811 .ops = &clk_branch2_ops,
1816 static struct clk_branch gcc_pcie_0_clkref_clk = {
1817 .halt_reg = 0x8c00c,
1818 .halt_check = BRANCH_HALT,
1820 .enable_reg = 0x8c00c,
1821 .enable_mask = BIT(0),
1822 .hw.init = &(struct clk_init_data){
1823 .name = "gcc_pcie_0_clkref_clk",
1824 .ops = &clk_branch2_ops,
1829 static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
1830 .halt_reg = 0x6b018,
1831 .halt_check = BRANCH_HALT_VOTED,
1833 .enable_reg = 0x5200c,
1834 .enable_mask = BIT(1),
1835 .hw.init = &(struct clk_init_data){
1836 .name = "gcc_pcie_0_mstr_axi_clk",
1837 .ops = &clk_branch2_ops,
1842 /* Clock ON depends on external parent 'PIPE' clock, so dont poll */
1843 static struct clk_branch gcc_pcie_0_pipe_clk = {
1844 .halt_reg = 0x6b024,
1845 .halt_check = BRANCH_HALT_DELAY,
1847 .enable_reg = 0x5200c,
1848 .enable_mask = BIT(4),
1849 .hw.init = &(struct clk_init_data){
1850 .name = "gcc_pcie_0_pipe_clk",
1851 .ops = &clk_branch2_ops,
1856 static struct clk_branch gcc_pcie_0_slv_axi_clk = {
1857 .halt_reg = 0x6b014,
1858 .halt_check = BRANCH_HALT_VOTED,
1859 .hwcg_reg = 0x6b014,
1862 .enable_reg = 0x5200c,
1863 .enable_mask = BIT(0),
1864 .hw.init = &(struct clk_init_data){
1865 .name = "gcc_pcie_0_slv_axi_clk",
1866 .ops = &clk_branch2_ops,
1871 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
1872 .halt_reg = 0x6b010,
1873 .halt_check = BRANCH_HALT_VOTED,
1875 .enable_reg = 0x5200c,
1876 .enable_mask = BIT(5),
1877 .hw.init = &(struct clk_init_data){
1878 .name = "gcc_pcie_0_slv_q2a_axi_clk",
1879 .ops = &clk_branch2_ops,
1884 static struct clk_branch gcc_pcie_1_aux_clk = {
1885 .halt_reg = 0x8d020,
1886 .halt_check = BRANCH_HALT_VOTED,
1888 .enable_reg = 0x52004,
1889 .enable_mask = BIT(29),
1890 .hw.init = &(struct clk_init_data){
1891 .name = "gcc_pcie_1_aux_clk",
1892 .parent_hws = (const struct clk_hw *[]){
1893 &gcc_pcie_1_aux_clk_src.clkr.hw },
1895 .flags = CLK_SET_RATE_PARENT,
1896 .ops = &clk_branch2_ops,
1901 static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
1902 .halt_reg = 0x8d01c,
1903 .halt_check = BRANCH_HALT_VOTED,
1904 .hwcg_reg = 0x8d01c,
1907 .enable_reg = 0x52004,
1908 .enable_mask = BIT(28),
1909 .hw.init = &(struct clk_init_data){
1910 .name = "gcc_pcie_1_cfg_ahb_clk",
1911 .ops = &clk_branch2_ops,
1916 static struct clk_branch gcc_pcie_1_clkref_clk = {
1917 .halt_reg = 0x8c02c,
1918 .halt_check = BRANCH_HALT,
1920 .enable_reg = 0x8c02c,
1921 .enable_mask = BIT(0),
1922 .hw.init = &(struct clk_init_data){
1923 .name = "gcc_pcie_1_clkref_clk",
1924 .ops = &clk_branch2_ops,
1929 static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
1930 .halt_reg = 0x8d018,
1931 .halt_check = BRANCH_HALT_VOTED,
1933 .enable_reg = 0x52004,
1934 .enable_mask = BIT(27),
1935 .hw.init = &(struct clk_init_data){
1936 .name = "gcc_pcie_1_mstr_axi_clk",
1937 .ops = &clk_branch2_ops,
1942 /* Clock ON depends on external parent 'PIPE' clock, so dont poll */
1943 static struct clk_branch gcc_pcie_1_pipe_clk = {
1944 .halt_reg = 0x8d024,
1945 .halt_check = BRANCH_HALT_DELAY,
1947 .enable_reg = 0x52004,
1948 .enable_mask = BIT(30),
1949 .hw.init = &(struct clk_init_data){
1950 .name = "gcc_pcie_1_pipe_clk",
1951 .ops = &clk_branch2_ops,
1956 static struct clk_branch gcc_pcie_1_slv_axi_clk = {
1957 .halt_reg = 0x8d014,
1958 .halt_check = BRANCH_HALT_VOTED,
1959 .hwcg_reg = 0x8d014,
1962 .enable_reg = 0x52004,
1963 .enable_mask = BIT(26),
1964 .hw.init = &(struct clk_init_data){
1965 .name = "gcc_pcie_1_slv_axi_clk",
1966 .ops = &clk_branch2_ops,
1971 static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = {
1972 .halt_reg = 0x8d010,
1973 .halt_check = BRANCH_HALT_VOTED,
1975 .enable_reg = 0x52004,
1976 .enable_mask = BIT(25),
1977 .hw.init = &(struct clk_init_data){
1978 .name = "gcc_pcie_1_slv_q2a_axi_clk",
1979 .ops = &clk_branch2_ops,
1984 static struct clk_branch gcc_pcie_phy_aux_clk = {
1985 .halt_reg = 0x6f004,
1986 .halt_check = BRANCH_HALT,
1988 .enable_reg = 0x6f004,
1989 .enable_mask = BIT(0),
1990 .hw.init = &(struct clk_init_data){
1991 .name = "gcc_pcie_phy_aux_clk",
1992 .parent_hws = (const struct clk_hw *[]){
1993 &gcc_pcie_0_aux_clk_src.clkr.hw },
1995 .flags = CLK_SET_RATE_PARENT,
1996 .ops = &clk_branch2_ops,
2001 static struct clk_branch gcc_pdm2_clk = {
2002 .halt_reg = 0x3300c,
2003 .halt_check = BRANCH_HALT,
2005 .enable_reg = 0x3300c,
2006 .enable_mask = BIT(0),
2007 .hw.init = &(struct clk_init_data){
2008 .name = "gcc_pdm2_clk",
2009 .parent_hws = (const struct clk_hw *[]){
2010 &gcc_pdm2_clk_src.clkr.hw },
2012 .flags = CLK_SET_RATE_PARENT,
2013 .ops = &clk_branch2_ops,
2018 static struct clk_branch gcc_pdm_ahb_clk = {
2019 .halt_reg = 0x33004,
2020 .halt_check = BRANCH_HALT,
2021 .hwcg_reg = 0x33004,
2024 .enable_reg = 0x33004,
2025 .enable_mask = BIT(0),
2026 .hw.init = &(struct clk_init_data){
2027 .name = "gcc_pdm_ahb_clk",
2028 .ops = &clk_branch2_ops,
2033 static struct clk_branch gcc_pdm_xo4_clk = {
2034 .halt_reg = 0x33008,
2035 .halt_check = BRANCH_HALT,
2037 .enable_reg = 0x33008,
2038 .enable_mask = BIT(0),
2039 .hw.init = &(struct clk_init_data){
2040 .name = "gcc_pdm_xo4_clk",
2041 .ops = &clk_branch2_ops,
2046 static struct clk_branch gcc_prng_ahb_clk = {
2047 .halt_reg = 0x34004,
2048 .halt_check = BRANCH_HALT_VOTED,
2050 .enable_reg = 0x52004,
2051 .enable_mask = BIT(13),
2052 .hw.init = &(struct clk_init_data){
2053 .name = "gcc_prng_ahb_clk",
2054 .ops = &clk_branch2_ops,
2059 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
2061 .halt_check = BRANCH_HALT,
2065 .enable_reg = 0xb018,
2066 .enable_mask = BIT(0),
2067 .hw.init = &(struct clk_init_data){
2068 .name = "gcc_qmip_camera_nrt_ahb_clk",
2069 .ops = &clk_branch2_ops,
2074 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
2076 .halt_check = BRANCH_HALT,
2080 .enable_reg = 0xb01c,
2081 .enable_mask = BIT(0),
2082 .hw.init = &(struct clk_init_data){
2083 .name = "gcc_qmip_camera_rt_ahb_clk",
2084 .ops = &clk_branch2_ops,
2089 static struct clk_branch gcc_qmip_disp_ahb_clk = {
2091 .halt_check = BRANCH_HALT,
2095 .enable_reg = 0xb020,
2096 .enable_mask = BIT(0),
2097 .hw.init = &(struct clk_init_data){
2098 .name = "gcc_qmip_disp_ahb_clk",
2099 .ops = &clk_branch2_ops,
2104 static struct clk_branch gcc_qmip_video_cvp_ahb_clk = {
2106 .halt_check = BRANCH_HALT,
2110 .enable_reg = 0xb010,
2111 .enable_mask = BIT(0),
2112 .hw.init = &(struct clk_init_data){
2113 .name = "gcc_qmip_video_cvp_ahb_clk",
2114 .ops = &clk_branch2_ops,
2119 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
2121 .halt_check = BRANCH_HALT,
2125 .enable_reg = 0xb014,
2126 .enable_mask = BIT(0),
2127 .hw.init = &(struct clk_init_data){
2128 .name = "gcc_qmip_video_vcodec_ahb_clk",
2129 .ops = &clk_branch2_ops,
2134 static struct clk_branch gcc_qspi_cnoc_periph_ahb_clk = {
2135 .halt_reg = 0x4b000,
2136 .halt_check = BRANCH_HALT,
2138 .enable_reg = 0x4b000,
2139 .enable_mask = BIT(0),
2140 .hw.init = &(struct clk_init_data){
2141 .name = "gcc_qspi_cnoc_periph_ahb_clk",
2142 .ops = &clk_branch2_ops,
2147 static struct clk_branch gcc_qspi_core_clk = {
2148 .halt_reg = 0x4b004,
2149 .halt_check = BRANCH_HALT,
2151 .enable_reg = 0x4b004,
2152 .enable_mask = BIT(0),
2153 .hw.init = &(struct clk_init_data){
2154 .name = "gcc_qspi_core_clk",
2155 .parent_hws = (const struct clk_hw *[]){
2156 &gcc_qspi_core_clk_src.clkr.hw },
2158 .flags = CLK_SET_RATE_PARENT,
2159 .ops = &clk_branch2_ops,
2164 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
2165 .halt_reg = 0x17144,
2166 .halt_check = BRANCH_HALT_VOTED,
2168 .enable_reg = 0x5200c,
2169 .enable_mask = BIT(10),
2170 .hw.init = &(struct clk_init_data){
2171 .name = "gcc_qupv3_wrap0_s0_clk",
2172 .parent_hws = (const struct clk_hw *[]){
2173 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw },
2175 .flags = CLK_SET_RATE_PARENT,
2176 .ops = &clk_branch2_ops,
2181 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
2182 .halt_reg = 0x17274,
2183 .halt_check = BRANCH_HALT_VOTED,
2185 .enable_reg = 0x5200c,
2186 .enable_mask = BIT(11),
2187 .hw.init = &(struct clk_init_data){
2188 .name = "gcc_qupv3_wrap0_s1_clk",
2189 .parent_hws = (const struct clk_hw *[]){
2190 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw },
2192 .flags = CLK_SET_RATE_PARENT,
2193 .ops = &clk_branch2_ops,
2198 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
2199 .halt_reg = 0x173a4,
2200 .halt_check = BRANCH_HALT_VOTED,
2202 .enable_reg = 0x5200c,
2203 .enable_mask = BIT(12),
2204 .hw.init = &(struct clk_init_data){
2205 .name = "gcc_qupv3_wrap0_s2_clk",
2206 .parent_hws = (const struct clk_hw *[]){
2207 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw },
2209 .flags = CLK_SET_RATE_PARENT,
2210 .ops = &clk_branch2_ops,
2215 static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
2216 .halt_reg = 0x174d4,
2217 .halt_check = BRANCH_HALT_VOTED,
2219 .enable_reg = 0x5200c,
2220 .enable_mask = BIT(13),
2221 .hw.init = &(struct clk_init_data){
2222 .name = "gcc_qupv3_wrap0_s3_clk",
2223 .parent_hws = (const struct clk_hw *[]){
2224 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw },
2226 .flags = CLK_SET_RATE_PARENT,
2227 .ops = &clk_branch2_ops,
2232 static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
2233 .halt_reg = 0x17604,
2234 .halt_check = BRANCH_HALT_VOTED,
2236 .enable_reg = 0x5200c,
2237 .enable_mask = BIT(14),
2238 .hw.init = &(struct clk_init_data){
2239 .name = "gcc_qupv3_wrap0_s4_clk",
2240 .parent_hws = (const struct clk_hw *[]){
2241 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw },
2243 .flags = CLK_SET_RATE_PARENT,
2244 .ops = &clk_branch2_ops,
2249 static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
2250 .halt_reg = 0x17734,
2251 .halt_check = BRANCH_HALT_VOTED,
2253 .enable_reg = 0x5200c,
2254 .enable_mask = BIT(15),
2255 .hw.init = &(struct clk_init_data){
2256 .name = "gcc_qupv3_wrap0_s5_clk",
2257 .parent_hws = (const struct clk_hw *[]){
2258 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw },
2260 .flags = CLK_SET_RATE_PARENT,
2261 .ops = &clk_branch2_ops,
2266 static struct clk_branch gcc_qupv3_wrap0_s6_clk = {
2267 .halt_reg = 0x17864,
2268 .halt_check = BRANCH_HALT_VOTED,
2270 .enable_reg = 0x5200c,
2271 .enable_mask = BIT(16),
2272 .hw.init = &(struct clk_init_data){
2273 .name = "gcc_qupv3_wrap0_s6_clk",
2274 .parent_hws = (const struct clk_hw *[]){
2275 &gcc_qupv3_wrap0_s6_clk_src.clkr.hw },
2277 .flags = CLK_SET_RATE_PARENT,
2278 .ops = &clk_branch2_ops,
2283 static struct clk_branch gcc_qupv3_wrap0_s7_clk = {
2284 .halt_reg = 0x17994,
2285 .halt_check = BRANCH_HALT_VOTED,
2287 .enable_reg = 0x5200c,
2288 .enable_mask = BIT(17),
2289 .hw.init = &(struct clk_init_data){
2290 .name = "gcc_qupv3_wrap0_s7_clk",
2291 .parent_hws = (const struct clk_hw *[]){
2292 &gcc_qupv3_wrap0_s7_clk_src.clkr.hw },
2294 .flags = CLK_SET_RATE_PARENT,
2295 .ops = &clk_branch2_ops,
2300 static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
2301 .halt_reg = 0x18144,
2302 .halt_check = BRANCH_HALT_VOTED,
2304 .enable_reg = 0x5200c,
2305 .enable_mask = BIT(22),
2306 .hw.init = &(struct clk_init_data){
2307 .name = "gcc_qupv3_wrap1_s0_clk",
2308 .parent_hws = (const struct clk_hw *[]){
2309 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw },
2311 .flags = CLK_SET_RATE_PARENT,
2312 .ops = &clk_branch2_ops,
2317 static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
2318 .halt_reg = 0x18274,
2319 .halt_check = BRANCH_HALT_VOTED,
2321 .enable_reg = 0x5200c,
2322 .enable_mask = BIT(23),
2323 .hw.init = &(struct clk_init_data){
2324 .name = "gcc_qupv3_wrap1_s1_clk",
2325 .parent_hws = (const struct clk_hw *[]){
2326 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw },
2328 .flags = CLK_SET_RATE_PARENT,
2329 .ops = &clk_branch2_ops,
2334 static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
2335 .halt_reg = 0x183a4,
2336 .halt_check = BRANCH_HALT_VOTED,
2338 .enable_reg = 0x5200c,
2339 .enable_mask = BIT(24),
2340 .hw.init = &(struct clk_init_data){
2341 .name = "gcc_qupv3_wrap1_s2_clk",
2342 .parent_hws = (const struct clk_hw *[]){
2343 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw },
2345 .flags = CLK_SET_RATE_PARENT,
2346 .ops = &clk_branch2_ops,
2351 static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
2352 .halt_reg = 0x184d4,
2353 .halt_check = BRANCH_HALT_VOTED,
2355 .enable_reg = 0x5200c,
2356 .enable_mask = BIT(25),
2357 .hw.init = &(struct clk_init_data){
2358 .name = "gcc_qupv3_wrap1_s3_clk",
2359 .parent_hws = (const struct clk_hw *[]){
2360 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw },
2362 .flags = CLK_SET_RATE_PARENT,
2363 .ops = &clk_branch2_ops,
2368 static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
2369 .halt_reg = 0x18604,
2370 .halt_check = BRANCH_HALT_VOTED,
2372 .enable_reg = 0x5200c,
2373 .enable_mask = BIT(26),
2374 .hw.init = &(struct clk_init_data){
2375 .name = "gcc_qupv3_wrap1_s4_clk",
2376 .parent_hws = (const struct clk_hw *[]){
2377 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw },
2379 .flags = CLK_SET_RATE_PARENT,
2380 .ops = &clk_branch2_ops,
2385 static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
2386 .halt_reg = 0x18734,
2387 .halt_check = BRANCH_HALT_VOTED,
2389 .enable_reg = 0x5200c,
2390 .enable_mask = BIT(27),
2391 .hw.init = &(struct clk_init_data){
2392 .name = "gcc_qupv3_wrap1_s5_clk",
2393 .parent_hws = (const struct clk_hw *[]){
2394 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw },
2396 .flags = CLK_SET_RATE_PARENT,
2397 .ops = &clk_branch2_ops,
2402 static struct clk_branch gcc_qupv3_wrap2_s0_clk = {
2403 .halt_reg = 0x1e144,
2404 .halt_check = BRANCH_HALT_VOTED,
2406 .enable_reg = 0x52014,
2407 .enable_mask = BIT(4),
2408 .hw.init = &(struct clk_init_data){
2409 .name = "gcc_qupv3_wrap2_s0_clk",
2410 .parent_hws = (const struct clk_hw *[]){
2411 &gcc_qupv3_wrap2_s0_clk_src.clkr.hw },
2413 .flags = CLK_SET_RATE_PARENT,
2414 .ops = &clk_branch2_ops,
2419 static struct clk_branch gcc_qupv3_wrap2_s1_clk = {
2420 .halt_reg = 0x1e274,
2421 .halt_check = BRANCH_HALT_VOTED,
2423 .enable_reg = 0x52014,
2424 .enable_mask = BIT(5),
2425 .hw.init = &(struct clk_init_data){
2426 .name = "gcc_qupv3_wrap2_s1_clk",
2427 .parent_hws = (const struct clk_hw *[]){
2428 &gcc_qupv3_wrap2_s1_clk_src.clkr.hw },
2430 .flags = CLK_SET_RATE_PARENT,
2431 .ops = &clk_branch2_ops,
2436 static struct clk_branch gcc_qupv3_wrap2_s2_clk = {
2437 .halt_reg = 0x1e3a4,
2438 .halt_check = BRANCH_HALT_VOTED,
2440 .enable_reg = 0x52014,
2441 .enable_mask = BIT(6),
2442 .hw.init = &(struct clk_init_data){
2443 .name = "gcc_qupv3_wrap2_s2_clk",
2444 .parent_hws = (const struct clk_hw *[]){
2445 &gcc_qupv3_wrap2_s2_clk_src.clkr.hw },
2447 .flags = CLK_SET_RATE_PARENT,
2448 .ops = &clk_branch2_ops,
2453 static struct clk_branch gcc_qupv3_wrap2_s3_clk = {
2454 .halt_reg = 0x1e4d4,
2455 .halt_check = BRANCH_HALT_VOTED,
2457 .enable_reg = 0x52014,
2458 .enable_mask = BIT(7),
2459 .hw.init = &(struct clk_init_data){
2460 .name = "gcc_qupv3_wrap2_s3_clk",
2461 .parent_hws = (const struct clk_hw *[]){
2462 &gcc_qupv3_wrap2_s3_clk_src.clkr.hw },
2464 .flags = CLK_SET_RATE_PARENT,
2465 .ops = &clk_branch2_ops,
2470 static struct clk_branch gcc_qupv3_wrap2_s4_clk = {
2471 .halt_reg = 0x1e604,
2472 .halt_check = BRANCH_HALT_VOTED,
2474 .enable_reg = 0x52014,
2475 .enable_mask = BIT(8),
2476 .hw.init = &(struct clk_init_data){
2477 .name = "gcc_qupv3_wrap2_s4_clk",
2478 .parent_hws = (const struct clk_hw *[]){
2479 &gcc_qupv3_wrap2_s4_clk_src.clkr.hw },
2481 .flags = CLK_SET_RATE_PARENT,
2482 .ops = &clk_branch2_ops,
2487 static struct clk_branch gcc_qupv3_wrap2_s5_clk = {
2488 .halt_reg = 0x1e734,
2489 .halt_check = BRANCH_HALT_VOTED,
2491 .enable_reg = 0x52014,
2492 .enable_mask = BIT(9),
2493 .hw.init = &(struct clk_init_data){
2494 .name = "gcc_qupv3_wrap2_s5_clk",
2495 .parent_hws = (const struct clk_hw *[]){
2496 &gcc_qupv3_wrap2_s5_clk_src.clkr.hw },
2498 .flags = CLK_SET_RATE_PARENT,
2499 .ops = &clk_branch2_ops,
2504 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
2505 .halt_reg = 0x17004,
2506 .halt_check = BRANCH_HALT_VOTED,
2508 .enable_reg = 0x5200c,
2509 .enable_mask = BIT(6),
2510 .hw.init = &(struct clk_init_data){
2511 .name = "gcc_qupv3_wrap_0_m_ahb_clk",
2512 .ops = &clk_branch2_ops,
2517 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
2518 .halt_reg = 0x17008,
2519 .halt_check = BRANCH_HALT_VOTED,
2520 .hwcg_reg = 0x17008,
2523 .enable_reg = 0x5200c,
2524 .enable_mask = BIT(7),
2525 .hw.init = &(struct clk_init_data){
2526 .name = "gcc_qupv3_wrap_0_s_ahb_clk",
2527 .ops = &clk_branch2_ops,
2532 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
2533 .halt_reg = 0x18004,
2534 .halt_check = BRANCH_HALT_VOTED,
2536 .enable_reg = 0x5200c,
2537 .enable_mask = BIT(20),
2538 .hw.init = &(struct clk_init_data){
2539 .name = "gcc_qupv3_wrap_1_m_ahb_clk",
2540 .ops = &clk_branch2_ops,
2545 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
2546 .halt_reg = 0x18008,
2547 .halt_check = BRANCH_HALT_VOTED,
2548 .hwcg_reg = 0x18008,
2551 .enable_reg = 0x5200c,
2552 .enable_mask = BIT(21),
2553 .hw.init = &(struct clk_init_data){
2554 .name = "gcc_qupv3_wrap_1_s_ahb_clk",
2555 .ops = &clk_branch2_ops,
2560 static struct clk_branch gcc_qupv3_wrap_2_m_ahb_clk = {
2561 .halt_reg = 0x1e004,
2562 .halt_check = BRANCH_HALT_VOTED,
2564 .enable_reg = 0x52014,
2565 .enable_mask = BIT(2),
2566 .hw.init = &(struct clk_init_data){
2567 .name = "gcc_qupv3_wrap_2_m_ahb_clk",
2568 .ops = &clk_branch2_ops,
2573 static struct clk_branch gcc_qupv3_wrap_2_s_ahb_clk = {
2574 .halt_reg = 0x1e008,
2575 .halt_check = BRANCH_HALT_VOTED,
2576 .hwcg_reg = 0x1e008,
2579 .enable_reg = 0x52014,
2580 .enable_mask = BIT(1),
2581 .hw.init = &(struct clk_init_data){
2582 .name = "gcc_qupv3_wrap_2_s_ahb_clk",
2583 .ops = &clk_branch2_ops,
2588 static struct clk_branch gcc_sdcc2_ahb_clk = {
2589 .halt_reg = 0x14008,
2590 .halt_check = BRANCH_HALT,
2592 .enable_reg = 0x14008,
2593 .enable_mask = BIT(0),
2594 .hw.init = &(struct clk_init_data){
2595 .name = "gcc_sdcc2_ahb_clk",
2596 .ops = &clk_branch2_ops,
2601 static struct clk_branch gcc_sdcc2_apps_clk = {
2602 .halt_reg = 0x14004,
2603 .halt_check = BRANCH_HALT,
2605 .enable_reg = 0x14004,
2606 .enable_mask = BIT(0),
2607 .hw.init = &(struct clk_init_data){
2608 .name = "gcc_sdcc2_apps_clk",
2609 .parent_hws = (const struct clk_hw *[]){
2610 &gcc_sdcc2_apps_clk_src.clkr.hw },
2612 .flags = CLK_SET_RATE_PARENT,
2613 .ops = &clk_branch2_ops,
2618 static struct clk_branch gcc_sdcc4_ahb_clk = {
2619 .halt_reg = 0x16008,
2620 .halt_check = BRANCH_HALT,
2622 .enable_reg = 0x16008,
2623 .enable_mask = BIT(0),
2624 .hw.init = &(struct clk_init_data){
2625 .name = "gcc_sdcc4_ahb_clk",
2626 .ops = &clk_branch2_ops,
2631 static struct clk_branch gcc_sdcc4_apps_clk = {
2632 .halt_reg = 0x16004,
2633 .halt_check = BRANCH_HALT,
2635 .enable_reg = 0x16004,
2636 .enable_mask = BIT(0),
2637 .hw.init = &(struct clk_init_data){
2638 .name = "gcc_sdcc4_apps_clk",
2639 .parent_hws = (const struct clk_hw *[]){
2640 &gcc_sdcc4_apps_clk_src.clkr.hw },
2642 .flags = CLK_SET_RATE_PARENT,
2643 .ops = &clk_branch2_ops,
2648 static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {
2649 .halt_reg = 0x4819c,
2650 .halt_check = BRANCH_HALT_VOTED,
2652 .enable_reg = 0x52004,
2653 .enable_mask = BIT(0),
2654 .hw.init = &(struct clk_init_data){
2655 .name = "gcc_sys_noc_cpuss_ahb_clk",
2656 .parent_hws = (const struct clk_hw *[]){
2657 &gcc_cpuss_ahb_clk_src.clkr.hw },
2659 /* required for cpuss */
2660 .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
2661 .ops = &clk_branch2_ops,
2666 static struct clk_branch gcc_tsif_ahb_clk = {
2667 .halt_reg = 0x36004,
2668 .halt_check = BRANCH_HALT,
2670 .enable_reg = 0x36004,
2671 .enable_mask = BIT(0),
2672 .hw.init = &(struct clk_init_data){
2673 .name = "gcc_tsif_ahb_clk",
2674 .ops = &clk_branch2_ops,
2679 static struct clk_branch gcc_tsif_inactivity_timers_clk = {
2680 .halt_reg = 0x3600c,
2681 .halt_check = BRANCH_HALT,
2683 .enable_reg = 0x3600c,
2684 .enable_mask = BIT(0),
2685 .hw.init = &(struct clk_init_data){
2686 .name = "gcc_tsif_inactivity_timers_clk",
2687 .ops = &clk_branch2_ops,
2692 static struct clk_branch gcc_tsif_ref_clk = {
2693 .halt_reg = 0x36008,
2694 .halt_check = BRANCH_HALT,
2696 .enable_reg = 0x36008,
2697 .enable_mask = BIT(0),
2698 .hw.init = &(struct clk_init_data){
2699 .name = "gcc_tsif_ref_clk",
2700 .parent_hws = (const struct clk_hw *[]){
2701 &gcc_tsif_ref_clk_src.clkr.hw },
2703 .flags = CLK_SET_RATE_PARENT,
2704 .ops = &clk_branch2_ops,
2709 static struct clk_branch gcc_ufs_card_ahb_clk = {
2710 .halt_reg = 0x75014,
2711 .halt_check = BRANCH_HALT,
2712 .hwcg_reg = 0x75014,
2715 .enable_reg = 0x75014,
2716 .enable_mask = BIT(0),
2717 .hw.init = &(struct clk_init_data){
2718 .name = "gcc_ufs_card_ahb_clk",
2719 .ops = &clk_branch2_ops,
2724 static struct clk_branch gcc_ufs_card_axi_clk = {
2725 .halt_reg = 0x75010,
2726 .halt_check = BRANCH_HALT,
2727 .hwcg_reg = 0x75010,
2730 .enable_reg = 0x75010,
2731 .enable_mask = BIT(0),
2732 .hw.init = &(struct clk_init_data){
2733 .name = "gcc_ufs_card_axi_clk",
2734 .parent_hws = (const struct clk_hw *[]){
2735 &gcc_ufs_card_axi_clk_src.clkr.hw },
2737 .flags = CLK_SET_RATE_PARENT,
2738 .ops = &clk_branch2_ops,
2743 static struct clk_branch gcc_ufs_card_axi_hw_ctl_clk = {
2744 .halt_reg = 0x75010,
2745 .halt_check = BRANCH_HALT,
2746 .hwcg_reg = 0x75010,
2749 .enable_reg = 0x75010,
2750 .enable_mask = BIT(1),
2751 .hw.init = &(struct clk_init_data){
2752 .name = "gcc_ufs_card_axi_hw_ctl_clk",
2753 .parent_hws = (const struct clk_hw *[]){
2754 &gcc_ufs_card_axi_clk.clkr.hw },
2756 .flags = CLK_SET_RATE_PARENT,
2757 .ops = &clk_branch_simple_ops,
2762 static struct clk_branch gcc_ufs_card_clkref_clk = {
2763 .halt_reg = 0x8c004,
2764 .halt_check = BRANCH_HALT,
2766 .enable_reg = 0x8c004,
2767 .enable_mask = BIT(0),
2768 .hw.init = &(struct clk_init_data){
2769 .name = "gcc_ufs_card_clkref_clk",
2770 .ops = &clk_branch2_ops,
2775 static struct clk_branch gcc_ufs_card_ice_core_clk = {
2776 .halt_reg = 0x7505c,
2777 .halt_check = BRANCH_HALT,
2778 .hwcg_reg = 0x7505c,
2781 .enable_reg = 0x7505c,
2782 .enable_mask = BIT(0),
2783 .hw.init = &(struct clk_init_data){
2784 .name = "gcc_ufs_card_ice_core_clk",
2785 .parent_hws = (const struct clk_hw *[]){
2786 &gcc_ufs_card_ice_core_clk_src.clkr.hw },
2788 .flags = CLK_SET_RATE_PARENT,
2789 .ops = &clk_branch2_ops,
2794 static struct clk_branch gcc_ufs_card_ice_core_hw_ctl_clk = {
2795 .halt_reg = 0x7505c,
2796 .halt_check = BRANCH_HALT,
2797 .hwcg_reg = 0x7505c,
2800 .enable_reg = 0x7505c,
2801 .enable_mask = BIT(1),
2802 .hw.init = &(struct clk_init_data){
2803 .name = "gcc_ufs_card_ice_core_hw_ctl_clk",
2804 .parent_hws = (const struct clk_hw *[]){
2805 &gcc_ufs_card_ice_core_clk.clkr.hw },
2807 .flags = CLK_SET_RATE_PARENT,
2808 .ops = &clk_branch_simple_ops,
2813 static struct clk_branch gcc_ufs_card_phy_aux_clk = {
2814 .halt_reg = 0x75090,
2815 .halt_check = BRANCH_HALT,
2816 .hwcg_reg = 0x75090,
2819 .enable_reg = 0x75090,
2820 .enable_mask = BIT(0),
2821 .hw.init = &(struct clk_init_data){
2822 .name = "gcc_ufs_card_phy_aux_clk",
2823 .parent_hws = (const struct clk_hw *[]){
2824 &gcc_ufs_card_phy_aux_clk_src.clkr.hw },
2826 .flags = CLK_SET_RATE_PARENT,
2827 .ops = &clk_branch2_ops,
2832 static struct clk_branch gcc_ufs_card_phy_aux_hw_ctl_clk = {
2833 .halt_reg = 0x75090,
2834 .halt_check = BRANCH_HALT,
2835 .hwcg_reg = 0x75090,
2838 .enable_reg = 0x75090,
2839 .enable_mask = BIT(1),
2840 .hw.init = &(struct clk_init_data){
2841 .name = "gcc_ufs_card_phy_aux_hw_ctl_clk",
2842 .parent_hws = (const struct clk_hw *[]){
2843 &gcc_ufs_card_phy_aux_clk.clkr.hw },
2845 .flags = CLK_SET_RATE_PARENT,
2846 .ops = &clk_branch_simple_ops,
2851 /* external clocks so add BRANCH_HALT_SKIP */
2852 static struct clk_branch gcc_ufs_card_rx_symbol_0_clk = {
2853 .halt_check = BRANCH_HALT_SKIP,
2855 .enable_reg = 0x7501c,
2856 .enable_mask = BIT(0),
2857 .hw.init = &(struct clk_init_data){
2858 .name = "gcc_ufs_card_rx_symbol_0_clk",
2859 .ops = &clk_branch2_ops,
2864 /* external clocks so add BRANCH_HALT_SKIP */
2865 static struct clk_branch gcc_ufs_card_rx_symbol_1_clk = {
2866 .halt_check = BRANCH_HALT_SKIP,
2868 .enable_reg = 0x750ac,
2869 .enable_mask = BIT(0),
2870 .hw.init = &(struct clk_init_data){
2871 .name = "gcc_ufs_card_rx_symbol_1_clk",
2872 .ops = &clk_branch2_ops,
2877 /* external clocks so add BRANCH_HALT_SKIP */
2878 static struct clk_branch gcc_ufs_card_tx_symbol_0_clk = {
2879 .halt_check = BRANCH_HALT_SKIP,
2881 .enable_reg = 0x75018,
2882 .enable_mask = BIT(0),
2883 .hw.init = &(struct clk_init_data){
2884 .name = "gcc_ufs_card_tx_symbol_0_clk",
2885 .ops = &clk_branch2_ops,
2890 static struct clk_branch gcc_ufs_card_unipro_core_clk = {
2891 .halt_reg = 0x75058,
2892 .halt_check = BRANCH_HALT,
2893 .hwcg_reg = 0x75058,
2896 .enable_reg = 0x75058,
2897 .enable_mask = BIT(0),
2898 .hw.init = &(struct clk_init_data){
2899 .name = "gcc_ufs_card_unipro_core_clk",
2900 .parent_hws = (const struct clk_hw *[]){
2901 &gcc_ufs_card_unipro_core_clk_src.clkr.hw },
2903 .flags = CLK_SET_RATE_PARENT,
2904 .ops = &clk_branch2_ops,
2909 static struct clk_branch gcc_ufs_card_unipro_core_hw_ctl_clk = {
2910 .halt_reg = 0x75058,
2911 .halt_check = BRANCH_HALT,
2912 .hwcg_reg = 0x75058,
2915 .enable_reg = 0x75058,
2916 .enable_mask = BIT(1),
2917 .hw.init = &(struct clk_init_data){
2918 .name = "gcc_ufs_card_unipro_core_hw_ctl_clk",
2919 .parent_hws = (const struct clk_hw *[]){
2920 &gcc_ufs_card_unipro_core_clk.clkr.hw },
2922 .flags = CLK_SET_RATE_PARENT,
2923 .ops = &clk_branch_simple_ops,
2928 static struct clk_branch gcc_ufs_mem_clkref_clk = {
2929 .halt_reg = 0x8c000,
2930 .halt_check = BRANCH_HALT,
2932 .enable_reg = 0x8c000,
2933 .enable_mask = BIT(0),
2934 .hw.init = &(struct clk_init_data){
2935 .name = "gcc_ufs_mem_clkref_clk",
2936 .ops = &clk_branch2_ops,
2941 static struct clk_branch gcc_ufs_phy_ahb_clk = {
2942 .halt_reg = 0x77014,
2943 .halt_check = BRANCH_HALT,
2944 .hwcg_reg = 0x77014,
2947 .enable_reg = 0x77014,
2948 .enable_mask = BIT(0),
2949 .hw.init = &(struct clk_init_data){
2950 .name = "gcc_ufs_phy_ahb_clk",
2951 .ops = &clk_branch2_ops,
2956 static struct clk_branch gcc_ufs_phy_axi_clk = {
2957 .halt_reg = 0x77010,
2958 .halt_check = BRANCH_HALT,
2959 .hwcg_reg = 0x77010,
2962 .enable_reg = 0x77010,
2963 .enable_mask = BIT(0),
2964 .hw.init = &(struct clk_init_data){
2965 .name = "gcc_ufs_phy_axi_clk",
2966 .parent_hws = (const struct clk_hw *[]){
2967 &gcc_ufs_phy_axi_clk_src.clkr.hw },
2969 .flags = CLK_SET_RATE_PARENT,
2970 .ops = &clk_branch2_ops,
2975 static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = {
2976 .halt_reg = 0x77010,
2977 .halt_check = BRANCH_HALT,
2978 .hwcg_reg = 0x77010,
2981 .enable_reg = 0x77010,
2982 .enable_mask = BIT(1),
2983 .hw.init = &(struct clk_init_data){
2984 .name = "gcc_ufs_phy_axi_hw_ctl_clk",
2985 .parent_hws = (const struct clk_hw *[]){
2986 &gcc_ufs_phy_axi_clk.clkr.hw },
2988 .flags = CLK_SET_RATE_PARENT,
2989 .ops = &clk_branch_simple_ops,
2994 static struct clk_branch gcc_ufs_phy_ice_core_clk = {
2995 .halt_reg = 0x7705c,
2996 .halt_check = BRANCH_HALT,
2997 .hwcg_reg = 0x7705c,
3000 .enable_reg = 0x7705c,
3001 .enable_mask = BIT(0),
3002 .hw.init = &(struct clk_init_data){
3003 .name = "gcc_ufs_phy_ice_core_clk",
3004 .parent_hws = (const struct clk_hw *[]){
3005 &gcc_ufs_phy_ice_core_clk_src.clkr.hw },
3007 .flags = CLK_SET_RATE_PARENT,
3008 .ops = &clk_branch2_ops,
3013 static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = {
3014 .halt_reg = 0x7705c,
3015 .halt_check = BRANCH_HALT,
3016 .hwcg_reg = 0x7705c,
3019 .enable_reg = 0x7705c,
3020 .enable_mask = BIT(1),
3021 .hw.init = &(struct clk_init_data){
3022 .name = "gcc_ufs_phy_ice_core_hw_ctl_clk",
3023 .parent_hws = (const struct clk_hw *[]){
3024 &gcc_ufs_phy_ice_core_clk.clkr.hw },
3026 .flags = CLK_SET_RATE_PARENT,
3027 .ops = &clk_branch_simple_ops,
3032 static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
3033 .halt_reg = 0x77090,
3034 .halt_check = BRANCH_HALT,
3035 .hwcg_reg = 0x77090,
3038 .enable_reg = 0x77090,
3039 .enable_mask = BIT(0),
3040 .hw.init = &(struct clk_init_data){
3041 .name = "gcc_ufs_phy_phy_aux_clk",
3042 .parent_hws = (const struct clk_hw *[]){
3043 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw },
3045 .flags = CLK_SET_RATE_PARENT,
3046 .ops = &clk_branch2_ops,
3051 static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = {
3052 .halt_reg = 0x77090,
3053 .halt_check = BRANCH_HALT,
3054 .hwcg_reg = 0x77090,
3057 .enable_reg = 0x77090,
3058 .enable_mask = BIT(1),
3059 .hw.init = &(struct clk_init_data){
3060 .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk",
3061 .parent_hws = (const struct clk_hw *[]){
3062 &gcc_ufs_phy_phy_aux_clk.clkr.hw },
3064 .flags = CLK_SET_RATE_PARENT,
3065 .ops = &clk_branch_simple_ops,
3070 /* external clocks so add BRANCH_HALT_SKIP */
3071 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
3072 .halt_check = BRANCH_HALT_SKIP,
3074 .enable_reg = 0x7701c,
3075 .enable_mask = BIT(0),
3076 .hw.init = &(struct clk_init_data){
3077 .name = "gcc_ufs_phy_rx_symbol_0_clk",
3078 .ops = &clk_branch2_ops,
3083 /* external clocks so add BRANCH_HALT_SKIP */
3084 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
3085 .halt_check = BRANCH_HALT_SKIP,
3087 .enable_reg = 0x770ac,
3088 .enable_mask = BIT(0),
3089 .hw.init = &(struct clk_init_data){
3090 .name = "gcc_ufs_phy_rx_symbol_1_clk",
3091 .ops = &clk_branch2_ops,
3096 /* external clocks so add BRANCH_HALT_SKIP */
3097 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
3098 .halt_check = BRANCH_HALT_SKIP,
3100 .enable_reg = 0x77018,
3101 .enable_mask = BIT(0),
3102 .hw.init = &(struct clk_init_data){
3103 .name = "gcc_ufs_phy_tx_symbol_0_clk",
3104 .ops = &clk_branch2_ops,
3109 static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
3110 .halt_reg = 0x77058,
3111 .halt_check = BRANCH_HALT,
3112 .hwcg_reg = 0x77058,
3115 .enable_reg = 0x77058,
3116 .enable_mask = BIT(0),
3117 .hw.init = &(struct clk_init_data){
3118 .name = "gcc_ufs_phy_unipro_core_clk",
3119 .parent_hws = (const struct clk_hw *[]){
3120 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw },
3122 .flags = CLK_SET_RATE_PARENT,
3123 .ops = &clk_branch2_ops,
3128 static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = {
3129 .halt_reg = 0x77058,
3130 .halt_check = BRANCH_HALT,
3131 .hwcg_reg = 0x77058,
3134 .enable_reg = 0x77058,
3135 .enable_mask = BIT(1),
3136 .hw.init = &(struct clk_init_data){
3137 .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk",
3138 .parent_hws = (const struct clk_hw *[]){
3139 &gcc_ufs_phy_unipro_core_clk.clkr.hw },
3141 .flags = CLK_SET_RATE_PARENT,
3142 .ops = &clk_branch_simple_ops,
3147 static struct clk_branch gcc_usb30_prim_master_clk = {
3149 .halt_check = BRANCH_HALT,
3151 .enable_reg = 0xf010,
3152 .enable_mask = BIT(0),
3153 .hw.init = &(struct clk_init_data){
3154 .name = "gcc_usb30_prim_master_clk",
3155 .parent_hws = (const struct clk_hw *[]){
3156 &gcc_usb30_prim_master_clk_src.clkr.hw },
3158 .flags = CLK_SET_RATE_PARENT,
3159 .ops = &clk_branch2_ops,
3164 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
3166 .halt_check = BRANCH_HALT,
3168 .enable_reg = 0xf018,
3169 .enable_mask = BIT(0),
3170 .hw.init = &(struct clk_init_data){
3171 .name = "gcc_usb30_prim_mock_utmi_clk",
3172 .parent_hws = (const struct clk_hw *[]){
3173 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw },
3175 .flags = CLK_SET_RATE_PARENT,
3176 .ops = &clk_branch2_ops,
3181 static struct clk_branch gcc_usb30_prim_sleep_clk = {
3183 .halt_check = BRANCH_HALT,
3185 .enable_reg = 0xf014,
3186 .enable_mask = BIT(0),
3187 .hw.init = &(struct clk_init_data){
3188 .name = "gcc_usb30_prim_sleep_clk",
3189 .ops = &clk_branch2_ops,
3194 static struct clk_branch gcc_usb30_sec_master_clk = {
3195 .halt_reg = 0x10010,
3196 .halt_check = BRANCH_HALT,
3198 .enable_reg = 0x10010,
3199 .enable_mask = BIT(0),
3200 .hw.init = &(struct clk_init_data){
3201 .name = "gcc_usb30_sec_master_clk",
3202 .parent_hws = (const struct clk_hw *[]){
3203 &gcc_usb30_sec_master_clk_src.clkr.hw },
3205 .flags = CLK_SET_RATE_PARENT,
3206 .ops = &clk_branch2_ops,
3211 static struct clk_branch gcc_usb30_sec_mock_utmi_clk = {
3212 .halt_reg = 0x10018,
3213 .halt_check = BRANCH_HALT,
3215 .enable_reg = 0x10018,
3216 .enable_mask = BIT(0),
3217 .hw.init = &(struct clk_init_data){
3218 .name = "gcc_usb30_sec_mock_utmi_clk",
3219 .parent_hws = (const struct clk_hw *[]){
3220 &gcc_usb30_sec_mock_utmi_clk_src.clkr.hw },
3222 .flags = CLK_SET_RATE_PARENT,
3223 .ops = &clk_branch2_ops,
3228 static struct clk_branch gcc_usb30_sec_sleep_clk = {
3229 .halt_reg = 0x10014,
3230 .halt_check = BRANCH_HALT,
3232 .enable_reg = 0x10014,
3233 .enable_mask = BIT(0),
3234 .hw.init = &(struct clk_init_data){
3235 .name = "gcc_usb30_sec_sleep_clk",
3236 .ops = &clk_branch2_ops,
3241 static struct clk_branch gcc_usb3_prim_clkref_clk = {
3242 .halt_reg = 0x8c008,
3243 .halt_check = BRANCH_HALT,
3245 .enable_reg = 0x8c008,
3246 .enable_mask = BIT(0),
3247 .hw.init = &(struct clk_init_data){
3248 .name = "gcc_usb3_prim_clkref_clk",
3249 .ops = &clk_branch2_ops,
3254 static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
3256 .halt_check = BRANCH_HALT,
3258 .enable_reg = 0xf050,
3259 .enable_mask = BIT(0),
3260 .hw.init = &(struct clk_init_data){
3261 .name = "gcc_usb3_prim_phy_aux_clk",
3262 .parent_hws = (const struct clk_hw *[]){
3263 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw },
3265 .flags = CLK_SET_RATE_PARENT,
3266 .ops = &clk_branch2_ops,
3271 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
3273 .halt_check = BRANCH_HALT,
3275 .enable_reg = 0xf054,
3276 .enable_mask = BIT(0),
3277 .hw.init = &(struct clk_init_data){
3278 .name = "gcc_usb3_prim_phy_com_aux_clk",
3279 .parent_hws = (const struct clk_hw *[]){
3280 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw },
3282 .flags = CLK_SET_RATE_PARENT,
3283 .ops = &clk_branch2_ops,
3288 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
3289 .halt_check = BRANCH_HALT_SKIP,
3291 .enable_reg = 0xf058,
3292 .enable_mask = BIT(0),
3293 .hw.init = &(struct clk_init_data){
3294 .name = "gcc_usb3_prim_phy_pipe_clk",
3295 .ops = &clk_branch2_ops,
3300 static struct clk_branch gcc_usb3_sec_clkref_clk = {
3301 .halt_reg = 0x8c028,
3302 .halt_check = BRANCH_HALT,
3304 .enable_reg = 0x8c028,
3305 .enable_mask = BIT(0),
3306 .hw.init = &(struct clk_init_data){
3307 .name = "gcc_usb3_sec_clkref_clk",
3308 .ops = &clk_branch2_ops,
3313 static struct clk_branch gcc_usb3_sec_phy_aux_clk = {
3314 .halt_reg = 0x10050,
3315 .halt_check = BRANCH_HALT,
3317 .enable_reg = 0x10050,
3318 .enable_mask = BIT(0),
3319 .hw.init = &(struct clk_init_data){
3320 .name = "gcc_usb3_sec_phy_aux_clk",
3321 .parent_hws = (const struct clk_hw *[]){
3322 &gcc_usb3_sec_phy_aux_clk_src.clkr.hw },
3324 .flags = CLK_SET_RATE_PARENT,
3325 .ops = &clk_branch2_ops,
3330 static struct clk_branch gcc_usb3_sec_phy_com_aux_clk = {
3331 .halt_reg = 0x10054,
3332 .halt_check = BRANCH_HALT,
3334 .enable_reg = 0x10054,
3335 .enable_mask = BIT(0),
3336 .hw.init = &(struct clk_init_data){
3337 .name = "gcc_usb3_sec_phy_com_aux_clk",
3338 .parent_hws = (const struct clk_hw *[]){
3339 &gcc_usb3_sec_phy_aux_clk_src.clkr.hw },
3341 .flags = CLK_SET_RATE_PARENT,
3342 .ops = &clk_branch2_ops,
3347 static struct clk_branch gcc_usb3_sec_phy_pipe_clk = {
3348 .halt_check = BRANCH_HALT_SKIP,
3350 .enable_reg = 0x10058,
3351 .enable_mask = BIT(0),
3352 .hw.init = &(struct clk_init_data){
3353 .name = "gcc_usb3_sec_phy_pipe_clk",
3354 .ops = &clk_branch2_ops,
3360 * Clock ON depends on external parent 'config noc', so cant poll
3361 * delay and also mark as crtitical for video boot
3363 static struct clk_branch gcc_video_ahb_clk = {
3365 .halt_check = BRANCH_HALT_DELAY,
3369 .enable_reg = 0xb004,
3370 .enable_mask = BIT(0),
3371 .hw.init = &(struct clk_init_data){
3372 .name = "gcc_video_ahb_clk",
3373 .flags = CLK_IS_CRITICAL,
3374 .ops = &clk_branch2_ops,
3379 static struct clk_branch gcc_video_axi0_clk = {
3381 .halt_check = BRANCH_HALT,
3383 .enable_reg = 0xb024,
3384 .enable_mask = BIT(0),
3385 .hw.init = &(struct clk_init_data){
3386 .name = "gcc_video_axi0_clk",
3387 .ops = &clk_branch2_ops,
3392 static struct clk_branch gcc_video_axi1_clk = {
3394 .halt_check = BRANCH_HALT,
3396 .enable_reg = 0xb028,
3397 .enable_mask = BIT(0),
3398 .hw.init = &(struct clk_init_data){
3399 .name = "gcc_video_axi1_clk",
3400 .ops = &clk_branch2_ops,
3405 static struct clk_branch gcc_video_axic_clk = {
3407 .halt_check = BRANCH_HALT,
3409 .enable_reg = 0xb02c,
3410 .enable_mask = BIT(0),
3411 .hw.init = &(struct clk_init_data){
3412 .name = "gcc_video_axic_clk",
3413 .ops = &clk_branch2_ops,
3418 /* XO critical input to video, so no need to poll */
3419 static struct clk_branch gcc_video_xo_clk = {
3421 .halt_check = BRANCH_HALT_DELAY,
3423 .enable_reg = 0xb040,
3424 .enable_mask = BIT(0),
3425 .hw.init = &(struct clk_init_data){
3426 .name = "gcc_video_xo_clk",
3427 .flags = CLK_IS_CRITICAL,
3428 .ops = &clk_branch2_ops,
3433 static struct gdsc pcie_0_gdsc = {
3436 .name = "pcie_0_gdsc",
3438 .pwrsts = PWRSTS_OFF_ON,
3439 .flags = POLL_CFG_GDSCR,
3442 static struct gdsc pcie_1_gdsc = {
3445 .name = "pcie_1_gdsc",
3447 .pwrsts = PWRSTS_OFF_ON,
3448 .flags = POLL_CFG_GDSCR,
3451 static struct gdsc ufs_card_gdsc = {
3454 .name = "ufs_card_gdsc",
3456 .pwrsts = PWRSTS_OFF_ON,
3457 .flags = POLL_CFG_GDSCR,
3460 static struct gdsc ufs_phy_gdsc = {
3463 .name = "ufs_phy_gdsc",
3465 .pwrsts = PWRSTS_OFF_ON,
3466 .flags = POLL_CFG_GDSCR,
3469 static struct gdsc emac_gdsc = {
3472 .name = "emac_gdsc",
3474 .pwrsts = PWRSTS_OFF_ON,
3475 .flags = POLL_CFG_GDSCR,
3478 static struct gdsc usb30_prim_gdsc = {
3481 .name = "usb30_prim_gdsc",
3483 .pwrsts = PWRSTS_OFF_ON,
3484 .flags = POLL_CFG_GDSCR,
3487 static struct gdsc usb30_sec_gdsc = {
3490 .name = "usb30_sec_gdsc",
3492 .pwrsts = PWRSTS_OFF_ON,
3493 .flags = POLL_CFG_GDSCR,
3496 static struct clk_regmap *gcc_sm8150_clocks[] = {
3497 [GCC_AGGRE_NOC_PCIE_TBU_CLK] = &gcc_aggre_noc_pcie_tbu_clk.clkr,
3498 [GCC_AGGRE_UFS_CARD_AXI_CLK] = &gcc_aggre_ufs_card_axi_clk.clkr,
3499 [GCC_AGGRE_UFS_CARD_AXI_HW_CTL_CLK] =
3500 &gcc_aggre_ufs_card_axi_hw_ctl_clk.clkr,
3501 [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
3502 [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] =
3503 &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr,
3504 [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
3505 [GCC_AGGRE_USB3_SEC_AXI_CLK] = &gcc_aggre_usb3_sec_axi_clk.clkr,
3506 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3507 [GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr,
3508 [GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,
3509 [GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr,
3510 [GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr,
3511 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
3512 [GCC_CFG_NOC_USB3_SEC_AXI_CLK] = &gcc_cfg_noc_usb3_sec_axi_clk.clkr,
3513 [GCC_CPUSS_AHB_CLK] = &gcc_cpuss_ahb_clk.clkr,
3514 [GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr,
3515 [GCC_CPUSS_DVM_BUS_CLK] = &gcc_cpuss_dvm_bus_clk.clkr,
3516 [GCC_CPUSS_GNOC_CLK] = &gcc_cpuss_gnoc_clk.clkr,
3517 [GCC_CPUSS_RBCPR_CLK] = &gcc_cpuss_rbcpr_clk.clkr,
3518 [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
3519 [GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr,
3520 [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
3521 [GCC_DISP_SF_AXI_CLK] = &gcc_disp_sf_axi_clk.clkr,
3522 [GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr,
3523 [GCC_EMAC_AXI_CLK] = &gcc_emac_axi_clk.clkr,
3524 [GCC_EMAC_PTP_CLK] = &gcc_emac_ptp_clk.clkr,
3525 [GCC_EMAC_PTP_CLK_SRC] = &gcc_emac_ptp_clk_src.clkr,
3526 [GCC_EMAC_RGMII_CLK] = &gcc_emac_rgmii_clk.clkr,
3527 [GCC_EMAC_RGMII_CLK_SRC] = &gcc_emac_rgmii_clk_src.clkr,
3528 [GCC_EMAC_SLV_AHB_CLK] = &gcc_emac_slv_ahb_clk.clkr,
3529 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3530 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
3531 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3532 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
3533 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3534 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
3535 [GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,
3536 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
3537 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
3538 [GCC_GPU_IREF_CLK] = &gcc_gpu_iref_clk.clkr,
3539 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
3540 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
3541 [GCC_NPU_AT_CLK] = &gcc_npu_at_clk.clkr,
3542 [GCC_NPU_AXI_CLK] = &gcc_npu_axi_clk.clkr,
3543 [GCC_NPU_CFG_AHB_CLK] = &gcc_npu_cfg_ahb_clk.clkr,
3544 [GCC_NPU_GPLL0_CLK_SRC] = &gcc_npu_gpll0_clk_src.clkr,
3545 [GCC_NPU_GPLL0_DIV_CLK_SRC] = &gcc_npu_gpll0_div_clk_src.clkr,
3546 [GCC_NPU_TRIG_CLK] = &gcc_npu_trig_clk.clkr,
3547 [GCC_PCIE0_PHY_REFGEN_CLK] = &gcc_pcie0_phy_refgen_clk.clkr,
3548 [GCC_PCIE1_PHY_REFGEN_CLK] = &gcc_pcie1_phy_refgen_clk.clkr,
3549 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
3550 [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
3551 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
3552 [GCC_PCIE_0_CLKREF_CLK] = &gcc_pcie_0_clkref_clk.clkr,
3553 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
3554 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
3555 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
3556 [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
3557 [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
3558 [GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr,
3559 [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
3560 [GCC_PCIE_1_CLKREF_CLK] = &gcc_pcie_1_clkref_clk.clkr,
3561 [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
3562 [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
3563 [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
3564 [GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr,
3565 [GCC_PCIE_PHY_AUX_CLK] = &gcc_pcie_phy_aux_clk.clkr,
3566 [GCC_PCIE_PHY_REFGEN_CLK_SRC] = &gcc_pcie_phy_refgen_clk_src.clkr,
3567 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3568 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
3569 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3570 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
3571 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3572 [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
3573 [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
3574 [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
3575 [GCC_QMIP_VIDEO_CVP_AHB_CLK] = &gcc_qmip_video_cvp_ahb_clk.clkr,
3576 [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
3577 [GCC_QSPI_CNOC_PERIPH_AHB_CLK] = &gcc_qspi_cnoc_periph_ahb_clk.clkr,
3578 [GCC_QSPI_CORE_CLK] = &gcc_qspi_core_clk.clkr,
3579 [GCC_QSPI_CORE_CLK_SRC] = &gcc_qspi_core_clk_src.clkr,
3580 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
3581 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
3582 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
3583 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
3584 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
3585 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
3586 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
3587 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
3588 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
3589 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
3590 [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
3591 [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
3592 [GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr,
3593 [GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr,
3594 [GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr,
3595 [GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr,
3596 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
3597 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
3598 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
3599 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
3600 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
3601 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
3602 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
3603 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
3604 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
3605 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
3606 [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
3607 [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
3608 [GCC_QUPV3_WRAP2_S0_CLK] = &gcc_qupv3_wrap2_s0_clk.clkr,
3609 [GCC_QUPV3_WRAP2_S0_CLK_SRC] = &gcc_qupv3_wrap2_s0_clk_src.clkr,
3610 [GCC_QUPV3_WRAP2_S1_CLK] = &gcc_qupv3_wrap2_s1_clk.clkr,
3611 [GCC_QUPV3_WRAP2_S1_CLK_SRC] = &gcc_qupv3_wrap2_s1_clk_src.clkr,
3612 [GCC_QUPV3_WRAP2_S2_CLK] = &gcc_qupv3_wrap2_s2_clk.clkr,
3613 [GCC_QUPV3_WRAP2_S2_CLK_SRC] = &gcc_qupv3_wrap2_s2_clk_src.clkr,
3614 [GCC_QUPV3_WRAP2_S3_CLK] = &gcc_qupv3_wrap2_s3_clk.clkr,
3615 [GCC_QUPV3_WRAP2_S3_CLK_SRC] = &gcc_qupv3_wrap2_s3_clk_src.clkr,
3616 [GCC_QUPV3_WRAP2_S4_CLK] = &gcc_qupv3_wrap2_s4_clk.clkr,
3617 [GCC_QUPV3_WRAP2_S4_CLK_SRC] = &gcc_qupv3_wrap2_s4_clk_src.clkr,
3618 [GCC_QUPV3_WRAP2_S5_CLK] = &gcc_qupv3_wrap2_s5_clk.clkr,
3619 [GCC_QUPV3_WRAP2_S5_CLK_SRC] = &gcc_qupv3_wrap2_s5_clk_src.clkr,
3620 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
3621 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
3622 [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
3623 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
3624 [GCC_QUPV3_WRAP_2_M_AHB_CLK] = &gcc_qupv3_wrap_2_m_ahb_clk.clkr,
3625 [GCC_QUPV3_WRAP_2_S_AHB_CLK] = &gcc_qupv3_wrap_2_s_ahb_clk.clkr,
3626 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3627 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3628 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
3629 [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
3630 [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
3631 [GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr,
3632 [GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,
3633 [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr,
3634 [GCC_TSIF_INACTIVITY_TIMERS_CLK] = &gcc_tsif_inactivity_timers_clk.clkr,
3635 [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
3636 [GCC_TSIF_REF_CLK_SRC] = &gcc_tsif_ref_clk_src.clkr,
3637 [GCC_UFS_CARD_AHB_CLK] = &gcc_ufs_card_ahb_clk.clkr,
3638 [GCC_UFS_CARD_AXI_CLK] = &gcc_ufs_card_axi_clk.clkr,
3639 [GCC_UFS_CARD_AXI_CLK_SRC] = &gcc_ufs_card_axi_clk_src.clkr,
3640 [GCC_UFS_CARD_AXI_HW_CTL_CLK] = &gcc_ufs_card_axi_hw_ctl_clk.clkr,
3641 [GCC_UFS_CARD_CLKREF_CLK] = &gcc_ufs_card_clkref_clk.clkr,
3642 [GCC_UFS_CARD_ICE_CORE_CLK] = &gcc_ufs_card_ice_core_clk.clkr,
3643 [GCC_UFS_CARD_ICE_CORE_CLK_SRC] = &gcc_ufs_card_ice_core_clk_src.clkr,
3644 [GCC_UFS_CARD_ICE_CORE_HW_CTL_CLK] =
3645 &gcc_ufs_card_ice_core_hw_ctl_clk.clkr,
3646 [GCC_UFS_CARD_PHY_AUX_CLK] = &gcc_ufs_card_phy_aux_clk.clkr,
3647 [GCC_UFS_CARD_PHY_AUX_CLK_SRC] = &gcc_ufs_card_phy_aux_clk_src.clkr,
3648 [GCC_UFS_CARD_PHY_AUX_HW_CTL_CLK] =
3649 &gcc_ufs_card_phy_aux_hw_ctl_clk.clkr,
3650 [GCC_UFS_CARD_RX_SYMBOL_0_CLK] = &gcc_ufs_card_rx_symbol_0_clk.clkr,
3651 [GCC_UFS_CARD_RX_SYMBOL_1_CLK] = &gcc_ufs_card_rx_symbol_1_clk.clkr,
3652 [GCC_UFS_CARD_TX_SYMBOL_0_CLK] = &gcc_ufs_card_tx_symbol_0_clk.clkr,
3653 [GCC_UFS_CARD_UNIPRO_CORE_CLK] = &gcc_ufs_card_unipro_core_clk.clkr,
3654 [GCC_UFS_CARD_UNIPRO_CORE_CLK_SRC] =
3655 &gcc_ufs_card_unipro_core_clk_src.clkr,
3656 [GCC_UFS_CARD_UNIPRO_CORE_HW_CTL_CLK] =
3657 &gcc_ufs_card_unipro_core_hw_ctl_clk.clkr,
3658 [GCC_UFS_MEM_CLKREF_CLK] = &gcc_ufs_mem_clkref_clk.clkr,
3659 [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
3660 [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
3661 [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
3662 [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr,
3663 [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
3664 [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
3665 [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] =
3666 &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr,
3667 [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
3668 [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
3669 [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr,
3670 [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
3671 [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
3672 [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
3673 [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
3674 [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] =
3675 &gcc_ufs_phy_unipro_core_clk_src.clkr,
3676 [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] =
3677 &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr,
3678 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
3679 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
3680 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
3681 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] =
3682 &gcc_usb30_prim_mock_utmi_clk_src.clkr,
3683 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
3684 [GCC_USB30_SEC_MASTER_CLK] = &gcc_usb30_sec_master_clk.clkr,
3685 [GCC_USB30_SEC_MASTER_CLK_SRC] = &gcc_usb30_sec_master_clk_src.clkr,
3686 [GCC_USB30_SEC_MOCK_UTMI_CLK] = &gcc_usb30_sec_mock_utmi_clk.clkr,
3687 [GCC_USB30_SEC_MOCK_UTMI_CLK_SRC] =
3688 &gcc_usb30_sec_mock_utmi_clk_src.clkr,
3689 [GCC_USB30_SEC_SLEEP_CLK] = &gcc_usb30_sec_sleep_clk.clkr,
3690 [GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,
3691 [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
3692 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
3693 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
3694 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
3695 [GCC_USB3_SEC_CLKREF_CLK] = &gcc_usb3_sec_clkref_clk.clkr,
3696 [GCC_USB3_SEC_PHY_AUX_CLK] = &gcc_usb3_sec_phy_aux_clk.clkr,
3697 [GCC_USB3_SEC_PHY_AUX_CLK_SRC] = &gcc_usb3_sec_phy_aux_clk_src.clkr,
3698 [GCC_USB3_SEC_PHY_COM_AUX_CLK] = &gcc_usb3_sec_phy_com_aux_clk.clkr,
3699 [GCC_USB3_SEC_PHY_PIPE_CLK] = &gcc_usb3_sec_phy_pipe_clk.clkr,
3700 [GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr,
3701 [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
3702 [GCC_VIDEO_AXI1_CLK] = &gcc_video_axi1_clk.clkr,
3703 [GCC_VIDEO_AXIC_CLK] = &gcc_video_axic_clk.clkr,
3704 [GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr,
3705 [GPLL0] = &gpll0.clkr,
3706 [GPLL0_OUT_EVEN] = &gpll0_out_even.clkr,
3707 [GPLL7] = &gpll7.clkr,
3708 [GPLL9] = &gpll9.clkr,
3711 static const struct qcom_reset_map gcc_sm8150_resets[] = {
3712 [GCC_EMAC_BCR] = { 0x6000 },
3713 [GCC_GPU_BCR] = { 0x71000 },
3714 [GCC_MMSS_BCR] = { 0xb000 },
3715 [GCC_NPU_BCR] = { 0x4d000 },
3716 [GCC_PCIE_0_BCR] = { 0x6b000 },
3717 [GCC_PCIE_0_PHY_BCR] = { 0x6c01c },
3718 [GCC_PCIE_1_BCR] = { 0x8d000 },
3719 [GCC_PCIE_1_PHY_BCR] = { 0x8e01c },
3720 [GCC_PCIE_PHY_BCR] = { 0x6f000 },
3721 [GCC_PDM_BCR] = { 0x33000 },
3722 [GCC_PRNG_BCR] = { 0x34000 },
3723 [GCC_QSPI_BCR] = { 0x24008 },
3724 [GCC_QUPV3_WRAPPER_0_BCR] = { 0x17000 },
3725 [GCC_QUPV3_WRAPPER_1_BCR] = { 0x18000 },
3726 [GCC_QUPV3_WRAPPER_2_BCR] = { 0x1e000 },
3727 [GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 },
3728 [GCC_QUSB2PHY_SEC_BCR] = { 0x12004 },
3729 [GCC_USB3_PHY_PRIM_BCR] = { 0x50000 },
3730 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x50008 },
3731 [GCC_USB3_PHY_SEC_BCR] = { 0x5000c },
3732 [GCC_USB3PHY_PHY_SEC_BCR] = { 0x50010 },
3733 [GCC_SDCC2_BCR] = { 0x14000 },
3734 [GCC_SDCC4_BCR] = { 0x16000 },
3735 [GCC_TSIF_BCR] = { 0x36000 },
3736 [GCC_UFS_CARD_BCR] = { 0x75000 },
3737 [GCC_UFS_PHY_BCR] = { 0x77000 },
3738 [GCC_USB30_PRIM_BCR] = { 0xf000 },
3739 [GCC_USB30_SEC_BCR] = { 0x10000 },
3740 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 },
3743 static struct gdsc *gcc_sm8150_gdscs[] = {
3744 [EMAC_GDSC] = &emac_gdsc,
3745 [PCIE_0_GDSC] = &pcie_0_gdsc,
3746 [PCIE_1_GDSC] = &pcie_1_gdsc,
3747 [UFS_CARD_GDSC] = &ufs_card_gdsc,
3748 [UFS_PHY_GDSC] = &ufs_phy_gdsc,
3749 [USB30_PRIM_GDSC] = &usb30_prim_gdsc,
3750 [USB30_SEC_GDSC] = &usb30_sec_gdsc,
3753 static const struct regmap_config gcc_sm8150_regmap_config = {
3757 .max_register = 0x9c040,
3761 static const struct qcom_cc_desc gcc_sm8150_desc = {
3762 .config = &gcc_sm8150_regmap_config,
3763 .clks = gcc_sm8150_clocks,
3764 .num_clks = ARRAY_SIZE(gcc_sm8150_clocks),
3765 .resets = gcc_sm8150_resets,
3766 .num_resets = ARRAY_SIZE(gcc_sm8150_resets),
3767 .gdscs = gcc_sm8150_gdscs,
3768 .num_gdscs = ARRAY_SIZE(gcc_sm8150_gdscs),
3771 static const struct of_device_id gcc_sm8150_match_table[] = {
3772 { .compatible = "qcom,gcc-sm8150" },
3775 MODULE_DEVICE_TABLE(of, gcc_sm8150_match_table);
3777 static int gcc_sm8150_probe(struct platform_device *pdev)
3779 struct regmap *regmap;
3781 regmap = qcom_cc_map(pdev, &gcc_sm8150_desc);
3783 return PTR_ERR(regmap);
3785 /* Disable the GPLL0 active input to NPU and GPU via MISC registers */
3786 regmap_update_bits(regmap, 0x4d110, 0x3, 0x3);
3787 regmap_update_bits(regmap, 0x71028, 0x3, 0x3);
3789 return qcom_cc_really_probe(pdev, &gcc_sm8150_desc, regmap);
3792 static struct platform_driver gcc_sm8150_driver = {
3793 .probe = gcc_sm8150_probe,
3795 .name = "gcc-sm8150",
3796 .of_match_table = gcc_sm8150_match_table,
3800 static int __init gcc_sm8150_init(void)
3802 return platform_driver_register(&gcc_sm8150_driver);
3804 subsys_initcall(gcc_sm8150_init);
3806 static void __exit gcc_sm8150_exit(void)
3808 platform_driver_unregister(&gcc_sm8150_driver);
3810 module_exit(gcc_sm8150_exit);
3812 MODULE_DESCRIPTION("QTI GCC SM8150 Driver");
3813 MODULE_LICENSE("GPL v2");