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-sm8350.c (104703B)


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