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/of_device.h>
11 #include <linux/clk-provider.h>
12 #include <linux/regmap.h>
13 #include <linux/reset-controller.h>
15 #include <dt-bindings/clock/qcom,gcc-sm8150.h>
18 #include "clk-alpha-pll.h"
19 #include "clk-branch.h"
22 #include "clk-regmap.h"
29 P_CORE_BI_PLL_TEST_SE
,
37 static struct clk_alpha_pll gpll0
= {
39 .regs
= clk_alpha_pll_regs
[CLK_ALPHA_PLL_TYPE_TRION
],
41 .enable_reg
= 0x52000,
42 .enable_mask
= BIT(0),
43 .hw
.init
= &(struct clk_init_data
){
45 .parent_data
= &(const struct clk_parent_data
){
50 .ops
= &clk_alpha_pll_fixed_trion_ops
,
55 static const struct clk_div_table post_div_table_trion_even
[] = {
63 static struct clk_alpha_pll_postdiv gpll0_out_even
= {
66 .post_div_table
= post_div_table_trion_even
,
67 .num_post_div
= ARRAY_SIZE(post_div_table_trion_even
),
68 .regs
= clk_alpha_pll_regs
[CLK_ALPHA_PLL_TYPE_TRION
],
70 .clkr
.hw
.init
= &(struct clk_init_data
){
71 .name
= "gpll0_out_even",
72 .parent_data
= &(const struct clk_parent_data
){
76 .ops
= &clk_alpha_pll_postdiv_trion_ops
,
80 static struct clk_alpha_pll gpll7
= {
82 .regs
= clk_alpha_pll_regs
[CLK_ALPHA_PLL_TYPE_TRION
],
84 .enable_reg
= 0x52000,
85 .enable_mask
= BIT(7),
86 .hw
.init
= &(struct clk_init_data
){
88 .parent_data
= &(const struct clk_parent_data
){
93 .ops
= &clk_alpha_pll_fixed_trion_ops
,
98 static struct clk_alpha_pll gpll9
= {
100 .regs
= clk_alpha_pll_regs
[CLK_ALPHA_PLL_TYPE_TRION
],
102 .enable_reg
= 0x52000,
103 .enable_mask
= BIT(9),
104 .hw
.init
= &(struct clk_init_data
){
106 .parent_data
= &(const struct clk_parent_data
){
107 .fw_name
= "bi_tcxo",
111 .ops
= &clk_alpha_pll_fixed_trion_ops
,
116 static const struct parent_map gcc_parent_map_0
[] = {
118 { P_GPLL0_OUT_MAIN
, 1 },
119 { P_GPLL0_OUT_EVEN
, 6 },
120 { P_CORE_BI_PLL_TEST_SE
, 7 },
123 static const struct clk_parent_data gcc_parents_0
[] = {
124 { .fw_name
= "bi_tcxo", .name
= "bi_tcxo" },
125 { .hw
= &gpll0
.clkr
.hw
},
126 { .hw
= &gpll0_out_even
.clkr
.hw
},
127 { .fw_name
= "core_bi_pll_test_se" },
130 static const struct parent_map gcc_parent_map_1
[] = {
132 { P_GPLL0_OUT_MAIN
, 1 },
134 { P_GPLL0_OUT_EVEN
, 6 },
135 { P_CORE_BI_PLL_TEST_SE
, 7 },
138 static const struct clk_parent_data gcc_parents_1
[] = {
139 { .fw_name
= "bi_tcxo", .name
= "bi_tcxo" },
140 { .hw
= &gpll0
.clkr
.hw
},
141 { .fw_name
= "sleep_clk", .name
= "sleep_clk" },
142 { .hw
= &gpll0_out_even
.clkr
.hw
},
143 { .fw_name
= "core_bi_pll_test_se" },
146 static const struct parent_map gcc_parent_map_2
[] = {
149 { P_CORE_BI_PLL_TEST_SE
, 7 },
152 static const struct clk_parent_data gcc_parents_2
[] = {
153 { .fw_name
= "bi_tcxo", .name
= "bi_tcxo" },
154 { .fw_name
= "sleep_clk", .name
= "sleep_clk" },
155 { .fw_name
= "core_bi_pll_test_se" },
158 static const struct parent_map gcc_parent_map_3
[] = {
160 { P_GPLL0_OUT_MAIN
, 1 },
161 { P_CORE_BI_PLL_TEST_SE
, 7 },
164 static const struct clk_parent_data gcc_parents_3
[] = {
165 { .fw_name
= "bi_tcxo", .name
= "bi_tcxo" },
166 { .hw
= &gpll0
.clkr
.hw
},
167 { .fw_name
= "core_bi_pll_test_se"},
170 static const struct parent_map gcc_parent_map_4
[] = {
172 { P_CORE_BI_PLL_TEST_SE
, 7 },
175 static const struct clk_parent_data gcc_parents_4
[] = {
176 { .fw_name
= "bi_tcxo", .name
= "bi_tcxo" },
177 { .fw_name
= "core_bi_pll_test_se" },
180 static const struct parent_map gcc_parent_map_5
[] = {
182 { P_GPLL0_OUT_MAIN
, 1 },
183 { P_GPLL7_OUT_MAIN
, 3 },
184 { P_GPLL0_OUT_EVEN
, 6 },
185 { P_CORE_BI_PLL_TEST_SE
, 7 },
188 static const struct clk_parent_data gcc_parents_5
[] = {
189 { .fw_name
= "bi_tcxo", .name
= "bi_tcxo" },
190 { .hw
= &gpll0
.clkr
.hw
},
191 { .hw
= &gpll7
.clkr
.hw
},
192 { .hw
= &gpll0_out_even
.clkr
.hw
},
193 { .fw_name
= "core_bi_pll_test_se" },
196 static const struct parent_map gcc_parent_map_6
[] = {
198 { P_GPLL0_OUT_MAIN
, 1 },
199 { P_GPLL9_OUT_MAIN
, 2 },
200 { P_GPLL0_OUT_EVEN
, 6 },
201 { P_CORE_BI_PLL_TEST_SE
, 7 },
204 static const struct clk_parent_data gcc_parents_6
[] = {
205 { .fw_name
= "bi_tcxo", .name
= "bi_tcxo" },
206 { .hw
= &gpll0
.clkr
.hw
},
207 { .hw
= &gpll9
.clkr
.hw
},
208 { .hw
= &gpll0_out_even
.clkr
.hw
},
209 { .fw_name
= "core_bi_pll_test_se" },
212 static const struct parent_map gcc_parent_map_7
[] = {
214 { P_GPLL0_OUT_MAIN
, 1 },
215 { P_AUD_REF_CLK
, 2 },
216 { P_GPLL0_OUT_EVEN
, 6 },
217 { P_CORE_BI_PLL_TEST_SE
, 7 },
220 static const struct clk_parent_data gcc_parents_7
[] = {
221 { .fw_name
= "bi_tcxo", .name
= "bi_tcxo" },
222 { .hw
= &gpll0
.clkr
.hw
},
223 { .fw_name
= "aud_ref_clk", .name
= "aud_ref_clk" },
224 { .hw
= &gpll0_out_even
.clkr
.hw
},
225 { .fw_name
= "core_bi_pll_test_se" },
228 static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src
[] = {
229 F(19200000, P_BI_TCXO
, 1, 0, 0),
230 F(50000000, P_GPLL0_OUT_MAIN
, 12, 0, 0),
231 F(100000000, P_GPLL0_OUT_MAIN
, 6, 0, 0),
235 static struct clk_rcg2 gcc_cpuss_ahb_clk_src
= {
239 .parent_map
= gcc_parent_map_0
,
240 .freq_tbl
= ftbl_gcc_cpuss_ahb_clk_src
,
241 .clkr
.hw
.init
= &(struct clk_init_data
){
242 .name
= "gcc_cpuss_ahb_clk_src",
243 .parent_data
= gcc_parents_0
,
245 .flags
= CLK_SET_RATE_PARENT
,
246 .ops
= &clk_rcg2_ops
,
250 static const struct freq_tbl ftbl_gcc_emac_ptp_clk_src
[] = {
251 F(19200000, P_BI_TCXO
, 1, 0, 0),
252 F(50000000, P_GPLL0_OUT_EVEN
, 6, 0, 0),
253 F(125000000, P_GPLL7_OUT_MAIN
, 4, 0, 0),
254 F(250000000, P_GPLL7_OUT_MAIN
, 2, 0, 0),
258 static struct clk_rcg2 gcc_emac_ptp_clk_src
= {
262 .parent_map
= gcc_parent_map_5
,
263 .freq_tbl
= ftbl_gcc_emac_ptp_clk_src
,
264 .clkr
.hw
.init
= &(struct clk_init_data
){
265 .name
= "gcc_emac_ptp_clk_src",
266 .parent_data
= gcc_parents_5
,
268 .flags
= CLK_SET_RATE_PARENT
,
269 .ops
= &clk_rcg2_ops
,
273 static const struct freq_tbl ftbl_gcc_emac_rgmii_clk_src
[] = {
274 F(2500000, P_BI_TCXO
, 1, 25, 192),
275 F(5000000, P_BI_TCXO
, 1, 25, 96),
276 F(19200000, P_BI_TCXO
, 1, 0, 0),
277 F(25000000, P_GPLL0_OUT_EVEN
, 12, 0, 0),
278 F(50000000, P_GPLL0_OUT_EVEN
, 6, 0, 0),
279 F(125000000, P_GPLL7_OUT_MAIN
, 4, 0, 0),
280 F(250000000, P_GPLL7_OUT_MAIN
, 2, 0, 0),
284 static struct clk_rcg2 gcc_emac_rgmii_clk_src
= {
288 .parent_map
= gcc_parent_map_5
,
289 .freq_tbl
= ftbl_gcc_emac_rgmii_clk_src
,
290 .clkr
.hw
.init
= &(struct clk_init_data
){
291 .name
= "gcc_emac_rgmii_clk_src",
292 .parent_data
= gcc_parents_5
,
294 .flags
= CLK_SET_RATE_PARENT
,
295 .ops
= &clk_rcg2_ops
,
299 static const struct freq_tbl ftbl_gcc_gp1_clk_src
[] = {
300 F(19200000, P_BI_TCXO
, 1, 0, 0),
301 F(25000000, P_GPLL0_OUT_EVEN
, 12, 0, 0),
302 F(50000000, P_GPLL0_OUT_EVEN
, 6, 0, 0),
303 F(100000000, P_GPLL0_OUT_MAIN
, 6, 0, 0),
304 F(200000000, P_GPLL0_OUT_MAIN
, 3, 0, 0),
308 static struct clk_rcg2 gcc_gp1_clk_src
= {
312 .parent_map
= gcc_parent_map_1
,
313 .freq_tbl
= ftbl_gcc_gp1_clk_src
,
314 .clkr
.hw
.init
= &(struct clk_init_data
){
315 .name
= "gcc_gp1_clk_src",
316 .parent_data
= gcc_parents_1
,
318 .flags
= CLK_SET_RATE_PARENT
,
319 .ops
= &clk_rcg2_ops
,
323 static struct clk_rcg2 gcc_gp2_clk_src
= {
327 .parent_map
= gcc_parent_map_1
,
328 .freq_tbl
= ftbl_gcc_gp1_clk_src
,
329 .clkr
.hw
.init
= &(struct clk_init_data
){
330 .name
= "gcc_gp2_clk_src",
331 .parent_data
= gcc_parents_1
,
333 .flags
= CLK_SET_RATE_PARENT
,
334 .ops
= &clk_rcg2_ops
,
338 static struct clk_rcg2 gcc_gp3_clk_src
= {
342 .parent_map
= gcc_parent_map_1
,
343 .freq_tbl
= ftbl_gcc_gp1_clk_src
,
344 .clkr
.hw
.init
= &(struct clk_init_data
){
345 .name
= "gcc_gp3_clk_src",
346 .parent_data
= gcc_parents_1
,
348 .flags
= CLK_SET_RATE_PARENT
,
349 .ops
= &clk_rcg2_ops
,
353 static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src
[] = {
354 F(9600000, P_BI_TCXO
, 2, 0, 0),
355 F(19200000, P_BI_TCXO
, 1, 0, 0),
359 static struct clk_rcg2 gcc_pcie_0_aux_clk_src
= {
363 .parent_map
= gcc_parent_map_2
,
364 .freq_tbl
= ftbl_gcc_pcie_0_aux_clk_src
,
365 .clkr
.hw
.init
= &(struct clk_init_data
){
366 .name
= "gcc_pcie_0_aux_clk_src",
367 .parent_data
= gcc_parents_2
,
369 .flags
= CLK_SET_RATE_PARENT
,
370 .ops
= &clk_rcg2_ops
,
374 static struct clk_rcg2 gcc_pcie_1_aux_clk_src
= {
378 .parent_map
= gcc_parent_map_2
,
379 .freq_tbl
= ftbl_gcc_pcie_0_aux_clk_src
,
380 .clkr
.hw
.init
= &(struct clk_init_data
){
381 .name
= "gcc_pcie_1_aux_clk_src",
382 .parent_data
= gcc_parents_2
,
384 .flags
= CLK_SET_RATE_PARENT
,
385 .ops
= &clk_rcg2_ops
,
389 static const struct freq_tbl ftbl_gcc_pcie_phy_refgen_clk_src
[] = {
390 F(19200000, P_BI_TCXO
, 1, 0, 0),
391 F(100000000, P_GPLL0_OUT_MAIN
, 6, 0, 0),
395 static struct clk_rcg2 gcc_pcie_phy_refgen_clk_src
= {
399 .parent_map
= gcc_parent_map_0
,
400 .freq_tbl
= ftbl_gcc_pcie_phy_refgen_clk_src
,
401 .clkr
.hw
.init
= &(struct clk_init_data
){
402 .name
= "gcc_pcie_phy_refgen_clk_src",
403 .parent_data
= gcc_parents_0
,
405 .flags
= CLK_SET_RATE_PARENT
,
406 .ops
= &clk_rcg2_ops
,
410 static const struct freq_tbl ftbl_gcc_pdm2_clk_src
[] = {
411 F(9600000, P_BI_TCXO
, 2, 0, 0),
412 F(19200000, P_BI_TCXO
, 1, 0, 0),
413 F(60000000, P_GPLL0_OUT_MAIN
, 10, 0, 0),
417 static struct clk_rcg2 gcc_pdm2_clk_src
= {
421 .parent_map
= gcc_parent_map_0
,
422 .freq_tbl
= ftbl_gcc_pdm2_clk_src
,
423 .clkr
.hw
.init
= &(struct clk_init_data
){
424 .name
= "gcc_pdm2_clk_src",
425 .parent_data
= gcc_parents_0
,
427 .flags
= CLK_SET_RATE_PARENT
,
428 .ops
= &clk_rcg2_ops
,
432 static const struct freq_tbl ftbl_gcc_qspi_core_clk_src
[] = {
433 F(19200000, P_BI_TCXO
, 1, 0, 0),
434 F(75000000, P_GPLL0_OUT_EVEN
, 4, 0, 0),
435 F(150000000, P_GPLL0_OUT_MAIN
, 4, 0, 0),
436 F(300000000, P_GPLL0_OUT_MAIN
, 2, 0, 0),
440 static struct clk_rcg2 gcc_qspi_core_clk_src
= {
444 .parent_map
= gcc_parent_map_0
,
445 .freq_tbl
= ftbl_gcc_qspi_core_clk_src
,
446 .clkr
.hw
.init
= &(struct clk_init_data
){
447 .name
= "gcc_qspi_core_clk_src",
448 .parent_data
= gcc_parents_0
,
450 .flags
= CLK_SET_RATE_PARENT
,
451 .ops
= &clk_rcg2_ops
,
455 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src
[] = {
456 F(7372800, P_GPLL0_OUT_EVEN
, 1, 384, 15625),
457 F(14745600, P_GPLL0_OUT_EVEN
, 1, 768, 15625),
458 F(19200000, P_BI_TCXO
, 1, 0, 0),
459 F(29491200, P_GPLL0_OUT_EVEN
, 1, 1536, 15625),
460 F(32000000, P_GPLL0_OUT_EVEN
, 1, 8, 75),
461 F(48000000, P_GPLL0_OUT_EVEN
, 1, 4, 25),
462 F(64000000, P_GPLL0_OUT_EVEN
, 1, 16, 75),
463 F(80000000, P_GPLL0_OUT_EVEN
, 1, 4, 15),
464 F(96000000, P_GPLL0_OUT_EVEN
, 1, 8, 25),
465 F(100000000, P_GPLL0_OUT_EVEN
, 3, 0, 0),
466 F(102400000, P_GPLL0_OUT_EVEN
, 1, 128, 375),
467 F(112000000, P_GPLL0_OUT_EVEN
, 1, 28, 75),
468 F(117964800, P_GPLL0_OUT_EVEN
, 1, 6144, 15625),
469 F(120000000, P_GPLL0_OUT_EVEN
, 2.5, 0, 0),
470 F(128000000, P_GPLL0_OUT_MAIN
, 1, 16, 75),
474 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src
= {
478 .parent_map
= gcc_parent_map_0
,
479 .freq_tbl
= ftbl_gcc_qupv3_wrap0_s0_clk_src
,
480 .clkr
.hw
.init
= &(struct clk_init_data
){
481 .name
= "gcc_qupv3_wrap0_s0_clk_src",
482 .parent_data
= gcc_parents_0
,
484 .flags
= CLK_SET_RATE_PARENT
,
485 .ops
= &clk_rcg2_ops
,
489 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src
= {
493 .parent_map
= gcc_parent_map_0
,
494 .freq_tbl
= ftbl_gcc_qupv3_wrap0_s0_clk_src
,
495 .clkr
.hw
.init
= &(struct clk_init_data
){
496 .name
= "gcc_qupv3_wrap0_s1_clk_src",
497 .parent_data
= gcc_parents_0
,
499 .flags
= CLK_SET_RATE_PARENT
,
500 .ops
= &clk_rcg2_ops
,
504 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src
= {
508 .parent_map
= gcc_parent_map_0
,
509 .freq_tbl
= ftbl_gcc_qupv3_wrap0_s0_clk_src
,
510 .clkr
.hw
.init
= &(struct clk_init_data
){
511 .name
= "gcc_qupv3_wrap0_s2_clk_src",
512 .parent_data
= gcc_parents_0
,
514 .flags
= CLK_SET_RATE_PARENT
,
515 .ops
= &clk_rcg2_ops
,
519 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src
= {
523 .parent_map
= gcc_parent_map_0
,
524 .freq_tbl
= ftbl_gcc_qupv3_wrap0_s0_clk_src
,
525 .clkr
.hw
.init
= &(struct clk_init_data
){
526 .name
= "gcc_qupv3_wrap0_s3_clk_src",
527 .parent_data
= gcc_parents_0
,
529 .flags
= CLK_SET_RATE_PARENT
,
530 .ops
= &clk_rcg2_ops
,
534 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src
= {
538 .parent_map
= gcc_parent_map_0
,
539 .freq_tbl
= ftbl_gcc_qupv3_wrap0_s0_clk_src
,
540 .clkr
.hw
.init
= &(struct clk_init_data
){
541 .name
= "gcc_qupv3_wrap0_s4_clk_src",
542 .parent_data
= gcc_parents_0
,
544 .flags
= CLK_SET_RATE_PARENT
,
545 .ops
= &clk_rcg2_ops
,
549 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src
= {
553 .parent_map
= gcc_parent_map_0
,
554 .freq_tbl
= ftbl_gcc_qupv3_wrap0_s0_clk_src
,
555 .clkr
.hw
.init
= &(struct clk_init_data
){
556 .name
= "gcc_qupv3_wrap0_s5_clk_src",
557 .parent_data
= gcc_parents_0
,
559 .flags
= CLK_SET_RATE_PARENT
,
560 .ops
= &clk_rcg2_ops
,
564 static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src
= {
568 .parent_map
= gcc_parent_map_0
,
569 .freq_tbl
= ftbl_gcc_qupv3_wrap0_s0_clk_src
,
570 .clkr
.hw
.init
= &(struct clk_init_data
){
571 .name
= "gcc_qupv3_wrap0_s6_clk_src",
572 .parent_data
= gcc_parents_0
,
574 .flags
= CLK_SET_RATE_PARENT
,
575 .ops
= &clk_rcg2_ops
,
579 static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src
= {
583 .parent_map
= gcc_parent_map_0
,
584 .freq_tbl
= ftbl_gcc_qupv3_wrap0_s0_clk_src
,
585 .clkr
.hw
.init
= &(struct clk_init_data
){
586 .name
= "gcc_qupv3_wrap0_s7_clk_src",
587 .parent_data
= gcc_parents_0
,
589 .flags
= CLK_SET_RATE_PARENT
,
590 .ops
= &clk_rcg2_ops
,
594 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src
= {
598 .parent_map
= gcc_parent_map_0
,
599 .freq_tbl
= ftbl_gcc_qupv3_wrap0_s0_clk_src
,
600 .clkr
.hw
.init
= &(struct clk_init_data
){
601 .name
= "gcc_qupv3_wrap1_s0_clk_src",
602 .parent_data
= gcc_parents_0
,
604 .flags
= CLK_SET_RATE_PARENT
,
605 .ops
= &clk_rcg2_ops
,
609 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src
= {
613 .parent_map
= gcc_parent_map_0
,
614 .freq_tbl
= ftbl_gcc_qupv3_wrap0_s0_clk_src
,
615 .clkr
.hw
.init
= &(struct clk_init_data
){
616 .name
= "gcc_qupv3_wrap1_s1_clk_src",
617 .parent_data
= gcc_parents_0
,
619 .flags
= CLK_SET_RATE_PARENT
,
620 .ops
= &clk_rcg2_ops
,
624 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src
= {
628 .parent_map
= gcc_parent_map_0
,
629 .freq_tbl
= ftbl_gcc_qupv3_wrap0_s0_clk_src
,
630 .clkr
.hw
.init
= &(struct clk_init_data
){
631 .name
= "gcc_qupv3_wrap1_s2_clk_src",
632 .parent_data
= gcc_parents_0
,
634 .flags
= CLK_SET_RATE_PARENT
,
635 .ops
= &clk_rcg2_ops
,
639 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src
= {
643 .parent_map
= gcc_parent_map_0
,
644 .freq_tbl
= ftbl_gcc_qupv3_wrap0_s0_clk_src
,
645 .clkr
.hw
.init
= &(struct clk_init_data
){
646 .name
= "gcc_qupv3_wrap1_s3_clk_src",
647 .parent_data
= gcc_parents_0
,
649 .flags
= CLK_SET_RATE_PARENT
,
650 .ops
= &clk_rcg2_ops
,
654 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src
= {
658 .parent_map
= gcc_parent_map_0
,
659 .freq_tbl
= ftbl_gcc_qupv3_wrap0_s0_clk_src
,
660 .clkr
.hw
.init
= &(struct clk_init_data
){
661 .name
= "gcc_qupv3_wrap1_s4_clk_src",
662 .parent_data
= gcc_parents_0
,
664 .flags
= CLK_SET_RATE_PARENT
,
665 .ops
= &clk_rcg2_ops
,
669 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src
= {
673 .parent_map
= gcc_parent_map_0
,
674 .freq_tbl
= ftbl_gcc_qupv3_wrap0_s0_clk_src
,
675 .clkr
.hw
.init
= &(struct clk_init_data
){
676 .name
= "gcc_qupv3_wrap1_s5_clk_src",
677 .parent_data
= gcc_parents_0
,
679 .flags
= CLK_SET_RATE_PARENT
,
680 .ops
= &clk_rcg2_ops
,
684 static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src
= {
688 .parent_map
= gcc_parent_map_0
,
689 .freq_tbl
= ftbl_gcc_qupv3_wrap0_s0_clk_src
,
690 .clkr
.hw
.init
= &(struct clk_init_data
){
691 .name
= "gcc_qupv3_wrap2_s0_clk_src",
692 .parent_data
= gcc_parents_0
,
694 .flags
= CLK_SET_RATE_PARENT
,
695 .ops
= &clk_rcg2_ops
,
699 static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src
= {
703 .parent_map
= gcc_parent_map_0
,
704 .freq_tbl
= ftbl_gcc_qupv3_wrap0_s0_clk_src
,
705 .clkr
.hw
.init
= &(struct clk_init_data
){
706 .name
= "gcc_qupv3_wrap2_s1_clk_src",
707 .parent_data
= gcc_parents_0
,
709 .flags
= CLK_SET_RATE_PARENT
,
710 .ops
= &clk_rcg2_ops
,
714 static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src
= {
718 .parent_map
= gcc_parent_map_0
,
719 .freq_tbl
= ftbl_gcc_qupv3_wrap0_s0_clk_src
,
720 .clkr
.hw
.init
= &(struct clk_init_data
){
721 .name
= "gcc_qupv3_wrap2_s2_clk_src",
722 .parent_data
= gcc_parents_0
,
724 .flags
= CLK_SET_RATE_PARENT
,
725 .ops
= &clk_rcg2_ops
,
729 static struct clk_rcg2 gcc_qupv3_wrap2_s3_clk_src
= {
733 .parent_map
= gcc_parent_map_0
,
734 .freq_tbl
= ftbl_gcc_qupv3_wrap0_s0_clk_src
,
735 .clkr
.hw
.init
= &(struct clk_init_data
){
736 .name
= "gcc_qupv3_wrap2_s3_clk_src",
737 .parent_data
= gcc_parents_0
,
739 .flags
= CLK_SET_RATE_PARENT
,
740 .ops
= &clk_rcg2_ops
,
744 static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src
= {
748 .parent_map
= gcc_parent_map_0
,
749 .freq_tbl
= ftbl_gcc_qupv3_wrap0_s0_clk_src
,
750 .clkr
.hw
.init
= &(struct clk_init_data
){
751 .name
= "gcc_qupv3_wrap2_s4_clk_src",
752 .parent_data
= gcc_parents_0
,
754 .flags
= CLK_SET_RATE_PARENT
,
755 .ops
= &clk_rcg2_ops
,
759 static struct clk_rcg2 gcc_qupv3_wrap2_s5_clk_src
= {
763 .parent_map
= gcc_parent_map_0
,
764 .freq_tbl
= ftbl_gcc_qupv3_wrap0_s0_clk_src
,
765 .clkr
.hw
.init
= &(struct clk_init_data
){
766 .name
= "gcc_qupv3_wrap2_s5_clk_src",
767 .parent_data
= gcc_parents_0
,
769 .flags
= CLK_SET_RATE_PARENT
,
770 .ops
= &clk_rcg2_ops
,
774 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src
[] = {
775 F(400000, P_BI_TCXO
, 12, 1, 4),
776 F(9600000, P_BI_TCXO
, 2, 0, 0),
777 F(19200000, P_BI_TCXO
, 1, 0, 0),
778 F(25000000, P_GPLL0_OUT_MAIN
, 12, 1, 2),
779 F(50000000, P_GPLL0_OUT_MAIN
, 12, 0, 0),
780 F(100000000, P_GPLL0_OUT_MAIN
, 6, 0, 0),
781 F(202000000, P_GPLL9_OUT_MAIN
, 4, 0, 0),
785 static struct clk_rcg2 gcc_sdcc2_apps_clk_src
= {
789 .parent_map
= gcc_parent_map_6
,
790 .freq_tbl
= ftbl_gcc_sdcc2_apps_clk_src
,
791 .clkr
.hw
.init
= &(struct clk_init_data
){
792 .name
= "gcc_sdcc2_apps_clk_src",
793 .parent_data
= gcc_parents_6
,
795 .flags
= CLK_SET_RATE_PARENT
,
796 .ops
= &clk_rcg2_floor_ops
,
800 static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src
[] = {
801 F(400000, P_BI_TCXO
, 12, 1, 4),
802 F(9600000, P_BI_TCXO
, 2, 0, 0),
803 F(19200000, P_BI_TCXO
, 1, 0, 0),
804 F(25000000, P_GPLL0_OUT_MAIN
, 12, 1, 2),
805 F(50000000, P_GPLL0_OUT_MAIN
, 12, 0, 0),
806 F(100000000, P_GPLL0_OUT_MAIN
, 6, 0, 0),
810 static struct clk_rcg2 gcc_sdcc4_apps_clk_src
= {
814 .parent_map
= gcc_parent_map_3
,
815 .freq_tbl
= ftbl_gcc_sdcc4_apps_clk_src
,
816 .clkr
.hw
.init
= &(struct clk_init_data
){
817 .name
= "gcc_sdcc4_apps_clk_src",
818 .parent_data
= gcc_parents_3
,
820 .flags
= CLK_SET_RATE_PARENT
,
821 .ops
= &clk_rcg2_floor_ops
,
825 static const struct freq_tbl ftbl_gcc_tsif_ref_clk_src
[] = {
826 F(105495, P_BI_TCXO
, 2, 1, 91),
830 static struct clk_rcg2 gcc_tsif_ref_clk_src
= {
834 .parent_map
= gcc_parent_map_7
,
835 .freq_tbl
= ftbl_gcc_tsif_ref_clk_src
,
836 .clkr
.hw
.init
= &(struct clk_init_data
){
837 .name
= "gcc_tsif_ref_clk_src",
838 .parent_data
= gcc_parents_7
,
840 .flags
= CLK_SET_RATE_PARENT
,
841 .ops
= &clk_rcg2_ops
,
845 static const struct freq_tbl ftbl_gcc_ufs_card_axi_clk_src
[] = {
846 F(25000000, P_GPLL0_OUT_EVEN
, 12, 0, 0),
847 F(50000000, P_GPLL0_OUT_EVEN
, 6, 0, 0),
848 F(100000000, P_GPLL0_OUT_MAIN
, 6, 0, 0),
849 F(200000000, P_GPLL0_OUT_MAIN
, 3, 0, 0),
850 F(240000000, P_GPLL0_OUT_MAIN
, 2.5, 0, 0),
854 static struct clk_rcg2 gcc_ufs_card_axi_clk_src
= {
858 .parent_map
= gcc_parent_map_0
,
859 .freq_tbl
= ftbl_gcc_ufs_card_axi_clk_src
,
860 .clkr
.hw
.init
= &(struct clk_init_data
){
861 .name
= "gcc_ufs_card_axi_clk_src",
862 .parent_data
= gcc_parents_0
,
864 .flags
= CLK_SET_RATE_PARENT
,
865 .ops
= &clk_rcg2_ops
,
869 static const struct freq_tbl ftbl_gcc_ufs_card_ice_core_clk_src
[] = {
870 F(37500000, P_GPLL0_OUT_EVEN
, 8, 0, 0),
871 F(75000000, P_GPLL0_OUT_EVEN
, 4, 0, 0),
872 F(150000000, P_GPLL0_OUT_MAIN
, 4, 0, 0),
873 F(300000000, P_GPLL0_OUT_MAIN
, 2, 0, 0),
877 static struct clk_rcg2 gcc_ufs_card_ice_core_clk_src
= {
881 .parent_map
= gcc_parent_map_0
,
882 .freq_tbl
= ftbl_gcc_ufs_card_ice_core_clk_src
,
883 .clkr
.hw
.init
= &(struct clk_init_data
){
884 .name
= "gcc_ufs_card_ice_core_clk_src",
885 .parent_data
= gcc_parents_0
,
887 .flags
= CLK_SET_RATE_PARENT
,
888 .ops
= &clk_rcg2_ops
,
892 static const struct freq_tbl ftbl_gcc_ufs_card_phy_aux_clk_src
[] = {
893 F(19200000, P_BI_TCXO
, 1, 0, 0),
897 static struct clk_rcg2 gcc_ufs_card_phy_aux_clk_src
= {
901 .parent_map
= gcc_parent_map_4
,
902 .freq_tbl
= ftbl_gcc_ufs_card_phy_aux_clk_src
,
903 .clkr
.hw
.init
= &(struct clk_init_data
){
904 .name
= "gcc_ufs_card_phy_aux_clk_src",
905 .parent_data
= gcc_parents_4
,
907 .flags
= CLK_SET_RATE_PARENT
,
908 .ops
= &clk_rcg2_ops
,
912 static const struct freq_tbl ftbl_gcc_ufs_card_unipro_core_clk_src
[] = {
913 F(37500000, P_GPLL0_OUT_EVEN
, 8, 0, 0),
914 F(75000000, P_GPLL0_OUT_MAIN
, 8, 0, 0),
915 F(150000000, P_GPLL0_OUT_MAIN
, 4, 0, 0),
919 static struct clk_rcg2 gcc_ufs_card_unipro_core_clk_src
= {
923 .parent_map
= gcc_parent_map_0
,
924 .freq_tbl
= ftbl_gcc_ufs_card_unipro_core_clk_src
,
925 .clkr
.hw
.init
= &(struct clk_init_data
){
926 .name
= "gcc_ufs_card_unipro_core_clk_src",
927 .parent_data
= gcc_parents_0
,
929 .flags
= CLK_SET_RATE_PARENT
,
930 .ops
= &clk_rcg2_ops
,
934 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src
[] = {
935 F(25000000, P_GPLL0_OUT_EVEN
, 12, 0, 0),
936 F(37500000, P_GPLL0_OUT_EVEN
, 8, 0, 0),
937 F(75000000, P_GPLL0_OUT_EVEN
, 4, 0, 0),
938 F(150000000, P_GPLL0_OUT_MAIN
, 4, 0, 0),
939 F(300000000, P_GPLL0_OUT_MAIN
, 2, 0, 0),
943 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src
= {
947 .parent_map
= gcc_parent_map_0
,
948 .freq_tbl
= ftbl_gcc_ufs_phy_axi_clk_src
,
949 .clkr
.hw
.init
= &(struct clk_init_data
){
950 .name
= "gcc_ufs_phy_axi_clk_src",
951 .parent_data
= gcc_parents_0
,
953 .flags
= CLK_SET_RATE_PARENT
,
954 .ops
= &clk_rcg2_ops
,
958 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src
= {
962 .parent_map
= gcc_parent_map_0
,
963 .freq_tbl
= ftbl_gcc_ufs_card_ice_core_clk_src
,
964 .clkr
.hw
.init
= &(struct clk_init_data
){
965 .name
= "gcc_ufs_phy_ice_core_clk_src",
966 .parent_data
= gcc_parents_0
,
968 .flags
= CLK_SET_RATE_PARENT
,
969 .ops
= &clk_rcg2_ops
,
973 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src
= {
977 .parent_map
= gcc_parent_map_4
,
978 .freq_tbl
= ftbl_gcc_pcie_0_aux_clk_src
,
979 .clkr
.hw
.init
= &(struct clk_init_data
){
980 .name
= "gcc_ufs_phy_phy_aux_clk_src",
981 .parent_data
= gcc_parents_4
,
983 .flags
= CLK_SET_RATE_PARENT
,
984 .ops
= &clk_rcg2_ops
,
988 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src
= {
992 .parent_map
= gcc_parent_map_0
,
993 .freq_tbl
= ftbl_gcc_ufs_card_ice_core_clk_src
,
994 .clkr
.hw
.init
= &(struct clk_init_data
){
995 .name
= "gcc_ufs_phy_unipro_core_clk_src",
996 .parent_data
= gcc_parents_0
,
998 .flags
= CLK_SET_RATE_PARENT
,
999 .ops
= &clk_rcg2_ops
,
1003 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src
[] = {
1004 F(33333333, P_GPLL0_OUT_EVEN
, 9, 0, 0),
1005 F(66666667, P_GPLL0_OUT_EVEN
, 4.5, 0, 0),
1006 F(133333333, P_GPLL0_OUT_MAIN
, 4.5, 0, 0),
1007 F(200000000, P_GPLL0_OUT_MAIN
, 3, 0, 0),
1008 F(240000000, P_GPLL0_OUT_MAIN
, 2.5, 0, 0),
1012 static struct clk_rcg2 gcc_usb30_prim_master_clk_src
= {
1016 .parent_map
= gcc_parent_map_0
,
1017 .freq_tbl
= ftbl_gcc_usb30_prim_master_clk_src
,
1018 .clkr
.hw
.init
= &(struct clk_init_data
){
1019 .name
= "gcc_usb30_prim_master_clk_src",
1020 .parent_data
= gcc_parents_0
,
1022 .flags
= CLK_SET_RATE_PARENT
,
1023 .ops
= &clk_rcg2_ops
,
1027 static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src
[] = {
1028 F(19200000, P_BI_TCXO
, 1, 0, 0),
1029 F(20000000, P_GPLL0_OUT_EVEN
, 15, 0, 0),
1030 F(60000000, P_GPLL0_OUT_EVEN
, 5, 0, 0),
1034 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src
= {
1038 .parent_map
= gcc_parent_map_0
,
1039 .freq_tbl
= ftbl_gcc_usb30_prim_mock_utmi_clk_src
,
1040 .clkr
.hw
.init
= &(struct clk_init_data
){
1041 .name
= "gcc_usb30_prim_mock_utmi_clk_src",
1042 .parent_data
= gcc_parents_0
,
1044 .flags
= CLK_SET_RATE_PARENT
,
1045 .ops
= &clk_rcg2_ops
,
1049 static struct clk_rcg2 gcc_usb30_sec_master_clk_src
= {
1050 .cmd_rcgr
= 0x1001c,
1053 .parent_map
= gcc_parent_map_0
,
1054 .freq_tbl
= ftbl_gcc_usb30_prim_master_clk_src
,
1055 .clkr
.hw
.init
= &(struct clk_init_data
){
1056 .name
= "gcc_usb30_sec_master_clk_src",
1057 .parent_data
= gcc_parents_0
,
1059 .flags
= CLK_SET_RATE_PARENT
,
1060 .ops
= &clk_rcg2_ops
,
1064 static struct clk_rcg2 gcc_usb30_sec_mock_utmi_clk_src
= {
1065 .cmd_rcgr
= 0x10034,
1068 .parent_map
= gcc_parent_map_0
,
1069 .freq_tbl
= ftbl_gcc_usb30_prim_mock_utmi_clk_src
,
1070 .clkr
.hw
.init
= &(struct clk_init_data
){
1071 .name
= "gcc_usb30_sec_mock_utmi_clk_src",
1072 .parent_data
= gcc_parents_0
,
1074 .flags
= CLK_SET_RATE_PARENT
,
1075 .ops
= &clk_rcg2_ops
,
1079 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src
= {
1083 .parent_map
= gcc_parent_map_2
,
1084 .freq_tbl
= ftbl_gcc_ufs_card_phy_aux_clk_src
,
1085 .clkr
.hw
.init
= &(struct clk_init_data
){
1086 .name
= "gcc_usb3_prim_phy_aux_clk_src",
1087 .parent_data
= gcc_parents_2
,
1089 .flags
= CLK_SET_RATE_PARENT
,
1090 .ops
= &clk_rcg2_ops
,
1094 static struct clk_rcg2 gcc_usb3_sec_phy_aux_clk_src
= {
1095 .cmd_rcgr
= 0x10060,
1098 .parent_map
= gcc_parent_map_2
,
1099 .freq_tbl
= ftbl_gcc_ufs_card_phy_aux_clk_src
,
1100 .clkr
.hw
.init
= &(struct clk_init_data
){
1101 .name
= "gcc_usb3_sec_phy_aux_clk_src",
1102 .parent_data
= gcc_parents_2
,
1104 .flags
= CLK_SET_RATE_PARENT
,
1105 .ops
= &clk_rcg2_ops
,
1109 static struct clk_branch gcc_aggre_noc_pcie_tbu_clk
= {
1110 .halt_reg
= 0x90018,
1111 .halt_check
= BRANCH_HALT
,
1113 .enable_reg
= 0x90018,
1114 .enable_mask
= BIT(0),
1115 .hw
.init
= &(struct clk_init_data
){
1116 .name
= "gcc_aggre_noc_pcie_tbu_clk",
1117 .ops
= &clk_branch2_ops
,
1122 static struct clk_branch gcc_aggre_ufs_card_axi_clk
= {
1123 .halt_reg
= 0x750c0,
1124 .halt_check
= BRANCH_HALT
,
1125 .hwcg_reg
= 0x750c0,
1128 .enable_reg
= 0x750c0,
1129 .enable_mask
= BIT(0),
1130 .hw
.init
= &(struct clk_init_data
){
1131 .name
= "gcc_aggre_ufs_card_axi_clk",
1132 .parent_hws
= (const struct clk_hw
*[]){
1133 &gcc_ufs_card_axi_clk_src
.clkr
.hw
},
1135 .flags
= CLK_SET_RATE_PARENT
,
1136 .ops
= &clk_branch2_ops
,
1141 static struct clk_branch gcc_aggre_ufs_card_axi_hw_ctl_clk
= {
1142 .halt_reg
= 0x750c0,
1143 .halt_check
= BRANCH_HALT
,
1144 .hwcg_reg
= 0x750c0,
1147 .enable_reg
= 0x750c0,
1148 .enable_mask
= BIT(1),
1149 .hw
.init
= &(struct clk_init_data
){
1150 .name
= "gcc_aggre_ufs_card_axi_hw_ctl_clk",
1151 .parent_hws
= (const struct clk_hw
*[]){
1152 &gcc_aggre_ufs_card_axi_clk
.clkr
.hw
},
1154 .flags
= CLK_SET_RATE_PARENT
,
1155 .ops
= &clk_branch_simple_ops
,
1160 static struct clk_branch gcc_aggre_ufs_phy_axi_clk
= {
1161 .halt_reg
= 0x770c0,
1162 .halt_check
= BRANCH_HALT
,
1163 .hwcg_reg
= 0x770c0,
1166 .enable_reg
= 0x770c0,
1167 .enable_mask
= BIT(0),
1168 .hw
.init
= &(struct clk_init_data
){
1169 .name
= "gcc_aggre_ufs_phy_axi_clk",
1170 .parent_hws
= (const struct clk_hw
*[]){
1171 &gcc_ufs_phy_axi_clk_src
.clkr
.hw
},
1173 .flags
= CLK_SET_RATE_PARENT
,
1174 .ops
= &clk_branch2_ops
,
1179 static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk
= {
1180 .halt_reg
= 0x770c0,
1181 .halt_check
= BRANCH_HALT
,
1182 .hwcg_reg
= 0x770c0,
1185 .enable_reg
= 0x770c0,
1186 .enable_mask
= BIT(1),
1187 .hw
.init
= &(struct clk_init_data
){
1188 .name
= "gcc_aggre_ufs_phy_axi_hw_ctl_clk",
1189 .parent_hws
= (const struct clk_hw
*[]){
1190 &gcc_aggre_ufs_phy_axi_clk
.clkr
.hw
},
1192 .flags
= CLK_SET_RATE_PARENT
,
1193 .ops
= &clk_branch_simple_ops
,
1198 static struct clk_branch gcc_aggre_usb3_prim_axi_clk
= {
1200 .halt_check
= BRANCH_HALT
,
1202 .enable_reg
= 0xf07c,
1203 .enable_mask
= BIT(0),
1204 .hw
.init
= &(struct clk_init_data
){
1205 .name
= "gcc_aggre_usb3_prim_axi_clk",
1206 .parent_hws
= (const struct clk_hw
*[]){
1207 &gcc_usb30_prim_master_clk_src
.clkr
.hw
},
1209 .flags
= CLK_SET_RATE_PARENT
,
1210 .ops
= &clk_branch2_ops
,
1215 static struct clk_branch gcc_aggre_usb3_sec_axi_clk
= {
1216 .halt_reg
= 0x1007c,
1217 .halt_check
= BRANCH_HALT
,
1219 .enable_reg
= 0x1007c,
1220 .enable_mask
= BIT(0),
1221 .hw
.init
= &(struct clk_init_data
){
1222 .name
= "gcc_aggre_usb3_sec_axi_clk",
1223 .parent_hws
= (const struct clk_hw
*[]){
1224 &gcc_usb30_sec_master_clk_src
.clkr
.hw
},
1226 .flags
= CLK_SET_RATE_PARENT
,
1227 .ops
= &clk_branch2_ops
,
1232 static struct clk_branch gcc_boot_rom_ahb_clk
= {
1233 .halt_reg
= 0x38004,
1234 .halt_check
= BRANCH_HALT_VOTED
,
1235 .hwcg_reg
= 0x38004,
1238 .enable_reg
= 0x52004,
1239 .enable_mask
= BIT(10),
1240 .hw
.init
= &(struct clk_init_data
){
1241 .name
= "gcc_boot_rom_ahb_clk",
1242 .ops
= &clk_branch2_ops
,
1248 * Clock ON depends on external parent 'config noc', so cant poll
1249 * delay and also mark as crtitical for camss boot
1251 static struct clk_branch gcc_camera_ahb_clk
= {
1253 .halt_check
= BRANCH_HALT_DELAY
,
1257 .enable_reg
= 0xb008,
1258 .enable_mask
= BIT(0),
1259 .hw
.init
= &(struct clk_init_data
){
1260 .name
= "gcc_camera_ahb_clk",
1261 .flags
= CLK_IS_CRITICAL
,
1262 .ops
= &clk_branch2_ops
,
1267 static struct clk_branch gcc_camera_hf_axi_clk
= {
1269 .halt_check
= BRANCH_HALT
,
1271 .enable_reg
= 0xb030,
1272 .enable_mask
= BIT(0),
1273 .hw
.init
= &(struct clk_init_data
){
1274 .name
= "gcc_camera_hf_axi_clk",
1275 .ops
= &clk_branch2_ops
,
1280 static struct clk_branch gcc_camera_sf_axi_clk
= {
1282 .halt_check
= BRANCH_HALT
,
1284 .enable_reg
= 0xb034,
1285 .enable_mask
= BIT(0),
1286 .hw
.init
= &(struct clk_init_data
){
1287 .name
= "gcc_camera_sf_axi_clk",
1288 .ops
= &clk_branch2_ops
,
1293 /* XO critical input to camss, so no need to poll */
1294 static struct clk_branch gcc_camera_xo_clk
= {
1296 .halt_check
= BRANCH_HALT_DELAY
,
1298 .enable_reg
= 0xb044,
1299 .enable_mask
= BIT(0),
1300 .hw
.init
= &(struct clk_init_data
){
1301 .name
= "gcc_camera_xo_clk",
1302 .flags
= CLK_IS_CRITICAL
,
1303 .ops
= &clk_branch2_ops
,
1308 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk
= {
1310 .halt_check
= BRANCH_HALT
,
1312 .enable_reg
= 0xf078,
1313 .enable_mask
= BIT(0),
1314 .hw
.init
= &(struct clk_init_data
){
1315 .name
= "gcc_cfg_noc_usb3_prim_axi_clk",
1316 .parent_hws
= (const struct clk_hw
*[]){
1317 &gcc_usb30_prim_master_clk_src
.clkr
.hw
},
1319 .flags
= CLK_SET_RATE_PARENT
,
1320 .ops
= &clk_branch2_ops
,
1325 static struct clk_branch gcc_cfg_noc_usb3_sec_axi_clk
= {
1326 .halt_reg
= 0x10078,
1327 .halt_check
= BRANCH_HALT
,
1329 .enable_reg
= 0x10078,
1330 .enable_mask
= BIT(0),
1331 .hw
.init
= &(struct clk_init_data
){
1332 .name
= "gcc_cfg_noc_usb3_sec_axi_clk",
1333 .parent_hws
= (const struct clk_hw
*[]){
1334 &gcc_usb30_sec_master_clk_src
.clkr
.hw
},
1336 .flags
= CLK_SET_RATE_PARENT
,
1337 .ops
= &clk_branch2_ops
,
1342 static struct clk_branch gcc_cpuss_ahb_clk
= {
1343 .halt_reg
= 0x48000,
1344 .halt_check
= BRANCH_HALT_VOTED
,
1346 .enable_reg
= 0x52004,
1347 .enable_mask
= BIT(21),
1348 .hw
.init
= &(struct clk_init_data
){
1349 .name
= "gcc_cpuss_ahb_clk",
1350 .parent_hws
= (const struct clk_hw
*[]){
1351 &gcc_cpuss_ahb_clk_src
.clkr
.hw
},
1353 /* required for cpuss */
1354 .flags
= CLK_IS_CRITICAL
| CLK_SET_RATE_PARENT
,
1355 .ops
= &clk_branch2_ops
,
1360 static struct clk_branch gcc_cpuss_dvm_bus_clk
= {
1361 .halt_reg
= 0x48190,
1362 .halt_check
= BRANCH_HALT
,
1364 .enable_reg
= 0x48190,
1365 .enable_mask
= BIT(0),
1366 .hw
.init
= &(struct clk_init_data
){
1367 .name
= "gcc_cpuss_dvm_bus_clk",
1368 /* required for cpuss */
1369 .flags
= CLK_IS_CRITICAL
,
1370 .ops
= &clk_branch2_ops
,
1375 static struct clk_branch gcc_cpuss_gnoc_clk
= {
1376 .halt_reg
= 0x48004,
1377 .halt_check
= BRANCH_HALT_VOTED
,
1378 .hwcg_reg
= 0x48004,
1381 .enable_reg
= 0x52004,
1382 .enable_mask
= BIT(22),
1383 .hw
.init
= &(struct clk_init_data
){
1384 .name
= "gcc_cpuss_gnoc_clk",
1385 /* required for cpuss */
1386 .flags
= CLK_IS_CRITICAL
,
1387 .ops
= &clk_branch2_ops
,
1392 static struct clk_branch gcc_cpuss_rbcpr_clk
= {
1393 .halt_reg
= 0x48008,
1394 .halt_check
= BRANCH_HALT
,
1396 .enable_reg
= 0x48008,
1397 .enable_mask
= BIT(0),
1398 .hw
.init
= &(struct clk_init_data
){
1399 .name
= "gcc_cpuss_rbcpr_clk",
1400 .ops
= &clk_branch2_ops
,
1405 static struct clk_branch gcc_ddrss_gpu_axi_clk
= {
1406 .halt_reg
= 0x71154,
1407 .halt_check
= BRANCH_VOTED
,
1409 .enable_reg
= 0x71154,
1410 .enable_mask
= BIT(0),
1411 .hw
.init
= &(struct clk_init_data
){
1412 .name
= "gcc_ddrss_gpu_axi_clk",
1413 .ops
= &clk_branch2_ops
,
1419 * Clock ON depends on external parent 'config noc', so cant poll
1420 * delay and also mark as crtitical for disp boot
1422 static struct clk_branch gcc_disp_ahb_clk
= {
1424 .halt_check
= BRANCH_HALT_DELAY
,
1428 .enable_reg
= 0xb00c,
1429 .enable_mask
= BIT(0),
1430 .hw
.init
= &(struct clk_init_data
){
1431 .name
= "gcc_disp_ahb_clk",
1432 .flags
= CLK_IS_CRITICAL
,
1433 .ops
= &clk_branch2_ops
,
1438 static struct clk_branch gcc_disp_hf_axi_clk
= {
1440 .halt_check
= BRANCH_HALT
,
1442 .enable_reg
= 0xb038,
1443 .enable_mask
= BIT(0),
1444 .hw
.init
= &(struct clk_init_data
){
1445 .name
= "gcc_disp_hf_axi_clk",
1446 .ops
= &clk_branch2_ops
,
1451 static struct clk_branch gcc_disp_sf_axi_clk
= {
1453 .halt_check
= BRANCH_HALT
,
1455 .enable_reg
= 0xb03c,
1456 .enable_mask
= BIT(0),
1457 .hw
.init
= &(struct clk_init_data
){
1458 .name
= "gcc_disp_sf_axi_clk",
1459 .ops
= &clk_branch2_ops
,
1464 /* XO critical input to disp, so no need to poll */
1465 static struct clk_branch gcc_disp_xo_clk
= {
1467 .halt_check
= BRANCH_HALT_DELAY
,
1469 .enable_reg
= 0xb048,
1470 .enable_mask
= BIT(0),
1471 .hw
.init
= &(struct clk_init_data
){
1472 .name
= "gcc_disp_xo_clk",
1473 .flags
= CLK_IS_CRITICAL
,
1474 .ops
= &clk_branch2_ops
,
1479 static struct clk_branch gcc_emac_axi_clk
= {
1481 .halt_check
= BRANCH_HALT
,
1483 .enable_reg
= 0x6010,
1484 .enable_mask
= BIT(0),
1485 .hw
.init
= &(struct clk_init_data
){
1486 .name
= "gcc_emac_axi_clk",
1487 .ops
= &clk_branch2_ops
,
1492 static struct clk_branch gcc_emac_ptp_clk
= {
1494 .halt_check
= BRANCH_HALT
,
1496 .enable_reg
= 0x6034,
1497 .enable_mask
= BIT(0),
1498 .hw
.init
= &(struct clk_init_data
){
1499 .name
= "gcc_emac_ptp_clk",
1500 .parent_hws
= (const struct clk_hw
*[]){
1501 &gcc_emac_ptp_clk_src
.clkr
.hw
},
1503 .flags
= CLK_SET_RATE_PARENT
,
1504 .ops
= &clk_branch2_ops
,
1509 static struct clk_branch gcc_emac_rgmii_clk
= {
1511 .halt_check
= BRANCH_HALT
,
1513 .enable_reg
= 0x6018,
1514 .enable_mask
= BIT(0),
1515 .hw
.init
= &(struct clk_init_data
){
1516 .name
= "gcc_emac_rgmii_clk",
1517 .parent_hws
= (const struct clk_hw
*[]){
1518 &gcc_emac_rgmii_clk_src
.clkr
.hw
},
1520 .flags
= CLK_SET_RATE_PARENT
,
1521 .ops
= &clk_branch2_ops
,
1526 static struct clk_branch gcc_emac_slv_ahb_clk
= {
1528 .halt_check
= BRANCH_HALT
,
1532 .enable_reg
= 0x6014,
1533 .enable_mask
= BIT(0),
1534 .hw
.init
= &(struct clk_init_data
){
1535 .name
= "gcc_emac_slv_ahb_clk",
1536 .ops
= &clk_branch2_ops
,
1541 static struct clk_branch gcc_gp1_clk
= {
1542 .halt_reg
= 0x64000,
1543 .halt_check
= BRANCH_HALT
,
1545 .enable_reg
= 0x64000,
1546 .enable_mask
= BIT(0),
1547 .hw
.init
= &(struct clk_init_data
){
1548 .name
= "gcc_gp1_clk",
1549 .parent_hws
= (const struct clk_hw
*[]){
1550 &gcc_gp1_clk_src
.clkr
.hw
},
1552 .flags
= CLK_SET_RATE_PARENT
,
1553 .ops
= &clk_branch2_ops
,
1558 static struct clk_branch gcc_gp2_clk
= {
1559 .halt_reg
= 0x65000,
1560 .halt_check
= BRANCH_HALT
,
1562 .enable_reg
= 0x65000,
1563 .enable_mask
= BIT(0),
1564 .hw
.init
= &(struct clk_init_data
){
1565 .name
= "gcc_gp2_clk",
1566 .parent_hws
= (const struct clk_hw
*[]){
1567 &gcc_gp2_clk_src
.clkr
.hw
},
1569 .flags
= CLK_SET_RATE_PARENT
,
1570 .ops
= &clk_branch2_ops
,
1575 static struct clk_branch gcc_gp3_clk
= {
1576 .halt_reg
= 0x66000,
1577 .halt_check
= BRANCH_HALT
,
1579 .enable_reg
= 0x66000,
1580 .enable_mask
= BIT(0),
1581 .hw
.init
= &(struct clk_init_data
){
1582 .name
= "gcc_gp3_clk",
1583 .parent_hws
= (const struct clk_hw
*[]){
1584 &gcc_gp3_clk_src
.clkr
.hw
},
1586 .flags
= CLK_SET_RATE_PARENT
,
1587 .ops
= &clk_branch2_ops
,
1592 static struct clk_branch gcc_gpu_cfg_ahb_clk
= {
1593 .halt_reg
= 0x71004,
1594 .halt_check
= BRANCH_HALT
,
1595 .hwcg_reg
= 0x71004,
1598 .enable_reg
= 0x71004,
1599 .enable_mask
= BIT(0),
1600 .hw
.init
= &(struct clk_init_data
){
1601 .name
= "gcc_gpu_cfg_ahb_clk",
1602 /* required for gpu */
1603 .flags
= CLK_IS_CRITICAL
,
1604 .ops
= &clk_branch2_ops
,
1609 static struct clk_branch gcc_gpu_gpll0_clk_src
= {
1610 .halt_check
= BRANCH_HALT_SKIP
,
1612 .enable_reg
= 0x52004,
1613 .enable_mask
= BIT(15),
1614 .hw
.init
= &(struct clk_init_data
){
1615 .name
= "gcc_gpu_gpll0_clk_src",
1616 .parent_hws
= (const struct clk_hw
*[]){
1619 .flags
= CLK_SET_RATE_PARENT
,
1620 .ops
= &clk_branch2_ops
,
1625 static struct clk_branch gcc_gpu_gpll0_div_clk_src
= {
1626 .halt_check
= BRANCH_HALT_SKIP
,
1628 .enable_reg
= 0x52004,
1629 .enable_mask
= BIT(16),
1630 .hw
.init
= &(struct clk_init_data
){
1631 .name
= "gcc_gpu_gpll0_div_clk_src",
1632 .parent_hws
= (const struct clk_hw
*[]){
1633 &gpll0_out_even
.clkr
.hw
},
1635 .flags
= CLK_SET_RATE_PARENT
,
1636 .ops
= &clk_branch2_ops
,
1641 static struct clk_branch gcc_gpu_iref_clk
= {
1642 .halt_reg
= 0x8c010,
1643 .halt_check
= BRANCH_HALT
,
1645 .enable_reg
= 0x8c010,
1646 .enable_mask
= BIT(0),
1647 .hw
.init
= &(struct clk_init_data
){
1648 .name
= "gcc_gpu_iref_clk",
1649 .ops
= &clk_branch2_ops
,
1654 static struct clk_branch gcc_gpu_memnoc_gfx_clk
= {
1655 .halt_reg
= 0x7100c,
1656 .halt_check
= BRANCH_VOTED
,
1658 .enable_reg
= 0x7100c,
1659 .enable_mask
= BIT(0),
1660 .hw
.init
= &(struct clk_init_data
){
1661 .name
= "gcc_gpu_memnoc_gfx_clk",
1662 .ops
= &clk_branch2_ops
,
1667 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk
= {
1668 .halt_reg
= 0x71018,
1669 .halt_check
= BRANCH_HALT
,
1671 .enable_reg
= 0x71018,
1672 .enable_mask
= BIT(0),
1673 .hw
.init
= &(struct clk_init_data
){
1674 .name
= "gcc_gpu_snoc_dvm_gfx_clk",
1675 .ops
= &clk_branch2_ops
,
1680 static struct clk_branch gcc_npu_at_clk
= {
1681 .halt_reg
= 0x4d010,
1682 .halt_check
= BRANCH_VOTED
,
1684 .enable_reg
= 0x4d010,
1685 .enable_mask
= BIT(0),
1686 .hw
.init
= &(struct clk_init_data
){
1687 .name
= "gcc_npu_at_clk",
1688 .ops
= &clk_branch2_ops
,
1693 static struct clk_branch gcc_npu_axi_clk
= {
1694 .halt_reg
= 0x4d008,
1695 .halt_check
= BRANCH_VOTED
,
1697 .enable_reg
= 0x4d008,
1698 .enable_mask
= BIT(0),
1699 .hw
.init
= &(struct clk_init_data
){
1700 .name
= "gcc_npu_axi_clk",
1701 .ops
= &clk_branch2_ops
,
1706 static struct clk_branch gcc_npu_cfg_ahb_clk
= {
1707 .halt_reg
= 0x4d004,
1708 .halt_check
= BRANCH_HALT
,
1709 .hwcg_reg
= 0x4d004,
1712 .enable_reg
= 0x4d004,
1713 .enable_mask
= BIT(0),
1714 .hw
.init
= &(struct clk_init_data
){
1715 .name
= "gcc_npu_cfg_ahb_clk",
1716 /* required for npu */
1717 .flags
= CLK_IS_CRITICAL
,
1718 .ops
= &clk_branch2_ops
,
1723 static struct clk_branch gcc_npu_gpll0_clk_src
= {
1724 .halt_check
= BRANCH_HALT_SKIP
,
1726 .enable_reg
= 0x52004,
1727 .enable_mask
= BIT(18),
1728 .hw
.init
= &(struct clk_init_data
){
1729 .name
= "gcc_npu_gpll0_clk_src",
1730 .parent_hws
= (const struct clk_hw
*[]){
1733 .flags
= CLK_SET_RATE_PARENT
,
1734 .ops
= &clk_branch2_ops
,
1739 static struct clk_branch gcc_npu_gpll0_div_clk_src
= {
1740 .halt_check
= BRANCH_HALT_SKIP
,
1742 .enable_reg
= 0x52004,
1743 .enable_mask
= BIT(19),
1744 .hw
.init
= &(struct clk_init_data
){
1745 .name
= "gcc_npu_gpll0_div_clk_src",
1746 .parent_hws
= (const struct clk_hw
*[]){
1747 &gpll0_out_even
.clkr
.hw
},
1749 .flags
= CLK_SET_RATE_PARENT
,
1750 .ops
= &clk_branch2_ops
,
1755 static struct clk_branch gcc_npu_trig_clk
= {
1756 .halt_reg
= 0x4d00c,
1757 .halt_check
= BRANCH_VOTED
,
1759 .enable_reg
= 0x4d00c,
1760 .enable_mask
= BIT(0),
1761 .hw
.init
= &(struct clk_init_data
){
1762 .name
= "gcc_npu_trig_clk",
1763 .ops
= &clk_branch2_ops
,
1768 static struct clk_branch gcc_pcie0_phy_refgen_clk
= {
1769 .halt_reg
= 0x6f02c,
1770 .halt_check
= BRANCH_HALT
,
1772 .enable_reg
= 0x6f02c,
1773 .enable_mask
= BIT(0),
1774 .hw
.init
= &(struct clk_init_data
){
1775 .name
= "gcc_pcie0_phy_refgen_clk",
1776 .parent_hws
= (const struct clk_hw
*[]){
1777 &gcc_pcie_phy_refgen_clk_src
.clkr
.hw
},
1779 .flags
= CLK_SET_RATE_PARENT
,
1780 .ops
= &clk_branch2_ops
,
1785 static struct clk_branch gcc_pcie1_phy_refgen_clk
= {
1786 .halt_reg
= 0x6f030,
1787 .halt_check
= BRANCH_HALT
,
1789 .enable_reg
= 0x6f030,
1790 .enable_mask
= BIT(0),
1791 .hw
.init
= &(struct clk_init_data
){
1792 .name
= "gcc_pcie1_phy_refgen_clk",
1793 .parent_hws
= (const struct clk_hw
*[]){
1794 &gcc_pcie_phy_refgen_clk_src
.clkr
.hw
},
1796 .flags
= CLK_SET_RATE_PARENT
,
1797 .ops
= &clk_branch2_ops
,
1802 static struct clk_branch gcc_pcie_0_aux_clk
= {
1803 .halt_reg
= 0x6b020,
1804 .halt_check
= BRANCH_HALT_VOTED
,
1806 .enable_reg
= 0x5200c,
1807 .enable_mask
= BIT(3),
1808 .hw
.init
= &(struct clk_init_data
){
1809 .name
= "gcc_pcie_0_aux_clk",
1810 .parent_hws
= (const struct clk_hw
*[]){
1811 &gcc_pcie_0_aux_clk_src
.clkr
.hw
},
1813 .flags
= CLK_SET_RATE_PARENT
,
1814 .ops
= &clk_branch2_ops
,
1819 static struct clk_branch gcc_pcie_0_cfg_ahb_clk
= {
1820 .halt_reg
= 0x6b01c,
1821 .halt_check
= BRANCH_HALT_VOTED
,
1822 .hwcg_reg
= 0x6b01c,
1825 .enable_reg
= 0x5200c,
1826 .enable_mask
= BIT(2),
1827 .hw
.init
= &(struct clk_init_data
){
1828 .name
= "gcc_pcie_0_cfg_ahb_clk",
1829 .ops
= &clk_branch2_ops
,
1834 static struct clk_branch gcc_pcie_0_clkref_clk
= {
1835 .halt_reg
= 0x8c00c,
1836 .halt_check
= BRANCH_HALT
,
1838 .enable_reg
= 0x8c00c,
1839 .enable_mask
= BIT(0),
1840 .hw
.init
= &(struct clk_init_data
){
1841 .name
= "gcc_pcie_0_clkref_clk",
1842 .ops
= &clk_branch2_ops
,
1847 static struct clk_branch gcc_pcie_0_mstr_axi_clk
= {
1848 .halt_reg
= 0x6b018,
1849 .halt_check
= BRANCH_HALT_VOTED
,
1851 .enable_reg
= 0x5200c,
1852 .enable_mask
= BIT(1),
1853 .hw
.init
= &(struct clk_init_data
){
1854 .name
= "gcc_pcie_0_mstr_axi_clk",
1855 .ops
= &clk_branch2_ops
,
1860 /* Clock ON depends on external parent 'PIPE' clock, so dont poll */
1861 static struct clk_branch gcc_pcie_0_pipe_clk
= {
1862 .halt_reg
= 0x6b024,
1863 .halt_check
= BRANCH_HALT_DELAY
,
1865 .enable_reg
= 0x5200c,
1866 .enable_mask
= BIT(4),
1867 .hw
.init
= &(struct clk_init_data
){
1868 .name
= "gcc_pcie_0_pipe_clk",
1869 .ops
= &clk_branch2_ops
,
1874 static struct clk_branch gcc_pcie_0_slv_axi_clk
= {
1875 .halt_reg
= 0x6b014,
1876 .halt_check
= BRANCH_HALT_VOTED
,
1877 .hwcg_reg
= 0x6b014,
1880 .enable_reg
= 0x5200c,
1881 .enable_mask
= BIT(0),
1882 .hw
.init
= &(struct clk_init_data
){
1883 .name
= "gcc_pcie_0_slv_axi_clk",
1884 .ops
= &clk_branch2_ops
,
1889 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk
= {
1890 .halt_reg
= 0x6b010,
1891 .halt_check
= BRANCH_HALT_VOTED
,
1893 .enable_reg
= 0x5200c,
1894 .enable_mask
= BIT(5),
1895 .hw
.init
= &(struct clk_init_data
){
1896 .name
= "gcc_pcie_0_slv_q2a_axi_clk",
1897 .ops
= &clk_branch2_ops
,
1902 static struct clk_branch gcc_pcie_1_aux_clk
= {
1903 .halt_reg
= 0x8d020,
1904 .halt_check
= BRANCH_HALT_VOTED
,
1906 .enable_reg
= 0x52004,
1907 .enable_mask
= BIT(29),
1908 .hw
.init
= &(struct clk_init_data
){
1909 .name
= "gcc_pcie_1_aux_clk",
1910 .parent_hws
= (const struct clk_hw
*[]){
1911 &gcc_pcie_1_aux_clk_src
.clkr
.hw
},
1913 .flags
= CLK_SET_RATE_PARENT
,
1914 .ops
= &clk_branch2_ops
,
1919 static struct clk_branch gcc_pcie_1_cfg_ahb_clk
= {
1920 .halt_reg
= 0x8d01c,
1921 .halt_check
= BRANCH_HALT_VOTED
,
1922 .hwcg_reg
= 0x8d01c,
1925 .enable_reg
= 0x52004,
1926 .enable_mask
= BIT(28),
1927 .hw
.init
= &(struct clk_init_data
){
1928 .name
= "gcc_pcie_1_cfg_ahb_clk",
1929 .ops
= &clk_branch2_ops
,
1934 static struct clk_branch gcc_pcie_1_clkref_clk
= {
1935 .halt_reg
= 0x8c02c,
1936 .halt_check
= BRANCH_HALT
,
1938 .enable_reg
= 0x8c02c,
1939 .enable_mask
= BIT(0),
1940 .hw
.init
= &(struct clk_init_data
){
1941 .name
= "gcc_pcie_1_clkref_clk",
1942 .ops
= &clk_branch2_ops
,
1947 static struct clk_branch gcc_pcie_1_mstr_axi_clk
= {
1948 .halt_reg
= 0x8d018,
1949 .halt_check
= BRANCH_HALT_VOTED
,
1951 .enable_reg
= 0x52004,
1952 .enable_mask
= BIT(27),
1953 .hw
.init
= &(struct clk_init_data
){
1954 .name
= "gcc_pcie_1_mstr_axi_clk",
1955 .ops
= &clk_branch2_ops
,
1960 /* Clock ON depends on external parent 'PIPE' clock, so dont poll */
1961 static struct clk_branch gcc_pcie_1_pipe_clk
= {
1962 .halt_reg
= 0x8d024,
1963 .halt_check
= BRANCH_HALT_DELAY
,
1965 .enable_reg
= 0x52004,
1966 .enable_mask
= BIT(30),
1967 .hw
.init
= &(struct clk_init_data
){
1968 .name
= "gcc_pcie_1_pipe_clk",
1969 .ops
= &clk_branch2_ops
,
1974 static struct clk_branch gcc_pcie_1_slv_axi_clk
= {
1975 .halt_reg
= 0x8d014,
1976 .halt_check
= BRANCH_HALT_VOTED
,
1977 .hwcg_reg
= 0x8d014,
1980 .enable_reg
= 0x52004,
1981 .enable_mask
= BIT(26),
1982 .hw
.init
= &(struct clk_init_data
){
1983 .name
= "gcc_pcie_1_slv_axi_clk",
1984 .ops
= &clk_branch2_ops
,
1989 static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk
= {
1990 .halt_reg
= 0x8d010,
1991 .halt_check
= BRANCH_HALT_VOTED
,
1993 .enable_reg
= 0x52004,
1994 .enable_mask
= BIT(25),
1995 .hw
.init
= &(struct clk_init_data
){
1996 .name
= "gcc_pcie_1_slv_q2a_axi_clk",
1997 .ops
= &clk_branch2_ops
,
2002 static struct clk_branch gcc_pcie_phy_aux_clk
= {
2003 .halt_reg
= 0x6f004,
2004 .halt_check
= BRANCH_HALT
,
2006 .enable_reg
= 0x6f004,
2007 .enable_mask
= BIT(0),
2008 .hw
.init
= &(struct clk_init_data
){
2009 .name
= "gcc_pcie_phy_aux_clk",
2010 .parent_hws
= (const struct clk_hw
*[]){
2011 &gcc_pcie_0_aux_clk_src
.clkr
.hw
},
2013 .flags
= CLK_SET_RATE_PARENT
,
2014 .ops
= &clk_branch2_ops
,
2019 static struct clk_branch gcc_pdm2_clk
= {
2020 .halt_reg
= 0x3300c,
2021 .halt_check
= BRANCH_HALT
,
2023 .enable_reg
= 0x3300c,
2024 .enable_mask
= BIT(0),
2025 .hw
.init
= &(struct clk_init_data
){
2026 .name
= "gcc_pdm2_clk",
2027 .parent_hws
= (const struct clk_hw
*[]){
2028 &gcc_pdm2_clk_src
.clkr
.hw
},
2030 .flags
= CLK_SET_RATE_PARENT
,
2031 .ops
= &clk_branch2_ops
,
2036 static struct clk_branch gcc_pdm_ahb_clk
= {
2037 .halt_reg
= 0x33004,
2038 .halt_check
= BRANCH_HALT
,
2039 .hwcg_reg
= 0x33004,
2042 .enable_reg
= 0x33004,
2043 .enable_mask
= BIT(0),
2044 .hw
.init
= &(struct clk_init_data
){
2045 .name
= "gcc_pdm_ahb_clk",
2046 .ops
= &clk_branch2_ops
,
2051 static struct clk_branch gcc_pdm_xo4_clk
= {
2052 .halt_reg
= 0x33008,
2053 .halt_check
= BRANCH_HALT
,
2055 .enable_reg
= 0x33008,
2056 .enable_mask
= BIT(0),
2057 .hw
.init
= &(struct clk_init_data
){
2058 .name
= "gcc_pdm_xo4_clk",
2059 .ops
= &clk_branch2_ops
,
2064 static struct clk_branch gcc_prng_ahb_clk
= {
2065 .halt_reg
= 0x34004,
2066 .halt_check
= BRANCH_HALT_VOTED
,
2068 .enable_reg
= 0x52004,
2069 .enable_mask
= BIT(13),
2070 .hw
.init
= &(struct clk_init_data
){
2071 .name
= "gcc_prng_ahb_clk",
2072 .ops
= &clk_branch2_ops
,
2077 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk
= {
2079 .halt_check
= BRANCH_HALT
,
2083 .enable_reg
= 0xb018,
2084 .enable_mask
= BIT(0),
2085 .hw
.init
= &(struct clk_init_data
){
2086 .name
= "gcc_qmip_camera_nrt_ahb_clk",
2087 .ops
= &clk_branch2_ops
,
2092 static struct clk_branch gcc_qmip_camera_rt_ahb_clk
= {
2094 .halt_check
= BRANCH_HALT
,
2098 .enable_reg
= 0xb01c,
2099 .enable_mask
= BIT(0),
2100 .hw
.init
= &(struct clk_init_data
){
2101 .name
= "gcc_qmip_camera_rt_ahb_clk",
2102 .ops
= &clk_branch2_ops
,
2107 static struct clk_branch gcc_qmip_disp_ahb_clk
= {
2109 .halt_check
= BRANCH_HALT
,
2113 .enable_reg
= 0xb020,
2114 .enable_mask
= BIT(0),
2115 .hw
.init
= &(struct clk_init_data
){
2116 .name
= "gcc_qmip_disp_ahb_clk",
2117 .ops
= &clk_branch2_ops
,
2122 static struct clk_branch gcc_qmip_video_cvp_ahb_clk
= {
2124 .halt_check
= BRANCH_HALT
,
2128 .enable_reg
= 0xb010,
2129 .enable_mask
= BIT(0),
2130 .hw
.init
= &(struct clk_init_data
){
2131 .name
= "gcc_qmip_video_cvp_ahb_clk",
2132 .ops
= &clk_branch2_ops
,
2137 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk
= {
2139 .halt_check
= BRANCH_HALT
,
2143 .enable_reg
= 0xb014,
2144 .enable_mask
= BIT(0),
2145 .hw
.init
= &(struct clk_init_data
){
2146 .name
= "gcc_qmip_video_vcodec_ahb_clk",
2147 .ops
= &clk_branch2_ops
,
2152 static struct clk_branch gcc_qspi_cnoc_periph_ahb_clk
= {
2153 .halt_reg
= 0x4b000,
2154 .halt_check
= BRANCH_HALT
,
2156 .enable_reg
= 0x4b000,
2157 .enable_mask
= BIT(0),
2158 .hw
.init
= &(struct clk_init_data
){
2159 .name
= "gcc_qspi_cnoc_periph_ahb_clk",
2160 .ops
= &clk_branch2_ops
,
2165 static struct clk_branch gcc_qspi_core_clk
= {
2166 .halt_reg
= 0x4b004,
2167 .halt_check
= BRANCH_HALT
,
2169 .enable_reg
= 0x4b004,
2170 .enable_mask
= BIT(0),
2171 .hw
.init
= &(struct clk_init_data
){
2172 .name
= "gcc_qspi_core_clk",
2173 .parent_hws
= (const struct clk_hw
*[]){
2174 &gcc_qspi_core_clk_src
.clkr
.hw
},
2176 .flags
= CLK_SET_RATE_PARENT
,
2177 .ops
= &clk_branch2_ops
,
2182 static struct clk_branch gcc_qupv3_wrap0_s0_clk
= {
2183 .halt_reg
= 0x17144,
2184 .halt_check
= BRANCH_HALT_VOTED
,
2186 .enable_reg
= 0x5200c,
2187 .enable_mask
= BIT(10),
2188 .hw
.init
= &(struct clk_init_data
){
2189 .name
= "gcc_qupv3_wrap0_s0_clk",
2190 .parent_hws
= (const struct clk_hw
*[]){
2191 &gcc_qupv3_wrap0_s0_clk_src
.clkr
.hw
},
2193 .flags
= CLK_SET_RATE_PARENT
,
2194 .ops
= &clk_branch2_ops
,
2199 static struct clk_branch gcc_qupv3_wrap0_s1_clk
= {
2200 .halt_reg
= 0x17274,
2201 .halt_check
= BRANCH_HALT_VOTED
,
2203 .enable_reg
= 0x5200c,
2204 .enable_mask
= BIT(11),
2205 .hw
.init
= &(struct clk_init_data
){
2206 .name
= "gcc_qupv3_wrap0_s1_clk",
2207 .parent_hws
= (const struct clk_hw
*[]){
2208 &gcc_qupv3_wrap0_s1_clk_src
.clkr
.hw
},
2210 .flags
= CLK_SET_RATE_PARENT
,
2211 .ops
= &clk_branch2_ops
,
2216 static struct clk_branch gcc_qupv3_wrap0_s2_clk
= {
2217 .halt_reg
= 0x173a4,
2218 .halt_check
= BRANCH_HALT_VOTED
,
2220 .enable_reg
= 0x5200c,
2221 .enable_mask
= BIT(12),
2222 .hw
.init
= &(struct clk_init_data
){
2223 .name
= "gcc_qupv3_wrap0_s2_clk",
2224 .parent_hws
= (const struct clk_hw
*[]){
2225 &gcc_qupv3_wrap0_s2_clk_src
.clkr
.hw
},
2227 .flags
= CLK_SET_RATE_PARENT
,
2228 .ops
= &clk_branch2_ops
,
2233 static struct clk_branch gcc_qupv3_wrap0_s3_clk
= {
2234 .halt_reg
= 0x174d4,
2235 .halt_check
= BRANCH_HALT_VOTED
,
2237 .enable_reg
= 0x5200c,
2238 .enable_mask
= BIT(13),
2239 .hw
.init
= &(struct clk_init_data
){
2240 .name
= "gcc_qupv3_wrap0_s3_clk",
2241 .parent_hws
= (const struct clk_hw
*[]){
2242 &gcc_qupv3_wrap0_s3_clk_src
.clkr
.hw
},
2244 .flags
= CLK_SET_RATE_PARENT
,
2245 .ops
= &clk_branch2_ops
,
2250 static struct clk_branch gcc_qupv3_wrap0_s4_clk
= {
2251 .halt_reg
= 0x17604,
2252 .halt_check
= BRANCH_HALT_VOTED
,
2254 .enable_reg
= 0x5200c,
2255 .enable_mask
= BIT(14),
2256 .hw
.init
= &(struct clk_init_data
){
2257 .name
= "gcc_qupv3_wrap0_s4_clk",
2258 .parent_hws
= (const struct clk_hw
*[]){
2259 &gcc_qupv3_wrap0_s4_clk_src
.clkr
.hw
},
2261 .flags
= CLK_SET_RATE_PARENT
,
2262 .ops
= &clk_branch2_ops
,
2267 static struct clk_branch gcc_qupv3_wrap0_s5_clk
= {
2268 .halt_reg
= 0x17734,
2269 .halt_check
= BRANCH_HALT_VOTED
,
2271 .enable_reg
= 0x5200c,
2272 .enable_mask
= BIT(15),
2273 .hw
.init
= &(struct clk_init_data
){
2274 .name
= "gcc_qupv3_wrap0_s5_clk",
2275 .parent_hws
= (const struct clk_hw
*[]){
2276 &gcc_qupv3_wrap0_s5_clk_src
.clkr
.hw
},
2278 .flags
= CLK_SET_RATE_PARENT
,
2279 .ops
= &clk_branch2_ops
,
2284 static struct clk_branch gcc_qupv3_wrap0_s6_clk
= {
2285 .halt_reg
= 0x17864,
2286 .halt_check
= BRANCH_HALT_VOTED
,
2288 .enable_reg
= 0x5200c,
2289 .enable_mask
= BIT(16),
2290 .hw
.init
= &(struct clk_init_data
){
2291 .name
= "gcc_qupv3_wrap0_s6_clk",
2292 .parent_hws
= (const struct clk_hw
*[]){
2293 &gcc_qupv3_wrap0_s6_clk_src
.clkr
.hw
},
2295 .flags
= CLK_SET_RATE_PARENT
,
2296 .ops
= &clk_branch2_ops
,
2301 static struct clk_branch gcc_qupv3_wrap0_s7_clk
= {
2302 .halt_reg
= 0x17994,
2303 .halt_check
= BRANCH_HALT_VOTED
,
2305 .enable_reg
= 0x5200c,
2306 .enable_mask
= BIT(17),
2307 .hw
.init
= &(struct clk_init_data
){
2308 .name
= "gcc_qupv3_wrap0_s7_clk",
2309 .parent_hws
= (const struct clk_hw
*[]){
2310 &gcc_qupv3_wrap0_s7_clk_src
.clkr
.hw
},
2312 .flags
= CLK_SET_RATE_PARENT
,
2313 .ops
= &clk_branch2_ops
,
2318 static struct clk_branch gcc_qupv3_wrap1_s0_clk
= {
2319 .halt_reg
= 0x18144,
2320 .halt_check
= BRANCH_HALT_VOTED
,
2322 .enable_reg
= 0x5200c,
2323 .enable_mask
= BIT(22),
2324 .hw
.init
= &(struct clk_init_data
){
2325 .name
= "gcc_qupv3_wrap1_s0_clk",
2326 .parent_hws
= (const struct clk_hw
*[]){
2327 &gcc_qupv3_wrap1_s0_clk_src
.clkr
.hw
},
2329 .flags
= CLK_SET_RATE_PARENT
,
2330 .ops
= &clk_branch2_ops
,
2335 static struct clk_branch gcc_qupv3_wrap1_s1_clk
= {
2336 .halt_reg
= 0x18274,
2337 .halt_check
= BRANCH_HALT_VOTED
,
2339 .enable_reg
= 0x5200c,
2340 .enable_mask
= BIT(23),
2341 .hw
.init
= &(struct clk_init_data
){
2342 .name
= "gcc_qupv3_wrap1_s1_clk",
2343 .parent_hws
= (const struct clk_hw
*[]){
2344 &gcc_qupv3_wrap1_s1_clk_src
.clkr
.hw
},
2346 .flags
= CLK_SET_RATE_PARENT
,
2347 .ops
= &clk_branch2_ops
,
2352 static struct clk_branch gcc_qupv3_wrap1_s2_clk
= {
2353 .halt_reg
= 0x183a4,
2354 .halt_check
= BRANCH_HALT_VOTED
,
2356 .enable_reg
= 0x5200c,
2357 .enable_mask
= BIT(24),
2358 .hw
.init
= &(struct clk_init_data
){
2359 .name
= "gcc_qupv3_wrap1_s2_clk",
2360 .parent_hws
= (const struct clk_hw
*[]){
2361 &gcc_qupv3_wrap1_s2_clk_src
.clkr
.hw
},
2363 .flags
= CLK_SET_RATE_PARENT
,
2364 .ops
= &clk_branch2_ops
,
2369 static struct clk_branch gcc_qupv3_wrap1_s3_clk
= {
2370 .halt_reg
= 0x184d4,
2371 .halt_check
= BRANCH_HALT_VOTED
,
2373 .enable_reg
= 0x5200c,
2374 .enable_mask
= BIT(25),
2375 .hw
.init
= &(struct clk_init_data
){
2376 .name
= "gcc_qupv3_wrap1_s3_clk",
2377 .parent_hws
= (const struct clk_hw
*[]){
2378 &gcc_qupv3_wrap1_s3_clk_src
.clkr
.hw
},
2380 .flags
= CLK_SET_RATE_PARENT
,
2381 .ops
= &clk_branch2_ops
,
2386 static struct clk_branch gcc_qupv3_wrap1_s4_clk
= {
2387 .halt_reg
= 0x18604,
2388 .halt_check
= BRANCH_HALT_VOTED
,
2390 .enable_reg
= 0x5200c,
2391 .enable_mask
= BIT(26),
2392 .hw
.init
= &(struct clk_init_data
){
2393 .name
= "gcc_qupv3_wrap1_s4_clk",
2394 .parent_hws
= (const struct clk_hw
*[]){
2395 &gcc_qupv3_wrap1_s4_clk_src
.clkr
.hw
},
2397 .flags
= CLK_SET_RATE_PARENT
,
2398 .ops
= &clk_branch2_ops
,
2403 static struct clk_branch gcc_qupv3_wrap1_s5_clk
= {
2404 .halt_reg
= 0x18734,
2405 .halt_check
= BRANCH_HALT_VOTED
,
2407 .enable_reg
= 0x5200c,
2408 .enable_mask
= BIT(27),
2409 .hw
.init
= &(struct clk_init_data
){
2410 .name
= "gcc_qupv3_wrap1_s5_clk",
2411 .parent_hws
= (const struct clk_hw
*[]){
2412 &gcc_qupv3_wrap1_s5_clk_src
.clkr
.hw
},
2414 .flags
= CLK_SET_RATE_PARENT
,
2415 .ops
= &clk_branch2_ops
,
2420 static struct clk_branch gcc_qupv3_wrap2_s0_clk
= {
2421 .halt_reg
= 0x1e144,
2422 .halt_check
= BRANCH_HALT_VOTED
,
2424 .enable_reg
= 0x52014,
2425 .enable_mask
= BIT(4),
2426 .hw
.init
= &(struct clk_init_data
){
2427 .name
= "gcc_qupv3_wrap2_s0_clk",
2428 .parent_hws
= (const struct clk_hw
*[]){
2429 &gcc_qupv3_wrap2_s0_clk_src
.clkr
.hw
},
2431 .flags
= CLK_SET_RATE_PARENT
,
2432 .ops
= &clk_branch2_ops
,
2437 static struct clk_branch gcc_qupv3_wrap2_s1_clk
= {
2438 .halt_reg
= 0x1e274,
2439 .halt_check
= BRANCH_HALT_VOTED
,
2441 .enable_reg
= 0x52014,
2442 .enable_mask
= BIT(5),
2443 .hw
.init
= &(struct clk_init_data
){
2444 .name
= "gcc_qupv3_wrap2_s1_clk",
2445 .parent_hws
= (const struct clk_hw
*[]){
2446 &gcc_qupv3_wrap2_s1_clk_src
.clkr
.hw
},
2448 .flags
= CLK_SET_RATE_PARENT
,
2449 .ops
= &clk_branch2_ops
,
2454 static struct clk_branch gcc_qupv3_wrap2_s2_clk
= {
2455 .halt_reg
= 0x1e3a4,
2456 .halt_check
= BRANCH_HALT_VOTED
,
2458 .enable_reg
= 0x52014,
2459 .enable_mask
= BIT(6),
2460 .hw
.init
= &(struct clk_init_data
){
2461 .name
= "gcc_qupv3_wrap2_s2_clk",
2462 .parent_hws
= (const struct clk_hw
*[]){
2463 &gcc_qupv3_wrap2_s2_clk_src
.clkr
.hw
},
2465 .flags
= CLK_SET_RATE_PARENT
,
2466 .ops
= &clk_branch2_ops
,
2471 static struct clk_branch gcc_qupv3_wrap2_s3_clk
= {
2472 .halt_reg
= 0x1e4d4,
2473 .halt_check
= BRANCH_HALT_VOTED
,
2475 .enable_reg
= 0x52014,
2476 .enable_mask
= BIT(7),
2477 .hw
.init
= &(struct clk_init_data
){
2478 .name
= "gcc_qupv3_wrap2_s3_clk",
2479 .parent_hws
= (const struct clk_hw
*[]){
2480 &gcc_qupv3_wrap2_s3_clk_src
.clkr
.hw
},
2482 .flags
= CLK_SET_RATE_PARENT
,
2483 .ops
= &clk_branch2_ops
,
2488 static struct clk_branch gcc_qupv3_wrap2_s4_clk
= {
2489 .halt_reg
= 0x1e604,
2490 .halt_check
= BRANCH_HALT_VOTED
,
2492 .enable_reg
= 0x52014,
2493 .enable_mask
= BIT(8),
2494 .hw
.init
= &(struct clk_init_data
){
2495 .name
= "gcc_qupv3_wrap2_s4_clk",
2496 .parent_hws
= (const struct clk_hw
*[]){
2497 &gcc_qupv3_wrap2_s4_clk_src
.clkr
.hw
},
2499 .flags
= CLK_SET_RATE_PARENT
,
2500 .ops
= &clk_branch2_ops
,
2505 static struct clk_branch gcc_qupv3_wrap2_s5_clk
= {
2506 .halt_reg
= 0x1e734,
2507 .halt_check
= BRANCH_HALT_VOTED
,
2509 .enable_reg
= 0x52014,
2510 .enable_mask
= BIT(9),
2511 .hw
.init
= &(struct clk_init_data
){
2512 .name
= "gcc_qupv3_wrap2_s5_clk",
2513 .parent_hws
= (const struct clk_hw
*[]){
2514 &gcc_qupv3_wrap2_s5_clk_src
.clkr
.hw
},
2516 .flags
= CLK_SET_RATE_PARENT
,
2517 .ops
= &clk_branch2_ops
,
2522 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk
= {
2523 .halt_reg
= 0x17004,
2524 .halt_check
= BRANCH_HALT_VOTED
,
2526 .enable_reg
= 0x5200c,
2527 .enable_mask
= BIT(6),
2528 .hw
.init
= &(struct clk_init_data
){
2529 .name
= "gcc_qupv3_wrap_0_m_ahb_clk",
2530 .ops
= &clk_branch2_ops
,
2535 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk
= {
2536 .halt_reg
= 0x17008,
2537 .halt_check
= BRANCH_HALT_VOTED
,
2538 .hwcg_reg
= 0x17008,
2541 .enable_reg
= 0x5200c,
2542 .enable_mask
= BIT(7),
2543 .hw
.init
= &(struct clk_init_data
){
2544 .name
= "gcc_qupv3_wrap_0_s_ahb_clk",
2545 .ops
= &clk_branch2_ops
,
2550 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk
= {
2551 .halt_reg
= 0x18004,
2552 .halt_check
= BRANCH_HALT_VOTED
,
2554 .enable_reg
= 0x5200c,
2555 .enable_mask
= BIT(20),
2556 .hw
.init
= &(struct clk_init_data
){
2557 .name
= "gcc_qupv3_wrap_1_m_ahb_clk",
2558 .ops
= &clk_branch2_ops
,
2563 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk
= {
2564 .halt_reg
= 0x18008,
2565 .halt_check
= BRANCH_HALT_VOTED
,
2566 .hwcg_reg
= 0x18008,
2569 .enable_reg
= 0x5200c,
2570 .enable_mask
= BIT(21),
2571 .hw
.init
= &(struct clk_init_data
){
2572 .name
= "gcc_qupv3_wrap_1_s_ahb_clk",
2573 .ops
= &clk_branch2_ops
,
2578 static struct clk_branch gcc_qupv3_wrap_2_m_ahb_clk
= {
2579 .halt_reg
= 0x1e004,
2580 .halt_check
= BRANCH_HALT_VOTED
,
2582 .enable_reg
= 0x52014,
2583 .enable_mask
= BIT(2),
2584 .hw
.init
= &(struct clk_init_data
){
2585 .name
= "gcc_qupv3_wrap_2_m_ahb_clk",
2586 .ops
= &clk_branch2_ops
,
2591 static struct clk_branch gcc_qupv3_wrap_2_s_ahb_clk
= {
2592 .halt_reg
= 0x1e008,
2593 .halt_check
= BRANCH_HALT_VOTED
,
2594 .hwcg_reg
= 0x1e008,
2597 .enable_reg
= 0x52014,
2598 .enable_mask
= BIT(1),
2599 .hw
.init
= &(struct clk_init_data
){
2600 .name
= "gcc_qupv3_wrap_2_s_ahb_clk",
2601 .ops
= &clk_branch2_ops
,
2606 static struct clk_branch gcc_sdcc2_ahb_clk
= {
2607 .halt_reg
= 0x14008,
2608 .halt_check
= BRANCH_HALT
,
2610 .enable_reg
= 0x14008,
2611 .enable_mask
= BIT(0),
2612 .hw
.init
= &(struct clk_init_data
){
2613 .name
= "gcc_sdcc2_ahb_clk",
2614 .ops
= &clk_branch2_ops
,
2619 static struct clk_branch gcc_sdcc2_apps_clk
= {
2620 .halt_reg
= 0x14004,
2621 .halt_check
= BRANCH_HALT
,
2623 .enable_reg
= 0x14004,
2624 .enable_mask
= BIT(0),
2625 .hw
.init
= &(struct clk_init_data
){
2626 .name
= "gcc_sdcc2_apps_clk",
2627 .parent_hws
= (const struct clk_hw
*[]){
2628 &gcc_sdcc2_apps_clk_src
.clkr
.hw
},
2630 .flags
= CLK_SET_RATE_PARENT
,
2631 .ops
= &clk_branch2_ops
,
2636 static struct clk_branch gcc_sdcc4_ahb_clk
= {
2637 .halt_reg
= 0x16008,
2638 .halt_check
= BRANCH_HALT
,
2640 .enable_reg
= 0x16008,
2641 .enable_mask
= BIT(0),
2642 .hw
.init
= &(struct clk_init_data
){
2643 .name
= "gcc_sdcc4_ahb_clk",
2644 .ops
= &clk_branch2_ops
,
2649 static struct clk_branch gcc_sdcc4_apps_clk
= {
2650 .halt_reg
= 0x16004,
2651 .halt_check
= BRANCH_HALT
,
2653 .enable_reg
= 0x16004,
2654 .enable_mask
= BIT(0),
2655 .hw
.init
= &(struct clk_init_data
){
2656 .name
= "gcc_sdcc4_apps_clk",
2657 .parent_hws
= (const struct clk_hw
*[]){
2658 &gcc_sdcc4_apps_clk_src
.clkr
.hw
},
2660 .flags
= CLK_SET_RATE_PARENT
,
2661 .ops
= &clk_branch2_ops
,
2666 static struct clk_branch gcc_sys_noc_cpuss_ahb_clk
= {
2667 .halt_reg
= 0x4819c,
2668 .halt_check
= BRANCH_HALT_VOTED
,
2670 .enable_reg
= 0x52004,
2671 .enable_mask
= BIT(0),
2672 .hw
.init
= &(struct clk_init_data
){
2673 .name
= "gcc_sys_noc_cpuss_ahb_clk",
2674 .parent_hws
= (const struct clk_hw
*[]){
2675 &gcc_cpuss_ahb_clk_src
.clkr
.hw
},
2677 /* required for cpuss */
2678 .flags
= CLK_IS_CRITICAL
| CLK_SET_RATE_PARENT
,
2679 .ops
= &clk_branch2_ops
,
2684 static struct clk_branch gcc_tsif_ahb_clk
= {
2685 .halt_reg
= 0x36004,
2686 .halt_check
= BRANCH_HALT
,
2688 .enable_reg
= 0x36004,
2689 .enable_mask
= BIT(0),
2690 .hw
.init
= &(struct clk_init_data
){
2691 .name
= "gcc_tsif_ahb_clk",
2692 .ops
= &clk_branch2_ops
,
2697 static struct clk_branch gcc_tsif_inactivity_timers_clk
= {
2698 .halt_reg
= 0x3600c,
2699 .halt_check
= BRANCH_HALT
,
2701 .enable_reg
= 0x3600c,
2702 .enable_mask
= BIT(0),
2703 .hw
.init
= &(struct clk_init_data
){
2704 .name
= "gcc_tsif_inactivity_timers_clk",
2705 .ops
= &clk_branch2_ops
,
2710 static struct clk_branch gcc_tsif_ref_clk
= {
2711 .halt_reg
= 0x36008,
2712 .halt_check
= BRANCH_HALT
,
2714 .enable_reg
= 0x36008,
2715 .enable_mask
= BIT(0),
2716 .hw
.init
= &(struct clk_init_data
){
2717 .name
= "gcc_tsif_ref_clk",
2718 .parent_hws
= (const struct clk_hw
*[]){
2719 &gcc_tsif_ref_clk_src
.clkr
.hw
},
2721 .flags
= CLK_SET_RATE_PARENT
,
2722 .ops
= &clk_branch2_ops
,
2727 static struct clk_branch gcc_ufs_card_ahb_clk
= {
2728 .halt_reg
= 0x75014,
2729 .halt_check
= BRANCH_HALT
,
2730 .hwcg_reg
= 0x75014,
2733 .enable_reg
= 0x75014,
2734 .enable_mask
= BIT(0),
2735 .hw
.init
= &(struct clk_init_data
){
2736 .name
= "gcc_ufs_card_ahb_clk",
2737 .ops
= &clk_branch2_ops
,
2742 static struct clk_branch gcc_ufs_card_axi_clk
= {
2743 .halt_reg
= 0x75010,
2744 .halt_check
= BRANCH_HALT
,
2745 .hwcg_reg
= 0x75010,
2748 .enable_reg
= 0x75010,
2749 .enable_mask
= BIT(0),
2750 .hw
.init
= &(struct clk_init_data
){
2751 .name
= "gcc_ufs_card_axi_clk",
2752 .parent_hws
= (const struct clk_hw
*[]){
2753 &gcc_ufs_card_axi_clk_src
.clkr
.hw
},
2755 .flags
= CLK_SET_RATE_PARENT
,
2756 .ops
= &clk_branch2_ops
,
2761 static struct clk_branch gcc_ufs_card_axi_hw_ctl_clk
= {
2762 .halt_reg
= 0x75010,
2763 .halt_check
= BRANCH_HALT
,
2764 .hwcg_reg
= 0x75010,
2767 .enable_reg
= 0x75010,
2768 .enable_mask
= BIT(1),
2769 .hw
.init
= &(struct clk_init_data
){
2770 .name
= "gcc_ufs_card_axi_hw_ctl_clk",
2771 .parent_hws
= (const struct clk_hw
*[]){
2772 &gcc_ufs_card_axi_clk
.clkr
.hw
},
2774 .flags
= CLK_SET_RATE_PARENT
,
2775 .ops
= &clk_branch_simple_ops
,
2780 static struct clk_branch gcc_ufs_card_clkref_clk
= {
2781 .halt_reg
= 0x8c004,
2782 .halt_check
= BRANCH_HALT
,
2784 .enable_reg
= 0x8c004,
2785 .enable_mask
= BIT(0),
2786 .hw
.init
= &(struct clk_init_data
){
2787 .name
= "gcc_ufs_card_clkref_clk",
2788 .ops
= &clk_branch2_ops
,
2793 static struct clk_branch gcc_ufs_card_ice_core_clk
= {
2794 .halt_reg
= 0x7505c,
2795 .halt_check
= BRANCH_HALT
,
2796 .hwcg_reg
= 0x7505c,
2799 .enable_reg
= 0x7505c,
2800 .enable_mask
= BIT(0),
2801 .hw
.init
= &(struct clk_init_data
){
2802 .name
= "gcc_ufs_card_ice_core_clk",
2803 .parent_hws
= (const struct clk_hw
*[]){
2804 &gcc_ufs_card_ice_core_clk_src
.clkr
.hw
},
2806 .flags
= CLK_SET_RATE_PARENT
,
2807 .ops
= &clk_branch2_ops
,
2812 static struct clk_branch gcc_ufs_card_ice_core_hw_ctl_clk
= {
2813 .halt_reg
= 0x7505c,
2814 .halt_check
= BRANCH_HALT
,
2815 .hwcg_reg
= 0x7505c,
2818 .enable_reg
= 0x7505c,
2819 .enable_mask
= BIT(1),
2820 .hw
.init
= &(struct clk_init_data
){
2821 .name
= "gcc_ufs_card_ice_core_hw_ctl_clk",
2822 .parent_hws
= (const struct clk_hw
*[]){
2823 &gcc_ufs_card_ice_core_clk
.clkr
.hw
},
2825 .flags
= CLK_SET_RATE_PARENT
,
2826 .ops
= &clk_branch_simple_ops
,
2831 static struct clk_branch gcc_ufs_card_phy_aux_clk
= {
2832 .halt_reg
= 0x75090,
2833 .halt_check
= BRANCH_HALT
,
2834 .hwcg_reg
= 0x75090,
2837 .enable_reg
= 0x75090,
2838 .enable_mask
= BIT(0),
2839 .hw
.init
= &(struct clk_init_data
){
2840 .name
= "gcc_ufs_card_phy_aux_clk",
2841 .parent_hws
= (const struct clk_hw
*[]){
2842 &gcc_ufs_card_phy_aux_clk_src
.clkr
.hw
},
2844 .flags
= CLK_SET_RATE_PARENT
,
2845 .ops
= &clk_branch2_ops
,
2850 static struct clk_branch gcc_ufs_card_phy_aux_hw_ctl_clk
= {
2851 .halt_reg
= 0x75090,
2852 .halt_check
= BRANCH_HALT
,
2853 .hwcg_reg
= 0x75090,
2856 .enable_reg
= 0x75090,
2857 .enable_mask
= BIT(1),
2858 .hw
.init
= &(struct clk_init_data
){
2859 .name
= "gcc_ufs_card_phy_aux_hw_ctl_clk",
2860 .parent_hws
= (const struct clk_hw
*[]){
2861 &gcc_ufs_card_phy_aux_clk
.clkr
.hw
},
2863 .flags
= CLK_SET_RATE_PARENT
,
2864 .ops
= &clk_branch_simple_ops
,
2869 /* external clocks so add BRANCH_HALT_SKIP */
2870 static struct clk_branch gcc_ufs_card_rx_symbol_0_clk
= {
2871 .halt_check
= BRANCH_HALT_SKIP
,
2873 .enable_reg
= 0x7501c,
2874 .enable_mask
= BIT(0),
2875 .hw
.init
= &(struct clk_init_data
){
2876 .name
= "gcc_ufs_card_rx_symbol_0_clk",
2877 .ops
= &clk_branch2_ops
,
2882 /* external clocks so add BRANCH_HALT_SKIP */
2883 static struct clk_branch gcc_ufs_card_rx_symbol_1_clk
= {
2884 .halt_check
= BRANCH_HALT_SKIP
,
2886 .enable_reg
= 0x750ac,
2887 .enable_mask
= BIT(0),
2888 .hw
.init
= &(struct clk_init_data
){
2889 .name
= "gcc_ufs_card_rx_symbol_1_clk",
2890 .ops
= &clk_branch2_ops
,
2895 /* external clocks so add BRANCH_HALT_SKIP */
2896 static struct clk_branch gcc_ufs_card_tx_symbol_0_clk
= {
2897 .halt_check
= BRANCH_HALT_SKIP
,
2899 .enable_reg
= 0x75018,
2900 .enable_mask
= BIT(0),
2901 .hw
.init
= &(struct clk_init_data
){
2902 .name
= "gcc_ufs_card_tx_symbol_0_clk",
2903 .ops
= &clk_branch2_ops
,
2908 static struct clk_branch gcc_ufs_card_unipro_core_clk
= {
2909 .halt_reg
= 0x75058,
2910 .halt_check
= BRANCH_HALT
,
2911 .hwcg_reg
= 0x75058,
2914 .enable_reg
= 0x75058,
2915 .enable_mask
= BIT(0),
2916 .hw
.init
= &(struct clk_init_data
){
2917 .name
= "gcc_ufs_card_unipro_core_clk",
2918 .parent_hws
= (const struct clk_hw
*[]){
2919 &gcc_ufs_card_unipro_core_clk_src
.clkr
.hw
},
2921 .flags
= CLK_SET_RATE_PARENT
,
2922 .ops
= &clk_branch2_ops
,
2927 static struct clk_branch gcc_ufs_card_unipro_core_hw_ctl_clk
= {
2928 .halt_reg
= 0x75058,
2929 .halt_check
= BRANCH_HALT
,
2930 .hwcg_reg
= 0x75058,
2933 .enable_reg
= 0x75058,
2934 .enable_mask
= BIT(1),
2935 .hw
.init
= &(struct clk_init_data
){
2936 .name
= "gcc_ufs_card_unipro_core_hw_ctl_clk",
2937 .parent_hws
= (const struct clk_hw
*[]){
2938 &gcc_ufs_card_unipro_core_clk
.clkr
.hw
},
2940 .flags
= CLK_SET_RATE_PARENT
,
2941 .ops
= &clk_branch_simple_ops
,
2946 static struct clk_branch gcc_ufs_mem_clkref_clk
= {
2947 .halt_reg
= 0x8c000,
2948 .halt_check
= BRANCH_HALT
,
2950 .enable_reg
= 0x8c000,
2951 .enable_mask
= BIT(0),
2952 .hw
.init
= &(struct clk_init_data
){
2953 .name
= "gcc_ufs_mem_clkref_clk",
2954 .ops
= &clk_branch2_ops
,
2959 static struct clk_branch gcc_ufs_phy_ahb_clk
= {
2960 .halt_reg
= 0x77014,
2961 .halt_check
= BRANCH_HALT
,
2962 .hwcg_reg
= 0x77014,
2965 .enable_reg
= 0x77014,
2966 .enable_mask
= BIT(0),
2967 .hw
.init
= &(struct clk_init_data
){
2968 .name
= "gcc_ufs_phy_ahb_clk",
2969 .ops
= &clk_branch2_ops
,
2974 static struct clk_branch gcc_ufs_phy_axi_clk
= {
2975 .halt_reg
= 0x77010,
2976 .halt_check
= BRANCH_HALT
,
2977 .hwcg_reg
= 0x77010,
2980 .enable_reg
= 0x77010,
2981 .enable_mask
= BIT(0),
2982 .hw
.init
= &(struct clk_init_data
){
2983 .name
= "gcc_ufs_phy_axi_clk",
2984 .parent_hws
= (const struct clk_hw
*[]){
2985 &gcc_ufs_phy_axi_clk_src
.clkr
.hw
},
2987 .flags
= CLK_SET_RATE_PARENT
,
2988 .ops
= &clk_branch2_ops
,
2993 static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk
= {
2994 .halt_reg
= 0x77010,
2995 .halt_check
= BRANCH_HALT
,
2996 .hwcg_reg
= 0x77010,
2999 .enable_reg
= 0x77010,
3000 .enable_mask
= BIT(1),
3001 .hw
.init
= &(struct clk_init_data
){
3002 .name
= "gcc_ufs_phy_axi_hw_ctl_clk",
3003 .parent_hws
= (const struct clk_hw
*[]){
3004 &gcc_ufs_phy_axi_clk
.clkr
.hw
},
3006 .flags
= CLK_SET_RATE_PARENT
,
3007 .ops
= &clk_branch_simple_ops
,
3012 static struct clk_branch gcc_ufs_phy_ice_core_clk
= {
3013 .halt_reg
= 0x7705c,
3014 .halt_check
= BRANCH_HALT
,
3015 .hwcg_reg
= 0x7705c,
3018 .enable_reg
= 0x7705c,
3019 .enable_mask
= BIT(0),
3020 .hw
.init
= &(struct clk_init_data
){
3021 .name
= "gcc_ufs_phy_ice_core_clk",
3022 .parent_hws
= (const struct clk_hw
*[]){
3023 &gcc_ufs_phy_ice_core_clk_src
.clkr
.hw
},
3025 .flags
= CLK_SET_RATE_PARENT
,
3026 .ops
= &clk_branch2_ops
,
3031 static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk
= {
3032 .halt_reg
= 0x7705c,
3033 .halt_check
= BRANCH_HALT
,
3034 .hwcg_reg
= 0x7705c,
3037 .enable_reg
= 0x7705c,
3038 .enable_mask
= BIT(1),
3039 .hw
.init
= &(struct clk_init_data
){
3040 .name
= "gcc_ufs_phy_ice_core_hw_ctl_clk",
3041 .parent_hws
= (const struct clk_hw
*[]){
3042 &gcc_ufs_phy_ice_core_clk
.clkr
.hw
},
3044 .flags
= CLK_SET_RATE_PARENT
,
3045 .ops
= &clk_branch_simple_ops
,
3050 static struct clk_branch gcc_ufs_phy_phy_aux_clk
= {
3051 .halt_reg
= 0x77090,
3052 .halt_check
= BRANCH_HALT
,
3053 .hwcg_reg
= 0x77090,
3056 .enable_reg
= 0x77090,
3057 .enable_mask
= BIT(0),
3058 .hw
.init
= &(struct clk_init_data
){
3059 .name
= "gcc_ufs_phy_phy_aux_clk",
3060 .parent_hws
= (const struct clk_hw
*[]){
3061 &gcc_ufs_phy_phy_aux_clk_src
.clkr
.hw
},
3063 .flags
= CLK_SET_RATE_PARENT
,
3064 .ops
= &clk_branch2_ops
,
3069 static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk
= {
3070 .halt_reg
= 0x77090,
3071 .halt_check
= BRANCH_HALT
,
3072 .hwcg_reg
= 0x77090,
3075 .enable_reg
= 0x77090,
3076 .enable_mask
= BIT(1),
3077 .hw
.init
= &(struct clk_init_data
){
3078 .name
= "gcc_ufs_phy_phy_aux_hw_ctl_clk",
3079 .parent_hws
= (const struct clk_hw
*[]){
3080 &gcc_ufs_phy_phy_aux_clk
.clkr
.hw
},
3082 .flags
= CLK_SET_RATE_PARENT
,
3083 .ops
= &clk_branch_simple_ops
,
3088 /* external clocks so add BRANCH_HALT_SKIP */
3089 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk
= {
3090 .halt_check
= BRANCH_HALT_SKIP
,
3092 .enable_reg
= 0x7701c,
3093 .enable_mask
= BIT(0),
3094 .hw
.init
= &(struct clk_init_data
){
3095 .name
= "gcc_ufs_phy_rx_symbol_0_clk",
3096 .ops
= &clk_branch2_ops
,
3101 /* external clocks so add BRANCH_HALT_SKIP */
3102 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk
= {
3103 .halt_check
= BRANCH_HALT_SKIP
,
3105 .enable_reg
= 0x770ac,
3106 .enable_mask
= BIT(0),
3107 .hw
.init
= &(struct clk_init_data
){
3108 .name
= "gcc_ufs_phy_rx_symbol_1_clk",
3109 .ops
= &clk_branch2_ops
,
3114 /* external clocks so add BRANCH_HALT_SKIP */
3115 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk
= {
3116 .halt_check
= BRANCH_HALT_SKIP
,
3118 .enable_reg
= 0x77018,
3119 .enable_mask
= BIT(0),
3120 .hw
.init
= &(struct clk_init_data
){
3121 .name
= "gcc_ufs_phy_tx_symbol_0_clk",
3122 .ops
= &clk_branch2_ops
,
3127 static struct clk_branch gcc_ufs_phy_unipro_core_clk
= {
3128 .halt_reg
= 0x77058,
3129 .halt_check
= BRANCH_HALT
,
3130 .hwcg_reg
= 0x77058,
3133 .enable_reg
= 0x77058,
3134 .enable_mask
= BIT(0),
3135 .hw
.init
= &(struct clk_init_data
){
3136 .name
= "gcc_ufs_phy_unipro_core_clk",
3137 .parent_hws
= (const struct clk_hw
*[]){
3138 &gcc_ufs_phy_unipro_core_clk_src
.clkr
.hw
},
3140 .flags
= CLK_SET_RATE_PARENT
,
3141 .ops
= &clk_branch2_ops
,
3146 static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk
= {
3147 .halt_reg
= 0x77058,
3148 .halt_check
= BRANCH_HALT
,
3149 .hwcg_reg
= 0x77058,
3152 .enable_reg
= 0x77058,
3153 .enable_mask
= BIT(1),
3154 .hw
.init
= &(struct clk_init_data
){
3155 .name
= "gcc_ufs_phy_unipro_core_hw_ctl_clk",
3156 .parent_hws
= (const struct clk_hw
*[]){
3157 &gcc_ufs_phy_unipro_core_clk
.clkr
.hw
},
3159 .flags
= CLK_SET_RATE_PARENT
,
3160 .ops
= &clk_branch_simple_ops
,
3165 static struct clk_branch gcc_usb30_prim_master_clk
= {
3167 .halt_check
= BRANCH_HALT
,
3169 .enable_reg
= 0xf010,
3170 .enable_mask
= BIT(0),
3171 .hw
.init
= &(struct clk_init_data
){
3172 .name
= "gcc_usb30_prim_master_clk",
3173 .parent_hws
= (const struct clk_hw
*[]){
3174 &gcc_usb30_prim_master_clk_src
.clkr
.hw
},
3176 .flags
= CLK_SET_RATE_PARENT
,
3177 .ops
= &clk_branch2_ops
,
3182 static struct clk_branch gcc_usb30_prim_mock_utmi_clk
= {
3184 .halt_check
= BRANCH_HALT
,
3186 .enable_reg
= 0xf018,
3187 .enable_mask
= BIT(0),
3188 .hw
.init
= &(struct clk_init_data
){
3189 .name
= "gcc_usb30_prim_mock_utmi_clk",
3190 .parent_hws
= (const struct clk_hw
*[]){
3191 &gcc_usb30_prim_mock_utmi_clk_src
.clkr
.hw
},
3193 .flags
= CLK_SET_RATE_PARENT
,
3194 .ops
= &clk_branch2_ops
,
3199 static struct clk_branch gcc_usb30_prim_sleep_clk
= {
3201 .halt_check
= BRANCH_HALT
,
3203 .enable_reg
= 0xf014,
3204 .enable_mask
= BIT(0),
3205 .hw
.init
= &(struct clk_init_data
){
3206 .name
= "gcc_usb30_prim_sleep_clk",
3207 .ops
= &clk_branch2_ops
,
3212 static struct clk_branch gcc_usb30_sec_master_clk
= {
3213 .halt_reg
= 0x10010,
3214 .halt_check
= BRANCH_HALT
,
3216 .enable_reg
= 0x10010,
3217 .enable_mask
= BIT(0),
3218 .hw
.init
= &(struct clk_init_data
){
3219 .name
= "gcc_usb30_sec_master_clk",
3220 .parent_hws
= (const struct clk_hw
*[]){
3221 &gcc_usb30_sec_master_clk_src
.clkr
.hw
},
3223 .flags
= CLK_SET_RATE_PARENT
,
3224 .ops
= &clk_branch2_ops
,
3229 static struct clk_branch gcc_usb30_sec_mock_utmi_clk
= {
3230 .halt_reg
= 0x10018,
3231 .halt_check
= BRANCH_HALT
,
3233 .enable_reg
= 0x10018,
3234 .enable_mask
= BIT(0),
3235 .hw
.init
= &(struct clk_init_data
){
3236 .name
= "gcc_usb30_sec_mock_utmi_clk",
3237 .parent_hws
= (const struct clk_hw
*[]){
3238 &gcc_usb30_sec_mock_utmi_clk_src
.clkr
.hw
},
3240 .flags
= CLK_SET_RATE_PARENT
,
3241 .ops
= &clk_branch2_ops
,
3246 static struct clk_branch gcc_usb30_sec_sleep_clk
= {
3247 .halt_reg
= 0x10014,
3248 .halt_check
= BRANCH_HALT
,
3250 .enable_reg
= 0x10014,
3251 .enable_mask
= BIT(0),
3252 .hw
.init
= &(struct clk_init_data
){
3253 .name
= "gcc_usb30_sec_sleep_clk",
3254 .ops
= &clk_branch2_ops
,
3259 static struct clk_branch gcc_usb3_prim_clkref_clk
= {
3260 .halt_reg
= 0x8c008,
3261 .halt_check
= BRANCH_HALT
,
3263 .enable_reg
= 0x8c008,
3264 .enable_mask
= BIT(0),
3265 .hw
.init
= &(struct clk_init_data
){
3266 .name
= "gcc_usb3_prim_clkref_clk",
3267 .ops
= &clk_branch2_ops
,
3272 static struct clk_branch gcc_usb3_prim_phy_aux_clk
= {
3274 .halt_check
= BRANCH_HALT
,
3276 .enable_reg
= 0xf050,
3277 .enable_mask
= BIT(0),
3278 .hw
.init
= &(struct clk_init_data
){
3279 .name
= "gcc_usb3_prim_phy_aux_clk",
3280 .parent_hws
= (const struct clk_hw
*[]){
3281 &gcc_usb3_prim_phy_aux_clk_src
.clkr
.hw
},
3283 .flags
= CLK_SET_RATE_PARENT
,
3284 .ops
= &clk_branch2_ops
,
3289 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk
= {
3291 .halt_check
= BRANCH_HALT
,
3293 .enable_reg
= 0xf054,
3294 .enable_mask
= BIT(0),
3295 .hw
.init
= &(struct clk_init_data
){
3296 .name
= "gcc_usb3_prim_phy_com_aux_clk",
3297 .parent_hws
= (const struct clk_hw
*[]){
3298 &gcc_usb3_prim_phy_aux_clk_src
.clkr
.hw
},
3300 .flags
= CLK_SET_RATE_PARENT
,
3301 .ops
= &clk_branch2_ops
,
3306 static struct clk_branch gcc_usb3_prim_phy_pipe_clk
= {
3307 .halt_check
= BRANCH_HALT_SKIP
,
3309 .enable_reg
= 0xf058,
3310 .enable_mask
= BIT(0),
3311 .hw
.init
= &(struct clk_init_data
){
3312 .name
= "gcc_usb3_prim_phy_pipe_clk",
3313 .ops
= &clk_branch2_ops
,
3318 static struct clk_branch gcc_usb3_sec_clkref_clk
= {
3319 .halt_reg
= 0x8c028,
3320 .halt_check
= BRANCH_HALT
,
3322 .enable_reg
= 0x8c028,
3323 .enable_mask
= BIT(0),
3324 .hw
.init
= &(struct clk_init_data
){
3325 .name
= "gcc_usb3_sec_clkref_clk",
3326 .ops
= &clk_branch2_ops
,
3331 static struct clk_branch gcc_usb3_sec_phy_aux_clk
= {
3332 .halt_reg
= 0x10050,
3333 .halt_check
= BRANCH_HALT
,
3335 .enable_reg
= 0x10050,
3336 .enable_mask
= BIT(0),
3337 .hw
.init
= &(struct clk_init_data
){
3338 .name
= "gcc_usb3_sec_phy_aux_clk",
3339 .parent_hws
= (const struct clk_hw
*[]){
3340 &gcc_usb3_sec_phy_aux_clk_src
.clkr
.hw
},
3342 .flags
= CLK_SET_RATE_PARENT
,
3343 .ops
= &clk_branch2_ops
,
3348 static struct clk_branch gcc_usb3_sec_phy_com_aux_clk
= {
3349 .halt_reg
= 0x10054,
3350 .halt_check
= BRANCH_HALT
,
3352 .enable_reg
= 0x10054,
3353 .enable_mask
= BIT(0),
3354 .hw
.init
= &(struct clk_init_data
){
3355 .name
= "gcc_usb3_sec_phy_com_aux_clk",
3356 .parent_hws
= (const struct clk_hw
*[]){
3357 &gcc_usb3_sec_phy_aux_clk_src
.clkr
.hw
},
3359 .flags
= CLK_SET_RATE_PARENT
,
3360 .ops
= &clk_branch2_ops
,
3365 static struct clk_branch gcc_usb3_sec_phy_pipe_clk
= {
3366 .halt_check
= BRANCH_HALT_SKIP
,
3368 .enable_reg
= 0x10058,
3369 .enable_mask
= BIT(0),
3370 .hw
.init
= &(struct clk_init_data
){
3371 .name
= "gcc_usb3_sec_phy_pipe_clk",
3372 .ops
= &clk_branch2_ops
,
3378 * Clock ON depends on external parent 'config noc', so cant poll
3379 * delay and also mark as crtitical for video boot
3381 static struct clk_branch gcc_video_ahb_clk
= {
3383 .halt_check
= BRANCH_HALT_DELAY
,
3387 .enable_reg
= 0xb004,
3388 .enable_mask
= BIT(0),
3389 .hw
.init
= &(struct clk_init_data
){
3390 .name
= "gcc_video_ahb_clk",
3391 .flags
= CLK_IS_CRITICAL
,
3392 .ops
= &clk_branch2_ops
,
3397 static struct clk_branch gcc_video_axi0_clk
= {
3399 .halt_check
= BRANCH_HALT
,
3401 .enable_reg
= 0xb024,
3402 .enable_mask
= BIT(0),
3403 .hw
.init
= &(struct clk_init_data
){
3404 .name
= "gcc_video_axi0_clk",
3405 .ops
= &clk_branch2_ops
,
3410 static struct clk_branch gcc_video_axi1_clk
= {
3412 .halt_check
= BRANCH_HALT
,
3414 .enable_reg
= 0xb028,
3415 .enable_mask
= BIT(0),
3416 .hw
.init
= &(struct clk_init_data
){
3417 .name
= "gcc_video_axi1_clk",
3418 .ops
= &clk_branch2_ops
,
3423 static struct clk_branch gcc_video_axic_clk
= {
3425 .halt_check
= BRANCH_HALT
,
3427 .enable_reg
= 0xb02c,
3428 .enable_mask
= BIT(0),
3429 .hw
.init
= &(struct clk_init_data
){
3430 .name
= "gcc_video_axic_clk",
3431 .ops
= &clk_branch2_ops
,
3436 /* XO critical input to video, so no need to poll */
3437 static struct clk_branch gcc_video_xo_clk
= {
3439 .halt_check
= BRANCH_HALT_DELAY
,
3441 .enable_reg
= 0xb040,
3442 .enable_mask
= BIT(0),
3443 .hw
.init
= &(struct clk_init_data
){
3444 .name
= "gcc_video_xo_clk",
3445 .flags
= CLK_IS_CRITICAL
,
3446 .ops
= &clk_branch2_ops
,
3451 static struct gdsc usb30_prim_gdsc
= {
3454 .name
= "usb30_prim_gdsc",
3456 .pwrsts
= PWRSTS_OFF_ON
,
3457 .flags
= POLL_CFG_GDSCR
,
3460 static struct gdsc usb30_sec_gdsc
= {
3463 .name
= "usb30_sec_gdsc",
3465 .pwrsts
= PWRSTS_OFF_ON
,
3466 .flags
= POLL_CFG_GDSCR
,
3469 static struct clk_regmap
*gcc_sm8150_clocks
[] = {
3470 [GCC_AGGRE_NOC_PCIE_TBU_CLK
] = &gcc_aggre_noc_pcie_tbu_clk
.clkr
,
3471 [GCC_AGGRE_UFS_CARD_AXI_CLK
] = &gcc_aggre_ufs_card_axi_clk
.clkr
,
3472 [GCC_AGGRE_UFS_CARD_AXI_HW_CTL_CLK
] =
3473 &gcc_aggre_ufs_card_axi_hw_ctl_clk
.clkr
,
3474 [GCC_AGGRE_UFS_PHY_AXI_CLK
] = &gcc_aggre_ufs_phy_axi_clk
.clkr
,
3475 [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK
] =
3476 &gcc_aggre_ufs_phy_axi_hw_ctl_clk
.clkr
,
3477 [GCC_AGGRE_USB3_PRIM_AXI_CLK
] = &gcc_aggre_usb3_prim_axi_clk
.clkr
,
3478 [GCC_AGGRE_USB3_SEC_AXI_CLK
] = &gcc_aggre_usb3_sec_axi_clk
.clkr
,
3479 [GCC_BOOT_ROM_AHB_CLK
] = &gcc_boot_rom_ahb_clk
.clkr
,
3480 [GCC_CAMERA_AHB_CLK
] = &gcc_camera_ahb_clk
.clkr
,
3481 [GCC_CAMERA_HF_AXI_CLK
] = &gcc_camera_hf_axi_clk
.clkr
,
3482 [GCC_CAMERA_SF_AXI_CLK
] = &gcc_camera_sf_axi_clk
.clkr
,
3483 [GCC_CAMERA_XO_CLK
] = &gcc_camera_xo_clk
.clkr
,
3484 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK
] = &gcc_cfg_noc_usb3_prim_axi_clk
.clkr
,
3485 [GCC_CFG_NOC_USB3_SEC_AXI_CLK
] = &gcc_cfg_noc_usb3_sec_axi_clk
.clkr
,
3486 [GCC_CPUSS_AHB_CLK
] = &gcc_cpuss_ahb_clk
.clkr
,
3487 [GCC_CPUSS_AHB_CLK_SRC
] = &gcc_cpuss_ahb_clk_src
.clkr
,
3488 [GCC_CPUSS_DVM_BUS_CLK
] = &gcc_cpuss_dvm_bus_clk
.clkr
,
3489 [GCC_CPUSS_GNOC_CLK
] = &gcc_cpuss_gnoc_clk
.clkr
,
3490 [GCC_CPUSS_RBCPR_CLK
] = &gcc_cpuss_rbcpr_clk
.clkr
,
3491 [GCC_DDRSS_GPU_AXI_CLK
] = &gcc_ddrss_gpu_axi_clk
.clkr
,
3492 [GCC_DISP_AHB_CLK
] = &gcc_disp_ahb_clk
.clkr
,
3493 [GCC_DISP_HF_AXI_CLK
] = &gcc_disp_hf_axi_clk
.clkr
,
3494 [GCC_DISP_SF_AXI_CLK
] = &gcc_disp_sf_axi_clk
.clkr
,
3495 [GCC_DISP_XO_CLK
] = &gcc_disp_xo_clk
.clkr
,
3496 [GCC_EMAC_AXI_CLK
] = &gcc_emac_axi_clk
.clkr
,
3497 [GCC_EMAC_PTP_CLK
] = &gcc_emac_ptp_clk
.clkr
,
3498 [GCC_EMAC_PTP_CLK_SRC
] = &gcc_emac_ptp_clk_src
.clkr
,
3499 [GCC_EMAC_RGMII_CLK
] = &gcc_emac_rgmii_clk
.clkr
,
3500 [GCC_EMAC_RGMII_CLK_SRC
] = &gcc_emac_rgmii_clk_src
.clkr
,
3501 [GCC_EMAC_SLV_AHB_CLK
] = &gcc_emac_slv_ahb_clk
.clkr
,
3502 [GCC_GP1_CLK
] = &gcc_gp1_clk
.clkr
,
3503 [GCC_GP1_CLK_SRC
] = &gcc_gp1_clk_src
.clkr
,
3504 [GCC_GP2_CLK
] = &gcc_gp2_clk
.clkr
,
3505 [GCC_GP2_CLK_SRC
] = &gcc_gp2_clk_src
.clkr
,
3506 [GCC_GP3_CLK
] = &gcc_gp3_clk
.clkr
,
3507 [GCC_GP3_CLK_SRC
] = &gcc_gp3_clk_src
.clkr
,
3508 [GCC_GPU_CFG_AHB_CLK
] = &gcc_gpu_cfg_ahb_clk
.clkr
,
3509 [GCC_GPU_GPLL0_CLK_SRC
] = &gcc_gpu_gpll0_clk_src
.clkr
,
3510 [GCC_GPU_GPLL0_DIV_CLK_SRC
] = &gcc_gpu_gpll0_div_clk_src
.clkr
,
3511 [GCC_GPU_IREF_CLK
] = &gcc_gpu_iref_clk
.clkr
,
3512 [GCC_GPU_MEMNOC_GFX_CLK
] = &gcc_gpu_memnoc_gfx_clk
.clkr
,
3513 [GCC_GPU_SNOC_DVM_GFX_CLK
] = &gcc_gpu_snoc_dvm_gfx_clk
.clkr
,
3514 [GCC_NPU_AT_CLK
] = &gcc_npu_at_clk
.clkr
,
3515 [GCC_NPU_AXI_CLK
] = &gcc_npu_axi_clk
.clkr
,
3516 [GCC_NPU_CFG_AHB_CLK
] = &gcc_npu_cfg_ahb_clk
.clkr
,
3517 [GCC_NPU_GPLL0_CLK_SRC
] = &gcc_npu_gpll0_clk_src
.clkr
,
3518 [GCC_NPU_GPLL0_DIV_CLK_SRC
] = &gcc_npu_gpll0_div_clk_src
.clkr
,
3519 [GCC_NPU_TRIG_CLK
] = &gcc_npu_trig_clk
.clkr
,
3520 [GCC_PCIE0_PHY_REFGEN_CLK
] = &gcc_pcie0_phy_refgen_clk
.clkr
,
3521 [GCC_PCIE1_PHY_REFGEN_CLK
] = &gcc_pcie1_phy_refgen_clk
.clkr
,
3522 [GCC_PCIE_0_AUX_CLK
] = &gcc_pcie_0_aux_clk
.clkr
,
3523 [GCC_PCIE_0_AUX_CLK_SRC
] = &gcc_pcie_0_aux_clk_src
.clkr
,
3524 [GCC_PCIE_0_CFG_AHB_CLK
] = &gcc_pcie_0_cfg_ahb_clk
.clkr
,
3525 [GCC_PCIE_0_CLKREF_CLK
] = &gcc_pcie_0_clkref_clk
.clkr
,
3526 [GCC_PCIE_0_MSTR_AXI_CLK
] = &gcc_pcie_0_mstr_axi_clk
.clkr
,
3527 [GCC_PCIE_0_PIPE_CLK
] = &gcc_pcie_0_pipe_clk
.clkr
,
3528 [GCC_PCIE_0_SLV_AXI_CLK
] = &gcc_pcie_0_slv_axi_clk
.clkr
,
3529 [GCC_PCIE_0_SLV_Q2A_AXI_CLK
] = &gcc_pcie_0_slv_q2a_axi_clk
.clkr
,
3530 [GCC_PCIE_1_AUX_CLK
] = &gcc_pcie_1_aux_clk
.clkr
,
3531 [GCC_PCIE_1_AUX_CLK_SRC
] = &gcc_pcie_1_aux_clk_src
.clkr
,
3532 [GCC_PCIE_1_CFG_AHB_CLK
] = &gcc_pcie_1_cfg_ahb_clk
.clkr
,
3533 [GCC_PCIE_1_CLKREF_CLK
] = &gcc_pcie_1_clkref_clk
.clkr
,
3534 [GCC_PCIE_1_MSTR_AXI_CLK
] = &gcc_pcie_1_mstr_axi_clk
.clkr
,
3535 [GCC_PCIE_1_PIPE_CLK
] = &gcc_pcie_1_pipe_clk
.clkr
,
3536 [GCC_PCIE_1_SLV_AXI_CLK
] = &gcc_pcie_1_slv_axi_clk
.clkr
,
3537 [GCC_PCIE_1_SLV_Q2A_AXI_CLK
] = &gcc_pcie_1_slv_q2a_axi_clk
.clkr
,
3538 [GCC_PCIE_PHY_AUX_CLK
] = &gcc_pcie_phy_aux_clk
.clkr
,
3539 [GCC_PCIE_PHY_REFGEN_CLK_SRC
] = &gcc_pcie_phy_refgen_clk_src
.clkr
,
3540 [GCC_PDM2_CLK
] = &gcc_pdm2_clk
.clkr
,
3541 [GCC_PDM2_CLK_SRC
] = &gcc_pdm2_clk_src
.clkr
,
3542 [GCC_PDM_AHB_CLK
] = &gcc_pdm_ahb_clk
.clkr
,
3543 [GCC_PDM_XO4_CLK
] = &gcc_pdm_xo4_clk
.clkr
,
3544 [GCC_PRNG_AHB_CLK
] = &gcc_prng_ahb_clk
.clkr
,
3545 [GCC_QMIP_CAMERA_NRT_AHB_CLK
] = &gcc_qmip_camera_nrt_ahb_clk
.clkr
,
3546 [GCC_QMIP_CAMERA_RT_AHB_CLK
] = &gcc_qmip_camera_rt_ahb_clk
.clkr
,
3547 [GCC_QMIP_DISP_AHB_CLK
] = &gcc_qmip_disp_ahb_clk
.clkr
,
3548 [GCC_QMIP_VIDEO_CVP_AHB_CLK
] = &gcc_qmip_video_cvp_ahb_clk
.clkr
,
3549 [GCC_QMIP_VIDEO_VCODEC_AHB_CLK
] = &gcc_qmip_video_vcodec_ahb_clk
.clkr
,
3550 [GCC_QSPI_CNOC_PERIPH_AHB_CLK
] = &gcc_qspi_cnoc_periph_ahb_clk
.clkr
,
3551 [GCC_QSPI_CORE_CLK
] = &gcc_qspi_core_clk
.clkr
,
3552 [GCC_QSPI_CORE_CLK_SRC
] = &gcc_qspi_core_clk_src
.clkr
,
3553 [GCC_QUPV3_WRAP0_S0_CLK
] = &gcc_qupv3_wrap0_s0_clk
.clkr
,
3554 [GCC_QUPV3_WRAP0_S0_CLK_SRC
] = &gcc_qupv3_wrap0_s0_clk_src
.clkr
,
3555 [GCC_QUPV3_WRAP0_S1_CLK
] = &gcc_qupv3_wrap0_s1_clk
.clkr
,
3556 [GCC_QUPV3_WRAP0_S1_CLK_SRC
] = &gcc_qupv3_wrap0_s1_clk_src
.clkr
,
3557 [GCC_QUPV3_WRAP0_S2_CLK
] = &gcc_qupv3_wrap0_s2_clk
.clkr
,
3558 [GCC_QUPV3_WRAP0_S2_CLK_SRC
] = &gcc_qupv3_wrap0_s2_clk_src
.clkr
,
3559 [GCC_QUPV3_WRAP0_S3_CLK
] = &gcc_qupv3_wrap0_s3_clk
.clkr
,
3560 [GCC_QUPV3_WRAP0_S3_CLK_SRC
] = &gcc_qupv3_wrap0_s3_clk_src
.clkr
,
3561 [GCC_QUPV3_WRAP0_S4_CLK
] = &gcc_qupv3_wrap0_s4_clk
.clkr
,
3562 [GCC_QUPV3_WRAP0_S4_CLK_SRC
] = &gcc_qupv3_wrap0_s4_clk_src
.clkr
,
3563 [GCC_QUPV3_WRAP0_S5_CLK
] = &gcc_qupv3_wrap0_s5_clk
.clkr
,
3564 [GCC_QUPV3_WRAP0_S5_CLK_SRC
] = &gcc_qupv3_wrap0_s5_clk_src
.clkr
,
3565 [GCC_QUPV3_WRAP0_S6_CLK
] = &gcc_qupv3_wrap0_s6_clk
.clkr
,
3566 [GCC_QUPV3_WRAP0_S6_CLK_SRC
] = &gcc_qupv3_wrap0_s6_clk_src
.clkr
,
3567 [GCC_QUPV3_WRAP0_S7_CLK
] = &gcc_qupv3_wrap0_s7_clk
.clkr
,
3568 [GCC_QUPV3_WRAP0_S7_CLK_SRC
] = &gcc_qupv3_wrap0_s7_clk_src
.clkr
,
3569 [GCC_QUPV3_WRAP1_S0_CLK
] = &gcc_qupv3_wrap1_s0_clk
.clkr
,
3570 [GCC_QUPV3_WRAP1_S0_CLK_SRC
] = &gcc_qupv3_wrap1_s0_clk_src
.clkr
,
3571 [GCC_QUPV3_WRAP1_S1_CLK
] = &gcc_qupv3_wrap1_s1_clk
.clkr
,
3572 [GCC_QUPV3_WRAP1_S1_CLK_SRC
] = &gcc_qupv3_wrap1_s1_clk_src
.clkr
,
3573 [GCC_QUPV3_WRAP1_S2_CLK
] = &gcc_qupv3_wrap1_s2_clk
.clkr
,
3574 [GCC_QUPV3_WRAP1_S2_CLK_SRC
] = &gcc_qupv3_wrap1_s2_clk_src
.clkr
,
3575 [GCC_QUPV3_WRAP1_S3_CLK
] = &gcc_qupv3_wrap1_s3_clk
.clkr
,
3576 [GCC_QUPV3_WRAP1_S3_CLK_SRC
] = &gcc_qupv3_wrap1_s3_clk_src
.clkr
,
3577 [GCC_QUPV3_WRAP1_S4_CLK
] = &gcc_qupv3_wrap1_s4_clk
.clkr
,
3578 [GCC_QUPV3_WRAP1_S4_CLK_SRC
] = &gcc_qupv3_wrap1_s4_clk_src
.clkr
,
3579 [GCC_QUPV3_WRAP1_S5_CLK
] = &gcc_qupv3_wrap1_s5_clk
.clkr
,
3580 [GCC_QUPV3_WRAP1_S5_CLK_SRC
] = &gcc_qupv3_wrap1_s5_clk_src
.clkr
,
3581 [GCC_QUPV3_WRAP2_S0_CLK
] = &gcc_qupv3_wrap2_s0_clk
.clkr
,
3582 [GCC_QUPV3_WRAP2_S0_CLK_SRC
] = &gcc_qupv3_wrap2_s0_clk_src
.clkr
,
3583 [GCC_QUPV3_WRAP2_S1_CLK
] = &gcc_qupv3_wrap2_s1_clk
.clkr
,
3584 [GCC_QUPV3_WRAP2_S1_CLK_SRC
] = &gcc_qupv3_wrap2_s1_clk_src
.clkr
,
3585 [GCC_QUPV3_WRAP2_S2_CLK
] = &gcc_qupv3_wrap2_s2_clk
.clkr
,
3586 [GCC_QUPV3_WRAP2_S2_CLK_SRC
] = &gcc_qupv3_wrap2_s2_clk_src
.clkr
,
3587 [GCC_QUPV3_WRAP2_S3_CLK
] = &gcc_qupv3_wrap2_s3_clk
.clkr
,
3588 [GCC_QUPV3_WRAP2_S3_CLK_SRC
] = &gcc_qupv3_wrap2_s3_clk_src
.clkr
,
3589 [GCC_QUPV3_WRAP2_S4_CLK
] = &gcc_qupv3_wrap2_s4_clk
.clkr
,
3590 [GCC_QUPV3_WRAP2_S4_CLK_SRC
] = &gcc_qupv3_wrap2_s4_clk_src
.clkr
,
3591 [GCC_QUPV3_WRAP2_S5_CLK
] = &gcc_qupv3_wrap2_s5_clk
.clkr
,
3592 [GCC_QUPV3_WRAP2_S5_CLK_SRC
] = &gcc_qupv3_wrap2_s5_clk_src
.clkr
,
3593 [GCC_QUPV3_WRAP_0_M_AHB_CLK
] = &gcc_qupv3_wrap_0_m_ahb_clk
.clkr
,
3594 [GCC_QUPV3_WRAP_0_S_AHB_CLK
] = &gcc_qupv3_wrap_0_s_ahb_clk
.clkr
,
3595 [GCC_QUPV3_WRAP_1_M_AHB_CLK
] = &gcc_qupv3_wrap_1_m_ahb_clk
.clkr
,
3596 [GCC_QUPV3_WRAP_1_S_AHB_CLK
] = &gcc_qupv3_wrap_1_s_ahb_clk
.clkr
,
3597 [GCC_QUPV3_WRAP_2_M_AHB_CLK
] = &gcc_qupv3_wrap_2_m_ahb_clk
.clkr
,
3598 [GCC_QUPV3_WRAP_2_S_AHB_CLK
] = &gcc_qupv3_wrap_2_s_ahb_clk
.clkr
,
3599 [GCC_SDCC2_AHB_CLK
] = &gcc_sdcc2_ahb_clk
.clkr
,
3600 [GCC_SDCC2_APPS_CLK
] = &gcc_sdcc2_apps_clk
.clkr
,
3601 [GCC_SDCC2_APPS_CLK_SRC
] = &gcc_sdcc2_apps_clk_src
.clkr
,
3602 [GCC_SDCC4_AHB_CLK
] = &gcc_sdcc4_ahb_clk
.clkr
,
3603 [GCC_SDCC4_APPS_CLK
] = &gcc_sdcc4_apps_clk
.clkr
,
3604 [GCC_SDCC4_APPS_CLK_SRC
] = &gcc_sdcc4_apps_clk_src
.clkr
,
3605 [GCC_SYS_NOC_CPUSS_AHB_CLK
] = &gcc_sys_noc_cpuss_ahb_clk
.clkr
,
3606 [GCC_TSIF_AHB_CLK
] = &gcc_tsif_ahb_clk
.clkr
,
3607 [GCC_TSIF_INACTIVITY_TIMERS_CLK
] = &gcc_tsif_inactivity_timers_clk
.clkr
,
3608 [GCC_TSIF_REF_CLK
] = &gcc_tsif_ref_clk
.clkr
,
3609 [GCC_TSIF_REF_CLK_SRC
] = &gcc_tsif_ref_clk_src
.clkr
,
3610 [GCC_UFS_CARD_AHB_CLK
] = &gcc_ufs_card_ahb_clk
.clkr
,
3611 [GCC_UFS_CARD_AXI_CLK
] = &gcc_ufs_card_axi_clk
.clkr
,
3612 [GCC_UFS_CARD_AXI_CLK_SRC
] = &gcc_ufs_card_axi_clk_src
.clkr
,
3613 [GCC_UFS_CARD_AXI_HW_CTL_CLK
] = &gcc_ufs_card_axi_hw_ctl_clk
.clkr
,
3614 [GCC_UFS_CARD_CLKREF_CLK
] = &gcc_ufs_card_clkref_clk
.clkr
,
3615 [GCC_UFS_CARD_ICE_CORE_CLK
] = &gcc_ufs_card_ice_core_clk
.clkr
,
3616 [GCC_UFS_CARD_ICE_CORE_CLK_SRC
] = &gcc_ufs_card_ice_core_clk_src
.clkr
,
3617 [GCC_UFS_CARD_ICE_CORE_HW_CTL_CLK
] =
3618 &gcc_ufs_card_ice_core_hw_ctl_clk
.clkr
,
3619 [GCC_UFS_CARD_PHY_AUX_CLK
] = &gcc_ufs_card_phy_aux_clk
.clkr
,
3620 [GCC_UFS_CARD_PHY_AUX_CLK_SRC
] = &gcc_ufs_card_phy_aux_clk_src
.clkr
,
3621 [GCC_UFS_CARD_PHY_AUX_HW_CTL_CLK
] =
3622 &gcc_ufs_card_phy_aux_hw_ctl_clk
.clkr
,
3623 [GCC_UFS_CARD_RX_SYMBOL_0_CLK
] = &gcc_ufs_card_rx_symbol_0_clk
.clkr
,
3624 [GCC_UFS_CARD_RX_SYMBOL_1_CLK
] = &gcc_ufs_card_rx_symbol_1_clk
.clkr
,
3625 [GCC_UFS_CARD_TX_SYMBOL_0_CLK
] = &gcc_ufs_card_tx_symbol_0_clk
.clkr
,
3626 [GCC_UFS_CARD_UNIPRO_CORE_CLK
] = &gcc_ufs_card_unipro_core_clk
.clkr
,
3627 [GCC_UFS_CARD_UNIPRO_CORE_CLK_SRC
] =
3628 &gcc_ufs_card_unipro_core_clk_src
.clkr
,
3629 [GCC_UFS_CARD_UNIPRO_CORE_HW_CTL_CLK
] =
3630 &gcc_ufs_card_unipro_core_hw_ctl_clk
.clkr
,
3631 [GCC_UFS_MEM_CLKREF_CLK
] = &gcc_ufs_mem_clkref_clk
.clkr
,
3632 [GCC_UFS_PHY_AHB_CLK
] = &gcc_ufs_phy_ahb_clk
.clkr
,
3633 [GCC_UFS_PHY_AXI_CLK
] = &gcc_ufs_phy_axi_clk
.clkr
,
3634 [GCC_UFS_PHY_AXI_CLK_SRC
] = &gcc_ufs_phy_axi_clk_src
.clkr
,
3635 [GCC_UFS_PHY_AXI_HW_CTL_CLK
] = &gcc_ufs_phy_axi_hw_ctl_clk
.clkr
,
3636 [GCC_UFS_PHY_ICE_CORE_CLK
] = &gcc_ufs_phy_ice_core_clk
.clkr
,
3637 [GCC_UFS_PHY_ICE_CORE_CLK_SRC
] = &gcc_ufs_phy_ice_core_clk_src
.clkr
,
3638 [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK
] =
3639 &gcc_ufs_phy_ice_core_hw_ctl_clk
.clkr
,
3640 [GCC_UFS_PHY_PHY_AUX_CLK
] = &gcc_ufs_phy_phy_aux_clk
.clkr
,
3641 [GCC_UFS_PHY_PHY_AUX_CLK_SRC
] = &gcc_ufs_phy_phy_aux_clk_src
.clkr
,
3642 [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK
] = &gcc_ufs_phy_phy_aux_hw_ctl_clk
.clkr
,
3643 [GCC_UFS_PHY_RX_SYMBOL_0_CLK
] = &gcc_ufs_phy_rx_symbol_0_clk
.clkr
,
3644 [GCC_UFS_PHY_RX_SYMBOL_1_CLK
] = &gcc_ufs_phy_rx_symbol_1_clk
.clkr
,
3645 [GCC_UFS_PHY_TX_SYMBOL_0_CLK
] = &gcc_ufs_phy_tx_symbol_0_clk
.clkr
,
3646 [GCC_UFS_PHY_UNIPRO_CORE_CLK
] = &gcc_ufs_phy_unipro_core_clk
.clkr
,
3647 [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC
] =
3648 &gcc_ufs_phy_unipro_core_clk_src
.clkr
,
3649 [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK
] =
3650 &gcc_ufs_phy_unipro_core_hw_ctl_clk
.clkr
,
3651 [GCC_USB30_PRIM_MASTER_CLK
] = &gcc_usb30_prim_master_clk
.clkr
,
3652 [GCC_USB30_PRIM_MASTER_CLK_SRC
] = &gcc_usb30_prim_master_clk_src
.clkr
,
3653 [GCC_USB30_PRIM_MOCK_UTMI_CLK
] = &gcc_usb30_prim_mock_utmi_clk
.clkr
,
3654 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC
] =
3655 &gcc_usb30_prim_mock_utmi_clk_src
.clkr
,
3656 [GCC_USB30_PRIM_SLEEP_CLK
] = &gcc_usb30_prim_sleep_clk
.clkr
,
3657 [GCC_USB30_SEC_MASTER_CLK
] = &gcc_usb30_sec_master_clk
.clkr
,
3658 [GCC_USB30_SEC_MASTER_CLK_SRC
] = &gcc_usb30_sec_master_clk_src
.clkr
,
3659 [GCC_USB30_SEC_MOCK_UTMI_CLK
] = &gcc_usb30_sec_mock_utmi_clk
.clkr
,
3660 [GCC_USB30_SEC_MOCK_UTMI_CLK_SRC
] =
3661 &gcc_usb30_sec_mock_utmi_clk_src
.clkr
,
3662 [GCC_USB30_SEC_SLEEP_CLK
] = &gcc_usb30_sec_sleep_clk
.clkr
,
3663 [GCC_USB3_PRIM_CLKREF_CLK
] = &gcc_usb3_prim_clkref_clk
.clkr
,
3664 [GCC_USB3_PRIM_PHY_AUX_CLK
] = &gcc_usb3_prim_phy_aux_clk
.clkr
,
3665 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC
] = &gcc_usb3_prim_phy_aux_clk_src
.clkr
,
3666 [GCC_USB3_PRIM_PHY_COM_AUX_CLK
] = &gcc_usb3_prim_phy_com_aux_clk
.clkr
,
3667 [GCC_USB3_PRIM_PHY_PIPE_CLK
] = &gcc_usb3_prim_phy_pipe_clk
.clkr
,
3668 [GCC_USB3_SEC_CLKREF_CLK
] = &gcc_usb3_sec_clkref_clk
.clkr
,
3669 [GCC_USB3_SEC_PHY_AUX_CLK
] = &gcc_usb3_sec_phy_aux_clk
.clkr
,
3670 [GCC_USB3_SEC_PHY_AUX_CLK_SRC
] = &gcc_usb3_sec_phy_aux_clk_src
.clkr
,
3671 [GCC_USB3_SEC_PHY_COM_AUX_CLK
] = &gcc_usb3_sec_phy_com_aux_clk
.clkr
,
3672 [GCC_USB3_SEC_PHY_PIPE_CLK
] = &gcc_usb3_sec_phy_pipe_clk
.clkr
,
3673 [GCC_VIDEO_AHB_CLK
] = &gcc_video_ahb_clk
.clkr
,
3674 [GCC_VIDEO_AXI0_CLK
] = &gcc_video_axi0_clk
.clkr
,
3675 [GCC_VIDEO_AXI1_CLK
] = &gcc_video_axi1_clk
.clkr
,
3676 [GCC_VIDEO_AXIC_CLK
] = &gcc_video_axic_clk
.clkr
,
3677 [GCC_VIDEO_XO_CLK
] = &gcc_video_xo_clk
.clkr
,
3678 [GPLL0
] = &gpll0
.clkr
,
3679 [GPLL0_OUT_EVEN
] = &gpll0_out_even
.clkr
,
3680 [GPLL7
] = &gpll7
.clkr
,
3681 [GPLL9
] = &gpll9
.clkr
,
3684 static const struct qcom_reset_map gcc_sm8150_resets
[] = {
3685 [GCC_EMAC_BCR
] = { 0x6000 },
3686 [GCC_GPU_BCR
] = { 0x71000 },
3687 [GCC_MMSS_BCR
] = { 0xb000 },
3688 [GCC_NPU_BCR
] = { 0x4d000 },
3689 [GCC_PCIE_0_BCR
] = { 0x6b000 },
3690 [GCC_PCIE_0_PHY_BCR
] = { 0x6c01c },
3691 [GCC_PCIE_1_BCR
] = { 0x8d000 },
3692 [GCC_PCIE_1_PHY_BCR
] = { 0x8e01c },
3693 [GCC_PCIE_PHY_BCR
] = { 0x6f000 },
3694 [GCC_PDM_BCR
] = { 0x33000 },
3695 [GCC_PRNG_BCR
] = { 0x34000 },
3696 [GCC_QSPI_BCR
] = { 0x24008 },
3697 [GCC_QUPV3_WRAPPER_0_BCR
] = { 0x17000 },
3698 [GCC_QUPV3_WRAPPER_1_BCR
] = { 0x18000 },
3699 [GCC_QUPV3_WRAPPER_2_BCR
] = { 0x1e000 },
3700 [GCC_QUSB2PHY_PRIM_BCR
] = { 0x12000 },
3701 [GCC_QUSB2PHY_SEC_BCR
] = { 0x12004 },
3702 [GCC_USB3_PHY_PRIM_BCR
] = { 0x50000 },
3703 [GCC_USB3_DP_PHY_PRIM_BCR
] = { 0x50008 },
3704 [GCC_USB3_PHY_SEC_BCR
] = { 0x5000c },
3705 [GCC_USB3PHY_PHY_SEC_BCR
] = { 0x50010 },
3706 [GCC_SDCC2_BCR
] = { 0x14000 },
3707 [GCC_SDCC4_BCR
] = { 0x16000 },
3708 [GCC_TSIF_BCR
] = { 0x36000 },
3709 [GCC_UFS_CARD_BCR
] = { 0x75000 },
3710 [GCC_UFS_PHY_BCR
] = { 0x77000 },
3711 [GCC_USB30_PRIM_BCR
] = { 0xf000 },
3712 [GCC_USB30_SEC_BCR
] = { 0x10000 },
3713 [GCC_USB_PHY_CFG_AHB2PHY_BCR
] = { 0x6a000 },
3716 static struct gdsc
*gcc_sm8150_gdscs
[] = {
3717 [USB30_PRIM_GDSC
] = &usb30_prim_gdsc
,
3718 [USB30_SEC_GDSC
] = &usb30_sec_gdsc
,
3721 static const struct regmap_config gcc_sm8150_regmap_config
= {
3725 .max_register
= 0x9c040,
3729 static const struct qcom_cc_desc gcc_sm8150_desc
= {
3730 .config
= &gcc_sm8150_regmap_config
,
3731 .clks
= gcc_sm8150_clocks
,
3732 .num_clks
= ARRAY_SIZE(gcc_sm8150_clocks
),
3733 .resets
= gcc_sm8150_resets
,
3734 .num_resets
= ARRAY_SIZE(gcc_sm8150_resets
),
3735 .gdscs
= gcc_sm8150_gdscs
,
3736 .num_gdscs
= ARRAY_SIZE(gcc_sm8150_gdscs
),
3739 static const struct of_device_id gcc_sm8150_match_table
[] = {
3740 { .compatible
= "qcom,gcc-sm8150" },
3743 MODULE_DEVICE_TABLE(of
, gcc_sm8150_match_table
);
3745 static int gcc_sm8150_probe(struct platform_device
*pdev
)
3747 struct regmap
*regmap
;
3749 regmap
= qcom_cc_map(pdev
, &gcc_sm8150_desc
);
3751 return PTR_ERR(regmap
);
3753 /* Disable the GPLL0 active input to NPU and GPU via MISC registers */
3754 regmap_update_bits(regmap
, 0x4d110, 0x3, 0x3);
3755 regmap_update_bits(regmap
, 0x71028, 0x3, 0x3);
3757 return qcom_cc_really_probe(pdev
, &gcc_sm8150_desc
, regmap
);
3760 static struct platform_driver gcc_sm8150_driver
= {
3761 .probe
= gcc_sm8150_probe
,
3763 .name
= "gcc-sm8150",
3764 .of_match_table
= gcc_sm8150_match_table
,
3768 static int __init
gcc_sm8150_init(void)
3770 return platform_driver_register(&gcc_sm8150_driver
);
3772 subsys_initcall(gcc_sm8150_init
);
3774 static void __exit
gcc_sm8150_exit(void)
3776 platform_driver_unregister(&gcc_sm8150_driver
);
3778 module_exit(gcc_sm8150_exit
);
3780 MODULE_DESCRIPTION("QTI GCC SM8150 Driver");
3781 MODULE_LICENSE("GPL v2");