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>
9 #include <linux/of_device.h>
10 #include <linux/regmap.h>
12 #include <dt-bindings/clock/qcom,gcc-sm8450.h>
14 #include "clk-alpha-pll.h"
15 #include "clk-branch.h"
17 #include "clk-regmap.h"
18 #include "clk-regmap-divider.h"
19 #include "clk-regmap-mux.h"
20 #include "clk-regmap-phy-mux.h"
32 P_UFS_PHY_RX_SYMBOL_0_CLK,
33 P_UFS_PHY_RX_SYMBOL_1_CLK,
34 P_UFS_PHY_TX_SYMBOL_0_CLK,
35 P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
38 static struct clk_alpha_pll gcc_gpll0 = {
40 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
42 .enable_reg = 0x62018,
43 .enable_mask = BIT(0),
44 .hw.init = &(struct clk_init_data){
46 .parent_data = &(const struct clk_parent_data){
50 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
55 static const struct clk_div_table post_div_table_gcc_gpll0_out_even[] = {
60 static struct clk_alpha_pll_postdiv gcc_gpll0_out_even = {
63 .post_div_table = post_div_table_gcc_gpll0_out_even,
64 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
66 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
67 .clkr.hw.init = &(struct clk_init_data){
68 .name = "gcc_gpll0_out_even",
69 .parent_hws = (const struct clk_hw*[]) {
73 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
77 static struct clk_alpha_pll gcc_gpll4 = {
79 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
81 .enable_reg = 0x62018,
82 .enable_mask = BIT(4),
83 .hw.init = &(struct clk_init_data){
85 .parent_data = &(const struct clk_parent_data){
89 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
94 static struct clk_alpha_pll gcc_gpll9 = {
96 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
98 .enable_reg = 0x62018,
99 .enable_mask = BIT(9),
100 .hw.init = &(struct clk_init_data){
102 .parent_data = &(const struct clk_parent_data){
103 .fw_name = "bi_tcxo",
106 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
111 static const struct parent_map gcc_parent_map_0[] = {
113 { P_GCC_GPLL0_OUT_MAIN, 1 },
114 { P_GCC_GPLL0_OUT_EVEN, 6 },
117 static const struct clk_parent_data gcc_parent_data_0[] = {
118 { .fw_name = "bi_tcxo" },
119 { .hw = &gcc_gpll0.clkr.hw },
120 { .hw = &gcc_gpll0_out_even.clkr.hw },
123 static const struct parent_map gcc_parent_map_1[] = {
125 { P_GCC_GPLL0_OUT_MAIN, 1 },
127 { P_GCC_GPLL0_OUT_EVEN, 6 },
130 static const struct clk_parent_data gcc_parent_data_1[] = {
131 { .fw_name = "bi_tcxo" },
132 { .hw = &gcc_gpll0.clkr.hw },
133 { .fw_name = "sleep_clk" },
134 { .hw = &gcc_gpll0_out_even.clkr.hw },
137 static const struct parent_map gcc_parent_map_2[] = {
142 static const struct clk_parent_data gcc_parent_data_2[] = {
143 { .fw_name = "bi_tcxo" },
144 { .fw_name = "sleep_clk" },
147 static const struct parent_map gcc_parent_map_3[] = {
151 static const struct clk_parent_data gcc_parent_data_3[] = {
152 { .fw_name = "bi_tcxo" },
155 static const struct parent_map gcc_parent_map_5[] = {
156 { P_PCIE_1_PHY_AUX_CLK, 0 },
160 static const struct clk_parent_data gcc_parent_data_5[] = {
161 { .fw_name = "pcie_1_phy_aux_clk" },
162 { .fw_name = "bi_tcxo" },
165 static const struct parent_map gcc_parent_map_7[] = {
167 { P_GCC_GPLL0_OUT_MAIN, 1 },
168 { P_GCC_GPLL9_OUT_MAIN, 2 },
169 { P_GCC_GPLL4_OUT_MAIN, 5 },
170 { P_GCC_GPLL0_OUT_EVEN, 6 },
173 static const struct clk_parent_data gcc_parent_data_7[] = {
174 { .fw_name = "bi_tcxo" },
175 { .hw = &gcc_gpll0.clkr.hw },
176 { .hw = &gcc_gpll9.clkr.hw },
177 { .hw = &gcc_gpll4.clkr.hw },
178 { .hw = &gcc_gpll0_out_even.clkr.hw },
181 static const struct parent_map gcc_parent_map_8[] = {
182 { P_UFS_PHY_RX_SYMBOL_0_CLK, 0 },
186 static const struct clk_parent_data gcc_parent_data_8[] = {
187 { .fw_name = "ufs_phy_rx_symbol_0_clk" },
188 { .fw_name = "bi_tcxo" },
191 static const struct parent_map gcc_parent_map_9[] = {
192 { P_UFS_PHY_RX_SYMBOL_1_CLK, 0 },
196 static const struct clk_parent_data gcc_parent_data_9[] = {
197 { .fw_name = "ufs_phy_rx_symbol_1_clk" },
198 { .fw_name = "bi_tcxo" },
201 static const struct parent_map gcc_parent_map_10[] = {
202 { P_UFS_PHY_TX_SYMBOL_0_CLK, 0 },
206 static const struct clk_parent_data gcc_parent_data_10[] = {
207 { .fw_name = "ufs_phy_tx_symbol_0_clk" },
208 { .fw_name = "bi_tcxo" },
211 static const struct parent_map gcc_parent_map_11[] = {
212 { P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 0 },
216 static const struct clk_parent_data gcc_parent_data_11[] = {
217 { .fw_name = "usb3_phy_wrapper_gcc_usb30_pipe_clk" },
218 { .fw_name = "bi_tcxo" },
221 static struct clk_regmap_phy_mux gcc_pcie_0_pipe_clk_src = {
224 .hw.init = &(struct clk_init_data){
225 .name = "gcc_pcie_0_pipe_clk_src",
226 .parent_data = &(const struct clk_parent_data){
227 .fw_name = "pcie_0_pipe_clk",
230 .ops = &clk_regmap_phy_mux_ops,
235 static struct clk_regmap_mux gcc_pcie_1_phy_aux_clk_src = {
239 .parent_map = gcc_parent_map_5,
241 .hw.init = &(struct clk_init_data){
242 .name = "gcc_pcie_1_phy_aux_clk_src",
243 .parent_data = gcc_parent_data_5,
244 .num_parents = ARRAY_SIZE(gcc_parent_data_5),
245 .ops = &clk_regmap_mux_closest_ops,
250 static struct clk_regmap_phy_mux gcc_pcie_1_pipe_clk_src = {
253 .hw.init = &(struct clk_init_data){
254 .name = "gcc_pcie_1_pipe_clk_src",
255 .parent_data = &(const struct clk_parent_data){
256 .fw_name = "pcie_1_pipe_clk",
259 .ops = &clk_regmap_phy_mux_ops,
264 static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_0_clk_src = {
268 .parent_map = gcc_parent_map_8,
270 .hw.init = &(struct clk_init_data){
271 .name = "gcc_ufs_phy_rx_symbol_0_clk_src",
272 .parent_data = gcc_parent_data_8,
273 .num_parents = ARRAY_SIZE(gcc_parent_data_8),
274 .ops = &clk_regmap_mux_closest_ops,
279 static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_1_clk_src = {
283 .parent_map = gcc_parent_map_9,
285 .hw.init = &(struct clk_init_data){
286 .name = "gcc_ufs_phy_rx_symbol_1_clk_src",
287 .parent_data = gcc_parent_data_9,
288 .num_parents = ARRAY_SIZE(gcc_parent_data_9),
289 .ops = &clk_regmap_mux_closest_ops,
294 static struct clk_regmap_mux gcc_ufs_phy_tx_symbol_0_clk_src = {
298 .parent_map = gcc_parent_map_10,
300 .hw.init = &(struct clk_init_data){
301 .name = "gcc_ufs_phy_tx_symbol_0_clk_src",
302 .parent_data = gcc_parent_data_10,
303 .num_parents = ARRAY_SIZE(gcc_parent_data_10),
304 .ops = &clk_regmap_mux_closest_ops,
309 static struct clk_regmap_mux gcc_usb3_prim_phy_pipe_clk_src = {
313 .parent_map = gcc_parent_map_11,
315 .hw.init = &(struct clk_init_data){
316 .name = "gcc_usb3_prim_phy_pipe_clk_src",
317 .parent_data = gcc_parent_data_11,
318 .num_parents = ARRAY_SIZE(gcc_parent_data_11),
319 .ops = &clk_regmap_mux_closest_ops,
324 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
325 F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
326 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
327 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
331 static struct clk_rcg2 gcc_gp1_clk_src = {
335 .parent_map = gcc_parent_map_1,
336 .freq_tbl = ftbl_gcc_gp1_clk_src,
337 .clkr.hw.init = &(struct clk_init_data){
338 .name = "gcc_gp1_clk_src",
339 .parent_data = gcc_parent_data_1,
340 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
341 .flags = CLK_SET_RATE_PARENT,
342 .ops = &clk_rcg2_ops,
346 static struct clk_rcg2 gcc_gp2_clk_src = {
350 .parent_map = gcc_parent_map_1,
351 .freq_tbl = ftbl_gcc_gp1_clk_src,
352 .clkr.hw.init = &(struct clk_init_data){
353 .name = "gcc_gp2_clk_src",
354 .parent_data = gcc_parent_data_1,
355 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
356 .flags = CLK_SET_RATE_PARENT,
357 .ops = &clk_rcg2_ops,
361 static struct clk_rcg2 gcc_gp3_clk_src = {
365 .parent_map = gcc_parent_map_1,
366 .freq_tbl = ftbl_gcc_gp1_clk_src,
367 .clkr.hw.init = &(struct clk_init_data){
368 .name = "gcc_gp3_clk_src",
369 .parent_data = gcc_parent_data_1,
370 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
371 .flags = CLK_SET_RATE_PARENT,
372 .ops = &clk_rcg2_ops,
376 static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
377 F(19200000, P_BI_TCXO, 1, 0, 0),
381 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
385 .parent_map = gcc_parent_map_2,
386 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
387 .clkr.hw.init = &(struct clk_init_data){
388 .name = "gcc_pcie_0_aux_clk_src",
389 .parent_data = gcc_parent_data_2,
390 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
391 .flags = CLK_SET_RATE_PARENT,
392 .ops = &clk_rcg2_ops,
396 static const struct freq_tbl ftbl_gcc_pcie_0_phy_rchng_clk_src[] = {
397 F(19200000, P_BI_TCXO, 1, 0, 0),
398 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
402 static struct clk_rcg2 gcc_pcie_0_phy_rchng_clk_src = {
406 .parent_map = gcc_parent_map_0,
407 .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
408 .clkr.hw.init = &(struct clk_init_data){
409 .name = "gcc_pcie_0_phy_rchng_clk_src",
410 .parent_data = gcc_parent_data_0,
411 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
412 .flags = CLK_SET_RATE_PARENT,
413 .ops = &clk_rcg2_ops,
417 static struct clk_rcg2 gcc_pcie_1_aux_clk_src = {
421 .parent_map = gcc_parent_map_2,
422 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
423 .clkr.hw.init = &(struct clk_init_data){
424 .name = "gcc_pcie_1_aux_clk_src",
425 .parent_data = gcc_parent_data_2,
426 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
427 .flags = CLK_SET_RATE_PARENT,
428 .ops = &clk_rcg2_ops,
432 static struct clk_rcg2 gcc_pcie_1_phy_rchng_clk_src = {
436 .parent_map = gcc_parent_map_0,
437 .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
438 .clkr.hw.init = &(struct clk_init_data){
439 .name = "gcc_pcie_1_phy_rchng_clk_src",
440 .parent_data = gcc_parent_data_0,
441 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
442 .flags = CLK_SET_RATE_PARENT,
443 .ops = &clk_rcg2_ops,
447 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
448 F(60000000, P_GCC_GPLL0_OUT_MAIN, 10, 0, 0),
452 static struct clk_rcg2 gcc_pdm2_clk_src = {
456 .parent_map = gcc_parent_map_0,
457 .freq_tbl = ftbl_gcc_pdm2_clk_src,
458 .clkr.hw.init = &(struct clk_init_data){
459 .name = "gcc_pdm2_clk_src",
460 .parent_data = gcc_parent_data_0,
461 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
462 .flags = CLK_SET_RATE_PARENT,
463 .ops = &clk_rcg2_ops,
467 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
468 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
469 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
470 F(19200000, P_BI_TCXO, 1, 0, 0),
471 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
472 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
473 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
474 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
475 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
476 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
477 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
478 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
482 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
483 .name = "gcc_qupv3_wrap0_s0_clk_src",
484 .parent_data = gcc_parent_data_0,
485 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
486 .flags = CLK_SET_RATE_PARENT,
487 .ops = &clk_rcg2_ops,
490 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
494 .parent_map = gcc_parent_map_0,
495 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
496 .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
499 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
500 .name = "gcc_qupv3_wrap0_s1_clk_src",
501 .parent_data = gcc_parent_data_0,
502 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
503 .flags = CLK_SET_RATE_PARENT,
504 .ops = &clk_rcg2_ops,
507 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
511 .parent_map = gcc_parent_map_0,
512 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
513 .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
516 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
517 .name = "gcc_qupv3_wrap0_s2_clk_src",
518 .parent_data = gcc_parent_data_0,
519 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
520 .flags = CLK_SET_RATE_PARENT,
521 .ops = &clk_rcg2_ops,
524 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
528 .parent_map = gcc_parent_map_0,
529 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
530 .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
533 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
534 .name = "gcc_qupv3_wrap0_s3_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,
541 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
545 .parent_map = gcc_parent_map_0,
546 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
547 .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
550 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
551 .name = "gcc_qupv3_wrap0_s4_clk_src",
552 .parent_data = gcc_parent_data_0,
553 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
554 .flags = CLK_SET_RATE_PARENT,
555 .ops = &clk_rcg2_ops,
558 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
562 .parent_map = gcc_parent_map_0,
563 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
564 .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
567 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s5_clk_src[] = {
568 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
569 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
570 F(19200000, P_BI_TCXO, 1, 0, 0),
571 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
572 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
573 F(37500000, P_GCC_GPLL0_OUT_EVEN, 8, 0, 0),
574 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
575 F(50000000, P_GCC_GPLL0_OUT_MAIN, 12, 0, 0),
579 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
580 .name = "gcc_qupv3_wrap0_s5_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_s5_clk_src = {
591 .parent_map = gcc_parent_map_0,
592 .freq_tbl = ftbl_gcc_qupv3_wrap0_s5_clk_src,
593 .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
596 static struct clk_init_data gcc_qupv3_wrap0_s6_clk_src_init = {
597 .name = "gcc_qupv3_wrap0_s6_clk_src",
598 .parent_data = gcc_parent_data_0,
599 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
600 .flags = CLK_SET_RATE_PARENT,
601 .ops = &clk_rcg2_ops,
604 static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
608 .parent_map = gcc_parent_map_0,
609 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
610 .clkr.hw.init = &gcc_qupv3_wrap0_s6_clk_src_init,
613 static struct clk_init_data gcc_qupv3_wrap0_s7_clk_src_init = {
614 .name = "gcc_qupv3_wrap0_s7_clk_src",
615 .parent_data = gcc_parent_data_0,
616 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
617 .flags = CLK_SET_RATE_PARENT,
618 .ops = &clk_rcg2_ops,
621 static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = {
625 .parent_map = gcc_parent_map_0,
626 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
627 .clkr.hw.init = &gcc_qupv3_wrap0_s7_clk_src_init,
630 static const struct freq_tbl ftbl_gcc_qupv3_wrap1_s0_clk_src[] = {
631 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
632 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
633 F(19200000, P_BI_TCXO, 1, 0, 0),
634 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
635 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
636 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
637 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
638 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
639 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
640 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
641 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
642 F(102400000, P_GCC_GPLL0_OUT_EVEN, 1, 128, 375),
643 F(112000000, P_GCC_GPLL0_OUT_EVEN, 1, 28, 75),
644 F(117964800, P_GCC_GPLL0_OUT_EVEN, 1, 6144, 15625),
645 F(120000000, P_GCC_GPLL0_OUT_MAIN, 5, 0, 0),
649 static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
650 .name = "gcc_qupv3_wrap1_s0_clk_src",
651 .parent_data = gcc_parent_data_0,
652 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
653 .flags = CLK_SET_RATE_PARENT,
654 .ops = &clk_rcg2_ops,
657 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
661 .parent_map = gcc_parent_map_0,
662 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
663 .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
666 static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
667 .name = "gcc_qupv3_wrap1_s1_clk_src",
668 .parent_data = gcc_parent_data_0,
669 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
670 .flags = CLK_SET_RATE_PARENT,
671 .ops = &clk_rcg2_ops,
674 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
678 .parent_map = gcc_parent_map_0,
679 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
680 .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
683 static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {
684 .name = "gcc_qupv3_wrap1_s2_clk_src",
685 .parent_data = gcc_parent_data_0,
686 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
687 .flags = CLK_SET_RATE_PARENT,
688 .ops = &clk_rcg2_ops,
691 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
695 .parent_map = gcc_parent_map_0,
696 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
697 .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,
700 static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
701 .name = "gcc_qupv3_wrap1_s3_clk_src",
702 .parent_data = gcc_parent_data_0,
703 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
704 .flags = CLK_SET_RATE_PARENT,
705 .ops = &clk_rcg2_ops,
708 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
712 .parent_map = gcc_parent_map_0,
713 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
714 .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
717 static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
718 .name = "gcc_qupv3_wrap1_s4_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_wrap1_s4_clk_src = {
729 .parent_map = gcc_parent_map_0,
730 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
731 .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
734 static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
735 .name = "gcc_qupv3_wrap1_s5_clk_src",
736 .parent_data = gcc_parent_data_0,
737 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
738 .flags = CLK_SET_RATE_PARENT,
739 .ops = &clk_rcg2_ops,
742 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
746 .parent_map = gcc_parent_map_0,
747 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
748 .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
751 static struct clk_init_data gcc_qupv3_wrap1_s6_clk_src_init = {
752 .name = "gcc_qupv3_wrap1_s6_clk_src",
753 .parent_data = gcc_parent_data_0,
754 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
755 .flags = CLK_SET_RATE_PARENT,
756 .ops = &clk_rcg2_ops,
759 static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = {
763 .parent_map = gcc_parent_map_0,
764 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
765 .clkr.hw.init = &gcc_qupv3_wrap1_s6_clk_src_init,
768 static struct clk_init_data gcc_qupv3_wrap2_s0_clk_src_init = {
769 .name = "gcc_qupv3_wrap2_s0_clk_src",
770 .parent_data = gcc_parent_data_0,
771 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
772 .flags = CLK_SET_RATE_PARENT,
773 .ops = &clk_rcg2_ops,
776 static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = {
780 .parent_map = gcc_parent_map_0,
781 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
782 .clkr.hw.init = &gcc_qupv3_wrap2_s0_clk_src_init,
785 static struct clk_init_data gcc_qupv3_wrap2_s1_clk_src_init = {
786 .name = "gcc_qupv3_wrap2_s1_clk_src",
787 .parent_data = gcc_parent_data_0,
788 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
789 .flags = CLK_SET_RATE_PARENT,
790 .ops = &clk_rcg2_ops,
793 static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = {
797 .parent_map = gcc_parent_map_0,
798 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
799 .clkr.hw.init = &gcc_qupv3_wrap2_s1_clk_src_init,
802 static struct clk_init_data gcc_qupv3_wrap2_s2_clk_src_init = {
803 .name = "gcc_qupv3_wrap2_s2_clk_src",
804 .parent_data = gcc_parent_data_0,
805 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
806 .flags = CLK_SET_RATE_PARENT,
807 .ops = &clk_rcg2_ops,
810 static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src = {
814 .parent_map = gcc_parent_map_0,
815 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
816 .clkr.hw.init = &gcc_qupv3_wrap2_s2_clk_src_init,
819 static struct clk_init_data gcc_qupv3_wrap2_s3_clk_src_init = {
820 .name = "gcc_qupv3_wrap2_s3_clk_src",
821 .parent_data = gcc_parent_data_0,
822 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
823 .flags = CLK_SET_RATE_PARENT,
824 .ops = &clk_rcg2_ops,
827 static struct clk_rcg2 gcc_qupv3_wrap2_s3_clk_src = {
831 .parent_map = gcc_parent_map_0,
832 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
833 .clkr.hw.init = &gcc_qupv3_wrap2_s3_clk_src_init,
836 static struct clk_init_data gcc_qupv3_wrap2_s4_clk_src_init = {
837 .name = "gcc_qupv3_wrap2_s4_clk_src",
838 .parent_data = gcc_parent_data_0,
839 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
840 .flags = CLK_SET_RATE_PARENT,
841 .ops = &clk_rcg2_ops,
844 static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = {
848 .parent_map = gcc_parent_map_0,
849 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
850 .clkr.hw.init = &gcc_qupv3_wrap2_s4_clk_src_init,
853 static struct clk_init_data gcc_qupv3_wrap2_s5_clk_src_init = {
854 .name = "gcc_qupv3_wrap2_s5_clk_src",
855 .parent_data = gcc_parent_data_0,
856 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
857 .flags = CLK_SET_RATE_PARENT,
858 .ops = &clk_rcg2_ops,
861 static struct clk_rcg2 gcc_qupv3_wrap2_s5_clk_src = {
865 .parent_map = gcc_parent_map_0,
866 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
867 .clkr.hw.init = &gcc_qupv3_wrap2_s5_clk_src_init,
870 static struct clk_init_data gcc_qupv3_wrap2_s6_clk_src_init = {
871 .name = "gcc_qupv3_wrap2_s6_clk_src",
872 .parent_data = gcc_parent_data_0,
873 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
874 .flags = CLK_SET_RATE_PARENT,
875 .ops = &clk_rcg2_ops,
878 static struct clk_rcg2 gcc_qupv3_wrap2_s6_clk_src = {
882 .parent_map = gcc_parent_map_0,
883 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
884 .clkr.hw.init = &gcc_qupv3_wrap2_s6_clk_src_init,
887 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
888 F(400000, P_BI_TCXO, 12, 1, 4),
889 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
890 F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
891 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
892 F(202000000, P_GCC_GPLL9_OUT_MAIN, 4, 0, 0),
896 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
900 .parent_map = gcc_parent_map_7,
901 .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
902 .clkr.hw.init = &(struct clk_init_data){
903 .name = "gcc_sdcc2_apps_clk_src",
904 .parent_data = gcc_parent_data_7,
905 .num_parents = ARRAY_SIZE(gcc_parent_data_7),
906 .flags = CLK_SET_RATE_PARENT,
907 .ops = &clk_rcg2_ops,
911 static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = {
912 F(400000, P_BI_TCXO, 12, 1, 4),
913 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
914 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
918 static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {
922 .parent_map = gcc_parent_map_0,
923 .freq_tbl = ftbl_gcc_sdcc4_apps_clk_src,
924 .clkr.hw.init = &(struct clk_init_data){
925 .name = "gcc_sdcc4_apps_clk_src",
926 .parent_data = gcc_parent_data_0,
927 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
928 .flags = CLK_SET_RATE_PARENT,
929 .ops = &clk_rcg2_ops,
933 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
934 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
935 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
936 F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0),
937 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
941 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
945 .parent_map = gcc_parent_map_0,
946 .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
947 .clkr.hw.init = &(struct clk_init_data){
948 .name = "gcc_ufs_phy_axi_clk_src",
949 .parent_data = gcc_parent_data_0,
950 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
951 .flags = CLK_SET_RATE_PARENT,
952 .ops = &clk_rcg2_ops,
956 static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
957 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
958 F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0),
959 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
963 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
967 .parent_map = gcc_parent_map_0,
968 .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
969 .clkr.hw.init = &(struct clk_init_data){
970 .name = "gcc_ufs_phy_ice_core_clk_src",
971 .parent_data = gcc_parent_data_0,
972 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
973 .flags = CLK_SET_RATE_PARENT,
974 .ops = &clk_rcg2_ops,
978 static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = {
979 F(9600000, P_BI_TCXO, 2, 0, 0),
980 F(19200000, P_BI_TCXO, 1, 0, 0),
984 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
988 .parent_map = gcc_parent_map_3,
989 .freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src,
990 .clkr.hw.init = &(struct clk_init_data){
991 .name = "gcc_ufs_phy_phy_aux_clk_src",
992 .parent_data = gcc_parent_data_3,
993 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
994 .flags = CLK_SET_RATE_PARENT,
995 .ops = &clk_rcg2_ops,
999 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
1000 .cmd_rcgr = 0x8708c,
1003 .parent_map = gcc_parent_map_0,
1004 .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
1005 .clkr.hw.init = &(struct clk_init_data){
1006 .name = "gcc_ufs_phy_unipro_core_clk_src",
1007 .parent_data = gcc_parent_data_0,
1008 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1009 .flags = CLK_SET_RATE_PARENT,
1010 .ops = &clk_rcg2_ops,
1014 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
1015 F(66666667, P_GCC_GPLL0_OUT_EVEN, 4.5, 0, 0),
1016 F(133333333, P_GCC_GPLL0_OUT_MAIN, 4.5, 0, 0),
1017 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
1018 F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0),
1022 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1023 .cmd_rcgr = 0x49028,
1026 .parent_map = gcc_parent_map_0,
1027 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1028 .clkr.hw.init = &(struct clk_init_data){
1029 .name = "gcc_usb30_prim_master_clk_src",
1030 .parent_data = gcc_parent_data_0,
1031 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1032 .flags = CLK_SET_RATE_PARENT,
1033 .ops = &clk_rcg2_ops,
1037 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1038 .cmd_rcgr = 0x49040,
1041 .parent_map = gcc_parent_map_0,
1042 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
1043 .clkr.hw.init = &(struct clk_init_data){
1044 .name = "gcc_usb30_prim_mock_utmi_clk_src",
1045 .parent_data = gcc_parent_data_0,
1046 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1047 .flags = CLK_SET_RATE_PARENT,
1048 .ops = &clk_rcg2_ops,
1052 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1053 .cmd_rcgr = 0x4906c,
1056 .parent_map = gcc_parent_map_2,
1057 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
1058 .clkr.hw.init = &(struct clk_init_data){
1059 .name = "gcc_usb3_prim_phy_aux_clk_src",
1060 .parent_data = gcc_parent_data_2,
1061 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
1062 .flags = CLK_SET_RATE_PARENT,
1063 .ops = &clk_rcg2_ops,
1067 static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {
1071 .clkr.hw.init = &(struct clk_init_data) {
1072 .name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",
1073 .parent_hws = (const struct clk_hw*[]) {
1074 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
1077 .flags = CLK_SET_RATE_PARENT,
1078 .ops = &clk_regmap_div_ro_ops,
1082 static struct clk_branch gcc_aggre_noc_pcie_0_axi_clk = {
1083 .halt_reg = 0x7b08c,
1084 .halt_check = BRANCH_HALT_SKIP,
1085 .hwcg_reg = 0x7b08c,
1088 .enable_reg = 0x62000,
1089 .enable_mask = BIT(12),
1090 .hw.init = &(struct clk_init_data){
1091 .name = "gcc_aggre_noc_pcie_0_axi_clk",
1092 .ops = &clk_branch2_ops,
1097 static struct clk_branch gcc_aggre_noc_pcie_1_axi_clk = {
1098 .halt_reg = 0x9d098,
1099 .halt_check = BRANCH_HALT_SKIP,
1100 .hwcg_reg = 0x9d098,
1103 .enable_reg = 0x62000,
1104 .enable_mask = BIT(11),
1105 .hw.init = &(struct clk_init_data){
1106 .name = "gcc_aggre_noc_pcie_1_axi_clk",
1107 .ops = &clk_branch2_ops,
1112 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
1113 .halt_reg = 0x870d4,
1114 .halt_check = BRANCH_HALT_VOTED,
1115 .hwcg_reg = 0x870d4,
1118 .enable_reg = 0x870d4,
1119 .enable_mask = BIT(0),
1120 .hw.init = &(struct clk_init_data){
1121 .name = "gcc_aggre_ufs_phy_axi_clk",
1122 .parent_hws = (const struct clk_hw*[]) {
1123 &gcc_ufs_phy_axi_clk_src.clkr.hw,
1126 .flags = CLK_SET_RATE_PARENT,
1127 .ops = &clk_branch2_ops,
1132 static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = {
1133 .halt_reg = 0x870d4,
1134 .halt_check = BRANCH_HALT_VOTED,
1135 .hwcg_reg = 0x870d4,
1138 .enable_reg = 0x870d4,
1139 .enable_mask = BIT(1),
1140 .hw.init = &(struct clk_init_data){
1141 .name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk",
1142 .parent_hws = (const struct clk_hw*[]) {
1143 &gcc_ufs_phy_axi_clk_src.clkr.hw,
1146 .flags = CLK_SET_RATE_PARENT,
1147 .ops = &clk_branch2_ops,
1152 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
1153 .halt_reg = 0x49088,
1154 .halt_check = BRANCH_HALT_VOTED,
1155 .hwcg_reg = 0x49088,
1158 .enable_reg = 0x49088,
1159 .enable_mask = BIT(0),
1160 .hw.init = &(struct clk_init_data){
1161 .name = "gcc_aggre_usb3_prim_axi_clk",
1162 .parent_hws = (const struct clk_hw*[]) {
1163 &gcc_usb30_prim_master_clk_src.clkr.hw,
1166 .flags = CLK_SET_RATE_PARENT,
1167 .ops = &clk_branch2_ops,
1172 static struct clk_branch gcc_boot_rom_ahb_clk = {
1173 .halt_reg = 0x48004,
1174 .halt_check = BRANCH_HALT_VOTED,
1175 .hwcg_reg = 0x48004,
1178 .enable_reg = 0x62000,
1179 .enable_mask = BIT(10),
1180 .hw.init = &(struct clk_init_data){
1181 .name = "gcc_boot_rom_ahb_clk",
1182 .ops = &clk_branch2_ops,
1187 static struct clk_branch gcc_camera_hf_axi_clk = {
1188 .halt_reg = 0x36010,
1189 .halt_check = BRANCH_HALT_SKIP,
1190 .hwcg_reg = 0x36010,
1193 .enable_reg = 0x36010,
1194 .enable_mask = BIT(0),
1195 .hw.init = &(struct clk_init_data){
1196 .name = "gcc_camera_hf_axi_clk",
1197 .ops = &clk_branch2_ops,
1202 static struct clk_branch gcc_camera_sf_axi_clk = {
1203 .halt_reg = 0x36018,
1204 .halt_check = BRANCH_HALT_SKIP,
1205 .hwcg_reg = 0x36018,
1208 .enable_reg = 0x36018,
1209 .enable_mask = BIT(0),
1210 .hw.init = &(struct clk_init_data){
1211 .name = "gcc_camera_sf_axi_clk",
1212 .ops = &clk_branch2_ops,
1217 static struct clk_branch gcc_cfg_noc_pcie_anoc_ahb_clk = {
1218 .halt_reg = 0x20030,
1219 .halt_check = BRANCH_HALT_VOTED,
1220 .hwcg_reg = 0x20030,
1223 .enable_reg = 0x62000,
1224 .enable_mask = BIT(20),
1225 .hw.init = &(struct clk_init_data){
1226 .name = "gcc_cfg_noc_pcie_anoc_ahb_clk",
1227 .ops = &clk_branch2_ops,
1232 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1233 .halt_reg = 0x49084,
1234 .halt_check = BRANCH_HALT_VOTED,
1235 .hwcg_reg = 0x49084,
1238 .enable_reg = 0x49084,
1239 .enable_mask = BIT(0),
1240 .hw.init = &(struct clk_init_data){
1241 .name = "gcc_cfg_noc_usb3_prim_axi_clk",
1242 .parent_hws = (const struct clk_hw*[]) {
1243 &gcc_usb30_prim_master_clk_src.clkr.hw,
1246 .flags = CLK_SET_RATE_PARENT,
1247 .ops = &clk_branch2_ops,
1252 static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1253 .halt_reg = 0x81154,
1254 .halt_check = BRANCH_HALT_SKIP,
1255 .hwcg_reg = 0x81154,
1258 .enable_reg = 0x81154,
1259 .enable_mask = BIT(0),
1260 .hw.init = &(struct clk_init_data){
1261 .name = "gcc_ddrss_gpu_axi_clk",
1262 .ops = &clk_branch2_aon_ops,
1267 static struct clk_branch gcc_ddrss_pcie_sf_tbu_clk = {
1268 .halt_reg = 0x9d094,
1269 .halt_check = BRANCH_HALT_SKIP,
1270 .hwcg_reg = 0x9d094,
1273 .enable_reg = 0x62000,
1274 .enable_mask = BIT(19),
1275 .hw.init = &(struct clk_init_data){
1276 .name = "gcc_ddrss_pcie_sf_tbu_clk",
1277 .ops = &clk_branch2_ops,
1282 static struct clk_branch gcc_disp_hf_axi_clk = {
1283 .halt_reg = 0x3700c,
1284 .halt_check = BRANCH_HALT_SKIP,
1285 .hwcg_reg = 0x3700c,
1288 .enable_reg = 0x3700c,
1289 .enable_mask = BIT(0),
1290 .hw.init = &(struct clk_init_data){
1291 .name = "gcc_disp_hf_axi_clk",
1292 .ops = &clk_branch2_ops,
1297 static struct clk_branch gcc_disp_sf_axi_clk = {
1298 .halt_reg = 0x37014,
1299 .halt_check = BRANCH_HALT_SKIP,
1300 .hwcg_reg = 0x37014,
1303 .enable_reg = 0x37014,
1304 .enable_mask = BIT(0),
1305 .hw.init = &(struct clk_init_data){
1306 .name = "gcc_disp_sf_axi_clk",
1307 .ops = &clk_branch2_ops,
1312 static struct clk_branch gcc_eusb3_0_clkref_en = {
1313 .halt_reg = 0x9c00c,
1314 .halt_check = BRANCH_HALT,
1316 .enable_reg = 0x9c00c,
1317 .enable_mask = BIT(0),
1318 .hw.init = &(struct clk_init_data){
1319 .name = "gcc_eusb3_0_clkref_en",
1320 .ops = &clk_branch2_ops,
1325 static struct clk_branch gcc_gp1_clk = {
1326 .halt_reg = 0x74000,
1327 .halt_check = BRANCH_HALT,
1329 .enable_reg = 0x74000,
1330 .enable_mask = BIT(0),
1331 .hw.init = &(struct clk_init_data){
1332 .name = "gcc_gp1_clk",
1333 .parent_hws = (const struct clk_hw*[]) {
1334 &gcc_gp1_clk_src.clkr.hw,
1337 .flags = CLK_SET_RATE_PARENT,
1338 .ops = &clk_branch2_ops,
1343 static struct clk_branch gcc_gp2_clk = {
1344 .halt_reg = 0x75000,
1345 .halt_check = BRANCH_HALT,
1347 .enable_reg = 0x75000,
1348 .enable_mask = BIT(0),
1349 .hw.init = &(struct clk_init_data){
1350 .name = "gcc_gp2_clk",
1351 .parent_hws = (const struct clk_hw*[]) {
1352 &gcc_gp2_clk_src.clkr.hw,
1355 .flags = CLK_SET_RATE_PARENT,
1356 .ops = &clk_branch2_ops,
1361 static struct clk_branch gcc_gp3_clk = {
1362 .halt_reg = 0x76000,
1363 .halt_check = BRANCH_HALT,
1365 .enable_reg = 0x76000,
1366 .enable_mask = BIT(0),
1367 .hw.init = &(struct clk_init_data){
1368 .name = "gcc_gp3_clk",
1369 .parent_hws = (const struct clk_hw*[]) {
1370 &gcc_gp3_clk_src.clkr.hw,
1373 .flags = CLK_SET_RATE_PARENT,
1374 .ops = &clk_branch2_ops,
1379 static struct clk_branch gcc_gpu_gpll0_clk_src = {
1380 .halt_check = BRANCH_HALT_DELAY,
1382 .enable_reg = 0x62000,
1383 .enable_mask = BIT(15),
1384 .hw.init = &(struct clk_init_data){
1385 .name = "gcc_gpu_gpll0_clk_src",
1386 .parent_hws = (const struct clk_hw*[]) {
1390 .flags = CLK_SET_RATE_PARENT,
1391 .ops = &clk_branch2_ops,
1396 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
1397 .halt_check = BRANCH_HALT_DELAY,
1399 .enable_reg = 0x62000,
1400 .enable_mask = BIT(16),
1401 .hw.init = &(struct clk_init_data){
1402 .name = "gcc_gpu_gpll0_div_clk_src",
1403 .parent_hws = (const struct clk_hw*[]) {
1404 &gcc_gpll0_out_even.clkr.hw,
1407 .flags = CLK_SET_RATE_PARENT,
1408 .ops = &clk_branch2_ops,
1413 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
1414 .halt_reg = 0x81010,
1415 .halt_check = BRANCH_HALT_VOTED,
1416 .hwcg_reg = 0x81010,
1419 .enable_reg = 0x81010,
1420 .enable_mask = BIT(0),
1421 .hw.init = &(struct clk_init_data){
1422 .name = "gcc_gpu_memnoc_gfx_clk",
1423 .ops = &clk_branch2_ops,
1428 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
1429 .halt_reg = 0x81018,
1430 .halt_check = BRANCH_HALT_DELAY,
1432 .enable_reg = 0x81018,
1433 .enable_mask = BIT(0),
1434 .hw.init = &(struct clk_init_data){
1435 .name = "gcc_gpu_snoc_dvm_gfx_clk",
1436 .ops = &clk_branch2_ops,
1441 static struct clk_branch gcc_pcie_0_aux_clk = {
1442 .halt_reg = 0x7b034,
1443 .halt_check = BRANCH_HALT_VOTED,
1445 .enable_reg = 0x62008,
1446 .enable_mask = BIT(3),
1447 .hw.init = &(struct clk_init_data){
1448 .name = "gcc_pcie_0_aux_clk",
1449 .parent_hws = (const struct clk_hw*[]) {
1450 &gcc_pcie_0_aux_clk_src.clkr.hw,
1453 .flags = CLK_SET_RATE_PARENT,
1454 .ops = &clk_branch2_ops,
1459 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
1460 .halt_reg = 0x7b030,
1461 .halt_check = BRANCH_HALT_VOTED,
1462 .hwcg_reg = 0x7b030,
1465 .enable_reg = 0x62008,
1466 .enable_mask = BIT(2),
1467 .hw.init = &(struct clk_init_data){
1468 .name = "gcc_pcie_0_cfg_ahb_clk",
1469 .ops = &clk_branch2_ops,
1474 static struct clk_branch gcc_pcie_0_clkref_en = {
1475 .halt_reg = 0x9c004,
1476 .halt_check = BRANCH_HALT,
1478 .enable_reg = 0x9c004,
1479 .enable_mask = BIT(0),
1480 .hw.init = &(struct clk_init_data){
1481 .name = "gcc_pcie_0_clkref_en",
1482 .ops = &clk_branch2_ops,
1487 static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
1488 .halt_reg = 0x7b028,
1489 .halt_check = BRANCH_HALT_SKIP,
1491 .enable_reg = 0x62008,
1492 .enable_mask = BIT(1),
1493 .hw.init = &(struct clk_init_data){
1494 .name = "gcc_pcie_0_mstr_axi_clk",
1495 .ops = &clk_branch2_ops,
1500 static struct clk_branch gcc_pcie_0_phy_rchng_clk = {
1501 .halt_reg = 0x7b044,
1502 .halt_check = BRANCH_HALT_VOTED,
1504 .enable_reg = 0x62000,
1505 .enable_mask = BIT(22),
1506 .hw.init = &(struct clk_init_data){
1507 .name = "gcc_pcie_0_phy_rchng_clk",
1508 .parent_hws = (const struct clk_hw*[]) {
1509 &gcc_pcie_0_phy_rchng_clk_src.clkr.hw,
1512 .flags = CLK_SET_RATE_PARENT,
1513 .ops = &clk_branch2_ops,
1518 static struct clk_branch gcc_pcie_0_pipe_clk = {
1519 .halt_reg = 0x7b03c,
1520 .halt_check = BRANCH_HALT_SKIP,
1522 .enable_reg = 0x62008,
1523 .enable_mask = BIT(4),
1524 .hw.init = &(struct clk_init_data){
1525 .name = "gcc_pcie_0_pipe_clk",
1526 .parent_hws = (const struct clk_hw*[]) {
1527 &gcc_pcie_0_pipe_clk_src.clkr.hw,
1530 .flags = CLK_SET_RATE_PARENT,
1531 .ops = &clk_branch2_ops,
1536 static struct clk_branch gcc_pcie_0_slv_axi_clk = {
1537 .halt_reg = 0x7b020,
1538 .halt_check = BRANCH_HALT_VOTED,
1539 .hwcg_reg = 0x7b020,
1542 .enable_reg = 0x62008,
1543 .enable_mask = BIT(0),
1544 .hw.init = &(struct clk_init_data){
1545 .name = "gcc_pcie_0_slv_axi_clk",
1546 .ops = &clk_branch2_ops,
1551 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
1552 .halt_reg = 0x7b01c,
1553 .halt_check = BRANCH_HALT_VOTED,
1555 .enable_reg = 0x62008,
1556 .enable_mask = BIT(5),
1557 .hw.init = &(struct clk_init_data){
1558 .name = "gcc_pcie_0_slv_q2a_axi_clk",
1559 .ops = &clk_branch2_ops,
1564 static struct clk_branch gcc_pcie_1_aux_clk = {
1565 .halt_reg = 0x9d030,
1566 .halt_check = BRANCH_HALT_VOTED,
1568 .enable_reg = 0x62000,
1569 .enable_mask = BIT(29),
1570 .hw.init = &(struct clk_init_data){
1571 .name = "gcc_pcie_1_aux_clk",
1572 .parent_hws = (const struct clk_hw*[]) {
1573 &gcc_pcie_1_aux_clk_src.clkr.hw,
1576 .flags = CLK_SET_RATE_PARENT,
1577 .ops = &clk_branch2_ops,
1582 static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
1583 .halt_reg = 0x9d02c,
1584 .halt_check = BRANCH_HALT_VOTED,
1585 .hwcg_reg = 0x9d02c,
1588 .enable_reg = 0x62000,
1589 .enable_mask = BIT(28),
1590 .hw.init = &(struct clk_init_data){
1591 .name = "gcc_pcie_1_cfg_ahb_clk",
1592 .ops = &clk_branch2_ops,
1597 static struct clk_branch gcc_pcie_1_clkref_en = {
1598 .halt_reg = 0x9c008,
1599 .halt_check = BRANCH_HALT,
1601 .enable_reg = 0x9c008,
1602 .enable_mask = BIT(0),
1603 .hw.init = &(struct clk_init_data){
1604 .name = "gcc_pcie_1_clkref_en",
1605 .ops = &clk_branch2_ops,
1610 static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
1611 .halt_reg = 0x9d024,
1612 .halt_check = BRANCH_HALT_SKIP,
1614 .enable_reg = 0x62000,
1615 .enable_mask = BIT(27),
1616 .hw.init = &(struct clk_init_data){
1617 .name = "gcc_pcie_1_mstr_axi_clk",
1618 .ops = &clk_branch2_ops,
1623 static struct clk_branch gcc_pcie_1_phy_aux_clk = {
1624 .halt_reg = 0x9d038,
1625 .halt_check = BRANCH_HALT_VOTED,
1627 .enable_reg = 0x62000,
1628 .enable_mask = BIT(24),
1629 .hw.init = &(struct clk_init_data){
1630 .name = "gcc_pcie_1_phy_aux_clk",
1631 .parent_hws = (const struct clk_hw*[]) {
1632 &gcc_pcie_1_phy_aux_clk_src.clkr.hw,
1635 .flags = CLK_SET_RATE_PARENT,
1636 .ops = &clk_branch2_ops,
1641 static struct clk_branch gcc_pcie_1_phy_rchng_clk = {
1642 .halt_reg = 0x9d048,
1643 .halt_check = BRANCH_HALT_VOTED,
1645 .enable_reg = 0x62000,
1646 .enable_mask = BIT(23),
1647 .hw.init = &(struct clk_init_data){
1648 .name = "gcc_pcie_1_phy_rchng_clk",
1649 .parent_hws = (const struct clk_hw*[]) {
1650 &gcc_pcie_1_phy_rchng_clk_src.clkr.hw,
1653 .flags = CLK_SET_RATE_PARENT,
1654 .ops = &clk_branch2_ops,
1659 static struct clk_branch gcc_pcie_1_pipe_clk = {
1660 .halt_reg = 0x9d040,
1661 .halt_check = BRANCH_HALT_SKIP,
1663 .enable_reg = 0x62000,
1664 .enable_mask = BIT(30),
1665 .hw.init = &(struct clk_init_data){
1666 .name = "gcc_pcie_1_pipe_clk",
1667 .parent_hws = (const struct clk_hw*[]) {
1668 &gcc_pcie_1_pipe_clk_src.clkr.hw,
1671 .flags = CLK_SET_RATE_PARENT,
1672 .ops = &clk_branch2_ops,
1677 static struct clk_branch gcc_pcie_1_slv_axi_clk = {
1678 .halt_reg = 0x9d01c,
1679 .halt_check = BRANCH_HALT_VOTED,
1680 .hwcg_reg = 0x9d01c,
1683 .enable_reg = 0x62000,
1684 .enable_mask = BIT(26),
1685 .hw.init = &(struct clk_init_data){
1686 .name = "gcc_pcie_1_slv_axi_clk",
1687 .ops = &clk_branch2_ops,
1692 static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = {
1693 .halt_reg = 0x9d018,
1694 .halt_check = BRANCH_HALT_VOTED,
1696 .enable_reg = 0x62000,
1697 .enable_mask = BIT(25),
1698 .hw.init = &(struct clk_init_data){
1699 .name = "gcc_pcie_1_slv_q2a_axi_clk",
1700 .ops = &clk_branch2_ops,
1705 static struct clk_branch gcc_pdm2_clk = {
1706 .halt_reg = 0x4300c,
1707 .halt_check = BRANCH_HALT,
1709 .enable_reg = 0x4300c,
1710 .enable_mask = BIT(0),
1711 .hw.init = &(struct clk_init_data){
1712 .name = "gcc_pdm2_clk",
1713 .parent_hws = (const struct clk_hw*[]) {
1714 &gcc_pdm2_clk_src.clkr.hw,
1717 .flags = CLK_SET_RATE_PARENT,
1718 .ops = &clk_branch2_ops,
1723 static struct clk_branch gcc_pdm_ahb_clk = {
1724 .halt_reg = 0x43004,
1725 .halt_check = BRANCH_HALT_VOTED,
1726 .hwcg_reg = 0x43004,
1729 .enable_reg = 0x43004,
1730 .enable_mask = BIT(0),
1731 .hw.init = &(struct clk_init_data){
1732 .name = "gcc_pdm_ahb_clk",
1733 .ops = &clk_branch2_ops,
1738 static struct clk_branch gcc_pdm_xo4_clk = {
1739 .halt_reg = 0x43008,
1740 .halt_check = BRANCH_HALT,
1742 .enable_reg = 0x43008,
1743 .enable_mask = BIT(0),
1744 .hw.init = &(struct clk_init_data){
1745 .name = "gcc_pdm_xo4_clk",
1746 .ops = &clk_branch2_ops,
1751 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
1752 .halt_reg = 0x36008,
1753 .halt_check = BRANCH_HALT_VOTED,
1754 .hwcg_reg = 0x36008,
1757 .enable_reg = 0x36008,
1758 .enable_mask = BIT(0),
1759 .hw.init = &(struct clk_init_data){
1760 .name = "gcc_qmip_camera_nrt_ahb_clk",
1761 .ops = &clk_branch2_ops,
1766 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
1767 .halt_reg = 0x3600c,
1768 .halt_check = BRANCH_HALT_VOTED,
1769 .hwcg_reg = 0x3600c,
1772 .enable_reg = 0x3600c,
1773 .enable_mask = BIT(0),
1774 .hw.init = &(struct clk_init_data){
1775 .name = "gcc_qmip_camera_rt_ahb_clk",
1776 .ops = &clk_branch2_ops,
1781 static struct clk_branch gcc_qmip_disp_ahb_clk = {
1782 .halt_reg = 0x37008,
1783 .halt_check = BRANCH_HALT_VOTED,
1784 .hwcg_reg = 0x37008,
1787 .enable_reg = 0x37008,
1788 .enable_mask = BIT(0),
1789 .hw.init = &(struct clk_init_data){
1790 .name = "gcc_qmip_disp_ahb_clk",
1791 .ops = &clk_branch2_ops,
1796 static struct clk_branch gcc_qmip_gpu_ahb_clk = {
1797 .halt_reg = 0x81008,
1798 .halt_check = BRANCH_HALT_VOTED,
1799 .hwcg_reg = 0x81008,
1802 .enable_reg = 0x81008,
1803 .enable_mask = BIT(0),
1804 .hw.init = &(struct clk_init_data){
1805 .name = "gcc_qmip_gpu_ahb_clk",
1806 .ops = &clk_branch2_ops,
1811 static struct clk_branch gcc_qmip_pcie_ahb_clk = {
1812 .halt_reg = 0x7b018,
1813 .halt_check = BRANCH_HALT_VOTED,
1814 .hwcg_reg = 0x7b018,
1817 .enable_reg = 0x7b018,
1818 .enable_mask = BIT(0),
1819 .hw.init = &(struct clk_init_data){
1820 .name = "gcc_qmip_pcie_ahb_clk",
1821 .ops = &clk_branch2_ops,
1826 static struct clk_branch gcc_qmip_video_cv_cpu_ahb_clk = {
1827 .halt_reg = 0x42014,
1828 .halt_check = BRANCH_HALT_VOTED,
1829 .hwcg_reg = 0x42014,
1832 .enable_reg = 0x42014,
1833 .enable_mask = BIT(0),
1834 .hw.init = &(struct clk_init_data){
1835 .name = "gcc_qmip_video_cv_cpu_ahb_clk",
1836 .ops = &clk_branch2_ops,
1841 static struct clk_branch gcc_qmip_video_cvp_ahb_clk = {
1842 .halt_reg = 0x42008,
1843 .halt_check = BRANCH_HALT_VOTED,
1844 .hwcg_reg = 0x42008,
1847 .enable_reg = 0x42008,
1848 .enable_mask = BIT(0),
1849 .hw.init = &(struct clk_init_data){
1850 .name = "gcc_qmip_video_cvp_ahb_clk",
1851 .ops = &clk_branch2_ops,
1856 static struct clk_branch gcc_qmip_video_v_cpu_ahb_clk = {
1857 .halt_reg = 0x42010,
1858 .halt_check = BRANCH_HALT_VOTED,
1859 .hwcg_reg = 0x42010,
1862 .enable_reg = 0x42010,
1863 .enable_mask = BIT(0),
1864 .hw.init = &(struct clk_init_data){
1865 .name = "gcc_qmip_video_v_cpu_ahb_clk",
1866 .ops = &clk_branch2_ops,
1871 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
1872 .halt_reg = 0x4200c,
1873 .halt_check = BRANCH_HALT_VOTED,
1874 .hwcg_reg = 0x4200c,
1877 .enable_reg = 0x4200c,
1878 .enable_mask = BIT(0),
1879 .hw.init = &(struct clk_init_data){
1880 .name = "gcc_qmip_video_vcodec_ahb_clk",
1881 .ops = &clk_branch2_ops,
1886 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
1887 .halt_reg = 0x3300c,
1888 .halt_check = BRANCH_HALT_VOTED,
1890 .enable_reg = 0x62008,
1891 .enable_mask = BIT(9),
1892 .hw.init = &(struct clk_init_data){
1893 .name = "gcc_qupv3_wrap0_core_2x_clk",
1894 .ops = &clk_branch2_ops,
1899 static struct clk_branch gcc_qupv3_wrap0_core_clk = {
1900 .halt_reg = 0x33000,
1901 .halt_check = BRANCH_HALT_VOTED,
1903 .enable_reg = 0x62008,
1904 .enable_mask = BIT(8),
1905 .hw.init = &(struct clk_init_data){
1906 .name = "gcc_qupv3_wrap0_core_clk",
1907 .ops = &clk_branch2_ops,
1912 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
1913 .halt_reg = 0x2700c,
1914 .halt_check = BRANCH_HALT_VOTED,
1916 .enable_reg = 0x62008,
1917 .enable_mask = BIT(10),
1918 .hw.init = &(struct clk_init_data){
1919 .name = "gcc_qupv3_wrap0_s0_clk",
1920 .parent_hws = (const struct clk_hw*[]) {
1921 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
1924 .flags = CLK_SET_RATE_PARENT,
1925 .ops = &clk_branch2_ops,
1930 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
1931 .halt_reg = 0x27140,
1932 .halt_check = BRANCH_HALT_VOTED,
1934 .enable_reg = 0x62008,
1935 .enable_mask = BIT(11),
1936 .hw.init = &(struct clk_init_data){
1937 .name = "gcc_qupv3_wrap0_s1_clk",
1938 .parent_hws = (const struct clk_hw*[]) {
1939 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
1942 .flags = CLK_SET_RATE_PARENT,
1943 .ops = &clk_branch2_ops,
1948 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
1949 .halt_reg = 0x27274,
1950 .halt_check = BRANCH_HALT_VOTED,
1952 .enable_reg = 0x62008,
1953 .enable_mask = BIT(12),
1954 .hw.init = &(struct clk_init_data){
1955 .name = "gcc_qupv3_wrap0_s2_clk",
1956 .parent_hws = (const struct clk_hw*[]) {
1957 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
1960 .flags = CLK_SET_RATE_PARENT,
1961 .ops = &clk_branch2_ops,
1966 static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
1967 .halt_reg = 0x273a8,
1968 .halt_check = BRANCH_HALT_VOTED,
1970 .enable_reg = 0x62008,
1971 .enable_mask = BIT(13),
1972 .hw.init = &(struct clk_init_data){
1973 .name = "gcc_qupv3_wrap0_s3_clk",
1974 .parent_hws = (const struct clk_hw*[]) {
1975 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
1978 .flags = CLK_SET_RATE_PARENT,
1979 .ops = &clk_branch2_ops,
1984 static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
1985 .halt_reg = 0x274dc,
1986 .halt_check = BRANCH_HALT_VOTED,
1988 .enable_reg = 0x62008,
1989 .enable_mask = BIT(14),
1990 .hw.init = &(struct clk_init_data){
1991 .name = "gcc_qupv3_wrap0_s4_clk",
1992 .parent_hws = (const struct clk_hw*[]) {
1993 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
1996 .flags = CLK_SET_RATE_PARENT,
1997 .ops = &clk_branch2_ops,
2002 static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
2003 .halt_reg = 0x27610,
2004 .halt_check = BRANCH_HALT_VOTED,
2006 .enable_reg = 0x62008,
2007 .enable_mask = BIT(15),
2008 .hw.init = &(struct clk_init_data){
2009 .name = "gcc_qupv3_wrap0_s5_clk",
2010 .parent_hws = (const struct clk_hw*[]) {
2011 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
2014 .flags = CLK_SET_RATE_PARENT,
2015 .ops = &clk_branch2_ops,
2020 static struct clk_branch gcc_qupv3_wrap0_s6_clk = {
2021 .halt_reg = 0x27744,
2022 .halt_check = BRANCH_HALT_VOTED,
2024 .enable_reg = 0x62008,
2025 .enable_mask = BIT(16),
2026 .hw.init = &(struct clk_init_data){
2027 .name = "gcc_qupv3_wrap0_s6_clk",
2028 .parent_hws = (const struct clk_hw*[]) {
2029 &gcc_qupv3_wrap0_s6_clk_src.clkr.hw,
2032 .flags = CLK_SET_RATE_PARENT,
2033 .ops = &clk_branch2_ops,
2038 static struct clk_branch gcc_qupv3_wrap0_s7_clk = {
2039 .halt_reg = 0x27878,
2040 .halt_check = BRANCH_HALT_VOTED,
2042 .enable_reg = 0x62008,
2043 .enable_mask = BIT(17),
2044 .hw.init = &(struct clk_init_data){
2045 .name = "gcc_qupv3_wrap0_s7_clk",
2046 .parent_hws = (const struct clk_hw*[]) {
2047 &gcc_qupv3_wrap0_s7_clk_src.clkr.hw,
2050 .flags = CLK_SET_RATE_PARENT,
2051 .ops = &clk_branch2_ops,
2056 static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
2057 .halt_reg = 0x3314c,
2058 .halt_check = BRANCH_HALT_VOTED,
2060 .enable_reg = 0x62008,
2061 .enable_mask = BIT(18),
2062 .hw.init = &(struct clk_init_data){
2063 .name = "gcc_qupv3_wrap1_core_2x_clk",
2064 .ops = &clk_branch2_ops,
2069 static struct clk_branch gcc_qupv3_wrap1_core_clk = {
2070 .halt_reg = 0x33140,
2071 .halt_check = BRANCH_HALT_VOTED,
2073 .enable_reg = 0x62008,
2074 .enable_mask = BIT(19),
2075 .hw.init = &(struct clk_init_data){
2076 .name = "gcc_qupv3_wrap1_core_clk",
2077 .ops = &clk_branch2_ops,
2082 static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
2083 .halt_reg = 0x2800c,
2084 .halt_check = BRANCH_HALT_VOTED,
2086 .enable_reg = 0x62008,
2087 .enable_mask = BIT(22),
2088 .hw.init = &(struct clk_init_data){
2089 .name = "gcc_qupv3_wrap1_s0_clk",
2090 .parent_hws = (const struct clk_hw*[]) {
2091 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
2094 .flags = CLK_SET_RATE_PARENT,
2095 .ops = &clk_branch2_ops,
2100 static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
2101 .halt_reg = 0x28140,
2102 .halt_check = BRANCH_HALT_VOTED,
2104 .enable_reg = 0x62008,
2105 .enable_mask = BIT(23),
2106 .hw.init = &(struct clk_init_data){
2107 .name = "gcc_qupv3_wrap1_s1_clk",
2108 .parent_hws = (const struct clk_hw*[]) {
2109 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
2112 .flags = CLK_SET_RATE_PARENT,
2113 .ops = &clk_branch2_ops,
2118 static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
2119 .halt_reg = 0x28274,
2120 .halt_check = BRANCH_HALT_VOTED,
2122 .enable_reg = 0x62008,
2123 .enable_mask = BIT(24),
2124 .hw.init = &(struct clk_init_data){
2125 .name = "gcc_qupv3_wrap1_s2_clk",
2126 .parent_hws = (const struct clk_hw*[]) {
2127 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
2130 .flags = CLK_SET_RATE_PARENT,
2131 .ops = &clk_branch2_ops,
2136 static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
2137 .halt_reg = 0x283a8,
2138 .halt_check = BRANCH_HALT_VOTED,
2140 .enable_reg = 0x62008,
2141 .enable_mask = BIT(25),
2142 .hw.init = &(struct clk_init_data){
2143 .name = "gcc_qupv3_wrap1_s3_clk",
2144 .parent_hws = (const struct clk_hw*[]) {
2145 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
2148 .flags = CLK_SET_RATE_PARENT,
2149 .ops = &clk_branch2_ops,
2154 static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
2155 .halt_reg = 0x284dc,
2156 .halt_check = BRANCH_HALT_VOTED,
2158 .enable_reg = 0x62008,
2159 .enable_mask = BIT(26),
2160 .hw.init = &(struct clk_init_data){
2161 .name = "gcc_qupv3_wrap1_s4_clk",
2162 .parent_hws = (const struct clk_hw*[]) {
2163 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
2166 .flags = CLK_SET_RATE_PARENT,
2167 .ops = &clk_branch2_ops,
2172 static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
2173 .halt_reg = 0x28610,
2174 .halt_check = BRANCH_HALT_VOTED,
2176 .enable_reg = 0x62008,
2177 .enable_mask = BIT(27),
2178 .hw.init = &(struct clk_init_data){
2179 .name = "gcc_qupv3_wrap1_s5_clk",
2180 .parent_hws = (const struct clk_hw*[]) {
2181 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
2184 .flags = CLK_SET_RATE_PARENT,
2185 .ops = &clk_branch2_ops,
2190 static struct clk_branch gcc_qupv3_wrap1_s6_clk = {
2191 .halt_reg = 0x28744,
2192 .halt_check = BRANCH_HALT_VOTED,
2194 .enable_reg = 0x62008,
2195 .enable_mask = BIT(28),
2196 .hw.init = &(struct clk_init_data){
2197 .name = "gcc_qupv3_wrap1_s6_clk",
2198 .parent_hws = (const struct clk_hw*[]) {
2199 &gcc_qupv3_wrap1_s6_clk_src.clkr.hw,
2202 .flags = CLK_SET_RATE_PARENT,
2203 .ops = &clk_branch2_ops,
2208 static struct clk_branch gcc_qupv3_wrap2_core_2x_clk = {
2209 .halt_reg = 0x3328c,
2210 .halt_check = BRANCH_HALT_VOTED,
2212 .enable_reg = 0x62010,
2213 .enable_mask = BIT(3),
2214 .hw.init = &(struct clk_init_data){
2215 .name = "gcc_qupv3_wrap2_core_2x_clk",
2216 .ops = &clk_branch2_ops,
2221 static struct clk_branch gcc_qupv3_wrap2_core_clk = {
2222 .halt_reg = 0x33280,
2223 .halt_check = BRANCH_HALT_VOTED,
2225 .enable_reg = 0x62010,
2226 .enable_mask = BIT(0),
2227 .hw.init = &(struct clk_init_data){
2228 .name = "gcc_qupv3_wrap2_core_clk",
2229 .ops = &clk_branch2_ops,
2234 static struct clk_branch gcc_qupv3_wrap2_s0_clk = {
2235 .halt_reg = 0x2e00c,
2236 .halt_check = BRANCH_HALT_VOTED,
2238 .enable_reg = 0x62010,
2239 .enable_mask = BIT(4),
2240 .hw.init = &(struct clk_init_data){
2241 .name = "gcc_qupv3_wrap2_s0_clk",
2242 .parent_hws = (const struct clk_hw*[]) {
2243 &gcc_qupv3_wrap2_s0_clk_src.clkr.hw,
2246 .flags = CLK_SET_RATE_PARENT,
2247 .ops = &clk_branch2_ops,
2252 static struct clk_branch gcc_qupv3_wrap2_s1_clk = {
2253 .halt_reg = 0x2e140,
2254 .halt_check = BRANCH_HALT_VOTED,
2256 .enable_reg = 0x62010,
2257 .enable_mask = BIT(5),
2258 .hw.init = &(struct clk_init_data){
2259 .name = "gcc_qupv3_wrap2_s1_clk",
2260 .parent_hws = (const struct clk_hw*[]) {
2261 &gcc_qupv3_wrap2_s1_clk_src.clkr.hw,
2264 .flags = CLK_SET_RATE_PARENT,
2265 .ops = &clk_branch2_ops,
2270 static struct clk_branch gcc_qupv3_wrap2_s2_clk = {
2271 .halt_reg = 0x2e274,
2272 .halt_check = BRANCH_HALT_VOTED,
2274 .enable_reg = 0x62010,
2275 .enable_mask = BIT(6),
2276 .hw.init = &(struct clk_init_data){
2277 .name = "gcc_qupv3_wrap2_s2_clk",
2278 .parent_hws = (const struct clk_hw*[]) {
2279 &gcc_qupv3_wrap2_s2_clk_src.clkr.hw,
2282 .flags = CLK_SET_RATE_PARENT,
2283 .ops = &clk_branch2_ops,
2288 static struct clk_branch gcc_qupv3_wrap2_s3_clk = {
2289 .halt_reg = 0x2e3a8,
2290 .halt_check = BRANCH_HALT_VOTED,
2292 .enable_reg = 0x62010,
2293 .enable_mask = BIT(7),
2294 .hw.init = &(struct clk_init_data){
2295 .name = "gcc_qupv3_wrap2_s3_clk",
2296 .parent_hws = (const struct clk_hw*[]) {
2297 &gcc_qupv3_wrap2_s3_clk_src.clkr.hw,
2300 .flags = CLK_SET_RATE_PARENT,
2301 .ops = &clk_branch2_ops,
2306 static struct clk_branch gcc_qupv3_wrap2_s4_clk = {
2307 .halt_reg = 0x2e4dc,
2308 .halt_check = BRANCH_HALT_VOTED,
2310 .enable_reg = 0x62010,
2311 .enable_mask = BIT(8),
2312 .hw.init = &(struct clk_init_data){
2313 .name = "gcc_qupv3_wrap2_s4_clk",
2314 .parent_hws = (const struct clk_hw*[]) {
2315 &gcc_qupv3_wrap2_s4_clk_src.clkr.hw,
2318 .flags = CLK_SET_RATE_PARENT,
2319 .ops = &clk_branch2_ops,
2324 static struct clk_branch gcc_qupv3_wrap2_s5_clk = {
2325 .halt_reg = 0x2e610,
2326 .halt_check = BRANCH_HALT_VOTED,
2328 .enable_reg = 0x62010,
2329 .enable_mask = BIT(9),
2330 .hw.init = &(struct clk_init_data){
2331 .name = "gcc_qupv3_wrap2_s5_clk",
2332 .parent_hws = (const struct clk_hw*[]) {
2333 &gcc_qupv3_wrap2_s5_clk_src.clkr.hw,
2336 .flags = CLK_SET_RATE_PARENT,
2337 .ops = &clk_branch2_ops,
2342 static struct clk_branch gcc_qupv3_wrap2_s6_clk = {
2343 .halt_reg = 0x2e744,
2344 .halt_check = BRANCH_HALT_VOTED,
2346 .enable_reg = 0x62010,
2347 .enable_mask = BIT(10),
2348 .hw.init = &(struct clk_init_data){
2349 .name = "gcc_qupv3_wrap2_s6_clk",
2350 .parent_hws = (const struct clk_hw*[]) {
2351 &gcc_qupv3_wrap2_s6_clk_src.clkr.hw,
2354 .flags = CLK_SET_RATE_PARENT,
2355 .ops = &clk_branch2_ops,
2360 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
2361 .halt_reg = 0x27004,
2362 .halt_check = BRANCH_HALT_VOTED,
2363 .hwcg_reg = 0x27004,
2366 .enable_reg = 0x62008,
2367 .enable_mask = BIT(6),
2368 .hw.init = &(struct clk_init_data){
2369 .name = "gcc_qupv3_wrap_0_m_ahb_clk",
2370 .ops = &clk_branch2_ops,
2375 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
2376 .halt_reg = 0x27008,
2377 .halt_check = BRANCH_HALT_VOTED,
2378 .hwcg_reg = 0x27008,
2381 .enable_reg = 0x62008,
2382 .enable_mask = BIT(7),
2383 .hw.init = &(struct clk_init_data){
2384 .name = "gcc_qupv3_wrap_0_s_ahb_clk",
2385 .ops = &clk_branch2_ops,
2390 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
2391 .halt_reg = 0x28004,
2392 .halt_check = BRANCH_HALT_VOTED,
2393 .hwcg_reg = 0x28004,
2396 .enable_reg = 0x62008,
2397 .enable_mask = BIT(20),
2398 .hw.init = &(struct clk_init_data){
2399 .name = "gcc_qupv3_wrap_1_m_ahb_clk",
2400 .ops = &clk_branch2_ops,
2405 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
2406 .halt_reg = 0x28008,
2407 .halt_check = BRANCH_HALT_VOTED,
2408 .hwcg_reg = 0x28008,
2411 .enable_reg = 0x62008,
2412 .enable_mask = BIT(21),
2413 .hw.init = &(struct clk_init_data){
2414 .name = "gcc_qupv3_wrap_1_s_ahb_clk",
2415 .ops = &clk_branch2_ops,
2420 static struct clk_branch gcc_qupv3_wrap_2_m_ahb_clk = {
2421 .halt_reg = 0x2e004,
2422 .halt_check = BRANCH_HALT_VOTED,
2423 .hwcg_reg = 0x2e004,
2426 .enable_reg = 0x62010,
2427 .enable_mask = BIT(2),
2428 .hw.init = &(struct clk_init_data){
2429 .name = "gcc_qupv3_wrap_2_m_ahb_clk",
2430 .ops = &clk_branch2_ops,
2435 static struct clk_branch gcc_qupv3_wrap_2_s_ahb_clk = {
2436 .halt_reg = 0x2e008,
2437 .halt_check = BRANCH_HALT_VOTED,
2438 .hwcg_reg = 0x2e008,
2441 .enable_reg = 0x62010,
2442 .enable_mask = BIT(1),
2443 .hw.init = &(struct clk_init_data){
2444 .name = "gcc_qupv3_wrap_2_s_ahb_clk",
2445 .ops = &clk_branch2_ops,
2450 static struct clk_branch gcc_sdcc2_ahb_clk = {
2451 .halt_reg = 0x2400c,
2452 .halt_check = BRANCH_HALT,
2454 .enable_reg = 0x2400c,
2455 .enable_mask = BIT(0),
2456 .hw.init = &(struct clk_init_data){
2457 .name = "gcc_sdcc2_ahb_clk",
2458 .ops = &clk_branch2_ops,
2463 static struct clk_branch gcc_sdcc2_apps_clk = {
2464 .halt_reg = 0x24004,
2465 .halt_check = BRANCH_HALT,
2467 .enable_reg = 0x24004,
2468 .enable_mask = BIT(0),
2469 .hw.init = &(struct clk_init_data){
2470 .name = "gcc_sdcc2_apps_clk",
2471 .parent_hws = (const struct clk_hw*[]) {
2472 &gcc_sdcc2_apps_clk_src.clkr.hw,
2475 .flags = CLK_SET_RATE_PARENT,
2476 .ops = &clk_branch2_ops,
2481 static struct clk_branch gcc_sdcc2_at_clk = {
2482 .halt_reg = 0x24010,
2483 .halt_check = BRANCH_HALT_VOTED,
2484 .hwcg_reg = 0x24010,
2487 .enable_reg = 0x24010,
2488 .enable_mask = BIT(0),
2489 .hw.init = &(struct clk_init_data){
2490 .name = "gcc_sdcc2_at_clk",
2491 .ops = &clk_branch2_ops,
2496 static struct clk_branch gcc_sdcc4_ahb_clk = {
2497 .halt_reg = 0x2600c,
2498 .halt_check = BRANCH_HALT,
2500 .enable_reg = 0x2600c,
2501 .enable_mask = BIT(0),
2502 .hw.init = &(struct clk_init_data){
2503 .name = "gcc_sdcc4_ahb_clk",
2504 .ops = &clk_branch2_ops,
2509 static struct clk_branch gcc_sdcc4_apps_clk = {
2510 .halt_reg = 0x26004,
2511 .halt_check = BRANCH_HALT,
2513 .enable_reg = 0x26004,
2514 .enable_mask = BIT(0),
2515 .hw.init = &(struct clk_init_data){
2516 .name = "gcc_sdcc4_apps_clk",
2517 .parent_hws = (const struct clk_hw*[]) {
2518 &gcc_sdcc4_apps_clk_src.clkr.hw,
2521 .flags = CLK_SET_RATE_PARENT,
2522 .ops = &clk_branch2_ops,
2527 static struct clk_branch gcc_sdcc4_at_clk = {
2528 .halt_reg = 0x26010,
2529 .halt_check = BRANCH_HALT_VOTED,
2530 .hwcg_reg = 0x26010,
2533 .enable_reg = 0x26010,
2534 .enable_mask = BIT(0),
2535 .hw.init = &(struct clk_init_data){
2536 .name = "gcc_sdcc4_at_clk",
2537 .ops = &clk_branch2_ops,
2542 static struct clk_branch gcc_ufs_0_clkref_en = {
2543 .halt_reg = 0x9c000,
2544 .halt_check = BRANCH_HALT,
2546 .enable_reg = 0x9c000,
2547 .enable_mask = BIT(0),
2548 .hw.init = &(struct clk_init_data){
2549 .name = "gcc_ufs_0_clkref_en",
2550 .ops = &clk_branch2_ops,
2555 static struct clk_branch gcc_ufs_phy_ahb_clk = {
2556 .halt_reg = 0x87020,
2557 .halt_check = BRANCH_HALT_VOTED,
2558 .hwcg_reg = 0x87020,
2561 .enable_reg = 0x87020,
2562 .enable_mask = BIT(0),
2563 .hw.init = &(struct clk_init_data){
2564 .name = "gcc_ufs_phy_ahb_clk",
2565 .ops = &clk_branch2_ops,
2570 static struct clk_branch gcc_ufs_phy_axi_clk = {
2571 .halt_reg = 0x87018,
2572 .halt_check = BRANCH_HALT_VOTED,
2573 .hwcg_reg = 0x87018,
2576 .enable_reg = 0x87018,
2577 .enable_mask = BIT(0),
2578 .hw.init = &(struct clk_init_data){
2579 .name = "gcc_ufs_phy_axi_clk",
2580 .parent_hws = (const struct clk_hw*[]) {
2581 &gcc_ufs_phy_axi_clk_src.clkr.hw,
2584 .flags = CLK_SET_RATE_PARENT,
2585 .ops = &clk_branch2_ops,
2590 static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = {
2591 .halt_reg = 0x87018,
2592 .halt_check = BRANCH_HALT_VOTED,
2593 .hwcg_reg = 0x87018,
2596 .enable_reg = 0x87018,
2597 .enable_mask = BIT(1),
2598 .hw.init = &(struct clk_init_data){
2599 .name = "gcc_ufs_phy_axi_hw_ctl_clk",
2600 .parent_hws = (const struct clk_hw*[]) {
2601 &gcc_ufs_phy_axi_clk_src.clkr.hw,
2604 .flags = CLK_SET_RATE_PARENT,
2605 .ops = &clk_branch2_ops,
2610 static struct clk_branch gcc_ufs_phy_ice_core_clk = {
2611 .halt_reg = 0x8706c,
2612 .halt_check = BRANCH_HALT_VOTED,
2613 .hwcg_reg = 0x8706c,
2616 .enable_reg = 0x8706c,
2617 .enable_mask = BIT(0),
2618 .hw.init = &(struct clk_init_data){
2619 .name = "gcc_ufs_phy_ice_core_clk",
2620 .parent_hws = (const struct clk_hw*[]) {
2621 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
2624 .flags = CLK_SET_RATE_PARENT,
2625 .ops = &clk_branch2_ops,
2630 static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = {
2631 .halt_reg = 0x8706c,
2632 .halt_check = BRANCH_HALT_VOTED,
2633 .hwcg_reg = 0x8706c,
2636 .enable_reg = 0x8706c,
2637 .enable_mask = BIT(1),
2638 .hw.init = &(struct clk_init_data){
2639 .name = "gcc_ufs_phy_ice_core_hw_ctl_clk",
2640 .parent_hws = (const struct clk_hw*[]) {
2641 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
2644 .flags = CLK_SET_RATE_PARENT,
2645 .ops = &clk_branch2_ops,
2650 static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
2651 .halt_reg = 0x870a4,
2652 .halt_check = BRANCH_HALT_VOTED,
2653 .hwcg_reg = 0x870a4,
2656 .enable_reg = 0x870a4,
2657 .enable_mask = BIT(0),
2658 .hw.init = &(struct clk_init_data){
2659 .name = "gcc_ufs_phy_phy_aux_clk",
2660 .parent_hws = (const struct clk_hw*[]) {
2661 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2664 .flags = CLK_SET_RATE_PARENT,
2665 .ops = &clk_branch2_ops,
2670 static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = {
2671 .halt_reg = 0x870a4,
2672 .halt_check = BRANCH_HALT_VOTED,
2673 .hwcg_reg = 0x870a4,
2676 .enable_reg = 0x870a4,
2677 .enable_mask = BIT(1),
2678 .hw.init = &(struct clk_init_data){
2679 .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk",
2680 .parent_hws = (const struct clk_hw*[]) {
2681 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2684 .flags = CLK_SET_RATE_PARENT,
2685 .ops = &clk_branch2_ops,
2690 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
2691 .halt_reg = 0x87028,
2692 .halt_check = BRANCH_HALT_DELAY,
2694 .enable_reg = 0x87028,
2695 .enable_mask = BIT(0),
2696 .hw.init = &(struct clk_init_data){
2697 .name = "gcc_ufs_phy_rx_symbol_0_clk",
2698 .parent_hws = (const struct clk_hw*[]) {
2699 &gcc_ufs_phy_rx_symbol_0_clk_src.clkr.hw,
2702 .flags = CLK_SET_RATE_PARENT,
2703 .ops = &clk_branch2_ops,
2708 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
2709 .halt_reg = 0x870c0,
2710 .halt_check = BRANCH_HALT_DELAY,
2712 .enable_reg = 0x870c0,
2713 .enable_mask = BIT(0),
2714 .hw.init = &(struct clk_init_data){
2715 .name = "gcc_ufs_phy_rx_symbol_1_clk",
2716 .parent_hws = (const struct clk_hw*[]) {
2717 &gcc_ufs_phy_rx_symbol_1_clk_src.clkr.hw,
2720 .flags = CLK_SET_RATE_PARENT,
2721 .ops = &clk_branch2_ops,
2726 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
2727 .halt_reg = 0x87024,
2728 .halt_check = BRANCH_HALT_DELAY,
2730 .enable_reg = 0x87024,
2731 .enable_mask = BIT(0),
2732 .hw.init = &(struct clk_init_data){
2733 .name = "gcc_ufs_phy_tx_symbol_0_clk",
2734 .parent_hws = (const struct clk_hw*[]) {
2735 &gcc_ufs_phy_tx_symbol_0_clk_src.clkr.hw,
2738 .flags = CLK_SET_RATE_PARENT,
2739 .ops = &clk_branch2_ops,
2744 static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
2745 .halt_reg = 0x87064,
2746 .halt_check = BRANCH_HALT_VOTED,
2747 .hwcg_reg = 0x87064,
2750 .enable_reg = 0x87064,
2751 .enable_mask = BIT(0),
2752 .hw.init = &(struct clk_init_data){
2753 .name = "gcc_ufs_phy_unipro_core_clk",
2754 .parent_hws = (const struct clk_hw*[]) {
2755 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2758 .flags = CLK_SET_RATE_PARENT,
2759 .ops = &clk_branch2_ops,
2764 static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = {
2765 .halt_reg = 0x87064,
2766 .halt_check = BRANCH_HALT_VOTED,
2767 .hwcg_reg = 0x87064,
2770 .enable_reg = 0x87064,
2771 .enable_mask = BIT(1),
2772 .hw.init = &(struct clk_init_data){
2773 .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk",
2774 .parent_hws = (const struct clk_hw*[]) {
2775 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2778 .flags = CLK_SET_RATE_PARENT,
2779 .ops = &clk_branch2_ops,
2784 static struct clk_branch gcc_usb30_prim_master_clk = {
2785 .halt_reg = 0x49018,
2786 .halt_check = BRANCH_HALT,
2788 .enable_reg = 0x49018,
2789 .enable_mask = BIT(0),
2790 .hw.init = &(struct clk_init_data){
2791 .name = "gcc_usb30_prim_master_clk",
2792 .parent_hws = (const struct clk_hw*[]) {
2793 &gcc_usb30_prim_master_clk_src.clkr.hw,
2796 .flags = CLK_SET_RATE_PARENT,
2797 .ops = &clk_branch2_ops,
2802 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
2803 .halt_reg = 0x49024,
2804 .halt_check = BRANCH_HALT,
2806 .enable_reg = 0x49024,
2807 .enable_mask = BIT(0),
2808 .hw.init = &(struct clk_init_data){
2809 .name = "gcc_usb30_prim_mock_utmi_clk",
2810 .parent_hws = (const struct clk_hw*[]) {
2811 &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,
2814 .flags = CLK_SET_RATE_PARENT,
2815 .ops = &clk_branch2_ops,
2820 static struct clk_branch gcc_usb30_prim_sleep_clk = {
2821 .halt_reg = 0x49020,
2822 .halt_check = BRANCH_HALT,
2824 .enable_reg = 0x49020,
2825 .enable_mask = BIT(0),
2826 .hw.init = &(struct clk_init_data){
2827 .name = "gcc_usb30_prim_sleep_clk",
2828 .ops = &clk_branch2_ops,
2833 static struct clk_branch gcc_usb3_0_clkref_en = {
2834 .halt_reg = 0x9c010,
2835 .halt_check = BRANCH_HALT,
2837 .enable_reg = 0x9c010,
2838 .enable_mask = BIT(0),
2839 .hw.init = &(struct clk_init_data){
2840 .name = "gcc_usb3_0_clkref_en",
2841 .ops = &clk_branch2_ops,
2846 static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
2847 .halt_reg = 0x4905c,
2848 .halt_check = BRANCH_HALT,
2850 .enable_reg = 0x4905c,
2851 .enable_mask = BIT(0),
2852 .hw.init = &(struct clk_init_data){
2853 .name = "gcc_usb3_prim_phy_aux_clk",
2854 .parent_hws = (const struct clk_hw*[]) {
2855 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2858 .flags = CLK_SET_RATE_PARENT,
2859 .ops = &clk_branch2_ops,
2864 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
2865 .halt_reg = 0x49060,
2866 .halt_check = BRANCH_HALT,
2868 .enable_reg = 0x49060,
2869 .enable_mask = BIT(0),
2870 .hw.init = &(struct clk_init_data){
2871 .name = "gcc_usb3_prim_phy_com_aux_clk",
2872 .parent_hws = (const struct clk_hw*[]) {
2873 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2876 .flags = CLK_SET_RATE_PARENT,
2877 .ops = &clk_branch2_ops,
2882 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
2883 .halt_reg = 0x49064,
2884 .halt_check = BRANCH_HALT_DELAY,
2885 .hwcg_reg = 0x49064,
2888 .enable_reg = 0x49064,
2889 .enable_mask = BIT(0),
2890 .hw.init = &(struct clk_init_data){
2891 .name = "gcc_usb3_prim_phy_pipe_clk",
2892 .parent_hws = (const struct clk_hw*[]) {
2893 &gcc_usb3_prim_phy_pipe_clk_src.clkr.hw,
2896 .flags = CLK_SET_RATE_PARENT,
2897 .ops = &clk_branch2_ops,
2902 static struct clk_branch gcc_video_axi0_clk = {
2903 .halt_reg = 0x42018,
2904 .halt_check = BRANCH_HALT_SKIP,
2905 .hwcg_reg = 0x42018,
2908 .enable_reg = 0x42018,
2909 .enable_mask = BIT(0),
2910 .hw.init = &(struct clk_init_data){
2911 .name = "gcc_video_axi0_clk",
2912 .ops = &clk_branch2_ops,
2917 static struct clk_branch gcc_video_axi1_clk = {
2918 .halt_reg = 0x42020,
2919 .halt_check = BRANCH_HALT_SKIP,
2920 .hwcg_reg = 0x42020,
2923 .enable_reg = 0x42020,
2924 .enable_mask = BIT(0),
2925 .hw.init = &(struct clk_init_data){
2926 .name = "gcc_video_axi1_clk",
2927 .ops = &clk_branch2_ops,
2932 static struct gdsc pcie_0_gdsc = {
2935 .name = "pcie_0_gdsc",
2937 .pwrsts = PWRSTS_OFF_ON,
2940 static struct gdsc pcie_1_gdsc = {
2943 .name = "pcie_1_gdsc",
2945 .pwrsts = PWRSTS_OFF_ON,
2948 static struct gdsc ufs_phy_gdsc = {
2951 .name = "ufs_phy_gdsc",
2953 .pwrsts = PWRSTS_OFF_ON,
2956 static struct gdsc usb30_prim_gdsc = {
2959 .name = "usb30_prim_gdsc",
2961 .pwrsts = PWRSTS_OFF_ON,
2964 static struct clk_regmap *gcc_sm8450_clocks[] = {
2965 [GCC_AGGRE_NOC_PCIE_0_AXI_CLK] = &gcc_aggre_noc_pcie_0_axi_clk.clkr,
2966 [GCC_AGGRE_NOC_PCIE_1_AXI_CLK] = &gcc_aggre_noc_pcie_1_axi_clk.clkr,
2967 [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
2968 [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr,
2969 [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
2970 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2971 [GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,
2972 [GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr,
2973 [GCC_CFG_NOC_PCIE_ANOC_AHB_CLK] = &gcc_cfg_noc_pcie_anoc_ahb_clk.clkr,
2974 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
2975 [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
2976 [GCC_DDRSS_PCIE_SF_TBU_CLK] = &gcc_ddrss_pcie_sf_tbu_clk.clkr,
2977 [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
2978 [GCC_DISP_SF_AXI_CLK] = &gcc_disp_sf_axi_clk.clkr,
2979 [GCC_EUSB3_0_CLKREF_EN] = &gcc_eusb3_0_clkref_en.clkr,
2980 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2981 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
2982 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2983 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
2984 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2985 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
2986 [GCC_GPLL0] = &gcc_gpll0.clkr,
2987 [GCC_GPLL0_OUT_EVEN] = &gcc_gpll0_out_even.clkr,
2988 [GCC_GPLL4] = &gcc_gpll4.clkr,
2989 [GCC_GPLL9] = &gcc_gpll9.clkr,
2990 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
2991 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
2992 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
2993 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
2994 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
2995 [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
2996 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
2997 [GCC_PCIE_0_CLKREF_EN] = &gcc_pcie_0_clkref_en.clkr,
2998 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
2999 [GCC_PCIE_0_PHY_RCHNG_CLK] = &gcc_pcie_0_phy_rchng_clk.clkr,
3000 [GCC_PCIE_0_PHY_RCHNG_CLK_SRC] = &gcc_pcie_0_phy_rchng_clk_src.clkr,
3001 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
3002 [GCC_PCIE_0_PIPE_CLK_SRC] = &gcc_pcie_0_pipe_clk_src.clkr,
3003 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
3004 [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
3005 [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
3006 [GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr,
3007 [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
3008 [GCC_PCIE_1_CLKREF_EN] = &gcc_pcie_1_clkref_en.clkr,
3009 [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
3010 [GCC_PCIE_1_PHY_AUX_CLK] = &gcc_pcie_1_phy_aux_clk.clkr,
3011 [GCC_PCIE_1_PHY_AUX_CLK_SRC] = &gcc_pcie_1_phy_aux_clk_src.clkr,
3012 [GCC_PCIE_1_PHY_RCHNG_CLK] = &gcc_pcie_1_phy_rchng_clk.clkr,
3013 [GCC_PCIE_1_PHY_RCHNG_CLK_SRC] = &gcc_pcie_1_phy_rchng_clk_src.clkr,
3014 [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
3015 [GCC_PCIE_1_PIPE_CLK_SRC] = &gcc_pcie_1_pipe_clk_src.clkr,
3016 [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
3017 [GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr,
3018 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3019 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
3020 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3021 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
3022 [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
3023 [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
3024 [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
3025 [GCC_QMIP_GPU_AHB_CLK] = &gcc_qmip_gpu_ahb_clk.clkr,
3026 [GCC_QMIP_PCIE_AHB_CLK] = &gcc_qmip_pcie_ahb_clk.clkr,
3027 [GCC_QMIP_VIDEO_CV_CPU_AHB_CLK] = &gcc_qmip_video_cv_cpu_ahb_clk.clkr,
3028 [GCC_QMIP_VIDEO_CVP_AHB_CLK] = &gcc_qmip_video_cvp_ahb_clk.clkr,
3029 [GCC_QMIP_VIDEO_V_CPU_AHB_CLK] = &gcc_qmip_video_v_cpu_ahb_clk.clkr,
3030 [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
3031 [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
3032 [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
3033 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
3034 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
3035 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
3036 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
3037 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
3038 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
3039 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
3040 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
3041 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
3042 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
3043 [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
3044 [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
3045 [GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr,
3046 [GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr,
3047 [GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr,
3048 [GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr,
3049 [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
3050 [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
3051 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
3052 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
3053 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
3054 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
3055 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
3056 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
3057 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
3058 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
3059 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
3060 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
3061 [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
3062 [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
3063 [GCC_QUPV3_WRAP1_S6_CLK] = &gcc_qupv3_wrap1_s6_clk.clkr,
3064 [GCC_QUPV3_WRAP1_S6_CLK_SRC] = &gcc_qupv3_wrap1_s6_clk_src.clkr,
3065 [GCC_QUPV3_WRAP2_CORE_2X_CLK] = &gcc_qupv3_wrap2_core_2x_clk.clkr,
3066 [GCC_QUPV3_WRAP2_CORE_CLK] = &gcc_qupv3_wrap2_core_clk.clkr,
3067 [GCC_QUPV3_WRAP2_S0_CLK] = &gcc_qupv3_wrap2_s0_clk.clkr,
3068 [GCC_QUPV3_WRAP2_S0_CLK_SRC] = &gcc_qupv3_wrap2_s0_clk_src.clkr,
3069 [GCC_QUPV3_WRAP2_S1_CLK] = &gcc_qupv3_wrap2_s1_clk.clkr,
3070 [GCC_QUPV3_WRAP2_S1_CLK_SRC] = &gcc_qupv3_wrap2_s1_clk_src.clkr,
3071 [GCC_QUPV3_WRAP2_S2_CLK] = &gcc_qupv3_wrap2_s2_clk.clkr,
3072 [GCC_QUPV3_WRAP2_S2_CLK_SRC] = &gcc_qupv3_wrap2_s2_clk_src.clkr,
3073 [GCC_QUPV3_WRAP2_S3_CLK] = &gcc_qupv3_wrap2_s3_clk.clkr,
3074 [GCC_QUPV3_WRAP2_S3_CLK_SRC] = &gcc_qupv3_wrap2_s3_clk_src.clkr,
3075 [GCC_QUPV3_WRAP2_S4_CLK] = &gcc_qupv3_wrap2_s4_clk.clkr,
3076 [GCC_QUPV3_WRAP2_S4_CLK_SRC] = &gcc_qupv3_wrap2_s4_clk_src.clkr,
3077 [GCC_QUPV3_WRAP2_S5_CLK] = &gcc_qupv3_wrap2_s5_clk.clkr,
3078 [GCC_QUPV3_WRAP2_S5_CLK_SRC] = &gcc_qupv3_wrap2_s5_clk_src.clkr,
3079 [GCC_QUPV3_WRAP2_S6_CLK] = &gcc_qupv3_wrap2_s6_clk.clkr,
3080 [GCC_QUPV3_WRAP2_S6_CLK_SRC] = &gcc_qupv3_wrap2_s6_clk_src.clkr,
3081 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
3082 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
3083 [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
3084 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
3085 [GCC_QUPV3_WRAP_2_M_AHB_CLK] = &gcc_qupv3_wrap_2_m_ahb_clk.clkr,
3086 [GCC_QUPV3_WRAP_2_S_AHB_CLK] = &gcc_qupv3_wrap_2_s_ahb_clk.clkr,
3087 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3088 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3089 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
3090 [GCC_SDCC2_AT_CLK] = &gcc_sdcc2_at_clk.clkr,
3091 [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
3092 [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
3093 [GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr,
3094 [GCC_SDCC4_AT_CLK] = &gcc_sdcc4_at_clk.clkr,
3095 [GCC_UFS_0_CLKREF_EN] = &gcc_ufs_0_clkref_en.clkr,
3096 [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
3097 [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
3098 [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
3099 [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr,
3100 [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
3101 [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
3102 [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] = &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr,
3103 [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
3104 [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
3105 [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr,
3106 [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
3107 [GCC_UFS_PHY_RX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_rx_symbol_0_clk_src.clkr,
3108 [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
3109 [GCC_UFS_PHY_RX_SYMBOL_1_CLK_SRC] = &gcc_ufs_phy_rx_symbol_1_clk_src.clkr,
3110 [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
3111 [GCC_UFS_PHY_TX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_tx_symbol_0_clk_src.clkr,
3112 [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
3113 [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_phy_unipro_core_clk_src.clkr,
3114 [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] = &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr,
3115 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
3116 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
3117 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
3118 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr,
3119 [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,
3120 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
3121 [GCC_USB3_0_CLKREF_EN] = &gcc_usb3_0_clkref_en.clkr,
3122 [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
3123 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
3124 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
3125 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
3126 [GCC_USB3_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb3_prim_phy_pipe_clk_src.clkr,
3127 [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
3128 [GCC_VIDEO_AXI1_CLK] = &gcc_video_axi1_clk.clkr,
3131 static const struct qcom_reset_map gcc_sm8450_resets[] = {
3132 [GCC_CAMERA_BCR] = { 0x36000 },
3133 [GCC_DISPLAY_BCR] = { 0x37000 },
3134 [GCC_GPU_BCR] = { 0x81000 },
3135 [GCC_PCIE_0_BCR] = { 0x7b000 },
3136 [GCC_PCIE_0_LINK_DOWN_BCR] = { 0x7c014 },
3137 [GCC_PCIE_0_NOCSR_COM_PHY_BCR] = { 0x7c020 },
3138 [GCC_PCIE_0_PHY_BCR] = { 0x7c01c },
3139 [GCC_PCIE_0_PHY_NOCSR_COM_PHY_BCR] = { 0x7c028 },
3140 [GCC_PCIE_1_BCR] = { 0x9d000 },
3141 [GCC_PCIE_1_LINK_DOWN_BCR] = { 0x9e014 },
3142 [GCC_PCIE_1_NOCSR_COM_PHY_BCR] = { 0x9e020 },
3143 [GCC_PCIE_1_PHY_BCR] = { 0x9e01c },
3144 [GCC_PCIE_1_PHY_NOCSR_COM_PHY_BCR] = { 0x9e000 },
3145 [GCC_PCIE_PHY_BCR] = { 0x7f000 },
3146 [GCC_PCIE_PHY_CFG_AHB_BCR] = { 0x7f00c },
3147 [GCC_PCIE_PHY_COM_BCR] = { 0x7f010 },
3148 [GCC_PDM_BCR] = { 0x43000 },
3149 [GCC_QUPV3_WRAPPER_0_BCR] = { 0x27000 },
3150 [GCC_QUPV3_WRAPPER_1_BCR] = { 0x28000 },
3151 [GCC_QUPV3_WRAPPER_2_BCR] = { 0x2e000 },
3152 [GCC_QUSB2PHY_PRIM_BCR] = { 0x22000 },
3153 [GCC_QUSB2PHY_SEC_BCR] = { 0x22004 },
3154 [GCC_SDCC2_BCR] = { 0x24000 },
3155 [GCC_SDCC4_BCR] = { 0x26000 },
3156 [GCC_UFS_PHY_BCR] = { 0x87000 },
3157 [GCC_USB30_PRIM_BCR] = { 0x49000 },
3158 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x60008 },
3159 [GCC_USB3_DP_PHY_SEC_BCR] = { 0x60014 },
3160 [GCC_USB3_PHY_PRIM_BCR] = { 0x60000 },
3161 [GCC_USB3_PHY_SEC_BCR] = { 0x6000c },
3162 [GCC_USB3PHY_PHY_PRIM_BCR] = { 0x60004 },
3163 [GCC_USB3PHY_PHY_SEC_BCR] = { 0x60010 },
3164 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x7a000 },
3165 [GCC_VIDEO_AXI0_CLK_ARES] = { 0x42018, 2 },
3166 [GCC_VIDEO_AXI1_CLK_ARES] = { 0x42020, 2 },
3167 [GCC_VIDEO_BCR] = { 0x42000 },
3170 static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
3171 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
3172 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
3173 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
3174 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
3175 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
3176 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
3177 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s6_clk_src),
3178 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s7_clk_src),
3179 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
3180 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
3181 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),
3182 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
3183 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
3184 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
3185 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src),
3186 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s0_clk_src),
3187 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s1_clk_src),
3188 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s2_clk_src),
3189 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s3_clk_src),
3190 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s4_clk_src),
3191 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s5_clk_src),
3192 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s6_clk_src),
3195 static struct gdsc *gcc_sm8450_gdscs[] = {
3196 [PCIE_0_GDSC] = &pcie_0_gdsc,
3197 [PCIE_1_GDSC] = &pcie_1_gdsc,
3198 [UFS_PHY_GDSC] = &ufs_phy_gdsc,
3199 [USB30_PRIM_GDSC] = &usb30_prim_gdsc,
3202 static const struct regmap_config gcc_sm8450_regmap_config = {
3206 .max_register = 0x1f1030,
3210 static const struct qcom_cc_desc gcc_sm8450_desc = {
3211 .config = &gcc_sm8450_regmap_config,
3212 .clks = gcc_sm8450_clocks,
3213 .num_clks = ARRAY_SIZE(gcc_sm8450_clocks),
3214 .resets = gcc_sm8450_resets,
3215 .num_resets = ARRAY_SIZE(gcc_sm8450_resets),
3216 .gdscs = gcc_sm8450_gdscs,
3217 .num_gdscs = ARRAY_SIZE(gcc_sm8450_gdscs),
3220 static const struct of_device_id gcc_sm8450_match_table[] = {
3221 { .compatible = "qcom,gcc-sm8450" },
3224 MODULE_DEVICE_TABLE(of, gcc_sm8450_match_table);
3226 static int gcc_sm8450_probe(struct platform_device *pdev)
3228 struct regmap *regmap;
3231 regmap = qcom_cc_map(pdev, &gcc_sm8450_desc);
3233 return PTR_ERR(regmap);
3235 ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
3236 ARRAY_SIZE(gcc_dfs_clocks));
3240 /* FORCE_MEM_CORE_ON for ufs phy ice core clocks */
3241 regmap_update_bits(regmap, gcc_ufs_phy_ice_core_clk.halt_reg, BIT(14), BIT(14));
3244 * Keep the critical clock always-On
3245 * gcc_camera_ahb_clk, gcc_camera_xo_clk, gcc_disp_ahb_clk,
3246 * gcc_disp_xo_clk, gcc_gpu_cfg_ahb_clk, gcc_video_ahb_clk,
3249 regmap_update_bits(regmap, 0x36004, BIT(0), BIT(0));
3250 regmap_update_bits(regmap, 0x36020, BIT(0), BIT(0));
3251 regmap_update_bits(regmap, 0x37004, BIT(0), BIT(0));
3252 regmap_update_bits(regmap, 0x3701c, BIT(0), BIT(0));
3253 regmap_update_bits(regmap, 0x81004, BIT(0), BIT(0));
3254 regmap_update_bits(regmap, 0x42004, BIT(0), BIT(0));
3255 regmap_update_bits(regmap, 0x42028, BIT(0), BIT(0));
3257 return qcom_cc_really_probe(pdev, &gcc_sm8450_desc, regmap);
3260 static struct platform_driver gcc_sm8450_driver = {
3261 .probe = gcc_sm8450_probe,
3263 .name = "gcc-sm8450",
3264 .of_match_table = gcc_sm8450_match_table,
3268 static int __init gcc_sm8450_init(void)
3270 return platform_driver_register(&gcc_sm8450_driver);
3272 subsys_initcall(gcc_sm8450_init);
3274 static void __exit gcc_sm8450_exit(void)
3276 platform_driver_unregister(&gcc_sm8450_driver);
3278 module_exit(gcc_sm8450_exit);
3280 MODULE_DESCRIPTION("QTI GCC SM8450 Driver");
3281 MODULE_LICENSE("GPL v2");