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-sm6350.c (66197B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * Copyright (c) 2021, The Linux Foundation. All rights reserved.
      4 * Copyright (c) 2021, Konrad Dybcio <konrad.dybcio@somainline.org>
      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-sm6350.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 "common.h"
     21#include "gdsc.h"
     22#include "reset.h"
     23
     24enum {
     25	P_BI_TCXO,
     26	P_GPLL0_OUT_EVEN,
     27	P_GPLL0_OUT_MAIN,
     28	P_GPLL0_OUT_ODD,
     29	P_GPLL6_OUT_EVEN,
     30	P_GPLL7_OUT_MAIN,
     31	P_SLEEP_CLK,
     32};
     33
     34static struct clk_alpha_pll gpll0 = {
     35	.offset = 0x0,
     36	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
     37	.clkr = {
     38		.enable_reg = 0x52010,
     39		.enable_mask = BIT(0),
     40		.hw.init = &(struct clk_init_data){
     41			.name = "gpll0",
     42			.parent_data = &(const struct clk_parent_data){
     43				.fw_name = "bi_tcxo",
     44			},
     45			.num_parents = 1,
     46			.ops = &clk_alpha_pll_fixed_fabia_ops,
     47		},
     48	},
     49};
     50
     51static const struct clk_div_table post_div_table_gpll0_out_even[] = {
     52	{ 0x1, 2 },
     53	{ }
     54};
     55
     56static struct clk_alpha_pll_postdiv gpll0_out_even = {
     57	.offset = 0x0,
     58	.post_div_shift = 8,
     59	.post_div_table = post_div_table_gpll0_out_even,
     60	.num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_even),
     61	.width = 4,
     62	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
     63	.clkr.hw.init = &(struct clk_init_data){
     64		.name = "gpll0_out_even",
     65		.parent_hws = (const struct clk_hw*[]){
     66			&gpll0.clkr.hw,
     67		},
     68		.num_parents = 1,
     69		.ops = &clk_alpha_pll_postdiv_fabia_ops,
     70	},
     71};
     72
     73static const struct clk_div_table post_div_table_gpll0_out_odd[] = {
     74	{ 0x3, 3 },
     75	{ }
     76};
     77
     78static struct clk_alpha_pll_postdiv gpll0_out_odd = {
     79	.offset = 0x0,
     80	.post_div_shift = 12,
     81	.post_div_table = post_div_table_gpll0_out_odd,
     82	.num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_odd),
     83	.width = 4,
     84	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
     85	.clkr.hw.init = &(struct clk_init_data){
     86		.name = "gpll0_out_odd",
     87		.parent_hws = (const struct clk_hw*[]){
     88			&gpll0.clkr.hw,
     89		},
     90		.num_parents = 1,
     91		.ops = &clk_alpha_pll_postdiv_fabia_ops,
     92	},
     93};
     94
     95static struct clk_alpha_pll gpll6 = {
     96	.offset = 0x6000,
     97	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
     98	.clkr = {
     99		.enable_reg = 0x52010,
    100		.enable_mask = BIT(6),
    101		.hw.init = &(struct clk_init_data){
    102			.name = "gpll6",
    103			.parent_hws = (const struct clk_hw*[]){
    104				&gpll0.clkr.hw,
    105			},
    106			.num_parents = 1,
    107			.ops = &clk_alpha_pll_fixed_fabia_ops,
    108		},
    109	},
    110};
    111
    112static const struct clk_div_table post_div_table_gpll6_out_even[] = {
    113	{ 0x1, 2 },
    114	{ }
    115};
    116
    117static struct clk_alpha_pll_postdiv gpll6_out_even = {
    118	.offset = 0x6000,
    119	.post_div_shift = 8,
    120	.post_div_table = post_div_table_gpll6_out_even,
    121	.num_post_div = ARRAY_SIZE(post_div_table_gpll6_out_even),
    122	.width = 4,
    123	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
    124	.clkr.hw.init = &(struct clk_init_data){
    125		.name = "gpll6_out_even",
    126		.parent_hws = (const struct clk_hw*[]){
    127			&gpll0.clkr.hw,
    128		},
    129		.num_parents = 1,
    130		.ops = &clk_alpha_pll_postdiv_fabia_ops,
    131	},
    132};
    133
    134static struct clk_alpha_pll gpll7 = {
    135	.offset = 0x7000,
    136	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
    137	.clkr = {
    138		.enable_reg = 0x52010,
    139		.enable_mask = BIT(7),
    140		.hw.init = &(struct clk_init_data){
    141			.name = "gpll7",
    142			.parent_hws = (const struct clk_hw*[]){
    143				&gpll0.clkr.hw,
    144			},
    145			.num_parents = 1,
    146			.ops = &clk_alpha_pll_fixed_fabia_ops,
    147		},
    148	},
    149};
    150
    151static const struct parent_map gcc_parent_map_0[] = {
    152	{ P_BI_TCXO, 0 },
    153	{ P_GPLL0_OUT_MAIN, 1 },
    154	{ P_GPLL6_OUT_EVEN, 2 },
    155	{ P_GPLL0_OUT_EVEN, 6 },
    156};
    157
    158static const struct clk_parent_data gcc_parent_data_0[] = {
    159	{ .fw_name = "bi_tcxo" },
    160	{ .hw = &gpll0.clkr.hw },
    161	{ .hw = &gpll6_out_even.clkr.hw },
    162	{ .hw = &gpll0_out_even.clkr.hw },
    163};
    164
    165static const struct parent_map gcc_parent_map_1[] = {
    166	{ P_BI_TCXO, 0 },
    167	{ P_GPLL0_OUT_EVEN, 6 },
    168};
    169
    170static const struct clk_parent_data gcc_parent_data_1[] = {
    171	{ .fw_name = "bi_tcxo" },
    172	{ .hw = &gpll0_out_even.clkr.hw },
    173};
    174
    175static const struct parent_map gcc_parent_map_2[] = {
    176	{ P_BI_TCXO, 0 },
    177	{ P_GPLL0_OUT_ODD, 2 },
    178};
    179
    180static const struct clk_parent_data gcc_parent_data_2_ao[] = {
    181	{ .fw_name = "bi_tcxo_ao" },
    182	{ .hw = &gpll0_out_odd.clkr.hw },
    183};
    184
    185static const struct parent_map gcc_parent_map_4[] = {
    186	{ P_BI_TCXO, 0 },
    187	{ P_GPLL0_OUT_MAIN, 1 },
    188	{ P_GPLL0_OUT_ODD, 2 },
    189};
    190
    191static const struct clk_parent_data gcc_parent_data_4[] = {
    192	{ .fw_name = "bi_tcxo" },
    193	{ .hw = &gpll0.clkr.hw },
    194	{ .hw = &gpll0_out_odd.clkr.hw },
    195};
    196
    197static const struct parent_map gcc_parent_map_5[] = {
    198	{ P_BI_TCXO, 0 },
    199	{ P_GPLL0_OUT_ODD, 2 },
    200	{ P_SLEEP_CLK, 5 },
    201	{ P_GPLL0_OUT_EVEN, 6 },
    202};
    203
    204static const struct clk_parent_data gcc_parent_data_5[] = {
    205	{ .fw_name = "bi_tcxo" },
    206	{ .hw = &gpll0_out_odd.clkr.hw },
    207	{ .fw_name = "sleep_clk" },
    208	{ .hw = &gpll0_out_even.clkr.hw },
    209};
    210
    211static const struct parent_map gcc_parent_map_6[] = {
    212	{ P_BI_TCXO, 0 },
    213	{ P_SLEEP_CLK, 5 },
    214};
    215
    216static const struct clk_parent_data gcc_parent_data_6[] = {
    217	{ .fw_name = "bi_tcxo" },
    218	{ .fw_name = "sleep_clk" }
    219};
    220
    221static const struct parent_map gcc_parent_map_7[] = {
    222	{ P_BI_TCXO, 0 },
    223	{ P_GPLL6_OUT_EVEN, 2 },
    224	{ P_GPLL0_OUT_EVEN, 6 },
    225};
    226
    227static const struct clk_parent_data gcc_parent_data_7[] = {
    228	{ .fw_name = "bi_tcxo" },
    229	{ .hw = &gpll6_out_even.clkr.hw },
    230	{ .hw = &gpll0_out_even.clkr.hw },
    231};
    232
    233static const struct parent_map gcc_parent_map_8[] = {
    234	{ P_BI_TCXO, 0 },
    235	{ P_GPLL0_OUT_ODD, 2 },
    236	{ P_GPLL7_OUT_MAIN, 3 },
    237};
    238
    239static const struct clk_parent_data gcc_parent_data_8[] = {
    240	{ .fw_name = "bi_tcxo" },
    241	{ .hw = &gpll0_out_odd.clkr.hw },
    242	{ .hw = &gpll7.clkr.hw },
    243};
    244
    245static struct clk_regmap_div gcc_gpu_gpll0_main_div_clk_src = {
    246	.reg = 0x4514C,
    247	.shift = 0,
    248	.width = 2,
    249	.clkr.hw.init = &(struct clk_init_data) {
    250		.name = "gcc_gpu_gpll0_main_div_clk_src",
    251		.parent_hws = (const struct clk_hw*[]){
    252			&gpll0.clkr.hw,
    253		},
    254		.num_parents = 1,
    255		.ops = &clk_regmap_div_ro_ops,
    256	},
    257};
    258
    259static struct clk_regmap_div gcc_npu_pll0_main_div_clk_src = {
    260	.reg = 0x4ce00,
    261	.shift = 0,
    262	.width = 2,
    263	.clkr.hw.init = &(struct clk_init_data) {
    264		.name = "gcc_npu_pll0_main_div_clk_src",
    265		.parent_hws = (const struct clk_hw*[]){
    266			&gpll0.clkr.hw,
    267		},
    268		.num_parents = 1,
    269		.ops = &clk_regmap_div_ro_ops,
    270	},
    271};
    272
    273static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src[] = {
    274	F(19200000, P_BI_TCXO, 1, 0, 0),
    275	{ }
    276};
    277
    278static struct clk_rcg2 gcc_cpuss_ahb_clk_src = {
    279	.cmd_rcgr = 0x30014,
    280	.mnd_width = 0,
    281	.hid_width = 5,
    282	.parent_map = gcc_parent_map_2,
    283	.freq_tbl = ftbl_gcc_cpuss_ahb_clk_src,
    284	.clkr.hw.init = &(struct clk_init_data){
    285		.name = "gcc_cpuss_ahb_clk_src",
    286		.parent_data = gcc_parent_data_2_ao,
    287		.num_parents = ARRAY_SIZE(gcc_parent_data_2_ao),
    288		.ops = &clk_rcg2_ops,
    289	},
    290};
    291
    292static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
    293	F(19200000, P_BI_TCXO, 1, 0, 0),
    294	F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
    295	F(50000000, P_GPLL0_OUT_ODD, 4, 0, 0),
    296	F(100000000, P_GPLL0_OUT_ODD, 2, 0, 0),
    297	F(200000000, P_GPLL0_OUT_ODD, 1, 0, 0),
    298	{ }
    299};
    300
    301static struct clk_rcg2 gcc_gp1_clk_src = {
    302	.cmd_rcgr = 0x37004,
    303	.mnd_width = 8,
    304	.hid_width = 5,
    305	.parent_map = gcc_parent_map_5,
    306	.freq_tbl = ftbl_gcc_gp1_clk_src,
    307	.clkr.hw.init = &(struct clk_init_data){
    308		.name = "gcc_gp1_clk_src",
    309		.parent_data = gcc_parent_data_5,
    310		.num_parents = ARRAY_SIZE(gcc_parent_data_5),
    311		.ops = &clk_rcg2_ops,
    312	},
    313};
    314
    315static struct clk_rcg2 gcc_gp2_clk_src = {
    316	.cmd_rcgr = 0x38004,
    317	.mnd_width = 8,
    318	.hid_width = 5,
    319	.parent_map = gcc_parent_map_5,
    320	.freq_tbl = ftbl_gcc_gp1_clk_src,
    321	.clkr.hw.init = &(struct clk_init_data){
    322		.name = "gcc_gp2_clk_src",
    323		.parent_data = gcc_parent_data_5,
    324		.num_parents = ARRAY_SIZE(gcc_parent_data_5),
    325		.ops = &clk_rcg2_ops,
    326	},
    327};
    328
    329static struct clk_rcg2 gcc_gp3_clk_src = {
    330	.cmd_rcgr = 0x39004,
    331	.mnd_width = 8,
    332	.hid_width = 5,
    333	.parent_map = gcc_parent_map_5,
    334	.freq_tbl = ftbl_gcc_gp1_clk_src,
    335	.clkr.hw.init = &(struct clk_init_data){
    336		.name = "gcc_gp3_clk_src",
    337		.parent_data = gcc_parent_data_5,
    338		.num_parents = ARRAY_SIZE(gcc_parent_data_5),
    339		.ops = &clk_rcg2_ops,
    340	},
    341};
    342
    343static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
    344	F(19200000, P_BI_TCXO, 1, 0, 0),
    345	F(60000000, P_GPLL0_OUT_EVEN, 5, 0, 0),
    346	{ }
    347};
    348
    349static struct clk_rcg2 gcc_pdm2_clk_src = {
    350	.cmd_rcgr = 0x23010,
    351	.mnd_width = 0,
    352	.hid_width = 5,
    353	.parent_map = gcc_parent_map_1,
    354	.freq_tbl = ftbl_gcc_pdm2_clk_src,
    355	.clkr.hw.init = &(struct clk_init_data){
    356		.name = "gcc_pdm2_clk_src",
    357		.parent_data = gcc_parent_data_1,
    358		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
    359		.ops = &clk_rcg2_ops,
    360	},
    361};
    362
    363static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
    364	F(7372800, P_GPLL0_OUT_EVEN, 1, 384, 15625),
    365	F(14745600, P_GPLL0_OUT_EVEN, 1, 768, 15625),
    366	F(19200000, P_BI_TCXO, 1, 0, 0),
    367	F(29491200, P_GPLL0_OUT_EVEN, 1, 1536, 15625),
    368	F(32000000, P_GPLL0_OUT_EVEN, 1, 8, 75),
    369	F(48000000, P_GPLL0_OUT_EVEN, 1, 4, 25),
    370	F(64000000, P_GPLL0_OUT_EVEN, 1, 16, 75),
    371	F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
    372	F(80000000, P_GPLL0_OUT_EVEN, 1, 4, 15),
    373	F(96000000, P_GPLL0_OUT_EVEN, 1, 8, 25),
    374	F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
    375	F(102400000, P_GPLL0_OUT_EVEN, 1, 128, 375),
    376	F(112000000, P_GPLL0_OUT_EVEN, 1, 28, 75),
    377	F(117964800, P_GPLL0_OUT_EVEN, 1, 6144, 15625),
    378	F(120000000, P_GPLL0_OUT_EVEN, 2.5, 0, 0),
    379	F(128000000, P_GPLL6_OUT_EVEN, 3, 0, 0),
    380	{ }
    381};
    382
    383static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
    384	.name = "gcc_qupv3_wrap0_s0_clk_src",
    385	.parent_data = gcc_parent_data_0,
    386	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
    387	.ops = &clk_rcg2_ops,
    388};
    389
    390static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
    391	.cmd_rcgr = 0x21148,
    392	.mnd_width = 16,
    393	.hid_width = 5,
    394	.parent_map = gcc_parent_map_0,
    395	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    396	.clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
    397};
    398
    399static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
    400	.name = "gcc_qupv3_wrap0_s1_clk_src",
    401	.parent_data = gcc_parent_data_0,
    402	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
    403	.ops = &clk_rcg2_ops,
    404};
    405
    406static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
    407	.cmd_rcgr = 0x21278,
    408	.mnd_width = 16,
    409	.hid_width = 5,
    410	.parent_map = gcc_parent_map_0,
    411	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    412	.clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
    413};
    414
    415static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
    416	.name = "gcc_qupv3_wrap0_s2_clk_src",
    417	.parent_data = gcc_parent_data_0,
    418	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
    419	.ops = &clk_rcg2_ops,
    420};
    421
    422static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
    423	.cmd_rcgr = 0x213a8,
    424	.mnd_width = 16,
    425	.hid_width = 5,
    426	.parent_map = gcc_parent_map_0,
    427	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    428	.clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
    429};
    430
    431static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
    432	.name = "gcc_qupv3_wrap0_s3_clk_src",
    433	.parent_data = gcc_parent_data_0,
    434	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
    435	.ops = &clk_rcg2_ops,
    436};
    437
    438static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
    439	.cmd_rcgr = 0x214d8,
    440	.mnd_width = 16,
    441	.hid_width = 5,
    442	.parent_map = gcc_parent_map_0,
    443	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    444	.clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
    445};
    446
    447static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
    448	.name = "gcc_qupv3_wrap0_s4_clk_src",
    449	.parent_data = gcc_parent_data_0,
    450	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
    451	.ops = &clk_rcg2_ops,
    452};
    453
    454static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
    455	.cmd_rcgr = 0x21608,
    456	.mnd_width = 16,
    457	.hid_width = 5,
    458	.parent_map = gcc_parent_map_0,
    459	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    460	.clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
    461};
    462
    463static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
    464	.name = "gcc_qupv3_wrap0_s5_clk_src",
    465	.parent_data = gcc_parent_data_0,
    466	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
    467	.ops = &clk_rcg2_ops,
    468};
    469
    470static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
    471	.cmd_rcgr = 0x21738,
    472	.mnd_width = 16,
    473	.hid_width = 5,
    474	.parent_map = gcc_parent_map_0,
    475	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    476	.clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
    477};
    478
    479static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
    480	.name = "gcc_qupv3_wrap1_s0_clk_src",
    481	.parent_data = gcc_parent_data_0,
    482	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
    483	.ops = &clk_rcg2_ops,
    484};
    485
    486static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
    487	.cmd_rcgr = 0x22018,
    488	.mnd_width = 16,
    489	.hid_width = 5,
    490	.parent_map = gcc_parent_map_0,
    491	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    492	.clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
    493};
    494
    495static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
    496	.name = "gcc_qupv3_wrap1_s1_clk_src",
    497	.parent_data = gcc_parent_data_0,
    498	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
    499	.ops = &clk_rcg2_ops,
    500};
    501
    502static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
    503	.cmd_rcgr = 0x22148,
    504	.mnd_width = 16,
    505	.hid_width = 5,
    506	.parent_map = gcc_parent_map_0,
    507	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    508	.clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
    509};
    510
    511static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {
    512	.name = "gcc_qupv3_wrap1_s2_clk_src",
    513	.parent_data = gcc_parent_data_0,
    514	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
    515	.ops = &clk_rcg2_ops,
    516};
    517
    518static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
    519	.cmd_rcgr = 0x22278,
    520	.mnd_width = 16,
    521	.hid_width = 5,
    522	.parent_map = gcc_parent_map_0,
    523	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    524	.clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,
    525};
    526
    527static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
    528	.name = "gcc_qupv3_wrap1_s3_clk_src",
    529	.parent_data = gcc_parent_data_0,
    530	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
    531	.ops = &clk_rcg2_ops,
    532};
    533
    534static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
    535	.cmd_rcgr = 0x223a8,
    536	.mnd_width = 16,
    537	.hid_width = 5,
    538	.parent_map = gcc_parent_map_0,
    539	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    540	.clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
    541};
    542
    543static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
    544	.name = "gcc_qupv3_wrap1_s4_clk_src",
    545	.parent_data = gcc_parent_data_0,
    546	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
    547	.ops = &clk_rcg2_ops,
    548};
    549
    550static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
    551	.cmd_rcgr = 0x224d8,
    552	.mnd_width = 16,
    553	.hid_width = 5,
    554	.parent_map = gcc_parent_map_0,
    555	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    556	.clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
    557};
    558
    559static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
    560	.name = "gcc_qupv3_wrap1_s5_clk_src",
    561	.parent_data = gcc_parent_data_0,
    562	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
    563	.ops = &clk_rcg2_ops,
    564};
    565
    566static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
    567	.cmd_rcgr = 0x22608,
    568	.mnd_width = 16,
    569	.hid_width = 5,
    570	.parent_map = gcc_parent_map_0,
    571	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
    572	.clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
    573};
    574
    575static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {
    576	F(144000, P_BI_TCXO, 16, 3, 25),
    577	F(400000, P_BI_TCXO, 12, 1, 4),
    578	F(19200000, P_BI_TCXO, 1, 0, 0),
    579	F(20000000, P_GPLL0_OUT_EVEN, 5, 1, 3),
    580	F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
    581	F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
    582	F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
    583	F(192000000, P_GPLL6_OUT_EVEN, 2, 0, 0),
    584	F(384000000, P_GPLL6_OUT_EVEN, 1, 0, 0),
    585	{ }
    586};
    587
    588static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {
    589	.cmd_rcgr = 0x4b024,
    590	.mnd_width = 8,
    591	.hid_width = 5,
    592	.parent_map = gcc_parent_map_7,
    593	.freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,
    594	.clkr.hw.init = &(struct clk_init_data){
    595		.name = "gcc_sdcc1_apps_clk_src",
    596		.parent_data = gcc_parent_data_7,
    597		.num_parents = ARRAY_SIZE(gcc_parent_data_7),
    598		.ops = &clk_rcg2_ops,
    599	},
    600};
    601
    602static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = {
    603	F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
    604	F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0),
    605	F(300000000, P_GPLL0_OUT_EVEN, 1, 0, 0),
    606	{ }
    607};
    608
    609static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = {
    610	.cmd_rcgr = 0x4b00c,
    611	.mnd_width = 0,
    612	.hid_width = 5,
    613	.parent_map = gcc_parent_map_1,
    614	.freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src,
    615	.clkr.hw.init = &(struct clk_init_data){
    616		.name = "gcc_sdcc1_ice_core_clk_src",
    617		.parent_data = gcc_parent_data_1,
    618		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
    619		.ops = &clk_rcg2_ops,
    620	},
    621};
    622
    623static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
    624	F(400000, P_BI_TCXO, 12, 1, 4),
    625	F(9600000, P_BI_TCXO, 2, 0, 0),
    626	F(19200000, P_BI_TCXO, 1, 0, 0),
    627	F(25000000, P_GPLL0_OUT_ODD, 8, 0, 0),
    628	F(50000000, P_GPLL0_OUT_ODD, 4, 0, 0),
    629	F(100000000, P_GPLL0_OUT_ODD, 2, 0, 0),
    630	F(202000000, P_GPLL7_OUT_MAIN, 4, 0, 0),
    631	{ }
    632};
    633
    634static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
    635	.cmd_rcgr = 0x2000c,
    636	.mnd_width = 8,
    637	.hid_width = 5,
    638	.parent_map = gcc_parent_map_8,
    639	.freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
    640	.clkr.hw.init = &(struct clk_init_data){
    641		.name = "gcc_sdcc2_apps_clk_src",
    642		.parent_data = gcc_parent_data_8,
    643		.num_parents = ARRAY_SIZE(gcc_parent_data_8),
    644		.ops = &clk_rcg2_floor_ops,
    645	},
    646};
    647
    648static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
    649	F(25000000, P_GPLL0_OUT_ODD, 8, 0, 0),
    650	F(50000000, P_GPLL0_OUT_ODD, 4, 0, 0),
    651	F(100000000, P_GPLL0_OUT_ODD, 2, 0, 0),
    652	F(200000000, P_GPLL0_OUT_ODD, 1, 0, 0),
    653	F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
    654	{ }
    655};
    656
    657static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
    658	.cmd_rcgr = 0x3a01c,
    659	.mnd_width = 8,
    660	.hid_width = 5,
    661	.parent_map = gcc_parent_map_4,
    662	.freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
    663	.clkr.hw.init = &(struct clk_init_data){
    664		.name = "gcc_ufs_phy_axi_clk_src",
    665		.parent_data = gcc_parent_data_4,
    666		.num_parents = ARRAY_SIZE(gcc_parent_data_4),
    667		.ops = &clk_rcg2_ops,
    668	},
    669};
    670
    671static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
    672	F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
    673	F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
    674	F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0),
    675	F(300000000, P_GPLL0_OUT_EVEN, 1, 0, 0),
    676	{ }
    677};
    678
    679static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
    680	.cmd_rcgr = 0x3a048,
    681	.mnd_width = 0,
    682	.hid_width = 5,
    683	.parent_map = gcc_parent_map_1,
    684	.freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
    685	.clkr.hw.init = &(struct clk_init_data){
    686		.name = "gcc_ufs_phy_ice_core_clk_src",
    687		.parent_data = gcc_parent_data_1,
    688		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
    689		.ops = &clk_rcg2_ops,
    690	},
    691};
    692
    693static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = {
    694	F(9600000, P_BI_TCXO, 2, 0, 0),
    695	F(19200000, P_BI_TCXO, 1, 0, 0),
    696	{ }
    697};
    698
    699static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
    700	.cmd_rcgr = 0x3a0b0,
    701	.mnd_width = 0,
    702	.hid_width = 5,
    703	.freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src,
    704	.clkr.hw.init = &(struct clk_init_data){
    705		.name = "gcc_ufs_phy_phy_aux_clk_src",
    706		.parent_data = &(const struct clk_parent_data){
    707			.fw_name = "bi_tcxo",
    708		},
    709		.num_parents = 1,
    710		.ops = &clk_rcg2_ops,
    711	},
    712};
    713
    714static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_core_clk_src[] = {
    715	F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
    716	F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
    717	F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0),
    718	{ }
    719};
    720
    721static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
    722	.cmd_rcgr = 0x3a060,
    723	.mnd_width = 0,
    724	.hid_width = 5,
    725	.parent_map = gcc_parent_map_1,
    726	.freq_tbl = ftbl_gcc_ufs_phy_unipro_core_clk_src,
    727	.clkr.hw.init = &(struct clk_init_data){
    728		.name = "gcc_ufs_phy_unipro_core_clk_src",
    729		.parent_data = gcc_parent_data_1,
    730		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
    731		.ops = &clk_rcg2_ops,
    732	},
    733};
    734
    735static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
    736	F(66666667, P_GPLL0_OUT_ODD, 3, 0, 0),
    737	F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
    738	F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
    739	F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
    740	{ }
    741};
    742
    743static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
    744	.cmd_rcgr = 0x1a01c,
    745	.mnd_width = 8,
    746	.hid_width = 5,
    747	.parent_map = gcc_parent_map_4,
    748	.freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
    749	.clkr.hw.init = &(struct clk_init_data){
    750		.name = "gcc_usb30_prim_master_clk_src",
    751		.parent_data = gcc_parent_data_4,
    752		.num_parents = ARRAY_SIZE(gcc_parent_data_4),
    753		.ops = &clk_rcg2_ops,
    754	},
    755};
    756
    757static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {
    758	F(19200000, P_BI_TCXO, 1, 0, 0),
    759	{ }
    760};
    761
    762static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
    763	.cmd_rcgr = 0x1a034,
    764	.mnd_width = 0,
    765	.hid_width = 5,
    766	.freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
    767	.clkr.hw.init = &(struct clk_init_data){
    768		.name = "gcc_usb30_prim_mock_utmi_clk_src",
    769		.parent_data = &(const struct clk_parent_data){
    770			.fw_name = "bi_tcxo",
    771		},
    772		.num_parents = 1,
    773		.ops = &clk_rcg2_ops,
    774	},
    775};
    776
    777static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
    778	.cmd_rcgr = 0x1a060,
    779	.mnd_width = 0,
    780	.hid_width = 5,
    781	.parent_map = gcc_parent_map_6,
    782	.freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
    783	.clkr.hw.init = &(struct clk_init_data){
    784		.name = "gcc_usb3_prim_phy_aux_clk_src",
    785		.parent_data = gcc_parent_data_6,
    786		.num_parents = ARRAY_SIZE(gcc_parent_data_6),
    787		.ops = &clk_rcg2_ops,
    788	},
    789};
    790
    791static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
    792	.halt_reg = 0x3e014,
    793	.halt_check = BRANCH_HALT_DELAY,
    794	.hwcg_reg = 0x3e014,
    795	.hwcg_bit = 1,
    796	.clkr = {
    797		.enable_reg = 0x3e014,
    798		.enable_mask = BIT(0),
    799		.hw.init = &(struct clk_init_data){
    800			.name = "gcc_aggre_ufs_phy_axi_clk",
    801			.parent_hws = (const struct clk_hw*[]){
    802				&gcc_ufs_phy_axi_clk_src.clkr.hw,
    803			},
    804			.num_parents = 1,
    805			.flags = CLK_SET_RATE_PARENT,
    806			.ops = &clk_branch2_ops,
    807		},
    808	},
    809};
    810
    811static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = {
    812	.halt_reg = 0x3e014,
    813	.halt_check = BRANCH_HALT,
    814	.hwcg_reg = 0x3e014,
    815	.hwcg_bit = 1,
    816	.clkr = {
    817		.enable_reg = 0x3e014,
    818		.enable_mask = BIT(1),
    819		.hw.init = &(struct clk_init_data){
    820			.name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk",
    821			.parent_hws = (const struct clk_hw*[]){
    822				&gcc_ufs_phy_axi_clk_src.clkr.hw,
    823			},
    824			.num_parents = 1,
    825			.flags = CLK_SET_RATE_PARENT,
    826			.ops = &clk_branch2_ops,
    827		},
    828	},
    829};
    830
    831static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = {
    832	.halt_reg = 0x3e014,
    833	.halt_check = BRANCH_HALT,
    834	.hwcg_reg = 0x3e014,
    835	.hwcg_bit = 1,
    836	.clkr = {
    837		.enable_reg = 0x3e014,
    838		.enable_mask = BIT(1),
    839		.hw.init = &(struct clk_init_data){
    840			.name = "gcc_ufs_phy_axi_hw_ctl_clk",
    841			.parent_hws = (const struct clk_hw*[]){
    842				&gcc_ufs_phy_axi_clk_src.clkr.hw,
    843			},
    844			.num_parents = 1,
    845			.flags = CLK_SET_RATE_PARENT,
    846			.ops = &clk_branch2_ops,
    847		},
    848	},
    849};
    850
    851static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
    852	.halt_reg = 0x3e010,
    853	.halt_check = BRANCH_HALT,
    854	.hwcg_reg = 0x3e010,
    855	.hwcg_bit = 1,
    856	.clkr = {
    857		.enable_reg = 0x3e010,
    858		.enable_mask = BIT(0),
    859		.hw.init = &(struct clk_init_data){
    860			.name = "gcc_aggre_usb3_prim_axi_clk",
    861			.parent_hws = (const struct clk_hw*[]){
    862				&gcc_usb30_prim_master_clk_src.clkr.hw,
    863			},
    864			.num_parents = 1,
    865			.flags = CLK_SET_RATE_PARENT,
    866			.ops = &clk_branch2_ops,
    867		},
    868	},
    869};
    870
    871static struct clk_branch gcc_boot_rom_ahb_clk = {
    872	.halt_reg = 0x26004,
    873	.halt_check = BRANCH_HALT_VOTED,
    874	.hwcg_reg = 0x26004,
    875	.hwcg_bit = 1,
    876	.clkr = {
    877		.enable_reg = 0x52000,
    878		.enable_mask = BIT(28),
    879		.hw.init = &(struct clk_init_data){
    880			.name = "gcc_boot_rom_ahb_clk",
    881			.ops = &clk_branch2_ops,
    882		},
    883	},
    884};
    885
    886static struct clk_branch gcc_camera_ahb_clk = {
    887	.halt_reg = 0x17008,
    888	.halt_check = BRANCH_HALT,
    889	.hwcg_reg = 0x17008,
    890	.hwcg_bit = 1,
    891	.clkr = {
    892		.enable_reg = 0x17008,
    893		.enable_mask = BIT(0),
    894		.hw.init = &(struct clk_init_data){
    895			.name = "gcc_camera_ahb_clk",
    896			.flags = CLK_IS_CRITICAL,
    897			.ops = &clk_branch2_ops,
    898		},
    899	},
    900};
    901
    902static struct clk_branch gcc_camera_axi_clk = {
    903	.halt_reg = 0x17018,
    904	.halt_check = BRANCH_HALT,
    905	.hwcg_reg = 0x17018,
    906	.hwcg_bit = 1,
    907	.clkr = {
    908		.enable_reg = 0x17018,
    909		.enable_mask = BIT(0),
    910		.hw.init = &(struct clk_init_data){
    911			.name = "gcc_camera_axi_clk",
    912			.ops = &clk_branch2_ops,
    913		},
    914	},
    915};
    916
    917static struct clk_branch gcc_camera_throttle_nrt_axi_clk = {
    918	.halt_reg = 0x17078,
    919	.halt_check = BRANCH_VOTED,
    920	.hwcg_reg = 0x17078,
    921	.hwcg_bit = 1,
    922	.clkr = {
    923		.enable_reg = 0x17078,
    924		.enable_mask = BIT(0),
    925		.hw.init = &(struct clk_init_data){
    926			.name = "gcc_camera_throttle_nrt_axi_clk",
    927			.ops = &clk_branch2_ops,
    928		},
    929	},
    930};
    931
    932static struct clk_branch gcc_camera_throttle_rt_axi_clk = {
    933	.halt_reg = 0x17024,
    934	.halt_check = BRANCH_VOTED,
    935	.hwcg_reg = 0x17024,
    936	.hwcg_bit = 1,
    937	.clkr = {
    938		.enable_reg = 0x17024,
    939		.enable_mask = BIT(0),
    940		.hw.init = &(struct clk_init_data){
    941			.name = "gcc_camera_throttle_rt_axi_clk",
    942			.ops = &clk_branch2_ops,
    943		},
    944	},
    945};
    946
    947static struct clk_branch gcc_camera_xo_clk = {
    948	.halt_reg = 0x17030,
    949	.halt_check = BRANCH_HALT,
    950	.clkr = {
    951		.enable_reg = 0x17030,
    952		.enable_mask = BIT(0),
    953		.hw.init = &(struct clk_init_data){
    954			.name = "gcc_camera_xo_clk",
    955			.flags = CLK_IS_CRITICAL,
    956			.ops = &clk_branch2_ops,
    957		},
    958	},
    959};
    960
    961static struct clk_branch gcc_ce1_ahb_clk = {
    962	.halt_reg = 0x2b00c,
    963	.halt_check = BRANCH_HALT_VOTED,
    964	.hwcg_reg = 0x2b00c,
    965	.hwcg_bit = 1,
    966	.clkr = {
    967		.enable_reg = 0x52008,
    968		.enable_mask = BIT(3),
    969		.hw.init = &(struct clk_init_data){
    970			.name = "gcc_ce1_ahb_clk",
    971			.ops = &clk_branch2_ops,
    972		},
    973	},
    974};
    975
    976static struct clk_branch gcc_ce1_axi_clk = {
    977	.halt_reg = 0x2b008,
    978	.halt_check = BRANCH_HALT_VOTED,
    979	.clkr = {
    980		.enable_reg = 0x52008,
    981		.enable_mask = BIT(2),
    982		.hw.init = &(struct clk_init_data){
    983			.name = "gcc_ce1_axi_clk",
    984			.ops = &clk_branch2_ops,
    985		},
    986	},
    987};
    988
    989static struct clk_branch gcc_ce1_clk = {
    990	.halt_reg = 0x2b004,
    991	.halt_check = BRANCH_HALT_VOTED,
    992	.clkr = {
    993		.enable_reg = 0x52008,
    994		.enable_mask = BIT(1),
    995		.hw.init = &(struct clk_init_data){
    996			.name = "gcc_ce1_clk",
    997			.ops = &clk_branch2_ops,
    998		},
    999	},
   1000};
   1001
   1002static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
   1003	.halt_reg = 0x1101c,
   1004	.halt_check = BRANCH_HALT,
   1005	.hwcg_reg = 0x1101c,
   1006	.hwcg_bit = 1,
   1007	.clkr = {
   1008		.enable_reg = 0x1101c,
   1009		.enable_mask = BIT(0),
   1010		.hw.init = &(struct clk_init_data){
   1011			.name = "gcc_cfg_noc_usb3_prim_axi_clk",
   1012			.parent_hws = (const struct clk_hw*[]){
   1013				&gcc_usb30_prim_master_clk_src.clkr.hw,
   1014			},
   1015			.num_parents = 1,
   1016			.flags = CLK_SET_RATE_PARENT,
   1017			.ops = &clk_branch2_ops,
   1018		},
   1019	},
   1020};
   1021
   1022static struct clk_branch gcc_cpuss_ahb_clk = {
   1023	.halt_reg = 0x30000,
   1024	.halt_check = BRANCH_HALT_VOTED,
   1025	.hwcg_reg = 0x30000,
   1026	.hwcg_bit = 1,
   1027	.clkr = {
   1028		.enable_reg = 0x52008,
   1029		.enable_mask = BIT(4),
   1030		.hw.init = &(struct clk_init_data){
   1031			.name = "gcc_cpuss_ahb_clk",
   1032			.parent_hws = (const struct clk_hw*[]){
   1033				&gcc_cpuss_ahb_clk_src.clkr.hw,
   1034			},
   1035			.num_parents = 1,
   1036			.flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
   1037			.ops = &clk_branch2_ops,
   1038		},
   1039	},
   1040};
   1041
   1042static struct clk_branch gcc_cpuss_gnoc_clk = {
   1043	.halt_reg = 0x30004,
   1044	.halt_check = BRANCH_HALT_VOTED,
   1045	.hwcg_reg = 0x30004,
   1046	.hwcg_bit = 1,
   1047	.clkr = {
   1048		.enable_reg = 0x52008,
   1049		.enable_mask = BIT(5),
   1050		.hw.init = &(struct clk_init_data){
   1051			.name = "gcc_cpuss_gnoc_clk",
   1052			.flags = CLK_IS_CRITICAL,
   1053			.ops = &clk_branch2_ops,
   1054		},
   1055	},
   1056};
   1057
   1058static struct clk_branch gcc_cpuss_rbcpr_clk = {
   1059	.halt_reg = 0x30008,
   1060	.halt_check = BRANCH_HALT,
   1061	.clkr = {
   1062		.enable_reg = 0x30008,
   1063		.enable_mask = BIT(0),
   1064		.hw.init = &(struct clk_init_data){
   1065			.name = "gcc_cpuss_rbcpr_clk",
   1066			.ops = &clk_branch2_ops,
   1067		},
   1068	},
   1069};
   1070
   1071static struct clk_branch gcc_ddrss_gpu_axi_clk = {
   1072	.halt_reg = 0x2d038,
   1073	.halt_check = BRANCH_VOTED,
   1074	.hwcg_reg = 0x2d038,
   1075	.hwcg_bit = 1,
   1076	.clkr = {
   1077		.enable_reg = 0x2d038,
   1078		.enable_mask = BIT(0),
   1079		.hw.init = &(struct clk_init_data){
   1080			.name = "gcc_ddrss_gpu_axi_clk",
   1081			.ops = &clk_branch2_ops,
   1082		},
   1083	},
   1084};
   1085
   1086static struct clk_branch gcc_disp_ahb_clk = {
   1087	.halt_reg = 0x1700c,
   1088	.halt_check = BRANCH_HALT,
   1089	.hwcg_reg = 0x1700c,
   1090	.hwcg_bit = 1,
   1091	.clkr = {
   1092		.enable_reg = 0x1700c,
   1093		.enable_mask = BIT(0),
   1094		.hw.init = &(struct clk_init_data){
   1095			.name = "gcc_disp_ahb_clk",
   1096			.flags = CLK_IS_CRITICAL,
   1097			.ops = &clk_branch2_ops,
   1098		},
   1099	},
   1100};
   1101
   1102static struct clk_branch gcc_disp_axi_clk = {
   1103	.halt_reg = 0x1701c,
   1104	.halt_check = BRANCH_HALT,
   1105	.hwcg_reg = 0x1701c,
   1106	.hwcg_bit = 1,
   1107	.clkr = {
   1108		.enable_reg = 0x1701c,
   1109		.enable_mask = BIT(0),
   1110		.hw.init = &(struct clk_init_data){
   1111			.name = "gcc_disp_axi_clk",
   1112			.ops = &clk_branch2_ops,
   1113		},
   1114	},
   1115};
   1116
   1117static struct clk_branch gcc_disp_cc_sleep_clk = {
   1118	.halt_reg = 0x17074,
   1119	.halt_check = BRANCH_HALT_DELAY,
   1120	.hwcg_reg = 0x17074,
   1121	.hwcg_bit = 1,
   1122	.clkr = {
   1123		.enable_reg = 0x17074,
   1124		.enable_mask = BIT(0),
   1125		.hw.init = &(struct clk_init_data){
   1126			.name = "gcc_disp_cc_sleep_clk",
   1127			.ops = &clk_branch2_ops,
   1128		},
   1129	},
   1130};
   1131
   1132static struct clk_branch gcc_disp_cc_xo_clk = {
   1133	.halt_reg = 0x17070,
   1134	.halt_check = BRANCH_HALT,
   1135	.hwcg_reg = 0x17070,
   1136	.hwcg_bit = 1,
   1137	.clkr = {
   1138		.enable_reg = 0x17070,
   1139		.enable_mask = BIT(0),
   1140		.hw.init = &(struct clk_init_data){
   1141			.name = "gcc_disp_cc_xo_clk",
   1142			.flags = CLK_IS_CRITICAL,
   1143			.ops = &clk_branch2_ops,
   1144		},
   1145	},
   1146};
   1147
   1148static struct clk_branch gcc_disp_gpll0_clk = {
   1149	.halt_check = BRANCH_HALT_DELAY,
   1150	.clkr = {
   1151		.enable_reg = 0x52000,
   1152		.enable_mask = BIT(2),
   1153		.hw.init = &(struct clk_init_data){
   1154			.name = "gcc_disp_gpll0_clk",
   1155			.parent_hws = (const struct clk_hw*[]){
   1156				&gpll0.clkr.hw,
   1157			},
   1158			.num_parents = 1,
   1159			.ops = &clk_branch2_ops,
   1160		},
   1161	},
   1162};
   1163
   1164static struct clk_branch gcc_disp_throttle_axi_clk = {
   1165	.halt_reg = 0x17028,
   1166	.halt_check = BRANCH_HALT,
   1167	.hwcg_reg = 0x17028,
   1168	.hwcg_bit = 1,
   1169	.clkr = {
   1170		.enable_reg = 0x17028,
   1171		.enable_mask = BIT(0),
   1172		.hw.init = &(struct clk_init_data){
   1173			.name = "gcc_disp_throttle_axi_clk",
   1174			.ops = &clk_branch2_ops,
   1175		},
   1176	},
   1177};
   1178
   1179static struct clk_branch gcc_disp_xo_clk = {
   1180	.halt_reg = 0x17034,
   1181	.halt_check = BRANCH_HALT,
   1182	.clkr = {
   1183		.enable_reg = 0x17034,
   1184		.enable_mask = BIT(0),
   1185		.hw.init = &(struct clk_init_data){
   1186			.name = "gcc_disp_xo_clk",
   1187			.ops = &clk_branch2_ops,
   1188		},
   1189	},
   1190};
   1191
   1192static struct clk_branch gcc_gp1_clk = {
   1193	.halt_reg = 0x37000,
   1194	.halt_check = BRANCH_HALT,
   1195	.clkr = {
   1196		.enable_reg = 0x37000,
   1197		.enable_mask = BIT(0),
   1198		.hw.init = &(struct clk_init_data){
   1199			.name = "gcc_gp1_clk",
   1200			.parent_hws = (const struct clk_hw*[]){
   1201				&gcc_gp1_clk_src.clkr.hw,
   1202			},
   1203			.num_parents = 1,
   1204			.flags = CLK_SET_RATE_PARENT,
   1205			.ops = &clk_branch2_ops,
   1206		},
   1207	},
   1208};
   1209
   1210static struct clk_branch gcc_gp2_clk = {
   1211	.halt_reg = 0x38000,
   1212	.halt_check = BRANCH_HALT,
   1213	.clkr = {
   1214		.enable_reg = 0x38000,
   1215		.enable_mask = BIT(0),
   1216		.hw.init = &(struct clk_init_data){
   1217			.name = "gcc_gp2_clk",
   1218			.parent_hws = (const struct clk_hw*[]){
   1219				&gcc_gp2_clk_src.clkr.hw,
   1220			},
   1221			.num_parents = 1,
   1222			.flags = CLK_SET_RATE_PARENT,
   1223			.ops = &clk_branch2_ops,
   1224		},
   1225	},
   1226};
   1227
   1228static struct clk_branch gcc_gp3_clk = {
   1229	.halt_reg = 0x39000,
   1230	.halt_check = BRANCH_HALT,
   1231	.clkr = {
   1232		.enable_reg = 0x39000,
   1233		.enable_mask = BIT(0),
   1234		.hw.init = &(struct clk_init_data){
   1235			.name = "gcc_gp3_clk",
   1236			.parent_hws = (const struct clk_hw*[]){
   1237				&gcc_gp3_clk_src.clkr.hw,
   1238			},
   1239			.num_parents = 1,
   1240			.flags = CLK_SET_RATE_PARENT,
   1241			.ops = &clk_branch2_ops,
   1242		},
   1243	},
   1244};
   1245
   1246static struct clk_branch gcc_gpu_cfg_ahb_clk = {
   1247	.halt_reg = 0x45004,
   1248	.halt_check = BRANCH_HALT,
   1249	.hwcg_reg = 0x45004,
   1250	.hwcg_bit = 1,
   1251	.clkr = {
   1252		.enable_reg = 0x45004,
   1253		.enable_mask = BIT(0),
   1254		.hw.init = &(struct clk_init_data){
   1255			.name = "gcc_gpu_cfg_ahb_clk",
   1256			.flags = CLK_IS_CRITICAL,
   1257			.ops = &clk_branch2_ops,
   1258		},
   1259	},
   1260};
   1261
   1262static struct clk_branch gcc_gpu_gpll0_clk = {
   1263	.halt_check = BRANCH_HALT_DELAY,
   1264	.clkr = {
   1265		.enable_reg = 0x52008,
   1266		.enable_mask = BIT(7),
   1267		.hw.init = &(struct clk_init_data){
   1268			.name = "gcc_gpu_gpll0_clk",
   1269			.parent_hws = (const struct clk_hw*[]){
   1270				&gpll0.clkr.hw,
   1271			},
   1272			.num_parents = 1,
   1273			.ops = &clk_branch2_ops,
   1274		},
   1275	},
   1276};
   1277
   1278static struct clk_branch gcc_gpu_gpll0_div_clk = {
   1279	.halt_check = BRANCH_HALT_DELAY,
   1280	.clkr = {
   1281		.enable_reg = 0x52008,
   1282		.enable_mask = BIT(8),
   1283		.hw.init = &(struct clk_init_data){
   1284			.name = "gcc_gpu_gpll0_div_clk",
   1285			.parent_hws = (const struct clk_hw*[]){
   1286				&gcc_gpu_gpll0_main_div_clk_src.clkr.hw,
   1287			},
   1288			.num_parents = 1,
   1289			.ops = &clk_branch2_ops,
   1290		},
   1291	},
   1292};
   1293
   1294static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
   1295	.halt_reg = 0x4500c,
   1296	.halt_check = BRANCH_VOTED,
   1297	.hwcg_reg = 0x4500c,
   1298	.hwcg_bit = 1,
   1299	.clkr = {
   1300		.enable_reg = 0x4500c,
   1301		.enable_mask = BIT(0),
   1302		.hw.init = &(struct clk_init_data){
   1303			.name = "gcc_gpu_memnoc_gfx_clk",
   1304			.ops = &clk_branch2_ops,
   1305		},
   1306	},
   1307};
   1308
   1309static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
   1310	.halt_reg = 0x45014,
   1311	.halt_check = BRANCH_HALT,
   1312	.hwcg_reg = 0x45014,
   1313	.hwcg_bit = 1,
   1314	.clkr = {
   1315		.enable_reg = 0x45014,
   1316		.enable_mask = BIT(0),
   1317		.hw.init = &(struct clk_init_data){
   1318			.name = "gcc_gpu_snoc_dvm_gfx_clk",
   1319			.ops = &clk_branch2_ops,
   1320		},
   1321	},
   1322};
   1323
   1324static struct clk_branch gcc_npu_axi_clk = {
   1325	.halt_reg = 0x4c008,
   1326	.halt_check = BRANCH_VOTED,
   1327	.hwcg_reg = 0x4c008,
   1328	.hwcg_bit = 1,
   1329	.clkr = {
   1330		.enable_reg = 0x4c008,
   1331		.enable_mask = BIT(0),
   1332		.hw.init = &(struct clk_init_data){
   1333			.name = "gcc_npu_axi_clk",
   1334			.ops = &clk_branch2_ops,
   1335		},
   1336	},
   1337};
   1338
   1339static struct clk_branch gcc_npu_bwmon_axi_clk = {
   1340	.halt_reg = 0x4d004,
   1341	.halt_check = BRANCH_HALT_DELAY,
   1342	.hwcg_reg = 0x4d004,
   1343	.hwcg_bit = 1,
   1344	.clkr = {
   1345		.enable_reg = 0x4d004,
   1346		.enable_mask = BIT(0),
   1347		.hw.init = &(struct clk_init_data){
   1348			.name = "gcc_npu_bwmon_axi_clk",
   1349			.ops = &clk_branch2_ops,
   1350		},
   1351	},
   1352};
   1353
   1354static struct clk_branch gcc_npu_bwmon_dma_cfg_ahb_clk = {
   1355	.halt_reg = 0x4d008,
   1356	.halt_check = BRANCH_HALT,
   1357	.clkr = {
   1358		.enable_reg = 0x4d008,
   1359		.enable_mask = BIT(0),
   1360		.hw.init = &(struct clk_init_data){
   1361			.name = "gcc_npu_bwmon_dma_cfg_ahb_clk",
   1362			.ops = &clk_branch2_ops,
   1363		},
   1364	},
   1365};
   1366
   1367static struct clk_branch gcc_npu_bwmon_dsp_cfg_ahb_clk = {
   1368	.halt_reg = 0x4d00c,
   1369	.halt_check = BRANCH_HALT,
   1370	.clkr = {
   1371		.enable_reg = 0x4d00c,
   1372		.enable_mask = BIT(0),
   1373		.hw.init = &(struct clk_init_data){
   1374			.name = "gcc_npu_bwmon_dsp_cfg_ahb_clk",
   1375			.ops = &clk_branch2_ops,
   1376		},
   1377	},
   1378};
   1379
   1380static struct clk_branch gcc_npu_cfg_ahb_clk = {
   1381	.halt_reg = 0x4c004,
   1382	.halt_check = BRANCH_HALT,
   1383	.hwcg_reg = 0x4c004,
   1384	.hwcg_bit = 1,
   1385	.clkr = {
   1386		.enable_reg = 0x4c004,
   1387		.enable_mask = BIT(0),
   1388		.hw.init = &(struct clk_init_data){
   1389			.name = "gcc_npu_cfg_ahb_clk",
   1390			.flags = CLK_IS_CRITICAL,
   1391			.ops = &clk_branch2_ops,
   1392		},
   1393	},
   1394};
   1395
   1396static struct clk_branch gcc_npu_dma_clk = {
   1397	.halt_reg = 0x4c140,
   1398	.halt_check = BRANCH_VOTED,
   1399	.hwcg_reg = 0x4c140,
   1400	.hwcg_bit = 1,
   1401	.clkr = {
   1402		.enable_reg = 0x4c140,
   1403		.enable_mask = BIT(0),
   1404		.hw.init = &(struct clk_init_data){
   1405			.name = "gcc_npu_dma_clk",
   1406			.ops = &clk_branch2_ops,
   1407		},
   1408	},
   1409};
   1410
   1411static struct clk_branch gcc_npu_gpll0_clk = {
   1412	.halt_check = BRANCH_HALT_DELAY,
   1413	.clkr = {
   1414		.enable_reg = 0x52008,
   1415		.enable_mask = BIT(9),
   1416		.hw.init = &(struct clk_init_data){
   1417			.name = "gcc_npu_gpll0_clk",
   1418			.parent_hws = (const struct clk_hw*[]){
   1419				&gpll0.clkr.hw,
   1420			},
   1421			.num_parents = 1,
   1422			.ops = &clk_branch2_ops,
   1423		},
   1424	},
   1425};
   1426
   1427static struct clk_branch gcc_npu_gpll0_div_clk = {
   1428	.halt_check = BRANCH_HALT_DELAY,
   1429	.clkr = {
   1430		.enable_reg = 0x52008,
   1431		.enable_mask = BIT(10),
   1432		.hw.init = &(struct clk_init_data){
   1433			.name = "gcc_npu_gpll0_div_clk",
   1434			.parent_hws = (const struct clk_hw*[]){
   1435				&gcc_npu_pll0_main_div_clk_src.clkr.hw,
   1436			},
   1437			.num_parents = 1,
   1438			.ops = &clk_branch2_ops,
   1439		},
   1440	},
   1441};
   1442
   1443static struct clk_branch gcc_pdm2_clk = {
   1444	.halt_reg = 0x2300c,
   1445	.halt_check = BRANCH_HALT,
   1446	.clkr = {
   1447		.enable_reg = 0x2300c,
   1448		.enable_mask = BIT(0),
   1449		.hw.init = &(struct clk_init_data){
   1450			.name = "gcc_pdm2_clk",
   1451			.parent_hws = (const struct clk_hw*[]){
   1452				&gcc_pdm2_clk_src.clkr.hw,
   1453			},
   1454			.num_parents = 1,
   1455			.flags = CLK_SET_RATE_PARENT,
   1456			.ops = &clk_branch2_ops,
   1457		},
   1458	},
   1459};
   1460
   1461static struct clk_branch gcc_pdm_ahb_clk = {
   1462	.halt_reg = 0x23004,
   1463	.halt_check = BRANCH_HALT,
   1464	.hwcg_reg = 0x23004,
   1465	.hwcg_bit = 1,
   1466	.clkr = {
   1467		.enable_reg = 0x23004,
   1468		.enable_mask = BIT(0),
   1469		.hw.init = &(struct clk_init_data){
   1470			.name = "gcc_pdm_ahb_clk",
   1471			.ops = &clk_branch2_ops,
   1472		},
   1473	},
   1474};
   1475
   1476static struct clk_branch gcc_pdm_xo4_clk = {
   1477	.halt_reg = 0x23008,
   1478	.halt_check = BRANCH_HALT,
   1479	.clkr = {
   1480		.enable_reg = 0x23008,
   1481		.enable_mask = BIT(0),
   1482		.hw.init = &(struct clk_init_data){
   1483			.name = "gcc_pdm_xo4_clk",
   1484			.ops = &clk_branch2_ops,
   1485		},
   1486	},
   1487};
   1488
   1489static struct clk_branch gcc_prng_ahb_clk = {
   1490	.halt_reg = 0x24004,
   1491	.halt_check = BRANCH_HALT_VOTED,
   1492	.hwcg_reg = 0x24004,
   1493	.hwcg_bit = 1,
   1494	.clkr = {
   1495		.enable_reg = 0x52000,
   1496		.enable_mask = BIT(26),
   1497		.hw.init = &(struct clk_init_data){
   1498			.name = "gcc_prng_ahb_clk",
   1499			.ops = &clk_branch2_ops,
   1500		},
   1501	},
   1502};
   1503
   1504static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
   1505	.halt_reg = 0x21014,
   1506	.halt_check = BRANCH_HALT_VOTED,
   1507	.clkr = {
   1508		.enable_reg = 0x52000,
   1509		.enable_mask = BIT(9),
   1510		.hw.init = &(struct clk_init_data){
   1511			.name = "gcc_qupv3_wrap0_core_2x_clk",
   1512			.ops = &clk_branch2_ops,
   1513		},
   1514	},
   1515};
   1516
   1517static struct clk_branch gcc_qupv3_wrap0_core_clk = {
   1518	.halt_reg = 0x2100c,
   1519	.halt_check = BRANCH_HALT_VOTED,
   1520	.clkr = {
   1521		.enable_reg = 0x52000,
   1522		.enable_mask = BIT(8),
   1523		.hw.init = &(struct clk_init_data){
   1524			.name = "gcc_qupv3_wrap0_core_clk",
   1525			.ops = &clk_branch2_ops,
   1526		},
   1527	},
   1528};
   1529
   1530static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
   1531	.halt_reg = 0x21144,
   1532	.halt_check = BRANCH_HALT_VOTED,
   1533	.clkr = {
   1534		.enable_reg = 0x52000,
   1535		.enable_mask = BIT(10),
   1536		.hw.init = &(struct clk_init_data){
   1537			.name = "gcc_qupv3_wrap0_s0_clk",
   1538			.parent_hws = (const struct clk_hw*[]){
   1539				&gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
   1540			},
   1541			.num_parents = 1,
   1542			.flags = CLK_SET_RATE_PARENT,
   1543			.ops = &clk_branch2_ops,
   1544		},
   1545	},
   1546};
   1547
   1548static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
   1549	.halt_reg = 0x21274,
   1550	.halt_check = BRANCH_HALT_VOTED,
   1551	.clkr = {
   1552		.enable_reg = 0x52000,
   1553		.enable_mask = BIT(11),
   1554		.hw.init = &(struct clk_init_data){
   1555			.name = "gcc_qupv3_wrap0_s1_clk",
   1556			.parent_hws = (const struct clk_hw*[]){
   1557				&gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
   1558			},
   1559			.num_parents = 1,
   1560			.flags = CLK_SET_RATE_PARENT,
   1561			.ops = &clk_branch2_ops,
   1562		},
   1563	},
   1564};
   1565
   1566static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
   1567	.halt_reg = 0x213a4,
   1568	.halt_check = BRANCH_HALT_VOTED,
   1569	.clkr = {
   1570		.enable_reg = 0x52000,
   1571		.enable_mask = BIT(12),
   1572		.hw.init = &(struct clk_init_data){
   1573			.name = "gcc_qupv3_wrap0_s2_clk",
   1574			.parent_hws = (const struct clk_hw*[]){
   1575				&gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
   1576			},
   1577			.num_parents = 1,
   1578			.flags = CLK_SET_RATE_PARENT,
   1579			.ops = &clk_branch2_ops,
   1580		},
   1581	},
   1582};
   1583
   1584static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
   1585	.halt_reg = 0x214d4,
   1586	.halt_check = BRANCH_HALT_VOTED,
   1587	.clkr = {
   1588		.enable_reg = 0x52000,
   1589		.enable_mask = BIT(13),
   1590		.hw.init = &(struct clk_init_data){
   1591			.name = "gcc_qupv3_wrap0_s3_clk",
   1592			.parent_hws = (const struct clk_hw*[]){
   1593				&gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
   1594			},
   1595			.num_parents = 1,
   1596			.flags = CLK_SET_RATE_PARENT,
   1597			.ops = &clk_branch2_ops,
   1598		},
   1599	},
   1600};
   1601
   1602static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
   1603	.halt_reg = 0x21604,
   1604	.halt_check = BRANCH_HALT_VOTED,
   1605	.clkr = {
   1606		.enable_reg = 0x52000,
   1607		.enable_mask = BIT(14),
   1608		.hw.init = &(struct clk_init_data){
   1609			.name = "gcc_qupv3_wrap0_s4_clk",
   1610			.parent_hws = (const struct clk_hw*[]){
   1611				&gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
   1612			},
   1613			.num_parents = 1,
   1614			.flags = CLK_SET_RATE_PARENT,
   1615			.ops = &clk_branch2_ops,
   1616		},
   1617	},
   1618};
   1619
   1620static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
   1621	.halt_reg = 0x21734,
   1622	.halt_check = BRANCH_HALT_VOTED,
   1623	.clkr = {
   1624		.enable_reg = 0x52000,
   1625		.enable_mask = BIT(15),
   1626		.hw.init = &(struct clk_init_data){
   1627			.name = "gcc_qupv3_wrap0_s5_clk",
   1628			.parent_hws = (const struct clk_hw*[]){
   1629				&gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
   1630			},
   1631			.num_parents = 1,
   1632			.flags = CLK_SET_RATE_PARENT,
   1633			.ops = &clk_branch2_ops,
   1634		},
   1635	},
   1636};
   1637
   1638static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
   1639	.halt_reg = 0x22004,
   1640	.halt_check = BRANCH_HALT_VOTED,
   1641	.clkr = {
   1642		.enable_reg = 0x52000,
   1643		.enable_mask = BIT(16),
   1644		.hw.init = &(struct clk_init_data){
   1645			.name = "gcc_qupv3_wrap1_core_2x_clk",
   1646			.ops = &clk_branch2_ops,
   1647		},
   1648	},
   1649};
   1650
   1651static struct clk_branch gcc_qupv3_wrap1_core_clk = {
   1652	.halt_reg = 0x22008,
   1653	.halt_check = BRANCH_HALT_VOTED,
   1654	.clkr = {
   1655		.enable_reg = 0x52000,
   1656		.enable_mask = BIT(17),
   1657		.hw.init = &(struct clk_init_data){
   1658			.name = "gcc_qupv3_wrap1_core_clk",
   1659			.ops = &clk_branch2_ops,
   1660		},
   1661	},
   1662};
   1663
   1664static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
   1665	.halt_reg = 0x22014,
   1666	.halt_check = BRANCH_HALT_VOTED,
   1667	.clkr = {
   1668		.enable_reg = 0x52000,
   1669		.enable_mask = BIT(20),
   1670		.hw.init = &(struct clk_init_data){
   1671			.name = "gcc_qupv3_wrap1_s0_clk",
   1672			.parent_hws = (const struct clk_hw*[]){
   1673				&gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
   1674			},
   1675			.num_parents = 1,
   1676			.flags = CLK_SET_RATE_PARENT,
   1677			.ops = &clk_branch2_ops,
   1678		},
   1679	},
   1680};
   1681
   1682static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
   1683	.halt_reg = 0x22144,
   1684	.halt_check = BRANCH_HALT_VOTED,
   1685	.clkr = {
   1686		.enable_reg = 0x52000,
   1687		.enable_mask = BIT(21),
   1688		.hw.init = &(struct clk_init_data){
   1689			.name = "gcc_qupv3_wrap1_s1_clk",
   1690			.parent_hws = (const struct clk_hw*[]){
   1691				&gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
   1692			},
   1693			.num_parents = 1,
   1694			.flags = CLK_SET_RATE_PARENT,
   1695			.ops = &clk_branch2_ops,
   1696		},
   1697	},
   1698};
   1699
   1700static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
   1701	.halt_reg = 0x22274,
   1702	.halt_check = BRANCH_HALT_VOTED,
   1703	.clkr = {
   1704		.enable_reg = 0x52000,
   1705		.enable_mask = BIT(22),
   1706		.hw.init = &(struct clk_init_data){
   1707			.name = "gcc_qupv3_wrap1_s2_clk",
   1708			.parent_hws = (const struct clk_hw*[]){
   1709				&gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
   1710			},
   1711			.num_parents = 1,
   1712			.flags = CLK_SET_RATE_PARENT,
   1713			.ops = &clk_branch2_ops,
   1714		},
   1715	},
   1716};
   1717
   1718static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
   1719	.halt_reg = 0x223a4,
   1720	.halt_check = BRANCH_HALT_VOTED,
   1721	.clkr = {
   1722		.enable_reg = 0x52000,
   1723		.enable_mask = BIT(23),
   1724		.hw.init = &(struct clk_init_data){
   1725			.name = "gcc_qupv3_wrap1_s3_clk",
   1726			.parent_hws = (const struct clk_hw*[]){
   1727				&gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
   1728			},
   1729			.num_parents = 1,
   1730			.flags = CLK_SET_RATE_PARENT,
   1731			.ops = &clk_branch2_ops,
   1732		},
   1733	},
   1734};
   1735
   1736static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
   1737	.halt_reg = 0x224d4,
   1738	.halt_check = BRANCH_HALT_VOTED,
   1739	.clkr = {
   1740		.enable_reg = 0x52000,
   1741		.enable_mask = BIT(24),
   1742		.hw.init = &(struct clk_init_data){
   1743			.name = "gcc_qupv3_wrap1_s4_clk",
   1744			.parent_hws = (const struct clk_hw*[]){
   1745				&gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
   1746			},
   1747			.num_parents = 1,
   1748			.flags = CLK_SET_RATE_PARENT,
   1749			.ops = &clk_branch2_ops,
   1750		},
   1751	},
   1752};
   1753
   1754static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
   1755	.halt_reg = 0x22604,
   1756	.halt_check = BRANCH_HALT_VOTED,
   1757	.clkr = {
   1758		.enable_reg = 0x52000,
   1759		.enable_mask = BIT(25),
   1760		.hw.init = &(struct clk_init_data){
   1761			.name = "gcc_qupv3_wrap1_s5_clk",
   1762			.parent_hws = (const struct clk_hw*[]){
   1763				&gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
   1764			},
   1765			.num_parents = 1,
   1766			.flags = CLK_SET_RATE_PARENT,
   1767			.ops = &clk_branch2_ops,
   1768		},
   1769	},
   1770};
   1771
   1772static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
   1773	.halt_reg = 0x21004,
   1774	.halt_check = BRANCH_HALT_VOTED,
   1775	.hwcg_reg = 0x21004,
   1776	.hwcg_bit = 1,
   1777	.clkr = {
   1778		.enable_reg = 0x52000,
   1779		.enable_mask = BIT(6),
   1780		.hw.init = &(struct clk_init_data){
   1781			.name = "gcc_qupv3_wrap_0_m_ahb_clk",
   1782			.ops = &clk_branch2_ops,
   1783		},
   1784	},
   1785};
   1786
   1787static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
   1788	.halt_reg = 0x21008,
   1789	.halt_check = BRANCH_HALT_VOTED,
   1790	.hwcg_reg = 0x21008,
   1791	.hwcg_bit = 1,
   1792	.clkr = {
   1793		.enable_reg = 0x52000,
   1794		.enable_mask = BIT(7),
   1795		.hw.init = &(struct clk_init_data){
   1796			.name = "gcc_qupv3_wrap_0_s_ahb_clk",
   1797			.ops = &clk_branch2_ops,
   1798		},
   1799	},
   1800};
   1801
   1802static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
   1803	.halt_reg = 0x2200c,
   1804	.halt_check = BRANCH_HALT_VOTED,
   1805	.hwcg_reg = 0x2200c,
   1806	.hwcg_bit = 1,
   1807	.clkr = {
   1808		.enable_reg = 0x52000,
   1809		.enable_mask = BIT(18),
   1810		.hw.init = &(struct clk_init_data){
   1811			.name = "gcc_qupv3_wrap_1_m_ahb_clk",
   1812			.ops = &clk_branch2_ops,
   1813		},
   1814	},
   1815};
   1816
   1817static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
   1818	.halt_reg = 0x22010,
   1819	.halt_check = BRANCH_HALT_VOTED,
   1820	.hwcg_reg = 0x22010,
   1821	.hwcg_bit = 1,
   1822	.clkr = {
   1823		.enable_reg = 0x52000,
   1824		.enable_mask = BIT(19),
   1825		.hw.init = &(struct clk_init_data){
   1826			.name = "gcc_qupv3_wrap_1_s_ahb_clk",
   1827			.ops = &clk_branch2_ops,
   1828		},
   1829	},
   1830};
   1831
   1832static struct clk_branch gcc_sdcc1_ahb_clk = {
   1833	.halt_reg = 0x4b004,
   1834	.halt_check = BRANCH_HALT,
   1835	.clkr = {
   1836		.enable_reg = 0x4b004,
   1837		.enable_mask = BIT(0),
   1838		.hw.init = &(struct clk_init_data){
   1839			.name = "gcc_sdcc1_ahb_clk",
   1840			.ops = &clk_branch2_ops,
   1841		},
   1842	},
   1843};
   1844
   1845static struct clk_branch gcc_sdcc1_apps_clk = {
   1846	.halt_reg = 0x4b008,
   1847	.halt_check = BRANCH_HALT,
   1848	.clkr = {
   1849		.enable_reg = 0x4b008,
   1850		.enable_mask = BIT(0),
   1851		.hw.init = &(struct clk_init_data){
   1852			.name = "gcc_sdcc1_apps_clk",
   1853			.parent_hws = (const struct clk_hw*[]){
   1854				&gcc_sdcc1_apps_clk_src.clkr.hw,
   1855			},
   1856			.num_parents = 1,
   1857			.flags = CLK_SET_RATE_PARENT,
   1858			.ops = &clk_branch2_ops,
   1859		},
   1860	},
   1861};
   1862
   1863static struct clk_branch gcc_sdcc1_ice_core_clk = {
   1864	.halt_reg = 0x4b03c,
   1865	.halt_check = BRANCH_HALT,
   1866	.hwcg_reg = 0x4b03c,
   1867	.hwcg_bit = 1,
   1868	.clkr = {
   1869		.enable_reg = 0x4b03c,
   1870		.enable_mask = BIT(0),
   1871		.hw.init = &(struct clk_init_data){
   1872			.name = "gcc_sdcc1_ice_core_clk",
   1873			.parent_hws = (const struct clk_hw*[]){
   1874				&gcc_sdcc1_ice_core_clk_src.clkr.hw,
   1875			},
   1876			.num_parents = 1,
   1877			.flags = CLK_SET_RATE_PARENT,
   1878			.ops = &clk_branch2_ops,
   1879		},
   1880	},
   1881};
   1882
   1883static struct clk_branch gcc_sdcc2_ahb_clk = {
   1884	.halt_reg = 0x20008,
   1885	.halt_check = BRANCH_HALT,
   1886	.clkr = {
   1887		.enable_reg = 0x20008,
   1888		.enable_mask = BIT(0),
   1889		.hw.init = &(struct clk_init_data){
   1890			.name = "gcc_sdcc2_ahb_clk",
   1891			.ops = &clk_branch2_ops,
   1892		},
   1893	},
   1894};
   1895
   1896static struct clk_branch gcc_sdcc2_apps_clk = {
   1897	.halt_reg = 0x20004,
   1898	.halt_check = BRANCH_HALT,
   1899	.clkr = {
   1900		.enable_reg = 0x20004,
   1901		.enable_mask = BIT(0),
   1902		.hw.init = &(struct clk_init_data){
   1903			.name = "gcc_sdcc2_apps_clk",
   1904			.parent_hws = (const struct clk_hw*[]){
   1905				&gcc_sdcc2_apps_clk_src.clkr.hw,
   1906			},
   1907			.num_parents = 1,
   1908			.flags = CLK_SET_RATE_PARENT,
   1909			.ops = &clk_branch2_ops,
   1910		},
   1911	},
   1912};
   1913
   1914static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {
   1915	.halt_reg = 0x10140,
   1916	.halt_check = BRANCH_HALT_VOTED,
   1917	.hwcg_reg = 0x10140,
   1918	.hwcg_bit = 1,
   1919	.clkr = {
   1920		.enable_reg = 0x52000,
   1921		.enable_mask = BIT(0),
   1922		.hw.init = &(struct clk_init_data){
   1923			.name = "gcc_sys_noc_cpuss_ahb_clk",
   1924			.parent_hws = (const struct clk_hw*[]){
   1925				&gcc_cpuss_ahb_clk_src.clkr.hw,
   1926			},
   1927			.num_parents = 1,
   1928			.flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
   1929			.ops = &clk_branch2_ops,
   1930		},
   1931	},
   1932};
   1933
   1934static struct clk_branch gcc_ufs_mem_clkref_clk = {
   1935	.halt_reg = 0x8c000,
   1936	.halt_check = BRANCH_HALT,
   1937	.clkr = {
   1938		.enable_reg = 0x8c000,
   1939		.enable_mask = BIT(0),
   1940		.hw.init = &(struct clk_init_data){
   1941			.name = "gcc_ufs_mem_clkref_clk",
   1942			.ops = &clk_branch2_ops,
   1943		},
   1944	},
   1945};
   1946
   1947static struct clk_branch gcc_ufs_phy_ahb_clk = {
   1948	.halt_reg = 0x3a00c,
   1949	.halt_check = BRANCH_HALT,
   1950	.hwcg_reg = 0x3a00c,
   1951	.hwcg_bit = 1,
   1952	.clkr = {
   1953		.enable_reg = 0x3a00c,
   1954		.enable_mask = BIT(0),
   1955		.hw.init = &(struct clk_init_data){
   1956			.name = "gcc_ufs_phy_ahb_clk",
   1957			.ops = &clk_branch2_ops,
   1958		},
   1959	},
   1960};
   1961
   1962static struct clk_branch gcc_ufs_phy_axi_clk = {
   1963	.halt_reg = 0x3a034,
   1964	.halt_check = BRANCH_HALT,
   1965	.hwcg_reg = 0x3a034,
   1966	.hwcg_bit = 1,
   1967	.clkr = {
   1968		.enable_reg = 0x3a034,
   1969		.enable_mask = BIT(0),
   1970		.hw.init = &(struct clk_init_data){
   1971			.name = "gcc_ufs_phy_axi_clk",
   1972			.parent_hws = (const struct clk_hw*[]){
   1973				&gcc_ufs_phy_axi_clk_src.clkr.hw,
   1974			},
   1975			.num_parents = 1,
   1976			.flags = CLK_SET_RATE_PARENT,
   1977			.ops = &clk_branch2_ops,
   1978		},
   1979	},
   1980};
   1981
   1982static struct clk_branch gcc_ufs_phy_ice_core_clk = {
   1983	.halt_reg = 0x3a0a4,
   1984	.halt_check = BRANCH_HALT,
   1985	.hwcg_reg = 0x3a0a4,
   1986	.hwcg_bit = 1,
   1987	.clkr = {
   1988		.enable_reg = 0x3a0a4,
   1989		.enable_mask = BIT(0),
   1990		.hw.init = &(struct clk_init_data){
   1991			.name = "gcc_ufs_phy_ice_core_clk",
   1992			.parent_hws = (const struct clk_hw*[]){
   1993				&gcc_ufs_phy_ice_core_clk_src.clkr.hw,
   1994			},
   1995			.num_parents = 1,
   1996			.flags = CLK_SET_RATE_PARENT,
   1997			.ops = &clk_branch2_ops,
   1998		},
   1999	},
   2000};
   2001
   2002static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = {
   2003	.halt_reg = 0x3a0a4,
   2004	.halt_check = BRANCH_HALT,
   2005	.hwcg_reg = 0x3a0a4,
   2006	.hwcg_bit = 1,
   2007	.clkr = {
   2008		.enable_reg = 0x3a0a4,
   2009		.enable_mask = BIT(1),
   2010		.hw.init = &(struct clk_init_data){
   2011			.name = "gcc_ufs_phy_ice_core_hw_ctl_clk",
   2012			.parent_hws = (const struct clk_hw*[]){
   2013				&gcc_ufs_phy_ice_core_clk_src.clkr.hw,
   2014			},
   2015			.num_parents = 1,
   2016			.flags = CLK_SET_RATE_PARENT,
   2017			.ops = &clk_branch2_ops,
   2018		},
   2019	},
   2020};
   2021
   2022static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
   2023	.halt_reg = 0x3a0ac,
   2024	.halt_check = BRANCH_HALT,
   2025	.hwcg_reg = 0x3a0ac,
   2026	.hwcg_bit = 1,
   2027	.clkr = {
   2028		.enable_reg = 0x3a0ac,
   2029		.enable_mask = BIT(0),
   2030		.hw.init = &(struct clk_init_data){
   2031			.name = "gcc_ufs_phy_phy_aux_clk",
   2032			.parent_hws = (const struct clk_hw*[]){
   2033				&gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
   2034			},
   2035			.num_parents = 1,
   2036			.flags = CLK_SET_RATE_PARENT,
   2037			.ops = &clk_branch2_ops,
   2038		},
   2039	},
   2040};
   2041
   2042static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = {
   2043	.halt_reg = 0x3a0ac,
   2044	.halt_check = BRANCH_HALT,
   2045	.hwcg_reg = 0x3a0ac,
   2046	.hwcg_bit = 1,
   2047	.clkr = {
   2048		.enable_reg = 0x3a0ac,
   2049		.enable_mask = BIT(1),
   2050		.hw.init = &(struct clk_init_data){
   2051			.name = "gcc_ufs_phy_phy_aux_hw_ctl_clk",
   2052			.parent_hws = (const struct clk_hw*[]){
   2053				&gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
   2054			},
   2055			.num_parents = 1,
   2056			.flags = CLK_SET_RATE_PARENT,
   2057			.ops = &clk_branch2_ops,
   2058		},
   2059	},
   2060};
   2061
   2062static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
   2063	.halt_reg = 0x3a014,
   2064	.halt_check = BRANCH_HALT_SKIP,
   2065	.clkr = {
   2066		.enable_reg = 0x3a014,
   2067		.enable_mask = BIT(0),
   2068		.hw.init = &(struct clk_init_data){
   2069			.name = "gcc_ufs_phy_rx_symbol_0_clk",
   2070			.ops = &clk_branch2_ops,
   2071		},
   2072	},
   2073};
   2074
   2075static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
   2076	.halt_reg = 0x3a018,
   2077	.halt_check = BRANCH_HALT_SKIP,
   2078	.clkr = {
   2079		.enable_reg = 0x3a018,
   2080		.enable_mask = BIT(0),
   2081		.hw.init = &(struct clk_init_data){
   2082			.name = "gcc_ufs_phy_rx_symbol_1_clk",
   2083			.ops = &clk_branch2_ops,
   2084		},
   2085	},
   2086};
   2087
   2088static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
   2089	.halt_reg = 0x3a010,
   2090	.halt_check = BRANCH_HALT_SKIP,
   2091	.clkr = {
   2092		.enable_reg = 0x3a010,
   2093		.enable_mask = BIT(0),
   2094		.hw.init = &(struct clk_init_data){
   2095			.name = "gcc_ufs_phy_tx_symbol_0_clk",
   2096			.ops = &clk_branch2_ops,
   2097		},
   2098	},
   2099};
   2100
   2101static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
   2102	.halt_reg = 0x3a09c,
   2103	.halt_check = BRANCH_HALT,
   2104	.hwcg_reg = 0x3a09c,
   2105	.hwcg_bit = 1,
   2106	.clkr = {
   2107		.enable_reg = 0x3a09c,
   2108		.enable_mask = BIT(0),
   2109		.hw.init = &(struct clk_init_data){
   2110			.name = "gcc_ufs_phy_unipro_core_clk",
   2111			.parent_hws = (const struct clk_hw*[]){
   2112				&gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
   2113			},
   2114			.num_parents = 1,
   2115			.flags = CLK_SET_RATE_PARENT,
   2116			.ops = &clk_branch2_ops,
   2117		},
   2118	},
   2119};
   2120
   2121static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = {
   2122	.halt_reg = 0x3a09c,
   2123	.halt_check = BRANCH_HALT,
   2124	.hwcg_reg = 0x3a09c,
   2125	.hwcg_bit = 1,
   2126	.clkr = {
   2127		.enable_reg = 0x3a09c,
   2128		.enable_mask = BIT(1),
   2129		.hw.init = &(struct clk_init_data){
   2130			.name = "gcc_ufs_phy_unipro_core_hw_ctl_clk",
   2131			.parent_hws = (const struct clk_hw*[]){
   2132				&gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
   2133			},
   2134			.num_parents = 1,
   2135			.flags = CLK_SET_RATE_PARENT,
   2136			.ops = &clk_branch2_ops,
   2137		},
   2138	},
   2139};
   2140
   2141static struct clk_branch gcc_usb30_prim_master_clk = {
   2142	.halt_reg = 0x1a00c,
   2143	.halt_check = BRANCH_HALT,
   2144	.clkr = {
   2145		.enable_reg = 0x1a00c,
   2146		.enable_mask = BIT(0),
   2147		.hw.init = &(struct clk_init_data){
   2148			.name = "gcc_usb30_prim_master_clk",
   2149			.parent_hws = (const struct clk_hw*[]){
   2150				&gcc_usb30_prim_master_clk_src.clkr.hw,
   2151			},
   2152			.num_parents = 1,
   2153			.flags = CLK_SET_RATE_PARENT,
   2154			.ops = &clk_branch2_ops,
   2155		},
   2156	},
   2157};
   2158
   2159static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
   2160	.halt_reg = 0x1a018,
   2161	.halt_check = BRANCH_HALT,
   2162	.clkr = {
   2163		.enable_reg = 0x1a018,
   2164		.enable_mask = BIT(0),
   2165		.hw.init = &(struct clk_init_data){
   2166			.name = "gcc_usb30_prim_mock_utmi_clk",
   2167			.parent_hws = (const struct clk_hw*[]){
   2168				&gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
   2169			},
   2170			.num_parents = 1,
   2171			.flags = CLK_SET_RATE_PARENT,
   2172			.ops = &clk_branch2_ops,
   2173		},
   2174	},
   2175};
   2176
   2177static struct clk_branch gcc_usb30_prim_sleep_clk = {
   2178	.halt_reg = 0x1a014,
   2179	.halt_check = BRANCH_HALT,
   2180	.clkr = {
   2181		.enable_reg = 0x1a014,
   2182		.enable_mask = BIT(0),
   2183		.hw.init = &(struct clk_init_data){
   2184			.name = "gcc_usb30_prim_sleep_clk",
   2185			.ops = &clk_branch2_ops,
   2186		},
   2187	},
   2188};
   2189
   2190static struct clk_branch gcc_usb3_prim_clkref_clk = {
   2191	.halt_reg = 0x8c010,
   2192	.halt_check = BRANCH_HALT,
   2193	.clkr = {
   2194		.enable_reg = 0x8c010,
   2195		.enable_mask = BIT(0),
   2196		.hw.init = &(struct clk_init_data){
   2197			.name = "gcc_usb3_prim_clkref_clk",
   2198			.ops = &clk_branch2_ops,
   2199		},
   2200	},
   2201};
   2202
   2203static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
   2204	.halt_reg = 0x1a050,
   2205	.halt_check = BRANCH_HALT,
   2206	.clkr = {
   2207		.enable_reg = 0x1a050,
   2208		.enable_mask = BIT(0),
   2209		.hw.init = &(struct clk_init_data){
   2210			.name = "gcc_usb3_prim_phy_aux_clk",
   2211			.parent_hws = (const struct clk_hw*[]){
   2212				&gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
   2213			},
   2214			.num_parents = 1,
   2215			.flags = CLK_SET_RATE_PARENT,
   2216			.ops = &clk_branch2_ops,
   2217		},
   2218	},
   2219};
   2220
   2221static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
   2222	.halt_reg = 0x1a054,
   2223	.halt_check = BRANCH_HALT,
   2224	.clkr = {
   2225		.enable_reg = 0x1a054,
   2226		.enable_mask = BIT(0),
   2227		.hw.init = &(struct clk_init_data){
   2228			.name = "gcc_usb3_prim_phy_com_aux_clk",
   2229			.parent_hws = (const struct clk_hw*[]){
   2230				&gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
   2231			},
   2232			.num_parents = 1,
   2233			.flags = CLK_SET_RATE_PARENT,
   2234			.ops = &clk_branch2_ops,
   2235		},
   2236	},
   2237};
   2238
   2239static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
   2240	.halt_reg = 0x1a058,
   2241	.halt_check = BRANCH_HALT_SKIP,
   2242	.hwcg_reg = 0x1a058,
   2243	.hwcg_bit = 1,
   2244	.clkr = {
   2245		.enable_reg = 0x1a058,
   2246		.enable_mask = BIT(0),
   2247		.hw.init = &(struct clk_init_data){
   2248			.name = "gcc_usb3_prim_phy_pipe_clk",
   2249			.ops = &clk_branch2_ops,
   2250		},
   2251	},
   2252};
   2253
   2254static struct clk_branch gcc_video_ahb_clk = {
   2255	.halt_reg = 0x17004,
   2256	.halt_check = BRANCH_HALT,
   2257	.hwcg_reg = 0x17004,
   2258	.hwcg_bit = 1,
   2259	.clkr = {
   2260		.enable_reg = 0x17004,
   2261		.enable_mask = BIT(0),
   2262		.hw.init = &(struct clk_init_data){
   2263			.name = "gcc_video_ahb_clk",
   2264			.flags = CLK_IS_CRITICAL,
   2265			.ops = &clk_branch2_ops,
   2266		},
   2267	},
   2268};
   2269
   2270static struct clk_branch gcc_video_axi_clk = {
   2271	.halt_reg = 0x17014,
   2272	.halt_check = BRANCH_HALT,
   2273	.hwcg_reg = 0x17014,
   2274	.hwcg_bit = 1,
   2275	.clkr = {
   2276		.enable_reg = 0x17014,
   2277		.enable_mask = BIT(0),
   2278		.hw.init = &(struct clk_init_data){
   2279			.name = "gcc_video_axi_clk",
   2280			.ops = &clk_branch2_ops,
   2281		},
   2282	},
   2283};
   2284
   2285static struct clk_branch gcc_video_throttle_axi_clk = {
   2286	.halt_reg = 0x17020,
   2287	.halt_check = BRANCH_HALT,
   2288	.hwcg_reg = 0x17020,
   2289	.hwcg_bit = 1,
   2290	.clkr = {
   2291		.enable_reg = 0x17020,
   2292		.enable_mask = BIT(0),
   2293		.hw.init = &(struct clk_init_data){
   2294			.name = "gcc_video_throttle_axi_clk",
   2295			.ops = &clk_branch2_ops,
   2296		},
   2297	},
   2298};
   2299
   2300static struct clk_branch gcc_video_xo_clk = {
   2301	.halt_reg = 0x1702c,
   2302	.halt_check = BRANCH_HALT,
   2303	.clkr = {
   2304		.enable_reg = 0x1702c,
   2305		.enable_mask = BIT(0),
   2306		.hw.init = &(struct clk_init_data){
   2307			.name = "gcc_video_xo_clk",
   2308			.flags = CLK_IS_CRITICAL,
   2309			.ops = &clk_branch2_ops,
   2310		},
   2311	},
   2312};
   2313
   2314static struct gdsc usb30_prim_gdsc = {
   2315	.gdscr = 0x1a004,
   2316	.pd = {
   2317		.name = "usb30_prim_gdsc",
   2318	},
   2319	.pwrsts = PWRSTS_OFF_ON,
   2320};
   2321
   2322static struct gdsc ufs_phy_gdsc = {
   2323	.gdscr = 0x3a004,
   2324	.pd = {
   2325		.name = "ufs_phy_gdsc",
   2326	},
   2327	.pwrsts = PWRSTS_OFF_ON,
   2328};
   2329
   2330static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc = {
   2331	.gdscr = 0xb7040,
   2332	.pd = {
   2333		.name = "hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc",
   2334	},
   2335	.pwrsts = PWRSTS_OFF_ON,
   2336	.flags = VOTABLE,
   2337};
   2338
   2339static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc = {
   2340	.gdscr = 0xb7044,
   2341	.pd = {
   2342		.name = "hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc",
   2343	},
   2344	.pwrsts = PWRSTS_OFF_ON,
   2345	.flags = VOTABLE,
   2346};
   2347
   2348static struct clk_regmap *gcc_sm6350_clocks[] = {
   2349	[GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
   2350	[GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
   2351	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
   2352	[GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr,
   2353	[GCC_CAMERA_AXI_CLK] = &gcc_camera_axi_clk.clkr,
   2354	[GCC_CAMERA_THROTTLE_NRT_AXI_CLK] =
   2355		&gcc_camera_throttle_nrt_axi_clk.clkr,
   2356	[GCC_CAMERA_THROTTLE_RT_AXI_CLK] = &gcc_camera_throttle_rt_axi_clk.clkr,
   2357	[GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr,
   2358	[GCC_CE1_AHB_CLK] = &gcc_ce1_ahb_clk.clkr,
   2359	[GCC_CE1_AXI_CLK] = &gcc_ce1_axi_clk.clkr,
   2360	[GCC_CE1_CLK] = &gcc_ce1_clk.clkr,
   2361	[GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
   2362	[GCC_CPUSS_AHB_CLK] = &gcc_cpuss_ahb_clk.clkr,
   2363	[GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr,
   2364	[GCC_CPUSS_GNOC_CLK] = &gcc_cpuss_gnoc_clk.clkr,
   2365	[GCC_CPUSS_RBCPR_CLK] = &gcc_cpuss_rbcpr_clk.clkr,
   2366	[GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
   2367	[GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr,
   2368	[GCC_DISP_AXI_CLK] = &gcc_disp_axi_clk.clkr,
   2369	[GCC_DISP_CC_SLEEP_CLK] = &gcc_disp_cc_sleep_clk.clkr,
   2370	[GCC_DISP_CC_XO_CLK] = &gcc_disp_cc_xo_clk.clkr,
   2371	[GCC_DISP_GPLL0_CLK] = &gcc_disp_gpll0_clk.clkr,
   2372	[GCC_DISP_THROTTLE_AXI_CLK] = &gcc_disp_throttle_axi_clk.clkr,
   2373	[GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr,
   2374	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
   2375	[GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
   2376	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
   2377	[GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
   2378	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
   2379	[GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
   2380	[GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,
   2381	[GCC_GPU_GPLL0_CLK] = &gcc_gpu_gpll0_clk.clkr,
   2382	[GCC_GPU_GPLL0_DIV_CLK] = &gcc_gpu_gpll0_div_clk.clkr,
   2383	[GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
   2384	[GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
   2385	[GCC_NPU_AXI_CLK] = &gcc_npu_axi_clk.clkr,
   2386	[GCC_NPU_BWMON_AXI_CLK] = &gcc_npu_bwmon_axi_clk.clkr,
   2387	[GCC_NPU_BWMON_DMA_CFG_AHB_CLK] = &gcc_npu_bwmon_dma_cfg_ahb_clk.clkr,
   2388	[GCC_NPU_BWMON_DSP_CFG_AHB_CLK] = &gcc_npu_bwmon_dsp_cfg_ahb_clk.clkr,
   2389	[GCC_NPU_CFG_AHB_CLK] = &gcc_npu_cfg_ahb_clk.clkr,
   2390	[GCC_NPU_DMA_CLK] = &gcc_npu_dma_clk.clkr,
   2391	[GCC_NPU_GPLL0_CLK] = &gcc_npu_gpll0_clk.clkr,
   2392	[GCC_NPU_GPLL0_DIV_CLK] = &gcc_npu_gpll0_div_clk.clkr,
   2393	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
   2394	[GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
   2395	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
   2396	[GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
   2397	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
   2398	[GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
   2399	[GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
   2400	[GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
   2401	[GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
   2402	[GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
   2403	[GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
   2404	[GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
   2405	[GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
   2406	[GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
   2407	[GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
   2408	[GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
   2409	[GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
   2410	[GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
   2411	[GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
   2412	[GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
   2413	[GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
   2414	[GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
   2415	[GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
   2416	[GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
   2417	[GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
   2418	[GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
   2419	[GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
   2420	[GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
   2421	[GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
   2422	[GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
   2423	[GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
   2424	[GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
   2425	[GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
   2426	[GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
   2427	[GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
   2428	[GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
   2429	[GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
   2430	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
   2431	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
   2432	[GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,
   2433	[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
   2434	[GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr,
   2435	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
   2436	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
   2437	[GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
   2438	[GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,
   2439	[GCC_UFS_MEM_CLKREF_CLK] = &gcc_ufs_mem_clkref_clk.clkr,
   2440	[GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
   2441	[GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
   2442	[GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
   2443	[GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
   2444	[GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
   2445	[GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
   2446	[GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
   2447	[GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
   2448	[GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
   2449	[GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
   2450	[GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
   2451	[GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] =
   2452		&gcc_ufs_phy_unipro_core_clk_src.clkr,
   2453	[GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
   2454	[GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
   2455	[GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
   2456	[GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] =
   2457		&gcc_usb30_prim_mock_utmi_clk_src.clkr,
   2458	[GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
   2459	[GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,
   2460	[GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
   2461	[GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
   2462	[GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
   2463	[GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
   2464	[GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr,
   2465	[GCC_VIDEO_AXI_CLK] = &gcc_video_axi_clk.clkr,
   2466	[GCC_VIDEO_THROTTLE_AXI_CLK] = &gcc_video_throttle_axi_clk.clkr,
   2467	[GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr,
   2468	[GPLL0] = &gpll0.clkr,
   2469	[GPLL0_OUT_EVEN] = &gpll0_out_even.clkr,
   2470	[GPLL0_OUT_ODD] = &gpll0_out_odd.clkr,
   2471	[GPLL6] = &gpll6.clkr,
   2472	[GPLL6_OUT_EVEN] = &gpll6_out_even.clkr,
   2473	[GPLL7] = &gpll7.clkr,
   2474	[GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr,
   2475	[GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr,
   2476	[GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] =
   2477				&gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr,
   2478	[GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] =
   2479				&gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr,
   2480	[GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] =
   2481				&gcc_ufs_phy_ice_core_hw_ctl_clk.clkr,
   2482	[GCC_GPU_GPLL0_MAIN_DIV_CLK_SRC] = &gcc_gpu_gpll0_main_div_clk_src.clkr,
   2483	[GCC_NPU_PLL0_MAIN_DIV_CLK_SRC] = &gcc_npu_pll0_main_div_clk_src.clkr,
   2484};
   2485
   2486static struct gdsc *gcc_sm6350_gdscs[] = {
   2487	[USB30_PRIM_GDSC] = &usb30_prim_gdsc,
   2488	[UFS_PHY_GDSC] = &ufs_phy_gdsc,
   2489	[HLOS1_VOTE_MMNOC_MMU_TBU_HF0_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc,
   2490	[HLOS1_VOTE_MMNOC_MMU_TBU_HF1_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc,
   2491};
   2492
   2493static const struct qcom_reset_map gcc_sm6350_resets[] = {
   2494	[GCC_QUSB2PHY_PRIM_BCR] = { 0x1d000 },
   2495	[GCC_QUSB2PHY_SEC_BCR] = { 0x1e000 },
   2496	[GCC_SDCC1_BCR] = { 0x4b000 },
   2497	[GCC_SDCC2_BCR] = { 0x20000 },
   2498	[GCC_UFS_PHY_BCR] = { 0x3a000 },
   2499	[GCC_USB30_PRIM_BCR] = { 0x1a000 },
   2500	[GCC_USB3_PHY_PRIM_BCR] = { 0x1c000 },
   2501	[GCC_USB3_DP_PHY_PRIM_BCR] = { 0x1c008 },
   2502};
   2503
   2504static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
   2505	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
   2506	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
   2507	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
   2508	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
   2509	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
   2510	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
   2511	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
   2512	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
   2513	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),
   2514	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
   2515	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
   2516	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
   2517};
   2518
   2519static const struct regmap_config gcc_sm6350_regmap_config = {
   2520	.reg_bits = 32,
   2521	.reg_stride = 4,
   2522	.val_bits = 32,
   2523	.max_register = 0xbf030,
   2524	.fast_io = true,
   2525};
   2526
   2527static const struct qcom_cc_desc gcc_sm6350_desc = {
   2528	.config = &gcc_sm6350_regmap_config,
   2529	.clks = gcc_sm6350_clocks,
   2530	.num_clks = ARRAY_SIZE(gcc_sm6350_clocks),
   2531	.resets = gcc_sm6350_resets,
   2532	.num_resets = ARRAY_SIZE(gcc_sm6350_resets),
   2533	.gdscs = gcc_sm6350_gdscs,
   2534	.num_gdscs = ARRAY_SIZE(gcc_sm6350_gdscs),
   2535};
   2536
   2537static const struct of_device_id gcc_sm6350_match_table[] = {
   2538	{ .compatible = "qcom,gcc-sm6350" },
   2539	{ }
   2540};
   2541MODULE_DEVICE_TABLE(of, gcc_sm6350_match_table);
   2542
   2543static int gcc_sm6350_probe(struct platform_device *pdev)
   2544{
   2545	struct regmap *regmap;
   2546	int ret;
   2547
   2548	regmap = qcom_cc_map(pdev, &gcc_sm6350_desc);
   2549	if (IS_ERR(regmap))
   2550		return PTR_ERR(regmap);
   2551
   2552	/* Disable the GPLL0 active input to NPU and GPU via MISC registers */
   2553	regmap_update_bits(regmap, 0x4cf00, 0x3, 0x3);
   2554	regmap_update_bits(regmap, 0x45f00, 0x3, 0x3);
   2555
   2556	ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
   2557			ARRAY_SIZE(gcc_dfs_clocks));
   2558	if (ret)
   2559		return ret;
   2560
   2561	return qcom_cc_really_probe(pdev, &gcc_sm6350_desc, regmap);;
   2562}
   2563
   2564static struct platform_driver gcc_sm6350_driver = {
   2565	.probe = gcc_sm6350_probe,
   2566	.driver = {
   2567		.name = "gcc-sm6350",
   2568		.of_match_table = gcc_sm6350_match_table,
   2569	},
   2570};
   2571
   2572static int __init gcc_sm6350_init(void)
   2573{
   2574	return platform_driver_register(&gcc_sm6350_driver);
   2575}
   2576core_initcall(gcc_sm6350_init);
   2577
   2578static void __exit gcc_sm6350_exit(void)
   2579{
   2580	platform_driver_unregister(&gcc_sm6350_driver);
   2581}
   2582module_exit(gcc_sm6350_exit);
   2583
   2584MODULE_DESCRIPTION("QTI GCC SM6350 Driver");
   2585MODULE_LICENSE("GPL v2");