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"
29 P_SM8475_GCC_GPLL2_OUT_EVEN,
30 P_SM8475_GCC_GPLL3_OUT_EVEN,
35 P_UFS_PHY_RX_SYMBOL_0_CLK,
36 P_UFS_PHY_RX_SYMBOL_1_CLK,
37 P_UFS_PHY_TX_SYMBOL_0_CLK,
38 P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
41 static struct clk_init_data sm8475_gcc_gpll0_init = {
43 .parent_data = &(const struct clk_parent_data){
47 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
50 static struct clk_alpha_pll gcc_gpll0 = {
52 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
54 .enable_reg = 0x62018,
55 .enable_mask = BIT(0),
56 .hw.init = &(struct clk_init_data){
58 .parent_data = &(const struct clk_parent_data){
62 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
67 static struct clk_init_data sm8475_gcc_gpll0_out_even_init = {
68 .name = "gcc_gpll0_out_even",
69 .parent_hws = (const struct clk_hw*[]) {
73 .ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
76 static const struct clk_div_table post_div_table_gcc_gpll0_out_even[] = {
81 static struct clk_alpha_pll_postdiv gcc_gpll0_out_even = {
84 .post_div_table = post_div_table_gcc_gpll0_out_even,
85 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
87 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
88 .clkr.hw.init = &(struct clk_init_data){
89 .name = "gcc_gpll0_out_even",
90 .parent_hws = (const struct clk_hw*[]) {
94 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
98 static struct clk_alpha_pll sm8475_gcc_gpll2 = {
100 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
102 .enable_reg = 0x62018,
103 .enable_mask = BIT(2),
104 .hw.init = &(struct clk_init_data){
106 .parent_data = &(const struct clk_parent_data){
107 .fw_name = "bi_tcxo",
110 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
115 static struct clk_alpha_pll sm8475_gcc_gpll3 = {
117 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
119 .enable_reg = 0x62018,
120 .enable_mask = BIT(3),
121 .hw.init = &(struct clk_init_data){
123 .parent_data = &(const struct clk_parent_data){
124 .fw_name = "bi_tcxo",
127 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
132 static struct clk_init_data sm8475_gcc_gpll4_init = {
134 .parent_data = &(const struct clk_parent_data){
135 .fw_name = "bi_tcxo",
138 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
141 static struct clk_alpha_pll gcc_gpll4 = {
143 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
145 .enable_reg = 0x62018,
146 .enable_mask = BIT(4),
147 .hw.init = &(struct clk_init_data){
149 .parent_data = &(const struct clk_parent_data){
150 .fw_name = "bi_tcxo",
153 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
158 static struct clk_init_data sm8475_gcc_gpll9_init = {
160 .parent_data = &(const struct clk_parent_data){
161 .fw_name = "bi_tcxo",
164 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
167 static struct clk_alpha_pll gcc_gpll9 = {
169 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
171 .enable_reg = 0x62018,
172 .enable_mask = BIT(9),
173 .hw.init = &(struct clk_init_data){
175 .parent_data = &(const struct clk_parent_data){
176 .fw_name = "bi_tcxo",
179 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
184 static const struct parent_map gcc_parent_map_0[] = {
186 { P_GCC_GPLL0_OUT_MAIN, 1 },
187 { P_GCC_GPLL0_OUT_EVEN, 6 },
190 static const struct clk_parent_data gcc_parent_data_0[] = {
191 { .fw_name = "bi_tcxo" },
192 { .hw = &gcc_gpll0.clkr.hw },
193 { .hw = &gcc_gpll0_out_even.clkr.hw },
196 static const struct parent_map gcc_parent_map_1[] = {
198 { P_GCC_GPLL0_OUT_MAIN, 1 },
200 { P_GCC_GPLL0_OUT_EVEN, 6 },
203 static const struct clk_parent_data gcc_parent_data_1[] = {
204 { .fw_name = "bi_tcxo" },
205 { .hw = &gcc_gpll0.clkr.hw },
206 { .fw_name = "sleep_clk" },
207 { .hw = &gcc_gpll0_out_even.clkr.hw },
210 static const struct parent_map gcc_parent_map_2[] = {
215 static const struct clk_parent_data gcc_parent_data_2[] = {
216 { .fw_name = "bi_tcxo" },
217 { .fw_name = "sleep_clk" },
220 static const struct parent_map gcc_parent_map_3[] = {
224 static const struct clk_parent_data gcc_parent_data_3[] = {
225 { .fw_name = "bi_tcxo" },
228 static const struct parent_map sm8475_gcc_parent_map_3[] = {
230 { P_GCC_GPLL0_OUT_MAIN, 1 },
231 { P_SM8475_GCC_GPLL2_OUT_EVEN, 2 },
232 { P_SM8475_GCC_GPLL3_OUT_EVEN, 3 },
233 { P_GCC_GPLL0_OUT_EVEN, 6 },
236 static const struct clk_parent_data sm8475_gcc_parent_data_3[] = {
237 { .fw_name = "bi_tcxo" },
238 { .hw = &gcc_gpll0.clkr.hw },
239 { .hw = &sm8475_gcc_gpll2.clkr.hw },
240 { .hw = &sm8475_gcc_gpll3.clkr.hw },
241 { .hw = &gcc_gpll0_out_even.clkr.hw },
244 static const struct parent_map gcc_parent_map_5[] = {
245 { P_PCIE_1_PHY_AUX_CLK, 0 },
249 static const struct clk_parent_data gcc_parent_data_5[] = {
250 { .fw_name = "pcie_1_phy_aux_clk" },
251 { .fw_name = "bi_tcxo" },
254 static const struct parent_map gcc_parent_map_7[] = {
256 { P_GCC_GPLL0_OUT_MAIN, 1 },
257 { P_GCC_GPLL9_OUT_MAIN, 2 },
258 { P_GCC_GPLL4_OUT_MAIN, 5 },
259 { P_GCC_GPLL0_OUT_EVEN, 6 },
262 static const struct clk_parent_data gcc_parent_data_7[] = {
263 { .fw_name = "bi_tcxo" },
264 { .hw = &gcc_gpll0.clkr.hw },
265 { .hw = &gcc_gpll9.clkr.hw },
266 { .hw = &gcc_gpll4.clkr.hw },
267 { .hw = &gcc_gpll0_out_even.clkr.hw },
270 static const struct parent_map gcc_parent_map_8[] = {
271 { P_UFS_PHY_RX_SYMBOL_0_CLK, 0 },
275 static const struct clk_parent_data gcc_parent_data_8[] = {
276 { .fw_name = "ufs_phy_rx_symbol_0_clk" },
277 { .fw_name = "bi_tcxo" },
280 static const struct parent_map gcc_parent_map_9[] = {
281 { P_UFS_PHY_RX_SYMBOL_1_CLK, 0 },
285 static const struct clk_parent_data gcc_parent_data_9[] = {
286 { .fw_name = "ufs_phy_rx_symbol_1_clk" },
287 { .fw_name = "bi_tcxo" },
290 static const struct parent_map gcc_parent_map_10[] = {
291 { P_UFS_PHY_TX_SYMBOL_0_CLK, 0 },
295 static const struct clk_parent_data gcc_parent_data_10[] = {
296 { .fw_name = "ufs_phy_tx_symbol_0_clk" },
297 { .fw_name = "bi_tcxo" },
300 static const struct parent_map gcc_parent_map_11[] = {
301 { P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 0 },
305 static const struct clk_parent_data gcc_parent_data_11[] = {
306 { .fw_name = "usb3_phy_wrapper_gcc_usb30_pipe_clk" },
307 { .fw_name = "bi_tcxo" },
310 static struct clk_regmap_phy_mux gcc_pcie_0_pipe_clk_src = {
313 .hw.init = &(struct clk_init_data){
314 .name = "gcc_pcie_0_pipe_clk_src",
315 .parent_data = &(const struct clk_parent_data){
316 .fw_name = "pcie_0_pipe_clk",
319 .ops = &clk_regmap_phy_mux_ops,
324 static struct clk_regmap_mux gcc_pcie_1_phy_aux_clk_src = {
328 .parent_map = gcc_parent_map_5,
330 .hw.init = &(struct clk_init_data){
331 .name = "gcc_pcie_1_phy_aux_clk_src",
332 .parent_data = gcc_parent_data_5,
333 .num_parents = ARRAY_SIZE(gcc_parent_data_5),
334 .ops = &clk_regmap_mux_closest_ops,
339 static struct clk_regmap_phy_mux gcc_pcie_1_pipe_clk_src = {
342 .hw.init = &(struct clk_init_data){
343 .name = "gcc_pcie_1_pipe_clk_src",
344 .parent_data = &(const struct clk_parent_data){
345 .fw_name = "pcie_1_pipe_clk",
348 .ops = &clk_regmap_phy_mux_ops,
353 static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_0_clk_src = {
357 .parent_map = gcc_parent_map_8,
359 .hw.init = &(struct clk_init_data){
360 .name = "gcc_ufs_phy_rx_symbol_0_clk_src",
361 .parent_data = gcc_parent_data_8,
362 .num_parents = ARRAY_SIZE(gcc_parent_data_8),
363 .ops = &clk_regmap_mux_closest_ops,
368 static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_1_clk_src = {
372 .parent_map = gcc_parent_map_9,
374 .hw.init = &(struct clk_init_data){
375 .name = "gcc_ufs_phy_rx_symbol_1_clk_src",
376 .parent_data = gcc_parent_data_9,
377 .num_parents = ARRAY_SIZE(gcc_parent_data_9),
378 .ops = &clk_regmap_mux_closest_ops,
383 static struct clk_regmap_mux gcc_ufs_phy_tx_symbol_0_clk_src = {
387 .parent_map = gcc_parent_map_10,
389 .hw.init = &(struct clk_init_data){
390 .name = "gcc_ufs_phy_tx_symbol_0_clk_src",
391 .parent_data = gcc_parent_data_10,
392 .num_parents = ARRAY_SIZE(gcc_parent_data_10),
393 .ops = &clk_regmap_mux_closest_ops,
398 static struct clk_regmap_mux gcc_usb3_prim_phy_pipe_clk_src = {
402 .parent_map = gcc_parent_map_11,
404 .hw.init = &(struct clk_init_data){
405 .name = "gcc_usb3_prim_phy_pipe_clk_src",
406 .parent_data = gcc_parent_data_11,
407 .num_parents = ARRAY_SIZE(gcc_parent_data_11),
408 .ops = &clk_regmap_mux_closest_ops,
413 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
414 F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
415 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
416 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
420 static struct clk_rcg2 gcc_gp1_clk_src = {
424 .parent_map = gcc_parent_map_1,
425 .freq_tbl = ftbl_gcc_gp1_clk_src,
427 .clkr.hw.init = &(struct clk_init_data){
428 .name = "gcc_gp1_clk_src",
429 .parent_data = gcc_parent_data_1,
430 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
431 .flags = CLK_SET_RATE_PARENT,
432 .ops = &clk_rcg2_ops,
436 static struct clk_rcg2 gcc_gp2_clk_src = {
440 .parent_map = gcc_parent_map_1,
441 .freq_tbl = ftbl_gcc_gp1_clk_src,
443 .clkr.hw.init = &(struct clk_init_data){
444 .name = "gcc_gp2_clk_src",
445 .parent_data = gcc_parent_data_1,
446 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
447 .flags = CLK_SET_RATE_PARENT,
448 .ops = &clk_rcg2_ops,
452 static struct clk_rcg2 gcc_gp3_clk_src = {
456 .parent_map = gcc_parent_map_1,
457 .freq_tbl = ftbl_gcc_gp1_clk_src,
459 .clkr.hw.init = &(struct clk_init_data){
460 .name = "gcc_gp3_clk_src",
461 .parent_data = gcc_parent_data_1,
462 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
463 .flags = CLK_SET_RATE_PARENT,
464 .ops = &clk_rcg2_ops,
468 static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
469 F(19200000, P_BI_TCXO, 1, 0, 0),
473 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
477 .parent_map = gcc_parent_map_2,
478 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
480 .clkr.hw.init = &(struct clk_init_data){
481 .name = "gcc_pcie_0_aux_clk_src",
482 .parent_data = gcc_parent_data_2,
483 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
484 .flags = CLK_SET_RATE_PARENT,
485 .ops = &clk_rcg2_ops,
489 static const struct freq_tbl ftbl_gcc_pcie_0_phy_rchng_clk_src[] = {
490 F(19200000, P_BI_TCXO, 1, 0, 0),
491 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
495 static struct clk_rcg2 gcc_pcie_0_phy_rchng_clk_src = {
499 .parent_map = gcc_parent_map_0,
500 .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
502 .clkr.hw.init = &(struct clk_init_data){
503 .name = "gcc_pcie_0_phy_rchng_clk_src",
504 .parent_data = gcc_parent_data_0,
505 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
506 .flags = CLK_SET_RATE_PARENT,
507 .ops = &clk_rcg2_ops,
511 static struct clk_rcg2 gcc_pcie_1_aux_clk_src = {
515 .parent_map = gcc_parent_map_2,
516 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
518 .clkr.hw.init = &(struct clk_init_data){
519 .name = "gcc_pcie_1_aux_clk_src",
520 .parent_data = gcc_parent_data_2,
521 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
522 .flags = CLK_SET_RATE_PARENT,
523 .ops = &clk_rcg2_ops,
527 static struct clk_rcg2 gcc_pcie_1_phy_rchng_clk_src = {
531 .parent_map = gcc_parent_map_0,
532 .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
534 .clkr.hw.init = &(struct clk_init_data){
535 .name = "gcc_pcie_1_phy_rchng_clk_src",
536 .parent_data = gcc_parent_data_0,
537 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
538 .flags = CLK_SET_RATE_PARENT,
539 .ops = &clk_rcg2_ops,
543 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
544 F(60000000, P_GCC_GPLL0_OUT_MAIN, 10, 0, 0),
548 static struct clk_rcg2 gcc_pdm2_clk_src = {
552 .parent_map = gcc_parent_map_0,
553 .freq_tbl = ftbl_gcc_pdm2_clk_src,
555 .clkr.hw.init = &(struct clk_init_data){
556 .name = "gcc_pdm2_clk_src",
557 .parent_data = gcc_parent_data_0,
558 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
559 .flags = CLK_SET_RATE_PARENT,
560 .ops = &clk_rcg2_ops,
564 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
565 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
566 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
567 F(19200000, P_BI_TCXO, 1, 0, 0),
568 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
569 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
570 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
571 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
572 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
573 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
574 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
575 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
579 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
580 .name = "gcc_qupv3_wrap0_s0_clk_src",
581 .parent_data = gcc_parent_data_0,
582 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
583 .flags = CLK_SET_RATE_PARENT,
584 .ops = &clk_rcg2_ops,
587 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
591 .parent_map = gcc_parent_map_0,
592 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
594 .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
597 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
598 .name = "gcc_qupv3_wrap0_s1_clk_src",
599 .parent_data = gcc_parent_data_0,
600 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
601 .flags = CLK_SET_RATE_PARENT,
602 .ops = &clk_rcg2_ops,
605 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
609 .parent_map = gcc_parent_map_0,
610 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
612 .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
615 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
616 .name = "gcc_qupv3_wrap0_s2_clk_src",
617 .parent_data = gcc_parent_data_0,
618 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
619 .flags = CLK_SET_RATE_PARENT,
620 .ops = &clk_rcg2_ops,
623 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
627 .parent_map = gcc_parent_map_0,
628 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
630 .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
633 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
634 .name = "gcc_qupv3_wrap0_s3_clk_src",
635 .parent_data = gcc_parent_data_0,
636 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
637 .flags = CLK_SET_RATE_PARENT,
638 .ops = &clk_rcg2_ops,
641 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
645 .parent_map = gcc_parent_map_0,
646 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
648 .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
651 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
652 .name = "gcc_qupv3_wrap0_s4_clk_src",
653 .parent_data = gcc_parent_data_0,
654 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
655 .flags = CLK_SET_RATE_PARENT,
656 .ops = &clk_rcg2_ops,
659 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
663 .parent_map = gcc_parent_map_0,
664 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
666 .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
669 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s5_clk_src[] = {
670 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
671 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
672 F(19200000, P_BI_TCXO, 1, 0, 0),
673 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
674 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
675 F(37500000, P_GCC_GPLL0_OUT_EVEN, 8, 0, 0),
676 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
677 F(50000000, P_GCC_GPLL0_OUT_MAIN, 12, 0, 0),
681 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
682 .name = "gcc_qupv3_wrap0_s5_clk_src",
683 .parent_data = gcc_parent_data_0,
684 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
685 .flags = CLK_SET_RATE_PARENT,
686 .ops = &clk_rcg2_ops,
689 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
693 .parent_map = gcc_parent_map_0,
694 .freq_tbl = ftbl_gcc_qupv3_wrap0_s5_clk_src,
696 .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
699 static struct clk_init_data gcc_qupv3_wrap0_s6_clk_src_init = {
700 .name = "gcc_qupv3_wrap0_s6_clk_src",
701 .parent_data = gcc_parent_data_0,
702 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
703 .flags = CLK_SET_RATE_PARENT,
704 .ops = &clk_rcg2_ops,
707 static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
711 .parent_map = gcc_parent_map_0,
712 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
714 .clkr.hw.init = &gcc_qupv3_wrap0_s6_clk_src_init,
717 static struct clk_init_data gcc_qupv3_wrap0_s7_clk_src_init = {
718 .name = "gcc_qupv3_wrap0_s7_clk_src",
719 .parent_data = gcc_parent_data_0,
720 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
721 .flags = CLK_SET_RATE_PARENT,
722 .ops = &clk_rcg2_ops,
725 static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = {
729 .parent_map = gcc_parent_map_0,
730 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
732 .clkr.hw.init = &gcc_qupv3_wrap0_s7_clk_src_init,
735 static const struct freq_tbl ftbl_gcc_qupv3_wrap1_s0_clk_src[] = {
736 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
737 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
738 F(19200000, P_BI_TCXO, 1, 0, 0),
739 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
740 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
741 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
742 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
743 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
744 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
745 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
746 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
747 F(102400000, P_GCC_GPLL0_OUT_EVEN, 1, 128, 375),
748 F(112000000, P_GCC_GPLL0_OUT_EVEN, 1, 28, 75),
749 F(117964800, P_GCC_GPLL0_OUT_EVEN, 1, 6144, 15625),
750 F(120000000, P_GCC_GPLL0_OUT_MAIN, 5, 0, 0),
754 static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
755 .name = "gcc_qupv3_wrap1_s0_clk_src",
756 .parent_data = gcc_parent_data_0,
757 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
758 .flags = CLK_SET_RATE_PARENT,
759 .ops = &clk_rcg2_ops,
762 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
766 .parent_map = gcc_parent_map_0,
767 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
769 .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
772 static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
773 .name = "gcc_qupv3_wrap1_s1_clk_src",
774 .parent_data = gcc_parent_data_0,
775 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
776 .flags = CLK_SET_RATE_PARENT,
777 .ops = &clk_rcg2_ops,
780 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
784 .parent_map = gcc_parent_map_0,
785 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
787 .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
790 static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {
791 .name = "gcc_qupv3_wrap1_s2_clk_src",
792 .parent_data = gcc_parent_data_0,
793 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
794 .flags = CLK_SET_RATE_PARENT,
795 .ops = &clk_rcg2_ops,
798 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
802 .parent_map = gcc_parent_map_0,
803 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
805 .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,
808 static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
809 .name = "gcc_qupv3_wrap1_s3_clk_src",
810 .parent_data = gcc_parent_data_0,
811 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
812 .flags = CLK_SET_RATE_PARENT,
813 .ops = &clk_rcg2_ops,
816 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
820 .parent_map = gcc_parent_map_0,
821 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
823 .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
826 static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
827 .name = "gcc_qupv3_wrap1_s4_clk_src",
828 .parent_data = gcc_parent_data_0,
829 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
830 .flags = CLK_SET_RATE_PARENT,
831 .ops = &clk_rcg2_ops,
834 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
838 .parent_map = gcc_parent_map_0,
839 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
841 .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
844 static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
845 .name = "gcc_qupv3_wrap1_s5_clk_src",
846 .parent_data = gcc_parent_data_0,
847 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
848 .flags = CLK_SET_RATE_PARENT,
849 .ops = &clk_rcg2_ops,
852 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
856 .parent_map = gcc_parent_map_0,
857 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
859 .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
862 static struct clk_init_data gcc_qupv3_wrap1_s6_clk_src_init = {
863 .name = "gcc_qupv3_wrap1_s6_clk_src",
864 .parent_data = gcc_parent_data_0,
865 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
866 .flags = CLK_SET_RATE_PARENT,
867 .ops = &clk_rcg2_ops,
870 static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = {
874 .parent_map = gcc_parent_map_0,
875 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
877 .clkr.hw.init = &gcc_qupv3_wrap1_s6_clk_src_init,
880 static struct clk_init_data gcc_qupv3_wrap2_s0_clk_src_init = {
881 .name = "gcc_qupv3_wrap2_s0_clk_src",
882 .parent_data = gcc_parent_data_0,
883 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
884 .flags = CLK_SET_RATE_PARENT,
885 .ops = &clk_rcg2_ops,
888 static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = {
892 .parent_map = gcc_parent_map_0,
893 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
895 .clkr.hw.init = &gcc_qupv3_wrap2_s0_clk_src_init,
898 static struct clk_init_data gcc_qupv3_wrap2_s1_clk_src_init = {
899 .name = "gcc_qupv3_wrap2_s1_clk_src",
900 .parent_data = gcc_parent_data_0,
901 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
902 .flags = CLK_SET_RATE_PARENT,
903 .ops = &clk_rcg2_ops,
906 static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = {
910 .parent_map = gcc_parent_map_0,
911 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
913 .clkr.hw.init = &gcc_qupv3_wrap2_s1_clk_src_init,
916 static struct clk_init_data gcc_qupv3_wrap2_s2_clk_src_init = {
917 .name = "gcc_qupv3_wrap2_s2_clk_src",
918 .parent_data = gcc_parent_data_0,
919 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
920 .flags = CLK_SET_RATE_PARENT,
921 .ops = &clk_rcg2_ops,
924 static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src = {
928 .parent_map = gcc_parent_map_0,
929 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
931 .clkr.hw.init = &gcc_qupv3_wrap2_s2_clk_src_init,
934 static struct clk_init_data gcc_qupv3_wrap2_s3_clk_src_init = {
935 .name = "gcc_qupv3_wrap2_s3_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_s3_clk_src = {
946 .parent_map = gcc_parent_map_0,
947 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
949 .clkr.hw.init = &gcc_qupv3_wrap2_s3_clk_src_init,
952 static struct clk_init_data gcc_qupv3_wrap2_s4_clk_src_init = {
953 .name = "gcc_qupv3_wrap2_s4_clk_src",
954 .parent_data = gcc_parent_data_0,
955 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
956 .flags = CLK_SET_RATE_PARENT,
957 .ops = &clk_rcg2_ops,
960 static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = {
964 .parent_map = gcc_parent_map_0,
965 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
967 .clkr.hw.init = &gcc_qupv3_wrap2_s4_clk_src_init,
970 static struct clk_init_data gcc_qupv3_wrap2_s5_clk_src_init = {
971 .name = "gcc_qupv3_wrap2_s5_clk_src",
972 .parent_data = gcc_parent_data_0,
973 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
974 .flags = CLK_SET_RATE_PARENT,
975 .ops = &clk_rcg2_ops,
978 static struct clk_rcg2 gcc_qupv3_wrap2_s5_clk_src = {
982 .parent_map = gcc_parent_map_0,
983 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
985 .clkr.hw.init = &gcc_qupv3_wrap2_s5_clk_src_init,
988 static struct clk_init_data gcc_qupv3_wrap2_s6_clk_src_init = {
989 .name = "gcc_qupv3_wrap2_s6_clk_src",
990 .parent_data = gcc_parent_data_0,
991 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
992 .flags = CLK_SET_RATE_PARENT,
993 .ops = &clk_rcg2_ops,
996 static struct clk_rcg2 gcc_qupv3_wrap2_s6_clk_src = {
1000 .parent_map = gcc_parent_map_0,
1001 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1002 .hw_clk_ctrl = true,
1003 .clkr.hw.init = &gcc_qupv3_wrap2_s6_clk_src_init,
1006 static const struct freq_tbl sm8475_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(37000000, P_GCC_GPLL9_OUT_MAIN, 16, 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(148000000, P_GCC_GPLL9_OUT_MAIN, 4, 0, 0),
1016 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
1017 F(400000, P_BI_TCXO, 12, 1, 4),
1018 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
1019 F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
1020 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
1021 F(202000000, P_GCC_GPLL9_OUT_MAIN, 4, 0, 0),
1025 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
1026 .cmd_rcgr = 0x24014,
1029 .parent_map = gcc_parent_map_7,
1030 .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
1031 .hw_clk_ctrl = true,
1032 .clkr.hw.init = &(struct clk_init_data){
1033 .name = "gcc_sdcc2_apps_clk_src",
1034 .parent_data = gcc_parent_data_7,
1035 .num_parents = ARRAY_SIZE(gcc_parent_data_7),
1036 .flags = CLK_SET_RATE_PARENT,
1037 .ops = &clk_rcg2_floor_ops,
1041 static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = {
1042 F(400000, P_BI_TCXO, 12, 1, 4),
1043 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
1044 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
1048 static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {
1049 .cmd_rcgr = 0x26014,
1052 .parent_map = gcc_parent_map_0,
1053 .freq_tbl = ftbl_gcc_sdcc4_apps_clk_src,
1054 .hw_clk_ctrl = true,
1055 .clkr.hw.init = &(struct clk_init_data){
1056 .name = "gcc_sdcc4_apps_clk_src",
1057 .parent_data = gcc_parent_data_0,
1058 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1059 .flags = CLK_SET_RATE_PARENT,
1060 .ops = &clk_rcg2_floor_ops,
1064 static const struct freq_tbl sm8475_ftbl_gcc_ufs_phy_axi_clk_src[] = {
1065 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
1066 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
1067 F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0),
1068 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
1069 F(600000000, P_GCC_GPLL0_OUT_MAIN, 1, 0, 0),
1070 F(806400000, P_SM8475_GCC_GPLL2_OUT_EVEN, 1, 0, 0),
1071 F(850000000, P_SM8475_GCC_GPLL2_OUT_EVEN, 1, 0, 0),
1075 static struct clk_init_data sm8475_gcc_ufs_phy_axi_clk_src_init = {
1076 .name = "gcc_ufs_phy_axi_clk_src",
1077 .parent_data = sm8475_gcc_parent_data_3,
1078 .num_parents = ARRAY_SIZE(sm8475_gcc_parent_map_3),
1079 .flags = CLK_SET_RATE_PARENT,
1080 .ops = &clk_rcg2_ops,
1083 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
1084 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
1085 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
1086 F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0),
1087 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
1091 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
1092 .cmd_rcgr = 0x8702c,
1095 .parent_map = gcc_parent_map_0,
1096 .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
1097 .hw_clk_ctrl = true,
1098 .clkr.hw.init = &(struct clk_init_data){
1099 .name = "gcc_ufs_phy_axi_clk_src",
1100 .parent_data = gcc_parent_data_0,
1101 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1102 .flags = CLK_SET_RATE_PARENT,
1103 .ops = &clk_rcg2_ops,
1107 static const struct freq_tbl sm8475_ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
1108 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
1109 F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0),
1110 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
1111 F(600000000, P_GCC_GPLL0_OUT_MAIN, 1, 0, 0),
1112 F(806400000, P_SM8475_GCC_GPLL2_OUT_EVEN, 1, 0, 0),
1113 F(850000000, P_SM8475_GCC_GPLL2_OUT_EVEN, 1, 0, 0),
1117 static struct clk_init_data sm8475_gcc_ufs_phy_ice_core_clk_src_init = {
1118 .name = "gcc_ufs_phy_ice_core_clk_src",
1119 .parent_data = sm8475_gcc_parent_data_3,
1120 .num_parents = ARRAY_SIZE(sm8475_gcc_parent_map_3),
1121 .flags = CLK_SET_RATE_PARENT,
1122 .ops = &clk_rcg2_ops,
1125 static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
1126 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
1127 F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0),
1128 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
1132 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
1133 .cmd_rcgr = 0x87074,
1136 .parent_map = gcc_parent_map_0,
1137 .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
1138 .hw_clk_ctrl = true,
1139 .clkr.hw.init = &(struct clk_init_data){
1140 .name = "gcc_ufs_phy_ice_core_clk_src",
1141 .parent_data = gcc_parent_data_0,
1142 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1143 .flags = CLK_SET_RATE_PARENT,
1144 .ops = &clk_rcg2_ops,
1148 static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = {
1149 F(9600000, P_BI_TCXO, 2, 0, 0),
1150 F(19200000, P_BI_TCXO, 1, 0, 0),
1154 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
1155 .cmd_rcgr = 0x870a8,
1158 .parent_map = gcc_parent_map_3,
1159 .freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src,
1160 .hw_clk_ctrl = true,
1161 .clkr.hw.init = &(struct clk_init_data){
1162 .name = "gcc_ufs_phy_phy_aux_clk_src",
1163 .parent_data = gcc_parent_data_3,
1164 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
1165 .flags = CLK_SET_RATE_PARENT,
1166 .ops = &clk_rcg2_ops,
1170 static struct clk_init_data sm8475_gcc_ufs_phy_unipro_core_clk_src_init = {
1171 .name = "gcc_ufs_phy_unipro_core_clk_src",
1172 .parent_data = sm8475_gcc_parent_data_3,
1173 .num_parents = ARRAY_SIZE(sm8475_gcc_parent_map_3),
1174 .flags = CLK_SET_RATE_PARENT,
1175 .ops = &clk_rcg2_ops,
1178 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
1179 .cmd_rcgr = 0x8708c,
1182 .parent_map = gcc_parent_map_0,
1183 .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
1184 .hw_clk_ctrl = true,
1185 .clkr.hw.init = &(struct clk_init_data){
1186 .name = "gcc_ufs_phy_unipro_core_clk_src",
1187 .parent_data = gcc_parent_data_0,
1188 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1189 .flags = CLK_SET_RATE_PARENT,
1190 .ops = &clk_rcg2_ops,
1194 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
1195 F(66666667, P_GCC_GPLL0_OUT_EVEN, 4.5, 0, 0),
1196 F(133333333, P_GCC_GPLL0_OUT_MAIN, 4.5, 0, 0),
1197 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
1198 F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0),
1202 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1203 .cmd_rcgr = 0x49028,
1206 .parent_map = gcc_parent_map_0,
1207 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1208 .hw_clk_ctrl = true,
1209 .clkr.hw.init = &(struct clk_init_data){
1210 .name = "gcc_usb30_prim_master_clk_src",
1211 .parent_data = gcc_parent_data_0,
1212 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1213 .flags = CLK_SET_RATE_PARENT,
1214 .ops = &clk_rcg2_ops,
1218 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1219 .cmd_rcgr = 0x49040,
1222 .parent_map = gcc_parent_map_0,
1223 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
1224 .hw_clk_ctrl = true,
1225 .clkr.hw.init = &(struct clk_init_data){
1226 .name = "gcc_usb30_prim_mock_utmi_clk_src",
1227 .parent_data = gcc_parent_data_0,
1228 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1229 .flags = CLK_SET_RATE_PARENT,
1230 .ops = &clk_rcg2_ops,
1234 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1235 .cmd_rcgr = 0x4906c,
1238 .parent_map = gcc_parent_map_2,
1239 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
1240 .hw_clk_ctrl = true,
1241 .clkr.hw.init = &(struct clk_init_data){
1242 .name = "gcc_usb3_prim_phy_aux_clk_src",
1243 .parent_data = gcc_parent_data_2,
1244 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
1245 .flags = CLK_SET_RATE_PARENT,
1246 .ops = &clk_rcg2_ops,
1250 static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {
1254 .clkr.hw.init = &(struct clk_init_data) {
1255 .name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",
1256 .parent_hws = (const struct clk_hw*[]) {
1257 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
1260 .flags = CLK_SET_RATE_PARENT,
1261 .ops = &clk_regmap_div_ro_ops,
1265 static struct clk_branch gcc_aggre_noc_pcie_0_axi_clk = {
1266 .halt_reg = 0x7b08c,
1267 .halt_check = BRANCH_HALT_SKIP,
1268 .hwcg_reg = 0x7b08c,
1271 .enable_reg = 0x62000,
1272 .enable_mask = BIT(12),
1273 .hw.init = &(struct clk_init_data){
1274 .name = "gcc_aggre_noc_pcie_0_axi_clk",
1275 .ops = &clk_branch2_ops,
1280 static struct clk_branch gcc_aggre_noc_pcie_1_axi_clk = {
1281 .halt_reg = 0x9d098,
1282 .halt_check = BRANCH_HALT_SKIP,
1283 .hwcg_reg = 0x9d098,
1286 .enable_reg = 0x62000,
1287 .enable_mask = BIT(11),
1288 .hw.init = &(struct clk_init_data){
1289 .name = "gcc_aggre_noc_pcie_1_axi_clk",
1290 .ops = &clk_branch2_ops,
1295 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
1296 .halt_reg = 0x870d4,
1297 .halt_check = BRANCH_HALT_VOTED,
1298 .hwcg_reg = 0x870d4,
1301 .enable_reg = 0x870d4,
1302 .enable_mask = BIT(0),
1303 .hw.init = &(struct clk_init_data){
1304 .name = "gcc_aggre_ufs_phy_axi_clk",
1305 .parent_hws = (const struct clk_hw*[]) {
1306 &gcc_ufs_phy_axi_clk_src.clkr.hw,
1309 .flags = CLK_SET_RATE_PARENT,
1310 .ops = &clk_branch2_ops,
1315 static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = {
1316 .halt_reg = 0x870d4,
1317 .halt_check = BRANCH_HALT_VOTED,
1318 .hwcg_reg = 0x870d4,
1321 .enable_reg = 0x870d4,
1322 .enable_mask = BIT(1),
1323 .hw.init = &(struct clk_init_data){
1324 .name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk",
1325 .parent_hws = (const struct clk_hw*[]) {
1326 &gcc_ufs_phy_axi_clk_src.clkr.hw,
1329 .flags = CLK_SET_RATE_PARENT,
1330 .ops = &clk_branch2_ops,
1335 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
1336 .halt_reg = 0x49088,
1337 .halt_check = BRANCH_HALT_VOTED,
1338 .hwcg_reg = 0x49088,
1341 .enable_reg = 0x49088,
1342 .enable_mask = BIT(0),
1343 .hw.init = &(struct clk_init_data){
1344 .name = "gcc_aggre_usb3_prim_axi_clk",
1345 .parent_hws = (const struct clk_hw*[]) {
1346 &gcc_usb30_prim_master_clk_src.clkr.hw,
1349 .flags = CLK_SET_RATE_PARENT,
1350 .ops = &clk_branch2_ops,
1355 static struct clk_branch gcc_boot_rom_ahb_clk = {
1356 .halt_reg = 0x48004,
1357 .halt_check = BRANCH_HALT_VOTED,
1358 .hwcg_reg = 0x48004,
1361 .enable_reg = 0x62000,
1362 .enable_mask = BIT(10),
1363 .hw.init = &(struct clk_init_data){
1364 .name = "gcc_boot_rom_ahb_clk",
1365 .ops = &clk_branch2_ops,
1370 static struct clk_branch gcc_camera_hf_axi_clk = {
1371 .halt_reg = 0x36010,
1372 .halt_check = BRANCH_HALT_SKIP,
1373 .hwcg_reg = 0x36010,
1376 .enable_reg = 0x36010,
1377 .enable_mask = BIT(0),
1378 .hw.init = &(struct clk_init_data){
1379 .name = "gcc_camera_hf_axi_clk",
1380 .ops = &clk_branch2_ops,
1385 static struct clk_branch gcc_camera_sf_axi_clk = {
1386 .halt_reg = 0x36018,
1387 .halt_check = BRANCH_HALT_SKIP,
1388 .hwcg_reg = 0x36018,
1391 .enable_reg = 0x36018,
1392 .enable_mask = BIT(0),
1393 .hw.init = &(struct clk_init_data){
1394 .name = "gcc_camera_sf_axi_clk",
1395 .ops = &clk_branch2_ops,
1400 static struct clk_branch gcc_cfg_noc_pcie_anoc_ahb_clk = {
1401 .halt_reg = 0x20030,
1402 .halt_check = BRANCH_HALT_VOTED,
1403 .hwcg_reg = 0x20030,
1406 .enable_reg = 0x62000,
1407 .enable_mask = BIT(20),
1408 .hw.init = &(struct clk_init_data){
1409 .name = "gcc_cfg_noc_pcie_anoc_ahb_clk",
1410 .ops = &clk_branch2_ops,
1415 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1416 .halt_reg = 0x49084,
1417 .halt_check = BRANCH_HALT_VOTED,
1418 .hwcg_reg = 0x49084,
1421 .enable_reg = 0x49084,
1422 .enable_mask = BIT(0),
1423 .hw.init = &(struct clk_init_data){
1424 .name = "gcc_cfg_noc_usb3_prim_axi_clk",
1425 .parent_hws = (const struct clk_hw*[]) {
1426 &gcc_usb30_prim_master_clk_src.clkr.hw,
1429 .flags = CLK_SET_RATE_PARENT,
1430 .ops = &clk_branch2_ops,
1435 static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1436 .halt_reg = 0x81154,
1437 .halt_check = BRANCH_HALT_SKIP,
1438 .hwcg_reg = 0x81154,
1441 .enable_reg = 0x81154,
1442 .enable_mask = BIT(0),
1443 .hw.init = &(struct clk_init_data){
1444 .name = "gcc_ddrss_gpu_axi_clk",
1445 .ops = &clk_branch2_aon_ops,
1450 static struct clk_branch gcc_ddrss_pcie_sf_tbu_clk = {
1451 .halt_reg = 0x9d094,
1452 .halt_check = BRANCH_HALT_SKIP,
1453 .hwcg_reg = 0x9d094,
1456 .enable_reg = 0x62000,
1457 .enable_mask = BIT(19),
1458 .hw.init = &(struct clk_init_data){
1459 .name = "gcc_ddrss_pcie_sf_tbu_clk",
1460 .ops = &clk_branch2_ops,
1465 static struct clk_branch gcc_disp_hf_axi_clk = {
1466 .halt_reg = 0x3700c,
1467 .halt_check = BRANCH_HALT_SKIP,
1468 .hwcg_reg = 0x3700c,
1471 .enable_reg = 0x3700c,
1472 .enable_mask = BIT(0),
1473 .hw.init = &(struct clk_init_data){
1474 .name = "gcc_disp_hf_axi_clk",
1475 .ops = &clk_branch2_ops,
1480 static struct clk_branch gcc_disp_sf_axi_clk = {
1481 .halt_reg = 0x37014,
1482 .halt_check = BRANCH_HALT_SKIP,
1483 .hwcg_reg = 0x37014,
1486 .enable_reg = 0x37014,
1487 .enable_mask = BIT(0),
1488 .hw.init = &(struct clk_init_data){
1489 .name = "gcc_disp_sf_axi_clk",
1490 .ops = &clk_branch2_ops,
1495 static struct clk_branch gcc_eusb3_0_clkref_en = {
1496 .halt_reg = 0x9c00c,
1497 .halt_check = BRANCH_HALT,
1499 .enable_reg = 0x9c00c,
1500 .enable_mask = BIT(0),
1501 .hw.init = &(struct clk_init_data){
1502 .name = "gcc_eusb3_0_clkref_en",
1503 .ops = &clk_branch2_ops,
1508 static struct clk_branch gcc_gp1_clk = {
1509 .halt_reg = 0x74000,
1510 .halt_check = BRANCH_HALT,
1512 .enable_reg = 0x74000,
1513 .enable_mask = BIT(0),
1514 .hw.init = &(struct clk_init_data){
1515 .name = "gcc_gp1_clk",
1516 .parent_hws = (const struct clk_hw*[]) {
1517 &gcc_gp1_clk_src.clkr.hw,
1520 .flags = CLK_SET_RATE_PARENT,
1521 .ops = &clk_branch2_ops,
1526 static struct clk_branch gcc_gp2_clk = {
1527 .halt_reg = 0x75000,
1528 .halt_check = BRANCH_HALT,
1530 .enable_reg = 0x75000,
1531 .enable_mask = BIT(0),
1532 .hw.init = &(struct clk_init_data){
1533 .name = "gcc_gp2_clk",
1534 .parent_hws = (const struct clk_hw*[]) {
1535 &gcc_gp2_clk_src.clkr.hw,
1538 .flags = CLK_SET_RATE_PARENT,
1539 .ops = &clk_branch2_ops,
1544 static struct clk_branch gcc_gp3_clk = {
1545 .halt_reg = 0x76000,
1546 .halt_check = BRANCH_HALT,
1548 .enable_reg = 0x76000,
1549 .enable_mask = BIT(0),
1550 .hw.init = &(struct clk_init_data){
1551 .name = "gcc_gp3_clk",
1552 .parent_hws = (const struct clk_hw*[]) {
1553 &gcc_gp3_clk_src.clkr.hw,
1556 .flags = CLK_SET_RATE_PARENT,
1557 .ops = &clk_branch2_ops,
1562 static struct clk_branch gcc_gpu_gpll0_clk_src = {
1563 .halt_check = BRANCH_HALT_DELAY,
1565 .enable_reg = 0x62000,
1566 .enable_mask = BIT(15),
1567 .hw.init = &(struct clk_init_data){
1568 .name = "gcc_gpu_gpll0_clk_src",
1569 .parent_hws = (const struct clk_hw*[]) {
1573 .flags = CLK_SET_RATE_PARENT,
1574 .ops = &clk_branch2_ops,
1579 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
1580 .halt_check = BRANCH_HALT_DELAY,
1582 .enable_reg = 0x62000,
1583 .enable_mask = BIT(16),
1584 .hw.init = &(struct clk_init_data){
1585 .name = "gcc_gpu_gpll0_div_clk_src",
1586 .parent_hws = (const struct clk_hw*[]) {
1587 &gcc_gpll0_out_even.clkr.hw,
1590 .flags = CLK_SET_RATE_PARENT,
1591 .ops = &clk_branch2_ops,
1596 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
1597 .halt_reg = 0x81010,
1598 .halt_check = BRANCH_HALT_VOTED,
1599 .hwcg_reg = 0x81010,
1602 .enable_reg = 0x81010,
1603 .enable_mask = BIT(0),
1604 .hw.init = &(struct clk_init_data){
1605 .name = "gcc_gpu_memnoc_gfx_clk",
1606 .ops = &clk_branch2_ops,
1611 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
1612 .halt_reg = 0x81018,
1613 .halt_check = BRANCH_HALT_DELAY,
1615 .enable_reg = 0x81018,
1616 .enable_mask = BIT(0),
1617 .hw.init = &(struct clk_init_data){
1618 .name = "gcc_gpu_snoc_dvm_gfx_clk",
1619 .ops = &clk_branch2_ops,
1624 static struct clk_branch gcc_pcie_0_aux_clk = {
1625 .halt_reg = 0x7b034,
1626 .halt_check = BRANCH_HALT_VOTED,
1628 .enable_reg = 0x62008,
1629 .enable_mask = BIT(3),
1630 .hw.init = &(struct clk_init_data){
1631 .name = "gcc_pcie_0_aux_clk",
1632 .parent_hws = (const struct clk_hw*[]) {
1633 &gcc_pcie_0_aux_clk_src.clkr.hw,
1636 .flags = CLK_SET_RATE_PARENT,
1637 .ops = &clk_branch2_ops,
1642 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
1643 .halt_reg = 0x7b030,
1644 .halt_check = BRANCH_HALT_VOTED,
1645 .hwcg_reg = 0x7b030,
1648 .enable_reg = 0x62008,
1649 .enable_mask = BIT(2),
1650 .hw.init = &(struct clk_init_data){
1651 .name = "gcc_pcie_0_cfg_ahb_clk",
1652 .ops = &clk_branch2_ops,
1657 static struct clk_branch gcc_pcie_0_clkref_en = {
1658 .halt_reg = 0x9c004,
1659 .halt_check = BRANCH_HALT,
1661 .enable_reg = 0x9c004,
1662 .enable_mask = BIT(0),
1663 .hw.init = &(struct clk_init_data){
1664 .name = "gcc_pcie_0_clkref_en",
1665 .ops = &clk_branch2_ops,
1670 static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
1671 .halt_reg = 0x7b028,
1672 .halt_check = BRANCH_HALT_SKIP,
1674 .enable_reg = 0x62008,
1675 .enable_mask = BIT(1),
1676 .hw.init = &(struct clk_init_data){
1677 .name = "gcc_pcie_0_mstr_axi_clk",
1678 .ops = &clk_branch2_ops,
1683 static struct clk_branch gcc_pcie_0_phy_rchng_clk = {
1684 .halt_reg = 0x7b044,
1685 .halt_check = BRANCH_HALT_VOTED,
1687 .enable_reg = 0x62000,
1688 .enable_mask = BIT(22),
1689 .hw.init = &(struct clk_init_data){
1690 .name = "gcc_pcie_0_phy_rchng_clk",
1691 .parent_hws = (const struct clk_hw*[]) {
1692 &gcc_pcie_0_phy_rchng_clk_src.clkr.hw,
1695 .flags = CLK_SET_RATE_PARENT,
1696 .ops = &clk_branch2_ops,
1701 static struct clk_branch gcc_pcie_0_pipe_clk = {
1702 .halt_reg = 0x7b03c,
1703 .halt_check = BRANCH_HALT_SKIP,
1705 .enable_reg = 0x62008,
1706 .enable_mask = BIT(4),
1707 .hw.init = &(struct clk_init_data){
1708 .name = "gcc_pcie_0_pipe_clk",
1709 .parent_hws = (const struct clk_hw*[]) {
1710 &gcc_pcie_0_pipe_clk_src.clkr.hw,
1713 .flags = CLK_SET_RATE_PARENT,
1714 .ops = &clk_branch2_ops,
1719 static struct clk_branch gcc_pcie_0_slv_axi_clk = {
1720 .halt_reg = 0x7b020,
1721 .halt_check = BRANCH_HALT_VOTED,
1722 .hwcg_reg = 0x7b020,
1725 .enable_reg = 0x62008,
1726 .enable_mask = BIT(0),
1727 .hw.init = &(struct clk_init_data){
1728 .name = "gcc_pcie_0_slv_axi_clk",
1729 .ops = &clk_branch2_ops,
1734 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
1735 .halt_reg = 0x7b01c,
1736 .halt_check = BRANCH_HALT_VOTED,
1738 .enable_reg = 0x62008,
1739 .enable_mask = BIT(5),
1740 .hw.init = &(struct clk_init_data){
1741 .name = "gcc_pcie_0_slv_q2a_axi_clk",
1742 .ops = &clk_branch2_ops,
1747 static struct clk_branch gcc_pcie_1_aux_clk = {
1748 .halt_reg = 0x9d030,
1749 .halt_check = BRANCH_HALT_VOTED,
1751 .enable_reg = 0x62000,
1752 .enable_mask = BIT(29),
1753 .hw.init = &(struct clk_init_data){
1754 .name = "gcc_pcie_1_aux_clk",
1755 .parent_hws = (const struct clk_hw*[]) {
1756 &gcc_pcie_1_aux_clk_src.clkr.hw,
1759 .flags = CLK_SET_RATE_PARENT,
1760 .ops = &clk_branch2_ops,
1765 static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
1766 .halt_reg = 0x9d02c,
1767 .halt_check = BRANCH_HALT_VOTED,
1768 .hwcg_reg = 0x9d02c,
1771 .enable_reg = 0x62000,
1772 .enable_mask = BIT(28),
1773 .hw.init = &(struct clk_init_data){
1774 .name = "gcc_pcie_1_cfg_ahb_clk",
1775 .ops = &clk_branch2_ops,
1780 static struct clk_branch gcc_pcie_1_clkref_en = {
1781 .halt_reg = 0x9c008,
1782 .halt_check = BRANCH_HALT,
1784 .enable_reg = 0x9c008,
1785 .enable_mask = BIT(0),
1786 .hw.init = &(struct clk_init_data){
1787 .name = "gcc_pcie_1_clkref_en",
1788 .ops = &clk_branch2_ops,
1793 static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
1794 .halt_reg = 0x9d024,
1795 .halt_check = BRANCH_HALT_SKIP,
1797 .enable_reg = 0x62000,
1798 .enable_mask = BIT(27),
1799 .hw.init = &(struct clk_init_data){
1800 .name = "gcc_pcie_1_mstr_axi_clk",
1801 .ops = &clk_branch2_ops,
1806 static struct clk_branch gcc_pcie_1_phy_aux_clk = {
1807 .halt_reg = 0x9d038,
1808 .halt_check = BRANCH_HALT_VOTED,
1810 .enable_reg = 0x62000,
1811 .enable_mask = BIT(24),
1812 .hw.init = &(struct clk_init_data){
1813 .name = "gcc_pcie_1_phy_aux_clk",
1814 .parent_hws = (const struct clk_hw*[]) {
1815 &gcc_pcie_1_phy_aux_clk_src.clkr.hw,
1818 .flags = CLK_SET_RATE_PARENT,
1819 .ops = &clk_branch2_ops,
1824 static struct clk_branch gcc_pcie_1_phy_rchng_clk = {
1825 .halt_reg = 0x9d048,
1826 .halt_check = BRANCH_HALT_VOTED,
1828 .enable_reg = 0x62000,
1829 .enable_mask = BIT(23),
1830 .hw.init = &(struct clk_init_data){
1831 .name = "gcc_pcie_1_phy_rchng_clk",
1832 .parent_hws = (const struct clk_hw*[]) {
1833 &gcc_pcie_1_phy_rchng_clk_src.clkr.hw,
1836 .flags = CLK_SET_RATE_PARENT,
1837 .ops = &clk_branch2_ops,
1842 static struct clk_branch gcc_pcie_1_pipe_clk = {
1843 .halt_reg = 0x9d040,
1844 .halt_check = BRANCH_HALT_SKIP,
1846 .enable_reg = 0x62000,
1847 .enable_mask = BIT(30),
1848 .hw.init = &(struct clk_init_data){
1849 .name = "gcc_pcie_1_pipe_clk",
1850 .parent_hws = (const struct clk_hw*[]) {
1851 &gcc_pcie_1_pipe_clk_src.clkr.hw,
1854 .flags = CLK_SET_RATE_PARENT,
1855 .ops = &clk_branch2_ops,
1860 static struct clk_branch gcc_pcie_1_slv_axi_clk = {
1861 .halt_reg = 0x9d01c,
1862 .halt_check = BRANCH_HALT_VOTED,
1863 .hwcg_reg = 0x9d01c,
1866 .enable_reg = 0x62000,
1867 .enable_mask = BIT(26),
1868 .hw.init = &(struct clk_init_data){
1869 .name = "gcc_pcie_1_slv_axi_clk",
1870 .ops = &clk_branch2_ops,
1875 static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = {
1876 .halt_reg = 0x9d018,
1877 .halt_check = BRANCH_HALT_VOTED,
1879 .enable_reg = 0x62000,
1880 .enable_mask = BIT(25),
1881 .hw.init = &(struct clk_init_data){
1882 .name = "gcc_pcie_1_slv_q2a_axi_clk",
1883 .ops = &clk_branch2_ops,
1888 static struct clk_branch gcc_pdm2_clk = {
1889 .halt_reg = 0x4300c,
1890 .halt_check = BRANCH_HALT,
1892 .enable_reg = 0x4300c,
1893 .enable_mask = BIT(0),
1894 .hw.init = &(struct clk_init_data){
1895 .name = "gcc_pdm2_clk",
1896 .parent_hws = (const struct clk_hw*[]) {
1897 &gcc_pdm2_clk_src.clkr.hw,
1900 .flags = CLK_SET_RATE_PARENT,
1901 .ops = &clk_branch2_ops,
1906 static struct clk_branch gcc_pdm_ahb_clk = {
1907 .halt_reg = 0x43004,
1908 .halt_check = BRANCH_HALT_VOTED,
1909 .hwcg_reg = 0x43004,
1912 .enable_reg = 0x43004,
1913 .enable_mask = BIT(0),
1914 .hw.init = &(struct clk_init_data){
1915 .name = "gcc_pdm_ahb_clk",
1916 .ops = &clk_branch2_ops,
1921 static struct clk_branch gcc_pdm_xo4_clk = {
1922 .halt_reg = 0x43008,
1923 .halt_check = BRANCH_HALT,
1925 .enable_reg = 0x43008,
1926 .enable_mask = BIT(0),
1927 .hw.init = &(struct clk_init_data){
1928 .name = "gcc_pdm_xo4_clk",
1929 .ops = &clk_branch2_ops,
1934 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
1935 .halt_reg = 0x36008,
1936 .halt_check = BRANCH_HALT_VOTED,
1937 .hwcg_reg = 0x36008,
1940 .enable_reg = 0x36008,
1941 .enable_mask = BIT(0),
1942 .hw.init = &(struct clk_init_data){
1943 .name = "gcc_qmip_camera_nrt_ahb_clk",
1944 .ops = &clk_branch2_ops,
1949 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
1950 .halt_reg = 0x3600c,
1951 .halt_check = BRANCH_HALT_VOTED,
1952 .hwcg_reg = 0x3600c,
1955 .enable_reg = 0x3600c,
1956 .enable_mask = BIT(0),
1957 .hw.init = &(struct clk_init_data){
1958 .name = "gcc_qmip_camera_rt_ahb_clk",
1959 .ops = &clk_branch2_ops,
1964 static struct clk_branch gcc_qmip_disp_ahb_clk = {
1965 .halt_reg = 0x37008,
1966 .halt_check = BRANCH_HALT_VOTED,
1967 .hwcg_reg = 0x37008,
1970 .enable_reg = 0x37008,
1971 .enable_mask = BIT(0),
1972 .hw.init = &(struct clk_init_data){
1973 .name = "gcc_qmip_disp_ahb_clk",
1974 .ops = &clk_branch2_ops,
1979 static struct clk_branch gcc_qmip_gpu_ahb_clk = {
1980 .halt_reg = 0x81008,
1981 .halt_check = BRANCH_HALT_VOTED,
1982 .hwcg_reg = 0x81008,
1985 .enable_reg = 0x81008,
1986 .enable_mask = BIT(0),
1987 .hw.init = &(struct clk_init_data){
1988 .name = "gcc_qmip_gpu_ahb_clk",
1989 .ops = &clk_branch2_ops,
1994 static struct clk_branch gcc_qmip_pcie_ahb_clk = {
1995 .halt_reg = 0x7b018,
1996 .halt_check = BRANCH_HALT_VOTED,
1997 .hwcg_reg = 0x7b018,
2000 .enable_reg = 0x7b018,
2001 .enable_mask = BIT(0),
2002 .hw.init = &(struct clk_init_data){
2003 .name = "gcc_qmip_pcie_ahb_clk",
2004 .ops = &clk_branch2_ops,
2009 static struct clk_branch gcc_qmip_video_cv_cpu_ahb_clk = {
2010 .halt_reg = 0x42014,
2011 .halt_check = BRANCH_HALT_VOTED,
2012 .hwcg_reg = 0x42014,
2015 .enable_reg = 0x42014,
2016 .enable_mask = BIT(0),
2017 .hw.init = &(struct clk_init_data){
2018 .name = "gcc_qmip_video_cv_cpu_ahb_clk",
2019 .ops = &clk_branch2_ops,
2024 static struct clk_branch gcc_qmip_video_cvp_ahb_clk = {
2025 .halt_reg = 0x42008,
2026 .halt_check = BRANCH_HALT_VOTED,
2027 .hwcg_reg = 0x42008,
2030 .enable_reg = 0x42008,
2031 .enable_mask = BIT(0),
2032 .hw.init = &(struct clk_init_data){
2033 .name = "gcc_qmip_video_cvp_ahb_clk",
2034 .ops = &clk_branch2_ops,
2039 static struct clk_branch gcc_qmip_video_v_cpu_ahb_clk = {
2040 .halt_reg = 0x42010,
2041 .halt_check = BRANCH_HALT_VOTED,
2042 .hwcg_reg = 0x42010,
2045 .enable_reg = 0x42010,
2046 .enable_mask = BIT(0),
2047 .hw.init = &(struct clk_init_data){
2048 .name = "gcc_qmip_video_v_cpu_ahb_clk",
2049 .ops = &clk_branch2_ops,
2054 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
2055 .halt_reg = 0x4200c,
2056 .halt_check = BRANCH_HALT_VOTED,
2057 .hwcg_reg = 0x4200c,
2060 .enable_reg = 0x4200c,
2061 .enable_mask = BIT(0),
2062 .hw.init = &(struct clk_init_data){
2063 .name = "gcc_qmip_video_vcodec_ahb_clk",
2064 .ops = &clk_branch2_ops,
2069 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
2070 .halt_reg = 0x3300c,
2071 .halt_check = BRANCH_HALT_VOTED,
2073 .enable_reg = 0x62008,
2074 .enable_mask = BIT(9),
2075 .hw.init = &(struct clk_init_data){
2076 .name = "gcc_qupv3_wrap0_core_2x_clk",
2077 .ops = &clk_branch2_ops,
2082 static struct clk_branch gcc_qupv3_wrap0_core_clk = {
2083 .halt_reg = 0x33000,
2084 .halt_check = BRANCH_HALT_VOTED,
2086 .enable_reg = 0x62008,
2087 .enable_mask = BIT(8),
2088 .hw.init = &(struct clk_init_data){
2089 .name = "gcc_qupv3_wrap0_core_clk",
2090 .ops = &clk_branch2_ops,
2095 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
2096 .halt_reg = 0x2700c,
2097 .halt_check = BRANCH_HALT_VOTED,
2099 .enable_reg = 0x62008,
2100 .enable_mask = BIT(10),
2101 .hw.init = &(struct clk_init_data){
2102 .name = "gcc_qupv3_wrap0_s0_clk",
2103 .parent_hws = (const struct clk_hw*[]) {
2104 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
2107 .flags = CLK_SET_RATE_PARENT,
2108 .ops = &clk_branch2_ops,
2113 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
2114 .halt_reg = 0x27140,
2115 .halt_check = BRANCH_HALT_VOTED,
2117 .enable_reg = 0x62008,
2118 .enable_mask = BIT(11),
2119 .hw.init = &(struct clk_init_data){
2120 .name = "gcc_qupv3_wrap0_s1_clk",
2121 .parent_hws = (const struct clk_hw*[]) {
2122 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
2125 .flags = CLK_SET_RATE_PARENT,
2126 .ops = &clk_branch2_ops,
2131 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
2132 .halt_reg = 0x27274,
2133 .halt_check = BRANCH_HALT_VOTED,
2135 .enable_reg = 0x62008,
2136 .enable_mask = BIT(12),
2137 .hw.init = &(struct clk_init_data){
2138 .name = "gcc_qupv3_wrap0_s2_clk",
2139 .parent_hws = (const struct clk_hw*[]) {
2140 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
2143 .flags = CLK_SET_RATE_PARENT,
2144 .ops = &clk_branch2_ops,
2149 static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
2150 .halt_reg = 0x273a8,
2151 .halt_check = BRANCH_HALT_VOTED,
2153 .enable_reg = 0x62008,
2154 .enable_mask = BIT(13),
2155 .hw.init = &(struct clk_init_data){
2156 .name = "gcc_qupv3_wrap0_s3_clk",
2157 .parent_hws = (const struct clk_hw*[]) {
2158 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
2161 .flags = CLK_SET_RATE_PARENT,
2162 .ops = &clk_branch2_ops,
2167 static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
2168 .halt_reg = 0x274dc,
2169 .halt_check = BRANCH_HALT_VOTED,
2171 .enable_reg = 0x62008,
2172 .enable_mask = BIT(14),
2173 .hw.init = &(struct clk_init_data){
2174 .name = "gcc_qupv3_wrap0_s4_clk",
2175 .parent_hws = (const struct clk_hw*[]) {
2176 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
2179 .flags = CLK_SET_RATE_PARENT,
2180 .ops = &clk_branch2_ops,
2185 static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
2186 .halt_reg = 0x27610,
2187 .halt_check = BRANCH_HALT_VOTED,
2189 .enable_reg = 0x62008,
2190 .enable_mask = BIT(15),
2191 .hw.init = &(struct clk_init_data){
2192 .name = "gcc_qupv3_wrap0_s5_clk",
2193 .parent_hws = (const struct clk_hw*[]) {
2194 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
2197 .flags = CLK_SET_RATE_PARENT,
2198 .ops = &clk_branch2_ops,
2203 static struct clk_branch gcc_qupv3_wrap0_s6_clk = {
2204 .halt_reg = 0x27744,
2205 .halt_check = BRANCH_HALT_VOTED,
2207 .enable_reg = 0x62008,
2208 .enable_mask = BIT(16),
2209 .hw.init = &(struct clk_init_data){
2210 .name = "gcc_qupv3_wrap0_s6_clk",
2211 .parent_hws = (const struct clk_hw*[]) {
2212 &gcc_qupv3_wrap0_s6_clk_src.clkr.hw,
2215 .flags = CLK_SET_RATE_PARENT,
2216 .ops = &clk_branch2_ops,
2221 static struct clk_branch gcc_qupv3_wrap0_s7_clk = {
2222 .halt_reg = 0x27878,
2223 .halt_check = BRANCH_HALT_VOTED,
2225 .enable_reg = 0x62008,
2226 .enable_mask = BIT(17),
2227 .hw.init = &(struct clk_init_data){
2228 .name = "gcc_qupv3_wrap0_s7_clk",
2229 .parent_hws = (const struct clk_hw*[]) {
2230 &gcc_qupv3_wrap0_s7_clk_src.clkr.hw,
2233 .flags = CLK_SET_RATE_PARENT,
2234 .ops = &clk_branch2_ops,
2239 static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
2240 .halt_reg = 0x3314c,
2241 .halt_check = BRANCH_HALT_VOTED,
2243 .enable_reg = 0x62008,
2244 .enable_mask = BIT(18),
2245 .hw.init = &(struct clk_init_data){
2246 .name = "gcc_qupv3_wrap1_core_2x_clk",
2247 .ops = &clk_branch2_ops,
2252 static struct clk_branch gcc_qupv3_wrap1_core_clk = {
2253 .halt_reg = 0x33140,
2254 .halt_check = BRANCH_HALT_VOTED,
2256 .enable_reg = 0x62008,
2257 .enable_mask = BIT(19),
2258 .hw.init = &(struct clk_init_data){
2259 .name = "gcc_qupv3_wrap1_core_clk",
2260 .ops = &clk_branch2_ops,
2265 static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
2266 .halt_reg = 0x2800c,
2267 .halt_check = BRANCH_HALT_VOTED,
2269 .enable_reg = 0x62008,
2270 .enable_mask = BIT(22),
2271 .hw.init = &(struct clk_init_data){
2272 .name = "gcc_qupv3_wrap1_s0_clk",
2273 .parent_hws = (const struct clk_hw*[]) {
2274 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
2277 .flags = CLK_SET_RATE_PARENT,
2278 .ops = &clk_branch2_ops,
2283 static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
2284 .halt_reg = 0x28140,
2285 .halt_check = BRANCH_HALT_VOTED,
2287 .enable_reg = 0x62008,
2288 .enable_mask = BIT(23),
2289 .hw.init = &(struct clk_init_data){
2290 .name = "gcc_qupv3_wrap1_s1_clk",
2291 .parent_hws = (const struct clk_hw*[]) {
2292 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
2295 .flags = CLK_SET_RATE_PARENT,
2296 .ops = &clk_branch2_ops,
2301 static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
2302 .halt_reg = 0x28274,
2303 .halt_check = BRANCH_HALT_VOTED,
2305 .enable_reg = 0x62008,
2306 .enable_mask = BIT(24),
2307 .hw.init = &(struct clk_init_data){
2308 .name = "gcc_qupv3_wrap1_s2_clk",
2309 .parent_hws = (const struct clk_hw*[]) {
2310 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
2313 .flags = CLK_SET_RATE_PARENT,
2314 .ops = &clk_branch2_ops,
2319 static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
2320 .halt_reg = 0x283a8,
2321 .halt_check = BRANCH_HALT_VOTED,
2323 .enable_reg = 0x62008,
2324 .enable_mask = BIT(25),
2325 .hw.init = &(struct clk_init_data){
2326 .name = "gcc_qupv3_wrap1_s3_clk",
2327 .parent_hws = (const struct clk_hw*[]) {
2328 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
2331 .flags = CLK_SET_RATE_PARENT,
2332 .ops = &clk_branch2_ops,
2337 static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
2338 .halt_reg = 0x284dc,
2339 .halt_check = BRANCH_HALT_VOTED,
2341 .enable_reg = 0x62008,
2342 .enable_mask = BIT(26),
2343 .hw.init = &(struct clk_init_data){
2344 .name = "gcc_qupv3_wrap1_s4_clk",
2345 .parent_hws = (const struct clk_hw*[]) {
2346 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
2349 .flags = CLK_SET_RATE_PARENT,
2350 .ops = &clk_branch2_ops,
2355 static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
2356 .halt_reg = 0x28610,
2357 .halt_check = BRANCH_HALT_VOTED,
2359 .enable_reg = 0x62008,
2360 .enable_mask = BIT(27),
2361 .hw.init = &(struct clk_init_data){
2362 .name = "gcc_qupv3_wrap1_s5_clk",
2363 .parent_hws = (const struct clk_hw*[]) {
2364 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
2367 .flags = CLK_SET_RATE_PARENT,
2368 .ops = &clk_branch2_ops,
2373 static struct clk_branch gcc_qupv3_wrap1_s6_clk = {
2374 .halt_reg = 0x28744,
2375 .halt_check = BRANCH_HALT_VOTED,
2377 .enable_reg = 0x62008,
2378 .enable_mask = BIT(28),
2379 .hw.init = &(struct clk_init_data){
2380 .name = "gcc_qupv3_wrap1_s6_clk",
2381 .parent_hws = (const struct clk_hw*[]) {
2382 &gcc_qupv3_wrap1_s6_clk_src.clkr.hw,
2385 .flags = CLK_SET_RATE_PARENT,
2386 .ops = &clk_branch2_ops,
2391 static struct clk_branch gcc_qupv3_wrap2_core_2x_clk = {
2392 .halt_reg = 0x3328c,
2393 .halt_check = BRANCH_HALT_VOTED,
2395 .enable_reg = 0x62010,
2396 .enable_mask = BIT(3),
2397 .hw.init = &(struct clk_init_data){
2398 .name = "gcc_qupv3_wrap2_core_2x_clk",
2399 .ops = &clk_branch2_ops,
2404 static struct clk_branch gcc_qupv3_wrap2_core_clk = {
2405 .halt_reg = 0x33280,
2406 .halt_check = BRANCH_HALT_VOTED,
2408 .enable_reg = 0x62010,
2409 .enable_mask = BIT(0),
2410 .hw.init = &(struct clk_init_data){
2411 .name = "gcc_qupv3_wrap2_core_clk",
2412 .ops = &clk_branch2_ops,
2417 static struct clk_branch gcc_qupv3_wrap2_s0_clk = {
2418 .halt_reg = 0x2e00c,
2419 .halt_check = BRANCH_HALT_VOTED,
2421 .enable_reg = 0x62010,
2422 .enable_mask = BIT(4),
2423 .hw.init = &(struct clk_init_data){
2424 .name = "gcc_qupv3_wrap2_s0_clk",
2425 .parent_hws = (const struct clk_hw*[]) {
2426 &gcc_qupv3_wrap2_s0_clk_src.clkr.hw,
2429 .flags = CLK_SET_RATE_PARENT,
2430 .ops = &clk_branch2_ops,
2435 static struct clk_branch gcc_qupv3_wrap2_s1_clk = {
2436 .halt_reg = 0x2e140,
2437 .halt_check = BRANCH_HALT_VOTED,
2439 .enable_reg = 0x62010,
2440 .enable_mask = BIT(5),
2441 .hw.init = &(struct clk_init_data){
2442 .name = "gcc_qupv3_wrap2_s1_clk",
2443 .parent_hws = (const struct clk_hw*[]) {
2444 &gcc_qupv3_wrap2_s1_clk_src.clkr.hw,
2447 .flags = CLK_SET_RATE_PARENT,
2448 .ops = &clk_branch2_ops,
2453 static struct clk_branch gcc_qupv3_wrap2_s2_clk = {
2454 .halt_reg = 0x2e274,
2455 .halt_check = BRANCH_HALT_VOTED,
2457 .enable_reg = 0x62010,
2458 .enable_mask = BIT(6),
2459 .hw.init = &(struct clk_init_data){
2460 .name = "gcc_qupv3_wrap2_s2_clk",
2461 .parent_hws = (const struct clk_hw*[]) {
2462 &gcc_qupv3_wrap2_s2_clk_src.clkr.hw,
2465 .flags = CLK_SET_RATE_PARENT,
2466 .ops = &clk_branch2_ops,
2471 static struct clk_branch gcc_qupv3_wrap2_s3_clk = {
2472 .halt_reg = 0x2e3a8,
2473 .halt_check = BRANCH_HALT_VOTED,
2475 .enable_reg = 0x62010,
2476 .enable_mask = BIT(7),
2477 .hw.init = &(struct clk_init_data){
2478 .name = "gcc_qupv3_wrap2_s3_clk",
2479 .parent_hws = (const struct clk_hw*[]) {
2480 &gcc_qupv3_wrap2_s3_clk_src.clkr.hw,
2483 .flags = CLK_SET_RATE_PARENT,
2484 .ops = &clk_branch2_ops,
2489 static struct clk_branch gcc_qupv3_wrap2_s4_clk = {
2490 .halt_reg = 0x2e4dc,
2491 .halt_check = BRANCH_HALT_VOTED,
2493 .enable_reg = 0x62010,
2494 .enable_mask = BIT(8),
2495 .hw.init = &(struct clk_init_data){
2496 .name = "gcc_qupv3_wrap2_s4_clk",
2497 .parent_hws = (const struct clk_hw*[]) {
2498 &gcc_qupv3_wrap2_s4_clk_src.clkr.hw,
2501 .flags = CLK_SET_RATE_PARENT,
2502 .ops = &clk_branch2_ops,
2507 static struct clk_branch gcc_qupv3_wrap2_s5_clk = {
2508 .halt_reg = 0x2e610,
2509 .halt_check = BRANCH_HALT_VOTED,
2511 .enable_reg = 0x62010,
2512 .enable_mask = BIT(9),
2513 .hw.init = &(struct clk_init_data){
2514 .name = "gcc_qupv3_wrap2_s5_clk",
2515 .parent_hws = (const struct clk_hw*[]) {
2516 &gcc_qupv3_wrap2_s5_clk_src.clkr.hw,
2519 .flags = CLK_SET_RATE_PARENT,
2520 .ops = &clk_branch2_ops,
2525 static struct clk_branch gcc_qupv3_wrap2_s6_clk = {
2526 .halt_reg = 0x2e744,
2527 .halt_check = BRANCH_HALT_VOTED,
2529 .enable_reg = 0x62010,
2530 .enable_mask = BIT(10),
2531 .hw.init = &(struct clk_init_data){
2532 .name = "gcc_qupv3_wrap2_s6_clk",
2533 .parent_hws = (const struct clk_hw*[]) {
2534 &gcc_qupv3_wrap2_s6_clk_src.clkr.hw,
2537 .flags = CLK_SET_RATE_PARENT,
2538 .ops = &clk_branch2_ops,
2543 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
2544 .halt_reg = 0x27004,
2545 .halt_check = BRANCH_HALT_VOTED,
2546 .hwcg_reg = 0x27004,
2549 .enable_reg = 0x62008,
2550 .enable_mask = BIT(6),
2551 .hw.init = &(struct clk_init_data){
2552 .name = "gcc_qupv3_wrap_0_m_ahb_clk",
2553 .ops = &clk_branch2_ops,
2558 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
2559 .halt_reg = 0x27008,
2560 .halt_check = BRANCH_HALT_VOTED,
2561 .hwcg_reg = 0x27008,
2564 .enable_reg = 0x62008,
2565 .enable_mask = BIT(7),
2566 .hw.init = &(struct clk_init_data){
2567 .name = "gcc_qupv3_wrap_0_s_ahb_clk",
2568 .ops = &clk_branch2_ops,
2573 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
2574 .halt_reg = 0x28004,
2575 .halt_check = BRANCH_HALT_VOTED,
2576 .hwcg_reg = 0x28004,
2579 .enable_reg = 0x62008,
2580 .enable_mask = BIT(20),
2581 .hw.init = &(struct clk_init_data){
2582 .name = "gcc_qupv3_wrap_1_m_ahb_clk",
2583 .ops = &clk_branch2_ops,
2588 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
2589 .halt_reg = 0x28008,
2590 .halt_check = BRANCH_HALT_VOTED,
2591 .hwcg_reg = 0x28008,
2594 .enable_reg = 0x62008,
2595 .enable_mask = BIT(21),
2596 .hw.init = &(struct clk_init_data){
2597 .name = "gcc_qupv3_wrap_1_s_ahb_clk",
2598 .ops = &clk_branch2_ops,
2603 static struct clk_branch gcc_qupv3_wrap_2_m_ahb_clk = {
2604 .halt_reg = 0x2e004,
2605 .halt_check = BRANCH_HALT_VOTED,
2606 .hwcg_reg = 0x2e004,
2609 .enable_reg = 0x62010,
2610 .enable_mask = BIT(2),
2611 .hw.init = &(struct clk_init_data){
2612 .name = "gcc_qupv3_wrap_2_m_ahb_clk",
2613 .ops = &clk_branch2_ops,
2618 static struct clk_branch gcc_qupv3_wrap_2_s_ahb_clk = {
2619 .halt_reg = 0x2e008,
2620 .halt_check = BRANCH_HALT_VOTED,
2621 .hwcg_reg = 0x2e008,
2624 .enable_reg = 0x62010,
2625 .enable_mask = BIT(1),
2626 .hw.init = &(struct clk_init_data){
2627 .name = "gcc_qupv3_wrap_2_s_ahb_clk",
2628 .ops = &clk_branch2_ops,
2633 static struct clk_branch gcc_sdcc2_ahb_clk = {
2634 .halt_reg = 0x2400c,
2635 .halt_check = BRANCH_HALT,
2637 .enable_reg = 0x2400c,
2638 .enable_mask = BIT(0),
2639 .hw.init = &(struct clk_init_data){
2640 .name = "gcc_sdcc2_ahb_clk",
2641 .ops = &clk_branch2_ops,
2646 static struct clk_branch gcc_sdcc2_apps_clk = {
2647 .halt_reg = 0x24004,
2648 .halt_check = BRANCH_HALT,
2650 .enable_reg = 0x24004,
2651 .enable_mask = BIT(0),
2652 .hw.init = &(struct clk_init_data){
2653 .name = "gcc_sdcc2_apps_clk",
2654 .parent_hws = (const struct clk_hw*[]) {
2655 &gcc_sdcc2_apps_clk_src.clkr.hw,
2658 .flags = CLK_SET_RATE_PARENT,
2659 .ops = &clk_branch2_ops,
2664 static struct clk_branch gcc_sdcc2_at_clk = {
2665 .halt_reg = 0x24010,
2666 .halt_check = BRANCH_HALT_VOTED,
2667 .hwcg_reg = 0x24010,
2670 .enable_reg = 0x24010,
2671 .enable_mask = BIT(0),
2672 .hw.init = &(struct clk_init_data){
2673 .name = "gcc_sdcc2_at_clk",
2674 .ops = &clk_branch2_ops,
2679 static struct clk_branch gcc_sdcc4_ahb_clk = {
2680 .halt_reg = 0x2600c,
2681 .halt_check = BRANCH_HALT,
2683 .enable_reg = 0x2600c,
2684 .enable_mask = BIT(0),
2685 .hw.init = &(struct clk_init_data){
2686 .name = "gcc_sdcc4_ahb_clk",
2687 .ops = &clk_branch2_ops,
2692 static struct clk_branch gcc_sdcc4_apps_clk = {
2693 .halt_reg = 0x26004,
2694 .halt_check = BRANCH_HALT,
2696 .enable_reg = 0x26004,
2697 .enable_mask = BIT(0),
2698 .hw.init = &(struct clk_init_data){
2699 .name = "gcc_sdcc4_apps_clk",
2700 .parent_hws = (const struct clk_hw*[]) {
2701 &gcc_sdcc4_apps_clk_src.clkr.hw,
2704 .flags = CLK_SET_RATE_PARENT,
2705 .ops = &clk_branch2_ops,
2710 static struct clk_branch gcc_sdcc4_at_clk = {
2711 .halt_reg = 0x26010,
2712 .halt_check = BRANCH_HALT_VOTED,
2713 .hwcg_reg = 0x26010,
2716 .enable_reg = 0x26010,
2717 .enable_mask = BIT(0),
2718 .hw.init = &(struct clk_init_data){
2719 .name = "gcc_sdcc4_at_clk",
2720 .ops = &clk_branch2_ops,
2725 static struct clk_branch gcc_ufs_0_clkref_en = {
2726 .halt_reg = 0x9c000,
2727 .halt_check = BRANCH_HALT,
2729 .enable_reg = 0x9c000,
2730 .enable_mask = BIT(0),
2731 .hw.init = &(struct clk_init_data){
2732 .name = "gcc_ufs_0_clkref_en",
2733 .ops = &clk_branch2_ops,
2738 static struct clk_branch gcc_ufs_phy_ahb_clk = {
2739 .halt_reg = 0x87020,
2740 .halt_check = BRANCH_HALT_VOTED,
2741 .hwcg_reg = 0x87020,
2744 .enable_reg = 0x87020,
2745 .enable_mask = BIT(0),
2746 .hw.init = &(struct clk_init_data){
2747 .name = "gcc_ufs_phy_ahb_clk",
2748 .ops = &clk_branch2_ops,
2753 static struct clk_branch gcc_ufs_phy_axi_clk = {
2754 .halt_reg = 0x87018,
2755 .halt_check = BRANCH_HALT_VOTED,
2756 .hwcg_reg = 0x87018,
2759 .enable_reg = 0x87018,
2760 .enable_mask = BIT(0),
2761 .hw.init = &(struct clk_init_data){
2762 .name = "gcc_ufs_phy_axi_clk",
2763 .parent_hws = (const struct clk_hw*[]) {
2764 &gcc_ufs_phy_axi_clk_src.clkr.hw,
2767 .flags = CLK_SET_RATE_PARENT,
2768 .ops = &clk_branch2_ops,
2773 static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = {
2774 .halt_reg = 0x87018,
2775 .halt_check = BRANCH_HALT_VOTED,
2776 .hwcg_reg = 0x87018,
2779 .enable_reg = 0x87018,
2780 .enable_mask = BIT(1),
2781 .hw.init = &(struct clk_init_data){
2782 .name = "gcc_ufs_phy_axi_hw_ctl_clk",
2783 .parent_hws = (const struct clk_hw*[]) {
2784 &gcc_ufs_phy_axi_clk_src.clkr.hw,
2787 .flags = CLK_SET_RATE_PARENT,
2788 .ops = &clk_branch2_ops,
2793 static struct clk_branch gcc_ufs_phy_ice_core_clk = {
2794 .halt_reg = 0x8706c,
2795 .halt_check = BRANCH_HALT_VOTED,
2796 .hwcg_reg = 0x8706c,
2799 .enable_reg = 0x8706c,
2800 .enable_mask = BIT(0),
2801 .hw.init = &(struct clk_init_data){
2802 .name = "gcc_ufs_phy_ice_core_clk",
2803 .parent_hws = (const struct clk_hw*[]) {
2804 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
2807 .flags = CLK_SET_RATE_PARENT,
2808 .ops = &clk_branch2_ops,
2813 static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = {
2814 .halt_reg = 0x8706c,
2815 .halt_check = BRANCH_HALT_VOTED,
2816 .hwcg_reg = 0x8706c,
2819 .enable_reg = 0x8706c,
2820 .enable_mask = BIT(1),
2821 .hw.init = &(struct clk_init_data){
2822 .name = "gcc_ufs_phy_ice_core_hw_ctl_clk",
2823 .parent_hws = (const struct clk_hw*[]) {
2824 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
2827 .flags = CLK_SET_RATE_PARENT,
2828 .ops = &clk_branch2_ops,
2833 static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
2834 .halt_reg = 0x870a4,
2835 .halt_check = BRANCH_HALT_VOTED,
2836 .hwcg_reg = 0x870a4,
2839 .enable_reg = 0x870a4,
2840 .enable_mask = BIT(0),
2841 .hw.init = &(struct clk_init_data){
2842 .name = "gcc_ufs_phy_phy_aux_clk",
2843 .parent_hws = (const struct clk_hw*[]) {
2844 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2847 .flags = CLK_SET_RATE_PARENT,
2848 .ops = &clk_branch2_ops,
2853 static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = {
2854 .halt_reg = 0x870a4,
2855 .halt_check = BRANCH_HALT_VOTED,
2856 .hwcg_reg = 0x870a4,
2859 .enable_reg = 0x870a4,
2860 .enable_mask = BIT(1),
2861 .hw.init = &(struct clk_init_data){
2862 .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk",
2863 .parent_hws = (const struct clk_hw*[]) {
2864 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2867 .flags = CLK_SET_RATE_PARENT,
2868 .ops = &clk_branch2_ops,
2873 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
2874 .halt_reg = 0x87028,
2875 .halt_check = BRANCH_HALT_DELAY,
2877 .enable_reg = 0x87028,
2878 .enable_mask = BIT(0),
2879 .hw.init = &(struct clk_init_data){
2880 .name = "gcc_ufs_phy_rx_symbol_0_clk",
2881 .parent_hws = (const struct clk_hw*[]) {
2882 &gcc_ufs_phy_rx_symbol_0_clk_src.clkr.hw,
2885 .flags = CLK_SET_RATE_PARENT,
2886 .ops = &clk_branch2_ops,
2891 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
2892 .halt_reg = 0x870c0,
2893 .halt_check = BRANCH_HALT_DELAY,
2895 .enable_reg = 0x870c0,
2896 .enable_mask = BIT(0),
2897 .hw.init = &(struct clk_init_data){
2898 .name = "gcc_ufs_phy_rx_symbol_1_clk",
2899 .parent_hws = (const struct clk_hw*[]) {
2900 &gcc_ufs_phy_rx_symbol_1_clk_src.clkr.hw,
2903 .flags = CLK_SET_RATE_PARENT,
2904 .ops = &clk_branch2_ops,
2909 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
2910 .halt_reg = 0x87024,
2911 .halt_check = BRANCH_HALT_DELAY,
2913 .enable_reg = 0x87024,
2914 .enable_mask = BIT(0),
2915 .hw.init = &(struct clk_init_data){
2916 .name = "gcc_ufs_phy_tx_symbol_0_clk",
2917 .parent_hws = (const struct clk_hw*[]) {
2918 &gcc_ufs_phy_tx_symbol_0_clk_src.clkr.hw,
2921 .flags = CLK_SET_RATE_PARENT,
2922 .ops = &clk_branch2_ops,
2927 static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
2928 .halt_reg = 0x87064,
2929 .halt_check = BRANCH_HALT_VOTED,
2930 .hwcg_reg = 0x87064,
2933 .enable_reg = 0x87064,
2934 .enable_mask = BIT(0),
2935 .hw.init = &(struct clk_init_data){
2936 .name = "gcc_ufs_phy_unipro_core_clk",
2937 .parent_hws = (const struct clk_hw*[]) {
2938 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2941 .flags = CLK_SET_RATE_PARENT,
2942 .ops = &clk_branch2_ops,
2947 static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = {
2948 .halt_reg = 0x87064,
2949 .halt_check = BRANCH_HALT_VOTED,
2950 .hwcg_reg = 0x87064,
2953 .enable_reg = 0x87064,
2954 .enable_mask = BIT(1),
2955 .hw.init = &(struct clk_init_data){
2956 .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk",
2957 .parent_hws = (const struct clk_hw*[]) {
2958 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2961 .flags = CLK_SET_RATE_PARENT,
2962 .ops = &clk_branch2_ops,
2967 static struct clk_branch gcc_usb30_prim_master_clk = {
2968 .halt_reg = 0x49018,
2969 .halt_check = BRANCH_HALT,
2971 .enable_reg = 0x49018,
2972 .enable_mask = BIT(0),
2973 .hw.init = &(struct clk_init_data){
2974 .name = "gcc_usb30_prim_master_clk",
2975 .parent_hws = (const struct clk_hw*[]) {
2976 &gcc_usb30_prim_master_clk_src.clkr.hw,
2979 .flags = CLK_SET_RATE_PARENT,
2980 .ops = &clk_branch2_ops,
2985 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
2986 .halt_reg = 0x49024,
2987 .halt_check = BRANCH_HALT,
2989 .enable_reg = 0x49024,
2990 .enable_mask = BIT(0),
2991 .hw.init = &(struct clk_init_data){
2992 .name = "gcc_usb30_prim_mock_utmi_clk",
2993 .parent_hws = (const struct clk_hw*[]) {
2994 &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,
2997 .flags = CLK_SET_RATE_PARENT,
2998 .ops = &clk_branch2_ops,
3003 static struct clk_branch gcc_usb30_prim_sleep_clk = {
3004 .halt_reg = 0x49020,
3005 .halt_check = BRANCH_HALT,
3007 .enable_reg = 0x49020,
3008 .enable_mask = BIT(0),
3009 .hw.init = &(struct clk_init_data){
3010 .name = "gcc_usb30_prim_sleep_clk",
3011 .ops = &clk_branch2_ops,
3016 static struct clk_branch gcc_usb3_0_clkref_en = {
3017 .halt_reg = 0x9c010,
3018 .halt_check = BRANCH_HALT,
3020 .enable_reg = 0x9c010,
3021 .enable_mask = BIT(0),
3022 .hw.init = &(struct clk_init_data){
3023 .name = "gcc_usb3_0_clkref_en",
3024 .ops = &clk_branch2_ops,
3029 static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
3030 .halt_reg = 0x4905c,
3031 .halt_check = BRANCH_HALT,
3033 .enable_reg = 0x4905c,
3034 .enable_mask = BIT(0),
3035 .hw.init = &(struct clk_init_data){
3036 .name = "gcc_usb3_prim_phy_aux_clk",
3037 .parent_hws = (const struct clk_hw*[]) {
3038 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
3041 .flags = CLK_SET_RATE_PARENT,
3042 .ops = &clk_branch2_ops,
3047 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
3048 .halt_reg = 0x49060,
3049 .halt_check = BRANCH_HALT,
3051 .enable_reg = 0x49060,
3052 .enable_mask = BIT(0),
3053 .hw.init = &(struct clk_init_data){
3054 .name = "gcc_usb3_prim_phy_com_aux_clk",
3055 .parent_hws = (const struct clk_hw*[]) {
3056 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
3059 .flags = CLK_SET_RATE_PARENT,
3060 .ops = &clk_branch2_ops,
3065 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
3066 .halt_reg = 0x49064,
3067 .halt_check = BRANCH_HALT_DELAY,
3068 .hwcg_reg = 0x49064,
3071 .enable_reg = 0x49064,
3072 .enable_mask = BIT(0),
3073 .hw.init = &(struct clk_init_data){
3074 .name = "gcc_usb3_prim_phy_pipe_clk",
3075 .parent_hws = (const struct clk_hw*[]) {
3076 &gcc_usb3_prim_phy_pipe_clk_src.clkr.hw,
3079 .flags = CLK_SET_RATE_PARENT,
3080 .ops = &clk_branch2_ops,
3085 static struct clk_branch gcc_video_axi0_clk = {
3086 .halt_reg = 0x42018,
3087 .halt_check = BRANCH_HALT_SKIP,
3088 .hwcg_reg = 0x42018,
3091 .enable_reg = 0x42018,
3092 .enable_mask = BIT(0),
3093 .hw.init = &(struct clk_init_data){
3094 .name = "gcc_video_axi0_clk",
3095 .ops = &clk_branch2_ops,
3100 static struct clk_branch gcc_video_axi1_clk = {
3101 .halt_reg = 0x42020,
3102 .halt_check = BRANCH_HALT_SKIP,
3103 .hwcg_reg = 0x42020,
3106 .enable_reg = 0x42020,
3107 .enable_mask = BIT(0),
3108 .hw.init = &(struct clk_init_data){
3109 .name = "gcc_video_axi1_clk",
3110 .ops = &clk_branch2_ops,
3115 static struct gdsc pcie_0_gdsc = {
3118 .name = "pcie_0_gdsc",
3120 .pwrsts = PWRSTS_RET_ON,
3123 static struct gdsc pcie_1_gdsc = {
3126 .name = "pcie_1_gdsc",
3128 .pwrsts = PWRSTS_RET_ON,
3131 static struct gdsc ufs_phy_gdsc = {
3134 .name = "ufs_phy_gdsc",
3136 .pwrsts = PWRSTS_OFF_ON,
3139 static struct gdsc usb30_prim_gdsc = {
3142 .name = "usb30_prim_gdsc",
3144 .pwrsts = PWRSTS_OFF_ON,
3147 static struct clk_regmap *gcc_sm8450_clocks[] = {
3148 [GCC_AGGRE_NOC_PCIE_0_AXI_CLK] = &gcc_aggre_noc_pcie_0_axi_clk.clkr,
3149 [GCC_AGGRE_NOC_PCIE_1_AXI_CLK] = &gcc_aggre_noc_pcie_1_axi_clk.clkr,
3150 [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
3151 [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr,
3152 [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
3153 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3154 [GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,
3155 [GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr,
3156 [GCC_CFG_NOC_PCIE_ANOC_AHB_CLK] = &gcc_cfg_noc_pcie_anoc_ahb_clk.clkr,
3157 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
3158 [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
3159 [GCC_DDRSS_PCIE_SF_TBU_CLK] = &gcc_ddrss_pcie_sf_tbu_clk.clkr,
3160 [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
3161 [GCC_DISP_SF_AXI_CLK] = &gcc_disp_sf_axi_clk.clkr,
3162 [GCC_EUSB3_0_CLKREF_EN] = &gcc_eusb3_0_clkref_en.clkr,
3163 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3164 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
3165 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3166 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
3167 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3168 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
3169 [GCC_GPLL0] = &gcc_gpll0.clkr,
3170 [GCC_GPLL0_OUT_EVEN] = &gcc_gpll0_out_even.clkr,
3171 [GCC_GPLL4] = &gcc_gpll4.clkr,
3172 [GCC_GPLL9] = &gcc_gpll9.clkr,
3173 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
3174 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
3175 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
3176 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
3177 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
3178 [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
3179 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
3180 [GCC_PCIE_0_CLKREF_EN] = &gcc_pcie_0_clkref_en.clkr,
3181 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
3182 [GCC_PCIE_0_PHY_RCHNG_CLK] = &gcc_pcie_0_phy_rchng_clk.clkr,
3183 [GCC_PCIE_0_PHY_RCHNG_CLK_SRC] = &gcc_pcie_0_phy_rchng_clk_src.clkr,
3184 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
3185 [GCC_PCIE_0_PIPE_CLK_SRC] = &gcc_pcie_0_pipe_clk_src.clkr,
3186 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
3187 [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
3188 [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
3189 [GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr,
3190 [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
3191 [GCC_PCIE_1_CLKREF_EN] = &gcc_pcie_1_clkref_en.clkr,
3192 [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
3193 [GCC_PCIE_1_PHY_AUX_CLK] = &gcc_pcie_1_phy_aux_clk.clkr,
3194 [GCC_PCIE_1_PHY_AUX_CLK_SRC] = &gcc_pcie_1_phy_aux_clk_src.clkr,
3195 [GCC_PCIE_1_PHY_RCHNG_CLK] = &gcc_pcie_1_phy_rchng_clk.clkr,
3196 [GCC_PCIE_1_PHY_RCHNG_CLK_SRC] = &gcc_pcie_1_phy_rchng_clk_src.clkr,
3197 [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
3198 [GCC_PCIE_1_PIPE_CLK_SRC] = &gcc_pcie_1_pipe_clk_src.clkr,
3199 [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
3200 [GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr,
3201 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3202 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
3203 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3204 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
3205 [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
3206 [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
3207 [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
3208 [GCC_QMIP_GPU_AHB_CLK] = &gcc_qmip_gpu_ahb_clk.clkr,
3209 [GCC_QMIP_PCIE_AHB_CLK] = &gcc_qmip_pcie_ahb_clk.clkr,
3210 [GCC_QMIP_VIDEO_CV_CPU_AHB_CLK] = &gcc_qmip_video_cv_cpu_ahb_clk.clkr,
3211 [GCC_QMIP_VIDEO_CVP_AHB_CLK] = &gcc_qmip_video_cvp_ahb_clk.clkr,
3212 [GCC_QMIP_VIDEO_V_CPU_AHB_CLK] = &gcc_qmip_video_v_cpu_ahb_clk.clkr,
3213 [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
3214 [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
3215 [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
3216 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
3217 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
3218 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
3219 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
3220 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
3221 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
3222 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
3223 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
3224 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
3225 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
3226 [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
3227 [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
3228 [GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr,
3229 [GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr,
3230 [GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr,
3231 [GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr,
3232 [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
3233 [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
3234 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
3235 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
3236 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
3237 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
3238 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
3239 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
3240 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
3241 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
3242 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
3243 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
3244 [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
3245 [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
3246 [GCC_QUPV3_WRAP1_S6_CLK] = &gcc_qupv3_wrap1_s6_clk.clkr,
3247 [GCC_QUPV3_WRAP1_S6_CLK_SRC] = &gcc_qupv3_wrap1_s6_clk_src.clkr,
3248 [GCC_QUPV3_WRAP2_CORE_2X_CLK] = &gcc_qupv3_wrap2_core_2x_clk.clkr,
3249 [GCC_QUPV3_WRAP2_CORE_CLK] = &gcc_qupv3_wrap2_core_clk.clkr,
3250 [GCC_QUPV3_WRAP2_S0_CLK] = &gcc_qupv3_wrap2_s0_clk.clkr,
3251 [GCC_QUPV3_WRAP2_S0_CLK_SRC] = &gcc_qupv3_wrap2_s0_clk_src.clkr,
3252 [GCC_QUPV3_WRAP2_S1_CLK] = &gcc_qupv3_wrap2_s1_clk.clkr,
3253 [GCC_QUPV3_WRAP2_S1_CLK_SRC] = &gcc_qupv3_wrap2_s1_clk_src.clkr,
3254 [GCC_QUPV3_WRAP2_S2_CLK] = &gcc_qupv3_wrap2_s2_clk.clkr,
3255 [GCC_QUPV3_WRAP2_S2_CLK_SRC] = &gcc_qupv3_wrap2_s2_clk_src.clkr,
3256 [GCC_QUPV3_WRAP2_S3_CLK] = &gcc_qupv3_wrap2_s3_clk.clkr,
3257 [GCC_QUPV3_WRAP2_S3_CLK_SRC] = &gcc_qupv3_wrap2_s3_clk_src.clkr,
3258 [GCC_QUPV3_WRAP2_S4_CLK] = &gcc_qupv3_wrap2_s4_clk.clkr,
3259 [GCC_QUPV3_WRAP2_S4_CLK_SRC] = &gcc_qupv3_wrap2_s4_clk_src.clkr,
3260 [GCC_QUPV3_WRAP2_S5_CLK] = &gcc_qupv3_wrap2_s5_clk.clkr,
3261 [GCC_QUPV3_WRAP2_S5_CLK_SRC] = &gcc_qupv3_wrap2_s5_clk_src.clkr,
3262 [GCC_QUPV3_WRAP2_S6_CLK] = &gcc_qupv3_wrap2_s6_clk.clkr,
3263 [GCC_QUPV3_WRAP2_S6_CLK_SRC] = &gcc_qupv3_wrap2_s6_clk_src.clkr,
3264 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
3265 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
3266 [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
3267 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
3268 [GCC_QUPV3_WRAP_2_M_AHB_CLK] = &gcc_qupv3_wrap_2_m_ahb_clk.clkr,
3269 [GCC_QUPV3_WRAP_2_S_AHB_CLK] = &gcc_qupv3_wrap_2_s_ahb_clk.clkr,
3270 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3271 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3272 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
3273 [GCC_SDCC2_AT_CLK] = &gcc_sdcc2_at_clk.clkr,
3274 [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
3275 [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
3276 [GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr,
3277 [GCC_SDCC4_AT_CLK] = &gcc_sdcc4_at_clk.clkr,
3278 [GCC_UFS_0_CLKREF_EN] = &gcc_ufs_0_clkref_en.clkr,
3279 [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
3280 [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
3281 [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
3282 [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr,
3283 [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
3284 [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
3285 [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] = &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr,
3286 [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
3287 [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
3288 [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr,
3289 [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
3290 [GCC_UFS_PHY_RX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_rx_symbol_0_clk_src.clkr,
3291 [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
3292 [GCC_UFS_PHY_RX_SYMBOL_1_CLK_SRC] = &gcc_ufs_phy_rx_symbol_1_clk_src.clkr,
3293 [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
3294 [GCC_UFS_PHY_TX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_tx_symbol_0_clk_src.clkr,
3295 [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
3296 [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_phy_unipro_core_clk_src.clkr,
3297 [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] = &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr,
3298 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
3299 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
3300 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
3301 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr,
3302 [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,
3303 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
3304 [GCC_USB3_0_CLKREF_EN] = &gcc_usb3_0_clkref_en.clkr,
3305 [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
3306 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
3307 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
3308 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
3309 [GCC_USB3_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb3_prim_phy_pipe_clk_src.clkr,
3310 [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
3311 [GCC_VIDEO_AXI1_CLK] = &gcc_video_axi1_clk.clkr,
3312 [SM8475_GCC_GPLL2] = NULL,
3313 [SM8475_GCC_GPLL3] = NULL,
3316 static const struct qcom_reset_map gcc_sm8450_resets[] = {
3317 [GCC_CAMERA_BCR] = { 0x36000 },
3318 [GCC_DISPLAY_BCR] = { 0x37000 },
3319 [GCC_GPU_BCR] = { 0x81000 },
3320 [GCC_PCIE_0_BCR] = { 0x7b000 },
3321 [GCC_PCIE_0_LINK_DOWN_BCR] = { 0x7c014 },
3322 [GCC_PCIE_0_NOCSR_COM_PHY_BCR] = { 0x7c020 },
3323 [GCC_PCIE_0_PHY_BCR] = { 0x7c01c },
3324 [GCC_PCIE_0_PHY_NOCSR_COM_PHY_BCR] = { 0x7c028 },
3325 [GCC_PCIE_1_BCR] = { 0x9d000 },
3326 [GCC_PCIE_1_LINK_DOWN_BCR] = { 0x9e014 },
3327 [GCC_PCIE_1_NOCSR_COM_PHY_BCR] = { 0x9e020 },
3328 [GCC_PCIE_1_PHY_BCR] = { 0x9e01c },
3329 [GCC_PCIE_1_PHY_NOCSR_COM_PHY_BCR] = { 0x9e000 },
3330 [GCC_PCIE_PHY_BCR] = { 0x7f000 },
3331 [GCC_PCIE_PHY_CFG_AHB_BCR] = { 0x7f00c },
3332 [GCC_PCIE_PHY_COM_BCR] = { 0x7f010 },
3333 [GCC_PDM_BCR] = { 0x43000 },
3334 [GCC_QUPV3_WRAPPER_0_BCR] = { 0x27000 },
3335 [GCC_QUPV3_WRAPPER_1_BCR] = { 0x28000 },
3336 [GCC_QUPV3_WRAPPER_2_BCR] = { 0x2e000 },
3337 [GCC_QUSB2PHY_PRIM_BCR] = { 0x22000 },
3338 [GCC_QUSB2PHY_SEC_BCR] = { 0x22004 },
3339 [GCC_SDCC2_BCR] = { 0x24000 },
3340 [GCC_SDCC4_BCR] = { 0x26000 },
3341 [GCC_UFS_PHY_BCR] = { 0x87000 },
3342 [GCC_USB30_PRIM_BCR] = { 0x49000 },
3343 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x60008 },
3344 [GCC_USB3_DP_PHY_SEC_BCR] = { 0x60014 },
3345 [GCC_USB3_PHY_PRIM_BCR] = { 0x60000 },
3346 [GCC_USB3_PHY_SEC_BCR] = { 0x6000c },
3347 [GCC_USB3PHY_PHY_PRIM_BCR] = { 0x60004 },
3348 [GCC_USB3PHY_PHY_SEC_BCR] = { 0x60010 },
3349 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x7a000 },
3350 [GCC_VIDEO_AXI0_CLK_ARES] = { .reg = 0x42018, .bit = 2, .udelay = 1000 },
3351 [GCC_VIDEO_AXI1_CLK_ARES] = { .reg = 0x42020, .bit = 2, .udelay = 1000 },
3352 [GCC_VIDEO_BCR] = { 0x42000 },
3355 static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
3356 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
3357 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
3358 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
3359 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
3360 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
3361 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
3362 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s6_clk_src),
3363 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s7_clk_src),
3364 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
3365 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
3366 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),
3367 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
3368 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
3369 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
3370 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src),
3371 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s0_clk_src),
3372 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s1_clk_src),
3373 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s2_clk_src),
3374 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s3_clk_src),
3375 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s4_clk_src),
3376 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s5_clk_src),
3377 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s6_clk_src),
3380 static struct gdsc *gcc_sm8450_gdscs[] = {
3381 [PCIE_0_GDSC] = &pcie_0_gdsc,
3382 [PCIE_1_GDSC] = &pcie_1_gdsc,
3383 [UFS_PHY_GDSC] = &ufs_phy_gdsc,
3384 [USB30_PRIM_GDSC] = &usb30_prim_gdsc,
3387 static const struct regmap_config gcc_sm8450_regmap_config = {
3391 .max_register = 0x1f1030,
3395 static const struct qcom_cc_desc gcc_sm8450_desc = {
3396 .config = &gcc_sm8450_regmap_config,
3397 .clks = gcc_sm8450_clocks,
3398 .num_clks = ARRAY_SIZE(gcc_sm8450_clocks),
3399 .resets = gcc_sm8450_resets,
3400 .num_resets = ARRAY_SIZE(gcc_sm8450_resets),
3401 .gdscs = gcc_sm8450_gdscs,
3402 .num_gdscs = ARRAY_SIZE(gcc_sm8450_gdscs),
3405 static const struct of_device_id gcc_sm8450_match_table[] = {
3406 { .compatible = "qcom,gcc-sm8450" },
3407 { .compatible = "qcom,sm8475-gcc" },
3410 MODULE_DEVICE_TABLE(of, gcc_sm8450_match_table);
3412 static int gcc_sm8450_probe(struct platform_device *pdev)
3414 struct regmap *regmap;
3417 regmap = qcom_cc_map(pdev, &gcc_sm8450_desc);
3419 return PTR_ERR(regmap);
3421 ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
3422 ARRAY_SIZE(gcc_dfs_clocks));
3426 if (of_device_is_compatible(pdev->dev.of_node, "qcom,sm8475-gcc")) {
3427 /* Update GCC PLL0 */
3428 gcc_gpll0.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE];
3429 gcc_gpll0.clkr.hw.init = &sm8475_gcc_gpll0_init;
3430 gcc_gpll0_out_even.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE];
3431 gcc_gpll0_out_even.clkr.hw.init = &sm8475_gcc_gpll0_out_even_init;
3433 /* Update GCC PLL4 */
3434 gcc_gpll4.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE];
3435 gcc_gpll4.clkr.hw.init = &sm8475_gcc_gpll4_init;
3437 /* Update GCC PLL9 */
3438 gcc_gpll9.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE];
3439 gcc_gpll9.clkr.hw.init = &sm8475_gcc_gpll9_init;
3441 gcc_sdcc2_apps_clk_src.freq_tbl = sm8475_ftbl_gcc_sdcc2_apps_clk_src;
3443 gcc_ufs_phy_axi_clk_src.parent_map = sm8475_gcc_parent_map_3;
3444 gcc_ufs_phy_axi_clk_src.freq_tbl = sm8475_ftbl_gcc_ufs_phy_axi_clk_src;
3445 gcc_ufs_phy_axi_clk_src.clkr.hw.init = &sm8475_gcc_ufs_phy_axi_clk_src_init;
3447 gcc_ufs_phy_ice_core_clk_src.parent_map = sm8475_gcc_parent_map_3;
3448 gcc_ufs_phy_ice_core_clk_src.freq_tbl = sm8475_ftbl_gcc_ufs_phy_ice_core_clk_src;
3449 gcc_ufs_phy_ice_core_clk_src.clkr.hw.init = &sm8475_gcc_ufs_phy_ice_core_clk_src_init;
3451 gcc_ufs_phy_unipro_core_clk_src.parent_map = sm8475_gcc_parent_map_3;
3452 gcc_ufs_phy_unipro_core_clk_src.freq_tbl = sm8475_ftbl_gcc_ufs_phy_ice_core_clk_src;
3453 gcc_ufs_phy_unipro_core_clk_src.clkr.hw.init = &sm8475_gcc_ufs_phy_unipro_core_clk_src_init;
3455 gcc_sm8450_desc.clks[SM8475_GCC_GPLL2] = &sm8475_gcc_gpll2.clkr;
3456 gcc_sm8450_desc.clks[SM8475_GCC_GPLL3] = &sm8475_gcc_gpll3.clkr;
3459 /* FORCE_MEM_CORE_ON for ufs phy ice core clocks */
3460 regmap_update_bits(regmap, gcc_ufs_phy_ice_core_clk.halt_reg, BIT(14), BIT(14));
3462 /* Keep some clocks always-on */
3463 qcom_branch_set_clk_en(regmap, 0x36004); /* GCC_CAMERA_AHB_CLK */
3464 qcom_branch_set_clk_en(regmap, 0x36020); /* GCC_CAMERA_XO_CLK */
3465 qcom_branch_set_clk_en(regmap, 0x37004); /* GCC_DISP_AHB_CLK */
3466 qcom_branch_set_clk_en(regmap, 0x3701c); /* GCC_DISP_XO_CLK */
3467 qcom_branch_set_clk_en(regmap, 0x81004); /* GCC_GPU_CFG_AHB_CLK */
3468 qcom_branch_set_clk_en(regmap, 0x42004); /* GCC_VIDEO_AHB_CLK */
3469 qcom_branch_set_clk_en(regmap, 0x42028); /* GCC_VIDEO_XO_CLK */
3471 return qcom_cc_really_probe(&pdev->dev, &gcc_sm8450_desc, regmap);
3474 static struct platform_driver gcc_sm8450_driver = {
3475 .probe = gcc_sm8450_probe,
3477 .name = "gcc-sm8450",
3478 .of_match_table = gcc_sm8450_match_table,
3482 static int __init gcc_sm8450_init(void)
3484 return platform_driver_register(&gcc_sm8450_driver);
3486 subsys_initcall(gcc_sm8450_init);
3488 static void __exit gcc_sm8450_exit(void)
3490 platform_driver_unregister(&gcc_sm8450_driver);
3492 module_exit(gcc_sm8450_exit);
3494 MODULE_DESCRIPTION("QTI GCC SM8450 / SM8475 Driver");
3495 MODULE_LICENSE("GPL v2");