1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
4 * Copyright (c) 2021, Linaro Limited
7 #include <linux/clk-provider.h>
8 #include <linux/module.h>
10 #include <linux/platform_device.h>
11 #include <linux/regmap.h>
13 #include <dt-bindings/clock/qcom,gcc-sm8450.h>
15 #include "clk-alpha-pll.h"
16 #include "clk-branch.h"
18 #include "clk-regmap.h"
19 #include "clk-regmap-divider.h"
20 #include "clk-regmap-mux.h"
21 #include "clk-regmap-phy-mux.h"
33 P_UFS_PHY_RX_SYMBOL_0_CLK,
34 P_UFS_PHY_RX_SYMBOL_1_CLK,
35 P_UFS_PHY_TX_SYMBOL_0_CLK,
36 P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
39 static struct clk_alpha_pll gcc_gpll0 = {
41 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
43 .enable_reg = 0x62018,
44 .enable_mask = BIT(0),
45 .hw.init = &(struct clk_init_data){
47 .parent_data = &(const struct clk_parent_data){
51 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
56 static const struct clk_div_table post_div_table_gcc_gpll0_out_even[] = {
61 static struct clk_alpha_pll_postdiv gcc_gpll0_out_even = {
64 .post_div_table = post_div_table_gcc_gpll0_out_even,
65 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
67 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
68 .clkr.hw.init = &(struct clk_init_data){
69 .name = "gcc_gpll0_out_even",
70 .parent_hws = (const struct clk_hw*[]) {
74 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
78 static struct clk_alpha_pll gcc_gpll4 = {
80 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
82 .enable_reg = 0x62018,
83 .enable_mask = BIT(4),
84 .hw.init = &(struct clk_init_data){
86 .parent_data = &(const struct clk_parent_data){
90 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
95 static struct clk_alpha_pll gcc_gpll9 = {
97 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
99 .enable_reg = 0x62018,
100 .enable_mask = BIT(9),
101 .hw.init = &(struct clk_init_data){
103 .parent_data = &(const struct clk_parent_data){
104 .fw_name = "bi_tcxo",
107 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
112 static const struct parent_map gcc_parent_map_0[] = {
114 { P_GCC_GPLL0_OUT_MAIN, 1 },
115 { P_GCC_GPLL0_OUT_EVEN, 6 },
118 static const struct clk_parent_data gcc_parent_data_0[] = {
119 { .fw_name = "bi_tcxo" },
120 { .hw = &gcc_gpll0.clkr.hw },
121 { .hw = &gcc_gpll0_out_even.clkr.hw },
124 static const struct parent_map gcc_parent_map_1[] = {
126 { P_GCC_GPLL0_OUT_MAIN, 1 },
128 { P_GCC_GPLL0_OUT_EVEN, 6 },
131 static const struct clk_parent_data gcc_parent_data_1[] = {
132 { .fw_name = "bi_tcxo" },
133 { .hw = &gcc_gpll0.clkr.hw },
134 { .fw_name = "sleep_clk" },
135 { .hw = &gcc_gpll0_out_even.clkr.hw },
138 static const struct parent_map gcc_parent_map_2[] = {
143 static const struct clk_parent_data gcc_parent_data_2[] = {
144 { .fw_name = "bi_tcxo" },
145 { .fw_name = "sleep_clk" },
148 static const struct parent_map gcc_parent_map_3[] = {
152 static const struct clk_parent_data gcc_parent_data_3[] = {
153 { .fw_name = "bi_tcxo" },
156 static const struct parent_map gcc_parent_map_5[] = {
157 { P_PCIE_1_PHY_AUX_CLK, 0 },
161 static const struct clk_parent_data gcc_parent_data_5[] = {
162 { .fw_name = "pcie_1_phy_aux_clk" },
163 { .fw_name = "bi_tcxo" },
166 static const struct parent_map gcc_parent_map_7[] = {
168 { P_GCC_GPLL0_OUT_MAIN, 1 },
169 { P_GCC_GPLL9_OUT_MAIN, 2 },
170 { P_GCC_GPLL4_OUT_MAIN, 5 },
171 { P_GCC_GPLL0_OUT_EVEN, 6 },
174 static const struct clk_parent_data gcc_parent_data_7[] = {
175 { .fw_name = "bi_tcxo" },
176 { .hw = &gcc_gpll0.clkr.hw },
177 { .hw = &gcc_gpll9.clkr.hw },
178 { .hw = &gcc_gpll4.clkr.hw },
179 { .hw = &gcc_gpll0_out_even.clkr.hw },
182 static const struct parent_map gcc_parent_map_8[] = {
183 { P_UFS_PHY_RX_SYMBOL_0_CLK, 0 },
187 static const struct clk_parent_data gcc_parent_data_8[] = {
188 { .fw_name = "ufs_phy_rx_symbol_0_clk" },
189 { .fw_name = "bi_tcxo" },
192 static const struct parent_map gcc_parent_map_9[] = {
193 { P_UFS_PHY_RX_SYMBOL_1_CLK, 0 },
197 static const struct clk_parent_data gcc_parent_data_9[] = {
198 { .fw_name = "ufs_phy_rx_symbol_1_clk" },
199 { .fw_name = "bi_tcxo" },
202 static const struct parent_map gcc_parent_map_10[] = {
203 { P_UFS_PHY_TX_SYMBOL_0_CLK, 0 },
207 static const struct clk_parent_data gcc_parent_data_10[] = {
208 { .fw_name = "ufs_phy_tx_symbol_0_clk" },
209 { .fw_name = "bi_tcxo" },
212 static const struct parent_map gcc_parent_map_11[] = {
213 { P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 0 },
217 static const struct clk_parent_data gcc_parent_data_11[] = {
218 { .fw_name = "usb3_phy_wrapper_gcc_usb30_pipe_clk" },
219 { .fw_name = "bi_tcxo" },
222 static struct clk_regmap_phy_mux gcc_pcie_0_pipe_clk_src = {
225 .hw.init = &(struct clk_init_data){
226 .name = "gcc_pcie_0_pipe_clk_src",
227 .parent_data = &(const struct clk_parent_data){
228 .fw_name = "pcie_0_pipe_clk",
231 .ops = &clk_regmap_phy_mux_ops,
236 static struct clk_regmap_mux gcc_pcie_1_phy_aux_clk_src = {
240 .parent_map = gcc_parent_map_5,
242 .hw.init = &(struct clk_init_data){
243 .name = "gcc_pcie_1_phy_aux_clk_src",
244 .parent_data = gcc_parent_data_5,
245 .num_parents = ARRAY_SIZE(gcc_parent_data_5),
246 .ops = &clk_regmap_mux_closest_ops,
251 static struct clk_regmap_phy_mux gcc_pcie_1_pipe_clk_src = {
254 .hw.init = &(struct clk_init_data){
255 .name = "gcc_pcie_1_pipe_clk_src",
256 .parent_data = &(const struct clk_parent_data){
257 .fw_name = "pcie_1_pipe_clk",
260 .ops = &clk_regmap_phy_mux_ops,
265 static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_0_clk_src = {
269 .parent_map = gcc_parent_map_8,
271 .hw.init = &(struct clk_init_data){
272 .name = "gcc_ufs_phy_rx_symbol_0_clk_src",
273 .parent_data = gcc_parent_data_8,
274 .num_parents = ARRAY_SIZE(gcc_parent_data_8),
275 .ops = &clk_regmap_mux_closest_ops,
280 static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_1_clk_src = {
284 .parent_map = gcc_parent_map_9,
286 .hw.init = &(struct clk_init_data){
287 .name = "gcc_ufs_phy_rx_symbol_1_clk_src",
288 .parent_data = gcc_parent_data_9,
289 .num_parents = ARRAY_SIZE(gcc_parent_data_9),
290 .ops = &clk_regmap_mux_closest_ops,
295 static struct clk_regmap_mux gcc_ufs_phy_tx_symbol_0_clk_src = {
299 .parent_map = gcc_parent_map_10,
301 .hw.init = &(struct clk_init_data){
302 .name = "gcc_ufs_phy_tx_symbol_0_clk_src",
303 .parent_data = gcc_parent_data_10,
304 .num_parents = ARRAY_SIZE(gcc_parent_data_10),
305 .ops = &clk_regmap_mux_closest_ops,
310 static struct clk_regmap_mux gcc_usb3_prim_phy_pipe_clk_src = {
314 .parent_map = gcc_parent_map_11,
316 .hw.init = &(struct clk_init_data){
317 .name = "gcc_usb3_prim_phy_pipe_clk_src",
318 .parent_data = gcc_parent_data_11,
319 .num_parents = ARRAY_SIZE(gcc_parent_data_11),
320 .ops = &clk_regmap_mux_closest_ops,
325 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
326 F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
327 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
328 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
332 static struct clk_rcg2 gcc_gp1_clk_src = {
336 .parent_map = gcc_parent_map_1,
337 .freq_tbl = ftbl_gcc_gp1_clk_src,
339 .clkr.hw.init = &(struct clk_init_data){
340 .name = "gcc_gp1_clk_src",
341 .parent_data = gcc_parent_data_1,
342 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
343 .flags = CLK_SET_RATE_PARENT,
344 .ops = &clk_rcg2_ops,
348 static struct clk_rcg2 gcc_gp2_clk_src = {
352 .parent_map = gcc_parent_map_1,
353 .freq_tbl = ftbl_gcc_gp1_clk_src,
355 .clkr.hw.init = &(struct clk_init_data){
356 .name = "gcc_gp2_clk_src",
357 .parent_data = gcc_parent_data_1,
358 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
359 .flags = CLK_SET_RATE_PARENT,
360 .ops = &clk_rcg2_ops,
364 static struct clk_rcg2 gcc_gp3_clk_src = {
368 .parent_map = gcc_parent_map_1,
369 .freq_tbl = ftbl_gcc_gp1_clk_src,
371 .clkr.hw.init = &(struct clk_init_data){
372 .name = "gcc_gp3_clk_src",
373 .parent_data = gcc_parent_data_1,
374 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
375 .flags = CLK_SET_RATE_PARENT,
376 .ops = &clk_rcg2_ops,
380 static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
381 F(19200000, P_BI_TCXO, 1, 0, 0),
385 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
389 .parent_map = gcc_parent_map_2,
390 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
392 .clkr.hw.init = &(struct clk_init_data){
393 .name = "gcc_pcie_0_aux_clk_src",
394 .parent_data = gcc_parent_data_2,
395 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
396 .flags = CLK_SET_RATE_PARENT,
397 .ops = &clk_rcg2_ops,
401 static const struct freq_tbl ftbl_gcc_pcie_0_phy_rchng_clk_src[] = {
402 F(19200000, P_BI_TCXO, 1, 0, 0),
403 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
407 static struct clk_rcg2 gcc_pcie_0_phy_rchng_clk_src = {
411 .parent_map = gcc_parent_map_0,
412 .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
414 .clkr.hw.init = &(struct clk_init_data){
415 .name = "gcc_pcie_0_phy_rchng_clk_src",
416 .parent_data = gcc_parent_data_0,
417 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
418 .flags = CLK_SET_RATE_PARENT,
419 .ops = &clk_rcg2_ops,
423 static struct clk_rcg2 gcc_pcie_1_aux_clk_src = {
427 .parent_map = gcc_parent_map_2,
428 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
430 .clkr.hw.init = &(struct clk_init_data){
431 .name = "gcc_pcie_1_aux_clk_src",
432 .parent_data = gcc_parent_data_2,
433 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
434 .flags = CLK_SET_RATE_PARENT,
435 .ops = &clk_rcg2_ops,
439 static struct clk_rcg2 gcc_pcie_1_phy_rchng_clk_src = {
443 .parent_map = gcc_parent_map_0,
444 .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
446 .clkr.hw.init = &(struct clk_init_data){
447 .name = "gcc_pcie_1_phy_rchng_clk_src",
448 .parent_data = gcc_parent_data_0,
449 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
450 .flags = CLK_SET_RATE_PARENT,
451 .ops = &clk_rcg2_ops,
455 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
456 F(60000000, P_GCC_GPLL0_OUT_MAIN, 10, 0, 0),
460 static struct clk_rcg2 gcc_pdm2_clk_src = {
464 .parent_map = gcc_parent_map_0,
465 .freq_tbl = ftbl_gcc_pdm2_clk_src,
467 .clkr.hw.init = &(struct clk_init_data){
468 .name = "gcc_pdm2_clk_src",
469 .parent_data = gcc_parent_data_0,
470 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
471 .flags = CLK_SET_RATE_PARENT,
472 .ops = &clk_rcg2_ops,
476 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
477 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
478 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
479 F(19200000, P_BI_TCXO, 1, 0, 0),
480 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
481 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
482 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
483 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
484 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
485 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
486 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
487 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
491 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
492 .name = "gcc_qupv3_wrap0_s0_clk_src",
493 .parent_data = gcc_parent_data_0,
494 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
495 .flags = CLK_SET_RATE_PARENT,
496 .ops = &clk_rcg2_ops,
499 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
503 .parent_map = gcc_parent_map_0,
504 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
506 .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
509 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
510 .name = "gcc_qupv3_wrap0_s1_clk_src",
511 .parent_data = gcc_parent_data_0,
512 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
513 .flags = CLK_SET_RATE_PARENT,
514 .ops = &clk_rcg2_ops,
517 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
521 .parent_map = gcc_parent_map_0,
522 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
524 .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
527 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
528 .name = "gcc_qupv3_wrap0_s2_clk_src",
529 .parent_data = gcc_parent_data_0,
530 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
531 .flags = CLK_SET_RATE_PARENT,
532 .ops = &clk_rcg2_ops,
535 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
539 .parent_map = gcc_parent_map_0,
540 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
542 .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
545 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
546 .name = "gcc_qupv3_wrap0_s3_clk_src",
547 .parent_data = gcc_parent_data_0,
548 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
549 .flags = CLK_SET_RATE_PARENT,
550 .ops = &clk_rcg2_ops,
553 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
557 .parent_map = gcc_parent_map_0,
558 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
560 .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
563 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
564 .name = "gcc_qupv3_wrap0_s4_clk_src",
565 .parent_data = gcc_parent_data_0,
566 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
567 .flags = CLK_SET_RATE_PARENT,
568 .ops = &clk_rcg2_ops,
571 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
575 .parent_map = gcc_parent_map_0,
576 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
578 .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
581 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s5_clk_src[] = {
582 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
583 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
584 F(19200000, P_BI_TCXO, 1, 0, 0),
585 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
586 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
587 F(37500000, P_GCC_GPLL0_OUT_EVEN, 8, 0, 0),
588 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
589 F(50000000, P_GCC_GPLL0_OUT_MAIN, 12, 0, 0),
593 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
594 .name = "gcc_qupv3_wrap0_s5_clk_src",
595 .parent_data = gcc_parent_data_0,
596 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
597 .flags = CLK_SET_RATE_PARENT,
598 .ops = &clk_rcg2_ops,
601 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
605 .parent_map = gcc_parent_map_0,
606 .freq_tbl = ftbl_gcc_qupv3_wrap0_s5_clk_src,
608 .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
611 static struct clk_init_data gcc_qupv3_wrap0_s6_clk_src_init = {
612 .name = "gcc_qupv3_wrap0_s6_clk_src",
613 .parent_data = gcc_parent_data_0,
614 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
615 .flags = CLK_SET_RATE_PARENT,
616 .ops = &clk_rcg2_ops,
619 static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
623 .parent_map = gcc_parent_map_0,
624 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
626 .clkr.hw.init = &gcc_qupv3_wrap0_s6_clk_src_init,
629 static struct clk_init_data gcc_qupv3_wrap0_s7_clk_src_init = {
630 .name = "gcc_qupv3_wrap0_s7_clk_src",
631 .parent_data = gcc_parent_data_0,
632 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
633 .flags = CLK_SET_RATE_PARENT,
634 .ops = &clk_rcg2_ops,
637 static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = {
641 .parent_map = gcc_parent_map_0,
642 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
644 .clkr.hw.init = &gcc_qupv3_wrap0_s7_clk_src_init,
647 static const struct freq_tbl ftbl_gcc_qupv3_wrap1_s0_clk_src[] = {
648 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
649 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
650 F(19200000, P_BI_TCXO, 1, 0, 0),
651 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
652 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
653 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
654 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
655 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
656 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
657 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
658 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
659 F(102400000, P_GCC_GPLL0_OUT_EVEN, 1, 128, 375),
660 F(112000000, P_GCC_GPLL0_OUT_EVEN, 1, 28, 75),
661 F(117964800, P_GCC_GPLL0_OUT_EVEN, 1, 6144, 15625),
662 F(120000000, P_GCC_GPLL0_OUT_MAIN, 5, 0, 0),
666 static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
667 .name = "gcc_qupv3_wrap1_s0_clk_src",
668 .parent_data = gcc_parent_data_0,
669 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
670 .flags = CLK_SET_RATE_PARENT,
671 .ops = &clk_rcg2_ops,
674 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
678 .parent_map = gcc_parent_map_0,
679 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
681 .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
684 static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
685 .name = "gcc_qupv3_wrap1_s1_clk_src",
686 .parent_data = gcc_parent_data_0,
687 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
688 .flags = CLK_SET_RATE_PARENT,
689 .ops = &clk_rcg2_ops,
692 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
696 .parent_map = gcc_parent_map_0,
697 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
699 .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
702 static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {
703 .name = "gcc_qupv3_wrap1_s2_clk_src",
704 .parent_data = gcc_parent_data_0,
705 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
706 .flags = CLK_SET_RATE_PARENT,
707 .ops = &clk_rcg2_ops,
710 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
714 .parent_map = gcc_parent_map_0,
715 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
717 .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,
720 static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
721 .name = "gcc_qupv3_wrap1_s3_clk_src",
722 .parent_data = gcc_parent_data_0,
723 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
724 .flags = CLK_SET_RATE_PARENT,
725 .ops = &clk_rcg2_ops,
728 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
732 .parent_map = gcc_parent_map_0,
733 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
735 .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
738 static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
739 .name = "gcc_qupv3_wrap1_s4_clk_src",
740 .parent_data = gcc_parent_data_0,
741 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
742 .flags = CLK_SET_RATE_PARENT,
743 .ops = &clk_rcg2_ops,
746 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
750 .parent_map = gcc_parent_map_0,
751 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
753 .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
756 static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
757 .name = "gcc_qupv3_wrap1_s5_clk_src",
758 .parent_data = gcc_parent_data_0,
759 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
760 .flags = CLK_SET_RATE_PARENT,
761 .ops = &clk_rcg2_ops,
764 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
768 .parent_map = gcc_parent_map_0,
769 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
771 .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
774 static struct clk_init_data gcc_qupv3_wrap1_s6_clk_src_init = {
775 .name = "gcc_qupv3_wrap1_s6_clk_src",
776 .parent_data = gcc_parent_data_0,
777 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
778 .flags = CLK_SET_RATE_PARENT,
779 .ops = &clk_rcg2_ops,
782 static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = {
786 .parent_map = gcc_parent_map_0,
787 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
789 .clkr.hw.init = &gcc_qupv3_wrap1_s6_clk_src_init,
792 static struct clk_init_data gcc_qupv3_wrap2_s0_clk_src_init = {
793 .name = "gcc_qupv3_wrap2_s0_clk_src",
794 .parent_data = gcc_parent_data_0,
795 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
796 .flags = CLK_SET_RATE_PARENT,
797 .ops = &clk_rcg2_ops,
800 static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = {
804 .parent_map = gcc_parent_map_0,
805 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
807 .clkr.hw.init = &gcc_qupv3_wrap2_s0_clk_src_init,
810 static struct clk_init_data gcc_qupv3_wrap2_s1_clk_src_init = {
811 .name = "gcc_qupv3_wrap2_s1_clk_src",
812 .parent_data = gcc_parent_data_0,
813 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
814 .flags = CLK_SET_RATE_PARENT,
815 .ops = &clk_rcg2_ops,
818 static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = {
822 .parent_map = gcc_parent_map_0,
823 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
825 .clkr.hw.init = &gcc_qupv3_wrap2_s1_clk_src_init,
828 static struct clk_init_data gcc_qupv3_wrap2_s2_clk_src_init = {
829 .name = "gcc_qupv3_wrap2_s2_clk_src",
830 .parent_data = gcc_parent_data_0,
831 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
832 .flags = CLK_SET_RATE_PARENT,
833 .ops = &clk_rcg2_ops,
836 static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src = {
840 .parent_map = gcc_parent_map_0,
841 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
843 .clkr.hw.init = &gcc_qupv3_wrap2_s2_clk_src_init,
846 static struct clk_init_data gcc_qupv3_wrap2_s3_clk_src_init = {
847 .name = "gcc_qupv3_wrap2_s3_clk_src",
848 .parent_data = gcc_parent_data_0,
849 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
850 .flags = CLK_SET_RATE_PARENT,
851 .ops = &clk_rcg2_ops,
854 static struct clk_rcg2 gcc_qupv3_wrap2_s3_clk_src = {
858 .parent_map = gcc_parent_map_0,
859 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
861 .clkr.hw.init = &gcc_qupv3_wrap2_s3_clk_src_init,
864 static struct clk_init_data gcc_qupv3_wrap2_s4_clk_src_init = {
865 .name = "gcc_qupv3_wrap2_s4_clk_src",
866 .parent_data = gcc_parent_data_0,
867 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
868 .flags = CLK_SET_RATE_PARENT,
869 .ops = &clk_rcg2_ops,
872 static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = {
876 .parent_map = gcc_parent_map_0,
877 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
879 .clkr.hw.init = &gcc_qupv3_wrap2_s4_clk_src_init,
882 static struct clk_init_data gcc_qupv3_wrap2_s5_clk_src_init = {
883 .name = "gcc_qupv3_wrap2_s5_clk_src",
884 .parent_data = gcc_parent_data_0,
885 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
886 .flags = CLK_SET_RATE_PARENT,
887 .ops = &clk_rcg2_ops,
890 static struct clk_rcg2 gcc_qupv3_wrap2_s5_clk_src = {
894 .parent_map = gcc_parent_map_0,
895 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
897 .clkr.hw.init = &gcc_qupv3_wrap2_s5_clk_src_init,
900 static struct clk_init_data gcc_qupv3_wrap2_s6_clk_src_init = {
901 .name = "gcc_qupv3_wrap2_s6_clk_src",
902 .parent_data = gcc_parent_data_0,
903 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
904 .flags = CLK_SET_RATE_PARENT,
905 .ops = &clk_rcg2_ops,
908 static struct clk_rcg2 gcc_qupv3_wrap2_s6_clk_src = {
912 .parent_map = gcc_parent_map_0,
913 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
915 .clkr.hw.init = &gcc_qupv3_wrap2_s6_clk_src_init,
918 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
919 F(400000, P_BI_TCXO, 12, 1, 4),
920 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
921 F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
922 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
923 F(202000000, P_GCC_GPLL9_OUT_MAIN, 4, 0, 0),
927 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
931 .parent_map = gcc_parent_map_7,
932 .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
934 .clkr.hw.init = &(struct clk_init_data){
935 .name = "gcc_sdcc2_apps_clk_src",
936 .parent_data = gcc_parent_data_7,
937 .num_parents = ARRAY_SIZE(gcc_parent_data_7),
938 .flags = CLK_SET_RATE_PARENT,
939 .ops = &clk_rcg2_floor_ops,
943 static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = {
944 F(400000, P_BI_TCXO, 12, 1, 4),
945 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
946 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
950 static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {
954 .parent_map = gcc_parent_map_0,
955 .freq_tbl = ftbl_gcc_sdcc4_apps_clk_src,
957 .clkr.hw.init = &(struct clk_init_data){
958 .name = "gcc_sdcc4_apps_clk_src",
959 .parent_data = gcc_parent_data_0,
960 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
961 .flags = CLK_SET_RATE_PARENT,
962 .ops = &clk_rcg2_floor_ops,
966 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
967 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
968 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
969 F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0),
970 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
974 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
978 .parent_map = gcc_parent_map_0,
979 .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
981 .clkr.hw.init = &(struct clk_init_data){
982 .name = "gcc_ufs_phy_axi_clk_src",
983 .parent_data = gcc_parent_data_0,
984 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
985 .flags = CLK_SET_RATE_PARENT,
986 .ops = &clk_rcg2_ops,
990 static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
991 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
992 F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0),
993 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
997 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
1001 .parent_map = gcc_parent_map_0,
1002 .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
1003 .hw_clk_ctrl = true,
1004 .clkr.hw.init = &(struct clk_init_data){
1005 .name = "gcc_ufs_phy_ice_core_clk_src",
1006 .parent_data = gcc_parent_data_0,
1007 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1008 .flags = CLK_SET_RATE_PARENT,
1009 .ops = &clk_rcg2_ops,
1013 static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = {
1014 F(9600000, P_BI_TCXO, 2, 0, 0),
1015 F(19200000, P_BI_TCXO, 1, 0, 0),
1019 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
1020 .cmd_rcgr = 0x870a8,
1023 .parent_map = gcc_parent_map_3,
1024 .freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src,
1025 .hw_clk_ctrl = true,
1026 .clkr.hw.init = &(struct clk_init_data){
1027 .name = "gcc_ufs_phy_phy_aux_clk_src",
1028 .parent_data = gcc_parent_data_3,
1029 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
1030 .flags = CLK_SET_RATE_PARENT,
1031 .ops = &clk_rcg2_ops,
1035 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
1036 .cmd_rcgr = 0x8708c,
1039 .parent_map = gcc_parent_map_0,
1040 .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
1041 .hw_clk_ctrl = true,
1042 .clkr.hw.init = &(struct clk_init_data){
1043 .name = "gcc_ufs_phy_unipro_core_clk_src",
1044 .parent_data = gcc_parent_data_0,
1045 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1046 .flags = CLK_SET_RATE_PARENT,
1047 .ops = &clk_rcg2_ops,
1051 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
1052 F(66666667, P_GCC_GPLL0_OUT_EVEN, 4.5, 0, 0),
1053 F(133333333, P_GCC_GPLL0_OUT_MAIN, 4.5, 0, 0),
1054 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
1055 F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0),
1059 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1060 .cmd_rcgr = 0x49028,
1063 .parent_map = gcc_parent_map_0,
1064 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1065 .hw_clk_ctrl = true,
1066 .clkr.hw.init = &(struct clk_init_data){
1067 .name = "gcc_usb30_prim_master_clk_src",
1068 .parent_data = gcc_parent_data_0,
1069 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1070 .flags = CLK_SET_RATE_PARENT,
1071 .ops = &clk_rcg2_ops,
1075 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1076 .cmd_rcgr = 0x49040,
1079 .parent_map = gcc_parent_map_0,
1080 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
1081 .hw_clk_ctrl = true,
1082 .clkr.hw.init = &(struct clk_init_data){
1083 .name = "gcc_usb30_prim_mock_utmi_clk_src",
1084 .parent_data = gcc_parent_data_0,
1085 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1086 .flags = CLK_SET_RATE_PARENT,
1087 .ops = &clk_rcg2_ops,
1091 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1092 .cmd_rcgr = 0x4906c,
1095 .parent_map = gcc_parent_map_2,
1096 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
1097 .hw_clk_ctrl = true,
1098 .clkr.hw.init = &(struct clk_init_data){
1099 .name = "gcc_usb3_prim_phy_aux_clk_src",
1100 .parent_data = gcc_parent_data_2,
1101 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
1102 .flags = CLK_SET_RATE_PARENT,
1103 .ops = &clk_rcg2_ops,
1107 static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {
1111 .clkr.hw.init = &(struct clk_init_data) {
1112 .name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",
1113 .parent_hws = (const struct clk_hw*[]) {
1114 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
1117 .flags = CLK_SET_RATE_PARENT,
1118 .ops = &clk_regmap_div_ro_ops,
1122 static struct clk_branch gcc_aggre_noc_pcie_0_axi_clk = {
1123 .halt_reg = 0x7b08c,
1124 .halt_check = BRANCH_HALT_SKIP,
1125 .hwcg_reg = 0x7b08c,
1128 .enable_reg = 0x62000,
1129 .enable_mask = BIT(12),
1130 .hw.init = &(struct clk_init_data){
1131 .name = "gcc_aggre_noc_pcie_0_axi_clk",
1132 .ops = &clk_branch2_ops,
1137 static struct clk_branch gcc_aggre_noc_pcie_1_axi_clk = {
1138 .halt_reg = 0x9d098,
1139 .halt_check = BRANCH_HALT_SKIP,
1140 .hwcg_reg = 0x9d098,
1143 .enable_reg = 0x62000,
1144 .enable_mask = BIT(11),
1145 .hw.init = &(struct clk_init_data){
1146 .name = "gcc_aggre_noc_pcie_1_axi_clk",
1147 .ops = &clk_branch2_ops,
1152 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
1153 .halt_reg = 0x870d4,
1154 .halt_check = BRANCH_HALT_VOTED,
1155 .hwcg_reg = 0x870d4,
1158 .enable_reg = 0x870d4,
1159 .enable_mask = BIT(0),
1160 .hw.init = &(struct clk_init_data){
1161 .name = "gcc_aggre_ufs_phy_axi_clk",
1162 .parent_hws = (const struct clk_hw*[]) {
1163 &gcc_ufs_phy_axi_clk_src.clkr.hw,
1166 .flags = CLK_SET_RATE_PARENT,
1167 .ops = &clk_branch2_ops,
1172 static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = {
1173 .halt_reg = 0x870d4,
1174 .halt_check = BRANCH_HALT_VOTED,
1175 .hwcg_reg = 0x870d4,
1178 .enable_reg = 0x870d4,
1179 .enable_mask = BIT(1),
1180 .hw.init = &(struct clk_init_data){
1181 .name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk",
1182 .parent_hws = (const struct clk_hw*[]) {
1183 &gcc_ufs_phy_axi_clk_src.clkr.hw,
1186 .flags = CLK_SET_RATE_PARENT,
1187 .ops = &clk_branch2_ops,
1192 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
1193 .halt_reg = 0x49088,
1194 .halt_check = BRANCH_HALT_VOTED,
1195 .hwcg_reg = 0x49088,
1198 .enable_reg = 0x49088,
1199 .enable_mask = BIT(0),
1200 .hw.init = &(struct clk_init_data){
1201 .name = "gcc_aggre_usb3_prim_axi_clk",
1202 .parent_hws = (const struct clk_hw*[]) {
1203 &gcc_usb30_prim_master_clk_src.clkr.hw,
1206 .flags = CLK_SET_RATE_PARENT,
1207 .ops = &clk_branch2_ops,
1212 static struct clk_branch gcc_boot_rom_ahb_clk = {
1213 .halt_reg = 0x48004,
1214 .halt_check = BRANCH_HALT_VOTED,
1215 .hwcg_reg = 0x48004,
1218 .enable_reg = 0x62000,
1219 .enable_mask = BIT(10),
1220 .hw.init = &(struct clk_init_data){
1221 .name = "gcc_boot_rom_ahb_clk",
1222 .ops = &clk_branch2_ops,
1227 static struct clk_branch gcc_camera_hf_axi_clk = {
1228 .halt_reg = 0x36010,
1229 .halt_check = BRANCH_HALT_SKIP,
1230 .hwcg_reg = 0x36010,
1233 .enable_reg = 0x36010,
1234 .enable_mask = BIT(0),
1235 .hw.init = &(struct clk_init_data){
1236 .name = "gcc_camera_hf_axi_clk",
1237 .ops = &clk_branch2_ops,
1242 static struct clk_branch gcc_camera_sf_axi_clk = {
1243 .halt_reg = 0x36018,
1244 .halt_check = BRANCH_HALT_SKIP,
1245 .hwcg_reg = 0x36018,
1248 .enable_reg = 0x36018,
1249 .enable_mask = BIT(0),
1250 .hw.init = &(struct clk_init_data){
1251 .name = "gcc_camera_sf_axi_clk",
1252 .ops = &clk_branch2_ops,
1257 static struct clk_branch gcc_cfg_noc_pcie_anoc_ahb_clk = {
1258 .halt_reg = 0x20030,
1259 .halt_check = BRANCH_HALT_VOTED,
1260 .hwcg_reg = 0x20030,
1263 .enable_reg = 0x62000,
1264 .enable_mask = BIT(20),
1265 .hw.init = &(struct clk_init_data){
1266 .name = "gcc_cfg_noc_pcie_anoc_ahb_clk",
1267 .ops = &clk_branch2_ops,
1272 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1273 .halt_reg = 0x49084,
1274 .halt_check = BRANCH_HALT_VOTED,
1275 .hwcg_reg = 0x49084,
1278 .enable_reg = 0x49084,
1279 .enable_mask = BIT(0),
1280 .hw.init = &(struct clk_init_data){
1281 .name = "gcc_cfg_noc_usb3_prim_axi_clk",
1282 .parent_hws = (const struct clk_hw*[]) {
1283 &gcc_usb30_prim_master_clk_src.clkr.hw,
1286 .flags = CLK_SET_RATE_PARENT,
1287 .ops = &clk_branch2_ops,
1292 static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1293 .halt_reg = 0x81154,
1294 .halt_check = BRANCH_HALT_SKIP,
1295 .hwcg_reg = 0x81154,
1298 .enable_reg = 0x81154,
1299 .enable_mask = BIT(0),
1300 .hw.init = &(struct clk_init_data){
1301 .name = "gcc_ddrss_gpu_axi_clk",
1302 .ops = &clk_branch2_aon_ops,
1307 static struct clk_branch gcc_ddrss_pcie_sf_tbu_clk = {
1308 .halt_reg = 0x9d094,
1309 .halt_check = BRANCH_HALT_SKIP,
1310 .hwcg_reg = 0x9d094,
1313 .enable_reg = 0x62000,
1314 .enable_mask = BIT(19),
1315 .hw.init = &(struct clk_init_data){
1316 .name = "gcc_ddrss_pcie_sf_tbu_clk",
1317 .ops = &clk_branch2_ops,
1322 static struct clk_branch gcc_disp_hf_axi_clk = {
1323 .halt_reg = 0x3700c,
1324 .halt_check = BRANCH_HALT_SKIP,
1325 .hwcg_reg = 0x3700c,
1328 .enable_reg = 0x3700c,
1329 .enable_mask = BIT(0),
1330 .hw.init = &(struct clk_init_data){
1331 .name = "gcc_disp_hf_axi_clk",
1332 .ops = &clk_branch2_ops,
1337 static struct clk_branch gcc_disp_sf_axi_clk = {
1338 .halt_reg = 0x37014,
1339 .halt_check = BRANCH_HALT_SKIP,
1340 .hwcg_reg = 0x37014,
1343 .enable_reg = 0x37014,
1344 .enable_mask = BIT(0),
1345 .hw.init = &(struct clk_init_data){
1346 .name = "gcc_disp_sf_axi_clk",
1347 .ops = &clk_branch2_ops,
1352 static struct clk_branch gcc_eusb3_0_clkref_en = {
1353 .halt_reg = 0x9c00c,
1354 .halt_check = BRANCH_HALT,
1356 .enable_reg = 0x9c00c,
1357 .enable_mask = BIT(0),
1358 .hw.init = &(struct clk_init_data){
1359 .name = "gcc_eusb3_0_clkref_en",
1360 .ops = &clk_branch2_ops,
1365 static struct clk_branch gcc_gp1_clk = {
1366 .halt_reg = 0x74000,
1367 .halt_check = BRANCH_HALT,
1369 .enable_reg = 0x74000,
1370 .enable_mask = BIT(0),
1371 .hw.init = &(struct clk_init_data){
1372 .name = "gcc_gp1_clk",
1373 .parent_hws = (const struct clk_hw*[]) {
1374 &gcc_gp1_clk_src.clkr.hw,
1377 .flags = CLK_SET_RATE_PARENT,
1378 .ops = &clk_branch2_ops,
1383 static struct clk_branch gcc_gp2_clk = {
1384 .halt_reg = 0x75000,
1385 .halt_check = BRANCH_HALT,
1387 .enable_reg = 0x75000,
1388 .enable_mask = BIT(0),
1389 .hw.init = &(struct clk_init_data){
1390 .name = "gcc_gp2_clk",
1391 .parent_hws = (const struct clk_hw*[]) {
1392 &gcc_gp2_clk_src.clkr.hw,
1395 .flags = CLK_SET_RATE_PARENT,
1396 .ops = &clk_branch2_ops,
1401 static struct clk_branch gcc_gp3_clk = {
1402 .halt_reg = 0x76000,
1403 .halt_check = BRANCH_HALT,
1405 .enable_reg = 0x76000,
1406 .enable_mask = BIT(0),
1407 .hw.init = &(struct clk_init_data){
1408 .name = "gcc_gp3_clk",
1409 .parent_hws = (const struct clk_hw*[]) {
1410 &gcc_gp3_clk_src.clkr.hw,
1413 .flags = CLK_SET_RATE_PARENT,
1414 .ops = &clk_branch2_ops,
1419 static struct clk_branch gcc_gpu_gpll0_clk_src = {
1420 .halt_check = BRANCH_HALT_DELAY,
1422 .enable_reg = 0x62000,
1423 .enable_mask = BIT(15),
1424 .hw.init = &(struct clk_init_data){
1425 .name = "gcc_gpu_gpll0_clk_src",
1426 .parent_hws = (const struct clk_hw*[]) {
1430 .flags = CLK_SET_RATE_PARENT,
1431 .ops = &clk_branch2_ops,
1436 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
1437 .halt_check = BRANCH_HALT_DELAY,
1439 .enable_reg = 0x62000,
1440 .enable_mask = BIT(16),
1441 .hw.init = &(struct clk_init_data){
1442 .name = "gcc_gpu_gpll0_div_clk_src",
1443 .parent_hws = (const struct clk_hw*[]) {
1444 &gcc_gpll0_out_even.clkr.hw,
1447 .flags = CLK_SET_RATE_PARENT,
1448 .ops = &clk_branch2_ops,
1453 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
1454 .halt_reg = 0x81010,
1455 .halt_check = BRANCH_HALT_VOTED,
1456 .hwcg_reg = 0x81010,
1459 .enable_reg = 0x81010,
1460 .enable_mask = BIT(0),
1461 .hw.init = &(struct clk_init_data){
1462 .name = "gcc_gpu_memnoc_gfx_clk",
1463 .ops = &clk_branch2_ops,
1468 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
1469 .halt_reg = 0x81018,
1470 .halt_check = BRANCH_HALT_DELAY,
1472 .enable_reg = 0x81018,
1473 .enable_mask = BIT(0),
1474 .hw.init = &(struct clk_init_data){
1475 .name = "gcc_gpu_snoc_dvm_gfx_clk",
1476 .ops = &clk_branch2_ops,
1481 static struct clk_branch gcc_pcie_0_aux_clk = {
1482 .halt_reg = 0x7b034,
1483 .halt_check = BRANCH_HALT_VOTED,
1485 .enable_reg = 0x62008,
1486 .enable_mask = BIT(3),
1487 .hw.init = &(struct clk_init_data){
1488 .name = "gcc_pcie_0_aux_clk",
1489 .parent_hws = (const struct clk_hw*[]) {
1490 &gcc_pcie_0_aux_clk_src.clkr.hw,
1493 .flags = CLK_SET_RATE_PARENT,
1494 .ops = &clk_branch2_ops,
1499 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
1500 .halt_reg = 0x7b030,
1501 .halt_check = BRANCH_HALT_VOTED,
1502 .hwcg_reg = 0x7b030,
1505 .enable_reg = 0x62008,
1506 .enable_mask = BIT(2),
1507 .hw.init = &(struct clk_init_data){
1508 .name = "gcc_pcie_0_cfg_ahb_clk",
1509 .ops = &clk_branch2_ops,
1514 static struct clk_branch gcc_pcie_0_clkref_en = {
1515 .halt_reg = 0x9c004,
1516 .halt_check = BRANCH_HALT,
1518 .enable_reg = 0x9c004,
1519 .enable_mask = BIT(0),
1520 .hw.init = &(struct clk_init_data){
1521 .name = "gcc_pcie_0_clkref_en",
1522 .ops = &clk_branch2_ops,
1527 static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
1528 .halt_reg = 0x7b028,
1529 .halt_check = BRANCH_HALT_SKIP,
1531 .enable_reg = 0x62008,
1532 .enable_mask = BIT(1),
1533 .hw.init = &(struct clk_init_data){
1534 .name = "gcc_pcie_0_mstr_axi_clk",
1535 .ops = &clk_branch2_ops,
1540 static struct clk_branch gcc_pcie_0_phy_rchng_clk = {
1541 .halt_reg = 0x7b044,
1542 .halt_check = BRANCH_HALT_VOTED,
1544 .enable_reg = 0x62000,
1545 .enable_mask = BIT(22),
1546 .hw.init = &(struct clk_init_data){
1547 .name = "gcc_pcie_0_phy_rchng_clk",
1548 .parent_hws = (const struct clk_hw*[]) {
1549 &gcc_pcie_0_phy_rchng_clk_src.clkr.hw,
1552 .flags = CLK_SET_RATE_PARENT,
1553 .ops = &clk_branch2_ops,
1558 static struct clk_branch gcc_pcie_0_pipe_clk = {
1559 .halt_reg = 0x7b03c,
1560 .halt_check = BRANCH_HALT_SKIP,
1562 .enable_reg = 0x62008,
1563 .enable_mask = BIT(4),
1564 .hw.init = &(struct clk_init_data){
1565 .name = "gcc_pcie_0_pipe_clk",
1566 .parent_hws = (const struct clk_hw*[]) {
1567 &gcc_pcie_0_pipe_clk_src.clkr.hw,
1570 .flags = CLK_SET_RATE_PARENT,
1571 .ops = &clk_branch2_ops,
1576 static struct clk_branch gcc_pcie_0_slv_axi_clk = {
1577 .halt_reg = 0x7b020,
1578 .halt_check = BRANCH_HALT_VOTED,
1579 .hwcg_reg = 0x7b020,
1582 .enable_reg = 0x62008,
1583 .enable_mask = BIT(0),
1584 .hw.init = &(struct clk_init_data){
1585 .name = "gcc_pcie_0_slv_axi_clk",
1586 .ops = &clk_branch2_ops,
1591 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
1592 .halt_reg = 0x7b01c,
1593 .halt_check = BRANCH_HALT_VOTED,
1595 .enable_reg = 0x62008,
1596 .enable_mask = BIT(5),
1597 .hw.init = &(struct clk_init_data){
1598 .name = "gcc_pcie_0_slv_q2a_axi_clk",
1599 .ops = &clk_branch2_ops,
1604 static struct clk_branch gcc_pcie_1_aux_clk = {
1605 .halt_reg = 0x9d030,
1606 .halt_check = BRANCH_HALT_VOTED,
1608 .enable_reg = 0x62000,
1609 .enable_mask = BIT(29),
1610 .hw.init = &(struct clk_init_data){
1611 .name = "gcc_pcie_1_aux_clk",
1612 .parent_hws = (const struct clk_hw*[]) {
1613 &gcc_pcie_1_aux_clk_src.clkr.hw,
1616 .flags = CLK_SET_RATE_PARENT,
1617 .ops = &clk_branch2_ops,
1622 static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
1623 .halt_reg = 0x9d02c,
1624 .halt_check = BRANCH_HALT_VOTED,
1625 .hwcg_reg = 0x9d02c,
1628 .enable_reg = 0x62000,
1629 .enable_mask = BIT(28),
1630 .hw.init = &(struct clk_init_data){
1631 .name = "gcc_pcie_1_cfg_ahb_clk",
1632 .ops = &clk_branch2_ops,
1637 static struct clk_branch gcc_pcie_1_clkref_en = {
1638 .halt_reg = 0x9c008,
1639 .halt_check = BRANCH_HALT,
1641 .enable_reg = 0x9c008,
1642 .enable_mask = BIT(0),
1643 .hw.init = &(struct clk_init_data){
1644 .name = "gcc_pcie_1_clkref_en",
1645 .ops = &clk_branch2_ops,
1650 static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
1651 .halt_reg = 0x9d024,
1652 .halt_check = BRANCH_HALT_SKIP,
1654 .enable_reg = 0x62000,
1655 .enable_mask = BIT(27),
1656 .hw.init = &(struct clk_init_data){
1657 .name = "gcc_pcie_1_mstr_axi_clk",
1658 .ops = &clk_branch2_ops,
1663 static struct clk_branch gcc_pcie_1_phy_aux_clk = {
1664 .halt_reg = 0x9d038,
1665 .halt_check = BRANCH_HALT_VOTED,
1667 .enable_reg = 0x62000,
1668 .enable_mask = BIT(24),
1669 .hw.init = &(struct clk_init_data){
1670 .name = "gcc_pcie_1_phy_aux_clk",
1671 .parent_hws = (const struct clk_hw*[]) {
1672 &gcc_pcie_1_phy_aux_clk_src.clkr.hw,
1675 .flags = CLK_SET_RATE_PARENT,
1676 .ops = &clk_branch2_ops,
1681 static struct clk_branch gcc_pcie_1_phy_rchng_clk = {
1682 .halt_reg = 0x9d048,
1683 .halt_check = BRANCH_HALT_VOTED,
1685 .enable_reg = 0x62000,
1686 .enable_mask = BIT(23),
1687 .hw.init = &(struct clk_init_data){
1688 .name = "gcc_pcie_1_phy_rchng_clk",
1689 .parent_hws = (const struct clk_hw*[]) {
1690 &gcc_pcie_1_phy_rchng_clk_src.clkr.hw,
1693 .flags = CLK_SET_RATE_PARENT,
1694 .ops = &clk_branch2_ops,
1699 static struct clk_branch gcc_pcie_1_pipe_clk = {
1700 .halt_reg = 0x9d040,
1701 .halt_check = BRANCH_HALT_SKIP,
1703 .enable_reg = 0x62000,
1704 .enable_mask = BIT(30),
1705 .hw.init = &(struct clk_init_data){
1706 .name = "gcc_pcie_1_pipe_clk",
1707 .parent_hws = (const struct clk_hw*[]) {
1708 &gcc_pcie_1_pipe_clk_src.clkr.hw,
1711 .flags = CLK_SET_RATE_PARENT,
1712 .ops = &clk_branch2_ops,
1717 static struct clk_branch gcc_pcie_1_slv_axi_clk = {
1718 .halt_reg = 0x9d01c,
1719 .halt_check = BRANCH_HALT_VOTED,
1720 .hwcg_reg = 0x9d01c,
1723 .enable_reg = 0x62000,
1724 .enable_mask = BIT(26),
1725 .hw.init = &(struct clk_init_data){
1726 .name = "gcc_pcie_1_slv_axi_clk",
1727 .ops = &clk_branch2_ops,
1732 static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = {
1733 .halt_reg = 0x9d018,
1734 .halt_check = BRANCH_HALT_VOTED,
1736 .enable_reg = 0x62000,
1737 .enable_mask = BIT(25),
1738 .hw.init = &(struct clk_init_data){
1739 .name = "gcc_pcie_1_slv_q2a_axi_clk",
1740 .ops = &clk_branch2_ops,
1745 static struct clk_branch gcc_pdm2_clk = {
1746 .halt_reg = 0x4300c,
1747 .halt_check = BRANCH_HALT,
1749 .enable_reg = 0x4300c,
1750 .enable_mask = BIT(0),
1751 .hw.init = &(struct clk_init_data){
1752 .name = "gcc_pdm2_clk",
1753 .parent_hws = (const struct clk_hw*[]) {
1754 &gcc_pdm2_clk_src.clkr.hw,
1757 .flags = CLK_SET_RATE_PARENT,
1758 .ops = &clk_branch2_ops,
1763 static struct clk_branch gcc_pdm_ahb_clk = {
1764 .halt_reg = 0x43004,
1765 .halt_check = BRANCH_HALT_VOTED,
1766 .hwcg_reg = 0x43004,
1769 .enable_reg = 0x43004,
1770 .enable_mask = BIT(0),
1771 .hw.init = &(struct clk_init_data){
1772 .name = "gcc_pdm_ahb_clk",
1773 .ops = &clk_branch2_ops,
1778 static struct clk_branch gcc_pdm_xo4_clk = {
1779 .halt_reg = 0x43008,
1780 .halt_check = BRANCH_HALT,
1782 .enable_reg = 0x43008,
1783 .enable_mask = BIT(0),
1784 .hw.init = &(struct clk_init_data){
1785 .name = "gcc_pdm_xo4_clk",
1786 .ops = &clk_branch2_ops,
1791 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
1792 .halt_reg = 0x36008,
1793 .halt_check = BRANCH_HALT_VOTED,
1794 .hwcg_reg = 0x36008,
1797 .enable_reg = 0x36008,
1798 .enable_mask = BIT(0),
1799 .hw.init = &(struct clk_init_data){
1800 .name = "gcc_qmip_camera_nrt_ahb_clk",
1801 .ops = &clk_branch2_ops,
1806 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
1807 .halt_reg = 0x3600c,
1808 .halt_check = BRANCH_HALT_VOTED,
1809 .hwcg_reg = 0x3600c,
1812 .enable_reg = 0x3600c,
1813 .enable_mask = BIT(0),
1814 .hw.init = &(struct clk_init_data){
1815 .name = "gcc_qmip_camera_rt_ahb_clk",
1816 .ops = &clk_branch2_ops,
1821 static struct clk_branch gcc_qmip_disp_ahb_clk = {
1822 .halt_reg = 0x37008,
1823 .halt_check = BRANCH_HALT_VOTED,
1824 .hwcg_reg = 0x37008,
1827 .enable_reg = 0x37008,
1828 .enable_mask = BIT(0),
1829 .hw.init = &(struct clk_init_data){
1830 .name = "gcc_qmip_disp_ahb_clk",
1831 .ops = &clk_branch2_ops,
1836 static struct clk_branch gcc_qmip_gpu_ahb_clk = {
1837 .halt_reg = 0x81008,
1838 .halt_check = BRANCH_HALT_VOTED,
1839 .hwcg_reg = 0x81008,
1842 .enable_reg = 0x81008,
1843 .enable_mask = BIT(0),
1844 .hw.init = &(struct clk_init_data){
1845 .name = "gcc_qmip_gpu_ahb_clk",
1846 .ops = &clk_branch2_ops,
1851 static struct clk_branch gcc_qmip_pcie_ahb_clk = {
1852 .halt_reg = 0x7b018,
1853 .halt_check = BRANCH_HALT_VOTED,
1854 .hwcg_reg = 0x7b018,
1857 .enable_reg = 0x7b018,
1858 .enable_mask = BIT(0),
1859 .hw.init = &(struct clk_init_data){
1860 .name = "gcc_qmip_pcie_ahb_clk",
1861 .ops = &clk_branch2_ops,
1866 static struct clk_branch gcc_qmip_video_cv_cpu_ahb_clk = {
1867 .halt_reg = 0x42014,
1868 .halt_check = BRANCH_HALT_VOTED,
1869 .hwcg_reg = 0x42014,
1872 .enable_reg = 0x42014,
1873 .enable_mask = BIT(0),
1874 .hw.init = &(struct clk_init_data){
1875 .name = "gcc_qmip_video_cv_cpu_ahb_clk",
1876 .ops = &clk_branch2_ops,
1881 static struct clk_branch gcc_qmip_video_cvp_ahb_clk = {
1882 .halt_reg = 0x42008,
1883 .halt_check = BRANCH_HALT_VOTED,
1884 .hwcg_reg = 0x42008,
1887 .enable_reg = 0x42008,
1888 .enable_mask = BIT(0),
1889 .hw.init = &(struct clk_init_data){
1890 .name = "gcc_qmip_video_cvp_ahb_clk",
1891 .ops = &clk_branch2_ops,
1896 static struct clk_branch gcc_qmip_video_v_cpu_ahb_clk = {
1897 .halt_reg = 0x42010,
1898 .halt_check = BRANCH_HALT_VOTED,
1899 .hwcg_reg = 0x42010,
1902 .enable_reg = 0x42010,
1903 .enable_mask = BIT(0),
1904 .hw.init = &(struct clk_init_data){
1905 .name = "gcc_qmip_video_v_cpu_ahb_clk",
1906 .ops = &clk_branch2_ops,
1911 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
1912 .halt_reg = 0x4200c,
1913 .halt_check = BRANCH_HALT_VOTED,
1914 .hwcg_reg = 0x4200c,
1917 .enable_reg = 0x4200c,
1918 .enable_mask = BIT(0),
1919 .hw.init = &(struct clk_init_data){
1920 .name = "gcc_qmip_video_vcodec_ahb_clk",
1921 .ops = &clk_branch2_ops,
1926 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
1927 .halt_reg = 0x3300c,
1928 .halt_check = BRANCH_HALT_VOTED,
1930 .enable_reg = 0x62008,
1931 .enable_mask = BIT(9),
1932 .hw.init = &(struct clk_init_data){
1933 .name = "gcc_qupv3_wrap0_core_2x_clk",
1934 .ops = &clk_branch2_ops,
1939 static struct clk_branch gcc_qupv3_wrap0_core_clk = {
1940 .halt_reg = 0x33000,
1941 .halt_check = BRANCH_HALT_VOTED,
1943 .enable_reg = 0x62008,
1944 .enable_mask = BIT(8),
1945 .hw.init = &(struct clk_init_data){
1946 .name = "gcc_qupv3_wrap0_core_clk",
1947 .ops = &clk_branch2_ops,
1952 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
1953 .halt_reg = 0x2700c,
1954 .halt_check = BRANCH_HALT_VOTED,
1956 .enable_reg = 0x62008,
1957 .enable_mask = BIT(10),
1958 .hw.init = &(struct clk_init_data){
1959 .name = "gcc_qupv3_wrap0_s0_clk",
1960 .parent_hws = (const struct clk_hw*[]) {
1961 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
1964 .flags = CLK_SET_RATE_PARENT,
1965 .ops = &clk_branch2_ops,
1970 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
1971 .halt_reg = 0x27140,
1972 .halt_check = BRANCH_HALT_VOTED,
1974 .enable_reg = 0x62008,
1975 .enable_mask = BIT(11),
1976 .hw.init = &(struct clk_init_data){
1977 .name = "gcc_qupv3_wrap0_s1_clk",
1978 .parent_hws = (const struct clk_hw*[]) {
1979 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
1982 .flags = CLK_SET_RATE_PARENT,
1983 .ops = &clk_branch2_ops,
1988 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
1989 .halt_reg = 0x27274,
1990 .halt_check = BRANCH_HALT_VOTED,
1992 .enable_reg = 0x62008,
1993 .enable_mask = BIT(12),
1994 .hw.init = &(struct clk_init_data){
1995 .name = "gcc_qupv3_wrap0_s2_clk",
1996 .parent_hws = (const struct clk_hw*[]) {
1997 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
2000 .flags = CLK_SET_RATE_PARENT,
2001 .ops = &clk_branch2_ops,
2006 static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
2007 .halt_reg = 0x273a8,
2008 .halt_check = BRANCH_HALT_VOTED,
2010 .enable_reg = 0x62008,
2011 .enable_mask = BIT(13),
2012 .hw.init = &(struct clk_init_data){
2013 .name = "gcc_qupv3_wrap0_s3_clk",
2014 .parent_hws = (const struct clk_hw*[]) {
2015 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
2018 .flags = CLK_SET_RATE_PARENT,
2019 .ops = &clk_branch2_ops,
2024 static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
2025 .halt_reg = 0x274dc,
2026 .halt_check = BRANCH_HALT_VOTED,
2028 .enable_reg = 0x62008,
2029 .enable_mask = BIT(14),
2030 .hw.init = &(struct clk_init_data){
2031 .name = "gcc_qupv3_wrap0_s4_clk",
2032 .parent_hws = (const struct clk_hw*[]) {
2033 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
2036 .flags = CLK_SET_RATE_PARENT,
2037 .ops = &clk_branch2_ops,
2042 static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
2043 .halt_reg = 0x27610,
2044 .halt_check = BRANCH_HALT_VOTED,
2046 .enable_reg = 0x62008,
2047 .enable_mask = BIT(15),
2048 .hw.init = &(struct clk_init_data){
2049 .name = "gcc_qupv3_wrap0_s5_clk",
2050 .parent_hws = (const struct clk_hw*[]) {
2051 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
2054 .flags = CLK_SET_RATE_PARENT,
2055 .ops = &clk_branch2_ops,
2060 static struct clk_branch gcc_qupv3_wrap0_s6_clk = {
2061 .halt_reg = 0x27744,
2062 .halt_check = BRANCH_HALT_VOTED,
2064 .enable_reg = 0x62008,
2065 .enable_mask = BIT(16),
2066 .hw.init = &(struct clk_init_data){
2067 .name = "gcc_qupv3_wrap0_s6_clk",
2068 .parent_hws = (const struct clk_hw*[]) {
2069 &gcc_qupv3_wrap0_s6_clk_src.clkr.hw,
2072 .flags = CLK_SET_RATE_PARENT,
2073 .ops = &clk_branch2_ops,
2078 static struct clk_branch gcc_qupv3_wrap0_s7_clk = {
2079 .halt_reg = 0x27878,
2080 .halt_check = BRANCH_HALT_VOTED,
2082 .enable_reg = 0x62008,
2083 .enable_mask = BIT(17),
2084 .hw.init = &(struct clk_init_data){
2085 .name = "gcc_qupv3_wrap0_s7_clk",
2086 .parent_hws = (const struct clk_hw*[]) {
2087 &gcc_qupv3_wrap0_s7_clk_src.clkr.hw,
2090 .flags = CLK_SET_RATE_PARENT,
2091 .ops = &clk_branch2_ops,
2096 static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
2097 .halt_reg = 0x3314c,
2098 .halt_check = BRANCH_HALT_VOTED,
2100 .enable_reg = 0x62008,
2101 .enable_mask = BIT(18),
2102 .hw.init = &(struct clk_init_data){
2103 .name = "gcc_qupv3_wrap1_core_2x_clk",
2104 .ops = &clk_branch2_ops,
2109 static struct clk_branch gcc_qupv3_wrap1_core_clk = {
2110 .halt_reg = 0x33140,
2111 .halt_check = BRANCH_HALT_VOTED,
2113 .enable_reg = 0x62008,
2114 .enable_mask = BIT(19),
2115 .hw.init = &(struct clk_init_data){
2116 .name = "gcc_qupv3_wrap1_core_clk",
2117 .ops = &clk_branch2_ops,
2122 static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
2123 .halt_reg = 0x2800c,
2124 .halt_check = BRANCH_HALT_VOTED,
2126 .enable_reg = 0x62008,
2127 .enable_mask = BIT(22),
2128 .hw.init = &(struct clk_init_data){
2129 .name = "gcc_qupv3_wrap1_s0_clk",
2130 .parent_hws = (const struct clk_hw*[]) {
2131 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
2134 .flags = CLK_SET_RATE_PARENT,
2135 .ops = &clk_branch2_ops,
2140 static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
2141 .halt_reg = 0x28140,
2142 .halt_check = BRANCH_HALT_VOTED,
2144 .enable_reg = 0x62008,
2145 .enable_mask = BIT(23),
2146 .hw.init = &(struct clk_init_data){
2147 .name = "gcc_qupv3_wrap1_s1_clk",
2148 .parent_hws = (const struct clk_hw*[]) {
2149 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
2152 .flags = CLK_SET_RATE_PARENT,
2153 .ops = &clk_branch2_ops,
2158 static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
2159 .halt_reg = 0x28274,
2160 .halt_check = BRANCH_HALT_VOTED,
2162 .enable_reg = 0x62008,
2163 .enable_mask = BIT(24),
2164 .hw.init = &(struct clk_init_data){
2165 .name = "gcc_qupv3_wrap1_s2_clk",
2166 .parent_hws = (const struct clk_hw*[]) {
2167 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
2170 .flags = CLK_SET_RATE_PARENT,
2171 .ops = &clk_branch2_ops,
2176 static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
2177 .halt_reg = 0x283a8,
2178 .halt_check = BRANCH_HALT_VOTED,
2180 .enable_reg = 0x62008,
2181 .enable_mask = BIT(25),
2182 .hw.init = &(struct clk_init_data){
2183 .name = "gcc_qupv3_wrap1_s3_clk",
2184 .parent_hws = (const struct clk_hw*[]) {
2185 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
2188 .flags = CLK_SET_RATE_PARENT,
2189 .ops = &clk_branch2_ops,
2194 static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
2195 .halt_reg = 0x284dc,
2196 .halt_check = BRANCH_HALT_VOTED,
2198 .enable_reg = 0x62008,
2199 .enable_mask = BIT(26),
2200 .hw.init = &(struct clk_init_data){
2201 .name = "gcc_qupv3_wrap1_s4_clk",
2202 .parent_hws = (const struct clk_hw*[]) {
2203 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
2206 .flags = CLK_SET_RATE_PARENT,
2207 .ops = &clk_branch2_ops,
2212 static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
2213 .halt_reg = 0x28610,
2214 .halt_check = BRANCH_HALT_VOTED,
2216 .enable_reg = 0x62008,
2217 .enable_mask = BIT(27),
2218 .hw.init = &(struct clk_init_data){
2219 .name = "gcc_qupv3_wrap1_s5_clk",
2220 .parent_hws = (const struct clk_hw*[]) {
2221 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
2224 .flags = CLK_SET_RATE_PARENT,
2225 .ops = &clk_branch2_ops,
2230 static struct clk_branch gcc_qupv3_wrap1_s6_clk = {
2231 .halt_reg = 0x28744,
2232 .halt_check = BRANCH_HALT_VOTED,
2234 .enable_reg = 0x62008,
2235 .enable_mask = BIT(28),
2236 .hw.init = &(struct clk_init_data){
2237 .name = "gcc_qupv3_wrap1_s6_clk",
2238 .parent_hws = (const struct clk_hw*[]) {
2239 &gcc_qupv3_wrap1_s6_clk_src.clkr.hw,
2242 .flags = CLK_SET_RATE_PARENT,
2243 .ops = &clk_branch2_ops,
2248 static struct clk_branch gcc_qupv3_wrap2_core_2x_clk = {
2249 .halt_reg = 0x3328c,
2250 .halt_check = BRANCH_HALT_VOTED,
2252 .enable_reg = 0x62010,
2253 .enable_mask = BIT(3),
2254 .hw.init = &(struct clk_init_data){
2255 .name = "gcc_qupv3_wrap2_core_2x_clk",
2256 .ops = &clk_branch2_ops,
2261 static struct clk_branch gcc_qupv3_wrap2_core_clk = {
2262 .halt_reg = 0x33280,
2263 .halt_check = BRANCH_HALT_VOTED,
2265 .enable_reg = 0x62010,
2266 .enable_mask = BIT(0),
2267 .hw.init = &(struct clk_init_data){
2268 .name = "gcc_qupv3_wrap2_core_clk",
2269 .ops = &clk_branch2_ops,
2274 static struct clk_branch gcc_qupv3_wrap2_s0_clk = {
2275 .halt_reg = 0x2e00c,
2276 .halt_check = BRANCH_HALT_VOTED,
2278 .enable_reg = 0x62010,
2279 .enable_mask = BIT(4),
2280 .hw.init = &(struct clk_init_data){
2281 .name = "gcc_qupv3_wrap2_s0_clk",
2282 .parent_hws = (const struct clk_hw*[]) {
2283 &gcc_qupv3_wrap2_s0_clk_src.clkr.hw,
2286 .flags = CLK_SET_RATE_PARENT,
2287 .ops = &clk_branch2_ops,
2292 static struct clk_branch gcc_qupv3_wrap2_s1_clk = {
2293 .halt_reg = 0x2e140,
2294 .halt_check = BRANCH_HALT_VOTED,
2296 .enable_reg = 0x62010,
2297 .enable_mask = BIT(5),
2298 .hw.init = &(struct clk_init_data){
2299 .name = "gcc_qupv3_wrap2_s1_clk",
2300 .parent_hws = (const struct clk_hw*[]) {
2301 &gcc_qupv3_wrap2_s1_clk_src.clkr.hw,
2304 .flags = CLK_SET_RATE_PARENT,
2305 .ops = &clk_branch2_ops,
2310 static struct clk_branch gcc_qupv3_wrap2_s2_clk = {
2311 .halt_reg = 0x2e274,
2312 .halt_check = BRANCH_HALT_VOTED,
2314 .enable_reg = 0x62010,
2315 .enable_mask = BIT(6),
2316 .hw.init = &(struct clk_init_data){
2317 .name = "gcc_qupv3_wrap2_s2_clk",
2318 .parent_hws = (const struct clk_hw*[]) {
2319 &gcc_qupv3_wrap2_s2_clk_src.clkr.hw,
2322 .flags = CLK_SET_RATE_PARENT,
2323 .ops = &clk_branch2_ops,
2328 static struct clk_branch gcc_qupv3_wrap2_s3_clk = {
2329 .halt_reg = 0x2e3a8,
2330 .halt_check = BRANCH_HALT_VOTED,
2332 .enable_reg = 0x62010,
2333 .enable_mask = BIT(7),
2334 .hw.init = &(struct clk_init_data){
2335 .name = "gcc_qupv3_wrap2_s3_clk",
2336 .parent_hws = (const struct clk_hw*[]) {
2337 &gcc_qupv3_wrap2_s3_clk_src.clkr.hw,
2340 .flags = CLK_SET_RATE_PARENT,
2341 .ops = &clk_branch2_ops,
2346 static struct clk_branch gcc_qupv3_wrap2_s4_clk = {
2347 .halt_reg = 0x2e4dc,
2348 .halt_check = BRANCH_HALT_VOTED,
2350 .enable_reg = 0x62010,
2351 .enable_mask = BIT(8),
2352 .hw.init = &(struct clk_init_data){
2353 .name = "gcc_qupv3_wrap2_s4_clk",
2354 .parent_hws = (const struct clk_hw*[]) {
2355 &gcc_qupv3_wrap2_s4_clk_src.clkr.hw,
2358 .flags = CLK_SET_RATE_PARENT,
2359 .ops = &clk_branch2_ops,
2364 static struct clk_branch gcc_qupv3_wrap2_s5_clk = {
2365 .halt_reg = 0x2e610,
2366 .halt_check = BRANCH_HALT_VOTED,
2368 .enable_reg = 0x62010,
2369 .enable_mask = BIT(9),
2370 .hw.init = &(struct clk_init_data){
2371 .name = "gcc_qupv3_wrap2_s5_clk",
2372 .parent_hws = (const struct clk_hw*[]) {
2373 &gcc_qupv3_wrap2_s5_clk_src.clkr.hw,
2376 .flags = CLK_SET_RATE_PARENT,
2377 .ops = &clk_branch2_ops,
2382 static struct clk_branch gcc_qupv3_wrap2_s6_clk = {
2383 .halt_reg = 0x2e744,
2384 .halt_check = BRANCH_HALT_VOTED,
2386 .enable_reg = 0x62010,
2387 .enable_mask = BIT(10),
2388 .hw.init = &(struct clk_init_data){
2389 .name = "gcc_qupv3_wrap2_s6_clk",
2390 .parent_hws = (const struct clk_hw*[]) {
2391 &gcc_qupv3_wrap2_s6_clk_src.clkr.hw,
2394 .flags = CLK_SET_RATE_PARENT,
2395 .ops = &clk_branch2_ops,
2400 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
2401 .halt_reg = 0x27004,
2402 .halt_check = BRANCH_HALT_VOTED,
2403 .hwcg_reg = 0x27004,
2406 .enable_reg = 0x62008,
2407 .enable_mask = BIT(6),
2408 .hw.init = &(struct clk_init_data){
2409 .name = "gcc_qupv3_wrap_0_m_ahb_clk",
2410 .ops = &clk_branch2_ops,
2415 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
2416 .halt_reg = 0x27008,
2417 .halt_check = BRANCH_HALT_VOTED,
2418 .hwcg_reg = 0x27008,
2421 .enable_reg = 0x62008,
2422 .enable_mask = BIT(7),
2423 .hw.init = &(struct clk_init_data){
2424 .name = "gcc_qupv3_wrap_0_s_ahb_clk",
2425 .ops = &clk_branch2_ops,
2430 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
2431 .halt_reg = 0x28004,
2432 .halt_check = BRANCH_HALT_VOTED,
2433 .hwcg_reg = 0x28004,
2436 .enable_reg = 0x62008,
2437 .enable_mask = BIT(20),
2438 .hw.init = &(struct clk_init_data){
2439 .name = "gcc_qupv3_wrap_1_m_ahb_clk",
2440 .ops = &clk_branch2_ops,
2445 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
2446 .halt_reg = 0x28008,
2447 .halt_check = BRANCH_HALT_VOTED,
2448 .hwcg_reg = 0x28008,
2451 .enable_reg = 0x62008,
2452 .enable_mask = BIT(21),
2453 .hw.init = &(struct clk_init_data){
2454 .name = "gcc_qupv3_wrap_1_s_ahb_clk",
2455 .ops = &clk_branch2_ops,
2460 static struct clk_branch gcc_qupv3_wrap_2_m_ahb_clk = {
2461 .halt_reg = 0x2e004,
2462 .halt_check = BRANCH_HALT_VOTED,
2463 .hwcg_reg = 0x2e004,
2466 .enable_reg = 0x62010,
2467 .enable_mask = BIT(2),
2468 .hw.init = &(struct clk_init_data){
2469 .name = "gcc_qupv3_wrap_2_m_ahb_clk",
2470 .ops = &clk_branch2_ops,
2475 static struct clk_branch gcc_qupv3_wrap_2_s_ahb_clk = {
2476 .halt_reg = 0x2e008,
2477 .halt_check = BRANCH_HALT_VOTED,
2478 .hwcg_reg = 0x2e008,
2481 .enable_reg = 0x62010,
2482 .enable_mask = BIT(1),
2483 .hw.init = &(struct clk_init_data){
2484 .name = "gcc_qupv3_wrap_2_s_ahb_clk",
2485 .ops = &clk_branch2_ops,
2490 static struct clk_branch gcc_sdcc2_ahb_clk = {
2491 .halt_reg = 0x2400c,
2492 .halt_check = BRANCH_HALT,
2494 .enable_reg = 0x2400c,
2495 .enable_mask = BIT(0),
2496 .hw.init = &(struct clk_init_data){
2497 .name = "gcc_sdcc2_ahb_clk",
2498 .ops = &clk_branch2_ops,
2503 static struct clk_branch gcc_sdcc2_apps_clk = {
2504 .halt_reg = 0x24004,
2505 .halt_check = BRANCH_HALT,
2507 .enable_reg = 0x24004,
2508 .enable_mask = BIT(0),
2509 .hw.init = &(struct clk_init_data){
2510 .name = "gcc_sdcc2_apps_clk",
2511 .parent_hws = (const struct clk_hw*[]) {
2512 &gcc_sdcc2_apps_clk_src.clkr.hw,
2515 .flags = CLK_SET_RATE_PARENT,
2516 .ops = &clk_branch2_ops,
2521 static struct clk_branch gcc_sdcc2_at_clk = {
2522 .halt_reg = 0x24010,
2523 .halt_check = BRANCH_HALT_VOTED,
2524 .hwcg_reg = 0x24010,
2527 .enable_reg = 0x24010,
2528 .enable_mask = BIT(0),
2529 .hw.init = &(struct clk_init_data){
2530 .name = "gcc_sdcc2_at_clk",
2531 .ops = &clk_branch2_ops,
2536 static struct clk_branch gcc_sdcc4_ahb_clk = {
2537 .halt_reg = 0x2600c,
2538 .halt_check = BRANCH_HALT,
2540 .enable_reg = 0x2600c,
2541 .enable_mask = BIT(0),
2542 .hw.init = &(struct clk_init_data){
2543 .name = "gcc_sdcc4_ahb_clk",
2544 .ops = &clk_branch2_ops,
2549 static struct clk_branch gcc_sdcc4_apps_clk = {
2550 .halt_reg = 0x26004,
2551 .halt_check = BRANCH_HALT,
2553 .enable_reg = 0x26004,
2554 .enable_mask = BIT(0),
2555 .hw.init = &(struct clk_init_data){
2556 .name = "gcc_sdcc4_apps_clk",
2557 .parent_hws = (const struct clk_hw*[]) {
2558 &gcc_sdcc4_apps_clk_src.clkr.hw,
2561 .flags = CLK_SET_RATE_PARENT,
2562 .ops = &clk_branch2_ops,
2567 static struct clk_branch gcc_sdcc4_at_clk = {
2568 .halt_reg = 0x26010,
2569 .halt_check = BRANCH_HALT_VOTED,
2570 .hwcg_reg = 0x26010,
2573 .enable_reg = 0x26010,
2574 .enable_mask = BIT(0),
2575 .hw.init = &(struct clk_init_data){
2576 .name = "gcc_sdcc4_at_clk",
2577 .ops = &clk_branch2_ops,
2582 static struct clk_branch gcc_ufs_0_clkref_en = {
2583 .halt_reg = 0x9c000,
2584 .halt_check = BRANCH_HALT,
2586 .enable_reg = 0x9c000,
2587 .enable_mask = BIT(0),
2588 .hw.init = &(struct clk_init_data){
2589 .name = "gcc_ufs_0_clkref_en",
2590 .ops = &clk_branch2_ops,
2595 static struct clk_branch gcc_ufs_phy_ahb_clk = {
2596 .halt_reg = 0x87020,
2597 .halt_check = BRANCH_HALT_VOTED,
2598 .hwcg_reg = 0x87020,
2601 .enable_reg = 0x87020,
2602 .enable_mask = BIT(0),
2603 .hw.init = &(struct clk_init_data){
2604 .name = "gcc_ufs_phy_ahb_clk",
2605 .ops = &clk_branch2_ops,
2610 static struct clk_branch gcc_ufs_phy_axi_clk = {
2611 .halt_reg = 0x87018,
2612 .halt_check = BRANCH_HALT_VOTED,
2613 .hwcg_reg = 0x87018,
2616 .enable_reg = 0x87018,
2617 .enable_mask = BIT(0),
2618 .hw.init = &(struct clk_init_data){
2619 .name = "gcc_ufs_phy_axi_clk",
2620 .parent_hws = (const struct clk_hw*[]) {
2621 &gcc_ufs_phy_axi_clk_src.clkr.hw,
2624 .flags = CLK_SET_RATE_PARENT,
2625 .ops = &clk_branch2_ops,
2630 static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = {
2631 .halt_reg = 0x87018,
2632 .halt_check = BRANCH_HALT_VOTED,
2633 .hwcg_reg = 0x87018,
2636 .enable_reg = 0x87018,
2637 .enable_mask = BIT(1),
2638 .hw.init = &(struct clk_init_data){
2639 .name = "gcc_ufs_phy_axi_hw_ctl_clk",
2640 .parent_hws = (const struct clk_hw*[]) {
2641 &gcc_ufs_phy_axi_clk_src.clkr.hw,
2644 .flags = CLK_SET_RATE_PARENT,
2645 .ops = &clk_branch2_ops,
2650 static struct clk_branch gcc_ufs_phy_ice_core_clk = {
2651 .halt_reg = 0x8706c,
2652 .halt_check = BRANCH_HALT_VOTED,
2653 .hwcg_reg = 0x8706c,
2656 .enable_reg = 0x8706c,
2657 .enable_mask = BIT(0),
2658 .hw.init = &(struct clk_init_data){
2659 .name = "gcc_ufs_phy_ice_core_clk",
2660 .parent_hws = (const struct clk_hw*[]) {
2661 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
2664 .flags = CLK_SET_RATE_PARENT,
2665 .ops = &clk_branch2_ops,
2670 static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = {
2671 .halt_reg = 0x8706c,
2672 .halt_check = BRANCH_HALT_VOTED,
2673 .hwcg_reg = 0x8706c,
2676 .enable_reg = 0x8706c,
2677 .enable_mask = BIT(1),
2678 .hw.init = &(struct clk_init_data){
2679 .name = "gcc_ufs_phy_ice_core_hw_ctl_clk",
2680 .parent_hws = (const struct clk_hw*[]) {
2681 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
2684 .flags = CLK_SET_RATE_PARENT,
2685 .ops = &clk_branch2_ops,
2690 static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
2691 .halt_reg = 0x870a4,
2692 .halt_check = BRANCH_HALT_VOTED,
2693 .hwcg_reg = 0x870a4,
2696 .enable_reg = 0x870a4,
2697 .enable_mask = BIT(0),
2698 .hw.init = &(struct clk_init_data){
2699 .name = "gcc_ufs_phy_phy_aux_clk",
2700 .parent_hws = (const struct clk_hw*[]) {
2701 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2704 .flags = CLK_SET_RATE_PARENT,
2705 .ops = &clk_branch2_ops,
2710 static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = {
2711 .halt_reg = 0x870a4,
2712 .halt_check = BRANCH_HALT_VOTED,
2713 .hwcg_reg = 0x870a4,
2716 .enable_reg = 0x870a4,
2717 .enable_mask = BIT(1),
2718 .hw.init = &(struct clk_init_data){
2719 .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk",
2720 .parent_hws = (const struct clk_hw*[]) {
2721 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2724 .flags = CLK_SET_RATE_PARENT,
2725 .ops = &clk_branch2_ops,
2730 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
2731 .halt_reg = 0x87028,
2732 .halt_check = BRANCH_HALT_DELAY,
2734 .enable_reg = 0x87028,
2735 .enable_mask = BIT(0),
2736 .hw.init = &(struct clk_init_data){
2737 .name = "gcc_ufs_phy_rx_symbol_0_clk",
2738 .parent_hws = (const struct clk_hw*[]) {
2739 &gcc_ufs_phy_rx_symbol_0_clk_src.clkr.hw,
2742 .flags = CLK_SET_RATE_PARENT,
2743 .ops = &clk_branch2_ops,
2748 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
2749 .halt_reg = 0x870c0,
2750 .halt_check = BRANCH_HALT_DELAY,
2752 .enable_reg = 0x870c0,
2753 .enable_mask = BIT(0),
2754 .hw.init = &(struct clk_init_data){
2755 .name = "gcc_ufs_phy_rx_symbol_1_clk",
2756 .parent_hws = (const struct clk_hw*[]) {
2757 &gcc_ufs_phy_rx_symbol_1_clk_src.clkr.hw,
2760 .flags = CLK_SET_RATE_PARENT,
2761 .ops = &clk_branch2_ops,
2766 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
2767 .halt_reg = 0x87024,
2768 .halt_check = BRANCH_HALT_DELAY,
2770 .enable_reg = 0x87024,
2771 .enable_mask = BIT(0),
2772 .hw.init = &(struct clk_init_data){
2773 .name = "gcc_ufs_phy_tx_symbol_0_clk",
2774 .parent_hws = (const struct clk_hw*[]) {
2775 &gcc_ufs_phy_tx_symbol_0_clk_src.clkr.hw,
2778 .flags = CLK_SET_RATE_PARENT,
2779 .ops = &clk_branch2_ops,
2784 static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
2785 .halt_reg = 0x87064,
2786 .halt_check = BRANCH_HALT_VOTED,
2787 .hwcg_reg = 0x87064,
2790 .enable_reg = 0x87064,
2791 .enable_mask = BIT(0),
2792 .hw.init = &(struct clk_init_data){
2793 .name = "gcc_ufs_phy_unipro_core_clk",
2794 .parent_hws = (const struct clk_hw*[]) {
2795 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2798 .flags = CLK_SET_RATE_PARENT,
2799 .ops = &clk_branch2_ops,
2804 static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = {
2805 .halt_reg = 0x87064,
2806 .halt_check = BRANCH_HALT_VOTED,
2807 .hwcg_reg = 0x87064,
2810 .enable_reg = 0x87064,
2811 .enable_mask = BIT(1),
2812 .hw.init = &(struct clk_init_data){
2813 .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk",
2814 .parent_hws = (const struct clk_hw*[]) {
2815 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2818 .flags = CLK_SET_RATE_PARENT,
2819 .ops = &clk_branch2_ops,
2824 static struct clk_branch gcc_usb30_prim_master_clk = {
2825 .halt_reg = 0x49018,
2826 .halt_check = BRANCH_HALT,
2828 .enable_reg = 0x49018,
2829 .enable_mask = BIT(0),
2830 .hw.init = &(struct clk_init_data){
2831 .name = "gcc_usb30_prim_master_clk",
2832 .parent_hws = (const struct clk_hw*[]) {
2833 &gcc_usb30_prim_master_clk_src.clkr.hw,
2836 .flags = CLK_SET_RATE_PARENT,
2837 .ops = &clk_branch2_ops,
2842 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
2843 .halt_reg = 0x49024,
2844 .halt_check = BRANCH_HALT,
2846 .enable_reg = 0x49024,
2847 .enable_mask = BIT(0),
2848 .hw.init = &(struct clk_init_data){
2849 .name = "gcc_usb30_prim_mock_utmi_clk",
2850 .parent_hws = (const struct clk_hw*[]) {
2851 &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,
2854 .flags = CLK_SET_RATE_PARENT,
2855 .ops = &clk_branch2_ops,
2860 static struct clk_branch gcc_usb30_prim_sleep_clk = {
2861 .halt_reg = 0x49020,
2862 .halt_check = BRANCH_HALT,
2864 .enable_reg = 0x49020,
2865 .enable_mask = BIT(0),
2866 .hw.init = &(struct clk_init_data){
2867 .name = "gcc_usb30_prim_sleep_clk",
2868 .ops = &clk_branch2_ops,
2873 static struct clk_branch gcc_usb3_0_clkref_en = {
2874 .halt_reg = 0x9c010,
2875 .halt_check = BRANCH_HALT,
2877 .enable_reg = 0x9c010,
2878 .enable_mask = BIT(0),
2879 .hw.init = &(struct clk_init_data){
2880 .name = "gcc_usb3_0_clkref_en",
2881 .ops = &clk_branch2_ops,
2886 static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
2887 .halt_reg = 0x4905c,
2888 .halt_check = BRANCH_HALT,
2890 .enable_reg = 0x4905c,
2891 .enable_mask = BIT(0),
2892 .hw.init = &(struct clk_init_data){
2893 .name = "gcc_usb3_prim_phy_aux_clk",
2894 .parent_hws = (const struct clk_hw*[]) {
2895 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2898 .flags = CLK_SET_RATE_PARENT,
2899 .ops = &clk_branch2_ops,
2904 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
2905 .halt_reg = 0x49060,
2906 .halt_check = BRANCH_HALT,
2908 .enable_reg = 0x49060,
2909 .enable_mask = BIT(0),
2910 .hw.init = &(struct clk_init_data){
2911 .name = "gcc_usb3_prim_phy_com_aux_clk",
2912 .parent_hws = (const struct clk_hw*[]) {
2913 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2916 .flags = CLK_SET_RATE_PARENT,
2917 .ops = &clk_branch2_ops,
2922 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
2923 .halt_reg = 0x49064,
2924 .halt_check = BRANCH_HALT_DELAY,
2925 .hwcg_reg = 0x49064,
2928 .enable_reg = 0x49064,
2929 .enable_mask = BIT(0),
2930 .hw.init = &(struct clk_init_data){
2931 .name = "gcc_usb3_prim_phy_pipe_clk",
2932 .parent_hws = (const struct clk_hw*[]) {
2933 &gcc_usb3_prim_phy_pipe_clk_src.clkr.hw,
2936 .flags = CLK_SET_RATE_PARENT,
2937 .ops = &clk_branch2_ops,
2942 static struct clk_branch gcc_video_axi0_clk = {
2943 .halt_reg = 0x42018,
2944 .halt_check = BRANCH_HALT_SKIP,
2945 .hwcg_reg = 0x42018,
2948 .enable_reg = 0x42018,
2949 .enable_mask = BIT(0),
2950 .hw.init = &(struct clk_init_data){
2951 .name = "gcc_video_axi0_clk",
2952 .ops = &clk_branch2_ops,
2957 static struct clk_branch gcc_video_axi1_clk = {
2958 .halt_reg = 0x42020,
2959 .halt_check = BRANCH_HALT_SKIP,
2960 .hwcg_reg = 0x42020,
2963 .enable_reg = 0x42020,
2964 .enable_mask = BIT(0),
2965 .hw.init = &(struct clk_init_data){
2966 .name = "gcc_video_axi1_clk",
2967 .ops = &clk_branch2_ops,
2972 static struct gdsc pcie_0_gdsc = {
2975 .name = "pcie_0_gdsc",
2977 .pwrsts = PWRSTS_OFF_ON,
2980 static struct gdsc pcie_1_gdsc = {
2983 .name = "pcie_1_gdsc",
2985 .pwrsts = PWRSTS_OFF_ON,
2988 static struct gdsc ufs_phy_gdsc = {
2991 .name = "ufs_phy_gdsc",
2993 .pwrsts = PWRSTS_OFF_ON,
2996 static struct gdsc usb30_prim_gdsc = {
2999 .name = "usb30_prim_gdsc",
3001 .pwrsts = PWRSTS_OFF_ON,
3004 static struct clk_regmap *gcc_sm8450_clocks[] = {
3005 [GCC_AGGRE_NOC_PCIE_0_AXI_CLK] = &gcc_aggre_noc_pcie_0_axi_clk.clkr,
3006 [GCC_AGGRE_NOC_PCIE_1_AXI_CLK] = &gcc_aggre_noc_pcie_1_axi_clk.clkr,
3007 [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
3008 [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr,
3009 [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
3010 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3011 [GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,
3012 [GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr,
3013 [GCC_CFG_NOC_PCIE_ANOC_AHB_CLK] = &gcc_cfg_noc_pcie_anoc_ahb_clk.clkr,
3014 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
3015 [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
3016 [GCC_DDRSS_PCIE_SF_TBU_CLK] = &gcc_ddrss_pcie_sf_tbu_clk.clkr,
3017 [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
3018 [GCC_DISP_SF_AXI_CLK] = &gcc_disp_sf_axi_clk.clkr,
3019 [GCC_EUSB3_0_CLKREF_EN] = &gcc_eusb3_0_clkref_en.clkr,
3020 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3021 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
3022 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3023 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
3024 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3025 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
3026 [GCC_GPLL0] = &gcc_gpll0.clkr,
3027 [GCC_GPLL0_OUT_EVEN] = &gcc_gpll0_out_even.clkr,
3028 [GCC_GPLL4] = &gcc_gpll4.clkr,
3029 [GCC_GPLL9] = &gcc_gpll9.clkr,
3030 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
3031 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
3032 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
3033 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
3034 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
3035 [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
3036 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
3037 [GCC_PCIE_0_CLKREF_EN] = &gcc_pcie_0_clkref_en.clkr,
3038 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
3039 [GCC_PCIE_0_PHY_RCHNG_CLK] = &gcc_pcie_0_phy_rchng_clk.clkr,
3040 [GCC_PCIE_0_PHY_RCHNG_CLK_SRC] = &gcc_pcie_0_phy_rchng_clk_src.clkr,
3041 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
3042 [GCC_PCIE_0_PIPE_CLK_SRC] = &gcc_pcie_0_pipe_clk_src.clkr,
3043 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
3044 [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
3045 [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
3046 [GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr,
3047 [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
3048 [GCC_PCIE_1_CLKREF_EN] = &gcc_pcie_1_clkref_en.clkr,
3049 [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
3050 [GCC_PCIE_1_PHY_AUX_CLK] = &gcc_pcie_1_phy_aux_clk.clkr,
3051 [GCC_PCIE_1_PHY_AUX_CLK_SRC] = &gcc_pcie_1_phy_aux_clk_src.clkr,
3052 [GCC_PCIE_1_PHY_RCHNG_CLK] = &gcc_pcie_1_phy_rchng_clk.clkr,
3053 [GCC_PCIE_1_PHY_RCHNG_CLK_SRC] = &gcc_pcie_1_phy_rchng_clk_src.clkr,
3054 [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
3055 [GCC_PCIE_1_PIPE_CLK_SRC] = &gcc_pcie_1_pipe_clk_src.clkr,
3056 [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
3057 [GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr,
3058 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3059 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
3060 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3061 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
3062 [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
3063 [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
3064 [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
3065 [GCC_QMIP_GPU_AHB_CLK] = &gcc_qmip_gpu_ahb_clk.clkr,
3066 [GCC_QMIP_PCIE_AHB_CLK] = &gcc_qmip_pcie_ahb_clk.clkr,
3067 [GCC_QMIP_VIDEO_CV_CPU_AHB_CLK] = &gcc_qmip_video_cv_cpu_ahb_clk.clkr,
3068 [GCC_QMIP_VIDEO_CVP_AHB_CLK] = &gcc_qmip_video_cvp_ahb_clk.clkr,
3069 [GCC_QMIP_VIDEO_V_CPU_AHB_CLK] = &gcc_qmip_video_v_cpu_ahb_clk.clkr,
3070 [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
3071 [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
3072 [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
3073 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
3074 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
3075 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
3076 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
3077 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
3078 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
3079 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
3080 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
3081 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
3082 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
3083 [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
3084 [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
3085 [GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr,
3086 [GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr,
3087 [GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr,
3088 [GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr,
3089 [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
3090 [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
3091 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
3092 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
3093 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
3094 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
3095 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
3096 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
3097 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
3098 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
3099 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
3100 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
3101 [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
3102 [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
3103 [GCC_QUPV3_WRAP1_S6_CLK] = &gcc_qupv3_wrap1_s6_clk.clkr,
3104 [GCC_QUPV3_WRAP1_S6_CLK_SRC] = &gcc_qupv3_wrap1_s6_clk_src.clkr,
3105 [GCC_QUPV3_WRAP2_CORE_2X_CLK] = &gcc_qupv3_wrap2_core_2x_clk.clkr,
3106 [GCC_QUPV3_WRAP2_CORE_CLK] = &gcc_qupv3_wrap2_core_clk.clkr,
3107 [GCC_QUPV3_WRAP2_S0_CLK] = &gcc_qupv3_wrap2_s0_clk.clkr,
3108 [GCC_QUPV3_WRAP2_S0_CLK_SRC] = &gcc_qupv3_wrap2_s0_clk_src.clkr,
3109 [GCC_QUPV3_WRAP2_S1_CLK] = &gcc_qupv3_wrap2_s1_clk.clkr,
3110 [GCC_QUPV3_WRAP2_S1_CLK_SRC] = &gcc_qupv3_wrap2_s1_clk_src.clkr,
3111 [GCC_QUPV3_WRAP2_S2_CLK] = &gcc_qupv3_wrap2_s2_clk.clkr,
3112 [GCC_QUPV3_WRAP2_S2_CLK_SRC] = &gcc_qupv3_wrap2_s2_clk_src.clkr,
3113 [GCC_QUPV3_WRAP2_S3_CLK] = &gcc_qupv3_wrap2_s3_clk.clkr,
3114 [GCC_QUPV3_WRAP2_S3_CLK_SRC] = &gcc_qupv3_wrap2_s3_clk_src.clkr,
3115 [GCC_QUPV3_WRAP2_S4_CLK] = &gcc_qupv3_wrap2_s4_clk.clkr,
3116 [GCC_QUPV3_WRAP2_S4_CLK_SRC] = &gcc_qupv3_wrap2_s4_clk_src.clkr,
3117 [GCC_QUPV3_WRAP2_S5_CLK] = &gcc_qupv3_wrap2_s5_clk.clkr,
3118 [GCC_QUPV3_WRAP2_S5_CLK_SRC] = &gcc_qupv3_wrap2_s5_clk_src.clkr,
3119 [GCC_QUPV3_WRAP2_S6_CLK] = &gcc_qupv3_wrap2_s6_clk.clkr,
3120 [GCC_QUPV3_WRAP2_S6_CLK_SRC] = &gcc_qupv3_wrap2_s6_clk_src.clkr,
3121 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
3122 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
3123 [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
3124 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
3125 [GCC_QUPV3_WRAP_2_M_AHB_CLK] = &gcc_qupv3_wrap_2_m_ahb_clk.clkr,
3126 [GCC_QUPV3_WRAP_2_S_AHB_CLK] = &gcc_qupv3_wrap_2_s_ahb_clk.clkr,
3127 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3128 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3129 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
3130 [GCC_SDCC2_AT_CLK] = &gcc_sdcc2_at_clk.clkr,
3131 [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
3132 [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
3133 [GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr,
3134 [GCC_SDCC4_AT_CLK] = &gcc_sdcc4_at_clk.clkr,
3135 [GCC_UFS_0_CLKREF_EN] = &gcc_ufs_0_clkref_en.clkr,
3136 [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
3137 [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
3138 [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
3139 [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr,
3140 [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
3141 [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
3142 [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] = &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr,
3143 [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
3144 [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
3145 [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr,
3146 [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
3147 [GCC_UFS_PHY_RX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_rx_symbol_0_clk_src.clkr,
3148 [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
3149 [GCC_UFS_PHY_RX_SYMBOL_1_CLK_SRC] = &gcc_ufs_phy_rx_symbol_1_clk_src.clkr,
3150 [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
3151 [GCC_UFS_PHY_TX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_tx_symbol_0_clk_src.clkr,
3152 [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
3153 [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_phy_unipro_core_clk_src.clkr,
3154 [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] = &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr,
3155 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
3156 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
3157 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
3158 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr,
3159 [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,
3160 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
3161 [GCC_USB3_0_CLKREF_EN] = &gcc_usb3_0_clkref_en.clkr,
3162 [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
3163 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
3164 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
3165 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
3166 [GCC_USB3_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb3_prim_phy_pipe_clk_src.clkr,
3167 [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
3168 [GCC_VIDEO_AXI1_CLK] = &gcc_video_axi1_clk.clkr,
3171 static const struct qcom_reset_map gcc_sm8450_resets[] = {
3172 [GCC_CAMERA_BCR] = { 0x36000 },
3173 [GCC_DISPLAY_BCR] = { 0x37000 },
3174 [GCC_GPU_BCR] = { 0x81000 },
3175 [GCC_PCIE_0_BCR] = { 0x7b000 },
3176 [GCC_PCIE_0_LINK_DOWN_BCR] = { 0x7c014 },
3177 [GCC_PCIE_0_NOCSR_COM_PHY_BCR] = { 0x7c020 },
3178 [GCC_PCIE_0_PHY_BCR] = { 0x7c01c },
3179 [GCC_PCIE_0_PHY_NOCSR_COM_PHY_BCR] = { 0x7c028 },
3180 [GCC_PCIE_1_BCR] = { 0x9d000 },
3181 [GCC_PCIE_1_LINK_DOWN_BCR] = { 0x9e014 },
3182 [GCC_PCIE_1_NOCSR_COM_PHY_BCR] = { 0x9e020 },
3183 [GCC_PCIE_1_PHY_BCR] = { 0x9e01c },
3184 [GCC_PCIE_1_PHY_NOCSR_COM_PHY_BCR] = { 0x9e000 },
3185 [GCC_PCIE_PHY_BCR] = { 0x7f000 },
3186 [GCC_PCIE_PHY_CFG_AHB_BCR] = { 0x7f00c },
3187 [GCC_PCIE_PHY_COM_BCR] = { 0x7f010 },
3188 [GCC_PDM_BCR] = { 0x43000 },
3189 [GCC_QUPV3_WRAPPER_0_BCR] = { 0x27000 },
3190 [GCC_QUPV3_WRAPPER_1_BCR] = { 0x28000 },
3191 [GCC_QUPV3_WRAPPER_2_BCR] = { 0x2e000 },
3192 [GCC_QUSB2PHY_PRIM_BCR] = { 0x22000 },
3193 [GCC_QUSB2PHY_SEC_BCR] = { 0x22004 },
3194 [GCC_SDCC2_BCR] = { 0x24000 },
3195 [GCC_SDCC4_BCR] = { 0x26000 },
3196 [GCC_UFS_PHY_BCR] = { 0x87000 },
3197 [GCC_USB30_PRIM_BCR] = { 0x49000 },
3198 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x60008 },
3199 [GCC_USB3_DP_PHY_SEC_BCR] = { 0x60014 },
3200 [GCC_USB3_PHY_PRIM_BCR] = { 0x60000 },
3201 [GCC_USB3_PHY_SEC_BCR] = { 0x6000c },
3202 [GCC_USB3PHY_PHY_PRIM_BCR] = { 0x60004 },
3203 [GCC_USB3PHY_PHY_SEC_BCR] = { 0x60010 },
3204 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x7a000 },
3205 [GCC_VIDEO_AXI0_CLK_ARES] = { 0x42018, 2 },
3206 [GCC_VIDEO_AXI1_CLK_ARES] = { 0x42020, 2 },
3207 [GCC_VIDEO_BCR] = { 0x42000 },
3210 static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
3211 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
3212 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
3213 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
3214 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
3215 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
3216 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
3217 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s6_clk_src),
3218 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s7_clk_src),
3219 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
3220 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
3221 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),
3222 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
3223 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
3224 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
3225 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src),
3226 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s0_clk_src),
3227 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s1_clk_src),
3228 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s2_clk_src),
3229 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s3_clk_src),
3230 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s4_clk_src),
3231 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s5_clk_src),
3232 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s6_clk_src),
3235 static struct gdsc *gcc_sm8450_gdscs[] = {
3236 [PCIE_0_GDSC] = &pcie_0_gdsc,
3237 [PCIE_1_GDSC] = &pcie_1_gdsc,
3238 [UFS_PHY_GDSC] = &ufs_phy_gdsc,
3239 [USB30_PRIM_GDSC] = &usb30_prim_gdsc,
3242 static const struct regmap_config gcc_sm8450_regmap_config = {
3246 .max_register = 0x1f1030,
3250 static const struct qcom_cc_desc gcc_sm8450_desc = {
3251 .config = &gcc_sm8450_regmap_config,
3252 .clks = gcc_sm8450_clocks,
3253 .num_clks = ARRAY_SIZE(gcc_sm8450_clocks),
3254 .resets = gcc_sm8450_resets,
3255 .num_resets = ARRAY_SIZE(gcc_sm8450_resets),
3256 .gdscs = gcc_sm8450_gdscs,
3257 .num_gdscs = ARRAY_SIZE(gcc_sm8450_gdscs),
3260 static const struct of_device_id gcc_sm8450_match_table[] = {
3261 { .compatible = "qcom,gcc-sm8450" },
3264 MODULE_DEVICE_TABLE(of, gcc_sm8450_match_table);
3266 static int gcc_sm8450_probe(struct platform_device *pdev)
3268 struct regmap *regmap;
3271 regmap = qcom_cc_map(pdev, &gcc_sm8450_desc);
3273 return PTR_ERR(regmap);
3275 ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
3276 ARRAY_SIZE(gcc_dfs_clocks));
3280 /* FORCE_MEM_CORE_ON for ufs phy ice core clocks */
3281 regmap_update_bits(regmap, gcc_ufs_phy_ice_core_clk.halt_reg, BIT(14), BIT(14));
3284 * Keep the critical clock always-On
3285 * gcc_camera_ahb_clk, gcc_camera_xo_clk, gcc_disp_ahb_clk,
3286 * gcc_disp_xo_clk, gcc_gpu_cfg_ahb_clk, gcc_video_ahb_clk,
3289 regmap_update_bits(regmap, 0x36004, BIT(0), BIT(0));
3290 regmap_update_bits(regmap, 0x36020, BIT(0), BIT(0));
3291 regmap_update_bits(regmap, 0x37004, BIT(0), BIT(0));
3292 regmap_update_bits(regmap, 0x3701c, BIT(0), BIT(0));
3293 regmap_update_bits(regmap, 0x81004, BIT(0), BIT(0));
3294 regmap_update_bits(regmap, 0x42004, BIT(0), BIT(0));
3295 regmap_update_bits(regmap, 0x42028, BIT(0), BIT(0));
3297 return qcom_cc_really_probe(pdev, &gcc_sm8450_desc, regmap);
3300 static struct platform_driver gcc_sm8450_driver = {
3301 .probe = gcc_sm8450_probe,
3303 .name = "gcc-sm8450",
3304 .of_match_table = gcc_sm8450_match_table,
3308 static int __init gcc_sm8450_init(void)
3310 return platform_driver_register(&gcc_sm8450_driver);
3312 subsys_initcall(gcc_sm8450_init);
3314 static void __exit gcc_sm8450_exit(void)
3316 platform_driver_unregister(&gcc_sm8450_driver);
3318 module_exit(gcc_sm8450_exit);
3320 MODULE_DESCRIPTION("QTI GCC SM8450 Driver");
3321 MODULE_LICENSE("GPL v2");