cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

gcc-sm8150.c (101420B)


      1// SPDX-License-Identifier: GPL-2.0
      2// Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
      3
      4#include <linux/kernel.h>
      5#include <linux/bitops.h>
      6#include <linux/err.h>
      7#include <linux/platform_device.h>
      8#include <linux/module.h>
      9#include <linux/of.h>
     10#include <linux/of_device.h>
     11#include <linux/clk-provider.h>
     12#include <linux/regmap.h>
     13#include <linux/reset-controller.h>
     14
     15#include <dt-bindings/clock/qcom,gcc-sm8150.h>
     16
     17#include "common.h"
     18#include "clk-alpha-pll.h"
     19#include "clk-branch.h"
     20#include "clk-pll.h"
     21#include "clk-rcg.h"
     22#include "clk-regmap.h"
     23#include "reset.h"
     24#include "gdsc.h"
     25
     26enum {
     27	P_BI_TCXO,
     28	P_AUD_REF_CLK,
     29	P_CORE_BI_PLL_TEST_SE,
     30	P_GPLL0_OUT_EVEN,
     31	P_GPLL0_OUT_MAIN,
     32	P_GPLL7_OUT_MAIN,
     33	P_GPLL9_OUT_MAIN,
     34	P_SLEEP_CLK,
     35};
     36
     37static struct clk_alpha_pll gpll0 = {
     38	.offset = 0x0,
     39	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
     40	.clkr = {
     41		.enable_reg = 0x52000,
     42		.enable_mask = BIT(0),
     43		.hw.init = &(struct clk_init_data){
     44			.name = "gpll0",
     45			.parent_data = &(const struct clk_parent_data){
     46				.fw_name = "bi_tcxo",
     47				.name = "bi_tcxo",
     48			},
     49			.num_parents = 1,
     50			.ops = &clk_alpha_pll_fixed_trion_ops,
     51		},
     52	},
     53};
     54
     55static const struct clk_div_table post_div_table_trion_even[] = {
     56	{ 0x0, 1 },
     57	{ 0x1, 2 },
     58	{ 0x3, 4 },
     59	{ 0x7, 8 },
     60	{ }
     61};
     62
     63static struct clk_alpha_pll_postdiv gpll0_out_even = {
     64	.offset = 0x0,
     65	.post_div_shift = 8,
     66	.post_div_table = post_div_table_trion_even,
     67	.num_post_div = ARRAY_SIZE(post_div_table_trion_even),
     68	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
     69	.width = 4,
     70	.clkr.hw.init = &(struct clk_init_data){
     71		.name = "gpll0_out_even",
     72		.parent_hws = (const struct clk_hw*[]){
     73			&gpll0.clkr.hw,
     74		},
     75		.num_parents = 1,
     76		.ops = &clk_alpha_pll_postdiv_trion_ops,
     77	},
     78};
     79
     80static struct clk_alpha_pll gpll7 = {
     81	.offset = 0x1a000,
     82	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
     83	.clkr = {
     84		.enable_reg = 0x52000,
     85		.enable_mask = BIT(7),
     86		.hw.init = &(struct clk_init_data){
     87			.name = "gpll7",
     88			.parent_data = &(const struct clk_parent_data){
     89				.fw_name = "bi_tcxo",
     90				.name = "bi_tcxo",
     91			},
     92			.num_parents = 1,
     93			.ops = &clk_alpha_pll_fixed_trion_ops,
     94		},
     95	},
     96};
     97
     98static struct clk_alpha_pll gpll9 = {
     99	.offset = 0x1c000,
    100	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
    101	.clkr = {
    102		.enable_reg = 0x52000,
    103		.enable_mask = BIT(9),
    104		.hw.init = &(struct clk_init_data){
    105			.name = "gpll9",
    106			.parent_data = &(const struct clk_parent_data){
    107				.fw_name = "bi_tcxo",
    108				.name = "bi_tcxo",
    109			},
    110			.num_parents = 1,
    111			.ops = &clk_alpha_pll_fixed_trion_ops,
    112		},
    113	},
    114};
    115
    116static const struct parent_map gcc_parent_map_0[] = {
    117	{ P_BI_TCXO, 0 },
    118	{ P_GPLL0_OUT_MAIN, 1 },
    119	{ P_GPLL0_OUT_EVEN, 6 },
    120	{ P_CORE_BI_PLL_TEST_SE, 7 },
    121};
    122
    123static const struct clk_parent_data gcc_parents_0[] = {
    124	{ .fw_name = "bi_tcxo", .name = "bi_tcxo" },
    125	{ .hw = &gpll0.clkr.hw },
    126	{ .hw = &gpll0_out_even.clkr.hw },
    127	{ .fw_name = "core_bi_pll_test_se" },
    128};
    129
    130static const struct parent_map gcc_parent_map_1[] = {
    131	{ P_BI_TCXO, 0 },
    132	{ P_GPLL0_OUT_MAIN, 1 },
    133	{ P_SLEEP_CLK, 5 },
    134	{ P_GPLL0_OUT_EVEN, 6 },
    135	{ P_CORE_BI_PLL_TEST_SE, 7 },
    136};
    137
    138static const struct clk_parent_data gcc_parents_1[] = {
    139	{ .fw_name = "bi_tcxo", .name = "bi_tcxo" },
    140	{ .hw = &gpll0.clkr.hw },
    141	{ .fw_name = "sleep_clk", .name = "sleep_clk" },
    142	{ .hw = &gpll0_out_even.clkr.hw },
    143	{ .fw_name = "core_bi_pll_test_se" },
    144};
    145
    146static const struct parent_map gcc_parent_map_2[] = {
    147	{ P_BI_TCXO, 0 },
    148	{ P_SLEEP_CLK, 5 },
    149	{ P_CORE_BI_PLL_TEST_SE, 7 },
    150};
    151
    152static const struct clk_parent_data gcc_parents_2[] = {
    153	{ .fw_name = "bi_tcxo", .name = "bi_tcxo" },
    154	{ .fw_name = "sleep_clk", .name = "sleep_clk" },
    155	{ .fw_name = "core_bi_pll_test_se" },
    156};
    157
    158static const struct parent_map gcc_parent_map_3[] = {
    159	{ P_BI_TCXO, 0 },
    160	{ P_GPLL0_OUT_MAIN, 1 },
    161	{ P_CORE_BI_PLL_TEST_SE, 7 },
    162};
    163
    164static const struct clk_parent_data gcc_parents_3[] = {
    165	{ .fw_name = "bi_tcxo", .name = "bi_tcxo" },
    166	{ .hw = &gpll0.clkr.hw },
    167	{ .fw_name = "core_bi_pll_test_se"},
    168};
    169
    170static const struct parent_map gcc_parent_map_4[] = {
    171	{ P_BI_TCXO, 0 },
    172	{ P_CORE_BI_PLL_TEST_SE, 7 },
    173};
    174
    175static const struct clk_parent_data gcc_parents_4[] = {
    176	{ .fw_name = "bi_tcxo", .name = "bi_tcxo" },
    177	{ .fw_name = "core_bi_pll_test_se" },
    178};
    179
    180static const struct parent_map gcc_parent_map_5[] = {
    181	{ P_BI_TCXO, 0 },
    182	{ P_GPLL0_OUT_MAIN, 1 },
    183	{ P_GPLL7_OUT_MAIN, 3 },
    184	{ P_GPLL0_OUT_EVEN, 6 },
    185	{ P_CORE_BI_PLL_TEST_SE, 7 },
    186};
    187
    188static const struct clk_parent_data gcc_parents_5[] = {
    189	{ .fw_name = "bi_tcxo", .name = "bi_tcxo" },
    190	{ .hw = &gpll0.clkr.hw },
    191	{ .hw = &gpll7.clkr.hw },
    192	{ .hw = &gpll0_out_even.clkr.hw },
    193	{ .fw_name = "core_bi_pll_test_se" },
    194};
    195
    196static const struct parent_map gcc_parent_map_6[] = {
    197	{ P_BI_TCXO, 0 },
    198	{ P_GPLL0_OUT_MAIN, 1 },
    199	{ P_GPLL9_OUT_MAIN, 2 },
    200	{ P_GPLL0_OUT_EVEN, 6 },
    201	{ P_CORE_BI_PLL_TEST_SE, 7 },
    202};
    203
    204static const struct clk_parent_data gcc_parents_6[] = {
    205	{ .fw_name = "bi_tcxo", .name = "bi_tcxo" },
    206	{ .hw = &gpll0.clkr.hw },
    207	{ .hw = &gpll9.clkr.hw },
    208	{ .hw = &gpll0_out_even.clkr.hw },
    209	{ .fw_name = "core_bi_pll_test_se" },
    210};
    211
    212static const struct parent_map gcc_parent_map_7[] = {
    213	{ P_BI_TCXO, 0 },
    214	{ P_GPLL0_OUT_MAIN, 1 },
    215	{ P_AUD_REF_CLK, 2 },
    216	{ P_GPLL0_OUT_EVEN, 6 },
    217	{ P_CORE_BI_PLL_TEST_SE, 7 },
    218};
    219
    220static const struct clk_parent_data gcc_parents_7[] = {
    221	{ .fw_name = "bi_tcxo", .name = "bi_tcxo" },
    222	{ .hw = &gpll0.clkr.hw },
    223	{ .fw_name = "aud_ref_clk", .name = "aud_ref_clk" },
    224	{ .hw = &gpll0_out_even.clkr.hw },
    225	{ .fw_name = "core_bi_pll_test_se" },
    226};
    227
    228static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src[] = {
    229	F(19200000, P_BI_TCXO, 1, 0, 0),
    230	F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
    231	F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
    232	{ }
    233};
    234
    235static struct clk_rcg2 gcc_cpuss_ahb_clk_src = {
    236	.cmd_rcgr = 0x48014,
    237	.mnd_width = 0,
    238	.hid_width = 5,
    239	.parent_map = gcc_parent_map_0,
    240	.freq_tbl = ftbl_gcc_cpuss_ahb_clk_src,
    241	.clkr.hw.init = &(struct clk_init_data){
    242		.name = "gcc_cpuss_ahb_clk_src",
    243		.parent_data = gcc_parents_0,
    244		.num_parents = ARRAY_SIZE(gcc_parents_0),
    245		.flags = CLK_SET_RATE_PARENT,
    246		.ops = &clk_rcg2_ops,
    247	},
    248};
    249
    250static const struct freq_tbl ftbl_gcc_emac_ptp_clk_src[] = {
    251	F(19200000, P_BI_TCXO, 1, 0, 0),
    252	F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
    253	F(125000000, P_GPLL7_OUT_MAIN, 4, 0, 0),
    254	F(250000000, P_GPLL7_OUT_MAIN, 2, 0, 0),
    255	{ }
    256};
    257
    258static struct clk_rcg2 gcc_emac_ptp_clk_src = {
    259	.cmd_rcgr = 0x6038,
    260	.mnd_width = 0,
    261	.hid_width = 5,
    262	.parent_map = gcc_parent_map_5,
    263	.freq_tbl = ftbl_gcc_emac_ptp_clk_src,
    264	.clkr.hw.init = &(struct clk_init_data){
    265		.name = "gcc_emac_ptp_clk_src",
    266		.parent_data = gcc_parents_5,
    267		.num_parents = ARRAY_SIZE(gcc_parents_5),
    268		.flags = CLK_SET_RATE_PARENT,
    269		.ops = &clk_rcg2_ops,
    270	},
    271};
    272
    273static const struct freq_tbl ftbl_gcc_emac_rgmii_clk_src[] = {
    274	F(2500000, P_BI_TCXO, 1, 25, 192),
    275	F(5000000, P_BI_TCXO, 1, 25, 96),
    276	F(19200000, P_BI_TCXO, 1, 0, 0),
    277	F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
    278	F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
    279	F(125000000, P_GPLL7_OUT_MAIN, 4, 0, 0),
    280	F(250000000, P_GPLL7_OUT_MAIN, 2, 0, 0),
    281	{ }
    282};
    283
    284static struct clk_rcg2 gcc_emac_rgmii_clk_src = {
    285	.cmd_rcgr = 0x601c,
    286	.mnd_width = 8,
    287	.hid_width = 5,
    288	.parent_map = gcc_parent_map_5,
    289	.freq_tbl = ftbl_gcc_emac_rgmii_clk_src,
    290	.clkr.hw.init = &(struct clk_init_data){
    291		.name = "gcc_emac_rgmii_clk_src",
    292		.parent_data = gcc_parents_5,
    293		.num_parents = ARRAY_SIZE(gcc_parents_5),
    294		.flags = CLK_SET_RATE_PARENT,
    295		.ops = &clk_rcg2_ops,
    296	},
    297};
    298
    299static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
    300	F(19200000, P_BI_TCXO, 1, 0, 0),
    301	F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
    302	F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
    303	F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
    304	F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
    305	{ }
    306};
    307
    308static struct clk_rcg2 gcc_gp1_clk_src = {
    309	.cmd_rcgr = 0x64004,
    310	.mnd_width = 8,
    311	.hid_width = 5,
    312	.parent_map = gcc_parent_map_1,
    313	.freq_tbl = ftbl_gcc_gp1_clk_src,
    314	.clkr.hw.init = &(struct clk_init_data){
    315		.name = "gcc_gp1_clk_src",
    316		.parent_data = gcc_parents_1,
    317		.num_parents = ARRAY_SIZE(gcc_parents_1),
    318		.flags = CLK_SET_RATE_PARENT,
    319		.ops = &clk_rcg2_ops,
    320	},
    321};
    322
    323static struct clk_rcg2 gcc_gp2_clk_src = {
    324	.cmd_rcgr = 0x65004,
    325	.mnd_width = 8,
    326	.hid_width = 5,
    327	.parent_map = gcc_parent_map_1,
    328	.freq_tbl = ftbl_gcc_gp1_clk_src,
    329	.clkr.hw.init = &(struct clk_init_data){
    330		.name = "gcc_gp2_clk_src",
    331		.parent_data = gcc_parents_1,
    332		.num_parents = ARRAY_SIZE(gcc_parents_1),
    333		.flags = CLK_SET_RATE_PARENT,
    334		.ops = &clk_rcg2_ops,
    335	},
    336};
    337
    338static struct clk_rcg2 gcc_gp3_clk_src = {
    339	.cmd_rcgr = 0x66004,
    340	.mnd_width = 8,
    341	.hid_width = 5,
    342	.parent_map = gcc_parent_map_1,
    343	.freq_tbl = ftbl_gcc_gp1_clk_src,
    344	.clkr.hw.init = &(struct clk_init_data){
    345		.name = "gcc_gp3_clk_src",
    346		.parent_data = gcc_parents_1,
    347		.num_parents = ARRAY_SIZE(gcc_parents_1),
    348		.flags = CLK_SET_RATE_PARENT,
    349		.ops = &clk_rcg2_ops,
    350	},
    351};
    352
    353static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
    354	F(9600000, P_BI_TCXO, 2, 0, 0),
    355	F(19200000, P_BI_TCXO, 1, 0, 0),
    356	{ }
    357};
    358
    359static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
    360	.cmd_rcgr = 0x6b02c,
    361	.mnd_width = 16,
    362	.hid_width = 5,
    363	.parent_map = gcc_parent_map_2,
    364	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
    365	.clkr.hw.init = &(struct clk_init_data){
    366		.name = "gcc_pcie_0_aux_clk_src",
    367		.parent_data = gcc_parents_2,
    368		.num_parents = ARRAY_SIZE(gcc_parents_2),
    369		.flags = CLK_SET_RATE_PARENT,
    370		.ops = &clk_rcg2_ops,
    371	},
    372};
    373
    374static struct clk_rcg2 gcc_pcie_1_aux_clk_src = {
    375	.cmd_rcgr = 0x8d02c,
    376	.mnd_width = 16,
    377	.hid_width = 5,
    378	.parent_map = gcc_parent_map_2,
    379	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
    380	.clkr.hw.init = &(struct clk_init_data){
    381		.name = "gcc_pcie_1_aux_clk_src",
    382		.parent_data = gcc_parents_2,
    383		.num_parents = ARRAY_SIZE(gcc_parents_2),
    384		.flags = CLK_SET_RATE_PARENT,
    385		.ops = &clk_rcg2_ops,
    386	},
    387};
    388
    389static const struct freq_tbl ftbl_gcc_pcie_phy_refgen_clk_src[] = {
    390	F(19200000, P_BI_TCXO, 1, 0, 0),
    391	F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
    392	{ }
    393};
    394
    395static struct clk_rcg2 gcc_pcie_phy_refgen_clk_src = {
    396	.cmd_rcgr = 0x6f014,
    397	.mnd_width = 0,
    398	.hid_width = 5,
    399	.parent_map = gcc_parent_map_0,
    400	.freq_tbl = ftbl_gcc_pcie_phy_refgen_clk_src,
    401	.clkr.hw.init = &(struct clk_init_data){
    402		.name = "gcc_pcie_phy_refgen_clk_src",
    403		.parent_data = gcc_parents_0,
    404		.num_parents = ARRAY_SIZE(gcc_parents_0),
    405		.flags = CLK_SET_RATE_PARENT,
    406		.ops = &clk_rcg2_ops,
    407	},
    408};
    409
    410static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
    411	F(9600000, P_BI_TCXO, 2, 0, 0),
    412	F(19200000, P_BI_TCXO, 1, 0, 0),
    413	F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
    414	{ }
    415};
    416
    417static struct clk_rcg2 gcc_pdm2_clk_src = {
    418	.cmd_rcgr = 0x33010,
    419	.mnd_width = 0,
    420	.hid_width = 5,
    421	.parent_map = gcc_parent_map_0,
    422	.freq_tbl = ftbl_gcc_pdm2_clk_src,
    423	.clkr.hw.init = &(struct clk_init_data){
    424		.name = "gcc_pdm2_clk_src",
    425		.parent_data = gcc_parents_0,
    426		.num_parents = ARRAY_SIZE(gcc_parents_0),
    427		.flags = CLK_SET_RATE_PARENT,
    428		.ops = &clk_rcg2_ops,
    429	},
    430};
    431
    432static const struct freq_tbl ftbl_gcc_qspi_core_clk_src[] = {
    433	F(19200000, P_BI_TCXO, 1, 0, 0),
    434	F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
    435	F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
    436	F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
    437	{ }
    438};
    439
    440static struct clk_rcg2 gcc_qspi_core_clk_src = {
    441	.cmd_rcgr = 0x4b008,
    442	.mnd_width = 0,
    443	.hid_width = 5,
    444	.parent_map = gcc_parent_map_0,
    445	.freq_tbl = ftbl_gcc_qspi_core_clk_src,
    446	.clkr.hw.init = &(struct clk_init_data){
    447		.name = "gcc_qspi_core_clk_src",
    448		.parent_data = gcc_parents_0,
    449		.num_parents = ARRAY_SIZE(gcc_parents_0),
    450		.flags = CLK_SET_RATE_PARENT,
    451		.ops = &clk_rcg2_ops,
    452	},
    453};
    454
    455static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
    456	F(7372800, P_GPLL0_OUT_EVEN, 1, 384, 15625),
    457	F(14745600, P_GPLL0_OUT_EVEN, 1, 768, 15625),
    458	F(19200000, P_BI_TCXO, 1, 0, 0),
    459	F(29491200, P_GPLL0_OUT_EVEN, 1, 1536, 15625),
    460	F(32000000, P_GPLL0_OUT_EVEN, 1, 8, 75),
    461	F(48000000, P_GPLL0_OUT_EVEN, 1, 4, 25),
    462	F(64000000, P_GPLL0_OUT_EVEN, 1, 16, 75),
    463	F(80000000, P_GPLL0_OUT_EVEN, 1, 4, 15),
    464	F(96000000, P_GPLL0_OUT_EVEN, 1, 8, 25),
    465	F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
    466	F(102400000, P_GPLL0_OUT_EVEN, 1, 128, 375),
    467	F(112000000, P_GPLL0_OUT_EVEN, 1, 28, 75),
    468	F(117964800, P_GPLL0_OUT_EVEN, 1, 6144, 15625),
    469	F(120000000, P_GPLL0_OUT_EVEN, 2.5, 0, 0),
    470	F(128000000, P_GPLL0_OUT_MAIN, 1, 16, 75),
    471	{ }
    472};
    473
    474static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
    475	.cmd_rcgr = 0x17148,
    476	.mnd_width = 16,
    477	.hid_width = 5,
    478	.parent_map = gcc_parent_map_0,
    479	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    480	.clkr.hw.init = &(struct clk_init_data){
    481		.name = "gcc_qupv3_wrap0_s0_clk_src",
    482		.parent_data = gcc_parents_0,
    483		.num_parents = ARRAY_SIZE(gcc_parents_0),
    484		.flags = CLK_SET_RATE_PARENT,
    485		.ops = &clk_rcg2_ops,
    486	},
    487};
    488
    489static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
    490	.cmd_rcgr = 0x17278,
    491	.mnd_width = 16,
    492	.hid_width = 5,
    493	.parent_map = gcc_parent_map_0,
    494	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    495	.clkr.hw.init = &(struct clk_init_data){
    496		.name = "gcc_qupv3_wrap0_s1_clk_src",
    497		.parent_data = gcc_parents_0,
    498		.num_parents = ARRAY_SIZE(gcc_parents_0),
    499		.flags = CLK_SET_RATE_PARENT,
    500		.ops = &clk_rcg2_ops,
    501	},
    502};
    503
    504static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
    505	.cmd_rcgr = 0x173a8,
    506	.mnd_width = 16,
    507	.hid_width = 5,
    508	.parent_map = gcc_parent_map_0,
    509	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    510	.clkr.hw.init = &(struct clk_init_data){
    511		.name = "gcc_qupv3_wrap0_s2_clk_src",
    512		.parent_data = gcc_parents_0,
    513		.num_parents = ARRAY_SIZE(gcc_parents_0),
    514		.flags = CLK_SET_RATE_PARENT,
    515		.ops = &clk_rcg2_ops,
    516	},
    517};
    518
    519static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
    520	.cmd_rcgr = 0x174d8,
    521	.mnd_width = 16,
    522	.hid_width = 5,
    523	.parent_map = gcc_parent_map_0,
    524	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    525	.clkr.hw.init = &(struct clk_init_data){
    526		.name = "gcc_qupv3_wrap0_s3_clk_src",
    527		.parent_data = gcc_parents_0,
    528		.num_parents = ARRAY_SIZE(gcc_parents_0),
    529		.flags = CLK_SET_RATE_PARENT,
    530		.ops = &clk_rcg2_ops,
    531	},
    532};
    533
    534static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
    535	.cmd_rcgr = 0x17608,
    536	.mnd_width = 16,
    537	.hid_width = 5,
    538	.parent_map = gcc_parent_map_0,
    539	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    540	.clkr.hw.init = &(struct clk_init_data){
    541		.name = "gcc_qupv3_wrap0_s4_clk_src",
    542		.parent_data = gcc_parents_0,
    543		.num_parents = ARRAY_SIZE(gcc_parents_0),
    544		.flags = CLK_SET_RATE_PARENT,
    545		.ops = &clk_rcg2_ops,
    546	},
    547};
    548
    549static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
    550	.cmd_rcgr = 0x17738,
    551	.mnd_width = 16,
    552	.hid_width = 5,
    553	.parent_map = gcc_parent_map_0,
    554	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    555	.clkr.hw.init = &(struct clk_init_data){
    556		.name = "gcc_qupv3_wrap0_s5_clk_src",
    557		.parent_data = gcc_parents_0,
    558		.num_parents = ARRAY_SIZE(gcc_parents_0),
    559		.flags = CLK_SET_RATE_PARENT,
    560		.ops = &clk_rcg2_ops,
    561	},
    562};
    563
    564static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
    565	.cmd_rcgr = 0x17868,
    566	.mnd_width = 16,
    567	.hid_width = 5,
    568	.parent_map = gcc_parent_map_0,
    569	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    570	.clkr.hw.init = &(struct clk_init_data){
    571		.name = "gcc_qupv3_wrap0_s6_clk_src",
    572		.parent_data = gcc_parents_0,
    573		.num_parents = ARRAY_SIZE(gcc_parents_0),
    574		.flags = CLK_SET_RATE_PARENT,
    575		.ops = &clk_rcg2_ops,
    576	},
    577};
    578
    579static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = {
    580	.cmd_rcgr = 0x17998,
    581	.mnd_width = 16,
    582	.hid_width = 5,
    583	.parent_map = gcc_parent_map_0,
    584	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    585	.clkr.hw.init = &(struct clk_init_data){
    586		.name = "gcc_qupv3_wrap0_s7_clk_src",
    587		.parent_data = gcc_parents_0,
    588		.num_parents = ARRAY_SIZE(gcc_parents_0),
    589		.flags = CLK_SET_RATE_PARENT,
    590		.ops = &clk_rcg2_ops,
    591	},
    592};
    593
    594static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
    595	.cmd_rcgr = 0x18148,
    596	.mnd_width = 16,
    597	.hid_width = 5,
    598	.parent_map = gcc_parent_map_0,
    599	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    600	.clkr.hw.init = &(struct clk_init_data){
    601		.name = "gcc_qupv3_wrap1_s0_clk_src",
    602		.parent_data = gcc_parents_0,
    603		.num_parents = ARRAY_SIZE(gcc_parents_0),
    604		.flags = CLK_SET_RATE_PARENT,
    605		.ops = &clk_rcg2_ops,
    606	},
    607};
    608
    609static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
    610	.cmd_rcgr = 0x18278,
    611	.mnd_width = 16,
    612	.hid_width = 5,
    613	.parent_map = gcc_parent_map_0,
    614	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    615	.clkr.hw.init = &(struct clk_init_data){
    616		.name = "gcc_qupv3_wrap1_s1_clk_src",
    617		.parent_data = gcc_parents_0,
    618		.num_parents = ARRAY_SIZE(gcc_parents_0),
    619		.flags = CLK_SET_RATE_PARENT,
    620		.ops = &clk_rcg2_ops,
    621	},
    622};
    623
    624static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
    625	.cmd_rcgr = 0x183a8,
    626	.mnd_width = 16,
    627	.hid_width = 5,
    628	.parent_map = gcc_parent_map_0,
    629	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    630	.clkr.hw.init = &(struct clk_init_data){
    631		.name = "gcc_qupv3_wrap1_s2_clk_src",
    632		.parent_data = gcc_parents_0,
    633		.num_parents = ARRAY_SIZE(gcc_parents_0),
    634		.flags = CLK_SET_RATE_PARENT,
    635		.ops = &clk_rcg2_ops,
    636	},
    637};
    638
    639static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
    640	.cmd_rcgr = 0x184d8,
    641	.mnd_width = 16,
    642	.hid_width = 5,
    643	.parent_map = gcc_parent_map_0,
    644	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    645	.clkr.hw.init = &(struct clk_init_data){
    646		.name = "gcc_qupv3_wrap1_s3_clk_src",
    647		.parent_data = gcc_parents_0,
    648		.num_parents = ARRAY_SIZE(gcc_parents_0),
    649		.flags = CLK_SET_RATE_PARENT,
    650		.ops = &clk_rcg2_ops,
    651	},
    652};
    653
    654static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
    655	.cmd_rcgr = 0x18608,
    656	.mnd_width = 16,
    657	.hid_width = 5,
    658	.parent_map = gcc_parent_map_0,
    659	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    660	.clkr.hw.init = &(struct clk_init_data){
    661		.name = "gcc_qupv3_wrap1_s4_clk_src",
    662		.parent_data = gcc_parents_0,
    663		.num_parents = ARRAY_SIZE(gcc_parents_0),
    664		.flags = CLK_SET_RATE_PARENT,
    665		.ops = &clk_rcg2_ops,
    666	},
    667};
    668
    669static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
    670	.cmd_rcgr = 0x18738,
    671	.mnd_width = 16,
    672	.hid_width = 5,
    673	.parent_map = gcc_parent_map_0,
    674	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    675	.clkr.hw.init = &(struct clk_init_data){
    676		.name = "gcc_qupv3_wrap1_s5_clk_src",
    677		.parent_data = gcc_parents_0,
    678		.num_parents = ARRAY_SIZE(gcc_parents_0),
    679		.flags = CLK_SET_RATE_PARENT,
    680		.ops = &clk_rcg2_ops,
    681	},
    682};
    683
    684static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = {
    685	.cmd_rcgr = 0x1e148,
    686	.mnd_width = 16,
    687	.hid_width = 5,
    688	.parent_map = gcc_parent_map_0,
    689	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    690	.clkr.hw.init = &(struct clk_init_data){
    691		.name = "gcc_qupv3_wrap2_s0_clk_src",
    692		.parent_data = gcc_parents_0,
    693		.num_parents = ARRAY_SIZE(gcc_parents_0),
    694		.flags = CLK_SET_RATE_PARENT,
    695		.ops = &clk_rcg2_ops,
    696	},
    697};
    698
    699static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = {
    700	.cmd_rcgr = 0x1e278,
    701	.mnd_width = 16,
    702	.hid_width = 5,
    703	.parent_map = gcc_parent_map_0,
    704	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    705	.clkr.hw.init = &(struct clk_init_data){
    706		.name = "gcc_qupv3_wrap2_s1_clk_src",
    707		.parent_data = gcc_parents_0,
    708		.num_parents = ARRAY_SIZE(gcc_parents_0),
    709		.flags = CLK_SET_RATE_PARENT,
    710		.ops = &clk_rcg2_ops,
    711	},
    712};
    713
    714static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src = {
    715	.cmd_rcgr = 0x1e3a8,
    716	.mnd_width = 16,
    717	.hid_width = 5,
    718	.parent_map = gcc_parent_map_0,
    719	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    720	.clkr.hw.init = &(struct clk_init_data){
    721		.name = "gcc_qupv3_wrap2_s2_clk_src",
    722		.parent_data = gcc_parents_0,
    723		.num_parents = ARRAY_SIZE(gcc_parents_0),
    724		.flags = CLK_SET_RATE_PARENT,
    725		.ops = &clk_rcg2_ops,
    726	},
    727};
    728
    729static struct clk_rcg2 gcc_qupv3_wrap2_s3_clk_src = {
    730	.cmd_rcgr = 0x1e4d8,
    731	.mnd_width = 16,
    732	.hid_width = 5,
    733	.parent_map = gcc_parent_map_0,
    734	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    735	.clkr.hw.init = &(struct clk_init_data){
    736		.name = "gcc_qupv3_wrap2_s3_clk_src",
    737		.parent_data = gcc_parents_0,
    738		.num_parents = ARRAY_SIZE(gcc_parents_0),
    739		.flags = CLK_SET_RATE_PARENT,
    740		.ops = &clk_rcg2_ops,
    741	},
    742};
    743
    744static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = {
    745	.cmd_rcgr = 0x1e608,
    746	.mnd_width = 16,
    747	.hid_width = 5,
    748	.parent_map = gcc_parent_map_0,
    749	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    750	.clkr.hw.init = &(struct clk_init_data){
    751		.name = "gcc_qupv3_wrap2_s4_clk_src",
    752		.parent_data = gcc_parents_0,
    753		.num_parents = ARRAY_SIZE(gcc_parents_0),
    754		.flags = CLK_SET_RATE_PARENT,
    755		.ops = &clk_rcg2_ops,
    756	},
    757};
    758
    759static struct clk_rcg2 gcc_qupv3_wrap2_s5_clk_src = {
    760	.cmd_rcgr = 0x1e738,
    761	.mnd_width = 16,
    762	.hid_width = 5,
    763	.parent_map = gcc_parent_map_0,
    764	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    765	.clkr.hw.init = &(struct clk_init_data){
    766		.name = "gcc_qupv3_wrap2_s5_clk_src",
    767		.parent_data = gcc_parents_0,
    768		.num_parents = ARRAY_SIZE(gcc_parents_0),
    769		.flags = CLK_SET_RATE_PARENT,
    770		.ops = &clk_rcg2_ops,
    771	},
    772};
    773
    774static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
    775	F(400000, P_BI_TCXO, 12, 1, 4),
    776	F(9600000, P_BI_TCXO, 2, 0, 0),
    777	F(19200000, P_BI_TCXO, 1, 0, 0),
    778	F(25000000, P_GPLL0_OUT_MAIN, 12, 1, 2),
    779	F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
    780	F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
    781	F(202000000, P_GPLL9_OUT_MAIN, 4, 0, 0),
    782	{ }
    783};
    784
    785static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
    786	.cmd_rcgr = 0x1400c,
    787	.mnd_width = 8,
    788	.hid_width = 5,
    789	.parent_map = gcc_parent_map_6,
    790	.freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
    791	.clkr.hw.init = &(struct clk_init_data){
    792		.name = "gcc_sdcc2_apps_clk_src",
    793		.parent_data = gcc_parents_6,
    794		.num_parents = ARRAY_SIZE(gcc_parents_6),
    795		.flags = CLK_SET_RATE_PARENT,
    796		.ops = &clk_rcg2_floor_ops,
    797	},
    798};
    799
    800static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = {
    801	F(400000, P_BI_TCXO, 12, 1, 4),
    802	F(9600000, P_BI_TCXO, 2, 0, 0),
    803	F(19200000, P_BI_TCXO, 1, 0, 0),
    804	F(25000000, P_GPLL0_OUT_MAIN, 12, 1, 2),
    805	F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
    806	F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
    807	{ }
    808};
    809
    810static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {
    811	.cmd_rcgr = 0x1600c,
    812	.mnd_width = 8,
    813	.hid_width = 5,
    814	.parent_map = gcc_parent_map_3,
    815	.freq_tbl = ftbl_gcc_sdcc4_apps_clk_src,
    816	.clkr.hw.init = &(struct clk_init_data){
    817		.name = "gcc_sdcc4_apps_clk_src",
    818		.parent_data = gcc_parents_3,
    819		.num_parents = ARRAY_SIZE(gcc_parents_3),
    820		.flags = CLK_SET_RATE_PARENT,
    821		.ops = &clk_rcg2_floor_ops,
    822	},
    823};
    824
    825static const struct freq_tbl ftbl_gcc_tsif_ref_clk_src[] = {
    826	F(105495, P_BI_TCXO, 2, 1, 91),
    827	{ }
    828};
    829
    830static struct clk_rcg2 gcc_tsif_ref_clk_src = {
    831	.cmd_rcgr = 0x36010,
    832	.mnd_width = 8,
    833	.hid_width = 5,
    834	.parent_map = gcc_parent_map_7,
    835	.freq_tbl = ftbl_gcc_tsif_ref_clk_src,
    836	.clkr.hw.init = &(struct clk_init_data){
    837		.name = "gcc_tsif_ref_clk_src",
    838		.parent_data = gcc_parents_7,
    839		.num_parents = ARRAY_SIZE(gcc_parents_7),
    840		.flags = CLK_SET_RATE_PARENT,
    841		.ops = &clk_rcg2_ops,
    842	},
    843};
    844
    845static const struct freq_tbl ftbl_gcc_ufs_card_axi_clk_src[] = {
    846	F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
    847	F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
    848	F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
    849	F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
    850	F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
    851	{ }
    852};
    853
    854static struct clk_rcg2 gcc_ufs_card_axi_clk_src = {
    855	.cmd_rcgr = 0x75020,
    856	.mnd_width = 8,
    857	.hid_width = 5,
    858	.parent_map = gcc_parent_map_0,
    859	.freq_tbl = ftbl_gcc_ufs_card_axi_clk_src,
    860	.clkr.hw.init = &(struct clk_init_data){
    861		.name = "gcc_ufs_card_axi_clk_src",
    862		.parent_data = gcc_parents_0,
    863		.num_parents = ARRAY_SIZE(gcc_parents_0),
    864		.flags = CLK_SET_RATE_PARENT,
    865		.ops = &clk_rcg2_ops,
    866	},
    867};
    868
    869static const struct freq_tbl ftbl_gcc_ufs_card_ice_core_clk_src[] = {
    870	F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
    871	F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
    872	F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
    873	F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
    874	{ }
    875};
    876
    877static struct clk_rcg2 gcc_ufs_card_ice_core_clk_src = {
    878	.cmd_rcgr = 0x75060,
    879	.mnd_width = 0,
    880	.hid_width = 5,
    881	.parent_map = gcc_parent_map_0,
    882	.freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
    883	.clkr.hw.init = &(struct clk_init_data){
    884		.name = "gcc_ufs_card_ice_core_clk_src",
    885		.parent_data = gcc_parents_0,
    886		.num_parents = ARRAY_SIZE(gcc_parents_0),
    887		.flags = CLK_SET_RATE_PARENT,
    888		.ops = &clk_rcg2_ops,
    889	},
    890};
    891
    892static const struct freq_tbl ftbl_gcc_ufs_card_phy_aux_clk_src[] = {
    893	F(19200000, P_BI_TCXO, 1, 0, 0),
    894	{ }
    895};
    896
    897static struct clk_rcg2 gcc_ufs_card_phy_aux_clk_src = {
    898	.cmd_rcgr = 0x75094,
    899	.mnd_width = 0,
    900	.hid_width = 5,
    901	.parent_map = gcc_parent_map_4,
    902	.freq_tbl = ftbl_gcc_ufs_card_phy_aux_clk_src,
    903	.clkr.hw.init = &(struct clk_init_data){
    904		.name = "gcc_ufs_card_phy_aux_clk_src",
    905		.parent_data = gcc_parents_4,
    906		.num_parents = ARRAY_SIZE(gcc_parents_4),
    907		.flags = CLK_SET_RATE_PARENT,
    908		.ops = &clk_rcg2_ops,
    909	},
    910};
    911
    912static const struct freq_tbl ftbl_gcc_ufs_card_unipro_core_clk_src[] = {
    913	F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
    914	F(75000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
    915	F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
    916	{ }
    917};
    918
    919static struct clk_rcg2 gcc_ufs_card_unipro_core_clk_src = {
    920	.cmd_rcgr = 0x75078,
    921	.mnd_width = 0,
    922	.hid_width = 5,
    923	.parent_map = gcc_parent_map_0,
    924	.freq_tbl = ftbl_gcc_ufs_card_unipro_core_clk_src,
    925	.clkr.hw.init = &(struct clk_init_data){
    926		.name = "gcc_ufs_card_unipro_core_clk_src",
    927		.parent_data = gcc_parents_0,
    928		.num_parents = ARRAY_SIZE(gcc_parents_0),
    929		.flags = CLK_SET_RATE_PARENT,
    930		.ops = &clk_rcg2_ops,
    931	},
    932};
    933
    934static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
    935	F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
    936	F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
    937	F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
    938	F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
    939	F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
    940	{ }
    941};
    942
    943static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
    944	.cmd_rcgr = 0x77020,
    945	.mnd_width = 8,
    946	.hid_width = 5,
    947	.parent_map = gcc_parent_map_0,
    948	.freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
    949	.clkr.hw.init = &(struct clk_init_data){
    950		.name = "gcc_ufs_phy_axi_clk_src",
    951		.parent_data = gcc_parents_0,
    952		.num_parents = ARRAY_SIZE(gcc_parents_0),
    953		.flags = CLK_SET_RATE_PARENT,
    954		.ops = &clk_rcg2_ops,
    955	},
    956};
    957
    958static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
    959	.cmd_rcgr = 0x77060,
    960	.mnd_width = 0,
    961	.hid_width = 5,
    962	.parent_map = gcc_parent_map_0,
    963	.freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
    964	.clkr.hw.init = &(struct clk_init_data){
    965		.name = "gcc_ufs_phy_ice_core_clk_src",
    966		.parent_data = gcc_parents_0,
    967		.num_parents = ARRAY_SIZE(gcc_parents_0),
    968		.flags = CLK_SET_RATE_PARENT,
    969		.ops = &clk_rcg2_ops,
    970	},
    971};
    972
    973static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
    974	.cmd_rcgr = 0x77094,
    975	.mnd_width = 0,
    976	.hid_width = 5,
    977	.parent_map = gcc_parent_map_4,
    978	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
    979	.clkr.hw.init = &(struct clk_init_data){
    980		.name = "gcc_ufs_phy_phy_aux_clk_src",
    981		.parent_data = gcc_parents_4,
    982		.num_parents = ARRAY_SIZE(gcc_parents_4),
    983		.flags = CLK_SET_RATE_PARENT,
    984		.ops = &clk_rcg2_ops,
    985	},
    986};
    987
    988static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
    989	.cmd_rcgr = 0x77078,
    990	.mnd_width = 0,
    991	.hid_width = 5,
    992	.parent_map = gcc_parent_map_0,
    993	.freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
    994	.clkr.hw.init = &(struct clk_init_data){
    995		.name = "gcc_ufs_phy_unipro_core_clk_src",
    996		.parent_data = gcc_parents_0,
    997		.num_parents = ARRAY_SIZE(gcc_parents_0),
    998		.flags = CLK_SET_RATE_PARENT,
    999		.ops = &clk_rcg2_ops,
   1000	},
   1001};
   1002
   1003static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
   1004	F(33333333, P_GPLL0_OUT_EVEN, 9, 0, 0),
   1005	F(66666667, P_GPLL0_OUT_EVEN, 4.5, 0, 0),
   1006	F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
   1007	F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
   1008	F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
   1009	{ }
   1010};
   1011
   1012static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
   1013	.cmd_rcgr = 0xf01c,
   1014	.mnd_width = 8,
   1015	.hid_width = 5,
   1016	.parent_map = gcc_parent_map_0,
   1017	.freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
   1018	.clkr.hw.init = &(struct clk_init_data){
   1019		.name = "gcc_usb30_prim_master_clk_src",
   1020		.parent_data = gcc_parents_0,
   1021		.num_parents = ARRAY_SIZE(gcc_parents_0),
   1022		.flags = CLK_SET_RATE_PARENT,
   1023		.ops = &clk_rcg2_ops,
   1024	},
   1025};
   1026
   1027static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {
   1028	F(19200000, P_BI_TCXO, 1, 0, 0),
   1029	F(20000000, P_GPLL0_OUT_EVEN, 15, 0, 0),
   1030	F(60000000, P_GPLL0_OUT_EVEN, 5, 0, 0),
   1031	{ }
   1032};
   1033
   1034static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
   1035	.cmd_rcgr = 0xf034,
   1036	.mnd_width = 0,
   1037	.hid_width = 5,
   1038	.parent_map = gcc_parent_map_0,
   1039	.freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
   1040	.clkr.hw.init = &(struct clk_init_data){
   1041		.name = "gcc_usb30_prim_mock_utmi_clk_src",
   1042		.parent_data = gcc_parents_0,
   1043		.num_parents = ARRAY_SIZE(gcc_parents_0),
   1044		.flags = CLK_SET_RATE_PARENT,
   1045		.ops = &clk_rcg2_ops,
   1046	},
   1047};
   1048
   1049static struct clk_rcg2 gcc_usb30_sec_master_clk_src = {
   1050	.cmd_rcgr = 0x1001c,
   1051	.mnd_width = 8,
   1052	.hid_width = 5,
   1053	.parent_map = gcc_parent_map_0,
   1054	.freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
   1055	.clkr.hw.init = &(struct clk_init_data){
   1056		.name = "gcc_usb30_sec_master_clk_src",
   1057		.parent_data = gcc_parents_0,
   1058		.num_parents = ARRAY_SIZE(gcc_parents_0),
   1059		.flags = CLK_SET_RATE_PARENT,
   1060		.ops = &clk_rcg2_ops,
   1061	},
   1062};
   1063
   1064static struct clk_rcg2 gcc_usb30_sec_mock_utmi_clk_src = {
   1065	.cmd_rcgr = 0x10034,
   1066	.mnd_width = 0,
   1067	.hid_width = 5,
   1068	.parent_map = gcc_parent_map_0,
   1069	.freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
   1070	.clkr.hw.init = &(struct clk_init_data){
   1071		.name = "gcc_usb30_sec_mock_utmi_clk_src",
   1072		.parent_data = gcc_parents_0,
   1073		.num_parents = ARRAY_SIZE(gcc_parents_0),
   1074		.flags = CLK_SET_RATE_PARENT,
   1075		.ops = &clk_rcg2_ops,
   1076	},
   1077};
   1078
   1079static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
   1080	.cmd_rcgr = 0xf060,
   1081	.mnd_width = 0,
   1082	.hid_width = 5,
   1083	.parent_map = gcc_parent_map_2,
   1084	.freq_tbl = ftbl_gcc_ufs_card_phy_aux_clk_src,
   1085	.clkr.hw.init = &(struct clk_init_data){
   1086		.name = "gcc_usb3_prim_phy_aux_clk_src",
   1087		.parent_data = gcc_parents_2,
   1088		.num_parents = ARRAY_SIZE(gcc_parents_2),
   1089		.flags = CLK_SET_RATE_PARENT,
   1090		.ops = &clk_rcg2_ops,
   1091	},
   1092};
   1093
   1094static struct clk_rcg2 gcc_usb3_sec_phy_aux_clk_src = {
   1095	.cmd_rcgr = 0x10060,
   1096	.mnd_width = 0,
   1097	.hid_width = 5,
   1098	.parent_map = gcc_parent_map_2,
   1099	.freq_tbl = ftbl_gcc_ufs_card_phy_aux_clk_src,
   1100	.clkr.hw.init = &(struct clk_init_data){
   1101		.name = "gcc_usb3_sec_phy_aux_clk_src",
   1102		.parent_data = gcc_parents_2,
   1103		.num_parents = ARRAY_SIZE(gcc_parents_2),
   1104		.flags = CLK_SET_RATE_PARENT,
   1105		.ops = &clk_rcg2_ops,
   1106	},
   1107};
   1108
   1109static struct clk_branch gcc_aggre_noc_pcie_tbu_clk = {
   1110	.halt_reg = 0x90018,
   1111	.halt_check = BRANCH_HALT,
   1112	.clkr = {
   1113		.enable_reg = 0x90018,
   1114		.enable_mask = BIT(0),
   1115		.hw.init = &(struct clk_init_data){
   1116			.name = "gcc_aggre_noc_pcie_tbu_clk",
   1117			.ops = &clk_branch2_ops,
   1118		},
   1119	},
   1120};
   1121
   1122static struct clk_branch gcc_aggre_ufs_card_axi_clk = {
   1123	.halt_reg = 0x750c0,
   1124	.halt_check = BRANCH_HALT,
   1125	.hwcg_reg = 0x750c0,
   1126	.hwcg_bit = 1,
   1127	.clkr = {
   1128		.enable_reg = 0x750c0,
   1129		.enable_mask = BIT(0),
   1130		.hw.init = &(struct clk_init_data){
   1131			.name = "gcc_aggre_ufs_card_axi_clk",
   1132			.parent_hws = (const struct clk_hw *[]){
   1133				      &gcc_ufs_card_axi_clk_src.clkr.hw },
   1134			.num_parents = 1,
   1135			.flags = CLK_SET_RATE_PARENT,
   1136			.ops = &clk_branch2_ops,
   1137		},
   1138	},
   1139};
   1140
   1141static struct clk_branch gcc_aggre_ufs_card_axi_hw_ctl_clk = {
   1142	.halt_reg = 0x750c0,
   1143	.halt_check = BRANCH_HALT,
   1144	.hwcg_reg = 0x750c0,
   1145	.hwcg_bit = 1,
   1146	.clkr = {
   1147		.enable_reg = 0x750c0,
   1148		.enable_mask = BIT(1),
   1149		.hw.init = &(struct clk_init_data){
   1150			.name = "gcc_aggre_ufs_card_axi_hw_ctl_clk",
   1151			.parent_hws = (const struct clk_hw *[]){
   1152				      &gcc_aggre_ufs_card_axi_clk.clkr.hw },
   1153			.num_parents = 1,
   1154			.flags = CLK_SET_RATE_PARENT,
   1155			.ops = &clk_branch_simple_ops,
   1156		},
   1157	},
   1158};
   1159
   1160static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
   1161	.halt_reg = 0x770c0,
   1162	.halt_check = BRANCH_HALT,
   1163	.hwcg_reg = 0x770c0,
   1164	.hwcg_bit = 1,
   1165	.clkr = {
   1166		.enable_reg = 0x770c0,
   1167		.enable_mask = BIT(0),
   1168		.hw.init = &(struct clk_init_data){
   1169			.name = "gcc_aggre_ufs_phy_axi_clk",
   1170			.parent_hws = (const struct clk_hw *[]){
   1171				      &gcc_ufs_phy_axi_clk_src.clkr.hw },
   1172			.num_parents = 1,
   1173			.flags = CLK_SET_RATE_PARENT,
   1174			.ops = &clk_branch2_ops,
   1175		},
   1176	},
   1177};
   1178
   1179static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = {
   1180	.halt_reg = 0x770c0,
   1181	.halt_check = BRANCH_HALT,
   1182	.hwcg_reg = 0x770c0,
   1183	.hwcg_bit = 1,
   1184	.clkr = {
   1185		.enable_reg = 0x770c0,
   1186		.enable_mask = BIT(1),
   1187		.hw.init = &(struct clk_init_data){
   1188			.name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk",
   1189			.parent_hws = (const struct clk_hw *[]){
   1190				      &gcc_aggre_ufs_phy_axi_clk.clkr.hw },
   1191			.num_parents = 1,
   1192			.flags = CLK_SET_RATE_PARENT,
   1193			.ops = &clk_branch_simple_ops,
   1194		},
   1195	},
   1196};
   1197
   1198static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
   1199	.halt_reg = 0xf07c,
   1200	.halt_check = BRANCH_HALT,
   1201	.clkr = {
   1202		.enable_reg = 0xf07c,
   1203		.enable_mask = BIT(0),
   1204		.hw.init = &(struct clk_init_data){
   1205			.name = "gcc_aggre_usb3_prim_axi_clk",
   1206			.parent_hws = (const struct clk_hw *[]){
   1207				      &gcc_usb30_prim_master_clk_src.clkr.hw },
   1208			.num_parents = 1,
   1209			.flags = CLK_SET_RATE_PARENT,
   1210			.ops = &clk_branch2_ops,
   1211		},
   1212	},
   1213};
   1214
   1215static struct clk_branch gcc_aggre_usb3_sec_axi_clk = {
   1216	.halt_reg = 0x1007c,
   1217	.halt_check = BRANCH_HALT,
   1218	.clkr = {
   1219		.enable_reg = 0x1007c,
   1220		.enable_mask = BIT(0),
   1221		.hw.init = &(struct clk_init_data){
   1222			.name = "gcc_aggre_usb3_sec_axi_clk",
   1223			.parent_hws = (const struct clk_hw *[]){
   1224				      &gcc_usb30_sec_master_clk_src.clkr.hw },
   1225			.num_parents = 1,
   1226			.flags = CLK_SET_RATE_PARENT,
   1227			.ops = &clk_branch2_ops,
   1228		},
   1229	},
   1230};
   1231
   1232static struct clk_branch gcc_boot_rom_ahb_clk = {
   1233	.halt_reg = 0x38004,
   1234	.halt_check = BRANCH_HALT_VOTED,
   1235	.hwcg_reg = 0x38004,
   1236	.hwcg_bit = 1,
   1237	.clkr = {
   1238		.enable_reg = 0x52004,
   1239		.enable_mask = BIT(10),
   1240		.hw.init = &(struct clk_init_data){
   1241			.name = "gcc_boot_rom_ahb_clk",
   1242			.ops = &clk_branch2_ops,
   1243		},
   1244	},
   1245};
   1246
   1247/*
   1248 * Clock ON depends on external parent 'config noc', so cant poll
   1249 * delay and also mark as crtitical for camss boot
   1250 */
   1251static struct clk_branch gcc_camera_ahb_clk = {
   1252	.halt_reg = 0xb008,
   1253	.halt_check = BRANCH_HALT_DELAY,
   1254	.hwcg_reg = 0xb008,
   1255	.hwcg_bit = 1,
   1256	.clkr = {
   1257		.enable_reg = 0xb008,
   1258		.enable_mask = BIT(0),
   1259		.hw.init = &(struct clk_init_data){
   1260			.name = "gcc_camera_ahb_clk",
   1261			.flags = CLK_IS_CRITICAL,
   1262			.ops = &clk_branch2_ops,
   1263		},
   1264	},
   1265};
   1266
   1267static struct clk_branch gcc_camera_hf_axi_clk = {
   1268	.halt_reg = 0xb030,
   1269	.halt_check = BRANCH_HALT,
   1270	.clkr = {
   1271		.enable_reg = 0xb030,
   1272		.enable_mask = BIT(0),
   1273		.hw.init = &(struct clk_init_data){
   1274			.name = "gcc_camera_hf_axi_clk",
   1275			.ops = &clk_branch2_ops,
   1276		},
   1277	},
   1278};
   1279
   1280static struct clk_branch gcc_camera_sf_axi_clk = {
   1281	.halt_reg = 0xb034,
   1282	.halt_check = BRANCH_HALT,
   1283	.clkr = {
   1284		.enable_reg = 0xb034,
   1285		.enable_mask = BIT(0),
   1286		.hw.init = &(struct clk_init_data){
   1287			.name = "gcc_camera_sf_axi_clk",
   1288			.ops = &clk_branch2_ops,
   1289		},
   1290	},
   1291};
   1292
   1293/* XO critical input to camss, so no need to poll */
   1294static struct clk_branch gcc_camera_xo_clk = {
   1295	.halt_reg = 0xb044,
   1296	.halt_check = BRANCH_HALT_DELAY,
   1297	.clkr = {
   1298		.enable_reg = 0xb044,
   1299		.enable_mask = BIT(0),
   1300		.hw.init = &(struct clk_init_data){
   1301			.name = "gcc_camera_xo_clk",
   1302			.flags = CLK_IS_CRITICAL,
   1303			.ops = &clk_branch2_ops,
   1304		},
   1305	},
   1306};
   1307
   1308static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
   1309	.halt_reg = 0xf078,
   1310	.halt_check = BRANCH_HALT,
   1311	.clkr = {
   1312		.enable_reg = 0xf078,
   1313		.enable_mask = BIT(0),
   1314		.hw.init = &(struct clk_init_data){
   1315			.name = "gcc_cfg_noc_usb3_prim_axi_clk",
   1316			.parent_hws = (const struct clk_hw *[]){
   1317				      &gcc_usb30_prim_master_clk_src.clkr.hw },
   1318			.num_parents = 1,
   1319			.flags = CLK_SET_RATE_PARENT,
   1320			.ops = &clk_branch2_ops,
   1321		},
   1322	},
   1323};
   1324
   1325static struct clk_branch gcc_cfg_noc_usb3_sec_axi_clk = {
   1326	.halt_reg = 0x10078,
   1327	.halt_check = BRANCH_HALT,
   1328	.clkr = {
   1329		.enable_reg = 0x10078,
   1330		.enable_mask = BIT(0),
   1331		.hw.init = &(struct clk_init_data){
   1332			.name = "gcc_cfg_noc_usb3_sec_axi_clk",
   1333			.parent_hws = (const struct clk_hw *[]){
   1334				      &gcc_usb30_sec_master_clk_src.clkr.hw },
   1335			.num_parents = 1,
   1336			.flags = CLK_SET_RATE_PARENT,
   1337			.ops = &clk_branch2_ops,
   1338		},
   1339	},
   1340};
   1341
   1342static struct clk_branch gcc_cpuss_ahb_clk = {
   1343	.halt_reg = 0x48000,
   1344	.halt_check = BRANCH_HALT_VOTED,
   1345	.clkr = {
   1346		.enable_reg = 0x52004,
   1347		.enable_mask = BIT(21),
   1348		.hw.init = &(struct clk_init_data){
   1349			.name = "gcc_cpuss_ahb_clk",
   1350			.parent_hws = (const struct clk_hw *[]){
   1351				      &gcc_cpuss_ahb_clk_src.clkr.hw },
   1352			.num_parents = 1,
   1353			 /* required for cpuss */
   1354			.flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
   1355			.ops = &clk_branch2_ops,
   1356		},
   1357	},
   1358};
   1359
   1360static struct clk_branch gcc_cpuss_dvm_bus_clk = {
   1361	.halt_reg = 0x48190,
   1362	.halt_check = BRANCH_HALT,
   1363	.clkr = {
   1364		.enable_reg = 0x48190,
   1365		.enable_mask = BIT(0),
   1366		.hw.init = &(struct clk_init_data){
   1367			.name = "gcc_cpuss_dvm_bus_clk",
   1368			 /* required for cpuss */
   1369			.flags = CLK_IS_CRITICAL,
   1370			.ops = &clk_branch2_ops,
   1371		},
   1372	},
   1373};
   1374
   1375static struct clk_branch gcc_cpuss_gnoc_clk = {
   1376	.halt_reg = 0x48004,
   1377	.halt_check = BRANCH_HALT_VOTED,
   1378	.hwcg_reg = 0x48004,
   1379	.hwcg_bit = 1,
   1380	.clkr = {
   1381		.enable_reg = 0x52004,
   1382		.enable_mask = BIT(22),
   1383		.hw.init = &(struct clk_init_data){
   1384			.name = "gcc_cpuss_gnoc_clk",
   1385			 /* required for cpuss */
   1386			.flags = CLK_IS_CRITICAL,
   1387			.ops = &clk_branch2_ops,
   1388		},
   1389	},
   1390};
   1391
   1392static struct clk_branch gcc_cpuss_rbcpr_clk = {
   1393	.halt_reg = 0x48008,
   1394	.halt_check = BRANCH_HALT,
   1395	.clkr = {
   1396		.enable_reg = 0x48008,
   1397		.enable_mask = BIT(0),
   1398		.hw.init = &(struct clk_init_data){
   1399			.name = "gcc_cpuss_rbcpr_clk",
   1400			.ops = &clk_branch2_ops,
   1401		},
   1402	},
   1403};
   1404
   1405static struct clk_branch gcc_ddrss_gpu_axi_clk = {
   1406	.halt_reg = 0x71154,
   1407	.halt_check = BRANCH_VOTED,
   1408	.clkr = {
   1409		.enable_reg = 0x71154,
   1410		.enable_mask = BIT(0),
   1411		.hw.init = &(struct clk_init_data){
   1412			.name = "gcc_ddrss_gpu_axi_clk",
   1413			.ops = &clk_branch2_ops,
   1414		},
   1415	},
   1416};
   1417
   1418/*
   1419 * Clock ON depends on external parent 'config noc', so cant poll
   1420 * delay and also mark as crtitical for disp boot
   1421 */
   1422static struct clk_branch gcc_disp_ahb_clk = {
   1423	.halt_reg = 0xb00c,
   1424	.halt_check = BRANCH_HALT_DELAY,
   1425	.hwcg_reg = 0xb00c,
   1426	.hwcg_bit = 1,
   1427	.clkr = {
   1428		.enable_reg = 0xb00c,
   1429		.enable_mask = BIT(0),
   1430		.hw.init = &(struct clk_init_data){
   1431			.name = "gcc_disp_ahb_clk",
   1432			.flags = CLK_IS_CRITICAL,
   1433			.ops = &clk_branch2_ops,
   1434		},
   1435	},
   1436};
   1437
   1438static struct clk_branch gcc_disp_hf_axi_clk = {
   1439	.halt_reg = 0xb038,
   1440	.halt_check = BRANCH_HALT,
   1441	.clkr = {
   1442		.enable_reg = 0xb038,
   1443		.enable_mask = BIT(0),
   1444		.hw.init = &(struct clk_init_data){
   1445			.name = "gcc_disp_hf_axi_clk",
   1446			.ops = &clk_branch2_ops,
   1447		},
   1448	},
   1449};
   1450
   1451static struct clk_branch gcc_disp_sf_axi_clk = {
   1452	.halt_reg = 0xb03c,
   1453	.halt_check = BRANCH_HALT,
   1454	.clkr = {
   1455		.enable_reg = 0xb03c,
   1456		.enable_mask = BIT(0),
   1457		.hw.init = &(struct clk_init_data){
   1458			.name = "gcc_disp_sf_axi_clk",
   1459			.ops = &clk_branch2_ops,
   1460		},
   1461	},
   1462};
   1463
   1464/* XO critical input to disp, so no need to poll */
   1465static struct clk_branch gcc_disp_xo_clk = {
   1466	.halt_reg = 0xb048,
   1467	.halt_check = BRANCH_HALT_DELAY,
   1468	.clkr = {
   1469		.enable_reg = 0xb048,
   1470		.enable_mask = BIT(0),
   1471		.hw.init = &(struct clk_init_data){
   1472			.name = "gcc_disp_xo_clk",
   1473			.flags = CLK_IS_CRITICAL,
   1474			.ops = &clk_branch2_ops,
   1475		},
   1476	},
   1477};
   1478
   1479static struct clk_branch gcc_emac_axi_clk = {
   1480	.halt_reg = 0x6010,
   1481	.halt_check = BRANCH_HALT,
   1482	.clkr = {
   1483		.enable_reg = 0x6010,
   1484		.enable_mask = BIT(0),
   1485		.hw.init = &(struct clk_init_data){
   1486			.name = "gcc_emac_axi_clk",
   1487			.ops = &clk_branch2_ops,
   1488		},
   1489	},
   1490};
   1491
   1492static struct clk_branch gcc_emac_ptp_clk = {
   1493	.halt_reg = 0x6034,
   1494	.halt_check = BRANCH_HALT,
   1495	.clkr = {
   1496		.enable_reg = 0x6034,
   1497		.enable_mask = BIT(0),
   1498		.hw.init = &(struct clk_init_data){
   1499			.name = "gcc_emac_ptp_clk",
   1500			.parent_hws = (const struct clk_hw *[]){
   1501				      &gcc_emac_ptp_clk_src.clkr.hw },
   1502			.num_parents = 1,
   1503			.flags = CLK_SET_RATE_PARENT,
   1504			.ops = &clk_branch2_ops,
   1505		},
   1506	},
   1507};
   1508
   1509static struct clk_branch gcc_emac_rgmii_clk = {
   1510	.halt_reg = 0x6018,
   1511	.halt_check = BRANCH_HALT,
   1512	.clkr = {
   1513		.enable_reg = 0x6018,
   1514		.enable_mask = BIT(0),
   1515		.hw.init = &(struct clk_init_data){
   1516			.name = "gcc_emac_rgmii_clk",
   1517			.parent_hws = (const struct clk_hw *[]){
   1518				      &gcc_emac_rgmii_clk_src.clkr.hw },
   1519			.num_parents = 1,
   1520			.flags = CLK_SET_RATE_PARENT,
   1521			.ops = &clk_branch2_ops,
   1522		},
   1523	},
   1524};
   1525
   1526static struct clk_branch gcc_emac_slv_ahb_clk = {
   1527	.halt_reg = 0x6014,
   1528	.halt_check = BRANCH_HALT,
   1529	.hwcg_reg = 0x6014,
   1530	.hwcg_bit = 1,
   1531	.clkr = {
   1532		.enable_reg = 0x6014,
   1533		.enable_mask = BIT(0),
   1534		.hw.init = &(struct clk_init_data){
   1535			.name = "gcc_emac_slv_ahb_clk",
   1536			.ops = &clk_branch2_ops,
   1537		},
   1538	},
   1539};
   1540
   1541static struct clk_branch gcc_gp1_clk = {
   1542	.halt_reg = 0x64000,
   1543	.halt_check = BRANCH_HALT,
   1544	.clkr = {
   1545		.enable_reg = 0x64000,
   1546		.enable_mask = BIT(0),
   1547		.hw.init = &(struct clk_init_data){
   1548			.name = "gcc_gp1_clk",
   1549			.parent_hws = (const struct clk_hw *[]){
   1550				      &gcc_gp1_clk_src.clkr.hw },
   1551			.num_parents = 1,
   1552			.flags = CLK_SET_RATE_PARENT,
   1553			.ops = &clk_branch2_ops,
   1554		},
   1555	},
   1556};
   1557
   1558static struct clk_branch gcc_gp2_clk = {
   1559	.halt_reg = 0x65000,
   1560	.halt_check = BRANCH_HALT,
   1561	.clkr = {
   1562		.enable_reg = 0x65000,
   1563		.enable_mask = BIT(0),
   1564		.hw.init = &(struct clk_init_data){
   1565			.name = "gcc_gp2_clk",
   1566			.parent_hws = (const struct clk_hw *[]){
   1567				      &gcc_gp2_clk_src.clkr.hw },
   1568			.num_parents = 1,
   1569			.flags = CLK_SET_RATE_PARENT,
   1570			.ops = &clk_branch2_ops,
   1571		},
   1572	},
   1573};
   1574
   1575static struct clk_branch gcc_gp3_clk = {
   1576	.halt_reg = 0x66000,
   1577	.halt_check = BRANCH_HALT,
   1578	.clkr = {
   1579		.enable_reg = 0x66000,
   1580		.enable_mask = BIT(0),
   1581		.hw.init = &(struct clk_init_data){
   1582			.name = "gcc_gp3_clk",
   1583			.parent_hws = (const struct clk_hw *[]){
   1584				      &gcc_gp3_clk_src.clkr.hw },
   1585			.num_parents = 1,
   1586			.flags = CLK_SET_RATE_PARENT,
   1587			.ops = &clk_branch2_ops,
   1588		},
   1589	},
   1590};
   1591
   1592static struct clk_branch gcc_gpu_cfg_ahb_clk = {
   1593	.halt_reg = 0x71004,
   1594	.halt_check = BRANCH_HALT,
   1595	.hwcg_reg = 0x71004,
   1596	.hwcg_bit = 1,
   1597	.clkr = {
   1598		.enable_reg = 0x71004,
   1599		.enable_mask = BIT(0),
   1600		.hw.init = &(struct clk_init_data){
   1601			.name = "gcc_gpu_cfg_ahb_clk",
   1602			 /* required for gpu */
   1603			.flags = CLK_IS_CRITICAL,
   1604			.ops = &clk_branch2_ops,
   1605		},
   1606	},
   1607};
   1608
   1609static struct clk_branch gcc_gpu_gpll0_clk_src = {
   1610	.halt_check = BRANCH_HALT_SKIP,
   1611	.clkr = {
   1612		.enable_reg = 0x52004,
   1613		.enable_mask = BIT(15),
   1614		.hw.init = &(struct clk_init_data){
   1615			.name = "gcc_gpu_gpll0_clk_src",
   1616			.parent_hws = (const struct clk_hw *[]){
   1617				&gpll0.clkr.hw },
   1618			.num_parents = 1,
   1619			.flags = CLK_SET_RATE_PARENT,
   1620			.ops = &clk_branch2_ops,
   1621		},
   1622	},
   1623};
   1624
   1625static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
   1626	.halt_check = BRANCH_HALT_SKIP,
   1627	.clkr = {
   1628		.enable_reg = 0x52004,
   1629		.enable_mask = BIT(16),
   1630		.hw.init = &(struct clk_init_data){
   1631			.name = "gcc_gpu_gpll0_div_clk_src",
   1632			.parent_hws = (const struct clk_hw *[]){
   1633				&gpll0_out_even.clkr.hw },
   1634			.num_parents = 1,
   1635			.flags = CLK_SET_RATE_PARENT,
   1636			.ops = &clk_branch2_ops,
   1637		},
   1638	},
   1639};
   1640
   1641static struct clk_branch gcc_gpu_iref_clk = {
   1642	.halt_reg = 0x8c010,
   1643	.halt_check = BRANCH_HALT,
   1644	.clkr = {
   1645		.enable_reg = 0x8c010,
   1646		.enable_mask = BIT(0),
   1647		.hw.init = &(struct clk_init_data){
   1648			.name = "gcc_gpu_iref_clk",
   1649			.ops = &clk_branch2_ops,
   1650		},
   1651	},
   1652};
   1653
   1654static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
   1655	.halt_reg = 0x7100c,
   1656	.halt_check = BRANCH_VOTED,
   1657	.clkr = {
   1658		.enable_reg = 0x7100c,
   1659		.enable_mask = BIT(0),
   1660		.hw.init = &(struct clk_init_data){
   1661			.name = "gcc_gpu_memnoc_gfx_clk",
   1662			.ops = &clk_branch2_ops,
   1663		},
   1664	},
   1665};
   1666
   1667static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
   1668	.halt_reg = 0x71018,
   1669	.halt_check = BRANCH_HALT,
   1670	.clkr = {
   1671		.enable_reg = 0x71018,
   1672		.enable_mask = BIT(0),
   1673		.hw.init = &(struct clk_init_data){
   1674			.name = "gcc_gpu_snoc_dvm_gfx_clk",
   1675			.ops = &clk_branch2_ops,
   1676		},
   1677	},
   1678};
   1679
   1680static struct clk_branch gcc_npu_at_clk = {
   1681	.halt_reg = 0x4d010,
   1682	.halt_check = BRANCH_VOTED,
   1683	.clkr = {
   1684		.enable_reg = 0x4d010,
   1685		.enable_mask = BIT(0),
   1686		.hw.init = &(struct clk_init_data){
   1687			.name = "gcc_npu_at_clk",
   1688			.ops = &clk_branch2_ops,
   1689		},
   1690	},
   1691};
   1692
   1693static struct clk_branch gcc_npu_axi_clk = {
   1694	.halt_reg = 0x4d008,
   1695	.halt_check = BRANCH_VOTED,
   1696	.clkr = {
   1697		.enable_reg = 0x4d008,
   1698		.enable_mask = BIT(0),
   1699		.hw.init = &(struct clk_init_data){
   1700			.name = "gcc_npu_axi_clk",
   1701			.ops = &clk_branch2_ops,
   1702		},
   1703	},
   1704};
   1705
   1706static struct clk_branch gcc_npu_cfg_ahb_clk = {
   1707	.halt_reg = 0x4d004,
   1708	.halt_check = BRANCH_HALT,
   1709	.hwcg_reg = 0x4d004,
   1710	.hwcg_bit = 1,
   1711	.clkr = {
   1712		.enable_reg = 0x4d004,
   1713		.enable_mask = BIT(0),
   1714		.hw.init = &(struct clk_init_data){
   1715			.name = "gcc_npu_cfg_ahb_clk",
   1716			 /* required for npu */
   1717			.flags = CLK_IS_CRITICAL,
   1718			.ops = &clk_branch2_ops,
   1719		},
   1720	},
   1721};
   1722
   1723static struct clk_branch gcc_npu_gpll0_clk_src = {
   1724	.halt_check = BRANCH_HALT_SKIP,
   1725	.clkr = {
   1726		.enable_reg = 0x52004,
   1727		.enable_mask = BIT(18),
   1728		.hw.init = &(struct clk_init_data){
   1729			.name = "gcc_npu_gpll0_clk_src",
   1730			.parent_hws = (const struct clk_hw *[]){
   1731				&gpll0.clkr.hw },
   1732			.num_parents = 1,
   1733			.flags = CLK_SET_RATE_PARENT,
   1734			.ops = &clk_branch2_ops,
   1735		},
   1736	},
   1737};
   1738
   1739static struct clk_branch gcc_npu_gpll0_div_clk_src = {
   1740	.halt_check = BRANCH_HALT_SKIP,
   1741	.clkr = {
   1742		.enable_reg = 0x52004,
   1743		.enable_mask = BIT(19),
   1744		.hw.init = &(struct clk_init_data){
   1745			.name = "gcc_npu_gpll0_div_clk_src",
   1746			.parent_hws = (const struct clk_hw *[]){
   1747				&gpll0_out_even.clkr.hw },
   1748			.num_parents = 1,
   1749			.flags = CLK_SET_RATE_PARENT,
   1750			.ops = &clk_branch2_ops,
   1751		},
   1752	},
   1753};
   1754
   1755static struct clk_branch gcc_npu_trig_clk = {
   1756	.halt_reg = 0x4d00c,
   1757	.halt_check = BRANCH_VOTED,
   1758	.clkr = {
   1759		.enable_reg = 0x4d00c,
   1760		.enable_mask = BIT(0),
   1761		.hw.init = &(struct clk_init_data){
   1762			.name = "gcc_npu_trig_clk",
   1763			.ops = &clk_branch2_ops,
   1764		},
   1765	},
   1766};
   1767
   1768static struct clk_branch gcc_pcie0_phy_refgen_clk = {
   1769	.halt_reg = 0x6f02c,
   1770	.halt_check = BRANCH_HALT,
   1771	.clkr = {
   1772		.enable_reg = 0x6f02c,
   1773		.enable_mask = BIT(0),
   1774		.hw.init = &(struct clk_init_data){
   1775			.name = "gcc_pcie0_phy_refgen_clk",
   1776			.parent_hws = (const struct clk_hw *[]){
   1777				      &gcc_pcie_phy_refgen_clk_src.clkr.hw },
   1778			.num_parents = 1,
   1779			.flags = CLK_SET_RATE_PARENT,
   1780			.ops = &clk_branch2_ops,
   1781		},
   1782	},
   1783};
   1784
   1785static struct clk_branch gcc_pcie1_phy_refgen_clk = {
   1786	.halt_reg = 0x6f030,
   1787	.halt_check = BRANCH_HALT,
   1788	.clkr = {
   1789		.enable_reg = 0x6f030,
   1790		.enable_mask = BIT(0),
   1791		.hw.init = &(struct clk_init_data){
   1792			.name = "gcc_pcie1_phy_refgen_clk",
   1793			.parent_hws = (const struct clk_hw *[]){
   1794				      &gcc_pcie_phy_refgen_clk_src.clkr.hw },
   1795			.num_parents = 1,
   1796			.flags = CLK_SET_RATE_PARENT,
   1797			.ops = &clk_branch2_ops,
   1798		},
   1799	},
   1800};
   1801
   1802static struct clk_branch gcc_pcie_0_aux_clk = {
   1803	.halt_reg = 0x6b020,
   1804	.halt_check = BRANCH_HALT_VOTED,
   1805	.clkr = {
   1806		.enable_reg = 0x5200c,
   1807		.enable_mask = BIT(3),
   1808		.hw.init = &(struct clk_init_data){
   1809			.name = "gcc_pcie_0_aux_clk",
   1810			.parent_hws = (const struct clk_hw *[]){
   1811				      &gcc_pcie_0_aux_clk_src.clkr.hw },
   1812			.num_parents = 1,
   1813			.flags = CLK_SET_RATE_PARENT,
   1814			.ops = &clk_branch2_ops,
   1815		},
   1816	},
   1817};
   1818
   1819static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
   1820	.halt_reg = 0x6b01c,
   1821	.halt_check = BRANCH_HALT_VOTED,
   1822	.hwcg_reg = 0x6b01c,
   1823	.hwcg_bit = 1,
   1824	.clkr = {
   1825		.enable_reg = 0x5200c,
   1826		.enable_mask = BIT(2),
   1827		.hw.init = &(struct clk_init_data){
   1828			.name = "gcc_pcie_0_cfg_ahb_clk",
   1829			.ops = &clk_branch2_ops,
   1830		},
   1831	},
   1832};
   1833
   1834static struct clk_branch gcc_pcie_0_clkref_clk = {
   1835	.halt_reg = 0x8c00c,
   1836	.halt_check = BRANCH_HALT,
   1837	.clkr = {
   1838		.enable_reg = 0x8c00c,
   1839		.enable_mask = BIT(0),
   1840		.hw.init = &(struct clk_init_data){
   1841			.name = "gcc_pcie_0_clkref_clk",
   1842			.ops = &clk_branch2_ops,
   1843		},
   1844	},
   1845};
   1846
   1847static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
   1848	.halt_reg = 0x6b018,
   1849	.halt_check = BRANCH_HALT_VOTED,
   1850	.clkr = {
   1851		.enable_reg = 0x5200c,
   1852		.enable_mask = BIT(1),
   1853		.hw.init = &(struct clk_init_data){
   1854			.name = "gcc_pcie_0_mstr_axi_clk",
   1855			.ops = &clk_branch2_ops,
   1856		},
   1857	},
   1858};
   1859
   1860/* Clock ON depends on external parent 'PIPE' clock, so dont poll */
   1861static struct clk_branch gcc_pcie_0_pipe_clk = {
   1862	.halt_reg = 0x6b024,
   1863	.halt_check = BRANCH_HALT_DELAY,
   1864	.clkr = {
   1865		.enable_reg = 0x5200c,
   1866		.enable_mask = BIT(4),
   1867		.hw.init = &(struct clk_init_data){
   1868			.name = "gcc_pcie_0_pipe_clk",
   1869			.ops = &clk_branch2_ops,
   1870		},
   1871	},
   1872};
   1873
   1874static struct clk_branch gcc_pcie_0_slv_axi_clk = {
   1875	.halt_reg = 0x6b014,
   1876	.halt_check = BRANCH_HALT_VOTED,
   1877	.hwcg_reg = 0x6b014,
   1878	.hwcg_bit = 1,
   1879	.clkr = {
   1880		.enable_reg = 0x5200c,
   1881		.enable_mask = BIT(0),
   1882		.hw.init = &(struct clk_init_data){
   1883			.name = "gcc_pcie_0_slv_axi_clk",
   1884			.ops = &clk_branch2_ops,
   1885		},
   1886	},
   1887};
   1888
   1889static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
   1890	.halt_reg = 0x6b010,
   1891	.halt_check = BRANCH_HALT_VOTED,
   1892	.clkr = {
   1893		.enable_reg = 0x5200c,
   1894		.enable_mask = BIT(5),
   1895		.hw.init = &(struct clk_init_data){
   1896			.name = "gcc_pcie_0_slv_q2a_axi_clk",
   1897			.ops = &clk_branch2_ops,
   1898		},
   1899	},
   1900};
   1901
   1902static struct clk_branch gcc_pcie_1_aux_clk = {
   1903	.halt_reg = 0x8d020,
   1904	.halt_check = BRANCH_HALT_VOTED,
   1905	.clkr = {
   1906		.enable_reg = 0x52004,
   1907		.enable_mask = BIT(29),
   1908		.hw.init = &(struct clk_init_data){
   1909			.name = "gcc_pcie_1_aux_clk",
   1910			.parent_hws = (const struct clk_hw *[]){
   1911				      &gcc_pcie_1_aux_clk_src.clkr.hw },
   1912			.num_parents = 1,
   1913			.flags = CLK_SET_RATE_PARENT,
   1914			.ops = &clk_branch2_ops,
   1915		},
   1916	},
   1917};
   1918
   1919static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
   1920	.halt_reg = 0x8d01c,
   1921	.halt_check = BRANCH_HALT_VOTED,
   1922	.hwcg_reg = 0x8d01c,
   1923	.hwcg_bit = 1,
   1924	.clkr = {
   1925		.enable_reg = 0x52004,
   1926		.enable_mask = BIT(28),
   1927		.hw.init = &(struct clk_init_data){
   1928			.name = "gcc_pcie_1_cfg_ahb_clk",
   1929			.ops = &clk_branch2_ops,
   1930		},
   1931	},
   1932};
   1933
   1934static struct clk_branch gcc_pcie_1_clkref_clk = {
   1935	.halt_reg = 0x8c02c,
   1936	.halt_check = BRANCH_HALT,
   1937	.clkr = {
   1938		.enable_reg = 0x8c02c,
   1939		.enable_mask = BIT(0),
   1940		.hw.init = &(struct clk_init_data){
   1941			.name = "gcc_pcie_1_clkref_clk",
   1942			.ops = &clk_branch2_ops,
   1943		},
   1944	},
   1945};
   1946
   1947static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
   1948	.halt_reg = 0x8d018,
   1949	.halt_check = BRANCH_HALT_VOTED,
   1950	.clkr = {
   1951		.enable_reg = 0x52004,
   1952		.enable_mask = BIT(27),
   1953		.hw.init = &(struct clk_init_data){
   1954			.name = "gcc_pcie_1_mstr_axi_clk",
   1955			.ops = &clk_branch2_ops,
   1956		},
   1957	},
   1958};
   1959
   1960/* Clock ON depends on external parent 'PIPE' clock, so dont poll */
   1961static struct clk_branch gcc_pcie_1_pipe_clk = {
   1962	.halt_reg = 0x8d024,
   1963	.halt_check = BRANCH_HALT_DELAY,
   1964	.clkr = {
   1965		.enable_reg = 0x52004,
   1966		.enable_mask = BIT(30),
   1967		.hw.init = &(struct clk_init_data){
   1968			.name = "gcc_pcie_1_pipe_clk",
   1969			.ops = &clk_branch2_ops,
   1970		},
   1971	},
   1972};
   1973
   1974static struct clk_branch gcc_pcie_1_slv_axi_clk = {
   1975	.halt_reg = 0x8d014,
   1976	.halt_check = BRANCH_HALT_VOTED,
   1977	.hwcg_reg = 0x8d014,
   1978	.hwcg_bit = 1,
   1979	.clkr = {
   1980		.enable_reg = 0x52004,
   1981		.enable_mask = BIT(26),
   1982		.hw.init = &(struct clk_init_data){
   1983			.name = "gcc_pcie_1_slv_axi_clk",
   1984			.ops = &clk_branch2_ops,
   1985		},
   1986	},
   1987};
   1988
   1989static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = {
   1990	.halt_reg = 0x8d010,
   1991	.halt_check = BRANCH_HALT_VOTED,
   1992	.clkr = {
   1993		.enable_reg = 0x52004,
   1994		.enable_mask = BIT(25),
   1995		.hw.init = &(struct clk_init_data){
   1996			.name = "gcc_pcie_1_slv_q2a_axi_clk",
   1997			.ops = &clk_branch2_ops,
   1998		},
   1999	},
   2000};
   2001
   2002static struct clk_branch gcc_pcie_phy_aux_clk = {
   2003	.halt_reg = 0x6f004,
   2004	.halt_check = BRANCH_HALT,
   2005	.clkr = {
   2006		.enable_reg = 0x6f004,
   2007		.enable_mask = BIT(0),
   2008		.hw.init = &(struct clk_init_data){
   2009			.name = "gcc_pcie_phy_aux_clk",
   2010			.parent_hws = (const struct clk_hw *[]){
   2011				      &gcc_pcie_0_aux_clk_src.clkr.hw },
   2012			.num_parents = 1,
   2013			.flags = CLK_SET_RATE_PARENT,
   2014			.ops = &clk_branch2_ops,
   2015		},
   2016	},
   2017};
   2018
   2019static struct clk_branch gcc_pdm2_clk = {
   2020	.halt_reg = 0x3300c,
   2021	.halt_check = BRANCH_HALT,
   2022	.clkr = {
   2023		.enable_reg = 0x3300c,
   2024		.enable_mask = BIT(0),
   2025		.hw.init = &(struct clk_init_data){
   2026			.name = "gcc_pdm2_clk",
   2027			.parent_hws = (const struct clk_hw *[]){
   2028				      &gcc_pdm2_clk_src.clkr.hw },
   2029			.num_parents = 1,
   2030			.flags = CLK_SET_RATE_PARENT,
   2031			.ops = &clk_branch2_ops,
   2032		},
   2033	},
   2034};
   2035
   2036static struct clk_branch gcc_pdm_ahb_clk = {
   2037	.halt_reg = 0x33004,
   2038	.halt_check = BRANCH_HALT,
   2039	.hwcg_reg = 0x33004,
   2040	.hwcg_bit = 1,
   2041	.clkr = {
   2042		.enable_reg = 0x33004,
   2043		.enable_mask = BIT(0),
   2044		.hw.init = &(struct clk_init_data){
   2045			.name = "gcc_pdm_ahb_clk",
   2046			.ops = &clk_branch2_ops,
   2047		},
   2048	},
   2049};
   2050
   2051static struct clk_branch gcc_pdm_xo4_clk = {
   2052	.halt_reg = 0x33008,
   2053	.halt_check = BRANCH_HALT,
   2054	.clkr = {
   2055		.enable_reg = 0x33008,
   2056		.enable_mask = BIT(0),
   2057		.hw.init = &(struct clk_init_data){
   2058			.name = "gcc_pdm_xo4_clk",
   2059			.ops = &clk_branch2_ops,
   2060		},
   2061	},
   2062};
   2063
   2064static struct clk_branch gcc_prng_ahb_clk = {
   2065	.halt_reg = 0x34004,
   2066	.halt_check = BRANCH_HALT_VOTED,
   2067	.clkr = {
   2068		.enable_reg = 0x52004,
   2069		.enable_mask = BIT(13),
   2070		.hw.init = &(struct clk_init_data){
   2071			.name = "gcc_prng_ahb_clk",
   2072			.ops = &clk_branch2_ops,
   2073		},
   2074	},
   2075};
   2076
   2077static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
   2078	.halt_reg = 0xb018,
   2079	.halt_check = BRANCH_HALT,
   2080	.hwcg_reg = 0xb018,
   2081	.hwcg_bit = 1,
   2082	.clkr = {
   2083		.enable_reg = 0xb018,
   2084		.enable_mask = BIT(0),
   2085		.hw.init = &(struct clk_init_data){
   2086			.name = "gcc_qmip_camera_nrt_ahb_clk",
   2087			.ops = &clk_branch2_ops,
   2088		},
   2089	},
   2090};
   2091
   2092static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
   2093	.halt_reg = 0xb01c,
   2094	.halt_check = BRANCH_HALT,
   2095	.hwcg_reg = 0xb01c,
   2096	.hwcg_bit = 1,
   2097	.clkr = {
   2098		.enable_reg = 0xb01c,
   2099		.enable_mask = BIT(0),
   2100		.hw.init = &(struct clk_init_data){
   2101			.name = "gcc_qmip_camera_rt_ahb_clk",
   2102			.ops = &clk_branch2_ops,
   2103		},
   2104	},
   2105};
   2106
   2107static struct clk_branch gcc_qmip_disp_ahb_clk = {
   2108	.halt_reg = 0xb020,
   2109	.halt_check = BRANCH_HALT,
   2110	.hwcg_reg = 0xb020,
   2111	.hwcg_bit = 1,
   2112	.clkr = {
   2113		.enable_reg = 0xb020,
   2114		.enable_mask = BIT(0),
   2115		.hw.init = &(struct clk_init_data){
   2116			.name = "gcc_qmip_disp_ahb_clk",
   2117			.ops = &clk_branch2_ops,
   2118		},
   2119	},
   2120};
   2121
   2122static struct clk_branch gcc_qmip_video_cvp_ahb_clk = {
   2123	.halt_reg = 0xb010,
   2124	.halt_check = BRANCH_HALT,
   2125	.hwcg_reg = 0xb010,
   2126	.hwcg_bit = 1,
   2127	.clkr = {
   2128		.enable_reg = 0xb010,
   2129		.enable_mask = BIT(0),
   2130		.hw.init = &(struct clk_init_data){
   2131			.name = "gcc_qmip_video_cvp_ahb_clk",
   2132			.ops = &clk_branch2_ops,
   2133		},
   2134	},
   2135};
   2136
   2137static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
   2138	.halt_reg = 0xb014,
   2139	.halt_check = BRANCH_HALT,
   2140	.hwcg_reg = 0xb014,
   2141	.hwcg_bit = 1,
   2142	.clkr = {
   2143		.enable_reg = 0xb014,
   2144		.enable_mask = BIT(0),
   2145		.hw.init = &(struct clk_init_data){
   2146			.name = "gcc_qmip_video_vcodec_ahb_clk",
   2147			.ops = &clk_branch2_ops,
   2148		},
   2149	},
   2150};
   2151
   2152static struct clk_branch gcc_qspi_cnoc_periph_ahb_clk = {
   2153	.halt_reg = 0x4b000,
   2154	.halt_check = BRANCH_HALT,
   2155	.clkr = {
   2156		.enable_reg = 0x4b000,
   2157		.enable_mask = BIT(0),
   2158		.hw.init = &(struct clk_init_data){
   2159			.name = "gcc_qspi_cnoc_periph_ahb_clk",
   2160			.ops = &clk_branch2_ops,
   2161		},
   2162	},
   2163};
   2164
   2165static struct clk_branch gcc_qspi_core_clk = {
   2166	.halt_reg = 0x4b004,
   2167	.halt_check = BRANCH_HALT,
   2168	.clkr = {
   2169		.enable_reg = 0x4b004,
   2170		.enable_mask = BIT(0),
   2171		.hw.init = &(struct clk_init_data){
   2172			.name = "gcc_qspi_core_clk",
   2173			.parent_hws = (const struct clk_hw *[]){
   2174				      &gcc_qspi_core_clk_src.clkr.hw },
   2175			.num_parents = 1,
   2176			.flags = CLK_SET_RATE_PARENT,
   2177			.ops = &clk_branch2_ops,
   2178		},
   2179	},
   2180};
   2181
   2182static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
   2183	.halt_reg = 0x17144,
   2184	.halt_check = BRANCH_HALT_VOTED,
   2185	.clkr = {
   2186		.enable_reg = 0x5200c,
   2187		.enable_mask = BIT(10),
   2188		.hw.init = &(struct clk_init_data){
   2189			.name = "gcc_qupv3_wrap0_s0_clk",
   2190			.parent_hws = (const struct clk_hw *[]){
   2191				      &gcc_qupv3_wrap0_s0_clk_src.clkr.hw },
   2192			.num_parents = 1,
   2193			.flags = CLK_SET_RATE_PARENT,
   2194			.ops = &clk_branch2_ops,
   2195		},
   2196	},
   2197};
   2198
   2199static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
   2200	.halt_reg = 0x17274,
   2201	.halt_check = BRANCH_HALT_VOTED,
   2202	.clkr = {
   2203		.enable_reg = 0x5200c,
   2204		.enable_mask = BIT(11),
   2205		.hw.init = &(struct clk_init_data){
   2206			.name = "gcc_qupv3_wrap0_s1_clk",
   2207			.parent_hws = (const struct clk_hw *[]){
   2208				      &gcc_qupv3_wrap0_s1_clk_src.clkr.hw },
   2209			.num_parents = 1,
   2210			.flags = CLK_SET_RATE_PARENT,
   2211			.ops = &clk_branch2_ops,
   2212		},
   2213	},
   2214};
   2215
   2216static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
   2217	.halt_reg = 0x173a4,
   2218	.halt_check = BRANCH_HALT_VOTED,
   2219	.clkr = {
   2220		.enable_reg = 0x5200c,
   2221		.enable_mask = BIT(12),
   2222		.hw.init = &(struct clk_init_data){
   2223			.name = "gcc_qupv3_wrap0_s2_clk",
   2224			.parent_hws = (const struct clk_hw *[]){
   2225				      &gcc_qupv3_wrap0_s2_clk_src.clkr.hw },
   2226			.num_parents = 1,
   2227			.flags = CLK_SET_RATE_PARENT,
   2228			.ops = &clk_branch2_ops,
   2229		},
   2230	},
   2231};
   2232
   2233static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
   2234	.halt_reg = 0x174d4,
   2235	.halt_check = BRANCH_HALT_VOTED,
   2236	.clkr = {
   2237		.enable_reg = 0x5200c,
   2238		.enable_mask = BIT(13),
   2239		.hw.init = &(struct clk_init_data){
   2240			.name = "gcc_qupv3_wrap0_s3_clk",
   2241			.parent_hws = (const struct clk_hw *[]){
   2242				      &gcc_qupv3_wrap0_s3_clk_src.clkr.hw },
   2243			.num_parents = 1,
   2244			.flags = CLK_SET_RATE_PARENT,
   2245			.ops = &clk_branch2_ops,
   2246		},
   2247	},
   2248};
   2249
   2250static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
   2251	.halt_reg = 0x17604,
   2252	.halt_check = BRANCH_HALT_VOTED,
   2253	.clkr = {
   2254		.enable_reg = 0x5200c,
   2255		.enable_mask = BIT(14),
   2256		.hw.init = &(struct clk_init_data){
   2257			.name = "gcc_qupv3_wrap0_s4_clk",
   2258			.parent_hws = (const struct clk_hw *[]){
   2259				      &gcc_qupv3_wrap0_s4_clk_src.clkr.hw },
   2260			.num_parents = 1,
   2261			.flags = CLK_SET_RATE_PARENT,
   2262			.ops = &clk_branch2_ops,
   2263		},
   2264	},
   2265};
   2266
   2267static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
   2268	.halt_reg = 0x17734,
   2269	.halt_check = BRANCH_HALT_VOTED,
   2270	.clkr = {
   2271		.enable_reg = 0x5200c,
   2272		.enable_mask = BIT(15),
   2273		.hw.init = &(struct clk_init_data){
   2274			.name = "gcc_qupv3_wrap0_s5_clk",
   2275			.parent_hws = (const struct clk_hw *[]){
   2276				      &gcc_qupv3_wrap0_s5_clk_src.clkr.hw },
   2277			.num_parents = 1,
   2278			.flags = CLK_SET_RATE_PARENT,
   2279			.ops = &clk_branch2_ops,
   2280		},
   2281	},
   2282};
   2283
   2284static struct clk_branch gcc_qupv3_wrap0_s6_clk = {
   2285	.halt_reg = 0x17864,
   2286	.halt_check = BRANCH_HALT_VOTED,
   2287	.clkr = {
   2288		.enable_reg = 0x5200c,
   2289		.enable_mask = BIT(16),
   2290		.hw.init = &(struct clk_init_data){
   2291			.name = "gcc_qupv3_wrap0_s6_clk",
   2292			.parent_hws = (const struct clk_hw *[]){
   2293				      &gcc_qupv3_wrap0_s6_clk_src.clkr.hw },
   2294			.num_parents = 1,
   2295			.flags = CLK_SET_RATE_PARENT,
   2296			.ops = &clk_branch2_ops,
   2297		},
   2298	},
   2299};
   2300
   2301static struct clk_branch gcc_qupv3_wrap0_s7_clk = {
   2302	.halt_reg = 0x17994,
   2303	.halt_check = BRANCH_HALT_VOTED,
   2304	.clkr = {
   2305		.enable_reg = 0x5200c,
   2306		.enable_mask = BIT(17),
   2307		.hw.init = &(struct clk_init_data){
   2308			.name = "gcc_qupv3_wrap0_s7_clk",
   2309			.parent_hws = (const struct clk_hw *[]){
   2310				      &gcc_qupv3_wrap0_s7_clk_src.clkr.hw },
   2311			.num_parents = 1,
   2312			.flags = CLK_SET_RATE_PARENT,
   2313			.ops = &clk_branch2_ops,
   2314		},
   2315	},
   2316};
   2317
   2318static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
   2319	.halt_reg = 0x18144,
   2320	.halt_check = BRANCH_HALT_VOTED,
   2321	.clkr = {
   2322		.enable_reg = 0x5200c,
   2323		.enable_mask = BIT(22),
   2324		.hw.init = &(struct clk_init_data){
   2325			.name = "gcc_qupv3_wrap1_s0_clk",
   2326			.parent_hws = (const struct clk_hw *[]){
   2327				      &gcc_qupv3_wrap1_s0_clk_src.clkr.hw },
   2328			.num_parents = 1,
   2329			.flags = CLK_SET_RATE_PARENT,
   2330			.ops = &clk_branch2_ops,
   2331		},
   2332	},
   2333};
   2334
   2335static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
   2336	.halt_reg = 0x18274,
   2337	.halt_check = BRANCH_HALT_VOTED,
   2338	.clkr = {
   2339		.enable_reg = 0x5200c,
   2340		.enable_mask = BIT(23),
   2341		.hw.init = &(struct clk_init_data){
   2342			.name = "gcc_qupv3_wrap1_s1_clk",
   2343			.parent_hws = (const struct clk_hw *[]){
   2344				      &gcc_qupv3_wrap1_s1_clk_src.clkr.hw },
   2345			.num_parents = 1,
   2346			.flags = CLK_SET_RATE_PARENT,
   2347			.ops = &clk_branch2_ops,
   2348		},
   2349	},
   2350};
   2351
   2352static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
   2353	.halt_reg = 0x183a4,
   2354	.halt_check = BRANCH_HALT_VOTED,
   2355	.clkr = {
   2356		.enable_reg = 0x5200c,
   2357		.enable_mask = BIT(24),
   2358		.hw.init = &(struct clk_init_data){
   2359			.name = "gcc_qupv3_wrap1_s2_clk",
   2360			.parent_hws = (const struct clk_hw *[]){
   2361				      &gcc_qupv3_wrap1_s2_clk_src.clkr.hw },
   2362			.num_parents = 1,
   2363			.flags = CLK_SET_RATE_PARENT,
   2364			.ops = &clk_branch2_ops,
   2365		},
   2366	},
   2367};
   2368
   2369static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
   2370	.halt_reg = 0x184d4,
   2371	.halt_check = BRANCH_HALT_VOTED,
   2372	.clkr = {
   2373		.enable_reg = 0x5200c,
   2374		.enable_mask = BIT(25),
   2375		.hw.init = &(struct clk_init_data){
   2376			.name = "gcc_qupv3_wrap1_s3_clk",
   2377			.parent_hws = (const struct clk_hw *[]){
   2378				      &gcc_qupv3_wrap1_s3_clk_src.clkr.hw },
   2379			.num_parents = 1,
   2380			.flags = CLK_SET_RATE_PARENT,
   2381			.ops = &clk_branch2_ops,
   2382		},
   2383	},
   2384};
   2385
   2386static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
   2387	.halt_reg = 0x18604,
   2388	.halt_check = BRANCH_HALT_VOTED,
   2389	.clkr = {
   2390		.enable_reg = 0x5200c,
   2391		.enable_mask = BIT(26),
   2392		.hw.init = &(struct clk_init_data){
   2393			.name = "gcc_qupv3_wrap1_s4_clk",
   2394			.parent_hws = (const struct clk_hw *[]){
   2395				      &gcc_qupv3_wrap1_s4_clk_src.clkr.hw },
   2396			.num_parents = 1,
   2397			.flags = CLK_SET_RATE_PARENT,
   2398			.ops = &clk_branch2_ops,
   2399		},
   2400	},
   2401};
   2402
   2403static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
   2404	.halt_reg = 0x18734,
   2405	.halt_check = BRANCH_HALT_VOTED,
   2406	.clkr = {
   2407		.enable_reg = 0x5200c,
   2408		.enable_mask = BIT(27),
   2409		.hw.init = &(struct clk_init_data){
   2410			.name = "gcc_qupv3_wrap1_s5_clk",
   2411			.parent_hws = (const struct clk_hw *[]){
   2412				      &gcc_qupv3_wrap1_s5_clk_src.clkr.hw },
   2413			.num_parents = 1,
   2414			.flags = CLK_SET_RATE_PARENT,
   2415			.ops = &clk_branch2_ops,
   2416		},
   2417	},
   2418};
   2419
   2420static struct clk_branch gcc_qupv3_wrap2_s0_clk = {
   2421	.halt_reg = 0x1e144,
   2422	.halt_check = BRANCH_HALT_VOTED,
   2423	.clkr = {
   2424		.enable_reg = 0x52014,
   2425		.enable_mask = BIT(4),
   2426		.hw.init = &(struct clk_init_data){
   2427			.name = "gcc_qupv3_wrap2_s0_clk",
   2428			.parent_hws = (const struct clk_hw *[]){
   2429				      &gcc_qupv3_wrap2_s0_clk_src.clkr.hw },
   2430			.num_parents = 1,
   2431			.flags = CLK_SET_RATE_PARENT,
   2432			.ops = &clk_branch2_ops,
   2433		},
   2434	},
   2435};
   2436
   2437static struct clk_branch gcc_qupv3_wrap2_s1_clk = {
   2438	.halt_reg = 0x1e274,
   2439	.halt_check = BRANCH_HALT_VOTED,
   2440	.clkr = {
   2441		.enable_reg = 0x52014,
   2442		.enable_mask = BIT(5),
   2443		.hw.init = &(struct clk_init_data){
   2444			.name = "gcc_qupv3_wrap2_s1_clk",
   2445			.parent_hws = (const struct clk_hw *[]){
   2446				      &gcc_qupv3_wrap2_s1_clk_src.clkr.hw },
   2447			.num_parents = 1,
   2448			.flags = CLK_SET_RATE_PARENT,
   2449			.ops = &clk_branch2_ops,
   2450		},
   2451	},
   2452};
   2453
   2454static struct clk_branch gcc_qupv3_wrap2_s2_clk = {
   2455	.halt_reg = 0x1e3a4,
   2456	.halt_check = BRANCH_HALT_VOTED,
   2457	.clkr = {
   2458		.enable_reg = 0x52014,
   2459		.enable_mask = BIT(6),
   2460		.hw.init = &(struct clk_init_data){
   2461			.name = "gcc_qupv3_wrap2_s2_clk",
   2462			.parent_hws = (const struct clk_hw *[]){
   2463				      &gcc_qupv3_wrap2_s2_clk_src.clkr.hw },
   2464			.num_parents = 1,
   2465			.flags = CLK_SET_RATE_PARENT,
   2466			.ops = &clk_branch2_ops,
   2467		},
   2468	},
   2469};
   2470
   2471static struct clk_branch gcc_qupv3_wrap2_s3_clk = {
   2472	.halt_reg = 0x1e4d4,
   2473	.halt_check = BRANCH_HALT_VOTED,
   2474	.clkr = {
   2475		.enable_reg = 0x52014,
   2476		.enable_mask = BIT(7),
   2477		.hw.init = &(struct clk_init_data){
   2478			.name = "gcc_qupv3_wrap2_s3_clk",
   2479			.parent_hws = (const struct clk_hw *[]){
   2480				      &gcc_qupv3_wrap2_s3_clk_src.clkr.hw },
   2481			.num_parents = 1,
   2482			.flags = CLK_SET_RATE_PARENT,
   2483			.ops = &clk_branch2_ops,
   2484		},
   2485	},
   2486};
   2487
   2488static struct clk_branch gcc_qupv3_wrap2_s4_clk = {
   2489	.halt_reg = 0x1e604,
   2490	.halt_check = BRANCH_HALT_VOTED,
   2491	.clkr = {
   2492		.enable_reg = 0x52014,
   2493		.enable_mask = BIT(8),
   2494		.hw.init = &(struct clk_init_data){
   2495			.name = "gcc_qupv3_wrap2_s4_clk",
   2496			.parent_hws = (const struct clk_hw *[]){
   2497				      &gcc_qupv3_wrap2_s4_clk_src.clkr.hw },
   2498			.num_parents = 1,
   2499			.flags = CLK_SET_RATE_PARENT,
   2500			.ops = &clk_branch2_ops,
   2501		},
   2502	},
   2503};
   2504
   2505static struct clk_branch gcc_qupv3_wrap2_s5_clk = {
   2506	.halt_reg = 0x1e734,
   2507	.halt_check = BRANCH_HALT_VOTED,
   2508	.clkr = {
   2509		.enable_reg = 0x52014,
   2510		.enable_mask = BIT(9),
   2511		.hw.init = &(struct clk_init_data){
   2512			.name = "gcc_qupv3_wrap2_s5_clk",
   2513			.parent_hws = (const struct clk_hw *[]){
   2514				      &gcc_qupv3_wrap2_s5_clk_src.clkr.hw },
   2515			.num_parents = 1,
   2516			.flags = CLK_SET_RATE_PARENT,
   2517			.ops = &clk_branch2_ops,
   2518		},
   2519	},
   2520};
   2521
   2522static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
   2523	.halt_reg = 0x17004,
   2524	.halt_check = BRANCH_HALT_VOTED,
   2525	.clkr = {
   2526		.enable_reg = 0x5200c,
   2527		.enable_mask = BIT(6),
   2528		.hw.init = &(struct clk_init_data){
   2529			.name = "gcc_qupv3_wrap_0_m_ahb_clk",
   2530			.ops = &clk_branch2_ops,
   2531		},
   2532	},
   2533};
   2534
   2535static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
   2536	.halt_reg = 0x17008,
   2537	.halt_check = BRANCH_HALT_VOTED,
   2538	.hwcg_reg = 0x17008,
   2539	.hwcg_bit = 1,
   2540	.clkr = {
   2541		.enable_reg = 0x5200c,
   2542		.enable_mask = BIT(7),
   2543		.hw.init = &(struct clk_init_data){
   2544			.name = "gcc_qupv3_wrap_0_s_ahb_clk",
   2545			.ops = &clk_branch2_ops,
   2546		},
   2547	},
   2548};
   2549
   2550static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
   2551	.halt_reg = 0x18004,
   2552	.halt_check = BRANCH_HALT_VOTED,
   2553	.clkr = {
   2554		.enable_reg = 0x5200c,
   2555		.enable_mask = BIT(20),
   2556		.hw.init = &(struct clk_init_data){
   2557			.name = "gcc_qupv3_wrap_1_m_ahb_clk",
   2558			.ops = &clk_branch2_ops,
   2559		},
   2560	},
   2561};
   2562
   2563static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
   2564	.halt_reg = 0x18008,
   2565	.halt_check = BRANCH_HALT_VOTED,
   2566	.hwcg_reg = 0x18008,
   2567	.hwcg_bit = 1,
   2568	.clkr = {
   2569		.enable_reg = 0x5200c,
   2570		.enable_mask = BIT(21),
   2571		.hw.init = &(struct clk_init_data){
   2572			.name = "gcc_qupv3_wrap_1_s_ahb_clk",
   2573			.ops = &clk_branch2_ops,
   2574		},
   2575	},
   2576};
   2577
   2578static struct clk_branch gcc_qupv3_wrap_2_m_ahb_clk = {
   2579	.halt_reg = 0x1e004,
   2580	.halt_check = BRANCH_HALT_VOTED,
   2581	.clkr = {
   2582		.enable_reg = 0x52014,
   2583		.enable_mask = BIT(2),
   2584		.hw.init = &(struct clk_init_data){
   2585			.name = "gcc_qupv3_wrap_2_m_ahb_clk",
   2586			.ops = &clk_branch2_ops,
   2587		},
   2588	},
   2589};
   2590
   2591static struct clk_branch gcc_qupv3_wrap_2_s_ahb_clk = {
   2592	.halt_reg = 0x1e008,
   2593	.halt_check = BRANCH_HALT_VOTED,
   2594	.hwcg_reg = 0x1e008,
   2595	.hwcg_bit = 1,
   2596	.clkr = {
   2597		.enable_reg = 0x52014,
   2598		.enable_mask = BIT(1),
   2599		.hw.init = &(struct clk_init_data){
   2600			.name = "gcc_qupv3_wrap_2_s_ahb_clk",
   2601			.ops = &clk_branch2_ops,
   2602		},
   2603	},
   2604};
   2605
   2606static struct clk_branch gcc_sdcc2_ahb_clk = {
   2607	.halt_reg = 0x14008,
   2608	.halt_check = BRANCH_HALT,
   2609	.clkr = {
   2610		.enable_reg = 0x14008,
   2611		.enable_mask = BIT(0),
   2612		.hw.init = &(struct clk_init_data){
   2613			.name = "gcc_sdcc2_ahb_clk",
   2614			.ops = &clk_branch2_ops,
   2615		},
   2616	},
   2617};
   2618
   2619static struct clk_branch gcc_sdcc2_apps_clk = {
   2620	.halt_reg = 0x14004,
   2621	.halt_check = BRANCH_HALT,
   2622	.clkr = {
   2623		.enable_reg = 0x14004,
   2624		.enable_mask = BIT(0),
   2625		.hw.init = &(struct clk_init_data){
   2626			.name = "gcc_sdcc2_apps_clk",
   2627			.parent_hws = (const struct clk_hw *[]){
   2628				      &gcc_sdcc2_apps_clk_src.clkr.hw },
   2629			.num_parents = 1,
   2630			.flags = CLK_SET_RATE_PARENT,
   2631			.ops = &clk_branch2_ops,
   2632		},
   2633	},
   2634};
   2635
   2636static struct clk_branch gcc_sdcc4_ahb_clk = {
   2637	.halt_reg = 0x16008,
   2638	.halt_check = BRANCH_HALT,
   2639	.clkr = {
   2640		.enable_reg = 0x16008,
   2641		.enable_mask = BIT(0),
   2642		.hw.init = &(struct clk_init_data){
   2643			.name = "gcc_sdcc4_ahb_clk",
   2644			.ops = &clk_branch2_ops,
   2645		},
   2646	},
   2647};
   2648
   2649static struct clk_branch gcc_sdcc4_apps_clk = {
   2650	.halt_reg = 0x16004,
   2651	.halt_check = BRANCH_HALT,
   2652	.clkr = {
   2653		.enable_reg = 0x16004,
   2654		.enable_mask = BIT(0),
   2655		.hw.init = &(struct clk_init_data){
   2656			.name = "gcc_sdcc4_apps_clk",
   2657			.parent_hws = (const struct clk_hw *[]){
   2658				      &gcc_sdcc4_apps_clk_src.clkr.hw },
   2659			.num_parents = 1,
   2660			.flags = CLK_SET_RATE_PARENT,
   2661			.ops = &clk_branch2_ops,
   2662		},
   2663	},
   2664};
   2665
   2666static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {
   2667	.halt_reg = 0x4819c,
   2668	.halt_check = BRANCH_HALT_VOTED,
   2669	.clkr = {
   2670		.enable_reg = 0x52004,
   2671		.enable_mask = BIT(0),
   2672		.hw.init = &(struct clk_init_data){
   2673			.name = "gcc_sys_noc_cpuss_ahb_clk",
   2674			.parent_hws = (const struct clk_hw *[]){
   2675				      &gcc_cpuss_ahb_clk_src.clkr.hw },
   2676			.num_parents = 1,
   2677			/* required for cpuss */
   2678			.flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
   2679			.ops = &clk_branch2_ops,
   2680		},
   2681	},
   2682};
   2683
   2684static struct clk_branch gcc_tsif_ahb_clk = {
   2685	.halt_reg = 0x36004,
   2686	.halt_check = BRANCH_HALT,
   2687	.clkr = {
   2688		.enable_reg = 0x36004,
   2689		.enable_mask = BIT(0),
   2690		.hw.init = &(struct clk_init_data){
   2691			.name = "gcc_tsif_ahb_clk",
   2692			.ops = &clk_branch2_ops,
   2693		},
   2694	},
   2695};
   2696
   2697static struct clk_branch gcc_tsif_inactivity_timers_clk = {
   2698	.halt_reg = 0x3600c,
   2699	.halt_check = BRANCH_HALT,
   2700	.clkr = {
   2701		.enable_reg = 0x3600c,
   2702		.enable_mask = BIT(0),
   2703		.hw.init = &(struct clk_init_data){
   2704			.name = "gcc_tsif_inactivity_timers_clk",
   2705			.ops = &clk_branch2_ops,
   2706		},
   2707	},
   2708};
   2709
   2710static struct clk_branch gcc_tsif_ref_clk = {
   2711	.halt_reg = 0x36008,
   2712	.halt_check = BRANCH_HALT,
   2713	.clkr = {
   2714		.enable_reg = 0x36008,
   2715		.enable_mask = BIT(0),
   2716		.hw.init = &(struct clk_init_data){
   2717			.name = "gcc_tsif_ref_clk",
   2718			.parent_hws = (const struct clk_hw *[]){
   2719				      &gcc_tsif_ref_clk_src.clkr.hw },
   2720			.num_parents = 1,
   2721			.flags = CLK_SET_RATE_PARENT,
   2722			.ops = &clk_branch2_ops,
   2723		},
   2724	},
   2725};
   2726
   2727static struct clk_branch gcc_ufs_card_ahb_clk = {
   2728	.halt_reg = 0x75014,
   2729	.halt_check = BRANCH_HALT,
   2730	.hwcg_reg = 0x75014,
   2731	.hwcg_bit = 1,
   2732	.clkr = {
   2733		.enable_reg = 0x75014,
   2734		.enable_mask = BIT(0),
   2735		.hw.init = &(struct clk_init_data){
   2736			.name = "gcc_ufs_card_ahb_clk",
   2737			.ops = &clk_branch2_ops,
   2738		},
   2739	},
   2740};
   2741
   2742static struct clk_branch gcc_ufs_card_axi_clk = {
   2743	.halt_reg = 0x75010,
   2744	.halt_check = BRANCH_HALT,
   2745	.hwcg_reg = 0x75010,
   2746	.hwcg_bit = 1,
   2747	.clkr = {
   2748		.enable_reg = 0x75010,
   2749		.enable_mask = BIT(0),
   2750		.hw.init = &(struct clk_init_data){
   2751			.name = "gcc_ufs_card_axi_clk",
   2752			.parent_hws = (const struct clk_hw *[]){
   2753				      &gcc_ufs_card_axi_clk_src.clkr.hw },
   2754			.num_parents = 1,
   2755			.flags = CLK_SET_RATE_PARENT,
   2756			.ops = &clk_branch2_ops,
   2757		},
   2758	},
   2759};
   2760
   2761static struct clk_branch gcc_ufs_card_axi_hw_ctl_clk = {
   2762	.halt_reg = 0x75010,
   2763	.halt_check = BRANCH_HALT,
   2764	.hwcg_reg = 0x75010,
   2765	.hwcg_bit = 1,
   2766	.clkr = {
   2767		.enable_reg = 0x75010,
   2768		.enable_mask = BIT(1),
   2769		.hw.init = &(struct clk_init_data){
   2770			.name = "gcc_ufs_card_axi_hw_ctl_clk",
   2771			.parent_hws = (const struct clk_hw *[]){
   2772				      &gcc_ufs_card_axi_clk.clkr.hw },
   2773			.num_parents = 1,
   2774			.flags = CLK_SET_RATE_PARENT,
   2775			.ops = &clk_branch_simple_ops,
   2776		},
   2777	},
   2778};
   2779
   2780static struct clk_branch gcc_ufs_card_clkref_clk = {
   2781	.halt_reg = 0x8c004,
   2782	.halt_check = BRANCH_HALT,
   2783	.clkr = {
   2784		.enable_reg = 0x8c004,
   2785		.enable_mask = BIT(0),
   2786		.hw.init = &(struct clk_init_data){
   2787			.name = "gcc_ufs_card_clkref_clk",
   2788			.ops = &clk_branch2_ops,
   2789		},
   2790	},
   2791};
   2792
   2793static struct clk_branch gcc_ufs_card_ice_core_clk = {
   2794	.halt_reg = 0x7505c,
   2795	.halt_check = BRANCH_HALT,
   2796	.hwcg_reg = 0x7505c,
   2797	.hwcg_bit = 1,
   2798	.clkr = {
   2799		.enable_reg = 0x7505c,
   2800		.enable_mask = BIT(0),
   2801		.hw.init = &(struct clk_init_data){
   2802			.name = "gcc_ufs_card_ice_core_clk",
   2803			.parent_hws = (const struct clk_hw *[]){
   2804				      &gcc_ufs_card_ice_core_clk_src.clkr.hw },
   2805			.num_parents = 1,
   2806			.flags = CLK_SET_RATE_PARENT,
   2807			.ops = &clk_branch2_ops,
   2808		},
   2809	},
   2810};
   2811
   2812static struct clk_branch gcc_ufs_card_ice_core_hw_ctl_clk = {
   2813	.halt_reg = 0x7505c,
   2814	.halt_check = BRANCH_HALT,
   2815	.hwcg_reg = 0x7505c,
   2816	.hwcg_bit = 1,
   2817	.clkr = {
   2818		.enable_reg = 0x7505c,
   2819		.enable_mask = BIT(1),
   2820		.hw.init = &(struct clk_init_data){
   2821			.name = "gcc_ufs_card_ice_core_hw_ctl_clk",
   2822			.parent_hws = (const struct clk_hw *[]){
   2823				      &gcc_ufs_card_ice_core_clk.clkr.hw },
   2824			.num_parents = 1,
   2825			.flags = CLK_SET_RATE_PARENT,
   2826			.ops = &clk_branch_simple_ops,
   2827		},
   2828	},
   2829};
   2830
   2831static struct clk_branch gcc_ufs_card_phy_aux_clk = {
   2832	.halt_reg = 0x75090,
   2833	.halt_check = BRANCH_HALT,
   2834	.hwcg_reg = 0x75090,
   2835	.hwcg_bit = 1,
   2836	.clkr = {
   2837		.enable_reg = 0x75090,
   2838		.enable_mask = BIT(0),
   2839		.hw.init = &(struct clk_init_data){
   2840			.name = "gcc_ufs_card_phy_aux_clk",
   2841			.parent_hws = (const struct clk_hw *[]){
   2842				      &gcc_ufs_card_phy_aux_clk_src.clkr.hw },
   2843			.num_parents = 1,
   2844			.flags = CLK_SET_RATE_PARENT,
   2845			.ops = &clk_branch2_ops,
   2846		},
   2847	},
   2848};
   2849
   2850static struct clk_branch gcc_ufs_card_phy_aux_hw_ctl_clk = {
   2851	.halt_reg = 0x75090,
   2852	.halt_check = BRANCH_HALT,
   2853	.hwcg_reg = 0x75090,
   2854	.hwcg_bit = 1,
   2855	.clkr = {
   2856		.enable_reg = 0x75090,
   2857		.enable_mask = BIT(1),
   2858		.hw.init = &(struct clk_init_data){
   2859			.name = "gcc_ufs_card_phy_aux_hw_ctl_clk",
   2860			.parent_hws = (const struct clk_hw *[]){
   2861				      &gcc_ufs_card_phy_aux_clk.clkr.hw },
   2862			.num_parents = 1,
   2863			.flags = CLK_SET_RATE_PARENT,
   2864			.ops = &clk_branch_simple_ops,
   2865		},
   2866	},
   2867};
   2868
   2869/* external clocks so add BRANCH_HALT_SKIP */
   2870static struct clk_branch gcc_ufs_card_rx_symbol_0_clk = {
   2871	.halt_check = BRANCH_HALT_SKIP,
   2872	.clkr = {
   2873		.enable_reg = 0x7501c,
   2874		.enable_mask = BIT(0),
   2875		.hw.init = &(struct clk_init_data){
   2876			.name = "gcc_ufs_card_rx_symbol_0_clk",
   2877			.ops = &clk_branch2_ops,
   2878		},
   2879	},
   2880};
   2881
   2882/* external clocks so add BRANCH_HALT_SKIP */
   2883static struct clk_branch gcc_ufs_card_rx_symbol_1_clk = {
   2884	.halt_check = BRANCH_HALT_SKIP,
   2885	.clkr = {
   2886		.enable_reg = 0x750ac,
   2887		.enable_mask = BIT(0),
   2888		.hw.init = &(struct clk_init_data){
   2889			.name = "gcc_ufs_card_rx_symbol_1_clk",
   2890			.ops = &clk_branch2_ops,
   2891		},
   2892	},
   2893};
   2894
   2895/* external clocks so add BRANCH_HALT_SKIP */
   2896static struct clk_branch gcc_ufs_card_tx_symbol_0_clk = {
   2897	.halt_check = BRANCH_HALT_SKIP,
   2898	.clkr = {
   2899		.enable_reg = 0x75018,
   2900		.enable_mask = BIT(0),
   2901		.hw.init = &(struct clk_init_data){
   2902			.name = "gcc_ufs_card_tx_symbol_0_clk",
   2903			.ops = &clk_branch2_ops,
   2904		},
   2905	},
   2906};
   2907
   2908static struct clk_branch gcc_ufs_card_unipro_core_clk = {
   2909	.halt_reg = 0x75058,
   2910	.halt_check = BRANCH_HALT,
   2911	.hwcg_reg = 0x75058,
   2912	.hwcg_bit = 1,
   2913	.clkr = {
   2914		.enable_reg = 0x75058,
   2915		.enable_mask = BIT(0),
   2916		.hw.init = &(struct clk_init_data){
   2917			.name = "gcc_ufs_card_unipro_core_clk",
   2918			.parent_hws = (const struct clk_hw *[]){
   2919				&gcc_ufs_card_unipro_core_clk_src.clkr.hw },
   2920			.num_parents = 1,
   2921			.flags = CLK_SET_RATE_PARENT,
   2922			.ops = &clk_branch2_ops,
   2923		},
   2924	},
   2925};
   2926
   2927static struct clk_branch gcc_ufs_card_unipro_core_hw_ctl_clk = {
   2928	.halt_reg = 0x75058,
   2929	.halt_check = BRANCH_HALT,
   2930	.hwcg_reg = 0x75058,
   2931	.hwcg_bit = 1,
   2932	.clkr = {
   2933		.enable_reg = 0x75058,
   2934		.enable_mask = BIT(1),
   2935		.hw.init = &(struct clk_init_data){
   2936			.name = "gcc_ufs_card_unipro_core_hw_ctl_clk",
   2937			.parent_hws = (const struct clk_hw *[]){
   2938				      &gcc_ufs_card_unipro_core_clk.clkr.hw },
   2939			.num_parents = 1,
   2940			.flags = CLK_SET_RATE_PARENT,
   2941			.ops = &clk_branch_simple_ops,
   2942		},
   2943	},
   2944};
   2945
   2946static struct clk_branch gcc_ufs_mem_clkref_clk = {
   2947	.halt_reg = 0x8c000,
   2948	.halt_check = BRANCH_HALT,
   2949	.clkr = {
   2950		.enable_reg = 0x8c000,
   2951		.enable_mask = BIT(0),
   2952		.hw.init = &(struct clk_init_data){
   2953			.name = "gcc_ufs_mem_clkref_clk",
   2954			.ops = &clk_branch2_ops,
   2955		},
   2956	},
   2957};
   2958
   2959static struct clk_branch gcc_ufs_phy_ahb_clk = {
   2960	.halt_reg = 0x77014,
   2961	.halt_check = BRANCH_HALT,
   2962	.hwcg_reg = 0x77014,
   2963	.hwcg_bit = 1,
   2964	.clkr = {
   2965		.enable_reg = 0x77014,
   2966		.enable_mask = BIT(0),
   2967		.hw.init = &(struct clk_init_data){
   2968			.name = "gcc_ufs_phy_ahb_clk",
   2969			.ops = &clk_branch2_ops,
   2970		},
   2971	},
   2972};
   2973
   2974static struct clk_branch gcc_ufs_phy_axi_clk = {
   2975	.halt_reg = 0x77010,
   2976	.halt_check = BRANCH_HALT,
   2977	.hwcg_reg = 0x77010,
   2978	.hwcg_bit = 1,
   2979	.clkr = {
   2980		.enable_reg = 0x77010,
   2981		.enable_mask = BIT(0),
   2982		.hw.init = &(struct clk_init_data){
   2983			.name = "gcc_ufs_phy_axi_clk",
   2984			.parent_hws = (const struct clk_hw *[]){
   2985				&gcc_ufs_phy_axi_clk_src.clkr.hw },
   2986			.num_parents = 1,
   2987			.flags = CLK_SET_RATE_PARENT,
   2988			.ops = &clk_branch2_ops,
   2989		},
   2990	},
   2991};
   2992
   2993static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = {
   2994	.halt_reg = 0x77010,
   2995	.halt_check = BRANCH_HALT,
   2996	.hwcg_reg = 0x77010,
   2997	.hwcg_bit = 1,
   2998	.clkr = {
   2999		.enable_reg = 0x77010,
   3000		.enable_mask = BIT(1),
   3001		.hw.init = &(struct clk_init_data){
   3002			.name = "gcc_ufs_phy_axi_hw_ctl_clk",
   3003			.parent_hws = (const struct clk_hw *[]){
   3004				      &gcc_ufs_phy_axi_clk.clkr.hw },
   3005			.num_parents = 1,
   3006			.flags = CLK_SET_RATE_PARENT,
   3007			.ops = &clk_branch_simple_ops,
   3008		},
   3009	},
   3010};
   3011
   3012static struct clk_branch gcc_ufs_phy_ice_core_clk = {
   3013	.halt_reg = 0x7705c,
   3014	.halt_check = BRANCH_HALT,
   3015	.hwcg_reg = 0x7705c,
   3016	.hwcg_bit = 1,
   3017	.clkr = {
   3018		.enable_reg = 0x7705c,
   3019		.enable_mask = BIT(0),
   3020		.hw.init = &(struct clk_init_data){
   3021			.name = "gcc_ufs_phy_ice_core_clk",
   3022			.parent_hws = (const struct clk_hw *[]){
   3023				      &gcc_ufs_phy_ice_core_clk_src.clkr.hw },
   3024			.num_parents = 1,
   3025			.flags = CLK_SET_RATE_PARENT,
   3026			.ops = &clk_branch2_ops,
   3027		},
   3028	},
   3029};
   3030
   3031static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = {
   3032	.halt_reg = 0x7705c,
   3033	.halt_check = BRANCH_HALT,
   3034	.hwcg_reg = 0x7705c,
   3035	.hwcg_bit = 1,
   3036	.clkr = {
   3037		.enable_reg = 0x7705c,
   3038		.enable_mask = BIT(1),
   3039		.hw.init = &(struct clk_init_data){
   3040			.name = "gcc_ufs_phy_ice_core_hw_ctl_clk",
   3041			.parent_hws = (const struct clk_hw *[]){
   3042				      &gcc_ufs_phy_ice_core_clk.clkr.hw },
   3043			.num_parents = 1,
   3044			.flags = CLK_SET_RATE_PARENT,
   3045			.ops = &clk_branch_simple_ops,
   3046		},
   3047	},
   3048};
   3049
   3050static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
   3051	.halt_reg = 0x77090,
   3052	.halt_check = BRANCH_HALT,
   3053	.hwcg_reg = 0x77090,
   3054	.hwcg_bit = 1,
   3055	.clkr = {
   3056		.enable_reg = 0x77090,
   3057		.enable_mask = BIT(0),
   3058		.hw.init = &(struct clk_init_data){
   3059			.name = "gcc_ufs_phy_phy_aux_clk",
   3060			.parent_hws = (const struct clk_hw *[]){
   3061				      &gcc_ufs_phy_phy_aux_clk_src.clkr.hw },
   3062			.num_parents = 1,
   3063			.flags = CLK_SET_RATE_PARENT,
   3064			.ops = &clk_branch2_ops,
   3065		},
   3066	},
   3067};
   3068
   3069static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = {
   3070	.halt_reg = 0x77090,
   3071	.halt_check = BRANCH_HALT,
   3072	.hwcg_reg = 0x77090,
   3073	.hwcg_bit = 1,
   3074	.clkr = {
   3075		.enable_reg = 0x77090,
   3076		.enable_mask = BIT(1),
   3077		.hw.init = &(struct clk_init_data){
   3078			.name = "gcc_ufs_phy_phy_aux_hw_ctl_clk",
   3079			.parent_hws = (const struct clk_hw *[]){
   3080				      &gcc_ufs_phy_phy_aux_clk.clkr.hw },
   3081			.num_parents = 1,
   3082			.flags = CLK_SET_RATE_PARENT,
   3083			.ops = &clk_branch_simple_ops,
   3084		},
   3085	},
   3086};
   3087
   3088/* external clocks so add BRANCH_HALT_SKIP */
   3089static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
   3090	.halt_check = BRANCH_HALT_SKIP,
   3091	.clkr = {
   3092		.enable_reg = 0x7701c,
   3093		.enable_mask = BIT(0),
   3094		.hw.init = &(struct clk_init_data){
   3095			.name = "gcc_ufs_phy_rx_symbol_0_clk",
   3096			.ops = &clk_branch2_ops,
   3097		},
   3098	},
   3099};
   3100
   3101/* external clocks so add BRANCH_HALT_SKIP */
   3102static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
   3103	.halt_check = BRANCH_HALT_SKIP,
   3104	.clkr = {
   3105		.enable_reg = 0x770ac,
   3106		.enable_mask = BIT(0),
   3107		.hw.init = &(struct clk_init_data){
   3108			.name = "gcc_ufs_phy_rx_symbol_1_clk",
   3109			.ops = &clk_branch2_ops,
   3110		},
   3111	},
   3112};
   3113
   3114/* external clocks so add BRANCH_HALT_SKIP */
   3115static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
   3116	.halt_check = BRANCH_HALT_SKIP,
   3117	.clkr = {
   3118		.enable_reg = 0x77018,
   3119		.enable_mask = BIT(0),
   3120		.hw.init = &(struct clk_init_data){
   3121			.name = "gcc_ufs_phy_tx_symbol_0_clk",
   3122			.ops = &clk_branch2_ops,
   3123		},
   3124	},
   3125};
   3126
   3127static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
   3128	.halt_reg = 0x77058,
   3129	.halt_check = BRANCH_HALT,
   3130	.hwcg_reg = 0x77058,
   3131	.hwcg_bit = 1,
   3132	.clkr = {
   3133		.enable_reg = 0x77058,
   3134		.enable_mask = BIT(0),
   3135		.hw.init = &(struct clk_init_data){
   3136			.name = "gcc_ufs_phy_unipro_core_clk",
   3137			.parent_hws = (const struct clk_hw *[]){
   3138				&gcc_ufs_phy_unipro_core_clk_src.clkr.hw },
   3139			.num_parents = 1,
   3140			.flags = CLK_SET_RATE_PARENT,
   3141			.ops = &clk_branch2_ops,
   3142		},
   3143	},
   3144};
   3145
   3146static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = {
   3147	.halt_reg = 0x77058,
   3148	.halt_check = BRANCH_HALT,
   3149	.hwcg_reg = 0x77058,
   3150	.hwcg_bit = 1,
   3151	.clkr = {
   3152		.enable_reg = 0x77058,
   3153		.enable_mask = BIT(1),
   3154		.hw.init = &(struct clk_init_data){
   3155			.name = "gcc_ufs_phy_unipro_core_hw_ctl_clk",
   3156			.parent_hws = (const struct clk_hw *[]){
   3157				      &gcc_ufs_phy_unipro_core_clk.clkr.hw },
   3158			.num_parents = 1,
   3159			.flags = CLK_SET_RATE_PARENT,
   3160			.ops = &clk_branch_simple_ops,
   3161		},
   3162	},
   3163};
   3164
   3165static struct clk_branch gcc_usb30_prim_master_clk = {
   3166	.halt_reg = 0xf010,
   3167	.halt_check = BRANCH_HALT,
   3168	.clkr = {
   3169		.enable_reg = 0xf010,
   3170		.enable_mask = BIT(0),
   3171		.hw.init = &(struct clk_init_data){
   3172			.name = "gcc_usb30_prim_master_clk",
   3173			.parent_hws = (const struct clk_hw *[]){
   3174				      &gcc_usb30_prim_master_clk_src.clkr.hw },
   3175			.num_parents = 1,
   3176			.flags = CLK_SET_RATE_PARENT,
   3177			.ops = &clk_branch2_ops,
   3178		},
   3179	},
   3180};
   3181
   3182static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
   3183	.halt_reg = 0xf018,
   3184	.halt_check = BRANCH_HALT,
   3185	.clkr = {
   3186		.enable_reg = 0xf018,
   3187		.enable_mask = BIT(0),
   3188		.hw.init = &(struct clk_init_data){
   3189			.name = "gcc_usb30_prim_mock_utmi_clk",
   3190			.parent_hws = (const struct clk_hw *[]){
   3191				&gcc_usb30_prim_mock_utmi_clk_src.clkr.hw },
   3192			.num_parents = 1,
   3193			.flags = CLK_SET_RATE_PARENT,
   3194			.ops = &clk_branch2_ops,
   3195		},
   3196	},
   3197};
   3198
   3199static struct clk_branch gcc_usb30_prim_sleep_clk = {
   3200	.halt_reg = 0xf014,
   3201	.halt_check = BRANCH_HALT,
   3202	.clkr = {
   3203		.enable_reg = 0xf014,
   3204		.enable_mask = BIT(0),
   3205		.hw.init = &(struct clk_init_data){
   3206			.name = "gcc_usb30_prim_sleep_clk",
   3207			.ops = &clk_branch2_ops,
   3208		},
   3209	},
   3210};
   3211
   3212static struct clk_branch gcc_usb30_sec_master_clk = {
   3213	.halt_reg = 0x10010,
   3214	.halt_check = BRANCH_HALT,
   3215	.clkr = {
   3216		.enable_reg = 0x10010,
   3217		.enable_mask = BIT(0),
   3218		.hw.init = &(struct clk_init_data){
   3219			.name = "gcc_usb30_sec_master_clk",
   3220			.parent_hws = (const struct clk_hw *[]){
   3221				      &gcc_usb30_sec_master_clk_src.clkr.hw },
   3222			.num_parents = 1,
   3223			.flags = CLK_SET_RATE_PARENT,
   3224			.ops = &clk_branch2_ops,
   3225		},
   3226	},
   3227};
   3228
   3229static struct clk_branch gcc_usb30_sec_mock_utmi_clk = {
   3230	.halt_reg = 0x10018,
   3231	.halt_check = BRANCH_HALT,
   3232	.clkr = {
   3233		.enable_reg = 0x10018,
   3234		.enable_mask = BIT(0),
   3235		.hw.init = &(struct clk_init_data){
   3236			.name = "gcc_usb30_sec_mock_utmi_clk",
   3237			.parent_hws = (const struct clk_hw *[]){
   3238				&gcc_usb30_sec_mock_utmi_clk_src.clkr.hw },
   3239			.num_parents = 1,
   3240			.flags = CLK_SET_RATE_PARENT,
   3241			.ops = &clk_branch2_ops,
   3242		},
   3243	},
   3244};
   3245
   3246static struct clk_branch gcc_usb30_sec_sleep_clk = {
   3247	.halt_reg = 0x10014,
   3248	.halt_check = BRANCH_HALT,
   3249	.clkr = {
   3250		.enable_reg = 0x10014,
   3251		.enable_mask = BIT(0),
   3252		.hw.init = &(struct clk_init_data){
   3253			.name = "gcc_usb30_sec_sleep_clk",
   3254			.ops = &clk_branch2_ops,
   3255		},
   3256	},
   3257};
   3258
   3259static struct clk_branch gcc_usb3_prim_clkref_clk = {
   3260	.halt_reg = 0x8c008,
   3261	.halt_check = BRANCH_HALT,
   3262	.clkr = {
   3263		.enable_reg = 0x8c008,
   3264		.enable_mask = BIT(0),
   3265		.hw.init = &(struct clk_init_data){
   3266			.name = "gcc_usb3_prim_clkref_clk",
   3267			.ops = &clk_branch2_ops,
   3268		},
   3269	},
   3270};
   3271
   3272static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
   3273	.halt_reg = 0xf050,
   3274	.halt_check = BRANCH_HALT,
   3275	.clkr = {
   3276		.enable_reg = 0xf050,
   3277		.enable_mask = BIT(0),
   3278		.hw.init = &(struct clk_init_data){
   3279			.name = "gcc_usb3_prim_phy_aux_clk",
   3280			.parent_hws = (const struct clk_hw *[]){
   3281				      &gcc_usb3_prim_phy_aux_clk_src.clkr.hw },
   3282			.num_parents = 1,
   3283			.flags = CLK_SET_RATE_PARENT,
   3284			.ops = &clk_branch2_ops,
   3285		},
   3286	},
   3287};
   3288
   3289static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
   3290	.halt_reg = 0xf054,
   3291	.halt_check = BRANCH_HALT,
   3292	.clkr = {
   3293		.enable_reg = 0xf054,
   3294		.enable_mask = BIT(0),
   3295		.hw.init = &(struct clk_init_data){
   3296			.name = "gcc_usb3_prim_phy_com_aux_clk",
   3297			.parent_hws = (const struct clk_hw *[]){
   3298				      &gcc_usb3_prim_phy_aux_clk_src.clkr.hw },
   3299			.num_parents = 1,
   3300			.flags = CLK_SET_RATE_PARENT,
   3301			.ops = &clk_branch2_ops,
   3302		},
   3303	},
   3304};
   3305
   3306static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
   3307	.halt_check = BRANCH_HALT_SKIP,
   3308	.clkr = {
   3309		.enable_reg = 0xf058,
   3310		.enable_mask = BIT(0),
   3311		.hw.init = &(struct clk_init_data){
   3312			.name = "gcc_usb3_prim_phy_pipe_clk",
   3313			.ops = &clk_branch2_ops,
   3314		},
   3315	},
   3316};
   3317
   3318static struct clk_branch gcc_usb3_sec_clkref_clk = {
   3319	.halt_reg = 0x8c028,
   3320	.halt_check = BRANCH_HALT,
   3321	.clkr = {
   3322		.enable_reg = 0x8c028,
   3323		.enable_mask = BIT(0),
   3324		.hw.init = &(struct clk_init_data){
   3325			.name = "gcc_usb3_sec_clkref_clk",
   3326			.ops = &clk_branch2_ops,
   3327		},
   3328	},
   3329};
   3330
   3331static struct clk_branch gcc_usb3_sec_phy_aux_clk = {
   3332	.halt_reg = 0x10050,
   3333	.halt_check = BRANCH_HALT,
   3334	.clkr = {
   3335		.enable_reg = 0x10050,
   3336		.enable_mask = BIT(0),
   3337		.hw.init = &(struct clk_init_data){
   3338			.name = "gcc_usb3_sec_phy_aux_clk",
   3339			.parent_hws = (const struct clk_hw *[]){
   3340				      &gcc_usb3_sec_phy_aux_clk_src.clkr.hw },
   3341			.num_parents = 1,
   3342			.flags = CLK_SET_RATE_PARENT,
   3343			.ops = &clk_branch2_ops,
   3344		},
   3345	},
   3346};
   3347
   3348static struct clk_branch gcc_usb3_sec_phy_com_aux_clk = {
   3349	.halt_reg = 0x10054,
   3350	.halt_check = BRANCH_HALT,
   3351	.clkr = {
   3352		.enable_reg = 0x10054,
   3353		.enable_mask = BIT(0),
   3354		.hw.init = &(struct clk_init_data){
   3355			.name = "gcc_usb3_sec_phy_com_aux_clk",
   3356			.parent_hws = (const struct clk_hw *[]){
   3357				      &gcc_usb3_sec_phy_aux_clk_src.clkr.hw },
   3358			.num_parents = 1,
   3359			.flags = CLK_SET_RATE_PARENT,
   3360			.ops = &clk_branch2_ops,
   3361		},
   3362	},
   3363};
   3364
   3365static struct clk_branch gcc_usb3_sec_phy_pipe_clk = {
   3366	.halt_check = BRANCH_HALT_SKIP,
   3367	.clkr = {
   3368		.enable_reg = 0x10058,
   3369		.enable_mask = BIT(0),
   3370		.hw.init = &(struct clk_init_data){
   3371			.name = "gcc_usb3_sec_phy_pipe_clk",
   3372			.ops = &clk_branch2_ops,
   3373		},
   3374	},
   3375};
   3376
   3377/*
   3378 * Clock ON depends on external parent 'config noc', so cant poll
   3379 * delay and also mark as crtitical for video boot
   3380 */
   3381static struct clk_branch gcc_video_ahb_clk = {
   3382	.halt_reg = 0xb004,
   3383	.halt_check = BRANCH_HALT_DELAY,
   3384	.hwcg_reg = 0xb004,
   3385	.hwcg_bit = 1,
   3386	.clkr = {
   3387		.enable_reg = 0xb004,
   3388		.enable_mask = BIT(0),
   3389		.hw.init = &(struct clk_init_data){
   3390			.name = "gcc_video_ahb_clk",
   3391			.flags = CLK_IS_CRITICAL,
   3392			.ops = &clk_branch2_ops,
   3393		},
   3394	},
   3395};
   3396
   3397static struct clk_branch gcc_video_axi0_clk = {
   3398	.halt_reg = 0xb024,
   3399	.halt_check = BRANCH_HALT,
   3400	.clkr = {
   3401		.enable_reg = 0xb024,
   3402		.enable_mask = BIT(0),
   3403		.hw.init = &(struct clk_init_data){
   3404			.name = "gcc_video_axi0_clk",
   3405			.ops = &clk_branch2_ops,
   3406		},
   3407	},
   3408};
   3409
   3410static struct clk_branch gcc_video_axi1_clk = {
   3411	.halt_reg = 0xb028,
   3412	.halt_check = BRANCH_HALT,
   3413	.clkr = {
   3414		.enable_reg = 0xb028,
   3415		.enable_mask = BIT(0),
   3416		.hw.init = &(struct clk_init_data){
   3417			.name = "gcc_video_axi1_clk",
   3418			.ops = &clk_branch2_ops,
   3419		},
   3420	},
   3421};
   3422
   3423static struct clk_branch gcc_video_axic_clk = {
   3424	.halt_reg = 0xb02c,
   3425	.halt_check = BRANCH_HALT,
   3426	.clkr = {
   3427		.enable_reg = 0xb02c,
   3428		.enable_mask = BIT(0),
   3429		.hw.init = &(struct clk_init_data){
   3430			.name = "gcc_video_axic_clk",
   3431			.ops = &clk_branch2_ops,
   3432		},
   3433	},
   3434};
   3435
   3436/* XO critical input to video, so no need to poll */
   3437static struct clk_branch gcc_video_xo_clk = {
   3438	.halt_reg = 0xb040,
   3439	.halt_check = BRANCH_HALT_DELAY,
   3440	.clkr = {
   3441		.enable_reg = 0xb040,
   3442		.enable_mask = BIT(0),
   3443		.hw.init = &(struct clk_init_data){
   3444			.name = "gcc_video_xo_clk",
   3445			.flags = CLK_IS_CRITICAL,
   3446			.ops = &clk_branch2_ops,
   3447		},
   3448	},
   3449};
   3450
   3451static struct gdsc pcie_0_gdsc = {
   3452	.gdscr = 0x6b004,
   3453	.pd = {
   3454		.name = "pcie_0_gdsc",
   3455	},
   3456	.pwrsts = PWRSTS_OFF_ON,
   3457	.flags = POLL_CFG_GDSCR,
   3458};
   3459
   3460static struct gdsc pcie_1_gdsc = {
   3461	.gdscr = 0x8d004,
   3462	.pd = {
   3463		.name = "pcie_1_gdsc",
   3464	},
   3465	.pwrsts = PWRSTS_OFF_ON,
   3466	.flags = POLL_CFG_GDSCR,
   3467};
   3468
   3469static struct gdsc ufs_card_gdsc = {
   3470	.gdscr = 0x75004,
   3471	.pd = {
   3472		.name = "ufs_card_gdsc",
   3473	},
   3474	.pwrsts = PWRSTS_OFF_ON,
   3475	.flags = POLL_CFG_GDSCR,
   3476};
   3477
   3478static struct gdsc ufs_phy_gdsc = {
   3479	.gdscr = 0x77004,
   3480	.pd = {
   3481		.name = "ufs_phy_gdsc",
   3482	},
   3483	.pwrsts = PWRSTS_OFF_ON,
   3484	.flags = POLL_CFG_GDSCR,
   3485};
   3486
   3487static struct gdsc emac_gdsc = {
   3488	.gdscr = 0x6004,
   3489	.pd = {
   3490		.name = "emac_gdsc",
   3491	},
   3492	.pwrsts = PWRSTS_OFF_ON,
   3493	.flags = POLL_CFG_GDSCR,
   3494};
   3495
   3496static struct gdsc usb30_prim_gdsc = {
   3497	.gdscr = 0xf004,
   3498	.pd = {
   3499		.name = "usb30_prim_gdsc",
   3500	},
   3501	.pwrsts = PWRSTS_OFF_ON,
   3502	.flags = POLL_CFG_GDSCR,
   3503};
   3504
   3505static struct gdsc usb30_sec_gdsc = {
   3506	.gdscr = 0x10004,
   3507	.pd = {
   3508		.name = "usb30_sec_gdsc",
   3509	},
   3510	.pwrsts = PWRSTS_OFF_ON,
   3511	.flags = POLL_CFG_GDSCR,
   3512};
   3513
   3514static struct clk_regmap *gcc_sm8150_clocks[] = {
   3515	[GCC_AGGRE_NOC_PCIE_TBU_CLK] = &gcc_aggre_noc_pcie_tbu_clk.clkr,
   3516	[GCC_AGGRE_UFS_CARD_AXI_CLK] = &gcc_aggre_ufs_card_axi_clk.clkr,
   3517	[GCC_AGGRE_UFS_CARD_AXI_HW_CTL_CLK] =
   3518		&gcc_aggre_ufs_card_axi_hw_ctl_clk.clkr,
   3519	[GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
   3520	[GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] =
   3521		&gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr,
   3522	[GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
   3523	[GCC_AGGRE_USB3_SEC_AXI_CLK] = &gcc_aggre_usb3_sec_axi_clk.clkr,
   3524	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
   3525	[GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr,
   3526	[GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,
   3527	[GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr,
   3528	[GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr,
   3529	[GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
   3530	[GCC_CFG_NOC_USB3_SEC_AXI_CLK] = &gcc_cfg_noc_usb3_sec_axi_clk.clkr,
   3531	[GCC_CPUSS_AHB_CLK] = &gcc_cpuss_ahb_clk.clkr,
   3532	[GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr,
   3533	[GCC_CPUSS_DVM_BUS_CLK] = &gcc_cpuss_dvm_bus_clk.clkr,
   3534	[GCC_CPUSS_GNOC_CLK] = &gcc_cpuss_gnoc_clk.clkr,
   3535	[GCC_CPUSS_RBCPR_CLK] = &gcc_cpuss_rbcpr_clk.clkr,
   3536	[GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
   3537	[GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr,
   3538	[GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
   3539	[GCC_DISP_SF_AXI_CLK] = &gcc_disp_sf_axi_clk.clkr,
   3540	[GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr,
   3541	[GCC_EMAC_AXI_CLK] = &gcc_emac_axi_clk.clkr,
   3542	[GCC_EMAC_PTP_CLK] = &gcc_emac_ptp_clk.clkr,
   3543	[GCC_EMAC_PTP_CLK_SRC] = &gcc_emac_ptp_clk_src.clkr,
   3544	[GCC_EMAC_RGMII_CLK] = &gcc_emac_rgmii_clk.clkr,
   3545	[GCC_EMAC_RGMII_CLK_SRC] = &gcc_emac_rgmii_clk_src.clkr,
   3546	[GCC_EMAC_SLV_AHB_CLK] = &gcc_emac_slv_ahb_clk.clkr,
   3547	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
   3548	[GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
   3549	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
   3550	[GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
   3551	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
   3552	[GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
   3553	[GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,
   3554	[GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
   3555	[GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
   3556	[GCC_GPU_IREF_CLK] = &gcc_gpu_iref_clk.clkr,
   3557	[GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
   3558	[GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
   3559	[GCC_NPU_AT_CLK] = &gcc_npu_at_clk.clkr,
   3560	[GCC_NPU_AXI_CLK] = &gcc_npu_axi_clk.clkr,
   3561	[GCC_NPU_CFG_AHB_CLK] = &gcc_npu_cfg_ahb_clk.clkr,
   3562	[GCC_NPU_GPLL0_CLK_SRC] = &gcc_npu_gpll0_clk_src.clkr,
   3563	[GCC_NPU_GPLL0_DIV_CLK_SRC] = &gcc_npu_gpll0_div_clk_src.clkr,
   3564	[GCC_NPU_TRIG_CLK] = &gcc_npu_trig_clk.clkr,
   3565	[GCC_PCIE0_PHY_REFGEN_CLK] = &gcc_pcie0_phy_refgen_clk.clkr,
   3566	[GCC_PCIE1_PHY_REFGEN_CLK] = &gcc_pcie1_phy_refgen_clk.clkr,
   3567	[GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
   3568	[GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
   3569	[GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
   3570	[GCC_PCIE_0_CLKREF_CLK] = &gcc_pcie_0_clkref_clk.clkr,
   3571	[GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
   3572	[GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
   3573	[GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
   3574	[GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
   3575	[GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
   3576	[GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr,
   3577	[GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
   3578	[GCC_PCIE_1_CLKREF_CLK] = &gcc_pcie_1_clkref_clk.clkr,
   3579	[GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
   3580	[GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
   3581	[GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
   3582	[GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr,
   3583	[GCC_PCIE_PHY_AUX_CLK] = &gcc_pcie_phy_aux_clk.clkr,
   3584	[GCC_PCIE_PHY_REFGEN_CLK_SRC] = &gcc_pcie_phy_refgen_clk_src.clkr,
   3585	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
   3586	[GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
   3587	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
   3588	[GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
   3589	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
   3590	[GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
   3591	[GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
   3592	[GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
   3593	[GCC_QMIP_VIDEO_CVP_AHB_CLK] = &gcc_qmip_video_cvp_ahb_clk.clkr,
   3594	[GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
   3595	[GCC_QSPI_CNOC_PERIPH_AHB_CLK] = &gcc_qspi_cnoc_periph_ahb_clk.clkr,
   3596	[GCC_QSPI_CORE_CLK] = &gcc_qspi_core_clk.clkr,
   3597	[GCC_QSPI_CORE_CLK_SRC] = &gcc_qspi_core_clk_src.clkr,
   3598	[GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
   3599	[GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
   3600	[GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
   3601	[GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
   3602	[GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
   3603	[GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
   3604	[GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
   3605	[GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
   3606	[GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
   3607	[GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
   3608	[GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
   3609	[GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
   3610	[GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr,
   3611	[GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr,
   3612	[GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr,
   3613	[GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr,
   3614	[GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
   3615	[GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
   3616	[GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
   3617	[GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
   3618	[GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
   3619	[GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
   3620	[GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
   3621	[GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
   3622	[GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
   3623	[GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
   3624	[GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
   3625	[GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
   3626	[GCC_QUPV3_WRAP2_S0_CLK] = &gcc_qupv3_wrap2_s0_clk.clkr,
   3627	[GCC_QUPV3_WRAP2_S0_CLK_SRC] = &gcc_qupv3_wrap2_s0_clk_src.clkr,
   3628	[GCC_QUPV3_WRAP2_S1_CLK] = &gcc_qupv3_wrap2_s1_clk.clkr,
   3629	[GCC_QUPV3_WRAP2_S1_CLK_SRC] = &gcc_qupv3_wrap2_s1_clk_src.clkr,
   3630	[GCC_QUPV3_WRAP2_S2_CLK] = &gcc_qupv3_wrap2_s2_clk.clkr,
   3631	[GCC_QUPV3_WRAP2_S2_CLK_SRC] = &gcc_qupv3_wrap2_s2_clk_src.clkr,
   3632	[GCC_QUPV3_WRAP2_S3_CLK] = &gcc_qupv3_wrap2_s3_clk.clkr,
   3633	[GCC_QUPV3_WRAP2_S3_CLK_SRC] = &gcc_qupv3_wrap2_s3_clk_src.clkr,
   3634	[GCC_QUPV3_WRAP2_S4_CLK] = &gcc_qupv3_wrap2_s4_clk.clkr,
   3635	[GCC_QUPV3_WRAP2_S4_CLK_SRC] = &gcc_qupv3_wrap2_s4_clk_src.clkr,
   3636	[GCC_QUPV3_WRAP2_S5_CLK] = &gcc_qupv3_wrap2_s5_clk.clkr,
   3637	[GCC_QUPV3_WRAP2_S5_CLK_SRC] = &gcc_qupv3_wrap2_s5_clk_src.clkr,
   3638	[GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
   3639	[GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
   3640	[GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
   3641	[GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
   3642	[GCC_QUPV3_WRAP_2_M_AHB_CLK] = &gcc_qupv3_wrap_2_m_ahb_clk.clkr,
   3643	[GCC_QUPV3_WRAP_2_S_AHB_CLK] = &gcc_qupv3_wrap_2_s_ahb_clk.clkr,
   3644	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
   3645	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
   3646	[GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
   3647	[GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
   3648	[GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
   3649	[GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr,
   3650	[GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,
   3651	[GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr,
   3652	[GCC_TSIF_INACTIVITY_TIMERS_CLK] = &gcc_tsif_inactivity_timers_clk.clkr,
   3653	[GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
   3654	[GCC_TSIF_REF_CLK_SRC] = &gcc_tsif_ref_clk_src.clkr,
   3655	[GCC_UFS_CARD_AHB_CLK] = &gcc_ufs_card_ahb_clk.clkr,
   3656	[GCC_UFS_CARD_AXI_CLK] = &gcc_ufs_card_axi_clk.clkr,
   3657	[GCC_UFS_CARD_AXI_CLK_SRC] = &gcc_ufs_card_axi_clk_src.clkr,
   3658	[GCC_UFS_CARD_AXI_HW_CTL_CLK] = &gcc_ufs_card_axi_hw_ctl_clk.clkr,
   3659	[GCC_UFS_CARD_CLKREF_CLK] = &gcc_ufs_card_clkref_clk.clkr,
   3660	[GCC_UFS_CARD_ICE_CORE_CLK] = &gcc_ufs_card_ice_core_clk.clkr,
   3661	[GCC_UFS_CARD_ICE_CORE_CLK_SRC] = &gcc_ufs_card_ice_core_clk_src.clkr,
   3662	[GCC_UFS_CARD_ICE_CORE_HW_CTL_CLK] =
   3663		&gcc_ufs_card_ice_core_hw_ctl_clk.clkr,
   3664	[GCC_UFS_CARD_PHY_AUX_CLK] = &gcc_ufs_card_phy_aux_clk.clkr,
   3665	[GCC_UFS_CARD_PHY_AUX_CLK_SRC] = &gcc_ufs_card_phy_aux_clk_src.clkr,
   3666	[GCC_UFS_CARD_PHY_AUX_HW_CTL_CLK] =
   3667		&gcc_ufs_card_phy_aux_hw_ctl_clk.clkr,
   3668	[GCC_UFS_CARD_RX_SYMBOL_0_CLK] = &gcc_ufs_card_rx_symbol_0_clk.clkr,
   3669	[GCC_UFS_CARD_RX_SYMBOL_1_CLK] = &gcc_ufs_card_rx_symbol_1_clk.clkr,
   3670	[GCC_UFS_CARD_TX_SYMBOL_0_CLK] = &gcc_ufs_card_tx_symbol_0_clk.clkr,
   3671	[GCC_UFS_CARD_UNIPRO_CORE_CLK] = &gcc_ufs_card_unipro_core_clk.clkr,
   3672	[GCC_UFS_CARD_UNIPRO_CORE_CLK_SRC] =
   3673		&gcc_ufs_card_unipro_core_clk_src.clkr,
   3674	[GCC_UFS_CARD_UNIPRO_CORE_HW_CTL_CLK] =
   3675		&gcc_ufs_card_unipro_core_hw_ctl_clk.clkr,
   3676	[GCC_UFS_MEM_CLKREF_CLK] = &gcc_ufs_mem_clkref_clk.clkr,
   3677	[GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
   3678	[GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
   3679	[GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
   3680	[GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr,
   3681	[GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
   3682	[GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
   3683	[GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] =
   3684		&gcc_ufs_phy_ice_core_hw_ctl_clk.clkr,
   3685	[GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
   3686	[GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
   3687	[GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr,
   3688	[GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
   3689	[GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
   3690	[GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
   3691	[GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
   3692	[GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] =
   3693		&gcc_ufs_phy_unipro_core_clk_src.clkr,
   3694	[GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] =
   3695		&gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr,
   3696	[GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
   3697	[GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
   3698	[GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
   3699	[GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] =
   3700		&gcc_usb30_prim_mock_utmi_clk_src.clkr,
   3701	[GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
   3702	[GCC_USB30_SEC_MASTER_CLK] = &gcc_usb30_sec_master_clk.clkr,
   3703	[GCC_USB30_SEC_MASTER_CLK_SRC] = &gcc_usb30_sec_master_clk_src.clkr,
   3704	[GCC_USB30_SEC_MOCK_UTMI_CLK] = &gcc_usb30_sec_mock_utmi_clk.clkr,
   3705	[GCC_USB30_SEC_MOCK_UTMI_CLK_SRC] =
   3706		&gcc_usb30_sec_mock_utmi_clk_src.clkr,
   3707	[GCC_USB30_SEC_SLEEP_CLK] = &gcc_usb30_sec_sleep_clk.clkr,
   3708	[GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,
   3709	[GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
   3710	[GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
   3711	[GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
   3712	[GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
   3713	[GCC_USB3_SEC_CLKREF_CLK] = &gcc_usb3_sec_clkref_clk.clkr,
   3714	[GCC_USB3_SEC_PHY_AUX_CLK] = &gcc_usb3_sec_phy_aux_clk.clkr,
   3715	[GCC_USB3_SEC_PHY_AUX_CLK_SRC] = &gcc_usb3_sec_phy_aux_clk_src.clkr,
   3716	[GCC_USB3_SEC_PHY_COM_AUX_CLK] = &gcc_usb3_sec_phy_com_aux_clk.clkr,
   3717	[GCC_USB3_SEC_PHY_PIPE_CLK] = &gcc_usb3_sec_phy_pipe_clk.clkr,
   3718	[GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr,
   3719	[GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
   3720	[GCC_VIDEO_AXI1_CLK] = &gcc_video_axi1_clk.clkr,
   3721	[GCC_VIDEO_AXIC_CLK] = &gcc_video_axic_clk.clkr,
   3722	[GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr,
   3723	[GPLL0] = &gpll0.clkr,
   3724	[GPLL0_OUT_EVEN] = &gpll0_out_even.clkr,
   3725	[GPLL7] = &gpll7.clkr,
   3726	[GPLL9] = &gpll9.clkr,
   3727};
   3728
   3729static const struct qcom_reset_map gcc_sm8150_resets[] = {
   3730	[GCC_EMAC_BCR] = { 0x6000 },
   3731	[GCC_GPU_BCR] = { 0x71000 },
   3732	[GCC_MMSS_BCR] = { 0xb000 },
   3733	[GCC_NPU_BCR] = { 0x4d000 },
   3734	[GCC_PCIE_0_BCR] = { 0x6b000 },
   3735	[GCC_PCIE_0_PHY_BCR] = { 0x6c01c },
   3736	[GCC_PCIE_1_BCR] = { 0x8d000 },
   3737	[GCC_PCIE_1_PHY_BCR] = { 0x8e01c },
   3738	[GCC_PCIE_PHY_BCR] = { 0x6f000 },
   3739	[GCC_PDM_BCR] = { 0x33000 },
   3740	[GCC_PRNG_BCR] = { 0x34000 },
   3741	[GCC_QSPI_BCR] = { 0x24008 },
   3742	[GCC_QUPV3_WRAPPER_0_BCR] = { 0x17000 },
   3743	[GCC_QUPV3_WRAPPER_1_BCR] = { 0x18000 },
   3744	[GCC_QUPV3_WRAPPER_2_BCR] = { 0x1e000 },
   3745	[GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 },
   3746	[GCC_QUSB2PHY_SEC_BCR] = { 0x12004 },
   3747	[GCC_USB3_PHY_PRIM_BCR] = { 0x50000 },
   3748	[GCC_USB3_DP_PHY_PRIM_BCR] = { 0x50008 },
   3749	[GCC_USB3_PHY_SEC_BCR] = { 0x5000c },
   3750	[GCC_USB3PHY_PHY_SEC_BCR] = { 0x50010 },
   3751	[GCC_SDCC2_BCR] = { 0x14000 },
   3752	[GCC_SDCC4_BCR] = { 0x16000 },
   3753	[GCC_TSIF_BCR] = { 0x36000 },
   3754	[GCC_UFS_CARD_BCR] = { 0x75000 },
   3755	[GCC_UFS_PHY_BCR] = { 0x77000 },
   3756	[GCC_USB30_PRIM_BCR] = { 0xf000 },
   3757	[GCC_USB30_SEC_BCR] = { 0x10000 },
   3758	[GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 },
   3759};
   3760
   3761static struct gdsc *gcc_sm8150_gdscs[] = {
   3762	[EMAC_GDSC] = &emac_gdsc,
   3763	[PCIE_0_GDSC] = &pcie_0_gdsc,
   3764	[PCIE_1_GDSC] = &pcie_1_gdsc,
   3765	[UFS_CARD_GDSC] = &ufs_card_gdsc,
   3766	[UFS_PHY_GDSC] = &ufs_phy_gdsc,
   3767	[USB30_PRIM_GDSC] = &usb30_prim_gdsc,
   3768	[USB30_SEC_GDSC] = &usb30_sec_gdsc,
   3769};
   3770
   3771static const struct regmap_config gcc_sm8150_regmap_config = {
   3772	.reg_bits	= 32,
   3773	.reg_stride	= 4,
   3774	.val_bits	= 32,
   3775	.max_register	= 0x9c040,
   3776	.fast_io	= true,
   3777};
   3778
   3779static const struct qcom_cc_desc gcc_sm8150_desc = {
   3780	.config = &gcc_sm8150_regmap_config,
   3781	.clks = gcc_sm8150_clocks,
   3782	.num_clks = ARRAY_SIZE(gcc_sm8150_clocks),
   3783	.resets = gcc_sm8150_resets,
   3784	.num_resets = ARRAY_SIZE(gcc_sm8150_resets),
   3785	.gdscs = gcc_sm8150_gdscs,
   3786	.num_gdscs = ARRAY_SIZE(gcc_sm8150_gdscs),
   3787};
   3788
   3789static const struct of_device_id gcc_sm8150_match_table[] = {
   3790	{ .compatible = "qcom,gcc-sm8150" },
   3791	{ }
   3792};
   3793MODULE_DEVICE_TABLE(of, gcc_sm8150_match_table);
   3794
   3795static int gcc_sm8150_probe(struct platform_device *pdev)
   3796{
   3797	struct regmap *regmap;
   3798
   3799	regmap = qcom_cc_map(pdev, &gcc_sm8150_desc);
   3800	if (IS_ERR(regmap))
   3801		return PTR_ERR(regmap);
   3802
   3803	/* Disable the GPLL0 active input to NPU and GPU via MISC registers */
   3804	regmap_update_bits(regmap, 0x4d110, 0x3, 0x3);
   3805	regmap_update_bits(regmap, 0x71028, 0x3, 0x3);
   3806
   3807	return qcom_cc_really_probe(pdev, &gcc_sm8150_desc, regmap);
   3808}
   3809
   3810static struct platform_driver gcc_sm8150_driver = {
   3811	.probe		= gcc_sm8150_probe,
   3812	.driver		= {
   3813		.name	= "gcc-sm8150",
   3814		.of_match_table = gcc_sm8150_match_table,
   3815	},
   3816};
   3817
   3818static int __init gcc_sm8150_init(void)
   3819{
   3820	return platform_driver_register(&gcc_sm8150_driver);
   3821}
   3822subsys_initcall(gcc_sm8150_init);
   3823
   3824static void __exit gcc_sm8150_exit(void)
   3825{
   3826	platform_driver_unregister(&gcc_sm8150_driver);
   3827}
   3828module_exit(gcc_sm8150_exit);
   3829
   3830MODULE_DESCRIPTION("QTI GCC SM8150 Driver");
   3831MODULE_LICENSE("GPL v2");