1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (c) 2021, The Linux Foundation. All rights reserved.
4 * Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
5 * Copyright (c) 2022, Linaro Limited
8 #include <linux/clk-provider.h>
9 #include <linux/module.h>
10 #include <linux/of_device.h>
11 #include <linux/regmap.h>
13 #include <dt-bindings/clock/qcom,sm8550-gcc.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"
31 DT_UFS_PHY_RX_SYMBOL_0,
32 DT_UFS_PHY_RX_SYMBOL_1,
33 DT_UFS_PHY_TX_SYMBOL_0,
34 DT_USB3_PHY_WRAPPER_GCC_USB30_PIPE,
48 P_UFS_PHY_RX_SYMBOL_0_CLK,
49 P_UFS_PHY_RX_SYMBOL_1_CLK,
50 P_UFS_PHY_TX_SYMBOL_0_CLK,
51 P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
54 static struct clk_alpha_pll gcc_gpll0 = {
56 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
58 .enable_reg = 0x52018,
59 .enable_mask = BIT(0),
60 .hw.init = &(struct clk_init_data){
62 .parent_data = &(const struct clk_parent_data){
66 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
71 static const struct clk_div_table post_div_table_gcc_gpll0_out_even[] = {
76 static struct clk_alpha_pll_postdiv gcc_gpll0_out_even = {
79 .post_div_table = post_div_table_gcc_gpll0_out_even,
80 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
82 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
83 .clkr.hw.init = &(struct clk_init_data){
84 .name = "gcc_gpll0_out_even",
85 .parent_hws = (const struct clk_hw*[]) {
89 .ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
93 static struct clk_alpha_pll gcc_gpll4 = {
95 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
97 .enable_reg = 0x52018,
98 .enable_mask = BIT(4),
99 .hw.init = &(struct clk_init_data){
101 .parent_data = &(const struct clk_parent_data){
105 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
110 static struct clk_alpha_pll gcc_gpll7 = {
112 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
114 .enable_reg = 0x52018,
115 .enable_mask = BIT(7),
116 .hw.init = &(struct clk_init_data){
118 .parent_data = &(const struct clk_parent_data){
122 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
127 static struct clk_alpha_pll gcc_gpll9 = {
129 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
131 .enable_reg = 0x52018,
132 .enable_mask = BIT(9),
133 .hw.init = &(struct clk_init_data){
135 .parent_data = &(const struct clk_parent_data){
139 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
144 static const struct parent_map gcc_parent_map_0[] = {
146 { P_GCC_GPLL0_OUT_MAIN, 1 },
147 { P_GCC_GPLL0_OUT_EVEN, 6 },
150 static const struct clk_parent_data gcc_parent_data_0[] = {
151 { .index = DT_BI_TCXO },
152 { .hw = &gcc_gpll0.clkr.hw },
153 { .hw = &gcc_gpll0_out_even.clkr.hw },
156 static const struct parent_map gcc_parent_map_1[] = {
158 { P_GCC_GPLL0_OUT_MAIN, 1 },
160 { P_GCC_GPLL0_OUT_EVEN, 6 },
163 static const struct clk_parent_data gcc_parent_data_1[] = {
164 { .index = DT_BI_TCXO },
165 { .hw = &gcc_gpll0.clkr.hw },
166 { .index = DT_SLEEP_CLK },
167 { .hw = &gcc_gpll0_out_even.clkr.hw },
170 static const struct parent_map gcc_parent_map_2[] = {
175 static const struct clk_parent_data gcc_parent_data_2[] = {
176 { .index = DT_BI_TCXO },
177 { .index = DT_SLEEP_CLK },
180 static const struct parent_map gcc_parent_map_3[] = {
182 { P_GCC_GPLL0_OUT_MAIN, 1 },
183 { P_GCC_GPLL4_OUT_MAIN, 5 },
184 { P_GCC_GPLL0_OUT_EVEN, 6 },
187 static const struct clk_parent_data gcc_parent_data_3[] = {
188 { .index = DT_BI_TCXO },
189 { .hw = &gcc_gpll0.clkr.hw },
190 { .hw = &gcc_gpll4.clkr.hw },
191 { .hw = &gcc_gpll0_out_even.clkr.hw },
194 static const struct parent_map gcc_parent_map_4[] = {
198 static const struct clk_parent_data gcc_parent_data_4[] = {
199 { .index = DT_BI_TCXO },
202 static const struct parent_map gcc_parent_map_6[] = {
203 { P_PCIE_1_PHY_AUX_CLK, 0 },
207 static const struct clk_parent_data gcc_parent_data_6[] = {
208 { .index = DT_PCIE_1_PHY_AUX },
209 { .index = DT_BI_TCXO },
212 static const struct parent_map gcc_parent_map_8[] = {
214 { P_GCC_GPLL0_OUT_MAIN, 1 },
215 { P_GCC_GPLL7_OUT_MAIN, 2 },
216 { P_GCC_GPLL0_OUT_EVEN, 6 },
219 static const struct clk_parent_data gcc_parent_data_8[] = {
220 { .index = DT_BI_TCXO },
221 { .hw = &gcc_gpll0.clkr.hw },
222 { .hw = &gcc_gpll7.clkr.hw },
223 { .hw = &gcc_gpll0_out_even.clkr.hw },
226 static const struct parent_map gcc_parent_map_9[] = {
228 { P_GCC_GPLL0_OUT_MAIN, 1 },
229 { P_GCC_GPLL9_OUT_MAIN, 2 },
230 { P_GCC_GPLL4_OUT_MAIN, 5 },
231 { P_GCC_GPLL0_OUT_EVEN, 6 },
234 static const struct clk_parent_data gcc_parent_data_9[] = {
235 { .index = DT_BI_TCXO },
236 { .hw = &gcc_gpll0.clkr.hw },
237 { .hw = &gcc_gpll9.clkr.hw },
238 { .hw = &gcc_gpll4.clkr.hw },
239 { .hw = &gcc_gpll0_out_even.clkr.hw },
242 static const struct parent_map gcc_parent_map_10[] = {
243 { P_UFS_PHY_RX_SYMBOL_0_CLK, 0 },
247 static const struct clk_parent_data gcc_parent_data_10[] = {
248 { .index = DT_UFS_PHY_RX_SYMBOL_0 },
249 { .index = DT_BI_TCXO },
252 static const struct parent_map gcc_parent_map_11[] = {
253 { P_UFS_PHY_RX_SYMBOL_1_CLK, 0 },
257 static const struct clk_parent_data gcc_parent_data_11[] = {
258 { .index = DT_UFS_PHY_RX_SYMBOL_1 },
259 { .index = DT_BI_TCXO },
262 static const struct parent_map gcc_parent_map_12[] = {
263 { P_UFS_PHY_TX_SYMBOL_0_CLK, 0 },
267 static const struct clk_parent_data gcc_parent_data_12[] = {
268 { .index = DT_UFS_PHY_TX_SYMBOL_0 },
269 { .index = DT_BI_TCXO },
272 static const struct parent_map gcc_parent_map_13[] = {
273 { P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 0 },
277 static const struct clk_parent_data gcc_parent_data_13[] = {
278 { .index = DT_USB3_PHY_WRAPPER_GCC_USB30_PIPE },
279 { .index = DT_BI_TCXO },
282 static struct clk_regmap_phy_mux gcc_pcie_0_pipe_clk_src = {
285 .hw.init = &(struct clk_init_data){
286 .name = "gcc_pcie_0_pipe_clk_src",
287 .parent_data = &(const struct clk_parent_data){
288 .index = DT_PCIE_0_PIPE,
291 .ops = &clk_regmap_phy_mux_ops,
296 static struct clk_regmap_mux gcc_pcie_1_phy_aux_clk_src = {
300 .parent_map = gcc_parent_map_6,
302 .hw.init = &(struct clk_init_data){
303 .name = "gcc_pcie_1_phy_aux_clk_src",
304 .parent_data = gcc_parent_data_6,
305 .num_parents = ARRAY_SIZE(gcc_parent_data_6),
306 .ops = &clk_regmap_mux_closest_ops,
311 static struct clk_regmap_phy_mux gcc_pcie_1_pipe_clk_src = {
314 .hw.init = &(struct clk_init_data){
315 .name = "gcc_pcie_1_pipe_clk_src",
316 .parent_data = &(const struct clk_parent_data){
317 .index = DT_PCIE_1_PIPE,
320 .ops = &clk_regmap_phy_mux_ops,
325 static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_0_clk_src = {
329 .parent_map = gcc_parent_map_10,
331 .hw.init = &(struct clk_init_data){
332 .name = "gcc_ufs_phy_rx_symbol_0_clk_src",
333 .parent_data = gcc_parent_data_10,
334 .num_parents = ARRAY_SIZE(gcc_parent_data_10),
335 .ops = &clk_regmap_mux_closest_ops,
340 static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_1_clk_src = {
344 .parent_map = gcc_parent_map_11,
346 .hw.init = &(struct clk_init_data){
347 .name = "gcc_ufs_phy_rx_symbol_1_clk_src",
348 .parent_data = gcc_parent_data_11,
349 .num_parents = ARRAY_SIZE(gcc_parent_data_11),
350 .ops = &clk_regmap_mux_closest_ops,
355 static struct clk_regmap_mux gcc_ufs_phy_tx_symbol_0_clk_src = {
359 .parent_map = gcc_parent_map_12,
361 .hw.init = &(struct clk_init_data){
362 .name = "gcc_ufs_phy_tx_symbol_0_clk_src",
363 .parent_data = gcc_parent_data_12,
364 .num_parents = ARRAY_SIZE(gcc_parent_data_12),
365 .ops = &clk_regmap_mux_closest_ops,
370 static struct clk_regmap_mux gcc_usb3_prim_phy_pipe_clk_src = {
374 .parent_map = gcc_parent_map_13,
376 .hw.init = &(struct clk_init_data){
377 .name = "gcc_usb3_prim_phy_pipe_clk_src",
378 .parent_data = gcc_parent_data_13,
379 .num_parents = ARRAY_SIZE(gcc_parent_data_13),
380 .ops = &clk_regmap_mux_closest_ops,
385 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
386 F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
387 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
388 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
392 static struct clk_rcg2 gcc_gp1_clk_src = {
396 .parent_map = gcc_parent_map_1,
397 .freq_tbl = ftbl_gcc_gp1_clk_src,
398 .clkr.hw.init = &(struct clk_init_data){
399 .name = "gcc_gp1_clk_src",
400 .parent_data = gcc_parent_data_1,
401 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
402 .flags = CLK_SET_RATE_PARENT,
403 .ops = &clk_rcg2_ops,
407 static struct clk_rcg2 gcc_gp2_clk_src = {
411 .parent_map = gcc_parent_map_1,
412 .freq_tbl = ftbl_gcc_gp1_clk_src,
413 .clkr.hw.init = &(struct clk_init_data){
414 .name = "gcc_gp2_clk_src",
415 .parent_data = gcc_parent_data_1,
416 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
417 .flags = CLK_SET_RATE_PARENT,
418 .ops = &clk_rcg2_ops,
422 static struct clk_rcg2 gcc_gp3_clk_src = {
426 .parent_map = gcc_parent_map_1,
427 .freq_tbl = ftbl_gcc_gp1_clk_src,
428 .clkr.hw.init = &(struct clk_init_data){
429 .name = "gcc_gp3_clk_src",
430 .parent_data = gcc_parent_data_1,
431 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
432 .flags = CLK_SET_RATE_PARENT,
433 .ops = &clk_rcg2_ops,
437 static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
438 F(19200000, P_BI_TCXO, 1, 0, 0),
442 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
446 .parent_map = gcc_parent_map_2,
447 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
448 .clkr.hw.init = &(struct clk_init_data){
449 .name = "gcc_pcie_0_aux_clk_src",
450 .parent_data = gcc_parent_data_2,
451 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
452 .flags = CLK_SET_RATE_PARENT,
453 .ops = &clk_rcg2_ops,
457 static const struct freq_tbl ftbl_gcc_pcie_0_phy_rchng_clk_src[] = {
458 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
462 static struct clk_rcg2 gcc_pcie_0_phy_rchng_clk_src = {
466 .parent_map = gcc_parent_map_0,
467 .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
468 .clkr.hw.init = &(struct clk_init_data){
469 .name = "gcc_pcie_0_phy_rchng_clk_src",
470 .parent_data = gcc_parent_data_0,
471 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
472 .flags = CLK_SET_RATE_PARENT,
473 .ops = &clk_rcg2_ops,
477 static struct clk_rcg2 gcc_pcie_1_aux_clk_src = {
481 .parent_map = gcc_parent_map_2,
482 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
483 .clkr.hw.init = &(struct clk_init_data){
484 .name = "gcc_pcie_1_aux_clk_src",
485 .parent_data = gcc_parent_data_2,
486 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
487 .flags = CLK_SET_RATE_PARENT,
488 .ops = &clk_rcg2_ops,
492 static struct clk_rcg2 gcc_pcie_1_phy_rchng_clk_src = {
496 .parent_map = gcc_parent_map_0,
497 .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
498 .clkr.hw.init = &(struct clk_init_data){
499 .name = "gcc_pcie_1_phy_rchng_clk_src",
500 .parent_data = gcc_parent_data_0,
501 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
502 .flags = CLK_SET_RATE_PARENT,
503 .ops = &clk_rcg2_ops,
507 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
508 F(60000000, P_GCC_GPLL0_OUT_MAIN, 10, 0, 0),
512 static struct clk_rcg2 gcc_pdm2_clk_src = {
516 .parent_map = gcc_parent_map_0,
517 .freq_tbl = ftbl_gcc_pdm2_clk_src,
518 .clkr.hw.init = &(struct clk_init_data){
519 .name = "gcc_pdm2_clk_src",
520 .parent_data = gcc_parent_data_0,
521 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
522 .flags = CLK_SET_RATE_PARENT,
523 .ops = &clk_rcg2_ops,
527 static struct clk_rcg2 gcc_qupv3_i2c_s0_clk_src = {
531 .parent_map = gcc_parent_map_0,
532 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
533 .clkr.hw.init = &(struct clk_init_data){
534 .name = "gcc_qupv3_i2c_s0_clk_src",
535 .parent_data = gcc_parent_data_0,
536 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
537 .flags = CLK_SET_RATE_PARENT,
538 .ops = &clk_rcg2_ops,
542 static struct clk_rcg2 gcc_qupv3_i2c_s1_clk_src = {
546 .parent_map = gcc_parent_map_0,
547 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
548 .clkr.hw.init = &(struct clk_init_data){
549 .name = "gcc_qupv3_i2c_s1_clk_src",
550 .parent_data = gcc_parent_data_0,
551 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
552 .flags = CLK_SET_RATE_PARENT,
553 .ops = &clk_rcg2_ops,
557 static struct clk_rcg2 gcc_qupv3_i2c_s2_clk_src = {
561 .parent_map = gcc_parent_map_0,
562 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
563 .clkr.hw.init = &(struct clk_init_data){
564 .name = "gcc_qupv3_i2c_s2_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,
572 static struct clk_rcg2 gcc_qupv3_i2c_s3_clk_src = {
576 .parent_map = gcc_parent_map_0,
577 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
578 .clkr.hw.init = &(struct clk_init_data){
579 .name = "gcc_qupv3_i2c_s3_clk_src",
580 .parent_data = gcc_parent_data_0,
581 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
582 .flags = CLK_SET_RATE_PARENT,
583 .ops = &clk_rcg2_ops,
587 static struct clk_rcg2 gcc_qupv3_i2c_s4_clk_src = {
591 .parent_map = gcc_parent_map_0,
592 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
593 .clkr.hw.init = &(struct clk_init_data){
594 .name = "gcc_qupv3_i2c_s4_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,
602 static struct clk_rcg2 gcc_qupv3_i2c_s5_clk_src = {
606 .parent_map = gcc_parent_map_0,
607 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
608 .clkr.hw.init = &(struct clk_init_data){
609 .name = "gcc_qupv3_i2c_s5_clk_src",
610 .parent_data = gcc_parent_data_0,
611 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
612 .flags = CLK_SET_RATE_PARENT,
613 .ops = &clk_rcg2_ops,
617 static struct clk_rcg2 gcc_qupv3_i2c_s6_clk_src = {
621 .parent_map = gcc_parent_map_0,
622 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
623 .clkr.hw.init = &(struct clk_init_data){
624 .name = "gcc_qupv3_i2c_s6_clk_src",
625 .parent_data = gcc_parent_data_0,
626 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
627 .flags = CLK_SET_RATE_PARENT,
628 .ops = &clk_rcg2_ops,
632 static struct clk_rcg2 gcc_qupv3_i2c_s7_clk_src = {
636 .parent_map = gcc_parent_map_0,
637 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
638 .clkr.hw.init = &(struct clk_init_data){
639 .name = "gcc_qupv3_i2c_s7_clk_src",
640 .parent_data = gcc_parent_data_0,
641 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
642 .flags = CLK_SET_RATE_PARENT,
643 .ops = &clk_rcg2_ops,
647 static struct clk_rcg2 gcc_qupv3_i2c_s8_clk_src = {
651 .parent_map = gcc_parent_map_0,
652 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
653 .clkr.hw.init = &(struct clk_init_data){
654 .name = "gcc_qupv3_i2c_s8_clk_src",
655 .parent_data = gcc_parent_data_0,
656 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
657 .flags = CLK_SET_RATE_PARENT,
658 .ops = &clk_rcg2_ops,
662 static struct clk_rcg2 gcc_qupv3_i2c_s9_clk_src = {
666 .parent_map = gcc_parent_map_0,
667 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
668 .clkr.hw.init = &(struct clk_init_data){
669 .name = "gcc_qupv3_i2c_s9_clk_src",
670 .parent_data = gcc_parent_data_0,
671 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
672 .flags = CLK_SET_RATE_PARENT,
673 .ops = &clk_rcg2_ops,
677 static const struct freq_tbl ftbl_gcc_qupv3_wrap1_s0_clk_src[] = {
678 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
679 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
680 F(19200000, P_BI_TCXO, 1, 0, 0),
681 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
682 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
683 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
684 F(51200000, P_GCC_GPLL0_OUT_EVEN, 1, 64, 375),
685 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
686 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
687 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
688 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
689 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
690 F(102400000, P_GCC_GPLL0_OUT_EVEN, 1, 128, 375),
691 F(112000000, P_GCC_GPLL0_OUT_EVEN, 1, 28, 75),
692 F(117964800, P_GCC_GPLL0_OUT_EVEN, 1, 6144, 15625),
693 F(120000000, P_GCC_GPLL0_OUT_MAIN, 5, 0, 0),
697 static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
698 .name = "gcc_qupv3_wrap1_s0_clk_src",
699 .parent_data = gcc_parent_data_0,
700 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
701 .flags = CLK_SET_RATE_PARENT,
702 .ops = &clk_rcg2_ops,
705 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
709 .parent_map = gcc_parent_map_0,
710 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
711 .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
714 static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
715 .name = "gcc_qupv3_wrap1_s1_clk_src",
716 .parent_data = gcc_parent_data_0,
717 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
718 .flags = CLK_SET_RATE_PARENT,
719 .ops = &clk_rcg2_ops,
722 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
726 .parent_map = gcc_parent_map_0,
727 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
728 .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
731 static const struct freq_tbl ftbl_gcc_qupv3_wrap1_s2_clk_src[] = {
732 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
733 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
734 F(19200000, P_BI_TCXO, 1, 0, 0),
735 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
736 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
737 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
738 F(51200000, P_GCC_GPLL0_OUT_EVEN, 1, 64, 375),
739 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
740 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
741 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
742 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
743 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
747 static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {
748 .name = "gcc_qupv3_wrap1_s2_clk_src",
749 .parent_data = gcc_parent_data_0,
750 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
751 .flags = CLK_SET_RATE_PARENT,
752 .ops = &clk_rcg2_ops,
755 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
759 .parent_map = gcc_parent_map_0,
760 .freq_tbl = ftbl_gcc_qupv3_wrap1_s2_clk_src,
761 .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,
764 static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
765 .name = "gcc_qupv3_wrap1_s3_clk_src",
766 .parent_data = gcc_parent_data_0,
767 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
768 .flags = CLK_SET_RATE_PARENT,
769 .ops = &clk_rcg2_ops,
772 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
776 .parent_map = gcc_parent_map_0,
777 .freq_tbl = ftbl_gcc_qupv3_wrap1_s2_clk_src,
778 .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
781 static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
782 .name = "gcc_qupv3_wrap1_s4_clk_src",
783 .parent_data = gcc_parent_data_0,
784 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
785 .flags = CLK_SET_RATE_PARENT,
786 .ops = &clk_rcg2_ops,
789 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
793 .parent_map = gcc_parent_map_0,
794 .freq_tbl = ftbl_gcc_qupv3_wrap1_s2_clk_src,
795 .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
798 static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
799 .name = "gcc_qupv3_wrap1_s5_clk_src",
800 .parent_data = gcc_parent_data_0,
801 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
802 .flags = CLK_SET_RATE_PARENT,
803 .ops = &clk_rcg2_ops,
806 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
810 .parent_map = gcc_parent_map_0,
811 .freq_tbl = ftbl_gcc_qupv3_wrap1_s2_clk_src,
812 .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
815 static struct clk_init_data gcc_qupv3_wrap1_s6_clk_src_init = {
816 .name = "gcc_qupv3_wrap1_s6_clk_src",
817 .parent_data = gcc_parent_data_0,
818 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
819 .flags = CLK_SET_RATE_PARENT,
820 .ops = &clk_rcg2_ops,
823 static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = {
827 .parent_map = gcc_parent_map_0,
828 .freq_tbl = ftbl_gcc_qupv3_wrap1_s2_clk_src,
829 .clkr.hw.init = &gcc_qupv3_wrap1_s6_clk_src_init,
832 static struct clk_init_data gcc_qupv3_wrap1_s7_clk_src_init = {
833 .name = "gcc_qupv3_wrap1_s7_clk_src",
834 .parent_data = gcc_parent_data_0,
835 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
836 .flags = CLK_SET_RATE_PARENT,
837 .ops = &clk_rcg2_ops,
840 static struct clk_rcg2 gcc_qupv3_wrap1_s7_clk_src = {
844 .parent_map = gcc_parent_map_0,
845 .freq_tbl = ftbl_gcc_qupv3_wrap1_s2_clk_src,
846 .clkr.hw.init = &gcc_qupv3_wrap1_s7_clk_src_init,
849 static struct clk_init_data gcc_qupv3_wrap2_s0_clk_src_init = {
850 .name = "gcc_qupv3_wrap2_s0_clk_src",
851 .parent_data = gcc_parent_data_0,
852 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
853 .flags = CLK_SET_RATE_PARENT,
854 .ops = &clk_rcg2_ops,
857 static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = {
861 .parent_map = gcc_parent_map_0,
862 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
863 .clkr.hw.init = &gcc_qupv3_wrap2_s0_clk_src_init,
866 static struct clk_init_data gcc_qupv3_wrap2_s1_clk_src_init = {
867 .name = "gcc_qupv3_wrap2_s1_clk_src",
868 .parent_data = gcc_parent_data_0,
869 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
870 .flags = CLK_SET_RATE_PARENT,
871 .ops = &clk_rcg2_ops,
874 static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = {
878 .parent_map = gcc_parent_map_0,
879 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
880 .clkr.hw.init = &gcc_qupv3_wrap2_s1_clk_src_init,
883 static struct clk_init_data gcc_qupv3_wrap2_s2_clk_src_init = {
884 .name = "gcc_qupv3_wrap2_s2_clk_src",
885 .parent_data = gcc_parent_data_0,
886 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
887 .flags = CLK_SET_RATE_PARENT,
888 .ops = &clk_rcg2_ops,
891 static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src = {
895 .parent_map = gcc_parent_map_0,
896 .freq_tbl = ftbl_gcc_qupv3_wrap1_s2_clk_src,
897 .clkr.hw.init = &gcc_qupv3_wrap2_s2_clk_src_init,
900 static struct clk_init_data gcc_qupv3_wrap2_s3_clk_src_init = {
901 .name = "gcc_qupv3_wrap2_s3_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_s3_clk_src = {
912 .parent_map = gcc_parent_map_0,
913 .freq_tbl = ftbl_gcc_qupv3_wrap1_s2_clk_src,
914 .clkr.hw.init = &gcc_qupv3_wrap2_s3_clk_src_init,
917 static struct clk_init_data gcc_qupv3_wrap2_s4_clk_src_init = {
918 .name = "gcc_qupv3_wrap2_s4_clk_src",
919 .parent_data = gcc_parent_data_0,
920 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
921 .flags = CLK_SET_RATE_PARENT,
922 .ops = &clk_rcg2_ops,
925 static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = {
929 .parent_map = gcc_parent_map_0,
930 .freq_tbl = ftbl_gcc_qupv3_wrap1_s2_clk_src,
931 .clkr.hw.init = &gcc_qupv3_wrap2_s4_clk_src_init,
934 static struct clk_init_data gcc_qupv3_wrap2_s5_clk_src_init = {
935 .name = "gcc_qupv3_wrap2_s5_clk_src",
936 .parent_data = gcc_parent_data_0,
937 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
938 .flags = CLK_SET_RATE_PARENT,
939 .ops = &clk_rcg2_ops,
942 static struct clk_rcg2 gcc_qupv3_wrap2_s5_clk_src = {
946 .parent_map = gcc_parent_map_0,
947 .freq_tbl = ftbl_gcc_qupv3_wrap1_s2_clk_src,
948 .clkr.hw.init = &gcc_qupv3_wrap2_s5_clk_src_init,
951 static const struct freq_tbl ftbl_gcc_qupv3_wrap2_s6_clk_src[] = {
952 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
953 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
954 F(19200000, P_BI_TCXO, 1, 0, 0),
955 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
956 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
957 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
958 F(51200000, P_GCC_GPLL0_OUT_EVEN, 1, 64, 375),
959 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
960 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
961 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
962 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
963 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
964 F(102400000, P_GCC_GPLL0_OUT_EVEN, 1, 128, 375),
965 F(112000000, P_GCC_GPLL0_OUT_EVEN, 1, 28, 75),
966 F(117964800, P_GCC_GPLL0_OUT_EVEN, 1, 6144, 15625),
967 F(120000000, P_GCC_GPLL0_OUT_MAIN, 5, 0, 0),
968 F(125000000, P_GCC_GPLL0_OUT_MAIN, 1, 5, 24),
972 static struct clk_init_data gcc_qupv3_wrap2_s6_clk_src_init = {
973 .name = "gcc_qupv3_wrap2_s6_clk_src",
974 .parent_data = gcc_parent_data_8,
975 .num_parents = ARRAY_SIZE(gcc_parent_data_8),
976 .flags = CLK_SET_RATE_PARENT,
977 .ops = &clk_rcg2_ops,
980 static struct clk_rcg2 gcc_qupv3_wrap2_s6_clk_src = {
984 .parent_map = gcc_parent_map_8,
985 .freq_tbl = ftbl_gcc_qupv3_wrap2_s6_clk_src,
986 .clkr.hw.init = &gcc_qupv3_wrap2_s6_clk_src_init,
989 static struct clk_init_data gcc_qupv3_wrap2_s7_clk_src_init = {
990 .name = "gcc_qupv3_wrap2_s7_clk_src",
991 .parent_data = gcc_parent_data_0,
992 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
993 .flags = CLK_SET_RATE_PARENT,
994 .ops = &clk_rcg2_ops,
997 static struct clk_rcg2 gcc_qupv3_wrap2_s7_clk_src = {
1001 .parent_map = gcc_parent_map_0,
1002 .freq_tbl = ftbl_gcc_qupv3_wrap1_s2_clk_src,
1003 .clkr.hw.init = &gcc_qupv3_wrap2_s7_clk_src_init,
1006 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
1007 F(400000, P_BI_TCXO, 12, 1, 4),
1008 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
1009 F(37500000, P_GCC_GPLL0_OUT_EVEN, 8, 0, 0),
1010 F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
1011 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
1012 F(202000000, P_GCC_GPLL9_OUT_MAIN, 4, 0, 0),
1016 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
1017 .cmd_rcgr = 0x14018,
1020 .parent_map = gcc_parent_map_9,
1021 .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
1022 .clkr.hw.init = &(struct clk_init_data){
1023 .name = "gcc_sdcc2_apps_clk_src",
1024 .parent_data = gcc_parent_data_9,
1025 .num_parents = ARRAY_SIZE(gcc_parent_data_9),
1026 .flags = CLK_SET_RATE_PARENT,
1027 .ops = &clk_rcg2_ops,
1031 static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = {
1032 F(400000, P_BI_TCXO, 12, 1, 4),
1033 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
1034 F(37500000, P_GCC_GPLL0_OUT_EVEN, 8, 0, 0),
1035 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
1039 static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {
1040 .cmd_rcgr = 0x16018,
1043 .parent_map = gcc_parent_map_0,
1044 .freq_tbl = ftbl_gcc_sdcc4_apps_clk_src,
1045 .clkr.hw.init = &(struct clk_init_data){
1046 .name = "gcc_sdcc4_apps_clk_src",
1047 .parent_data = gcc_parent_data_0,
1048 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1049 .flags = CLK_SET_RATE_PARENT,
1050 .ops = &clk_rcg2_ops,
1054 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
1055 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
1056 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
1057 F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0),
1058 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
1062 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
1063 .cmd_rcgr = 0x77030,
1066 .parent_map = gcc_parent_map_0,
1067 .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
1068 .clkr.hw.init = &(struct clk_init_data){
1069 .name = "gcc_ufs_phy_axi_clk_src",
1070 .parent_data = gcc_parent_data_0,
1071 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1072 .flags = CLK_SET_RATE_PARENT,
1073 .ops = &clk_rcg2_ops,
1077 static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
1078 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
1079 F(201500000, P_GCC_GPLL4_OUT_MAIN, 4, 0, 0),
1080 F(403000000, P_GCC_GPLL4_OUT_MAIN, 2, 0, 0),
1084 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
1085 .cmd_rcgr = 0x77080,
1088 .parent_map = gcc_parent_map_3,
1089 .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
1090 .clkr.hw.init = &(struct clk_init_data){
1091 .name = "gcc_ufs_phy_ice_core_clk_src",
1092 .parent_data = gcc_parent_data_3,
1093 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
1094 .flags = CLK_SET_RATE_PARENT,
1095 .ops = &clk_rcg2_ops,
1099 static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = {
1100 F(9600000, P_BI_TCXO, 2, 0, 0),
1101 F(19200000, P_BI_TCXO, 1, 0, 0),
1105 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
1106 .cmd_rcgr = 0x770b4,
1109 .parent_map = gcc_parent_map_4,
1110 .freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src,
1111 .clkr.hw.init = &(struct clk_init_data){
1112 .name = "gcc_ufs_phy_phy_aux_clk_src",
1113 .parent_data = gcc_parent_data_4,
1114 .num_parents = ARRAY_SIZE(gcc_parent_data_4),
1115 .flags = CLK_SET_RATE_PARENT,
1116 .ops = &clk_rcg2_ops,
1120 static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_core_clk_src[] = {
1121 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
1122 F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0),
1123 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
1127 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
1128 .cmd_rcgr = 0x77098,
1131 .parent_map = gcc_parent_map_0,
1132 .freq_tbl = ftbl_gcc_ufs_phy_unipro_core_clk_src,
1133 .clkr.hw.init = &(struct clk_init_data){
1134 .name = "gcc_ufs_phy_unipro_core_clk_src",
1135 .parent_data = gcc_parent_data_0,
1136 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1137 .flags = CLK_SET_RATE_PARENT,
1138 .ops = &clk_rcg2_ops,
1142 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
1143 F(66666667, P_GCC_GPLL0_OUT_EVEN, 4.5, 0, 0),
1144 F(133333333, P_GCC_GPLL0_OUT_MAIN, 4.5, 0, 0),
1145 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
1146 F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0),
1150 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1151 .cmd_rcgr = 0x3902c,
1154 .parent_map = gcc_parent_map_0,
1155 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1156 .clkr.hw.init = &(struct clk_init_data){
1157 .name = "gcc_usb30_prim_master_clk_src",
1158 .parent_data = gcc_parent_data_0,
1159 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1160 .flags = CLK_SET_RATE_PARENT,
1161 .ops = &clk_rcg2_ops,
1165 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1166 .cmd_rcgr = 0x39044,
1169 .parent_map = gcc_parent_map_0,
1170 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
1171 .clkr.hw.init = &(struct clk_init_data){
1172 .name = "gcc_usb30_prim_mock_utmi_clk_src",
1173 .parent_data = gcc_parent_data_0,
1174 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1175 .flags = CLK_SET_RATE_PARENT,
1176 .ops = &clk_rcg2_ops,
1180 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1181 .cmd_rcgr = 0x39070,
1184 .parent_map = gcc_parent_map_2,
1185 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
1186 .clkr.hw.init = &(struct clk_init_data){
1187 .name = "gcc_usb3_prim_phy_aux_clk_src",
1188 .parent_data = gcc_parent_data_2,
1189 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
1190 .flags = CLK_SET_RATE_PARENT,
1191 .ops = &clk_rcg2_ops,
1195 static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {
1199 .clkr.hw.init = &(struct clk_init_data) {
1200 .name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",
1201 .parent_hws = (const struct clk_hw*[]) {
1202 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
1205 .flags = CLK_SET_RATE_PARENT,
1206 .ops = &clk_regmap_div_ro_ops,
1210 static struct clk_branch gcc_aggre_noc_pcie_axi_clk = {
1211 .halt_reg = 0x1003c,
1212 .halt_check = BRANCH_HALT_SKIP,
1213 .hwcg_reg = 0x1003c,
1216 .enable_reg = 0x52000,
1217 .enable_mask = BIT(12),
1218 .hw.init = &(struct clk_init_data){
1219 .name = "gcc_aggre_noc_pcie_axi_clk",
1220 .ops = &clk_branch2_ops,
1225 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
1226 .halt_reg = 0x770e4,
1227 .halt_check = BRANCH_HALT_VOTED,
1228 .hwcg_reg = 0x770e4,
1231 .enable_reg = 0x770e4,
1232 .enable_mask = BIT(0),
1233 .hw.init = &(struct clk_init_data){
1234 .name = "gcc_aggre_ufs_phy_axi_clk",
1235 .parent_hws = (const struct clk_hw*[]) {
1236 &gcc_ufs_phy_axi_clk_src.clkr.hw,
1239 .flags = CLK_SET_RATE_PARENT,
1240 .ops = &clk_branch2_ops,
1245 static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = {
1246 .halt_reg = 0x770e4,
1247 .halt_check = BRANCH_HALT_VOTED,
1248 .hwcg_reg = 0x770e4,
1251 .enable_reg = 0x770e4,
1252 .enable_mask = BIT(1),
1253 .hw.init = &(struct clk_init_data){
1254 .name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk",
1255 .parent_hws = (const struct clk_hw*[]) {
1256 &gcc_ufs_phy_axi_clk_src.clkr.hw,
1259 .flags = CLK_SET_RATE_PARENT,
1260 .ops = &clk_branch2_ops,
1265 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
1266 .halt_reg = 0x3908c,
1267 .halt_check = BRANCH_HALT_VOTED,
1268 .hwcg_reg = 0x3908c,
1271 .enable_reg = 0x3908c,
1272 .enable_mask = BIT(0),
1273 .hw.init = &(struct clk_init_data){
1274 .name = "gcc_aggre_usb3_prim_axi_clk",
1275 .parent_hws = (const struct clk_hw*[]) {
1276 &gcc_usb30_prim_master_clk_src.clkr.hw,
1279 .flags = CLK_SET_RATE_PARENT,
1280 .ops = &clk_branch2_ops,
1285 static struct clk_branch gcc_boot_rom_ahb_clk = {
1286 .halt_reg = 0x38004,
1287 .halt_check = BRANCH_HALT_VOTED,
1288 .hwcg_reg = 0x38004,
1291 .enable_reg = 0x52000,
1292 .enable_mask = BIT(10),
1293 .hw.init = &(struct clk_init_data){
1294 .name = "gcc_boot_rom_ahb_clk",
1295 .ops = &clk_branch2_ops,
1300 static struct clk_branch gcc_camera_hf_axi_clk = {
1301 .halt_reg = 0x26010,
1302 .halt_check = BRANCH_HALT_SKIP,
1303 .hwcg_reg = 0x26010,
1306 .enable_reg = 0x26010,
1307 .enable_mask = BIT(0),
1308 .hw.init = &(struct clk_init_data){
1309 .name = "gcc_camera_hf_axi_clk",
1310 .ops = &clk_branch2_ops,
1315 static struct clk_branch gcc_camera_sf_axi_clk = {
1316 .halt_reg = 0x2601c,
1317 .halt_check = BRANCH_HALT_SKIP,
1318 .hwcg_reg = 0x2601c,
1321 .enable_reg = 0x2601c,
1322 .enable_mask = BIT(0),
1323 .hw.init = &(struct clk_init_data){
1324 .name = "gcc_camera_sf_axi_clk",
1325 .ops = &clk_branch2_ops,
1330 static struct clk_branch gcc_cfg_noc_pcie_anoc_ahb_clk = {
1331 .halt_reg = 0x10028,
1332 .halt_check = BRANCH_HALT_SKIP,
1333 .hwcg_reg = 0x10028,
1336 .enable_reg = 0x52000,
1337 .enable_mask = BIT(20),
1338 .hw.init = &(struct clk_init_data){
1339 .name = "gcc_cfg_noc_pcie_anoc_ahb_clk",
1340 .ops = &clk_branch2_ops,
1345 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1346 .halt_reg = 0x39088,
1347 .halt_check = BRANCH_HALT_VOTED,
1348 .hwcg_reg = 0x39088,
1351 .enable_reg = 0x39088,
1352 .enable_mask = BIT(0),
1353 .hw.init = &(struct clk_init_data){
1354 .name = "gcc_cfg_noc_usb3_prim_axi_clk",
1355 .parent_hws = (const struct clk_hw*[]) {
1356 &gcc_usb30_prim_master_clk_src.clkr.hw,
1359 .flags = CLK_SET_RATE_PARENT,
1360 .ops = &clk_branch2_ops,
1365 static struct clk_branch gcc_cnoc_pcie_sf_axi_clk = {
1366 .halt_reg = 0x10030,
1367 .halt_check = BRANCH_HALT_VOTED,
1368 .hwcg_reg = 0x10030,
1371 .enable_reg = 0x52008,
1372 .enable_mask = BIT(6),
1373 .hw.init = &(struct clk_init_data){
1374 .name = "gcc_cnoc_pcie_sf_axi_clk",
1375 .ops = &clk_branch2_ops,
1380 static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1381 .halt_reg = 0x71154,
1382 .halt_check = BRANCH_HALT_SKIP,
1383 .hwcg_reg = 0x71154,
1386 .enable_reg = 0x71154,
1387 .enable_mask = BIT(0),
1388 .hw.init = &(struct clk_init_data){
1389 .name = "gcc_ddrss_gpu_axi_clk",
1390 .ops = &clk_branch2_aon_ops,
1395 static struct clk_branch gcc_ddrss_pcie_sf_qtb_clk = {
1396 .halt_reg = 0x1004c,
1397 .halt_check = BRANCH_HALT_SKIP,
1398 .hwcg_reg = 0x1004c,
1401 .enable_reg = 0x52000,
1402 .enable_mask = BIT(19),
1403 .hw.init = &(struct clk_init_data){
1404 .name = "gcc_ddrss_pcie_sf_qtb_clk",
1405 .ops = &clk_branch2_ops,
1410 static struct clk_branch gcc_disp_hf_axi_clk = {
1411 .halt_reg = 0x2700c,
1412 .halt_check = BRANCH_HALT_SKIP,
1413 .hwcg_reg = 0x2700c,
1416 .enable_reg = 0x2700c,
1417 .enable_mask = BIT(0),
1418 .hw.init = &(struct clk_init_data){
1419 .name = "gcc_disp_hf_axi_clk",
1420 .ops = &clk_branch2_ops,
1425 static struct clk_branch gcc_gp1_clk = {
1426 .halt_reg = 0x64000,
1427 .halt_check = BRANCH_HALT,
1429 .enable_reg = 0x64000,
1430 .enable_mask = BIT(0),
1431 .hw.init = &(struct clk_init_data){
1432 .name = "gcc_gp1_clk",
1433 .parent_hws = (const struct clk_hw*[]) {
1434 &gcc_gp1_clk_src.clkr.hw,
1437 .flags = CLK_SET_RATE_PARENT,
1438 .ops = &clk_branch2_ops,
1443 static struct clk_branch gcc_gp2_clk = {
1444 .halt_reg = 0x65000,
1445 .halt_check = BRANCH_HALT,
1447 .enable_reg = 0x65000,
1448 .enable_mask = BIT(0),
1449 .hw.init = &(struct clk_init_data){
1450 .name = "gcc_gp2_clk",
1451 .parent_hws = (const struct clk_hw*[]) {
1452 &gcc_gp2_clk_src.clkr.hw,
1455 .flags = CLK_SET_RATE_PARENT,
1456 .ops = &clk_branch2_ops,
1461 static struct clk_branch gcc_gp3_clk = {
1462 .halt_reg = 0x66000,
1463 .halt_check = BRANCH_HALT,
1465 .enable_reg = 0x66000,
1466 .enable_mask = BIT(0),
1467 .hw.init = &(struct clk_init_data){
1468 .name = "gcc_gp3_clk",
1469 .parent_hws = (const struct clk_hw*[]) {
1470 &gcc_gp3_clk_src.clkr.hw,
1473 .flags = CLK_SET_RATE_PARENT,
1474 .ops = &clk_branch2_ops,
1479 static struct clk_branch gcc_gpu_gpll0_clk_src = {
1480 .halt_check = BRANCH_HALT_DELAY,
1482 .enable_reg = 0x52000,
1483 .enable_mask = BIT(15),
1484 .hw.init = &(struct clk_init_data){
1485 .name = "gcc_gpu_gpll0_clk_src",
1486 .parent_hws = (const struct clk_hw*[]) {
1490 .flags = CLK_SET_RATE_PARENT,
1491 .ops = &clk_branch2_ops,
1496 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
1497 .halt_check = BRANCH_HALT_DELAY,
1499 .enable_reg = 0x52000,
1500 .enable_mask = BIT(16),
1501 .hw.init = &(struct clk_init_data){
1502 .name = "gcc_gpu_gpll0_div_clk_src",
1503 .parent_hws = (const struct clk_hw*[]) {
1504 &gcc_gpll0_out_even.clkr.hw,
1507 .flags = CLK_SET_RATE_PARENT,
1508 .ops = &clk_branch2_ops,
1513 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
1514 .halt_reg = 0x71010,
1515 .halt_check = BRANCH_HALT_VOTED,
1516 .hwcg_reg = 0x71010,
1519 .enable_reg = 0x71010,
1520 .enable_mask = BIT(0),
1521 .hw.init = &(struct clk_init_data){
1522 .name = "gcc_gpu_memnoc_gfx_clk",
1523 .ops = &clk_branch2_ops,
1528 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
1529 .halt_reg = 0x71018,
1530 .halt_check = BRANCH_HALT_DELAY,
1532 .enable_reg = 0x71018,
1533 .enable_mask = BIT(0),
1534 .hw.init = &(struct clk_init_data){
1535 .name = "gcc_gpu_snoc_dvm_gfx_clk",
1536 .ops = &clk_branch2_ops,
1541 static struct clk_branch gcc_pcie_0_aux_clk = {
1542 .halt_reg = 0x6b03c,
1543 .halt_check = BRANCH_HALT_VOTED,
1545 .enable_reg = 0x52008,
1546 .enable_mask = BIT(3),
1547 .hw.init = &(struct clk_init_data){
1548 .name = "gcc_pcie_0_aux_clk",
1549 .parent_hws = (const struct clk_hw*[]) {
1550 &gcc_pcie_0_aux_clk_src.clkr.hw,
1553 .flags = CLK_SET_RATE_PARENT,
1554 .ops = &clk_branch2_ops,
1559 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
1560 .halt_reg = 0x6b038,
1561 .halt_check = BRANCH_HALT_VOTED,
1562 .hwcg_reg = 0x6b038,
1565 .enable_reg = 0x52008,
1566 .enable_mask = BIT(2),
1567 .hw.init = &(struct clk_init_data){
1568 .name = "gcc_pcie_0_cfg_ahb_clk",
1569 .ops = &clk_branch2_ops,
1574 static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
1575 .halt_reg = 0x6b02c,
1576 .halt_check = BRANCH_HALT_SKIP,
1577 .hwcg_reg = 0x6b02c,
1580 .enable_reg = 0x52008,
1581 .enable_mask = BIT(1),
1582 .hw.init = &(struct clk_init_data){
1583 .name = "gcc_pcie_0_mstr_axi_clk",
1584 .ops = &clk_branch2_ops,
1589 static struct clk_branch gcc_pcie_0_phy_rchng_clk = {
1590 .halt_reg = 0x6b054,
1591 .halt_check = BRANCH_HALT_VOTED,
1593 .enable_reg = 0x52000,
1594 .enable_mask = BIT(22),
1595 .hw.init = &(struct clk_init_data){
1596 .name = "gcc_pcie_0_phy_rchng_clk",
1597 .parent_hws = (const struct clk_hw*[]) {
1598 &gcc_pcie_0_phy_rchng_clk_src.clkr.hw,
1601 .flags = CLK_SET_RATE_PARENT,
1602 .ops = &clk_branch2_ops,
1607 static struct clk_branch gcc_pcie_0_pipe_clk = {
1608 .halt_reg = 0x6b048,
1609 .halt_check = BRANCH_HALT_SKIP,
1611 .enable_reg = 0x52008,
1612 .enable_mask = BIT(4),
1613 .hw.init = &(struct clk_init_data){
1614 .name = "gcc_pcie_0_pipe_clk",
1615 .parent_hws = (const struct clk_hw*[]) {
1616 &gcc_pcie_0_pipe_clk_src.clkr.hw,
1619 .flags = CLK_SET_RATE_PARENT,
1620 .ops = &clk_branch2_ops,
1625 static struct clk_branch gcc_pcie_0_slv_axi_clk = {
1626 .halt_reg = 0x6b020,
1627 .halt_check = BRANCH_HALT_VOTED,
1628 .hwcg_reg = 0x6b020,
1631 .enable_reg = 0x52008,
1632 .enable_mask = BIT(0),
1633 .hw.init = &(struct clk_init_data){
1634 .name = "gcc_pcie_0_slv_axi_clk",
1635 .ops = &clk_branch2_ops,
1640 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
1641 .halt_reg = 0x6b01c,
1642 .halt_check = BRANCH_HALT_VOTED,
1644 .enable_reg = 0x52008,
1645 .enable_mask = BIT(5),
1646 .hw.init = &(struct clk_init_data){
1647 .name = "gcc_pcie_0_slv_q2a_axi_clk",
1648 .ops = &clk_branch2_ops,
1653 static struct clk_branch gcc_pcie_1_aux_clk = {
1654 .halt_reg = 0x8d038,
1655 .halt_check = BRANCH_HALT_VOTED,
1657 .enable_reg = 0x52000,
1658 .enable_mask = BIT(29),
1659 .hw.init = &(struct clk_init_data){
1660 .name = "gcc_pcie_1_aux_clk",
1661 .parent_hws = (const struct clk_hw*[]) {
1662 &gcc_pcie_1_aux_clk_src.clkr.hw,
1665 .flags = CLK_SET_RATE_PARENT,
1666 .ops = &clk_branch2_ops,
1671 static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
1672 .halt_reg = 0x8d034,
1673 .halt_check = BRANCH_HALT_VOTED,
1674 .hwcg_reg = 0x8d034,
1677 .enable_reg = 0x52000,
1678 .enable_mask = BIT(28),
1679 .hw.init = &(struct clk_init_data){
1680 .name = "gcc_pcie_1_cfg_ahb_clk",
1681 .ops = &clk_branch2_ops,
1686 static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
1687 .halt_reg = 0x8d028,
1688 .halt_check = BRANCH_HALT_SKIP,
1689 .hwcg_reg = 0x8d028,
1692 .enable_reg = 0x52000,
1693 .enable_mask = BIT(27),
1694 .hw.init = &(struct clk_init_data){
1695 .name = "gcc_pcie_1_mstr_axi_clk",
1696 .ops = &clk_branch2_ops,
1701 static struct clk_branch gcc_pcie_1_phy_aux_clk = {
1702 .halt_reg = 0x8d044,
1703 .halt_check = BRANCH_HALT_VOTED,
1705 .enable_reg = 0x52000,
1706 .enable_mask = BIT(24),
1707 .hw.init = &(struct clk_init_data){
1708 .name = "gcc_pcie_1_phy_aux_clk",
1709 .parent_hws = (const struct clk_hw*[]) {
1710 &gcc_pcie_1_phy_aux_clk_src.clkr.hw,
1713 .flags = CLK_SET_RATE_PARENT,
1714 .ops = &clk_branch2_ops,
1719 static struct clk_branch gcc_pcie_1_phy_rchng_clk = {
1720 .halt_reg = 0x8d05c,
1721 .halt_check = BRANCH_HALT_VOTED,
1723 .enable_reg = 0x52000,
1724 .enable_mask = BIT(23),
1725 .hw.init = &(struct clk_init_data){
1726 .name = "gcc_pcie_1_phy_rchng_clk",
1727 .parent_hws = (const struct clk_hw*[]) {
1728 &gcc_pcie_1_phy_rchng_clk_src.clkr.hw,
1731 .flags = CLK_SET_RATE_PARENT,
1732 .ops = &clk_branch2_ops,
1737 static struct clk_branch gcc_pcie_1_pipe_clk = {
1738 .halt_reg = 0x8d050,
1739 .halt_check = BRANCH_HALT_SKIP,
1741 .enable_reg = 0x52000,
1742 .enable_mask = BIT(30),
1743 .hw.init = &(struct clk_init_data){
1744 .name = "gcc_pcie_1_pipe_clk",
1745 .parent_hws = (const struct clk_hw*[]) {
1746 &gcc_pcie_1_pipe_clk_src.clkr.hw,
1749 .flags = CLK_SET_RATE_PARENT,
1750 .ops = &clk_branch2_ops,
1755 static struct clk_branch gcc_pcie_1_slv_axi_clk = {
1756 .halt_reg = 0x8d01c,
1757 .halt_check = BRANCH_HALT_VOTED,
1758 .hwcg_reg = 0x8d01c,
1761 .enable_reg = 0x52000,
1762 .enable_mask = BIT(26),
1763 .hw.init = &(struct clk_init_data){
1764 .name = "gcc_pcie_1_slv_axi_clk",
1765 .ops = &clk_branch2_ops,
1770 static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = {
1771 .halt_reg = 0x8d018,
1772 .halt_check = BRANCH_HALT_VOTED,
1774 .enable_reg = 0x52000,
1775 .enable_mask = BIT(25),
1776 .hw.init = &(struct clk_init_data){
1777 .name = "gcc_pcie_1_slv_q2a_axi_clk",
1778 .ops = &clk_branch2_ops,
1783 static struct clk_branch gcc_pdm2_clk = {
1784 .halt_reg = 0x3300c,
1785 .halt_check = BRANCH_HALT,
1787 .enable_reg = 0x3300c,
1788 .enable_mask = BIT(0),
1789 .hw.init = &(struct clk_init_data){
1790 .name = "gcc_pdm2_clk",
1791 .parent_hws = (const struct clk_hw*[]) {
1792 &gcc_pdm2_clk_src.clkr.hw,
1795 .flags = CLK_SET_RATE_PARENT,
1796 .ops = &clk_branch2_ops,
1801 static struct clk_branch gcc_pdm_ahb_clk = {
1802 .halt_reg = 0x33004,
1803 .halt_check = BRANCH_HALT_VOTED,
1804 .hwcg_reg = 0x33004,
1807 .enable_reg = 0x33004,
1808 .enable_mask = BIT(0),
1809 .hw.init = &(struct clk_init_data){
1810 .name = "gcc_pdm_ahb_clk",
1811 .ops = &clk_branch2_ops,
1816 static struct clk_branch gcc_pdm_xo4_clk = {
1817 .halt_reg = 0x33008,
1818 .halt_check = BRANCH_HALT,
1820 .enable_reg = 0x33008,
1821 .enable_mask = BIT(0),
1822 .hw.init = &(struct clk_init_data){
1823 .name = "gcc_pdm_xo4_clk",
1824 .ops = &clk_branch2_ops,
1829 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
1830 .halt_reg = 0x26008,
1831 .halt_check = BRANCH_HALT_VOTED,
1832 .hwcg_reg = 0x26008,
1835 .enable_reg = 0x26008,
1836 .enable_mask = BIT(0),
1837 .hw.init = &(struct clk_init_data){
1838 .name = "gcc_qmip_camera_nrt_ahb_clk",
1839 .ops = &clk_branch2_ops,
1844 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
1845 .halt_reg = 0x2600c,
1846 .halt_check = BRANCH_HALT_VOTED,
1847 .hwcg_reg = 0x2600c,
1850 .enable_reg = 0x2600c,
1851 .enable_mask = BIT(0),
1852 .hw.init = &(struct clk_init_data){
1853 .name = "gcc_qmip_camera_rt_ahb_clk",
1854 .ops = &clk_branch2_ops,
1859 static struct clk_branch gcc_qmip_disp_ahb_clk = {
1860 .halt_reg = 0x27008,
1861 .halt_check = BRANCH_HALT_VOTED,
1862 .hwcg_reg = 0x27008,
1865 .enable_reg = 0x27008,
1866 .enable_mask = BIT(0),
1867 .hw.init = &(struct clk_init_data){
1868 .name = "gcc_qmip_disp_ahb_clk",
1869 .ops = &clk_branch2_ops,
1874 static struct clk_branch gcc_qmip_gpu_ahb_clk = {
1875 .halt_reg = 0x71008,
1876 .halt_check = BRANCH_HALT_VOTED,
1877 .hwcg_reg = 0x71008,
1880 .enable_reg = 0x71008,
1881 .enable_mask = BIT(0),
1882 .hw.init = &(struct clk_init_data){
1883 .name = "gcc_qmip_gpu_ahb_clk",
1884 .ops = &clk_branch2_ops,
1889 static struct clk_branch gcc_qmip_pcie_ahb_clk = {
1890 .halt_reg = 0x6b018,
1891 .halt_check = BRANCH_HALT_VOTED,
1892 .hwcg_reg = 0x6b018,
1895 .enable_reg = 0x52000,
1896 .enable_mask = BIT(11),
1897 .hw.init = &(struct clk_init_data){
1898 .name = "gcc_qmip_pcie_ahb_clk",
1899 .ops = &clk_branch2_ops,
1904 static struct clk_branch gcc_qmip_video_cv_cpu_ahb_clk = {
1905 .halt_reg = 0x32014,
1906 .halt_check = BRANCH_HALT_VOTED,
1907 .hwcg_reg = 0x32014,
1910 .enable_reg = 0x32014,
1911 .enable_mask = BIT(0),
1912 .hw.init = &(struct clk_init_data){
1913 .name = "gcc_qmip_video_cv_cpu_ahb_clk",
1914 .ops = &clk_branch2_ops,
1919 static struct clk_branch gcc_qmip_video_cvp_ahb_clk = {
1920 .halt_reg = 0x32008,
1921 .halt_check = BRANCH_HALT_VOTED,
1922 .hwcg_reg = 0x32008,
1925 .enable_reg = 0x32008,
1926 .enable_mask = BIT(0),
1927 .hw.init = &(struct clk_init_data){
1928 .name = "gcc_qmip_video_cvp_ahb_clk",
1929 .ops = &clk_branch2_ops,
1934 static struct clk_branch gcc_qmip_video_v_cpu_ahb_clk = {
1935 .halt_reg = 0x32010,
1936 .halt_check = BRANCH_HALT_VOTED,
1937 .hwcg_reg = 0x32010,
1940 .enable_reg = 0x32010,
1941 .enable_mask = BIT(0),
1942 .hw.init = &(struct clk_init_data){
1943 .name = "gcc_qmip_video_v_cpu_ahb_clk",
1944 .ops = &clk_branch2_ops,
1949 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
1950 .halt_reg = 0x3200c,
1951 .halt_check = BRANCH_HALT_VOTED,
1952 .hwcg_reg = 0x3200c,
1955 .enable_reg = 0x3200c,
1956 .enable_mask = BIT(0),
1957 .hw.init = &(struct clk_init_data){
1958 .name = "gcc_qmip_video_vcodec_ahb_clk",
1959 .ops = &clk_branch2_ops,
1964 static struct clk_branch gcc_qupv3_i2c_core_clk = {
1965 .halt_reg = 0x23144,
1966 .halt_check = BRANCH_HALT_VOTED,
1968 .enable_reg = 0x52008,
1969 .enable_mask = BIT(8),
1970 .hw.init = &(struct clk_init_data){
1971 .name = "gcc_qupv3_i2c_core_clk",
1972 .ops = &clk_branch2_ops,
1977 static struct clk_branch gcc_qupv3_i2c_s0_clk = {
1978 .halt_reg = 0x17004,
1979 .halt_check = BRANCH_HALT_VOTED,
1981 .enable_reg = 0x52008,
1982 .enable_mask = BIT(10),
1983 .hw.init = &(struct clk_init_data){
1984 .name = "gcc_qupv3_i2c_s0_clk",
1985 .parent_hws = (const struct clk_hw*[]) {
1986 &gcc_qupv3_i2c_s0_clk_src.clkr.hw,
1989 .flags = CLK_SET_RATE_PARENT,
1990 .ops = &clk_branch2_ops,
1995 static struct clk_branch gcc_qupv3_i2c_s1_clk = {
1996 .halt_reg = 0x17020,
1997 .halt_check = BRANCH_HALT_VOTED,
1999 .enable_reg = 0x52008,
2000 .enable_mask = BIT(11),
2001 .hw.init = &(struct clk_init_data){
2002 .name = "gcc_qupv3_i2c_s1_clk",
2003 .parent_hws = (const struct clk_hw*[]) {
2004 &gcc_qupv3_i2c_s1_clk_src.clkr.hw,
2007 .flags = CLK_SET_RATE_PARENT,
2008 .ops = &clk_branch2_ops,
2013 static struct clk_branch gcc_qupv3_i2c_s2_clk = {
2014 .halt_reg = 0x1703c,
2015 .halt_check = BRANCH_HALT_VOTED,
2017 .enable_reg = 0x52008,
2018 .enable_mask = BIT(12),
2019 .hw.init = &(struct clk_init_data){
2020 .name = "gcc_qupv3_i2c_s2_clk",
2021 .parent_hws = (const struct clk_hw*[]) {
2022 &gcc_qupv3_i2c_s2_clk_src.clkr.hw,
2025 .flags = CLK_SET_RATE_PARENT,
2026 .ops = &clk_branch2_ops,
2031 static struct clk_branch gcc_qupv3_i2c_s3_clk = {
2032 .halt_reg = 0x17058,
2033 .halt_check = BRANCH_HALT_VOTED,
2035 .enable_reg = 0x52008,
2036 .enable_mask = BIT(13),
2037 .hw.init = &(struct clk_init_data){
2038 .name = "gcc_qupv3_i2c_s3_clk",
2039 .parent_hws = (const struct clk_hw*[]) {
2040 &gcc_qupv3_i2c_s3_clk_src.clkr.hw,
2043 .flags = CLK_SET_RATE_PARENT,
2044 .ops = &clk_branch2_ops,
2049 static struct clk_branch gcc_qupv3_i2c_s4_clk = {
2050 .halt_reg = 0x17074,
2051 .halt_check = BRANCH_HALT_VOTED,
2053 .enable_reg = 0x52008,
2054 .enable_mask = BIT(14),
2055 .hw.init = &(struct clk_init_data){
2056 .name = "gcc_qupv3_i2c_s4_clk",
2057 .parent_hws = (const struct clk_hw*[]) {
2058 &gcc_qupv3_i2c_s4_clk_src.clkr.hw,
2061 .flags = CLK_SET_RATE_PARENT,
2062 .ops = &clk_branch2_ops,
2067 static struct clk_branch gcc_qupv3_i2c_s5_clk = {
2068 .halt_reg = 0x17090,
2069 .halt_check = BRANCH_HALT_VOTED,
2071 .enable_reg = 0x52008,
2072 .enable_mask = BIT(15),
2073 .hw.init = &(struct clk_init_data){
2074 .name = "gcc_qupv3_i2c_s5_clk",
2075 .parent_hws = (const struct clk_hw*[]) {
2076 &gcc_qupv3_i2c_s5_clk_src.clkr.hw,
2079 .flags = CLK_SET_RATE_PARENT,
2080 .ops = &clk_branch2_ops,
2085 static struct clk_branch gcc_qupv3_i2c_s6_clk = {
2086 .halt_reg = 0x170ac,
2087 .halt_check = BRANCH_HALT_VOTED,
2089 .enable_reg = 0x52008,
2090 .enable_mask = BIT(16),
2091 .hw.init = &(struct clk_init_data){
2092 .name = "gcc_qupv3_i2c_s6_clk",
2093 .parent_hws = (const struct clk_hw*[]) {
2094 &gcc_qupv3_i2c_s6_clk_src.clkr.hw,
2097 .flags = CLK_SET_RATE_PARENT,
2098 .ops = &clk_branch2_ops,
2103 static struct clk_branch gcc_qupv3_i2c_s7_clk = {
2104 .halt_reg = 0x170c8,
2105 .halt_check = BRANCH_HALT_VOTED,
2107 .enable_reg = 0x52008,
2108 .enable_mask = BIT(17),
2109 .hw.init = &(struct clk_init_data){
2110 .name = "gcc_qupv3_i2c_s7_clk",
2111 .parent_hws = (const struct clk_hw*[]) {
2112 &gcc_qupv3_i2c_s7_clk_src.clkr.hw,
2115 .flags = CLK_SET_RATE_PARENT,
2116 .ops = &clk_branch2_ops,
2121 static struct clk_branch gcc_qupv3_i2c_s8_clk = {
2122 .halt_reg = 0x170e4,
2123 .halt_check = BRANCH_HALT_VOTED,
2125 .enable_reg = 0x52010,
2126 .enable_mask = BIT(14),
2127 .hw.init = &(struct clk_init_data){
2128 .name = "gcc_qupv3_i2c_s8_clk",
2129 .parent_hws = (const struct clk_hw*[]) {
2130 &gcc_qupv3_i2c_s8_clk_src.clkr.hw,
2133 .flags = CLK_SET_RATE_PARENT,
2134 .ops = &clk_branch2_ops,
2139 static struct clk_branch gcc_qupv3_i2c_s9_clk = {
2140 .halt_reg = 0x17100,
2141 .halt_check = BRANCH_HALT_VOTED,
2143 .enable_reg = 0x52010,
2144 .enable_mask = BIT(15),
2145 .hw.init = &(struct clk_init_data){
2146 .name = "gcc_qupv3_i2c_s9_clk",
2147 .parent_hws = (const struct clk_hw*[]) {
2148 &gcc_qupv3_i2c_s9_clk_src.clkr.hw,
2151 .flags = CLK_SET_RATE_PARENT,
2152 .ops = &clk_branch2_ops,
2157 static struct clk_branch gcc_qupv3_i2c_s_ahb_clk = {
2158 .halt_reg = 0x23140,
2159 .halt_check = BRANCH_HALT_VOTED,
2160 .hwcg_reg = 0x23140,
2163 .enable_reg = 0x52008,
2164 .enable_mask = BIT(7),
2165 .hw.init = &(struct clk_init_data){
2166 .name = "gcc_qupv3_i2c_s_ahb_clk",
2167 .ops = &clk_branch2_ops,
2172 static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
2173 .halt_reg = 0x23294,
2174 .halt_check = BRANCH_HALT_VOTED,
2176 .enable_reg = 0x52008,
2177 .enable_mask = BIT(18),
2178 .hw.init = &(struct clk_init_data){
2179 .name = "gcc_qupv3_wrap1_core_2x_clk",
2180 .ops = &clk_branch2_ops,
2185 static struct clk_branch gcc_qupv3_wrap1_core_clk = {
2186 .halt_reg = 0x23284,
2187 .halt_check = BRANCH_HALT_VOTED,
2189 .enable_reg = 0x52008,
2190 .enable_mask = BIT(19),
2191 .hw.init = &(struct clk_init_data){
2192 .name = "gcc_qupv3_wrap1_core_clk",
2193 .ops = &clk_branch2_ops,
2198 static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
2199 .halt_reg = 0x18004,
2200 .halt_check = BRANCH_HALT_VOTED,
2202 .enable_reg = 0x52008,
2203 .enable_mask = BIT(22),
2204 .hw.init = &(struct clk_init_data){
2205 .name = "gcc_qupv3_wrap1_s0_clk",
2206 .parent_hws = (const struct clk_hw*[]) {
2207 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
2210 .flags = CLK_SET_RATE_PARENT,
2211 .ops = &clk_branch2_ops,
2216 static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
2217 .halt_reg = 0x1813c,
2218 .halt_check = BRANCH_HALT_VOTED,
2220 .enable_reg = 0x52008,
2221 .enable_mask = BIT(23),
2222 .hw.init = &(struct clk_init_data){
2223 .name = "gcc_qupv3_wrap1_s1_clk",
2224 .parent_hws = (const struct clk_hw*[]) {
2225 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
2228 .flags = CLK_SET_RATE_PARENT,
2229 .ops = &clk_branch2_ops,
2234 static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
2235 .halt_reg = 0x18274,
2236 .halt_check = BRANCH_HALT_VOTED,
2238 .enable_reg = 0x52008,
2239 .enable_mask = BIT(24),
2240 .hw.init = &(struct clk_init_data){
2241 .name = "gcc_qupv3_wrap1_s2_clk",
2242 .parent_hws = (const struct clk_hw*[]) {
2243 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
2246 .flags = CLK_SET_RATE_PARENT,
2247 .ops = &clk_branch2_ops,
2252 static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
2253 .halt_reg = 0x183ac,
2254 .halt_check = BRANCH_HALT_VOTED,
2256 .enable_reg = 0x52008,
2257 .enable_mask = BIT(25),
2258 .hw.init = &(struct clk_init_data){
2259 .name = "gcc_qupv3_wrap1_s3_clk",
2260 .parent_hws = (const struct clk_hw*[]) {
2261 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
2264 .flags = CLK_SET_RATE_PARENT,
2265 .ops = &clk_branch2_ops,
2270 static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
2271 .halt_reg = 0x184e4,
2272 .halt_check = BRANCH_HALT_VOTED,
2274 .enable_reg = 0x52008,
2275 .enable_mask = BIT(26),
2276 .hw.init = &(struct clk_init_data){
2277 .name = "gcc_qupv3_wrap1_s4_clk",
2278 .parent_hws = (const struct clk_hw*[]) {
2279 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
2282 .flags = CLK_SET_RATE_PARENT,
2283 .ops = &clk_branch2_ops,
2288 static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
2289 .halt_reg = 0x1861c,
2290 .halt_check = BRANCH_HALT_VOTED,
2292 .enable_reg = 0x52008,
2293 .enable_mask = BIT(27),
2294 .hw.init = &(struct clk_init_data){
2295 .name = "gcc_qupv3_wrap1_s5_clk",
2296 .parent_hws = (const struct clk_hw*[]) {
2297 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
2300 .flags = CLK_SET_RATE_PARENT,
2301 .ops = &clk_branch2_ops,
2306 static struct clk_branch gcc_qupv3_wrap1_s6_clk = {
2307 .halt_reg = 0x18754,
2308 .halt_check = BRANCH_HALT_VOTED,
2310 .enable_reg = 0x52008,
2311 .enable_mask = BIT(28),
2312 .hw.init = &(struct clk_init_data){
2313 .name = "gcc_qupv3_wrap1_s6_clk",
2314 .parent_hws = (const struct clk_hw*[]) {
2315 &gcc_qupv3_wrap1_s6_clk_src.clkr.hw,
2318 .flags = CLK_SET_RATE_PARENT,
2319 .ops = &clk_branch2_ops,
2324 static struct clk_branch gcc_qupv3_wrap1_s7_clk = {
2325 .halt_reg = 0x1888c,
2326 .halt_check = BRANCH_HALT_VOTED,
2328 .enable_reg = 0x52010,
2329 .enable_mask = BIT(16),
2330 .hw.init = &(struct clk_init_data){
2331 .name = "gcc_qupv3_wrap1_s7_clk",
2332 .parent_hws = (const struct clk_hw*[]) {
2333 &gcc_qupv3_wrap1_s7_clk_src.clkr.hw,
2336 .flags = CLK_SET_RATE_PARENT,
2337 .ops = &clk_branch2_ops,
2342 static struct clk_branch gcc_qupv3_wrap2_core_2x_clk = {
2343 .halt_reg = 0x23004,
2344 .halt_check = BRANCH_HALT_VOTED,
2346 .enable_reg = 0x52010,
2347 .enable_mask = BIT(3),
2348 .hw.init = &(struct clk_init_data){
2349 .name = "gcc_qupv3_wrap2_core_2x_clk",
2350 .ops = &clk_branch2_ops,
2355 static struct clk_branch gcc_qupv3_wrap2_core_clk = {
2356 .halt_reg = 0x233d4,
2357 .halt_check = BRANCH_HALT_VOTED,
2359 .enable_reg = 0x52010,
2360 .enable_mask = BIT(0),
2361 .hw.init = &(struct clk_init_data){
2362 .name = "gcc_qupv3_wrap2_core_clk",
2363 .ops = &clk_branch2_ops,
2368 static struct clk_branch gcc_qupv3_wrap2_s0_clk = {
2369 .halt_reg = 0x1e004,
2370 .halt_check = BRANCH_HALT_VOTED,
2372 .enable_reg = 0x52010,
2373 .enable_mask = BIT(4),
2374 .hw.init = &(struct clk_init_data){
2375 .name = "gcc_qupv3_wrap2_s0_clk",
2376 .parent_hws = (const struct clk_hw*[]) {
2377 &gcc_qupv3_wrap2_s0_clk_src.clkr.hw,
2380 .flags = CLK_SET_RATE_PARENT,
2381 .ops = &clk_branch2_ops,
2386 static struct clk_branch gcc_qupv3_wrap2_s1_clk = {
2387 .halt_reg = 0x1e13c,
2388 .halt_check = BRANCH_HALT_VOTED,
2390 .enable_reg = 0x52010,
2391 .enable_mask = BIT(5),
2392 .hw.init = &(struct clk_init_data){
2393 .name = "gcc_qupv3_wrap2_s1_clk",
2394 .parent_hws = (const struct clk_hw*[]) {
2395 &gcc_qupv3_wrap2_s1_clk_src.clkr.hw,
2398 .flags = CLK_SET_RATE_PARENT,
2399 .ops = &clk_branch2_ops,
2404 static struct clk_branch gcc_qupv3_wrap2_s2_clk = {
2405 .halt_reg = 0x1e274,
2406 .halt_check = BRANCH_HALT_VOTED,
2408 .enable_reg = 0x52010,
2409 .enable_mask = BIT(6),
2410 .hw.init = &(struct clk_init_data){
2411 .name = "gcc_qupv3_wrap2_s2_clk",
2412 .parent_hws = (const struct clk_hw*[]) {
2413 &gcc_qupv3_wrap2_s2_clk_src.clkr.hw,
2416 .flags = CLK_SET_RATE_PARENT,
2417 .ops = &clk_branch2_ops,
2422 static struct clk_branch gcc_qupv3_wrap2_s3_clk = {
2423 .halt_reg = 0x1e3ac,
2424 .halt_check = BRANCH_HALT_VOTED,
2426 .enable_reg = 0x52010,
2427 .enable_mask = BIT(7),
2428 .hw.init = &(struct clk_init_data){
2429 .name = "gcc_qupv3_wrap2_s3_clk",
2430 .parent_hws = (const struct clk_hw*[]) {
2431 &gcc_qupv3_wrap2_s3_clk_src.clkr.hw,
2434 .flags = CLK_SET_RATE_PARENT,
2435 .ops = &clk_branch2_ops,
2440 static struct clk_branch gcc_qupv3_wrap2_s4_clk = {
2441 .halt_reg = 0x1e4e4,
2442 .halt_check = BRANCH_HALT_VOTED,
2444 .enable_reg = 0x52010,
2445 .enable_mask = BIT(8),
2446 .hw.init = &(struct clk_init_data){
2447 .name = "gcc_qupv3_wrap2_s4_clk",
2448 .parent_hws = (const struct clk_hw*[]) {
2449 &gcc_qupv3_wrap2_s4_clk_src.clkr.hw,
2452 .flags = CLK_SET_RATE_PARENT,
2453 .ops = &clk_branch2_ops,
2458 static struct clk_branch gcc_qupv3_wrap2_s5_clk = {
2459 .halt_reg = 0x1e61c,
2460 .halt_check = BRANCH_HALT_VOTED,
2462 .enable_reg = 0x52010,
2463 .enable_mask = BIT(9),
2464 .hw.init = &(struct clk_init_data){
2465 .name = "gcc_qupv3_wrap2_s5_clk",
2466 .parent_hws = (const struct clk_hw*[]) {
2467 &gcc_qupv3_wrap2_s5_clk_src.clkr.hw,
2470 .flags = CLK_SET_RATE_PARENT,
2471 .ops = &clk_branch2_ops,
2476 static struct clk_branch gcc_qupv3_wrap2_s6_clk = {
2477 .halt_reg = 0x1e754,
2478 .halt_check = BRANCH_HALT_VOTED,
2480 .enable_reg = 0x52010,
2481 .enable_mask = BIT(10),
2482 .hw.init = &(struct clk_init_data){
2483 .name = "gcc_qupv3_wrap2_s6_clk",
2484 .parent_hws = (const struct clk_hw*[]) {
2485 &gcc_qupv3_wrap2_s6_clk_src.clkr.hw,
2488 .flags = CLK_SET_RATE_PARENT,
2489 .ops = &clk_branch2_ops,
2494 static struct clk_branch gcc_qupv3_wrap2_s7_clk = {
2495 .halt_reg = 0x1e88c,
2496 .halt_check = BRANCH_HALT_VOTED,
2498 .enable_reg = 0x52010,
2499 .enable_mask = BIT(17),
2500 .hw.init = &(struct clk_init_data){
2501 .name = "gcc_qupv3_wrap2_s7_clk",
2502 .parent_hws = (const struct clk_hw*[]) {
2503 &gcc_qupv3_wrap2_s7_clk_src.clkr.hw,
2506 .flags = CLK_SET_RATE_PARENT,
2507 .ops = &clk_branch2_ops,
2512 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
2513 .halt_reg = 0x2327c,
2514 .halt_check = BRANCH_HALT_VOTED,
2515 .hwcg_reg = 0x2327c,
2518 .enable_reg = 0x52008,
2519 .enable_mask = BIT(20),
2520 .hw.init = &(struct clk_init_data){
2521 .name = "gcc_qupv3_wrap_1_m_ahb_clk",
2522 .ops = &clk_branch2_ops,
2527 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
2528 .halt_reg = 0x23280,
2529 .halt_check = BRANCH_HALT_VOTED,
2530 .hwcg_reg = 0x23280,
2533 .enable_reg = 0x52008,
2534 .enable_mask = BIT(21),
2535 .hw.init = &(struct clk_init_data){
2536 .name = "gcc_qupv3_wrap_1_s_ahb_clk",
2537 .ops = &clk_branch2_ops,
2542 static struct clk_branch gcc_qupv3_wrap_2_m_ahb_clk = {
2543 .halt_reg = 0x233cc,
2544 .halt_check = BRANCH_HALT_VOTED,
2545 .hwcg_reg = 0x233cc,
2548 .enable_reg = 0x52010,
2549 .enable_mask = BIT(2),
2550 .hw.init = &(struct clk_init_data){
2551 .name = "gcc_qupv3_wrap_2_m_ahb_clk",
2552 .ops = &clk_branch2_ops,
2557 static struct clk_branch gcc_qupv3_wrap_2_s_ahb_clk = {
2558 .halt_reg = 0x233d0,
2559 .halt_check = BRANCH_HALT_VOTED,
2560 .hwcg_reg = 0x233d0,
2563 .enable_reg = 0x52010,
2564 .enable_mask = BIT(1),
2565 .hw.init = &(struct clk_init_data){
2566 .name = "gcc_qupv3_wrap_2_s_ahb_clk",
2567 .ops = &clk_branch2_ops,
2572 static struct clk_branch gcc_sdcc2_ahb_clk = {
2573 .halt_reg = 0x14010,
2574 .halt_check = BRANCH_HALT,
2576 .enable_reg = 0x14010,
2577 .enable_mask = BIT(0),
2578 .hw.init = &(struct clk_init_data){
2579 .name = "gcc_sdcc2_ahb_clk",
2580 .ops = &clk_branch2_ops,
2585 static struct clk_branch gcc_sdcc2_apps_clk = {
2586 .halt_reg = 0x14004,
2587 .halt_check = BRANCH_HALT,
2589 .enable_reg = 0x14004,
2590 .enable_mask = BIT(0),
2591 .hw.init = &(struct clk_init_data){
2592 .name = "gcc_sdcc2_apps_clk",
2593 .parent_hws = (const struct clk_hw*[]) {
2594 &gcc_sdcc2_apps_clk_src.clkr.hw,
2597 .flags = CLK_SET_RATE_PARENT,
2598 .ops = &clk_branch2_ops,
2603 static struct clk_branch gcc_sdcc4_ahb_clk = {
2604 .halt_reg = 0x16010,
2605 .halt_check = BRANCH_HALT,
2607 .enable_reg = 0x16010,
2608 .enable_mask = BIT(0),
2609 .hw.init = &(struct clk_init_data){
2610 .name = "gcc_sdcc4_ahb_clk",
2611 .ops = &clk_branch2_ops,
2616 static struct clk_branch gcc_sdcc4_apps_clk = {
2617 .halt_reg = 0x16004,
2618 .halt_check = BRANCH_HALT,
2620 .enable_reg = 0x16004,
2621 .enable_mask = BIT(0),
2622 .hw.init = &(struct clk_init_data){
2623 .name = "gcc_sdcc4_apps_clk",
2624 .parent_hws = (const struct clk_hw*[]) {
2625 &gcc_sdcc4_apps_clk_src.clkr.hw,
2628 .flags = CLK_SET_RATE_PARENT,
2629 .ops = &clk_branch2_ops,
2634 static struct clk_branch gcc_ufs_phy_ahb_clk = {
2635 .halt_reg = 0x77024,
2636 .halt_check = BRANCH_HALT_VOTED,
2637 .hwcg_reg = 0x77024,
2640 .enable_reg = 0x77024,
2641 .enable_mask = BIT(0),
2642 .hw.init = &(struct clk_init_data){
2643 .name = "gcc_ufs_phy_ahb_clk",
2644 .ops = &clk_branch2_ops,
2649 static struct clk_branch gcc_ufs_phy_axi_clk = {
2650 .halt_reg = 0x77018,
2651 .halt_check = BRANCH_HALT_VOTED,
2652 .hwcg_reg = 0x77018,
2655 .enable_reg = 0x77018,
2656 .enable_mask = BIT(0),
2657 .hw.init = &(struct clk_init_data){
2658 .name = "gcc_ufs_phy_axi_clk",
2659 .parent_hws = (const struct clk_hw*[]) {
2660 &gcc_ufs_phy_axi_clk_src.clkr.hw,
2663 .flags = CLK_SET_RATE_PARENT,
2664 .ops = &clk_branch2_ops,
2669 static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = {
2670 .halt_reg = 0x77018,
2671 .halt_check = BRANCH_HALT_VOTED,
2672 .hwcg_reg = 0x77018,
2675 .enable_reg = 0x77018,
2676 .enable_mask = BIT(1),
2677 .hw.init = &(struct clk_init_data){
2678 .name = "gcc_ufs_phy_axi_hw_ctl_clk",
2679 .parent_hws = (const struct clk_hw*[]) {
2680 &gcc_ufs_phy_axi_clk_src.clkr.hw,
2683 .flags = CLK_SET_RATE_PARENT,
2684 .ops = &clk_branch2_ops,
2689 static struct clk_branch gcc_ufs_phy_ice_core_clk = {
2690 .halt_reg = 0x77074,
2691 .halt_check = BRANCH_HALT_VOTED,
2692 .hwcg_reg = 0x77074,
2695 .enable_reg = 0x77074,
2696 .enable_mask = BIT(0),
2697 .hw.init = &(struct clk_init_data){
2698 .name = "gcc_ufs_phy_ice_core_clk",
2699 .parent_hws = (const struct clk_hw*[]) {
2700 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
2703 .flags = CLK_SET_RATE_PARENT,
2704 .ops = &clk_branch2_ops,
2709 static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = {
2710 .halt_reg = 0x77074,
2711 .halt_check = BRANCH_HALT_VOTED,
2712 .hwcg_reg = 0x77074,
2715 .enable_reg = 0x77074,
2716 .enable_mask = BIT(1),
2717 .hw.init = &(struct clk_init_data){
2718 .name = "gcc_ufs_phy_ice_core_hw_ctl_clk",
2719 .parent_hws = (const struct clk_hw*[]) {
2720 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
2723 .flags = CLK_SET_RATE_PARENT,
2724 .ops = &clk_branch2_ops,
2729 static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
2730 .halt_reg = 0x770b0,
2731 .halt_check = BRANCH_HALT_VOTED,
2732 .hwcg_reg = 0x770b0,
2735 .enable_reg = 0x770b0,
2736 .enable_mask = BIT(0),
2737 .hw.init = &(struct clk_init_data){
2738 .name = "gcc_ufs_phy_phy_aux_clk",
2739 .parent_hws = (const struct clk_hw*[]) {
2740 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2743 .flags = CLK_SET_RATE_PARENT,
2744 .ops = &clk_branch2_ops,
2749 static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = {
2750 .halt_reg = 0x770b0,
2751 .halt_check = BRANCH_HALT_VOTED,
2752 .hwcg_reg = 0x770b0,
2755 .enable_reg = 0x770b0,
2756 .enable_mask = BIT(1),
2757 .hw.init = &(struct clk_init_data){
2758 .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk",
2759 .parent_hws = (const struct clk_hw*[]) {
2760 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2763 .flags = CLK_SET_RATE_PARENT,
2764 .ops = &clk_branch2_ops,
2769 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
2770 .halt_reg = 0x7702c,
2771 .halt_check = BRANCH_HALT_DELAY,
2773 .enable_reg = 0x7702c,
2774 .enable_mask = BIT(0),
2775 .hw.init = &(struct clk_init_data){
2776 .name = "gcc_ufs_phy_rx_symbol_0_clk",
2777 .parent_hws = (const struct clk_hw*[]) {
2778 &gcc_ufs_phy_rx_symbol_0_clk_src.clkr.hw,
2781 .flags = CLK_SET_RATE_PARENT,
2782 .ops = &clk_branch2_ops,
2787 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
2788 .halt_reg = 0x770cc,
2789 .halt_check = BRANCH_HALT_DELAY,
2791 .enable_reg = 0x770cc,
2792 .enable_mask = BIT(0),
2793 .hw.init = &(struct clk_init_data){
2794 .name = "gcc_ufs_phy_rx_symbol_1_clk",
2795 .parent_hws = (const struct clk_hw*[]) {
2796 &gcc_ufs_phy_rx_symbol_1_clk_src.clkr.hw,
2799 .flags = CLK_SET_RATE_PARENT,
2800 .ops = &clk_branch2_ops,
2805 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
2806 .halt_reg = 0x77028,
2807 .halt_check = BRANCH_HALT_DELAY,
2809 .enable_reg = 0x77028,
2810 .enable_mask = BIT(0),
2811 .hw.init = &(struct clk_init_data){
2812 .name = "gcc_ufs_phy_tx_symbol_0_clk",
2813 .parent_hws = (const struct clk_hw*[]) {
2814 &gcc_ufs_phy_tx_symbol_0_clk_src.clkr.hw,
2817 .flags = CLK_SET_RATE_PARENT,
2818 .ops = &clk_branch2_ops,
2823 static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
2824 .halt_reg = 0x77068,
2825 .halt_check = BRANCH_HALT_VOTED,
2826 .hwcg_reg = 0x77068,
2829 .enable_reg = 0x77068,
2830 .enable_mask = BIT(0),
2831 .hw.init = &(struct clk_init_data){
2832 .name = "gcc_ufs_phy_unipro_core_clk",
2833 .parent_hws = (const struct clk_hw*[]) {
2834 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2837 .flags = CLK_SET_RATE_PARENT,
2838 .ops = &clk_branch2_ops,
2843 static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = {
2844 .halt_reg = 0x77068,
2845 .halt_check = BRANCH_HALT_VOTED,
2846 .hwcg_reg = 0x77068,
2849 .enable_reg = 0x77068,
2850 .enable_mask = BIT(1),
2851 .hw.init = &(struct clk_init_data){
2852 .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk",
2853 .parent_hws = (const struct clk_hw*[]) {
2854 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2857 .flags = CLK_SET_RATE_PARENT,
2858 .ops = &clk_branch2_ops,
2863 static struct clk_branch gcc_usb30_prim_master_clk = {
2864 .halt_reg = 0x39018,
2865 .halt_check = BRANCH_HALT,
2867 .enable_reg = 0x39018,
2868 .enable_mask = BIT(0),
2869 .hw.init = &(struct clk_init_data){
2870 .name = "gcc_usb30_prim_master_clk",
2871 .parent_hws = (const struct clk_hw*[]) {
2872 &gcc_usb30_prim_master_clk_src.clkr.hw,
2875 .flags = CLK_SET_RATE_PARENT,
2876 .ops = &clk_branch2_ops,
2881 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
2882 .halt_reg = 0x39028,
2883 .halt_check = BRANCH_HALT,
2885 .enable_reg = 0x39028,
2886 .enable_mask = BIT(0),
2887 .hw.init = &(struct clk_init_data){
2888 .name = "gcc_usb30_prim_mock_utmi_clk",
2889 .parent_hws = (const struct clk_hw*[]) {
2890 &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,
2893 .flags = CLK_SET_RATE_PARENT,
2894 .ops = &clk_branch2_ops,
2899 static struct clk_branch gcc_usb30_prim_sleep_clk = {
2900 .halt_reg = 0x39024,
2901 .halt_check = BRANCH_HALT,
2903 .enable_reg = 0x39024,
2904 .enable_mask = BIT(0),
2905 .hw.init = &(struct clk_init_data){
2906 .name = "gcc_usb30_prim_sleep_clk",
2907 .ops = &clk_branch2_ops,
2912 static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
2913 .halt_reg = 0x39060,
2914 .halt_check = BRANCH_HALT,
2916 .enable_reg = 0x39060,
2917 .enable_mask = BIT(0),
2918 .hw.init = &(struct clk_init_data){
2919 .name = "gcc_usb3_prim_phy_aux_clk",
2920 .parent_hws = (const struct clk_hw*[]) {
2921 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2924 .flags = CLK_SET_RATE_PARENT,
2925 .ops = &clk_branch2_ops,
2930 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
2931 .halt_reg = 0x39064,
2932 .halt_check = BRANCH_HALT,
2934 .enable_reg = 0x39064,
2935 .enable_mask = BIT(0),
2936 .hw.init = &(struct clk_init_data){
2937 .name = "gcc_usb3_prim_phy_com_aux_clk",
2938 .parent_hws = (const struct clk_hw*[]) {
2939 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2942 .flags = CLK_SET_RATE_PARENT,
2943 .ops = &clk_branch2_ops,
2948 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
2949 .halt_reg = 0x39068,
2950 .halt_check = BRANCH_HALT_DELAY,
2951 .hwcg_reg = 0x39068,
2954 .enable_reg = 0x39068,
2955 .enable_mask = BIT(0),
2956 .hw.init = &(struct clk_init_data){
2957 .name = "gcc_usb3_prim_phy_pipe_clk",
2958 .parent_hws = (const struct clk_hw*[]) {
2959 &gcc_usb3_prim_phy_pipe_clk_src.clkr.hw,
2962 .flags = CLK_SET_RATE_PARENT,
2963 .ops = &clk_branch2_ops,
2968 static struct clk_branch gcc_video_axi0_clk = {
2969 .halt_reg = 0x32018,
2970 .halt_check = BRANCH_HALT_SKIP,
2971 .hwcg_reg = 0x32018,
2974 .enable_reg = 0x32018,
2975 .enable_mask = BIT(0),
2976 .hw.init = &(struct clk_init_data){
2977 .name = "gcc_video_axi0_clk",
2978 .ops = &clk_branch2_ops,
2983 static struct clk_branch gcc_video_axi1_clk = {
2984 .halt_reg = 0x32024,
2985 .halt_check = BRANCH_HALT_SKIP,
2986 .hwcg_reg = 0x32024,
2989 .enable_reg = 0x32024,
2990 .enable_mask = BIT(0),
2991 .hw.init = &(struct clk_init_data){
2992 .name = "gcc_video_axi1_clk",
2993 .ops = &clk_branch2_ops,
2998 static struct gdsc pcie_0_gdsc = {
3001 .name = "pcie_0_gdsc",
3003 .pwrsts = PWRSTS_OFF_ON,
3004 .flags = POLL_CFG_GDSCR,
3007 static struct gdsc pcie_0_phy_gdsc = {
3010 .name = "pcie_0_phy_gdsc",
3012 .pwrsts = PWRSTS_OFF_ON,
3013 .flags = POLL_CFG_GDSCR,
3016 static struct gdsc pcie_1_gdsc = {
3019 .name = "pcie_1_gdsc",
3021 .pwrsts = PWRSTS_OFF_ON,
3022 .flags = POLL_CFG_GDSCR,
3025 static struct gdsc pcie_1_phy_gdsc = {
3028 .name = "pcie_1_phy_gdsc",
3030 .pwrsts = PWRSTS_OFF_ON,
3031 .flags = POLL_CFG_GDSCR,
3034 static struct gdsc ufs_phy_gdsc = {
3037 .name = "ufs_phy_gdsc",
3039 .pwrsts = PWRSTS_OFF_ON,
3040 .flags = POLL_CFG_GDSCR,
3043 static struct gdsc ufs_mem_phy_gdsc = {
3046 .name = "ufs_mem_phy_gdsc",
3048 .pwrsts = PWRSTS_OFF_ON,
3049 .flags = POLL_CFG_GDSCR,
3052 static struct gdsc usb30_prim_gdsc = {
3055 .name = "usb30_prim_gdsc",
3057 .pwrsts = PWRSTS_OFF_ON,
3058 .flags = POLL_CFG_GDSCR,
3061 static struct gdsc usb3_phy_gdsc = {
3064 .name = "usb3_phy_gdsc",
3066 .pwrsts = PWRSTS_OFF_ON,
3067 .flags = POLL_CFG_GDSCR,
3070 static struct clk_regmap *gcc_sm8550_clocks[] = {
3071 [GCC_AGGRE_NOC_PCIE_AXI_CLK] = &gcc_aggre_noc_pcie_axi_clk.clkr,
3072 [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
3073 [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr,
3074 [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
3075 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3076 [GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,
3077 [GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr,
3078 [GCC_CFG_NOC_PCIE_ANOC_AHB_CLK] = &gcc_cfg_noc_pcie_anoc_ahb_clk.clkr,
3079 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
3080 [GCC_CNOC_PCIE_SF_AXI_CLK] = &gcc_cnoc_pcie_sf_axi_clk.clkr,
3081 [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
3082 [GCC_DDRSS_PCIE_SF_QTB_CLK] = &gcc_ddrss_pcie_sf_qtb_clk.clkr,
3083 [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
3084 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3085 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
3086 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3087 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
3088 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3089 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
3090 [GCC_GPLL0] = &gcc_gpll0.clkr,
3091 [GCC_GPLL0_OUT_EVEN] = &gcc_gpll0_out_even.clkr,
3092 [GCC_GPLL4] = &gcc_gpll4.clkr,
3093 [GCC_GPLL7] = &gcc_gpll7.clkr,
3094 [GCC_GPLL9] = &gcc_gpll9.clkr,
3095 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
3096 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
3097 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
3098 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
3099 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
3100 [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
3101 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
3102 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
3103 [GCC_PCIE_0_PHY_RCHNG_CLK] = &gcc_pcie_0_phy_rchng_clk.clkr,
3104 [GCC_PCIE_0_PHY_RCHNG_CLK_SRC] = &gcc_pcie_0_phy_rchng_clk_src.clkr,
3105 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
3106 [GCC_PCIE_0_PIPE_CLK_SRC] = &gcc_pcie_0_pipe_clk_src.clkr,
3107 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
3108 [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
3109 [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
3110 [GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr,
3111 [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
3112 [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
3113 [GCC_PCIE_1_PHY_AUX_CLK] = &gcc_pcie_1_phy_aux_clk.clkr,
3114 [GCC_PCIE_1_PHY_AUX_CLK_SRC] = &gcc_pcie_1_phy_aux_clk_src.clkr,
3115 [GCC_PCIE_1_PHY_RCHNG_CLK] = &gcc_pcie_1_phy_rchng_clk.clkr,
3116 [GCC_PCIE_1_PHY_RCHNG_CLK_SRC] = &gcc_pcie_1_phy_rchng_clk_src.clkr,
3117 [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
3118 [GCC_PCIE_1_PIPE_CLK_SRC] = &gcc_pcie_1_pipe_clk_src.clkr,
3119 [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
3120 [GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr,
3121 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3122 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
3123 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3124 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
3125 [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
3126 [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
3127 [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
3128 [GCC_QMIP_GPU_AHB_CLK] = &gcc_qmip_gpu_ahb_clk.clkr,
3129 [GCC_QMIP_PCIE_AHB_CLK] = &gcc_qmip_pcie_ahb_clk.clkr,
3130 [GCC_QMIP_VIDEO_CV_CPU_AHB_CLK] = &gcc_qmip_video_cv_cpu_ahb_clk.clkr,
3131 [GCC_QMIP_VIDEO_CVP_AHB_CLK] = &gcc_qmip_video_cvp_ahb_clk.clkr,
3132 [GCC_QMIP_VIDEO_V_CPU_AHB_CLK] = &gcc_qmip_video_v_cpu_ahb_clk.clkr,
3133 [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
3134 [GCC_QUPV3_I2C_CORE_CLK] = &gcc_qupv3_i2c_core_clk.clkr,
3135 [GCC_QUPV3_I2C_S0_CLK] = &gcc_qupv3_i2c_s0_clk.clkr,
3136 [GCC_QUPV3_I2C_S0_CLK_SRC] = &gcc_qupv3_i2c_s0_clk_src.clkr,
3137 [GCC_QUPV3_I2C_S1_CLK] = &gcc_qupv3_i2c_s1_clk.clkr,
3138 [GCC_QUPV3_I2C_S1_CLK_SRC] = &gcc_qupv3_i2c_s1_clk_src.clkr,
3139 [GCC_QUPV3_I2C_S2_CLK] = &gcc_qupv3_i2c_s2_clk.clkr,
3140 [GCC_QUPV3_I2C_S2_CLK_SRC] = &gcc_qupv3_i2c_s2_clk_src.clkr,
3141 [GCC_QUPV3_I2C_S3_CLK] = &gcc_qupv3_i2c_s3_clk.clkr,
3142 [GCC_QUPV3_I2C_S3_CLK_SRC] = &gcc_qupv3_i2c_s3_clk_src.clkr,
3143 [GCC_QUPV3_I2C_S4_CLK] = &gcc_qupv3_i2c_s4_clk.clkr,
3144 [GCC_QUPV3_I2C_S4_CLK_SRC] = &gcc_qupv3_i2c_s4_clk_src.clkr,
3145 [GCC_QUPV3_I2C_S5_CLK] = &gcc_qupv3_i2c_s5_clk.clkr,
3146 [GCC_QUPV3_I2C_S5_CLK_SRC] = &gcc_qupv3_i2c_s5_clk_src.clkr,
3147 [GCC_QUPV3_I2C_S6_CLK] = &gcc_qupv3_i2c_s6_clk.clkr,
3148 [GCC_QUPV3_I2C_S6_CLK_SRC] = &gcc_qupv3_i2c_s6_clk_src.clkr,
3149 [GCC_QUPV3_I2C_S7_CLK] = &gcc_qupv3_i2c_s7_clk.clkr,
3150 [GCC_QUPV3_I2C_S7_CLK_SRC] = &gcc_qupv3_i2c_s7_clk_src.clkr,
3151 [GCC_QUPV3_I2C_S8_CLK] = &gcc_qupv3_i2c_s8_clk.clkr,
3152 [GCC_QUPV3_I2C_S8_CLK_SRC] = &gcc_qupv3_i2c_s8_clk_src.clkr,
3153 [GCC_QUPV3_I2C_S9_CLK] = &gcc_qupv3_i2c_s9_clk.clkr,
3154 [GCC_QUPV3_I2C_S9_CLK_SRC] = &gcc_qupv3_i2c_s9_clk_src.clkr,
3155 [GCC_QUPV3_I2C_S_AHB_CLK] = &gcc_qupv3_i2c_s_ahb_clk.clkr,
3156 [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
3157 [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
3158 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
3159 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
3160 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
3161 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
3162 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
3163 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
3164 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
3165 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
3166 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
3167 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
3168 [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
3169 [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
3170 [GCC_QUPV3_WRAP1_S6_CLK] = &gcc_qupv3_wrap1_s6_clk.clkr,
3171 [GCC_QUPV3_WRAP1_S6_CLK_SRC] = &gcc_qupv3_wrap1_s6_clk_src.clkr,
3172 [GCC_QUPV3_WRAP1_S7_CLK] = &gcc_qupv3_wrap1_s7_clk.clkr,
3173 [GCC_QUPV3_WRAP1_S7_CLK_SRC] = &gcc_qupv3_wrap1_s7_clk_src.clkr,
3174 [GCC_QUPV3_WRAP2_CORE_2X_CLK] = &gcc_qupv3_wrap2_core_2x_clk.clkr,
3175 [GCC_QUPV3_WRAP2_CORE_CLK] = &gcc_qupv3_wrap2_core_clk.clkr,
3176 [GCC_QUPV3_WRAP2_S0_CLK] = &gcc_qupv3_wrap2_s0_clk.clkr,
3177 [GCC_QUPV3_WRAP2_S0_CLK_SRC] = &gcc_qupv3_wrap2_s0_clk_src.clkr,
3178 [GCC_QUPV3_WRAP2_S1_CLK] = &gcc_qupv3_wrap2_s1_clk.clkr,
3179 [GCC_QUPV3_WRAP2_S1_CLK_SRC] = &gcc_qupv3_wrap2_s1_clk_src.clkr,
3180 [GCC_QUPV3_WRAP2_S2_CLK] = &gcc_qupv3_wrap2_s2_clk.clkr,
3181 [GCC_QUPV3_WRAP2_S2_CLK_SRC] = &gcc_qupv3_wrap2_s2_clk_src.clkr,
3182 [GCC_QUPV3_WRAP2_S3_CLK] = &gcc_qupv3_wrap2_s3_clk.clkr,
3183 [GCC_QUPV3_WRAP2_S3_CLK_SRC] = &gcc_qupv3_wrap2_s3_clk_src.clkr,
3184 [GCC_QUPV3_WRAP2_S4_CLK] = &gcc_qupv3_wrap2_s4_clk.clkr,
3185 [GCC_QUPV3_WRAP2_S4_CLK_SRC] = &gcc_qupv3_wrap2_s4_clk_src.clkr,
3186 [GCC_QUPV3_WRAP2_S5_CLK] = &gcc_qupv3_wrap2_s5_clk.clkr,
3187 [GCC_QUPV3_WRAP2_S5_CLK_SRC] = &gcc_qupv3_wrap2_s5_clk_src.clkr,
3188 [GCC_QUPV3_WRAP2_S6_CLK] = &gcc_qupv3_wrap2_s6_clk.clkr,
3189 [GCC_QUPV3_WRAP2_S6_CLK_SRC] = &gcc_qupv3_wrap2_s6_clk_src.clkr,
3190 [GCC_QUPV3_WRAP2_S7_CLK] = &gcc_qupv3_wrap2_s7_clk.clkr,
3191 [GCC_QUPV3_WRAP2_S7_CLK_SRC] = &gcc_qupv3_wrap2_s7_clk_src.clkr,
3192 [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
3193 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
3194 [GCC_QUPV3_WRAP_2_M_AHB_CLK] = &gcc_qupv3_wrap_2_m_ahb_clk.clkr,
3195 [GCC_QUPV3_WRAP_2_S_AHB_CLK] = &gcc_qupv3_wrap_2_s_ahb_clk.clkr,
3196 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3197 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3198 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
3199 [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
3200 [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
3201 [GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr,
3202 [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
3203 [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
3204 [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
3205 [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr,
3206 [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
3207 [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
3208 [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] = &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr,
3209 [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
3210 [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
3211 [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr,
3212 [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
3213 [GCC_UFS_PHY_RX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_rx_symbol_0_clk_src.clkr,
3214 [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
3215 [GCC_UFS_PHY_RX_SYMBOL_1_CLK_SRC] = &gcc_ufs_phy_rx_symbol_1_clk_src.clkr,
3216 [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
3217 [GCC_UFS_PHY_TX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_tx_symbol_0_clk_src.clkr,
3218 [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
3219 [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_phy_unipro_core_clk_src.clkr,
3220 [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] = &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr,
3221 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
3222 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
3223 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
3224 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr,
3225 [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,
3226 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
3227 [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
3228 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
3229 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
3230 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
3231 [GCC_USB3_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb3_prim_phy_pipe_clk_src.clkr,
3232 [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
3233 [GCC_VIDEO_AXI1_CLK] = &gcc_video_axi1_clk.clkr,
3236 static const struct qcom_reset_map gcc_sm8550_resets[] = {
3237 [GCC_CAMERA_BCR] = { 0x26000 },
3238 [GCC_DISPLAY_BCR] = { 0x27000 },
3239 [GCC_GPU_BCR] = { 0x71000 },
3240 [GCC_PCIE_0_BCR] = { 0x6b000 },
3241 [GCC_PCIE_0_LINK_DOWN_BCR] = { 0x6c014 },
3242 [GCC_PCIE_0_NOCSR_COM_PHY_BCR] = { 0x6c020 },
3243 [GCC_PCIE_0_PHY_BCR] = { 0x6c01c },
3244 [GCC_PCIE_0_PHY_NOCSR_COM_PHY_BCR] = { 0x6c028 },
3245 [GCC_PCIE_1_BCR] = { 0x8d000 },
3246 [GCC_PCIE_1_LINK_DOWN_BCR] = { 0x8e014 },
3247 [GCC_PCIE_1_NOCSR_COM_PHY_BCR] = { 0x8e020 },
3248 [GCC_PCIE_1_PHY_BCR] = { 0x8e01c },
3249 [GCC_PCIE_1_PHY_NOCSR_COM_PHY_BCR] = { 0x8e024 },
3250 [GCC_PCIE_PHY_BCR] = { 0x6f000 },
3251 [GCC_PCIE_PHY_CFG_AHB_BCR] = { 0x6f00c },
3252 [GCC_PCIE_PHY_COM_BCR] = { 0x6f010 },
3253 [GCC_PDM_BCR] = { 0x33000 },
3254 [GCC_QUPV3_WRAPPER_1_BCR] = { 0x18000 },
3255 [GCC_QUPV3_WRAPPER_2_BCR] = { 0x1e000 },
3256 [GCC_QUPV3_WRAPPER_I2C_BCR] = { 0x17000 },
3257 [GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 },
3258 [GCC_QUSB2PHY_SEC_BCR] = { 0x12004 },
3259 [GCC_SDCC2_BCR] = { 0x14000 },
3260 [GCC_SDCC4_BCR] = { 0x16000 },
3261 [GCC_UFS_PHY_BCR] = { 0x77000 },
3262 [GCC_USB30_PRIM_BCR] = { 0x39000 },
3263 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x50008 },
3264 [GCC_USB3_DP_PHY_SEC_BCR] = { 0x50014 },
3265 [GCC_USB3_PHY_PRIM_BCR] = { 0x50000 },
3266 [GCC_USB3_PHY_SEC_BCR] = { 0x5000c },
3267 [GCC_USB3PHY_PHY_PRIM_BCR] = { 0x50004 },
3268 [GCC_USB3PHY_PHY_SEC_BCR] = { 0x50010 },
3269 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 },
3270 [GCC_VIDEO_AXI0_CLK_ARES] = { 0x32018, 2 },
3271 [GCC_VIDEO_AXI1_CLK_ARES] = { 0x32024, 2 },
3272 [GCC_VIDEO_BCR] = { 0x32000 },
3275 static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
3276 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
3277 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
3278 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),
3279 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
3280 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
3281 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
3282 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src),
3283 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s7_clk_src),
3284 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s0_clk_src),
3285 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s1_clk_src),
3286 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s2_clk_src),
3287 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s3_clk_src),
3288 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s4_clk_src),
3289 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s5_clk_src),
3290 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s6_clk_src),
3291 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s7_clk_src),
3294 static struct gdsc *gcc_sm8550_gdscs[] = {
3295 [PCIE_0_GDSC] = &pcie_0_gdsc,
3296 [PCIE_0_PHY_GDSC] = &pcie_0_phy_gdsc,
3297 [PCIE_1_GDSC] = &pcie_1_gdsc,
3298 [PCIE_1_PHY_GDSC] = &pcie_1_phy_gdsc,
3299 [UFS_PHY_GDSC] = &ufs_phy_gdsc,
3300 [UFS_MEM_PHY_GDSC] = &ufs_mem_phy_gdsc,
3301 [USB30_PRIM_GDSC] = &usb30_prim_gdsc,
3302 [USB3_PHY_GDSC] = &usb3_phy_gdsc,
3305 static const struct regmap_config gcc_sm8550_regmap_config = {
3309 .max_register = 0x1f41f0,
3313 static const struct qcom_cc_desc gcc_sm8550_desc = {
3314 .config = &gcc_sm8550_regmap_config,
3315 .clks = gcc_sm8550_clocks,
3316 .num_clks = ARRAY_SIZE(gcc_sm8550_clocks),
3317 .resets = gcc_sm8550_resets,
3318 .num_resets = ARRAY_SIZE(gcc_sm8550_resets),
3319 .gdscs = gcc_sm8550_gdscs,
3320 .num_gdscs = ARRAY_SIZE(gcc_sm8550_gdscs),
3323 static const struct of_device_id gcc_sm8550_match_table[] = {
3324 { .compatible = "qcom,sm8550-gcc" },
3327 MODULE_DEVICE_TABLE(of, gcc_sm8550_match_table);
3329 static int gcc_sm8550_probe(struct platform_device *pdev)
3331 struct regmap *regmap;
3334 regmap = qcom_cc_map(pdev, &gcc_sm8550_desc);
3336 return PTR_ERR(regmap);
3338 ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
3339 ARRAY_SIZE(gcc_dfs_clocks));
3343 /* FORCE_MEM_CORE_ON for ufs phy ice core clocks */
3344 regmap_update_bits(regmap, gcc_ufs_phy_ice_core_clk.halt_reg, BIT(14), BIT(14));
3347 * Keep the critical clock always-On
3348 * gcc_camera_ahb_clk, gcc_camera_xo_clk, gcc_disp_ahb_clk,
3349 * gcc_disp_xo_clk, gcc_gpu_cfg_ahb_clk, gcc_video_ahb_clk,
3352 regmap_update_bits(regmap, 0x26004, BIT(0), BIT(0));
3353 regmap_update_bits(regmap, 0x26028, BIT(0), BIT(0));
3354 regmap_update_bits(regmap, 0x27004, BIT(0), BIT(0));
3355 regmap_update_bits(regmap, 0x27018, BIT(0), BIT(0));
3356 regmap_update_bits(regmap, 0x71004, BIT(0), BIT(0));
3357 regmap_update_bits(regmap, 0x32004, BIT(0), BIT(0));
3358 regmap_update_bits(regmap, 0x32030, BIT(0), BIT(0));
3360 /* Clear GDSC_SLEEP_ENA_VOTE to stop votes being auto-removed in sleep. */
3361 regmap_write(regmap, 0x52024, 0x0);
3363 return qcom_cc_really_probe(pdev, &gcc_sm8550_desc, regmap);
3366 static struct platform_driver gcc_sm8550_driver = {
3367 .probe = gcc_sm8550_probe,
3369 .name = "gcc-sm8550",
3370 .of_match_table = gcc_sm8550_match_table,
3374 static int __init gcc_sm8550_init(void)
3376 return platform_driver_register(&gcc_sm8550_driver);
3378 subsys_initcall(gcc_sm8550_init);
3380 static void __exit gcc_sm8550_exit(void)
3382 platform_driver_unregister(&gcc_sm8550_driver);
3384 module_exit(gcc_sm8550_exit);
3386 MODULE_DESCRIPTION("QTI GCC SM8550 Driver");
3387 MODULE_LICENSE("GPL");