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-sm6115.c (92409B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * Copyright (c) 2019-2021, The Linux Foundation. All rights reserved.
      4 */
      5
      6#include <linux/err.h>
      7#include <linux/kernel.h>
      8#include <linux/module.h>
      9#include <linux/of_device.h>
     10#include <linux/clk-provider.h>
     11#include <linux/regmap.h>
     12#include <linux/reset-controller.h>
     13
     14#include <dt-bindings/clock/qcom,gcc-sm6115.h>
     15
     16#include "clk-alpha-pll.h"
     17#include "clk-branch.h"
     18#include "clk-pll.h"
     19#include "clk-rcg.h"
     20#include "clk-regmap.h"
     21#include "clk-regmap-divider.h"
     22#include "common.h"
     23#include "gdsc.h"
     24#include "reset.h"
     25
     26enum {
     27	P_BI_TCXO,
     28	P_GPLL0_OUT_AUX2,
     29	P_GPLL0_OUT_EARLY,
     30	P_GPLL10_OUT_MAIN,
     31	P_GPLL11_OUT_MAIN,
     32	P_GPLL3_OUT_EARLY,
     33	P_GPLL4_OUT_MAIN,
     34	P_GPLL6_OUT_EARLY,
     35	P_GPLL6_OUT_MAIN,
     36	P_GPLL7_OUT_MAIN,
     37	P_GPLL8_OUT_EARLY,
     38	P_GPLL8_OUT_MAIN,
     39	P_GPLL9_OUT_EARLY,
     40	P_GPLL9_OUT_MAIN,
     41	P_SLEEP_CLK,
     42};
     43
     44static struct pll_vco default_vco[] = {
     45	{ 500000000, 1000000000, 2 },
     46};
     47
     48static struct pll_vco gpll9_vco[] = {
     49	{ 500000000, 1250000000, 0 },
     50};
     51
     52static struct pll_vco gpll10_vco[] = {
     53	{ 750000000, 1500000000, 1 },
     54};
     55
     56static struct clk_alpha_pll gpll0 = {
     57	.offset = 0x0,
     58	.vco_table = default_vco,
     59	.num_vco = ARRAY_SIZE(default_vco),
     60	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
     61	.clkr = {
     62		.enable_reg = 0x79000,
     63		.enable_mask = BIT(0),
     64		.hw.init = &(struct clk_init_data){
     65			.name = "gpll0",
     66			.parent_data = &(const struct clk_parent_data){
     67				.fw_name = "bi_tcxo",
     68			},
     69			.num_parents = 1,
     70			.ops = &clk_alpha_pll_ops,
     71		},
     72	},
     73};
     74
     75static const struct clk_div_table post_div_table_gpll0_out_aux2[] = {
     76	{ 0x1, 2 },
     77	{ }
     78};
     79
     80static struct clk_alpha_pll_postdiv gpll0_out_aux2 = {
     81	.offset = 0x0,
     82	.post_div_shift = 8,
     83	.post_div_table = post_div_table_gpll0_out_aux2,
     84	.num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_aux2),
     85	.width = 4,
     86	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
     87	.clkr.hw.init = &(struct clk_init_data){
     88		.name = "gpll0_out_aux2",
     89		.parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
     90		.num_parents = 1,
     91		.ops = &clk_alpha_pll_postdiv_ro_ops,
     92	},
     93};
     94
     95/* listed as BRAMMO, but it doesn't really match */
     96static const u8 clk_gpll9_regs[PLL_OFF_MAX_REGS] = {
     97	[PLL_OFF_L_VAL] = 0x04,
     98	[PLL_OFF_ALPHA_VAL] = 0x08,
     99	[PLL_OFF_ALPHA_VAL_U] = 0x0c,
    100	[PLL_OFF_TEST_CTL] = 0x10,
    101	[PLL_OFF_TEST_CTL_U] = 0x14,
    102	[PLL_OFF_USER_CTL] = 0x18,
    103	[PLL_OFF_CONFIG_CTL] = 0x1C,
    104	[PLL_OFF_STATUS] = 0x20,
    105};
    106
    107static const struct clk_div_table post_div_table_gpll0_out_main[] = {
    108	{ 0x0, 1 },
    109	{ }
    110};
    111
    112static struct clk_alpha_pll_postdiv gpll0_out_main = {
    113	.offset = 0x0,
    114	.post_div_shift = 8,
    115	.post_div_table = post_div_table_gpll0_out_main,
    116	.num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_main),
    117	.width = 4,
    118	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
    119	.clkr.hw.init = &(struct clk_init_data){
    120		.name = "gpll0_out_main",
    121		.parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
    122		.num_parents = 1,
    123		.ops = &clk_alpha_pll_postdiv_ro_ops,
    124	},
    125};
    126
    127/* 1152MHz configuration */
    128static const struct alpha_pll_config gpll10_config = {
    129	.l = 0x3c,
    130	.vco_val = 0x1 << 20,
    131	.vco_mask = GENMASK(21, 20),
    132	.main_output_mask = BIT(0),
    133	.config_ctl_val = 0x4001055b,
    134};
    135
    136static struct clk_alpha_pll gpll10 = {
    137	.offset = 0xa000,
    138	.vco_table = gpll10_vco,
    139	.num_vco = ARRAY_SIZE(gpll10_vco),
    140	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
    141	.clkr = {
    142		.enable_reg = 0x79000,
    143		.enable_mask = BIT(10),
    144		.hw.init = &(struct clk_init_data){
    145			.name = "gpll10",
    146			.parent_data = &(const struct clk_parent_data){
    147				.fw_name = "bi_tcxo",
    148			},
    149			.num_parents = 1,
    150			.ops = &clk_alpha_pll_ops,
    151		},
    152	},
    153};
    154
    155static const struct clk_div_table post_div_table_gpll10_out_main[] = {
    156	{ 0x0, 1 },
    157	{ }
    158};
    159
    160static struct clk_alpha_pll_postdiv gpll10_out_main = {
    161	.offset = 0xa000,
    162	.post_div_shift = 8,
    163	.post_div_table = post_div_table_gpll10_out_main,
    164	.num_post_div = ARRAY_SIZE(post_div_table_gpll10_out_main),
    165	.width = 4,
    166	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
    167	.clkr.hw.init = &(struct clk_init_data){
    168		.name = "gpll10_out_main",
    169		.parent_hws = (const struct clk_hw *[]){ &gpll10.clkr.hw },
    170		.num_parents = 1,
    171		.flags = CLK_SET_RATE_PARENT,
    172		.ops = &clk_alpha_pll_postdiv_ops,
    173	},
    174};
    175
    176/* 600MHz configuration */
    177static const struct alpha_pll_config gpll11_config = {
    178	.l = 0x1F,
    179	.alpha = 0x0,
    180	.alpha_hi = 0x40,
    181	.alpha_en_mask = BIT(24),
    182	.vco_val = 0x2 << 20,
    183	.vco_mask = GENMASK(21, 20),
    184	.config_ctl_val = 0x4001055b,
    185};
    186
    187static struct clk_alpha_pll gpll11 = {
    188	.offset = 0xb000,
    189	.vco_table = default_vco,
    190	.num_vco = ARRAY_SIZE(default_vco),
    191	.flags = SUPPORTS_DYNAMIC_UPDATE,
    192	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
    193	.clkr = {
    194		.enable_reg = 0x79000,
    195		.enable_mask = BIT(11),
    196		.hw.init = &(struct clk_init_data){
    197			.name = "gpll11",
    198			.parent_data = &(const struct clk_parent_data){
    199				.fw_name = "bi_tcxo",
    200			},
    201			.num_parents = 1,
    202			.ops = &clk_alpha_pll_ops,
    203		},
    204	},
    205};
    206
    207static const struct clk_div_table post_div_table_gpll11_out_main[] = {
    208	{ 0x0, 1 },
    209	{ }
    210};
    211
    212static struct clk_alpha_pll_postdiv gpll11_out_main = {
    213	.offset = 0xb000,
    214	.post_div_shift = 8,
    215	.post_div_table = post_div_table_gpll11_out_main,
    216	.num_post_div = ARRAY_SIZE(post_div_table_gpll11_out_main),
    217	.width = 4,
    218	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
    219	.clkr.hw.init = &(struct clk_init_data){
    220		.name = "gpll11_out_main",
    221		.parent_hws = (const struct clk_hw *[]){ &gpll11.clkr.hw },
    222		.num_parents = 1,
    223		.flags = CLK_SET_RATE_PARENT,
    224		.ops = &clk_alpha_pll_postdiv_ops,
    225	},
    226};
    227
    228static struct clk_alpha_pll gpll3 = {
    229	.offset = 0x3000,
    230	.vco_table = default_vco,
    231	.num_vco = ARRAY_SIZE(default_vco),
    232	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
    233	.clkr = {
    234		.enable_reg = 0x79000,
    235		.enable_mask = BIT(3),
    236		.hw.init = &(struct clk_init_data){
    237			.name = "gpll3",
    238			.parent_data = &(const struct clk_parent_data){
    239				.fw_name = "bi_tcxo",
    240			},
    241			.num_parents = 1,
    242			.ops = &clk_alpha_pll_ops,
    243		},
    244	},
    245};
    246
    247static struct clk_alpha_pll gpll4 = {
    248	.offset = 0x4000,
    249	.vco_table = default_vco,
    250	.num_vco = ARRAY_SIZE(default_vco),
    251	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
    252	.clkr = {
    253		.enable_reg = 0x79000,
    254		.enable_mask = BIT(4),
    255		.hw.init = &(struct clk_init_data){
    256			.name = "gpll4",
    257			.parent_data = &(const struct clk_parent_data){
    258				.fw_name = "bi_tcxo",
    259			},
    260			.num_parents = 1,
    261			.ops = &clk_alpha_pll_ops,
    262		},
    263	},
    264};
    265
    266static const struct clk_div_table post_div_table_gpll4_out_main[] = {
    267	{ 0x0, 1 },
    268	{ }
    269};
    270
    271static struct clk_alpha_pll_postdiv gpll4_out_main = {
    272	.offset = 0x4000,
    273	.post_div_shift = 8,
    274	.post_div_table = post_div_table_gpll4_out_main,
    275	.num_post_div = ARRAY_SIZE(post_div_table_gpll4_out_main),
    276	.width = 4,
    277	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
    278	.clkr.hw.init = &(struct clk_init_data){
    279		.name = "gpll4_out_main",
    280		.parent_hws = (const struct clk_hw *[]){ &gpll4.clkr.hw },
    281		.num_parents = 1,
    282		.ops = &clk_alpha_pll_postdiv_ro_ops,
    283	},
    284};
    285
    286static struct clk_alpha_pll gpll6 = {
    287	.offset = 0x6000,
    288	.vco_table = default_vco,
    289	.num_vco = ARRAY_SIZE(default_vco),
    290	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
    291	.clkr = {
    292		.enable_reg = 0x79000,
    293		.enable_mask = BIT(6),
    294		.hw.init = &(struct clk_init_data){
    295			.name = "gpll6",
    296			.parent_data = &(const struct clk_parent_data){
    297				.fw_name = "bi_tcxo",
    298			},
    299			.num_parents = 1,
    300			.ops = &clk_alpha_pll_ops,
    301		},
    302	},
    303};
    304
    305static const struct clk_div_table post_div_table_gpll6_out_main[] = {
    306	{ 0x1, 2 },
    307	{ }
    308};
    309
    310static struct clk_alpha_pll_postdiv gpll6_out_main = {
    311	.offset = 0x6000,
    312	.post_div_shift = 8,
    313	.post_div_table = post_div_table_gpll6_out_main,
    314	.num_post_div = ARRAY_SIZE(post_div_table_gpll6_out_main),
    315	.width = 4,
    316	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
    317	.clkr.hw.init = &(struct clk_init_data){
    318		.name = "gpll6_out_main",
    319		.parent_hws = (const struct clk_hw *[]){ &gpll6.clkr.hw },
    320		.num_parents = 1,
    321		.ops = &clk_alpha_pll_postdiv_ro_ops,
    322	},
    323};
    324
    325static struct clk_alpha_pll gpll7 = {
    326	.offset = 0x7000,
    327	.vco_table = default_vco,
    328	.num_vco = ARRAY_SIZE(default_vco),
    329	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
    330	.clkr = {
    331		.enable_reg = 0x79000,
    332		.enable_mask = BIT(7),
    333		.hw.init = &(struct clk_init_data){
    334			.name = "gpll7",
    335			.parent_data = &(const struct clk_parent_data){
    336				.fw_name = "bi_tcxo",
    337			},
    338			.num_parents = 1,
    339			.ops = &clk_alpha_pll_ops,
    340		},
    341	},
    342};
    343
    344static const struct clk_div_table post_div_table_gpll7_out_main[] = {
    345	{ 0x0, 1 },
    346	{ }
    347};
    348
    349static struct clk_alpha_pll_postdiv gpll7_out_main = {
    350	.offset = 0x7000,
    351	.post_div_shift = 8,
    352	.post_div_table = post_div_table_gpll7_out_main,
    353	.num_post_div = ARRAY_SIZE(post_div_table_gpll7_out_main),
    354	.width = 4,
    355	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
    356	.clkr.hw.init = &(struct clk_init_data){
    357		.name = "gpll7_out_main",
    358		.parent_hws = (const struct clk_hw *[]){ &gpll7.clkr.hw },
    359		.num_parents = 1,
    360		.ops = &clk_alpha_pll_postdiv_ro_ops,
    361	},
    362};
    363
    364/* 800MHz configuration */
    365static const struct alpha_pll_config gpll8_config = {
    366	.l = 0x29,
    367	.alpha = 0xAAAAAAAA,
    368	.alpha_hi = 0xAA,
    369	.alpha_en_mask = BIT(24),
    370	.vco_val = 0x2 << 20,
    371	.vco_mask = GENMASK(21, 20),
    372	.main_output_mask = BIT(0),
    373	.early_output_mask = BIT(3),
    374	.post_div_val = 0x1 << 8,
    375	.post_div_mask = GENMASK(11, 8),
    376	.config_ctl_val = 0x4001055b,
    377};
    378
    379static struct clk_alpha_pll gpll8 = {
    380	.offset = 0x8000,
    381	.vco_table = default_vco,
    382	.num_vco = ARRAY_SIZE(default_vco),
    383	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
    384	.flags = SUPPORTS_DYNAMIC_UPDATE,
    385	.clkr = {
    386		.enable_reg = 0x79000,
    387		.enable_mask = BIT(8),
    388		.hw.init = &(struct clk_init_data){
    389			.name = "gpll8",
    390			.parent_data = &(const struct clk_parent_data){
    391				.fw_name = "bi_tcxo",
    392			},
    393			.num_parents = 1,
    394			.ops = &clk_alpha_pll_ops,
    395		},
    396	},
    397};
    398
    399static const struct clk_div_table post_div_table_gpll8_out_main[] = {
    400	{ 0x1, 2 },
    401	{ }
    402};
    403
    404static struct clk_alpha_pll_postdiv gpll8_out_main = {
    405	.offset = 0x8000,
    406	.post_div_shift = 8,
    407	.post_div_table = post_div_table_gpll8_out_main,
    408	.num_post_div = ARRAY_SIZE(post_div_table_gpll8_out_main),
    409	.width = 4,
    410	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
    411	.clkr.hw.init = &(struct clk_init_data){
    412		.name = "gpll8_out_main",
    413		.parent_hws = (const struct clk_hw *[]){ &gpll8.clkr.hw },
    414		.num_parents = 1,
    415		.flags = CLK_SET_RATE_PARENT,
    416		.ops = &clk_alpha_pll_postdiv_ro_ops,
    417	},
    418};
    419
    420/* 1152MHz configuration */
    421static const struct alpha_pll_config gpll9_config = {
    422	.l = 0x3C,
    423	.alpha = 0x0,
    424	.post_div_val = 0x1 << 8,
    425	.post_div_mask = GENMASK(9, 8),
    426	.main_output_mask = BIT(0),
    427	.config_ctl_val = 0x00004289,
    428};
    429
    430static struct clk_alpha_pll gpll9 = {
    431	.offset = 0x9000,
    432	.vco_table = gpll9_vco,
    433	.num_vco = ARRAY_SIZE(gpll9_vco),
    434	.regs = clk_gpll9_regs,
    435	.clkr = {
    436		.enable_reg = 0x79000,
    437		.enable_mask = BIT(9),
    438		.hw.init = &(struct clk_init_data){
    439			.name = "gpll9",
    440			.parent_data = &(const struct clk_parent_data){
    441				.fw_name = "bi_tcxo",
    442			},
    443			.num_parents = 1,
    444			.ops = &clk_alpha_pll_ops,
    445		},
    446	},
    447};
    448
    449static const struct clk_div_table post_div_table_gpll9_out_main[] = {
    450	{ 0x1, 2 },
    451	{ }
    452};
    453
    454static struct clk_alpha_pll_postdiv gpll9_out_main = {
    455	.offset = 0x9000,
    456	.post_div_shift = 8,
    457	.post_div_table = post_div_table_gpll9_out_main,
    458	.num_post_div = ARRAY_SIZE(post_div_table_gpll9_out_main),
    459	.width = 2,
    460	.regs = clk_gpll9_regs,
    461	.clkr.hw.init = &(struct clk_init_data){
    462		.name = "gpll9_out_main",
    463		.parent_hws = (const struct clk_hw *[]){ &gpll9.clkr.hw },
    464		.num_parents = 1,
    465		.flags = CLK_SET_RATE_PARENT,
    466		.ops = &clk_alpha_pll_postdiv_ops,
    467	},
    468};
    469
    470static const struct parent_map gcc_parent_map_0[] = {
    471	{ P_BI_TCXO, 0 },
    472	{ P_GPLL0_OUT_EARLY, 1 },
    473	{ P_GPLL0_OUT_AUX2, 2 },
    474};
    475
    476static const struct clk_parent_data gcc_parents_0[] = {
    477	{ .fw_name = "bi_tcxo" },
    478	{ .hw = &gpll0.clkr.hw },
    479	{ .hw = &gpll0_out_aux2.clkr.hw },
    480};
    481
    482static const struct parent_map gcc_parent_map_1[] = {
    483	{ P_BI_TCXO, 0 },
    484	{ P_GPLL0_OUT_EARLY, 1 },
    485	{ P_GPLL0_OUT_AUX2, 2 },
    486	{ P_GPLL6_OUT_MAIN, 4 },
    487};
    488
    489static const struct clk_parent_data gcc_parents_1[] = {
    490	{ .fw_name = "bi_tcxo" },
    491	{ .hw = &gpll0.clkr.hw },
    492	{ .hw = &gpll0_out_aux2.clkr.hw },
    493	{ .hw = &gpll6_out_main.clkr.hw },
    494};
    495
    496static const struct parent_map gcc_parent_map_2[] = {
    497	{ P_BI_TCXO, 0 },
    498	{ P_GPLL0_OUT_EARLY, 1 },
    499	{ P_GPLL0_OUT_AUX2, 2 },
    500	{ P_SLEEP_CLK, 5 },
    501};
    502
    503static const struct clk_parent_data gcc_parents_2[] = {
    504	{ .fw_name = "bi_tcxo" },
    505	{ .hw = &gpll0.clkr.hw },
    506	{ .hw = &gpll0_out_aux2.clkr.hw },
    507	{ .fw_name = "sleep_clk" },
    508};
    509
    510static const struct parent_map gcc_parent_map_3[] = {
    511	{ P_BI_TCXO, 0 },
    512	{ P_GPLL0_OUT_EARLY, 1 },
    513	{ P_GPLL9_OUT_EARLY, 2 },
    514	{ P_GPLL10_OUT_MAIN, 3 },
    515	{ P_GPLL9_OUT_MAIN, 5 },
    516};
    517
    518static const struct clk_parent_data gcc_parents_3[] = {
    519	{ .fw_name = "bi_tcxo" },
    520	{ .hw = &gpll0.clkr.hw },
    521	{ .hw = &gpll9.clkr.hw },
    522	{ .hw = &gpll10_out_main.clkr.hw },
    523	{ .hw = &gpll9_out_main.clkr.hw },
    524};
    525
    526static const struct parent_map gcc_parent_map_4[] = {
    527	{ P_BI_TCXO, 0 },
    528	{ P_GPLL0_OUT_EARLY, 1 },
    529	{ P_GPLL0_OUT_AUX2, 2 },
    530	{ P_GPLL4_OUT_MAIN, 5 },
    531};
    532
    533static const struct clk_parent_data gcc_parents_4[] = {
    534	{ .fw_name = "bi_tcxo" },
    535	{ .hw = &gpll0.clkr.hw },
    536	{ .hw = &gpll0_out_aux2.clkr.hw },
    537	{ .hw = &gpll4_out_main.clkr.hw },
    538};
    539
    540static const struct parent_map gcc_parent_map_5[] = {
    541	{ P_BI_TCXO, 0 },
    542	{ P_GPLL0_OUT_EARLY, 1 },
    543	{ P_GPLL8_OUT_EARLY, 2 },
    544	{ P_GPLL10_OUT_MAIN, 3 },
    545	{ P_GPLL8_OUT_MAIN, 4 },
    546	{ P_GPLL9_OUT_MAIN, 5 },
    547};
    548
    549static const struct clk_parent_data gcc_parents_5[] = {
    550	{ .fw_name = "bi_tcxo" },
    551	{ .hw = &gpll0.clkr.hw },
    552	{ .hw = &gpll8.clkr.hw },
    553	{ .hw = &gpll10_out_main.clkr.hw },
    554	{ .hw = &gpll8_out_main.clkr.hw },
    555	{ .hw = &gpll9_out_main.clkr.hw },
    556};
    557
    558static const struct parent_map gcc_parent_map_6[] = {
    559	{ P_BI_TCXO, 0 },
    560	{ P_GPLL0_OUT_EARLY, 1 },
    561	{ P_GPLL8_OUT_EARLY, 2 },
    562	{ P_GPLL10_OUT_MAIN, 3 },
    563	{ P_GPLL6_OUT_MAIN, 4 },
    564	{ P_GPLL9_OUT_MAIN, 5 },
    565	{ P_GPLL3_OUT_EARLY, 6 },
    566};
    567
    568static const struct clk_parent_data gcc_parents_6[] = {
    569	{ .fw_name = "bi_tcxo" },
    570	{ .hw = &gpll0.clkr.hw },
    571	{ .hw = &gpll8.clkr.hw },
    572	{ .hw = &gpll10_out_main.clkr.hw },
    573	{ .hw = &gpll6_out_main.clkr.hw },
    574	{ .hw = &gpll9_out_main.clkr.hw },
    575	{ .hw = &gpll3.clkr.hw },
    576};
    577
    578static const struct parent_map gcc_parent_map_7[] = {
    579	{ P_BI_TCXO, 0 },
    580	{ P_GPLL0_OUT_EARLY, 1 },
    581	{ P_GPLL0_OUT_AUX2, 2 },
    582	{ P_GPLL10_OUT_MAIN, 3 },
    583	{ P_GPLL4_OUT_MAIN, 5 },
    584	{ P_GPLL3_OUT_EARLY, 6 },
    585};
    586
    587static const struct clk_parent_data gcc_parents_7[] = {
    588	{ .fw_name = "bi_tcxo" },
    589	{ .hw = &gpll0.clkr.hw },
    590	{ .hw = &gpll0_out_aux2.clkr.hw },
    591	{ .hw = &gpll10_out_main.clkr.hw },
    592	{ .hw = &gpll4_out_main.clkr.hw },
    593	{ .hw = &gpll3.clkr.hw },
    594};
    595
    596static const struct parent_map gcc_parent_map_8[] = {
    597	{ P_BI_TCXO, 0 },
    598	{ P_GPLL0_OUT_EARLY, 1 },
    599	{ P_GPLL8_OUT_EARLY, 2 },
    600	{ P_GPLL10_OUT_MAIN, 3 },
    601	{ P_GPLL8_OUT_MAIN, 4 },
    602	{ P_GPLL9_OUT_MAIN, 5 },
    603	{ P_GPLL3_OUT_EARLY, 6 },
    604};
    605
    606static const struct clk_parent_data gcc_parents_8[] = {
    607	{ .fw_name = "bi_tcxo" },
    608	{ .hw = &gpll0.clkr.hw },
    609	{ .hw = &gpll8.clkr.hw },
    610	{ .hw = &gpll10_out_main.clkr.hw },
    611	{ .hw = &gpll8_out_main.clkr.hw },
    612	{ .hw = &gpll9_out_main.clkr.hw },
    613	{ .hw = &gpll3.clkr.hw },
    614};
    615
    616static const struct parent_map gcc_parent_map_9[] = {
    617	{ P_BI_TCXO, 0 },
    618	{ P_GPLL0_OUT_EARLY, 1 },
    619	{ P_GPLL0_OUT_AUX2, 2 },
    620	{ P_GPLL10_OUT_MAIN, 3 },
    621	{ P_GPLL8_OUT_MAIN, 4 },
    622	{ P_GPLL9_OUT_MAIN, 5 },
    623	{ P_GPLL3_OUT_EARLY, 6 },
    624};
    625
    626static const struct clk_parent_data gcc_parents_9[] = {
    627	{ .fw_name = "bi_tcxo" },
    628	{ .hw = &gpll0.clkr.hw },
    629	{ .hw = &gpll0_out_aux2.clkr.hw },
    630	{ .hw = &gpll10_out_main.clkr.hw },
    631	{ .hw = &gpll8_out_main.clkr.hw },
    632	{ .hw = &gpll9_out_main.clkr.hw },
    633	{ .hw = &gpll3.clkr.hw },
    634};
    635
    636static const struct parent_map gcc_parent_map_10[] = {
    637	{ P_BI_TCXO, 0 },
    638	{ P_GPLL0_OUT_EARLY, 1 },
    639	{ P_GPLL8_OUT_EARLY, 2 },
    640	{ P_GPLL10_OUT_MAIN, 3 },
    641	{ P_GPLL6_OUT_EARLY, 4 },
    642	{ P_GPLL9_OUT_MAIN, 5 },
    643};
    644
    645static const struct clk_parent_data gcc_parents_10[] = {
    646	{ .fw_name = "bi_tcxo" },
    647	{ .hw = &gpll0.clkr.hw },
    648	{ .hw = &gpll8.clkr.hw },
    649	{ .hw = &gpll10_out_main.clkr.hw },
    650	{ .hw = &gpll6.clkr.hw },
    651	{ .hw = &gpll9_out_main.clkr.hw },
    652};
    653
    654static const struct parent_map gcc_parent_map_11[] = {
    655	{ P_BI_TCXO, 0 },
    656	{ P_GPLL0_OUT_EARLY, 1 },
    657	{ P_GPLL0_OUT_AUX2, 2 },
    658	{ P_GPLL7_OUT_MAIN, 3 },
    659	{ P_GPLL4_OUT_MAIN, 5 },
    660};
    661
    662static const struct clk_parent_data gcc_parents_11[] = {
    663	{ .fw_name = "bi_tcxo" },
    664	{ .hw = &gpll0.clkr.hw },
    665	{ .hw = &gpll0_out_aux2.clkr.hw },
    666	{ .hw = &gpll7_out_main.clkr.hw },
    667	{ .hw = &gpll4_out_main.clkr.hw },
    668};
    669
    670static const struct parent_map gcc_parent_map_12[] = {
    671	{ P_BI_TCXO, 0 },
    672	{ P_SLEEP_CLK, 5 },
    673};
    674
    675static const struct clk_parent_data gcc_parents_12[] = {
    676	{ .fw_name = "bi_tcxo" },
    677	{ .fw_name = "sleep_clk" },
    678};
    679
    680static const struct parent_map gcc_parent_map_13[] = {
    681	{ P_BI_TCXO, 0 },
    682	{ P_GPLL11_OUT_MAIN, 1 },
    683};
    684
    685static const struct clk_parent_data gcc_parents_13[] = {
    686	{ .fw_name = "bi_tcxo" },
    687	{ .hw = &gpll11_out_main.clkr.hw },
    688};
    689
    690static const struct freq_tbl ftbl_gcc_camss_axi_clk_src[] = {
    691	F(19200000, P_BI_TCXO, 1, 0, 0),
    692	F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),
    693	F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),
    694	F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0),
    695	{ }
    696};
    697
    698static struct clk_rcg2 gcc_camss_axi_clk_src = {
    699	.cmd_rcgr = 0x5802c,
    700	.mnd_width = 0,
    701	.hid_width = 5,
    702	.parent_map = gcc_parent_map_7,
    703	.freq_tbl = ftbl_gcc_camss_axi_clk_src,
    704	.clkr.hw.init = &(struct clk_init_data){
    705		.name = "gcc_camss_axi_clk_src",
    706		.parent_data = gcc_parents_7,
    707		.num_parents = ARRAY_SIZE(gcc_parents_7),
    708		.flags = CLK_SET_RATE_PARENT,
    709		.ops = &clk_rcg2_ops,
    710	},
    711};
    712
    713static const struct freq_tbl ftbl_gcc_camss_cci_clk_src[] = {
    714	F(19200000, P_BI_TCXO, 1, 0, 0),
    715	F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0),
    716	{ }
    717};
    718
    719static struct clk_rcg2 gcc_camss_cci_clk_src = {
    720	.cmd_rcgr = 0x56000,
    721	.mnd_width = 0,
    722	.hid_width = 5,
    723	.parent_map = gcc_parent_map_9,
    724	.freq_tbl = ftbl_gcc_camss_cci_clk_src,
    725	.clkr.hw.init = &(struct clk_init_data){
    726		.name = "gcc_camss_cci_clk_src",
    727		.parent_data = gcc_parents_9,
    728		.num_parents = ARRAY_SIZE(gcc_parents_9),
    729		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
    730		.ops = &clk_rcg2_ops,
    731	},
    732};
    733
    734static const struct freq_tbl ftbl_gcc_camss_csi0phytimer_clk_src[] = {
    735	F(19200000, P_BI_TCXO, 1, 0, 0),
    736	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
    737	F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),
    738	F(268800000, P_GPLL4_OUT_MAIN, 3, 0, 0),
    739	{ }
    740};
    741
    742static struct clk_rcg2 gcc_camss_csi0phytimer_clk_src = {
    743	.cmd_rcgr = 0x59000,
    744	.mnd_width = 0,
    745	.hid_width = 5,
    746	.parent_map = gcc_parent_map_4,
    747	.freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
    748	.clkr.hw.init = &(struct clk_init_data){
    749		.name = "gcc_camss_csi0phytimer_clk_src",
    750		.parent_data = gcc_parents_4,
    751		.num_parents = ARRAY_SIZE(gcc_parents_4),
    752		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
    753		.ops = &clk_rcg2_ops,
    754	},
    755};
    756
    757static struct clk_rcg2 gcc_camss_csi1phytimer_clk_src = {
    758	.cmd_rcgr = 0x5901c,
    759	.mnd_width = 0,
    760	.hid_width = 5,
    761	.parent_map = gcc_parent_map_4,
    762	.freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
    763	.clkr.hw.init = &(struct clk_init_data){
    764		.name = "gcc_camss_csi1phytimer_clk_src",
    765		.parent_data = gcc_parents_4,
    766		.num_parents = ARRAY_SIZE(gcc_parents_4),
    767		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
    768		.ops = &clk_rcg2_ops,
    769	},
    770};
    771
    772static struct clk_rcg2 gcc_camss_csi2phytimer_clk_src = {
    773	.cmd_rcgr = 0x59038,
    774	.mnd_width = 0,
    775	.hid_width = 5,
    776	.parent_map = gcc_parent_map_4,
    777	.freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
    778	.clkr.hw.init = &(struct clk_init_data){
    779		.name = "gcc_camss_csi2phytimer_clk_src",
    780		.parent_data = gcc_parents_4,
    781		.num_parents = ARRAY_SIZE(gcc_parents_4),
    782		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
    783		.ops = &clk_rcg2_ops,
    784	},
    785};
    786
    787static const struct freq_tbl ftbl_gcc_camss_mclk0_clk_src[] = {
    788	F(19200000, P_BI_TCXO, 1, 0, 0),
    789	F(24000000, P_GPLL9_OUT_MAIN, 1, 1, 24),
    790	F(64000000, P_GPLL9_OUT_MAIN, 1, 1, 9),
    791	{ }
    792};
    793
    794static struct clk_rcg2 gcc_camss_mclk0_clk_src = {
    795	.cmd_rcgr = 0x51000,
    796	.mnd_width = 8,
    797	.hid_width = 5,
    798	.parent_map = gcc_parent_map_3,
    799	.freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
    800	.clkr.hw.init = &(struct clk_init_data){
    801		.name = "gcc_camss_mclk0_clk_src",
    802		.parent_data = gcc_parents_3,
    803		.num_parents = ARRAY_SIZE(gcc_parents_3),
    804		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
    805		.ops = &clk_rcg2_ops,
    806	},
    807};
    808
    809static struct clk_rcg2 gcc_camss_mclk1_clk_src = {
    810	.cmd_rcgr = 0x5101c,
    811	.mnd_width = 8,
    812	.hid_width = 5,
    813	.parent_map = gcc_parent_map_3,
    814	.freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
    815	.clkr.hw.init = &(struct clk_init_data){
    816		.name = "gcc_camss_mclk1_clk_src",
    817		.parent_data = gcc_parents_3,
    818		.num_parents = ARRAY_SIZE(gcc_parents_3),
    819		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
    820		.ops = &clk_rcg2_ops,
    821	},
    822};
    823
    824static struct clk_rcg2 gcc_camss_mclk2_clk_src = {
    825	.cmd_rcgr = 0x51038,
    826	.mnd_width = 8,
    827	.hid_width = 5,
    828	.parent_map = gcc_parent_map_3,
    829	.freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
    830	.clkr.hw.init = &(struct clk_init_data){
    831		.name = "gcc_camss_mclk2_clk_src",
    832		.parent_data = gcc_parents_3,
    833		.num_parents = ARRAY_SIZE(gcc_parents_3),
    834		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
    835		.ops = &clk_rcg2_ops,
    836	},
    837};
    838
    839static struct clk_rcg2 gcc_camss_mclk3_clk_src = {
    840	.cmd_rcgr = 0x51054,
    841	.mnd_width = 8,
    842	.hid_width = 5,
    843	.parent_map = gcc_parent_map_3,
    844	.freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
    845	.clkr.hw.init = &(struct clk_init_data){
    846		.name = "gcc_camss_mclk3_clk_src",
    847		.parent_data = gcc_parents_3,
    848		.num_parents = ARRAY_SIZE(gcc_parents_3),
    849		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
    850		.ops = &clk_rcg2_ops,
    851	},
    852};
    853
    854static const struct freq_tbl ftbl_gcc_camss_ope_ahb_clk_src[] = {
    855	F(19200000, P_BI_TCXO, 1, 0, 0),
    856	F(171428571, P_GPLL0_OUT_EARLY, 3.5, 0, 0),
    857	F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
    858	{ }
    859};
    860
    861static struct clk_rcg2 gcc_camss_ope_ahb_clk_src = {
    862	.cmd_rcgr = 0x55024,
    863	.mnd_width = 0,
    864	.hid_width = 5,
    865	.parent_map = gcc_parent_map_8,
    866	.freq_tbl = ftbl_gcc_camss_ope_ahb_clk_src,
    867	.clkr.hw.init = &(struct clk_init_data){
    868		.name = "gcc_camss_ope_ahb_clk_src",
    869		.parent_data = gcc_parents_8,
    870		.num_parents = ARRAY_SIZE(gcc_parents_8),
    871		.flags = CLK_SET_RATE_PARENT,
    872		.ops = &clk_rcg2_ops,
    873	},
    874};
    875
    876static const struct freq_tbl ftbl_gcc_camss_ope_clk_src[] = {
    877	F(19200000, P_BI_TCXO, 1, 0, 0),
    878	F(200000000, P_GPLL8_OUT_MAIN, 2, 0, 0),
    879	F(266600000, P_GPLL8_OUT_MAIN, 1, 0, 0),
    880	F(465000000, P_GPLL8_OUT_MAIN, 1, 0, 0),
    881	F(576000000, P_GPLL9_OUT_MAIN, 1, 0, 0),
    882	{ }
    883};
    884
    885static struct clk_rcg2 gcc_camss_ope_clk_src = {
    886	.cmd_rcgr = 0x55004,
    887	.mnd_width = 0,
    888	.hid_width = 5,
    889	.parent_map = gcc_parent_map_8,
    890	.freq_tbl = ftbl_gcc_camss_ope_clk_src,
    891	.clkr.hw.init = &(struct clk_init_data){
    892		.name = "gcc_camss_ope_clk_src",
    893		.parent_data = gcc_parents_8,
    894		.num_parents = ARRAY_SIZE(gcc_parents_8),
    895		.flags = CLK_SET_RATE_PARENT,
    896		.ops = &clk_rcg2_ops,
    897	},
    898};
    899
    900static const struct freq_tbl ftbl_gcc_camss_tfe_0_clk_src[] = {
    901	F(19200000, P_BI_TCXO, 1, 0, 0),
    902	F(128000000, P_GPLL10_OUT_MAIN, 9, 0, 0),
    903	F(135529412, P_GPLL10_OUT_MAIN, 8.5, 0, 0),
    904	F(144000000, P_GPLL10_OUT_MAIN, 8, 0, 0),
    905	F(153600000, P_GPLL10_OUT_MAIN, 7.5, 0, 0),
    906	F(164571429, P_GPLL10_OUT_MAIN, 7, 0, 0),
    907	F(177230769, P_GPLL10_OUT_MAIN, 6.5, 0, 0),
    908	F(192000000, P_GPLL10_OUT_MAIN, 6, 0, 0),
    909	F(209454545, P_GPLL10_OUT_MAIN, 5.5, 0, 0),
    910	F(230400000, P_GPLL10_OUT_MAIN, 5, 0, 0),
    911	F(256000000, P_GPLL10_OUT_MAIN, 4.5, 0, 0),
    912	F(288000000, P_GPLL10_OUT_MAIN, 4, 0, 0),
    913	F(329142857, P_GPLL10_OUT_MAIN, 3.5, 0, 0),
    914	F(384000000, P_GPLL10_OUT_MAIN, 3, 0, 0),
    915	F(460800000, P_GPLL10_OUT_MAIN, 2.5, 0, 0),
    916	F(576000000, P_GPLL10_OUT_MAIN, 2, 0, 0),
    917	{ }
    918};
    919
    920static struct clk_rcg2 gcc_camss_tfe_0_clk_src = {
    921	.cmd_rcgr = 0x52004,
    922	.mnd_width = 8,
    923	.hid_width = 5,
    924	.parent_map = gcc_parent_map_5,
    925	.freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,
    926	.clkr.hw.init = &(struct clk_init_data){
    927		.name = "gcc_camss_tfe_0_clk_src",
    928		.parent_data = gcc_parents_5,
    929		.num_parents = ARRAY_SIZE(gcc_parents_5),
    930		.flags = CLK_SET_RATE_PARENT,
    931		.ops = &clk_rcg2_ops,
    932	},
    933};
    934
    935static const struct freq_tbl ftbl_gcc_camss_tfe_0_csid_clk_src[] = {
    936	F(19200000, P_BI_TCXO, 1, 0, 0),
    937	F(120000000, P_GPLL0_OUT_EARLY, 5, 0, 0),
    938	F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0),
    939	F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
    940	F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0),
    941	F(426400000, P_GPLL3_OUT_EARLY, 2.5, 0, 0),
    942	{ }
    943};
    944
    945static struct clk_rcg2 gcc_camss_tfe_0_csid_clk_src = {
    946	.cmd_rcgr = 0x52094,
    947	.mnd_width = 0,
    948	.hid_width = 5,
    949	.parent_map = gcc_parent_map_6,
    950	.freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,
    951	.clkr.hw.init = &(struct clk_init_data){
    952		.name = "gcc_camss_tfe_0_csid_clk_src",
    953		.parent_data = gcc_parents_6,
    954		.num_parents = ARRAY_SIZE(gcc_parents_6),
    955		.flags = CLK_SET_RATE_PARENT,
    956		.ops = &clk_rcg2_ops,
    957	},
    958};
    959
    960static struct clk_rcg2 gcc_camss_tfe_1_clk_src = {
    961	.cmd_rcgr = 0x52024,
    962	.mnd_width = 8,
    963	.hid_width = 5,
    964	.parent_map = gcc_parent_map_5,
    965	.freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,
    966	.clkr.hw.init = &(struct clk_init_data){
    967		.name = "gcc_camss_tfe_1_clk_src",
    968		.parent_data = gcc_parents_5,
    969		.num_parents = ARRAY_SIZE(gcc_parents_5),
    970		.flags = CLK_SET_RATE_PARENT,
    971		.ops = &clk_rcg2_ops,
    972	},
    973};
    974
    975static struct clk_rcg2 gcc_camss_tfe_1_csid_clk_src = {
    976	.cmd_rcgr = 0x520b4,
    977	.mnd_width = 0,
    978	.hid_width = 5,
    979	.parent_map = gcc_parent_map_6,
    980	.freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,
    981	.clkr.hw.init = &(struct clk_init_data){
    982		.name = "gcc_camss_tfe_1_csid_clk_src",
    983		.parent_data = gcc_parents_6,
    984		.num_parents = ARRAY_SIZE(gcc_parents_6),
    985		.flags = CLK_SET_RATE_PARENT,
    986		.ops = &clk_rcg2_ops,
    987	},
    988};
    989
    990static struct clk_rcg2 gcc_camss_tfe_2_clk_src = {
    991	.cmd_rcgr = 0x52044,
    992	.mnd_width = 8,
    993	.hid_width = 5,
    994	.parent_map = gcc_parent_map_5,
    995	.freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,
    996	.clkr.hw.init = &(struct clk_init_data){
    997		.name = "gcc_camss_tfe_2_clk_src",
    998		.parent_data = gcc_parents_5,
    999		.num_parents = ARRAY_SIZE(gcc_parents_5),
   1000		.flags = CLK_SET_RATE_PARENT,
   1001		.ops = &clk_rcg2_ops,
   1002	},
   1003};
   1004
   1005static struct clk_rcg2 gcc_camss_tfe_2_csid_clk_src = {
   1006	.cmd_rcgr = 0x520d4,
   1007	.mnd_width = 0,
   1008	.hid_width = 5,
   1009	.parent_map = gcc_parent_map_6,
   1010	.freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,
   1011	.clkr.hw.init = &(struct clk_init_data){
   1012		.name = "gcc_camss_tfe_2_csid_clk_src",
   1013		.parent_data = gcc_parents_6,
   1014		.num_parents = ARRAY_SIZE(gcc_parents_6),
   1015		.flags = CLK_SET_RATE_PARENT,
   1016		.ops = &clk_rcg2_ops,
   1017	},
   1018};
   1019
   1020static const struct freq_tbl ftbl_gcc_camss_tfe_cphy_rx_clk_src[] = {
   1021	F(19200000, P_BI_TCXO, 1, 0, 0),
   1022	F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
   1023	F(341333333, P_GPLL6_OUT_EARLY, 1, 4, 9),
   1024	F(384000000, P_GPLL6_OUT_EARLY, 2, 0, 0),
   1025	{ }
   1026};
   1027
   1028static struct clk_rcg2 gcc_camss_tfe_cphy_rx_clk_src = {
   1029	.cmd_rcgr = 0x52064,
   1030	.mnd_width = 16,
   1031	.hid_width = 5,
   1032	.parent_map = gcc_parent_map_10,
   1033	.freq_tbl = ftbl_gcc_camss_tfe_cphy_rx_clk_src,
   1034	.clkr.hw.init = &(struct clk_init_data){
   1035		.name = "gcc_camss_tfe_cphy_rx_clk_src",
   1036		.parent_data = gcc_parents_10,
   1037		.num_parents = ARRAY_SIZE(gcc_parents_10),
   1038		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
   1039		.ops = &clk_rcg2_ops,
   1040	},
   1041};
   1042
   1043static const struct freq_tbl ftbl_gcc_camss_top_ahb_clk_src[] = {
   1044	F(19200000, P_BI_TCXO, 1, 0, 0),
   1045	F(40000000, P_GPLL0_OUT_AUX2, 7.5, 0, 0),
   1046	F(80000000, P_GPLL0_OUT_EARLY, 7.5, 0, 0),
   1047	{ }
   1048};
   1049
   1050static struct clk_rcg2 gcc_camss_top_ahb_clk_src = {
   1051	.cmd_rcgr = 0x58010,
   1052	.mnd_width = 0,
   1053	.hid_width = 5,
   1054	.parent_map = gcc_parent_map_7,
   1055	.freq_tbl = ftbl_gcc_camss_top_ahb_clk_src,
   1056	.clkr.hw.init = &(struct clk_init_data){
   1057		.name = "gcc_camss_top_ahb_clk_src",
   1058		.parent_data = gcc_parents_7,
   1059		.num_parents = ARRAY_SIZE(gcc_parents_7),
   1060		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
   1061		.ops = &clk_rcg2_ops,
   1062	},
   1063};
   1064
   1065static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
   1066	F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),
   1067	F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
   1068	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
   1069	F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),
   1070	{ }
   1071};
   1072
   1073static struct clk_rcg2 gcc_gp1_clk_src = {
   1074	.cmd_rcgr = 0x4d004,
   1075	.mnd_width = 8,
   1076	.hid_width = 5,
   1077	.parent_map = gcc_parent_map_2,
   1078	.freq_tbl = ftbl_gcc_gp1_clk_src,
   1079	.clkr.hw.init = &(struct clk_init_data){
   1080		.name = "gcc_gp1_clk_src",
   1081		.parent_data = gcc_parents_2,
   1082		.num_parents = ARRAY_SIZE(gcc_parents_2),
   1083		.ops = &clk_rcg2_ops,
   1084	},
   1085};
   1086
   1087static struct clk_rcg2 gcc_gp2_clk_src = {
   1088	.cmd_rcgr = 0x4e004,
   1089	.mnd_width = 8,
   1090	.hid_width = 5,
   1091	.parent_map = gcc_parent_map_2,
   1092	.freq_tbl = ftbl_gcc_gp1_clk_src,
   1093	.clkr.hw.init = &(struct clk_init_data){
   1094		.name = "gcc_gp2_clk_src",
   1095		.parent_data = gcc_parents_2,
   1096		.num_parents = ARRAY_SIZE(gcc_parents_2),
   1097		.ops = &clk_rcg2_ops,
   1098	},
   1099};
   1100
   1101static struct clk_rcg2 gcc_gp3_clk_src = {
   1102	.cmd_rcgr = 0x4f004,
   1103	.mnd_width = 8,
   1104	.hid_width = 5,
   1105	.parent_map = gcc_parent_map_2,
   1106	.freq_tbl = ftbl_gcc_gp1_clk_src,
   1107	.clkr.hw.init = &(struct clk_init_data){
   1108		.name = "gcc_gp3_clk_src",
   1109		.parent_data = gcc_parents_2,
   1110		.num_parents = ARRAY_SIZE(gcc_parents_2),
   1111		.ops = &clk_rcg2_ops,
   1112	},
   1113};
   1114
   1115static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
   1116	F(19200000, P_BI_TCXO, 1, 0, 0),
   1117	F(60000000, P_GPLL0_OUT_AUX2, 5, 0, 0),
   1118	{ }
   1119};
   1120
   1121static struct clk_rcg2 gcc_pdm2_clk_src = {
   1122	.cmd_rcgr = 0x20010,
   1123	.mnd_width = 0,
   1124	.hid_width = 5,
   1125	.parent_map = gcc_parent_map_0,
   1126	.freq_tbl = ftbl_gcc_pdm2_clk_src,
   1127	.clkr.hw.init = &(struct clk_init_data){
   1128		.name = "gcc_pdm2_clk_src",
   1129		.parent_data = gcc_parents_0,
   1130		.num_parents = ARRAY_SIZE(gcc_parents_0),
   1131		.ops = &clk_rcg2_ops,
   1132	},
   1133};
   1134
   1135static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
   1136	F(7372800, P_GPLL0_OUT_AUX2, 1, 384, 15625),
   1137	F(14745600, P_GPLL0_OUT_AUX2, 1, 768, 15625),
   1138	F(19200000, P_BI_TCXO, 1, 0, 0),
   1139	F(29491200, P_GPLL0_OUT_AUX2, 1, 1536, 15625),
   1140	F(32000000, P_GPLL0_OUT_AUX2, 1, 8, 75),
   1141	F(48000000, P_GPLL0_OUT_AUX2, 1, 4, 25),
   1142	F(64000000, P_GPLL0_OUT_AUX2, 1, 16, 75),
   1143	F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
   1144	F(80000000, P_GPLL0_OUT_AUX2, 1, 4, 15),
   1145	F(96000000, P_GPLL0_OUT_AUX2, 1, 8, 25),
   1146	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
   1147	F(102400000, P_GPLL0_OUT_AUX2, 1, 128, 375),
   1148	F(112000000, P_GPLL0_OUT_AUX2, 1, 28, 75),
   1149	F(117964800, P_GPLL0_OUT_AUX2, 1, 6144, 15625),
   1150	F(120000000, P_GPLL0_OUT_AUX2, 2.5, 0, 0),
   1151	F(128000000, P_GPLL6_OUT_MAIN, 3, 0, 0),
   1152	{ }
   1153};
   1154
   1155static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
   1156	.name = "gcc_qupv3_wrap0_s0_clk_src",
   1157	.parent_data = gcc_parents_1,
   1158	.num_parents = ARRAY_SIZE(gcc_parents_1),
   1159	.ops = &clk_rcg2_ops,
   1160};
   1161
   1162static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
   1163	.cmd_rcgr = 0x1f148,
   1164	.mnd_width = 16,
   1165	.hid_width = 5,
   1166	.parent_map = gcc_parent_map_1,
   1167	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
   1168	.clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
   1169};
   1170
   1171static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
   1172	.name = "gcc_qupv3_wrap0_s1_clk_src",
   1173	.parent_data = gcc_parents_1,
   1174	.num_parents = ARRAY_SIZE(gcc_parents_1),
   1175	.ops = &clk_rcg2_ops,
   1176};
   1177
   1178static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
   1179	.cmd_rcgr = 0x1f278,
   1180	.mnd_width = 16,
   1181	.hid_width = 5,
   1182	.parent_map = gcc_parent_map_1,
   1183	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
   1184	.clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
   1185};
   1186
   1187static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
   1188	.name = "gcc_qupv3_wrap0_s2_clk_src",
   1189	.parent_data = gcc_parents_1,
   1190	.num_parents = ARRAY_SIZE(gcc_parents_1),
   1191	.ops = &clk_rcg2_ops,
   1192};
   1193
   1194static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
   1195	.cmd_rcgr = 0x1f3a8,
   1196	.mnd_width = 16,
   1197	.hid_width = 5,
   1198	.parent_map = gcc_parent_map_1,
   1199	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
   1200	.clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
   1201};
   1202
   1203static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
   1204	.name = "gcc_qupv3_wrap0_s3_clk_src",
   1205	.parent_data = gcc_parents_1,
   1206	.num_parents = ARRAY_SIZE(gcc_parents_1),
   1207	.ops = &clk_rcg2_ops,
   1208};
   1209
   1210static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
   1211	.cmd_rcgr = 0x1f4d8,
   1212	.mnd_width = 16,
   1213	.hid_width = 5,
   1214	.parent_map = gcc_parent_map_1,
   1215	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
   1216	.clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
   1217};
   1218
   1219static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
   1220	.name = "gcc_qupv3_wrap0_s4_clk_src",
   1221	.parent_data = gcc_parents_1,
   1222	.num_parents = ARRAY_SIZE(gcc_parents_1),
   1223	.ops = &clk_rcg2_ops,
   1224};
   1225
   1226static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
   1227	.cmd_rcgr = 0x1f608,
   1228	.mnd_width = 16,
   1229	.hid_width = 5,
   1230	.parent_map = gcc_parent_map_1,
   1231	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
   1232	.clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
   1233};
   1234
   1235static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
   1236	.name = "gcc_qupv3_wrap0_s5_clk_src",
   1237	.parent_data = gcc_parents_1,
   1238	.num_parents = ARRAY_SIZE(gcc_parents_1),
   1239	.ops = &clk_rcg2_ops,
   1240};
   1241
   1242static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
   1243	.cmd_rcgr = 0x1f738,
   1244	.mnd_width = 16,
   1245	.hid_width = 5,
   1246	.parent_map = gcc_parent_map_1,
   1247	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
   1248	.clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
   1249};
   1250
   1251static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {
   1252	F(144000, P_BI_TCXO, 16, 3, 25),
   1253	F(400000, P_BI_TCXO, 12, 1, 4),
   1254	F(20000000, P_GPLL0_OUT_AUX2, 5, 1, 3),
   1255	F(25000000, P_GPLL0_OUT_AUX2, 6, 1, 2),
   1256	F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
   1257	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
   1258	F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0),
   1259	F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0),
   1260	{ }
   1261};
   1262
   1263static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {
   1264	.cmd_rcgr = 0x38028,
   1265	.mnd_width = 8,
   1266	.hid_width = 5,
   1267	.parent_map = gcc_parent_map_1,
   1268	.freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,
   1269	.clkr.hw.init = &(struct clk_init_data){
   1270		.name = "gcc_sdcc1_apps_clk_src",
   1271		.parent_data = gcc_parents_1,
   1272		.num_parents = ARRAY_SIZE(gcc_parents_1),
   1273		.ops = &clk_rcg2_ops,
   1274	},
   1275};
   1276
   1277static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = {
   1278	F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
   1279	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
   1280	F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),
   1281	F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
   1282	F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0),
   1283	{ }
   1284};
   1285
   1286static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = {
   1287	.cmd_rcgr = 0x38010,
   1288	.mnd_width = 0,
   1289	.hid_width = 5,
   1290	.parent_map = gcc_parent_map_0,
   1291	.freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src,
   1292	.clkr.hw.init = &(struct clk_init_data){
   1293		.name = "gcc_sdcc1_ice_core_clk_src",
   1294		.parent_data = gcc_parents_0,
   1295		.num_parents = ARRAY_SIZE(gcc_parents_0),
   1296		.ops = &clk_rcg2_ops,
   1297	},
   1298};
   1299
   1300static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
   1301	F(400000, P_BI_TCXO, 12, 1, 4),
   1302	F(19200000, P_BI_TCXO, 1, 0, 0),
   1303	F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),
   1304	F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
   1305	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
   1306	F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
   1307	{ }
   1308};
   1309
   1310static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
   1311	.cmd_rcgr = 0x1e00c,
   1312	.mnd_width = 8,
   1313	.hid_width = 5,
   1314	.parent_map = gcc_parent_map_11,
   1315	.freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
   1316	.clkr.hw.init = &(struct clk_init_data){
   1317		.name = "gcc_sdcc2_apps_clk_src",
   1318		.parent_data = gcc_parents_11,
   1319		.num_parents = ARRAY_SIZE(gcc_parents_11),
   1320		.ops = &clk_rcg2_ops,
   1321		.flags = CLK_OPS_PARENT_ENABLE,
   1322	},
   1323};
   1324
   1325static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
   1326	F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),
   1327	F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
   1328	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
   1329	F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
   1330	F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
   1331	{ }
   1332};
   1333
   1334static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
   1335	.cmd_rcgr = 0x45020,
   1336	.mnd_width = 8,
   1337	.hid_width = 5,
   1338	.parent_map = gcc_parent_map_0,
   1339	.freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
   1340	.clkr.hw.init = &(struct clk_init_data){
   1341		.name = "gcc_ufs_phy_axi_clk_src",
   1342		.parent_data = gcc_parents_0,
   1343		.num_parents = ARRAY_SIZE(gcc_parents_0),
   1344		.ops = &clk_rcg2_ops,
   1345	},
   1346};
   1347
   1348static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
   1349	F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0),
   1350	F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
   1351	F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),
   1352	F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0),
   1353	{ }
   1354};
   1355
   1356static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
   1357	.cmd_rcgr = 0x45048,
   1358	.mnd_width = 0,
   1359	.hid_width = 5,
   1360	.parent_map = gcc_parent_map_0,
   1361	.freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
   1362	.clkr.hw.init = &(struct clk_init_data){
   1363		.name = "gcc_ufs_phy_ice_core_clk_src",
   1364		.parent_data = gcc_parents_0,
   1365		.num_parents = ARRAY_SIZE(gcc_parents_0),
   1366		.ops = &clk_rcg2_ops,
   1367	},
   1368};
   1369
   1370static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = {
   1371	F(9600000, P_BI_TCXO, 2, 0, 0),
   1372	F(19200000, P_BI_TCXO, 1, 0, 0),
   1373	{ }
   1374};
   1375
   1376static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
   1377	.cmd_rcgr = 0x4507c,
   1378	.mnd_width = 0,
   1379	.hid_width = 5,
   1380	.parent_map = gcc_parent_map_0,
   1381	.freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src,
   1382	.clkr.hw.init = &(struct clk_init_data){
   1383		.name = "gcc_ufs_phy_phy_aux_clk_src",
   1384		.parent_data = gcc_parents_0,
   1385		.num_parents = ARRAY_SIZE(gcc_parents_0),
   1386		.ops = &clk_rcg2_ops,
   1387	},
   1388};
   1389
   1390static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_core_clk_src[] = {
   1391	F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0),
   1392	F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
   1393	F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),
   1394	{ }
   1395};
   1396
   1397static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
   1398	.cmd_rcgr = 0x45060,
   1399	.mnd_width = 0,
   1400	.hid_width = 5,
   1401	.parent_map = gcc_parent_map_0,
   1402	.freq_tbl = ftbl_gcc_ufs_phy_unipro_core_clk_src,
   1403	.clkr.hw.init = &(struct clk_init_data){
   1404		.name = "gcc_ufs_phy_unipro_core_clk_src",
   1405		.parent_data = gcc_parents_0,
   1406		.num_parents = ARRAY_SIZE(gcc_parents_0),
   1407		.ops = &clk_rcg2_ops,
   1408	},
   1409};
   1410
   1411static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
   1412	F(66666667, P_GPLL0_OUT_AUX2, 4.5, 0, 0),
   1413	F(133333333, P_GPLL0_OUT_EARLY, 4.5, 0, 0),
   1414	F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
   1415	F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
   1416	{ }
   1417};
   1418
   1419static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
   1420	.cmd_rcgr = 0x1a01c,
   1421	.mnd_width = 8,
   1422	.hid_width = 5,
   1423	.parent_map = gcc_parent_map_0,
   1424	.freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
   1425	.clkr.hw.init = &(struct clk_init_data){
   1426		.name = "gcc_usb30_prim_master_clk_src",
   1427		.parent_data = gcc_parents_0,
   1428		.num_parents = ARRAY_SIZE(gcc_parents_0),
   1429		.ops = &clk_rcg2_ops,
   1430	},
   1431};
   1432
   1433static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {
   1434	F(19200000, P_BI_TCXO, 1, 0, 0),
   1435	{ }
   1436};
   1437
   1438static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
   1439	.cmd_rcgr = 0x1a034,
   1440	.mnd_width = 0,
   1441	.hid_width = 5,
   1442	.parent_map = gcc_parent_map_0,
   1443	.freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
   1444	.clkr.hw.init = &(struct clk_init_data){
   1445		.name = "gcc_usb30_prim_mock_utmi_clk_src",
   1446		.parent_data = gcc_parents_0,
   1447		.num_parents = ARRAY_SIZE(gcc_parents_0),
   1448		.ops = &clk_rcg2_ops,
   1449	},
   1450};
   1451
   1452static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {
   1453	.reg = 0x1a04c,
   1454	.shift = 0,
   1455	.width = 2,
   1456	.clkr.hw.init = &(struct clk_init_data) {
   1457		.name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",
   1458		.parent_hws = (const struct clk_hw *[]) {
   1459			&gcc_usb30_prim_mock_utmi_clk_src.clkr.hw },
   1460		.num_parents = 1,
   1461		.ops = &clk_regmap_div_ro_ops,
   1462	},
   1463};
   1464
   1465static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
   1466	.cmd_rcgr = 0x1a060,
   1467	.mnd_width = 0,
   1468	.hid_width = 5,
   1469	.parent_map = gcc_parent_map_12,
   1470	.freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
   1471	.clkr.hw.init = &(struct clk_init_data){
   1472		.name = "gcc_usb3_prim_phy_aux_clk_src",
   1473		.parent_data = gcc_parents_12,
   1474		.num_parents = ARRAY_SIZE(gcc_parents_12),
   1475		.ops = &clk_rcg2_ops,
   1476	},
   1477};
   1478
   1479static const struct freq_tbl ftbl_gcc_video_venus_clk_src[] = {
   1480	F(133333333, P_GPLL11_OUT_MAIN, 4.5, 0, 0),
   1481	F(240000000, P_GPLL11_OUT_MAIN, 2.5, 0, 0),
   1482	F(300000000, P_GPLL11_OUT_MAIN, 2, 0, 0),
   1483	F(384000000, P_GPLL11_OUT_MAIN, 2, 0, 0),
   1484	{ }
   1485};
   1486
   1487static struct clk_rcg2 gcc_video_venus_clk_src = {
   1488	.cmd_rcgr = 0x58060,
   1489	.mnd_width = 0,
   1490	.hid_width = 5,
   1491	.parent_map = gcc_parent_map_13,
   1492	.freq_tbl = ftbl_gcc_video_venus_clk_src,
   1493	.clkr.hw.init = &(struct clk_init_data){
   1494		.name = "gcc_video_venus_clk_src",
   1495		.parent_data = gcc_parents_13,
   1496		.num_parents = ARRAY_SIZE(gcc_parents_13),
   1497		.flags = CLK_SET_RATE_PARENT,
   1498		.ops = &clk_rcg2_ops,
   1499	},
   1500};
   1501
   1502static struct clk_branch gcc_ahb2phy_csi_clk = {
   1503	.halt_reg = 0x1d004,
   1504	.halt_check = BRANCH_HALT,
   1505	.hwcg_reg = 0x1d004,
   1506	.hwcg_bit = 1,
   1507	.clkr = {
   1508		.enable_reg = 0x1d004,
   1509		.enable_mask = BIT(0),
   1510		.hw.init = &(struct clk_init_data){
   1511			.name = "gcc_ahb2phy_csi_clk",
   1512			.ops = &clk_branch2_ops,
   1513		},
   1514	},
   1515};
   1516
   1517static struct clk_branch gcc_ahb2phy_usb_clk = {
   1518	.halt_reg = 0x1d008,
   1519	.halt_check = BRANCH_HALT,
   1520	.hwcg_reg = 0x1d008,
   1521	.hwcg_bit = 1,
   1522	.clkr = {
   1523		.enable_reg = 0x1d008,
   1524		.enable_mask = BIT(0),
   1525		.hw.init = &(struct clk_init_data){
   1526			.name = "gcc_ahb2phy_usb_clk",
   1527			.ops = &clk_branch2_ops,
   1528		},
   1529	},
   1530};
   1531
   1532static struct clk_branch gcc_bimc_gpu_axi_clk = {
   1533	.halt_reg = 0x71154,
   1534	.halt_check = BRANCH_HALT_DELAY,
   1535	.hwcg_reg = 0x71154,
   1536	.hwcg_bit = 1,
   1537	.clkr = {
   1538		.enable_reg = 0x71154,
   1539		.enable_mask = BIT(0),
   1540		.hw.init = &(struct clk_init_data){
   1541			.name = "gcc_bimc_gpu_axi_clk",
   1542			.ops = &clk_branch2_ops,
   1543		},
   1544	},
   1545};
   1546
   1547static struct clk_branch gcc_boot_rom_ahb_clk = {
   1548	.halt_reg = 0x23004,
   1549	.halt_check = BRANCH_HALT_VOTED,
   1550	.hwcg_reg = 0x23004,
   1551	.hwcg_bit = 1,
   1552	.clkr = {
   1553		.enable_reg = 0x79004,
   1554		.enable_mask = BIT(10),
   1555		.hw.init = &(struct clk_init_data){
   1556			.name = "gcc_boot_rom_ahb_clk",
   1557			.ops = &clk_branch2_ops,
   1558		},
   1559	},
   1560};
   1561
   1562static struct clk_branch gcc_cam_throttle_nrt_clk = {
   1563	.halt_reg = 0x17070,
   1564	.halt_check = BRANCH_HALT_VOTED,
   1565	.hwcg_reg = 0x17070,
   1566	.hwcg_bit = 1,
   1567	.clkr = {
   1568		.enable_reg = 0x79004,
   1569		.enable_mask = BIT(27),
   1570		.hw.init = &(struct clk_init_data){
   1571			.name = "gcc_cam_throttle_nrt_clk",
   1572			.ops = &clk_branch2_ops,
   1573		},
   1574	},
   1575};
   1576
   1577static struct clk_branch gcc_cam_throttle_rt_clk = {
   1578	.halt_reg = 0x1706c,
   1579	.halt_check = BRANCH_HALT_VOTED,
   1580	.hwcg_reg = 0x1706c,
   1581	.hwcg_bit = 1,
   1582	.clkr = {
   1583		.enable_reg = 0x79004,
   1584		.enable_mask = BIT(26),
   1585		.hw.init = &(struct clk_init_data){
   1586			.name = "gcc_cam_throttle_rt_clk",
   1587			.ops = &clk_branch2_ops,
   1588		},
   1589	},
   1590};
   1591
   1592static struct clk_branch gcc_camera_ahb_clk = {
   1593	.halt_reg = 0x17008,
   1594	.halt_check = BRANCH_HALT_DELAY,
   1595	.hwcg_reg = 0x17008,
   1596	.hwcg_bit = 1,
   1597	.clkr = {
   1598		.enable_reg = 0x17008,
   1599		.enable_mask = BIT(0),
   1600		.hw.init = &(struct clk_init_data){
   1601			.name = "gcc_camera_ahb_clk",
   1602			.flags = CLK_IS_CRITICAL,
   1603			.ops = &clk_branch2_ops,
   1604		},
   1605	},
   1606};
   1607
   1608static struct clk_branch gcc_camera_xo_clk = {
   1609	.halt_reg = 0x17028,
   1610	.halt_check = BRANCH_HALT,
   1611	.clkr = {
   1612		.enable_reg = 0x17028,
   1613		.enable_mask = BIT(0),
   1614		.hw.init = &(struct clk_init_data){
   1615			.name = "gcc_camera_xo_clk",
   1616			.flags = CLK_IS_CRITICAL,
   1617			.ops = &clk_branch2_ops,
   1618		},
   1619	},
   1620};
   1621
   1622static struct clk_branch gcc_camss_axi_clk = {
   1623	.halt_reg = 0x58044,
   1624	.halt_check = BRANCH_HALT,
   1625	.clkr = {
   1626		.enable_reg = 0x58044,
   1627		.enable_mask = BIT(0),
   1628		.hw.init = &(struct clk_init_data){
   1629			.name = "gcc_camss_axi_clk",
   1630			.parent_hws = (const struct clk_hw *[]){
   1631				&gcc_camss_axi_clk_src.clkr.hw,
   1632			},
   1633			.num_parents = 1,
   1634			.flags = CLK_SET_RATE_PARENT,
   1635			.ops = &clk_branch2_ops,
   1636		},
   1637	},
   1638};
   1639
   1640static struct clk_branch gcc_camss_camnoc_atb_clk = {
   1641	.halt_reg = 0x5804c,
   1642	.halt_check = BRANCH_HALT_DELAY,
   1643	.hwcg_reg = 0x5804c,
   1644	.hwcg_bit = 1,
   1645	.clkr = {
   1646		.enable_reg = 0x5804c,
   1647		.enable_mask = BIT(0),
   1648		.hw.init = &(struct clk_init_data){
   1649			.name = "gcc_camss_camnoc_atb_clk",
   1650			.ops = &clk_branch2_ops,
   1651		},
   1652	},
   1653};
   1654
   1655static struct clk_branch gcc_camss_camnoc_nts_xo_clk = {
   1656	.halt_reg = 0x58050,
   1657	.halt_check = BRANCH_HALT_DELAY,
   1658	.hwcg_reg = 0x58050,
   1659	.hwcg_bit = 1,
   1660	.clkr = {
   1661		.enable_reg = 0x58050,
   1662		.enable_mask = BIT(0),
   1663		.hw.init = &(struct clk_init_data){
   1664			.name = "gcc_camss_camnoc_nts_xo_clk",
   1665			.ops = &clk_branch2_ops,
   1666		},
   1667	},
   1668};
   1669
   1670static struct clk_branch gcc_camss_cci_0_clk = {
   1671	.halt_reg = 0x56018,
   1672	.halt_check = BRANCH_HALT,
   1673	.clkr = {
   1674		.enable_reg = 0x56018,
   1675		.enable_mask = BIT(0),
   1676		.hw.init = &(struct clk_init_data){
   1677			.name = "gcc_camss_cci_0_clk",
   1678			.parent_hws = (const struct clk_hw *[]){
   1679				&gcc_camss_cci_clk_src.clkr.hw,
   1680			},
   1681			.num_parents = 1,
   1682			.flags = CLK_SET_RATE_PARENT,
   1683			.ops = &clk_branch2_ops,
   1684		},
   1685	},
   1686};
   1687
   1688static struct clk_branch gcc_camss_cphy_0_clk = {
   1689	.halt_reg = 0x52088,
   1690	.halt_check = BRANCH_HALT,
   1691	.clkr = {
   1692		.enable_reg = 0x52088,
   1693		.enable_mask = BIT(0),
   1694		.hw.init = &(struct clk_init_data){
   1695			.name = "gcc_camss_cphy_0_clk",
   1696			.parent_hws = (const struct clk_hw *[]){
   1697				&gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
   1698			},
   1699			.num_parents = 1,
   1700			.flags = CLK_SET_RATE_PARENT,
   1701			.ops = &clk_branch2_ops,
   1702		},
   1703	},
   1704};
   1705
   1706static struct clk_branch gcc_camss_cphy_1_clk = {
   1707	.halt_reg = 0x5208c,
   1708	.halt_check = BRANCH_HALT,
   1709	.clkr = {
   1710		.enable_reg = 0x5208c,
   1711		.enable_mask = BIT(0),
   1712		.hw.init = &(struct clk_init_data){
   1713			.name = "gcc_camss_cphy_1_clk",
   1714			.parent_hws = (const struct clk_hw *[]){
   1715				&gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
   1716			},
   1717			.num_parents = 1,
   1718			.flags = CLK_SET_RATE_PARENT,
   1719			.ops = &clk_branch2_ops,
   1720		},
   1721	},
   1722};
   1723
   1724static struct clk_branch gcc_camss_cphy_2_clk = {
   1725	.halt_reg = 0x52090,
   1726	.halt_check = BRANCH_HALT,
   1727	.clkr = {
   1728		.enable_reg = 0x52090,
   1729		.enable_mask = BIT(0),
   1730		.hw.init = &(struct clk_init_data){
   1731			.name = "gcc_camss_cphy_2_clk",
   1732			.parent_hws = (const struct clk_hw *[]){
   1733				&gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
   1734			},
   1735			.num_parents = 1,
   1736			.flags = CLK_SET_RATE_PARENT,
   1737			.ops = &clk_branch2_ops,
   1738		},
   1739	},
   1740};
   1741
   1742static struct clk_branch gcc_camss_csi0phytimer_clk = {
   1743	.halt_reg = 0x59018,
   1744	.halt_check = BRANCH_HALT,
   1745	.clkr = {
   1746		.enable_reg = 0x59018,
   1747		.enable_mask = BIT(0),
   1748		.hw.init = &(struct clk_init_data){
   1749			.name = "gcc_camss_csi0phytimer_clk",
   1750			.parent_hws = (const struct clk_hw *[]){
   1751				&gcc_camss_csi0phytimer_clk_src.clkr.hw,
   1752			},
   1753			.num_parents = 1,
   1754			.flags = CLK_SET_RATE_PARENT,
   1755			.ops = &clk_branch2_ops,
   1756		},
   1757	},
   1758};
   1759
   1760static struct clk_branch gcc_camss_csi1phytimer_clk = {
   1761	.halt_reg = 0x59034,
   1762	.halt_check = BRANCH_HALT,
   1763	.clkr = {
   1764		.enable_reg = 0x59034,
   1765		.enable_mask = BIT(0),
   1766		.hw.init = &(struct clk_init_data){
   1767			.name = "gcc_camss_csi1phytimer_clk",
   1768			.parent_hws = (const struct clk_hw *[]){
   1769				&gcc_camss_csi1phytimer_clk_src.clkr.hw,
   1770			},
   1771			.num_parents = 1,
   1772			.flags = CLK_SET_RATE_PARENT,
   1773			.ops = &clk_branch2_ops,
   1774		},
   1775	},
   1776};
   1777
   1778static struct clk_branch gcc_camss_csi2phytimer_clk = {
   1779	.halt_reg = 0x59050,
   1780	.halt_check = BRANCH_HALT,
   1781	.clkr = {
   1782		.enable_reg = 0x59050,
   1783		.enable_mask = BIT(0),
   1784		.hw.init = &(struct clk_init_data){
   1785			.name = "gcc_camss_csi2phytimer_clk",
   1786			.parent_hws = (const struct clk_hw *[]){
   1787				&gcc_camss_csi2phytimer_clk_src.clkr.hw,
   1788			},
   1789			.num_parents = 1,
   1790			.flags = CLK_SET_RATE_PARENT,
   1791			.ops = &clk_branch2_ops,
   1792		},
   1793	},
   1794};
   1795
   1796static struct clk_branch gcc_camss_mclk0_clk = {
   1797	.halt_reg = 0x51018,
   1798	.halt_check = BRANCH_HALT,
   1799	.clkr = {
   1800		.enable_reg = 0x51018,
   1801		.enable_mask = BIT(0),
   1802		.hw.init = &(struct clk_init_data){
   1803			.name = "gcc_camss_mclk0_clk",
   1804			.parent_hws = (const struct clk_hw *[]){
   1805				&gcc_camss_mclk0_clk_src.clkr.hw,
   1806			},
   1807			.num_parents = 1,
   1808			.flags = CLK_SET_RATE_PARENT,
   1809			.ops = &clk_branch2_ops,
   1810		},
   1811	},
   1812};
   1813
   1814static struct clk_branch gcc_camss_mclk1_clk = {
   1815	.halt_reg = 0x51034,
   1816	.halt_check = BRANCH_HALT,
   1817	.clkr = {
   1818		.enable_reg = 0x51034,
   1819		.enable_mask = BIT(0),
   1820		.hw.init = &(struct clk_init_data){
   1821			.name = "gcc_camss_mclk1_clk",
   1822			.parent_hws = (const struct clk_hw *[]){
   1823				&gcc_camss_mclk1_clk_src.clkr.hw,
   1824			},
   1825			.num_parents = 1,
   1826			.flags = CLK_SET_RATE_PARENT,
   1827			.ops = &clk_branch2_ops,
   1828		},
   1829	},
   1830};
   1831
   1832static struct clk_branch gcc_camss_mclk2_clk = {
   1833	.halt_reg = 0x51050,
   1834	.halt_check = BRANCH_HALT,
   1835	.clkr = {
   1836		.enable_reg = 0x51050,
   1837		.enable_mask = BIT(0),
   1838		.hw.init = &(struct clk_init_data){
   1839			.name = "gcc_camss_mclk2_clk",
   1840			.parent_hws = (const struct clk_hw *[]){
   1841				&gcc_camss_mclk2_clk_src.clkr.hw,
   1842			},
   1843			.num_parents = 1,
   1844			.flags = CLK_SET_RATE_PARENT,
   1845			.ops = &clk_branch2_ops,
   1846		},
   1847	},
   1848};
   1849
   1850static struct clk_branch gcc_camss_mclk3_clk = {
   1851	.halt_reg = 0x5106c,
   1852	.halt_check = BRANCH_HALT,
   1853	.clkr = {
   1854		.enable_reg = 0x5106c,
   1855		.enable_mask = BIT(0),
   1856		.hw.init = &(struct clk_init_data){
   1857			.name = "gcc_camss_mclk3_clk",
   1858			.parent_hws = (const struct clk_hw *[]){
   1859				&gcc_camss_mclk3_clk_src.clkr.hw,
   1860			},
   1861			.num_parents = 1,
   1862			.flags = CLK_SET_RATE_PARENT,
   1863			.ops = &clk_branch2_ops,
   1864		},
   1865	},
   1866};
   1867
   1868static struct clk_branch gcc_camss_nrt_axi_clk = {
   1869	.halt_reg = 0x58054,
   1870	.halt_check = BRANCH_HALT,
   1871	.clkr = {
   1872		.enable_reg = 0x58054,
   1873		.enable_mask = BIT(0),
   1874		.hw.init = &(struct clk_init_data){
   1875			.name = "gcc_camss_nrt_axi_clk",
   1876			.ops = &clk_branch2_ops,
   1877		},
   1878	},
   1879};
   1880
   1881static struct clk_branch gcc_camss_ope_ahb_clk = {
   1882	.halt_reg = 0x5503c,
   1883	.halt_check = BRANCH_HALT,
   1884	.clkr = {
   1885		.enable_reg = 0x5503c,
   1886		.enable_mask = BIT(0),
   1887		.hw.init = &(struct clk_init_data){
   1888			.name = "gcc_camss_ope_ahb_clk",
   1889			.parent_hws = (const struct clk_hw *[]){
   1890				&gcc_camss_ope_ahb_clk_src.clkr.hw,
   1891			},
   1892			.num_parents = 1,
   1893			.flags = CLK_SET_RATE_PARENT,
   1894			.ops = &clk_branch2_ops,
   1895		},
   1896	},
   1897};
   1898
   1899static struct clk_branch gcc_camss_ope_clk = {
   1900	.halt_reg = 0x5501c,
   1901	.halt_check = BRANCH_HALT,
   1902	.clkr = {
   1903		.enable_reg = 0x5501c,
   1904		.enable_mask = BIT(0),
   1905		.hw.init = &(struct clk_init_data){
   1906			.name = "gcc_camss_ope_clk",
   1907			.parent_hws = (const struct clk_hw *[]){
   1908				&gcc_camss_ope_clk_src.clkr.hw,
   1909			},
   1910			.num_parents = 1,
   1911			.flags = CLK_SET_RATE_PARENT,
   1912			.ops = &clk_branch2_ops,
   1913		},
   1914	},
   1915};
   1916
   1917static struct clk_branch gcc_camss_rt_axi_clk = {
   1918	.halt_reg = 0x5805c,
   1919	.halt_check = BRANCH_HALT,
   1920	.clkr = {
   1921		.enable_reg = 0x5805c,
   1922		.enable_mask = BIT(0),
   1923		.hw.init = &(struct clk_init_data){
   1924			.name = "gcc_camss_rt_axi_clk",
   1925			.ops = &clk_branch2_ops,
   1926		},
   1927	},
   1928};
   1929
   1930static struct clk_branch gcc_camss_tfe_0_clk = {
   1931	.halt_reg = 0x5201c,
   1932	.halt_check = BRANCH_HALT,
   1933	.clkr = {
   1934		.enable_reg = 0x5201c,
   1935		.enable_mask = BIT(0),
   1936		.hw.init = &(struct clk_init_data){
   1937			.name = "gcc_camss_tfe_0_clk",
   1938			.parent_hws = (const struct clk_hw *[]){
   1939				&gcc_camss_tfe_0_clk_src.clkr.hw,
   1940			},
   1941			.num_parents = 1,
   1942			.flags = CLK_SET_RATE_PARENT,
   1943			.ops = &clk_branch2_ops,
   1944		},
   1945	},
   1946};
   1947
   1948static struct clk_branch gcc_camss_tfe_0_cphy_rx_clk = {
   1949	.halt_reg = 0x5207c,
   1950	.halt_check = BRANCH_HALT,
   1951	.clkr = {
   1952		.enable_reg = 0x5207c,
   1953		.enable_mask = BIT(0),
   1954		.hw.init = &(struct clk_init_data){
   1955			.name = "gcc_camss_tfe_0_cphy_rx_clk",
   1956			.parent_hws = (const struct clk_hw *[]){
   1957				&gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
   1958			},
   1959			.num_parents = 1,
   1960			.flags = CLK_SET_RATE_PARENT,
   1961			.ops = &clk_branch2_ops,
   1962		},
   1963	},
   1964};
   1965
   1966static struct clk_branch gcc_camss_tfe_0_csid_clk = {
   1967	.halt_reg = 0x520ac,
   1968	.halt_check = BRANCH_HALT,
   1969	.clkr = {
   1970		.enable_reg = 0x520ac,
   1971		.enable_mask = BIT(0),
   1972		.hw.init = &(struct clk_init_data){
   1973			.name = "gcc_camss_tfe_0_csid_clk",
   1974			.parent_hws = (const struct clk_hw *[]){
   1975				&gcc_camss_tfe_0_csid_clk_src.clkr.hw,
   1976			},
   1977			.num_parents = 1,
   1978			.flags = CLK_SET_RATE_PARENT,
   1979			.ops = &clk_branch2_ops,
   1980		},
   1981	},
   1982};
   1983
   1984static struct clk_branch gcc_camss_tfe_1_clk = {
   1985	.halt_reg = 0x5203c,
   1986	.halt_check = BRANCH_HALT,
   1987	.clkr = {
   1988		.enable_reg = 0x5203c,
   1989		.enable_mask = BIT(0),
   1990		.hw.init = &(struct clk_init_data){
   1991			.name = "gcc_camss_tfe_1_clk",
   1992			.parent_hws = (const struct clk_hw *[]){
   1993				&gcc_camss_tfe_1_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_camss_tfe_1_cphy_rx_clk = {
   2003	.halt_reg = 0x52080,
   2004	.halt_check = BRANCH_HALT,
   2005	.clkr = {
   2006		.enable_reg = 0x52080,
   2007		.enable_mask = BIT(0),
   2008		.hw.init = &(struct clk_init_data){
   2009			.name = "gcc_camss_tfe_1_cphy_rx_clk",
   2010			.parent_hws = (const struct clk_hw *[]){
   2011				&gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
   2012			},
   2013			.num_parents = 1,
   2014			.flags = CLK_SET_RATE_PARENT,
   2015			.ops = &clk_branch2_ops,
   2016		},
   2017	},
   2018};
   2019
   2020static struct clk_branch gcc_camss_tfe_1_csid_clk = {
   2021	.halt_reg = 0x520cc,
   2022	.halt_check = BRANCH_HALT,
   2023	.clkr = {
   2024		.enable_reg = 0x520cc,
   2025		.enable_mask = BIT(0),
   2026		.hw.init = &(struct clk_init_data){
   2027			.name = "gcc_camss_tfe_1_csid_clk",
   2028			.parent_hws = (const struct clk_hw *[]){
   2029				&gcc_camss_tfe_1_csid_clk_src.clkr.hw,
   2030			},
   2031			.num_parents = 1,
   2032			.flags = CLK_SET_RATE_PARENT,
   2033			.ops = &clk_branch2_ops,
   2034		},
   2035	},
   2036};
   2037
   2038static struct clk_branch gcc_camss_tfe_2_clk = {
   2039	.halt_reg = 0x5205c,
   2040	.halt_check = BRANCH_HALT,
   2041	.clkr = {
   2042		.enable_reg = 0x5205c,
   2043		.enable_mask = BIT(0),
   2044		.hw.init = &(struct clk_init_data){
   2045			.name = "gcc_camss_tfe_2_clk",
   2046			.parent_hws = (const struct clk_hw *[]){
   2047				&gcc_camss_tfe_2_clk_src.clkr.hw,
   2048			},
   2049			.num_parents = 1,
   2050			.flags = CLK_SET_RATE_PARENT,
   2051			.ops = &clk_branch2_ops,
   2052		},
   2053	},
   2054};
   2055
   2056static struct clk_branch gcc_camss_tfe_2_cphy_rx_clk = {
   2057	.halt_reg = 0x52084,
   2058	.halt_check = BRANCH_HALT,
   2059	.clkr = {
   2060		.enable_reg = 0x52084,
   2061		.enable_mask = BIT(0),
   2062		.hw.init = &(struct clk_init_data){
   2063			.name = "gcc_camss_tfe_2_cphy_rx_clk",
   2064			.parent_hws = (const struct clk_hw *[]){
   2065				&gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
   2066			},
   2067			.num_parents = 1,
   2068			.flags = CLK_SET_RATE_PARENT,
   2069			.ops = &clk_branch2_ops,
   2070		},
   2071	},
   2072};
   2073
   2074static struct clk_branch gcc_camss_tfe_2_csid_clk = {
   2075	.halt_reg = 0x520ec,
   2076	.halt_check = BRANCH_HALT,
   2077	.clkr = {
   2078		.enable_reg = 0x520ec,
   2079		.enable_mask = BIT(0),
   2080		.hw.init = &(struct clk_init_data){
   2081			.name = "gcc_camss_tfe_2_csid_clk",
   2082			.parent_hws = (const struct clk_hw *[]){
   2083				&gcc_camss_tfe_2_csid_clk_src.clkr.hw,
   2084			},
   2085			.num_parents = 1,
   2086			.flags = CLK_SET_RATE_PARENT,
   2087			.ops = &clk_branch2_ops,
   2088		},
   2089	},
   2090};
   2091
   2092static struct clk_branch gcc_camss_top_ahb_clk = {
   2093	.halt_reg = 0x58028,
   2094	.halt_check = BRANCH_HALT,
   2095	.clkr = {
   2096		.enable_reg = 0x58028,
   2097		.enable_mask = BIT(0),
   2098		.hw.init = &(struct clk_init_data){
   2099			.name = "gcc_camss_top_ahb_clk",
   2100			.parent_hws = (const struct clk_hw *[]){
   2101				&gcc_camss_top_ahb_clk_src.clkr.hw,
   2102			},
   2103			.num_parents = 1,
   2104			.flags = CLK_SET_RATE_PARENT,
   2105			.ops = &clk_branch2_ops,
   2106		},
   2107	},
   2108};
   2109
   2110static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
   2111	.halt_reg = 0x1a084,
   2112	.halt_check = BRANCH_HALT,
   2113	.hwcg_reg = 0x1a084,
   2114	.hwcg_bit = 1,
   2115	.clkr = {
   2116		.enable_reg = 0x1a084,
   2117		.enable_mask = BIT(0),
   2118		.hw.init = &(struct clk_init_data){
   2119			.name = "gcc_cfg_noc_usb3_prim_axi_clk",
   2120			.parent_hws = (const struct clk_hw *[]){
   2121				&gcc_usb30_prim_master_clk_src.clkr.hw,
   2122			},
   2123			.num_parents = 1,
   2124			.flags = CLK_SET_RATE_PARENT,
   2125			.ops = &clk_branch2_ops,
   2126		},
   2127	},
   2128};
   2129
   2130static struct clk_branch gcc_cpuss_gnoc_clk = {
   2131	.halt_reg = 0x2b004,
   2132	.halt_check = BRANCH_HALT_VOTED,
   2133	.hwcg_reg = 0x2b004,
   2134	.hwcg_bit = 1,
   2135	.clkr = {
   2136		.enable_reg = 0x79004,
   2137		.enable_mask = BIT(22),
   2138		.hw.init = &(struct clk_init_data){
   2139			.name = "gcc_cpuss_gnoc_clk",
   2140			.flags = CLK_IS_CRITICAL,
   2141			.ops = &clk_branch2_ops,
   2142		},
   2143	},
   2144};
   2145
   2146static struct clk_branch gcc_disp_ahb_clk = {
   2147	.halt_reg = 0x1700c,
   2148	.halt_check = BRANCH_HALT,
   2149	.hwcg_reg = 0x1700c,
   2150	.hwcg_bit = 1,
   2151	.clkr = {
   2152		.enable_reg = 0x1700c,
   2153		.enable_mask = BIT(0),
   2154		.hw.init = &(struct clk_init_data){
   2155			.name = "gcc_disp_ahb_clk",
   2156			.flags = CLK_IS_CRITICAL,
   2157			.ops = &clk_branch2_ops,
   2158		},
   2159	},
   2160};
   2161
   2162static struct clk_regmap_div gcc_disp_gpll0_clk_src = {
   2163	.reg = 0x17058,
   2164	.shift = 0,
   2165	.width = 2,
   2166	.clkr.hw.init = &(struct clk_init_data) {
   2167		.name = "gcc_disp_gpll0_clk_src",
   2168		.parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
   2169		.num_parents = 1,
   2170		.ops = &clk_regmap_div_ops,
   2171	},
   2172};
   2173
   2174static struct clk_branch gcc_disp_gpll0_div_clk_src = {
   2175	.halt_check = BRANCH_HALT_DELAY,
   2176	.clkr = {
   2177		.enable_reg = 0x79004,
   2178		.enable_mask = BIT(20),
   2179		.hw.init = &(struct clk_init_data){
   2180			.name = "gcc_disp_gpll0_div_clk_src",
   2181			.parent_hws = (const struct clk_hw *[]){
   2182				&gcc_disp_gpll0_clk_src.clkr.hw,
   2183			},
   2184			.num_parents = 1,
   2185			.flags = CLK_SET_RATE_PARENT,
   2186			.ops = &clk_branch2_ops,
   2187		},
   2188	},
   2189};
   2190
   2191static struct clk_branch gcc_disp_hf_axi_clk = {
   2192	.halt_reg = 0x17020,
   2193	.halt_check = BRANCH_HALT,
   2194	.hwcg_reg = 0x17020,
   2195	.hwcg_bit = 1,
   2196	.clkr = {
   2197		.enable_reg = 0x17020,
   2198		.enable_mask = BIT(0),
   2199		.hw.init = &(struct clk_init_data){
   2200			.name = "gcc_disp_hf_axi_clk",
   2201			.ops = &clk_branch2_ops,
   2202		},
   2203	},
   2204};
   2205
   2206static struct clk_branch gcc_disp_throttle_core_clk = {
   2207	.halt_reg = 0x17064,
   2208	.halt_check = BRANCH_HALT_VOTED,
   2209	.hwcg_reg = 0x17064,
   2210	.hwcg_bit = 1,
   2211	.clkr = {
   2212		.enable_reg = 0x7900c,
   2213		.enable_mask = BIT(5),
   2214		.hw.init = &(struct clk_init_data){
   2215			.name = "gcc_disp_throttle_core_clk",
   2216			.ops = &clk_branch2_ops,
   2217		},
   2218	},
   2219};
   2220
   2221static struct clk_branch gcc_disp_xo_clk = {
   2222	.halt_reg = 0x1702c,
   2223	.halt_check = BRANCH_HALT,
   2224	.clkr = {
   2225		.enable_reg = 0x1702c,
   2226		.enable_mask = BIT(0),
   2227		.hw.init = &(struct clk_init_data){
   2228			.name = "gcc_disp_xo_clk",
   2229			.flags = CLK_IS_CRITICAL,
   2230			.ops = &clk_branch2_ops,
   2231		},
   2232	},
   2233};
   2234
   2235static struct clk_branch gcc_gp1_clk = {
   2236	.halt_reg = 0x4d000,
   2237	.halt_check = BRANCH_HALT,
   2238	.clkr = {
   2239		.enable_reg = 0x4d000,
   2240		.enable_mask = BIT(0),
   2241		.hw.init = &(struct clk_init_data){
   2242			.name = "gcc_gp1_clk",
   2243			.parent_hws = (const struct clk_hw *[]){
   2244				&gcc_gp1_clk_src.clkr.hw,
   2245			},
   2246			.num_parents = 1,
   2247			.flags = CLK_SET_RATE_PARENT,
   2248			.ops = &clk_branch2_ops,
   2249		},
   2250	},
   2251};
   2252
   2253static struct clk_branch gcc_gp2_clk = {
   2254	.halt_reg = 0x4e000,
   2255	.halt_check = BRANCH_HALT,
   2256	.clkr = {
   2257		.enable_reg = 0x4e000,
   2258		.enable_mask = BIT(0),
   2259		.hw.init = &(struct clk_init_data){
   2260			.name = "gcc_gp2_clk",
   2261			.parent_hws = (const struct clk_hw *[]){
   2262				&gcc_gp2_clk_src.clkr.hw,
   2263			},
   2264			.num_parents = 1,
   2265			.flags = CLK_SET_RATE_PARENT,
   2266			.ops = &clk_branch2_ops,
   2267		},
   2268	},
   2269};
   2270
   2271static struct clk_branch gcc_gp3_clk = {
   2272	.halt_reg = 0x4f000,
   2273	.halt_check = BRANCH_HALT,
   2274	.clkr = {
   2275		.enable_reg = 0x4f000,
   2276		.enable_mask = BIT(0),
   2277		.hw.init = &(struct clk_init_data){
   2278			.name = "gcc_gp3_clk",
   2279			.parent_hws = (const struct clk_hw *[]){
   2280				&gcc_gp3_clk_src.clkr.hw,
   2281			},
   2282			.num_parents = 1,
   2283			.flags = CLK_SET_RATE_PARENT,
   2284			.ops = &clk_branch2_ops,
   2285		},
   2286	},
   2287};
   2288
   2289static struct clk_branch gcc_gpu_cfg_ahb_clk = {
   2290	.halt_reg = 0x36004,
   2291	.halt_check = BRANCH_HALT,
   2292	.hwcg_reg = 0x36004,
   2293	.hwcg_bit = 1,
   2294	.clkr = {
   2295		.enable_reg = 0x36004,
   2296		.enable_mask = BIT(0),
   2297		.hw.init = &(struct clk_init_data){
   2298			.name = "gcc_gpu_cfg_ahb_clk",
   2299			.flags = CLK_IS_CRITICAL,
   2300			.ops = &clk_branch2_ops,
   2301		},
   2302	},
   2303};
   2304
   2305static struct clk_branch gcc_gpu_gpll0_clk_src = {
   2306	.halt_check = BRANCH_HALT_DELAY,
   2307	.clkr = {
   2308		.enable_reg = 0x79004,
   2309		.enable_mask = BIT(15),
   2310		.hw.init = &(struct clk_init_data){
   2311			.name = "gcc_gpu_gpll0_clk_src",
   2312			.parent_hws = (const struct clk_hw *[]){
   2313				&gpll0.clkr.hw,
   2314			},
   2315			.num_parents = 1,
   2316			.flags = CLK_SET_RATE_PARENT,
   2317			.ops = &clk_branch2_ops,
   2318		},
   2319	},
   2320};
   2321
   2322static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
   2323	.halt_check = BRANCH_HALT_DELAY,
   2324	.clkr = {
   2325		.enable_reg = 0x79004,
   2326		.enable_mask = BIT(16),
   2327		.hw.init = &(struct clk_init_data){
   2328			.name = "gcc_gpu_gpll0_div_clk_src",
   2329			.parent_hws = (const struct clk_hw *[]){
   2330				&gpll0_out_aux2.clkr.hw,
   2331			},
   2332			.num_parents = 1,
   2333			.flags = CLK_SET_RATE_PARENT,
   2334			.ops = &clk_branch2_ops,
   2335		},
   2336	},
   2337};
   2338
   2339static struct clk_branch gcc_gpu_iref_clk = {
   2340	.halt_reg = 0x36100,
   2341	.halt_check = BRANCH_HALT_DELAY,
   2342	.clkr = {
   2343		.enable_reg = 0x36100,
   2344		.enable_mask = BIT(0),
   2345		.hw.init = &(struct clk_init_data){
   2346			.name = "gcc_gpu_iref_clk",
   2347			.ops = &clk_branch2_ops,
   2348		},
   2349	},
   2350};
   2351
   2352static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
   2353	.halt_reg = 0x3600c,
   2354	.halt_check = BRANCH_VOTED,
   2355	.hwcg_reg = 0x3600c,
   2356	.hwcg_bit = 1,
   2357	.clkr = {
   2358		.enable_reg = 0x3600c,
   2359		.enable_mask = BIT(0),
   2360		.hw.init = &(struct clk_init_data){
   2361			.name = "gcc_gpu_memnoc_gfx_clk",
   2362			.ops = &clk_branch2_ops,
   2363		},
   2364	},
   2365};
   2366
   2367static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
   2368	.halt_reg = 0x36018,
   2369	.halt_check = BRANCH_HALT,
   2370	.clkr = {
   2371		.enable_reg = 0x36018,
   2372		.enable_mask = BIT(0),
   2373		.hw.init = &(struct clk_init_data){
   2374			.name = "gcc_gpu_snoc_dvm_gfx_clk",
   2375			.ops = &clk_branch2_ops,
   2376		},
   2377	},
   2378};
   2379
   2380static struct clk_branch gcc_gpu_throttle_core_clk = {
   2381	.halt_reg = 0x36048,
   2382	.halt_check = BRANCH_HALT_VOTED,
   2383	.hwcg_reg = 0x36048,
   2384	.hwcg_bit = 1,
   2385	.clkr = {
   2386		.enable_reg = 0x79004,
   2387		.enable_mask = BIT(31),
   2388		.hw.init = &(struct clk_init_data){
   2389			.name = "gcc_gpu_throttle_core_clk",
   2390			.ops = &clk_branch2_ops,
   2391		},
   2392	},
   2393};
   2394
   2395static struct clk_branch gcc_pdm2_clk = {
   2396	.halt_reg = 0x2000c,
   2397	.halt_check = BRANCH_HALT,
   2398	.clkr = {
   2399		.enable_reg = 0x2000c,
   2400		.enable_mask = BIT(0),
   2401		.hw.init = &(struct clk_init_data){
   2402			.name = "gcc_pdm2_clk",
   2403			.parent_hws = (const struct clk_hw *[]){
   2404				&gcc_pdm2_clk_src.clkr.hw,
   2405			},
   2406			.num_parents = 1,
   2407			.flags = CLK_SET_RATE_PARENT,
   2408			.ops = &clk_branch2_ops,
   2409		},
   2410	},
   2411};
   2412
   2413static struct clk_branch gcc_pdm_ahb_clk = {
   2414	.halt_reg = 0x20004,
   2415	.halt_check = BRANCH_HALT,
   2416	.hwcg_reg = 0x20004,
   2417	.hwcg_bit = 1,
   2418	.clkr = {
   2419		.enable_reg = 0x20004,
   2420		.enable_mask = BIT(0),
   2421		.hw.init = &(struct clk_init_data){
   2422			.name = "gcc_pdm_ahb_clk",
   2423			.ops = &clk_branch2_ops,
   2424		},
   2425	},
   2426};
   2427
   2428static struct clk_branch gcc_pdm_xo4_clk = {
   2429	.halt_reg = 0x20008,
   2430	.halt_check = BRANCH_HALT,
   2431	.clkr = {
   2432		.enable_reg = 0x20008,
   2433		.enable_mask = BIT(0),
   2434		.hw.init = &(struct clk_init_data){
   2435			.name = "gcc_pdm_xo4_clk",
   2436			.ops = &clk_branch2_ops,
   2437		},
   2438	},
   2439};
   2440
   2441static struct clk_branch gcc_prng_ahb_clk = {
   2442	.halt_reg = 0x21004,
   2443	.halt_check = BRANCH_HALT_VOTED,
   2444	.hwcg_reg = 0x21004,
   2445	.hwcg_bit = 1,
   2446	.clkr = {
   2447		.enable_reg = 0x79004,
   2448		.enable_mask = BIT(13),
   2449		.hw.init = &(struct clk_init_data){
   2450			.name = "gcc_prng_ahb_clk",
   2451			.ops = &clk_branch2_ops,
   2452		},
   2453	},
   2454};
   2455
   2456static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
   2457	.halt_reg = 0x17014,
   2458	.halt_check = BRANCH_HALT_VOTED,
   2459	.hwcg_reg = 0x17014,
   2460	.hwcg_bit = 1,
   2461	.clkr = {
   2462		.enable_reg = 0x7900c,
   2463		.enable_mask = BIT(0),
   2464		.hw.init = &(struct clk_init_data){
   2465			.name = "gcc_qmip_camera_nrt_ahb_clk",
   2466			.ops = &clk_branch2_ops,
   2467		},
   2468	},
   2469};
   2470
   2471static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
   2472	.halt_reg = 0x17060,
   2473	.halt_check = BRANCH_HALT_VOTED,
   2474	.hwcg_reg = 0x17060,
   2475	.hwcg_bit = 1,
   2476	.clkr = {
   2477		.enable_reg = 0x7900c,
   2478		.enable_mask = BIT(2),
   2479		.hw.init = &(struct clk_init_data){
   2480			.name = "gcc_qmip_camera_rt_ahb_clk",
   2481			.ops = &clk_branch2_ops,
   2482		},
   2483	},
   2484};
   2485
   2486static struct clk_branch gcc_qmip_disp_ahb_clk = {
   2487	.halt_reg = 0x17018,
   2488	.halt_check = BRANCH_HALT_VOTED,
   2489	.hwcg_reg = 0x17018,
   2490	.hwcg_bit = 1,
   2491	.clkr = {
   2492		.enable_reg = 0x7900c,
   2493		.enable_mask = BIT(1),
   2494		.hw.init = &(struct clk_init_data){
   2495			.name = "gcc_qmip_disp_ahb_clk",
   2496			.ops = &clk_branch2_ops,
   2497		},
   2498	},
   2499};
   2500
   2501static struct clk_branch gcc_qmip_gpu_cfg_ahb_clk = {
   2502	.halt_reg = 0x36040,
   2503	.halt_check = BRANCH_HALT_VOTED,
   2504	.hwcg_reg = 0x36040,
   2505	.hwcg_bit = 1,
   2506	.clkr = {
   2507		.enable_reg = 0x7900c,
   2508		.enable_mask = BIT(4),
   2509		.hw.init = &(struct clk_init_data){
   2510			.name = "gcc_qmip_gpu_cfg_ahb_clk",
   2511			.ops = &clk_branch2_ops,
   2512		},
   2513	},
   2514};
   2515
   2516static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
   2517	.halt_reg = 0x17010,
   2518	.halt_check = BRANCH_HALT_VOTED,
   2519	.hwcg_reg = 0x17010,
   2520	.hwcg_bit = 1,
   2521	.clkr = {
   2522		.enable_reg = 0x79004,
   2523		.enable_mask = BIT(25),
   2524		.hw.init = &(struct clk_init_data){
   2525			.name = "gcc_qmip_video_vcodec_ahb_clk",
   2526			.ops = &clk_branch2_ops,
   2527		},
   2528	},
   2529};
   2530
   2531static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
   2532	.halt_reg = 0x1f014,
   2533	.halt_check = BRANCH_HALT_VOTED,
   2534	.clkr = {
   2535		.enable_reg = 0x7900c,
   2536		.enable_mask = BIT(9),
   2537		.hw.init = &(struct clk_init_data){
   2538			.name = "gcc_qupv3_wrap0_core_2x_clk",
   2539			.ops = &clk_branch2_ops,
   2540		},
   2541	},
   2542};
   2543
   2544static struct clk_branch gcc_qupv3_wrap0_core_clk = {
   2545	.halt_reg = 0x1f00c,
   2546	.halt_check = BRANCH_HALT_VOTED,
   2547	.clkr = {
   2548		.enable_reg = 0x7900c,
   2549		.enable_mask = BIT(8),
   2550		.hw.init = &(struct clk_init_data){
   2551			.name = "gcc_qupv3_wrap0_core_clk",
   2552			.ops = &clk_branch2_ops,
   2553		},
   2554	},
   2555};
   2556
   2557static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
   2558	.halt_reg = 0x1f144,
   2559	.halt_check = BRANCH_HALT_VOTED,
   2560	.clkr = {
   2561		.enable_reg = 0x7900c,
   2562		.enable_mask = BIT(10),
   2563		.hw.init = &(struct clk_init_data){
   2564			.name = "gcc_qupv3_wrap0_s0_clk",
   2565			.parent_hws = (const struct clk_hw *[]){
   2566				&gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
   2567			},
   2568			.num_parents = 1,
   2569			.flags = CLK_SET_RATE_PARENT,
   2570			.ops = &clk_branch2_ops,
   2571		},
   2572	},
   2573};
   2574
   2575static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
   2576	.halt_reg = 0x1f274,
   2577	.halt_check = BRANCH_HALT_VOTED,
   2578	.clkr = {
   2579		.enable_reg = 0x7900c,
   2580		.enable_mask = BIT(11),
   2581		.hw.init = &(struct clk_init_data){
   2582			.name = "gcc_qupv3_wrap0_s1_clk",
   2583			.parent_hws = (const struct clk_hw *[]){
   2584				&gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
   2585			},
   2586			.num_parents = 1,
   2587			.flags = CLK_SET_RATE_PARENT,
   2588			.ops = &clk_branch2_ops,
   2589		},
   2590	},
   2591};
   2592
   2593static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
   2594	.halt_reg = 0x1f3a4,
   2595	.halt_check = BRANCH_HALT_VOTED,
   2596	.clkr = {
   2597		.enable_reg = 0x7900c,
   2598		.enable_mask = BIT(12),
   2599		.hw.init = &(struct clk_init_data){
   2600			.name = "gcc_qupv3_wrap0_s2_clk",
   2601			.parent_hws = (const struct clk_hw *[]){
   2602				&gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
   2603			},
   2604			.num_parents = 1,
   2605			.flags = CLK_SET_RATE_PARENT,
   2606			.ops = &clk_branch2_ops,
   2607		},
   2608	},
   2609};
   2610
   2611static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
   2612	.halt_reg = 0x1f4d4,
   2613	.halt_check = BRANCH_HALT_VOTED,
   2614	.clkr = {
   2615		.enable_reg = 0x7900c,
   2616		.enable_mask = BIT(13),
   2617		.hw.init = &(struct clk_init_data){
   2618			.name = "gcc_qupv3_wrap0_s3_clk",
   2619			.parent_hws = (const struct clk_hw *[]){
   2620				&gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
   2621			},
   2622			.num_parents = 1,
   2623			.flags = CLK_SET_RATE_PARENT,
   2624			.ops = &clk_branch2_ops,
   2625		},
   2626	},
   2627};
   2628
   2629static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
   2630	.halt_reg = 0x1f604,
   2631	.halt_check = BRANCH_HALT_VOTED,
   2632	.clkr = {
   2633		.enable_reg = 0x7900c,
   2634		.enable_mask = BIT(14),
   2635		.hw.init = &(struct clk_init_data){
   2636			.name = "gcc_qupv3_wrap0_s4_clk",
   2637			.parent_hws = (const struct clk_hw *[]){
   2638				&gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
   2639			},
   2640			.num_parents = 1,
   2641			.flags = CLK_SET_RATE_PARENT,
   2642			.ops = &clk_branch2_ops,
   2643		},
   2644	},
   2645};
   2646
   2647static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
   2648	.halt_reg = 0x1f734,
   2649	.halt_check = BRANCH_HALT_VOTED,
   2650	.clkr = {
   2651		.enable_reg = 0x7900c,
   2652		.enable_mask = BIT(15),
   2653		.hw.init = &(struct clk_init_data){
   2654			.name = "gcc_qupv3_wrap0_s5_clk",
   2655			.parent_hws = (const struct clk_hw *[]){
   2656				&gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
   2657			},
   2658			.num_parents = 1,
   2659			.flags = CLK_SET_RATE_PARENT,
   2660			.ops = &clk_branch2_ops,
   2661		},
   2662	},
   2663};
   2664
   2665static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
   2666	.halt_reg = 0x1f004,
   2667	.halt_check = BRANCH_HALT_VOTED,
   2668	.hwcg_reg = 0x1f004,
   2669	.hwcg_bit = 1,
   2670	.clkr = {
   2671		.enable_reg = 0x7900c,
   2672		.enable_mask = BIT(6),
   2673		.hw.init = &(struct clk_init_data){
   2674			.name = "gcc_qupv3_wrap_0_m_ahb_clk",
   2675			.ops = &clk_branch2_ops,
   2676		},
   2677	},
   2678};
   2679
   2680static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
   2681	.halt_reg = 0x1f008,
   2682	.halt_check = BRANCH_HALT_VOTED,
   2683	.hwcg_reg = 0x1f008,
   2684	.hwcg_bit = 1,
   2685	.clkr = {
   2686		.enable_reg = 0x7900c,
   2687		.enable_mask = BIT(7),
   2688		.hw.init = &(struct clk_init_data){
   2689			.name = "gcc_qupv3_wrap_0_s_ahb_clk",
   2690			.ops = &clk_branch2_ops,
   2691		},
   2692	},
   2693};
   2694
   2695static struct clk_branch gcc_sdcc1_ahb_clk = {
   2696	.halt_reg = 0x38008,
   2697	.halt_check = BRANCH_HALT,
   2698	.clkr = {
   2699		.enable_reg = 0x38008,
   2700		.enable_mask = BIT(0),
   2701		.hw.init = &(struct clk_init_data){
   2702			.name = "gcc_sdcc1_ahb_clk",
   2703			.ops = &clk_branch2_ops,
   2704		},
   2705	},
   2706};
   2707
   2708static struct clk_branch gcc_sdcc1_apps_clk = {
   2709	.halt_reg = 0x38004,
   2710	.halt_check = BRANCH_HALT,
   2711	.clkr = {
   2712		.enable_reg = 0x38004,
   2713		.enable_mask = BIT(0),
   2714		.hw.init = &(struct clk_init_data){
   2715			.name = "gcc_sdcc1_apps_clk",
   2716			.parent_hws = (const struct clk_hw *[]){
   2717				&gcc_sdcc1_apps_clk_src.clkr.hw,
   2718			},
   2719			.num_parents = 1,
   2720			.flags = CLK_SET_RATE_PARENT /* | CLK_ENABLE_HAND_OFF */,
   2721			.ops = &clk_branch2_ops,
   2722		},
   2723	},
   2724};
   2725
   2726static struct clk_branch gcc_sdcc1_ice_core_clk = {
   2727	.halt_reg = 0x3800c,
   2728	.halt_check = BRANCH_HALT,
   2729	.hwcg_reg = 0x3800c,
   2730	.hwcg_bit = 1,
   2731	.clkr = {
   2732		.enable_reg = 0x3800c,
   2733		.enable_mask = BIT(0),
   2734		.hw.init = &(struct clk_init_data){
   2735			.name = "gcc_sdcc1_ice_core_clk",
   2736			.parent_hws = (const struct clk_hw *[]){
   2737				&gcc_sdcc1_ice_core_clk_src.clkr.hw,
   2738			},
   2739			.num_parents = 1,
   2740			.flags = CLK_SET_RATE_PARENT,
   2741			.ops = &clk_branch2_ops,
   2742		},
   2743	},
   2744};
   2745
   2746static struct clk_branch gcc_sdcc2_ahb_clk = {
   2747	.halt_reg = 0x1e008,
   2748	.halt_check = BRANCH_HALT,
   2749	.clkr = {
   2750		.enable_reg = 0x1e008,
   2751		.enable_mask = BIT(0),
   2752		.hw.init = &(struct clk_init_data){
   2753			.name = "gcc_sdcc2_ahb_clk",
   2754			.ops = &clk_branch2_ops,
   2755		},
   2756	},
   2757};
   2758
   2759static struct clk_branch gcc_sdcc2_apps_clk = {
   2760	.halt_reg = 0x1e004,
   2761	.halt_check = BRANCH_HALT,
   2762	.clkr = {
   2763		.enable_reg = 0x1e004,
   2764		.enable_mask = BIT(0),
   2765		.hw.init = &(struct clk_init_data){
   2766			.name = "gcc_sdcc2_apps_clk",
   2767			.parent_hws = (const struct clk_hw *[]){
   2768				&gcc_sdcc2_apps_clk_src.clkr.hw,
   2769			},
   2770			.num_parents = 1,
   2771			.flags = CLK_SET_RATE_PARENT,
   2772			.ops = &clk_branch2_ops,
   2773		},
   2774	},
   2775};
   2776
   2777static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {
   2778	.halt_reg = 0x2b06c,
   2779	.halt_check = BRANCH_HALT_VOTED,
   2780	.hwcg_reg = 0x2b06c,
   2781	.hwcg_bit = 1,
   2782	.clkr = {
   2783		.enable_reg = 0x79004,
   2784		.enable_mask = BIT(0),
   2785		.hw.init = &(struct clk_init_data){
   2786			.name = "gcc_sys_noc_cpuss_ahb_clk",
   2787			.flags = CLK_IS_CRITICAL,
   2788			.ops = &clk_branch2_ops,
   2789		},
   2790	},
   2791};
   2792
   2793static struct clk_branch gcc_sys_noc_ufs_phy_axi_clk = {
   2794	.halt_reg = 0x45098,
   2795	.halt_check = BRANCH_HALT,
   2796	.clkr = {
   2797		.enable_reg = 0x45098,
   2798		.enable_mask = BIT(0),
   2799		.hw.init = &(struct clk_init_data){
   2800			.name = "gcc_sys_noc_ufs_phy_axi_clk",
   2801			.parent_hws = (const struct clk_hw *[]){
   2802				&gcc_ufs_phy_axi_clk_src.clkr.hw,
   2803			},
   2804			.num_parents = 1,
   2805			.flags = CLK_SET_RATE_PARENT,
   2806			.ops = &clk_branch2_ops,
   2807		},
   2808	},
   2809};
   2810
   2811static struct clk_branch gcc_sys_noc_usb3_prim_axi_clk = {
   2812	.halt_reg = 0x1a080,
   2813	.halt_check = BRANCH_HALT,
   2814	.hwcg_reg = 0x1a080,
   2815	.hwcg_bit = 1,
   2816	.clkr = {
   2817		.enable_reg = 0x1a080,
   2818		.enable_mask = BIT(0),
   2819		.hw.init = &(struct clk_init_data){
   2820			.name = "gcc_sys_noc_usb3_prim_axi_clk",
   2821			.parent_hws = (const struct clk_hw *[]){
   2822				&gcc_usb30_prim_master_clk_src.clkr.hw,
   2823			},
   2824			.num_parents = 1,
   2825			.flags = CLK_SET_RATE_PARENT,
   2826			.ops = &clk_branch2_ops,
   2827		},
   2828	},
   2829};
   2830
   2831static struct clk_branch gcc_ufs_clkref_clk = {
   2832	.halt_reg = 0x8c000,
   2833	.halt_check = BRANCH_HALT,
   2834	.clkr = {
   2835		.enable_reg = 0x8c000,
   2836		.enable_mask = BIT(0),
   2837		.hw.init = &(struct clk_init_data){
   2838			.name = "gcc_ufs_clkref_clk",
   2839			.ops = &clk_branch2_ops,
   2840		},
   2841	},
   2842};
   2843
   2844static struct clk_branch gcc_ufs_phy_ahb_clk = {
   2845	.halt_reg = 0x45014,
   2846	.halt_check = BRANCH_HALT,
   2847	.hwcg_reg = 0x45014,
   2848	.hwcg_bit = 1,
   2849	.clkr = {
   2850		.enable_reg = 0x45014,
   2851		.enable_mask = BIT(0),
   2852		.hw.init = &(struct clk_init_data){
   2853			.name = "gcc_ufs_phy_ahb_clk",
   2854			.ops = &clk_branch2_ops,
   2855		},
   2856	},
   2857};
   2858
   2859static struct clk_branch gcc_ufs_phy_axi_clk = {
   2860	.halt_reg = 0x45010,
   2861	.halt_check = BRANCH_HALT,
   2862	.hwcg_reg = 0x45010,
   2863	.hwcg_bit = 1,
   2864	.clkr = {
   2865		.enable_reg = 0x45010,
   2866		.enable_mask = BIT(0),
   2867		.hw.init = &(struct clk_init_data){
   2868			.name = "gcc_ufs_phy_axi_clk",
   2869			.parent_hws = (const struct clk_hw *[]){
   2870				&gcc_ufs_phy_axi_clk_src.clkr.hw,
   2871			},
   2872			.num_parents = 1,
   2873			.flags = CLK_SET_RATE_PARENT,
   2874			.ops = &clk_branch2_ops,
   2875		},
   2876	},
   2877};
   2878
   2879static struct clk_branch gcc_ufs_phy_ice_core_clk = {
   2880	.halt_reg = 0x45044,
   2881	.halt_check = BRANCH_HALT,
   2882	.hwcg_reg = 0x45044,
   2883	.hwcg_bit = 1,
   2884	.clkr = {
   2885		.enable_reg = 0x45044,
   2886		.enable_mask = BIT(0),
   2887		.hw.init = &(struct clk_init_data){
   2888			.name = "gcc_ufs_phy_ice_core_clk",
   2889			.parent_hws = (const struct clk_hw *[]){
   2890				&gcc_ufs_phy_ice_core_clk_src.clkr.hw,
   2891			},
   2892			.num_parents = 1,
   2893			.flags = CLK_SET_RATE_PARENT,
   2894			.ops = &clk_branch2_ops,
   2895		},
   2896	},
   2897};
   2898
   2899static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
   2900	.halt_reg = 0x45078,
   2901	.halt_check = BRANCH_HALT,
   2902	.hwcg_reg = 0x45078,
   2903	.hwcg_bit = 1,
   2904	.clkr = {
   2905		.enable_reg = 0x45078,
   2906		.enable_mask = BIT(0),
   2907		.hw.init = &(struct clk_init_data){
   2908			.name = "gcc_ufs_phy_phy_aux_clk",
   2909			.parent_hws = (const struct clk_hw *[]){
   2910				&gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
   2911			},
   2912			.num_parents = 1,
   2913			.flags = CLK_SET_RATE_PARENT,
   2914			.ops = &clk_branch2_ops,
   2915		},
   2916	},
   2917};
   2918
   2919static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
   2920	.halt_reg = 0x4501c,
   2921	.halt_check = BRANCH_HALT_SKIP,
   2922	.clkr = {
   2923		.enable_reg = 0x4501c,
   2924		.enable_mask = BIT(0),
   2925		.hw.init = &(struct clk_init_data){
   2926			.name = "gcc_ufs_phy_rx_symbol_0_clk",
   2927			.ops = &clk_branch2_ops,
   2928		},
   2929	},
   2930};
   2931
   2932static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
   2933	.halt_reg = 0x45018,
   2934	.halt_check = BRANCH_HALT_SKIP,
   2935	.clkr = {
   2936		.enable_reg = 0x45018,
   2937		.enable_mask = BIT(0),
   2938		.hw.init = &(struct clk_init_data){
   2939			.name = "gcc_ufs_phy_tx_symbol_0_clk",
   2940			.ops = &clk_branch2_ops,
   2941		},
   2942	},
   2943};
   2944
   2945static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
   2946	.halt_reg = 0x45040,
   2947	.halt_check = BRANCH_HALT,
   2948	.hwcg_reg = 0x45040,
   2949	.hwcg_bit = 1,
   2950	.clkr = {
   2951		.enable_reg = 0x45040,
   2952		.enable_mask = BIT(0),
   2953		.hw.init = &(struct clk_init_data){
   2954			.name = "gcc_ufs_phy_unipro_core_clk",
   2955			.parent_hws = (const struct clk_hw *[]){
   2956				&gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
   2957			},
   2958			.num_parents = 1,
   2959			.flags = CLK_SET_RATE_PARENT,
   2960			.ops = &clk_branch2_ops,
   2961		},
   2962	},
   2963};
   2964
   2965static struct clk_branch gcc_usb30_prim_master_clk = {
   2966	.halt_reg = 0x1a010,
   2967	.halt_check = BRANCH_HALT,
   2968	.clkr = {
   2969		.enable_reg = 0x1a010,
   2970		.enable_mask = BIT(0),
   2971		.hw.init = &(struct clk_init_data){
   2972			.name = "gcc_usb30_prim_master_clk",
   2973			.parent_hws = (const struct clk_hw *[]){
   2974				&gcc_usb30_prim_master_clk_src.clkr.hw,
   2975			},
   2976			.num_parents = 1,
   2977			.flags = CLK_SET_RATE_PARENT,
   2978			.ops = &clk_branch2_ops,
   2979		},
   2980	},
   2981};
   2982
   2983static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
   2984	.halt_reg = 0x1a018,
   2985	.halt_check = BRANCH_HALT,
   2986	.clkr = {
   2987		.enable_reg = 0x1a018,
   2988		.enable_mask = BIT(0),
   2989		.hw.init = &(struct clk_init_data){
   2990			.name = "gcc_usb30_prim_mock_utmi_clk",
   2991			.parent_hws = (const struct clk_hw *[]){
   2992				&gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,
   2993			},
   2994			.num_parents = 1,
   2995			.flags = CLK_SET_RATE_PARENT,
   2996			.ops = &clk_branch2_ops,
   2997		},
   2998	},
   2999};
   3000
   3001static struct clk_branch gcc_usb30_prim_sleep_clk = {
   3002	.halt_reg = 0x1a014,
   3003	.halt_check = BRANCH_HALT,
   3004	.clkr = {
   3005		.enable_reg = 0x1a014,
   3006		.enable_mask = BIT(0),
   3007		.hw.init = &(struct clk_init_data){
   3008			.name = "gcc_usb30_prim_sleep_clk",
   3009			.ops = &clk_branch2_ops,
   3010		},
   3011	},
   3012};
   3013
   3014static struct clk_branch gcc_usb3_prim_clkref_clk = {
   3015	.halt_reg = 0x9f000,
   3016	.halt_check = BRANCH_HALT,
   3017	.clkr = {
   3018		.enable_reg = 0x9f000,
   3019		.enable_mask = BIT(0),
   3020		.hw.init = &(struct clk_init_data){
   3021			.name = "gcc_usb3_prim_clkref_clk",
   3022			.ops = &clk_branch2_ops,
   3023		},
   3024	},
   3025};
   3026
   3027static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
   3028	.halt_reg = 0x1a054,
   3029	.halt_check = BRANCH_HALT,
   3030	.clkr = {
   3031		.enable_reg = 0x1a054,
   3032		.enable_mask = BIT(0),
   3033		.hw.init = &(struct clk_init_data){
   3034			.name = "gcc_usb3_prim_phy_com_aux_clk",
   3035			.parent_hws = (const struct clk_hw *[]){
   3036				&gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
   3037			},
   3038			.num_parents = 1,
   3039			.flags = CLK_SET_RATE_PARENT,
   3040			.ops = &clk_branch2_ops,
   3041		},
   3042	},
   3043};
   3044
   3045static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
   3046	.halt_reg = 0x1a058,
   3047	.halt_check = BRANCH_HALT_SKIP,
   3048	.hwcg_reg = 0x1a058,
   3049	.hwcg_bit = 1,
   3050	.clkr = {
   3051		.enable_reg = 0x1a058,
   3052		.enable_mask = BIT(0),
   3053		.hw.init = &(struct clk_init_data){
   3054			.name = "gcc_usb3_prim_phy_pipe_clk",
   3055			.ops = &clk_branch2_ops,
   3056		},
   3057	},
   3058};
   3059
   3060static struct clk_branch gcc_vcodec0_axi_clk = {
   3061	.halt_reg = 0x6e008,
   3062	.halt_check = BRANCH_HALT,
   3063	.clkr = {
   3064		.enable_reg = 0x6e008,
   3065		.enable_mask = BIT(0),
   3066		.hw.init = &(struct clk_init_data){
   3067			.name = "gcc_vcodec0_axi_clk",
   3068			.ops = &clk_branch2_ops,
   3069		},
   3070	},
   3071};
   3072
   3073static struct clk_branch gcc_venus_ahb_clk = {
   3074	.halt_reg = 0x6e010,
   3075	.halt_check = BRANCH_HALT,
   3076	.clkr = {
   3077		.enable_reg = 0x6e010,
   3078		.enable_mask = BIT(0),
   3079		.hw.init = &(struct clk_init_data){
   3080			.name = "gcc_venus_ahb_clk",
   3081			.ops = &clk_branch2_ops,
   3082		},
   3083	},
   3084};
   3085
   3086static struct clk_branch gcc_venus_ctl_axi_clk = {
   3087	.halt_reg = 0x6e004,
   3088	.halt_check = BRANCH_HALT,
   3089	.clkr = {
   3090		.enable_reg = 0x6e004,
   3091		.enable_mask = BIT(0),
   3092		.hw.init = &(struct clk_init_data){
   3093			.name = "gcc_venus_ctl_axi_clk",
   3094			.ops = &clk_branch2_ops,
   3095		},
   3096	},
   3097};
   3098
   3099static struct clk_branch gcc_video_ahb_clk = {
   3100	.halt_reg = 0x17004,
   3101	.halt_check = BRANCH_HALT,
   3102	.hwcg_reg = 0x17004,
   3103	.hwcg_bit = 1,
   3104	.clkr = {
   3105		.enable_reg = 0x17004,
   3106		.enable_mask = BIT(0),
   3107		.hw.init = &(struct clk_init_data){
   3108			.name = "gcc_video_ahb_clk",
   3109			.ops = &clk_branch2_ops,
   3110		},
   3111	},
   3112};
   3113
   3114static struct clk_branch gcc_video_axi0_clk = {
   3115	.halt_reg = 0x1701c,
   3116	.halt_check = BRANCH_HALT,
   3117	.hwcg_reg = 0x1701c,
   3118	.hwcg_bit = 1,
   3119	.clkr = {
   3120		.enable_reg = 0x1701c,
   3121		.enable_mask = BIT(0),
   3122		.hw.init = &(struct clk_init_data){
   3123			.name = "gcc_video_axi0_clk",
   3124			.ops = &clk_branch2_ops,
   3125		},
   3126	},
   3127};
   3128
   3129static struct clk_branch gcc_video_throttle_core_clk = {
   3130	.halt_reg = 0x17068,
   3131	.halt_check = BRANCH_HALT_VOTED,
   3132	.hwcg_reg = 0x17068,
   3133	.hwcg_bit = 1,
   3134	.clkr = {
   3135		.enable_reg = 0x79004,
   3136		.enable_mask = BIT(28),
   3137		.hw.init = &(struct clk_init_data){
   3138			.name = "gcc_video_throttle_core_clk",
   3139			.ops = &clk_branch2_ops,
   3140		},
   3141	},
   3142};
   3143
   3144static struct clk_branch gcc_video_vcodec0_sys_clk = {
   3145	.halt_reg = 0x580a4,
   3146	.halt_check = BRANCH_HALT_DELAY,
   3147	.hwcg_reg = 0x580a4,
   3148	.hwcg_bit = 1,
   3149	.clkr = {
   3150		.enable_reg = 0x580a4,
   3151		.enable_mask = BIT(0),
   3152		.hw.init = &(struct clk_init_data){
   3153			.name = "gcc_video_vcodec0_sys_clk",
   3154			.parent_hws = (const struct clk_hw *[]){
   3155				&gcc_video_venus_clk_src.clkr.hw,
   3156			},
   3157			.num_parents = 1,
   3158			.flags = CLK_SET_RATE_PARENT,
   3159			.ops = &clk_branch2_ops,
   3160		},
   3161	},
   3162};
   3163
   3164static struct clk_branch gcc_video_venus_ctl_clk = {
   3165	.halt_reg = 0x5808c,
   3166	.halt_check = BRANCH_HALT,
   3167	.clkr = {
   3168		.enable_reg = 0x5808c,
   3169		.enable_mask = BIT(0),
   3170		.hw.init = &(struct clk_init_data){
   3171			.name = "gcc_video_venus_ctl_clk",
   3172			.parent_hws = (const struct clk_hw *[]){
   3173				&gcc_video_venus_clk_src.clkr.hw,
   3174			},
   3175			.num_parents = 1,
   3176			.flags = CLK_SET_RATE_PARENT,
   3177			.ops = &clk_branch2_ops,
   3178		},
   3179	},
   3180};
   3181
   3182static struct clk_branch gcc_video_xo_clk = {
   3183	.halt_reg = 0x17024,
   3184	.halt_check = BRANCH_HALT,
   3185	.clkr = {
   3186		.enable_reg = 0x17024,
   3187		.enable_mask = BIT(0),
   3188		.hw.init = &(struct clk_init_data){
   3189			.name = "gcc_video_xo_clk",
   3190			.ops = &clk_branch2_ops,
   3191		},
   3192	},
   3193};
   3194
   3195static struct gdsc gcc_camss_top_gdsc = {
   3196	.gdscr = 0x58004,
   3197	.pd = {
   3198		.name = "gcc_camss_top",
   3199	},
   3200	.pwrsts = PWRSTS_OFF_ON,
   3201};
   3202
   3203static struct gdsc gcc_ufs_phy_gdsc = {
   3204	.gdscr = 0x45004,
   3205	.pd = {
   3206		.name = "gcc_ufs_phy",
   3207	},
   3208	.pwrsts = PWRSTS_OFF_ON,
   3209};
   3210
   3211static struct gdsc gcc_usb30_prim_gdsc = {
   3212	.gdscr = 0x1a004,
   3213	.pd = {
   3214		.name = "gcc_usb30_prim",
   3215	},
   3216	.pwrsts = PWRSTS_OFF_ON,
   3217};
   3218
   3219static struct gdsc gcc_vcodec0_gdsc = {
   3220	.gdscr = 0x58098,
   3221	.pd = {
   3222		.name = "gcc_vcodec0",
   3223	},
   3224	.pwrsts = PWRSTS_OFF_ON,
   3225};
   3226
   3227static struct gdsc gcc_venus_gdsc = {
   3228	.gdscr = 0x5807c,
   3229	.pd = {
   3230		.name = "gcc_venus",
   3231	},
   3232	.pwrsts = PWRSTS_OFF_ON,
   3233};
   3234
   3235static struct gdsc hlos1_vote_turing_mmu_tbu1_gdsc = {
   3236	.gdscr = 0x7d060,
   3237	.pd = {
   3238		.name = "hlos1_vote_turing_mmu_tbu1",
   3239	},
   3240	.pwrsts = PWRSTS_OFF_ON,
   3241	.flags = VOTABLE,
   3242};
   3243
   3244static struct gdsc hlos1_vote_turing_mmu_tbu0_gdsc = {
   3245	.gdscr = 0x7d07c,
   3246	.pd = {
   3247		.name = "hlos1_vote_turing_mmu_tbu0",
   3248	},
   3249	.pwrsts = PWRSTS_OFF_ON,
   3250	.flags = VOTABLE,
   3251};
   3252
   3253static struct gdsc hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc = {
   3254	.gdscr = 0x7d074,
   3255	.pd = {
   3256		.name = "hlos1_vote_mm_snoc_mmu_tbu_rt",
   3257	},
   3258	.pwrsts = PWRSTS_OFF_ON,
   3259	.flags = VOTABLE,
   3260};
   3261
   3262static struct gdsc hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc = {
   3263	.gdscr = 0x7d078,
   3264	.pd = {
   3265		.name = "hlos1_vote_mm_snoc_mmu_tbu_nrt",
   3266	},
   3267	.pwrsts = PWRSTS_OFF_ON,
   3268	.flags = VOTABLE,
   3269};
   3270
   3271static struct clk_regmap *gcc_sm6115_clocks[] = {
   3272	[GCC_AHB2PHY_CSI_CLK] = &gcc_ahb2phy_csi_clk.clkr,
   3273	[GCC_AHB2PHY_USB_CLK] = &gcc_ahb2phy_usb_clk.clkr,
   3274	[GCC_BIMC_GPU_AXI_CLK] = &gcc_bimc_gpu_axi_clk.clkr,
   3275	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
   3276	[GCC_CAM_THROTTLE_NRT_CLK] = &gcc_cam_throttle_nrt_clk.clkr,
   3277	[GCC_CAM_THROTTLE_RT_CLK] = &gcc_cam_throttle_rt_clk.clkr,
   3278	[GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr,
   3279	[GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr,
   3280	[GCC_CAMSS_AXI_CLK] = &gcc_camss_axi_clk.clkr,
   3281	[GCC_CAMSS_AXI_CLK_SRC] = &gcc_camss_axi_clk_src.clkr,
   3282	[GCC_CAMSS_CAMNOC_ATB_CLK] = &gcc_camss_camnoc_atb_clk.clkr,
   3283	[GCC_CAMSS_CAMNOC_NTS_XO_CLK] = &gcc_camss_camnoc_nts_xo_clk.clkr,
   3284	[GCC_CAMSS_CCI_0_CLK] = &gcc_camss_cci_0_clk.clkr,
   3285	[GCC_CAMSS_CCI_CLK_SRC] = &gcc_camss_cci_clk_src.clkr,
   3286	[GCC_CAMSS_CPHY_0_CLK] = &gcc_camss_cphy_0_clk.clkr,
   3287	[GCC_CAMSS_CPHY_1_CLK] = &gcc_camss_cphy_1_clk.clkr,
   3288	[GCC_CAMSS_CPHY_2_CLK] = &gcc_camss_cphy_2_clk.clkr,
   3289	[GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
   3290	[GCC_CAMSS_CSI0PHYTIMER_CLK_SRC] = &gcc_camss_csi0phytimer_clk_src.clkr,
   3291	[GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
   3292	[GCC_CAMSS_CSI1PHYTIMER_CLK_SRC] = &gcc_camss_csi1phytimer_clk_src.clkr,
   3293	[GCC_CAMSS_CSI2PHYTIMER_CLK] = &gcc_camss_csi2phytimer_clk.clkr,
   3294	[GCC_CAMSS_CSI2PHYTIMER_CLK_SRC] = &gcc_camss_csi2phytimer_clk_src.clkr,
   3295	[GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
   3296	[GCC_CAMSS_MCLK0_CLK_SRC] = &gcc_camss_mclk0_clk_src.clkr,
   3297	[GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
   3298	[GCC_CAMSS_MCLK1_CLK_SRC] = &gcc_camss_mclk1_clk_src.clkr,
   3299	[GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr,
   3300	[GCC_CAMSS_MCLK2_CLK_SRC] = &gcc_camss_mclk2_clk_src.clkr,
   3301	[GCC_CAMSS_MCLK3_CLK] = &gcc_camss_mclk3_clk.clkr,
   3302	[GCC_CAMSS_MCLK3_CLK_SRC] = &gcc_camss_mclk3_clk_src.clkr,
   3303	[GCC_CAMSS_NRT_AXI_CLK] = &gcc_camss_nrt_axi_clk.clkr,
   3304	[GCC_CAMSS_OPE_AHB_CLK] = &gcc_camss_ope_ahb_clk.clkr,
   3305	[GCC_CAMSS_OPE_AHB_CLK_SRC] = &gcc_camss_ope_ahb_clk_src.clkr,
   3306	[GCC_CAMSS_OPE_CLK] = &gcc_camss_ope_clk.clkr,
   3307	[GCC_CAMSS_OPE_CLK_SRC] = &gcc_camss_ope_clk_src.clkr,
   3308	[GCC_CAMSS_RT_AXI_CLK] = &gcc_camss_rt_axi_clk.clkr,
   3309	[GCC_CAMSS_TFE_0_CLK] = &gcc_camss_tfe_0_clk.clkr,
   3310	[GCC_CAMSS_TFE_0_CLK_SRC] = &gcc_camss_tfe_0_clk_src.clkr,
   3311	[GCC_CAMSS_TFE_0_CPHY_RX_CLK] = &gcc_camss_tfe_0_cphy_rx_clk.clkr,
   3312	[GCC_CAMSS_TFE_0_CSID_CLK] = &gcc_camss_tfe_0_csid_clk.clkr,
   3313	[GCC_CAMSS_TFE_0_CSID_CLK_SRC] = &gcc_camss_tfe_0_csid_clk_src.clkr,
   3314	[GCC_CAMSS_TFE_1_CLK] = &gcc_camss_tfe_1_clk.clkr,
   3315	[GCC_CAMSS_TFE_1_CLK_SRC] = &gcc_camss_tfe_1_clk_src.clkr,
   3316	[GCC_CAMSS_TFE_1_CPHY_RX_CLK] = &gcc_camss_tfe_1_cphy_rx_clk.clkr,
   3317	[GCC_CAMSS_TFE_1_CSID_CLK] = &gcc_camss_tfe_1_csid_clk.clkr,
   3318	[GCC_CAMSS_TFE_1_CSID_CLK_SRC] = &gcc_camss_tfe_1_csid_clk_src.clkr,
   3319	[GCC_CAMSS_TFE_2_CLK] = &gcc_camss_tfe_2_clk.clkr,
   3320	[GCC_CAMSS_TFE_2_CLK_SRC] = &gcc_camss_tfe_2_clk_src.clkr,
   3321	[GCC_CAMSS_TFE_2_CPHY_RX_CLK] = &gcc_camss_tfe_2_cphy_rx_clk.clkr,
   3322	[GCC_CAMSS_TFE_2_CSID_CLK] = &gcc_camss_tfe_2_csid_clk.clkr,
   3323	[GCC_CAMSS_TFE_2_CSID_CLK_SRC] = &gcc_camss_tfe_2_csid_clk_src.clkr,
   3324	[GCC_CAMSS_TFE_CPHY_RX_CLK_SRC] = &gcc_camss_tfe_cphy_rx_clk_src.clkr,
   3325	[GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
   3326	[GCC_CAMSS_TOP_AHB_CLK_SRC] = &gcc_camss_top_ahb_clk_src.clkr,
   3327	[GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
   3328	[GCC_CPUSS_GNOC_CLK] = &gcc_cpuss_gnoc_clk.clkr,
   3329	[GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr,
   3330	[GCC_DISP_GPLL0_CLK_SRC] = &gcc_disp_gpll0_clk_src.clkr,
   3331	[GCC_DISP_GPLL0_DIV_CLK_SRC] = &gcc_disp_gpll0_div_clk_src.clkr,
   3332	[GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
   3333	[GCC_DISP_THROTTLE_CORE_CLK] = &gcc_disp_throttle_core_clk.clkr,
   3334	[GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr,
   3335	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
   3336	[GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
   3337	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
   3338	[GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
   3339	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
   3340	[GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
   3341	[GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,
   3342	[GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
   3343	[GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
   3344	[GCC_GPU_IREF_CLK] = &gcc_gpu_iref_clk.clkr,
   3345	[GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
   3346	[GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
   3347	[GCC_GPU_THROTTLE_CORE_CLK] = &gcc_gpu_throttle_core_clk.clkr,
   3348	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
   3349	[GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
   3350	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
   3351	[GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
   3352	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
   3353	[GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
   3354	[GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
   3355	[GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
   3356	[GCC_QMIP_GPU_CFG_AHB_CLK] = &gcc_qmip_gpu_cfg_ahb_clk.clkr,
   3357	[GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
   3358	[GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
   3359	[GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
   3360	[GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
   3361	[GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
   3362	[GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
   3363	[GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
   3364	[GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
   3365	[GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
   3366	[GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
   3367	[GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
   3368	[GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
   3369	[GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
   3370	[GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
   3371	[GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
   3372	[GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
   3373	[GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
   3374	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
   3375	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
   3376	[GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,
   3377	[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
   3378	[GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr,
   3379	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
   3380	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
   3381	[GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
   3382	[GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,
   3383	[GCC_SYS_NOC_UFS_PHY_AXI_CLK] = &gcc_sys_noc_ufs_phy_axi_clk.clkr,
   3384	[GCC_SYS_NOC_USB3_PRIM_AXI_CLK] = &gcc_sys_noc_usb3_prim_axi_clk.clkr,
   3385	[GCC_UFS_CLKREF_CLK] = &gcc_ufs_clkref_clk.clkr,
   3386	[GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
   3387	[GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
   3388	[GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
   3389	[GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
   3390	[GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
   3391	[GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
   3392	[GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
   3393	[GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
   3394	[GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
   3395	[GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
   3396	[GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] =
   3397		&gcc_ufs_phy_unipro_core_clk_src.clkr,
   3398	[GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
   3399	[GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
   3400	[GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
   3401	[GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] =
   3402		&gcc_usb30_prim_mock_utmi_clk_src.clkr,
   3403	[GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] =
   3404		&gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,
   3405	[GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
   3406	[GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,
   3407	[GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
   3408	[GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
   3409	[GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
   3410	[GCC_VCODEC0_AXI_CLK] = &gcc_vcodec0_axi_clk.clkr,
   3411	[GCC_VENUS_AHB_CLK] = &gcc_venus_ahb_clk.clkr,
   3412	[GCC_VENUS_CTL_AXI_CLK] = &gcc_venus_ctl_axi_clk.clkr,
   3413	[GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr,
   3414	[GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
   3415	[GCC_VIDEO_THROTTLE_CORE_CLK] = &gcc_video_throttle_core_clk.clkr,
   3416	[GCC_VIDEO_VCODEC0_SYS_CLK] = &gcc_video_vcodec0_sys_clk.clkr,
   3417	[GCC_VIDEO_VENUS_CLK_SRC] = &gcc_video_venus_clk_src.clkr,
   3418	[GCC_VIDEO_VENUS_CTL_CLK] = &gcc_video_venus_ctl_clk.clkr,
   3419	[GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr,
   3420	[GPLL0] = &gpll0.clkr,
   3421	[GPLL0_OUT_AUX2] = &gpll0_out_aux2.clkr,
   3422	[GPLL0_OUT_MAIN] = &gpll0_out_main.clkr,
   3423	[GPLL10] = &gpll10.clkr,
   3424	[GPLL10_OUT_MAIN] = &gpll10_out_main.clkr,
   3425	[GPLL11] = &gpll11.clkr,
   3426	[GPLL11_OUT_MAIN] = &gpll11_out_main.clkr,
   3427	[GPLL3] = &gpll3.clkr,
   3428	[GPLL4] = &gpll4.clkr,
   3429	[GPLL4_OUT_MAIN] = &gpll4_out_main.clkr,
   3430	[GPLL6] = &gpll6.clkr,
   3431	[GPLL6_OUT_MAIN] = &gpll6_out_main.clkr,
   3432	[GPLL7] = &gpll7.clkr,
   3433	[GPLL7_OUT_MAIN] = &gpll7_out_main.clkr,
   3434	[GPLL8] = &gpll8.clkr,
   3435	[GPLL8_OUT_MAIN] = &gpll8_out_main.clkr,
   3436	[GPLL9] = &gpll9.clkr,
   3437	[GPLL9_OUT_MAIN] = &gpll9_out_main.clkr,
   3438};
   3439
   3440static const struct qcom_reset_map gcc_sm6115_resets[] = {
   3441	[GCC_QUSB2PHY_PRIM_BCR] = { 0x1c000 },
   3442	[GCC_QUSB2PHY_SEC_BCR] = { 0x1c004 },
   3443	[GCC_SDCC1_BCR] = { 0x38000 },
   3444	[GCC_SDCC2_BCR] = { 0x1e000 },
   3445	[GCC_UFS_PHY_BCR] = { 0x45000 },
   3446	[GCC_USB30_PRIM_BCR] = { 0x1a000 },
   3447	[GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x1d000 },
   3448	[GCC_USB3PHY_PHY_PRIM_SP0_BCR] = { 0x1b008 },
   3449	[GCC_USB3_PHY_PRIM_SP0_BCR] = { 0x1b000 },
   3450	[GCC_VCODEC0_BCR] = { 0x58094 },
   3451	[GCC_VENUS_BCR] = { 0x58078 },
   3452	[GCC_VIDEO_INTERFACE_BCR] = { 0x6e000 },
   3453};
   3454
   3455static struct gdsc *gcc_sm6115_gdscs[] = {
   3456	[GCC_CAMSS_TOP_GDSC] = &gcc_camss_top_gdsc,
   3457	[GCC_UFS_PHY_GDSC] = &gcc_ufs_phy_gdsc,
   3458	[GCC_USB30_PRIM_GDSC] = &gcc_usb30_prim_gdsc,
   3459	[GCC_VCODEC0_GDSC] = &gcc_vcodec0_gdsc,
   3460	[GCC_VENUS_GDSC] = &gcc_venus_gdsc,
   3461	[HLOS1_VOTE_TURING_MMU_TBU1_GDSC] = &hlos1_vote_turing_mmu_tbu1_gdsc,
   3462	[HLOS1_VOTE_TURING_MMU_TBU0_GDSC] = &hlos1_vote_turing_mmu_tbu0_gdsc,
   3463	[HLOS1_VOTE_MM_SNOC_MMU_TBU_RT_GDSC] = &hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc,
   3464	[HLOS1_VOTE_MM_SNOC_MMU_TBU_NRT_GDSC] = &hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc,
   3465};
   3466
   3467static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
   3468	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
   3469	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
   3470	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
   3471	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
   3472	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
   3473	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
   3474};
   3475
   3476static const struct regmap_config gcc_sm6115_regmap_config = {
   3477	.reg_bits = 32,
   3478	.reg_stride = 4,
   3479	.val_bits = 32,
   3480	.max_register = 0xc7000,
   3481	.fast_io = true,
   3482};
   3483
   3484static const struct qcom_cc_desc gcc_sm6115_desc = {
   3485	.config = &gcc_sm6115_regmap_config,
   3486	.clks = gcc_sm6115_clocks,
   3487	.num_clks = ARRAY_SIZE(gcc_sm6115_clocks),
   3488	.resets = gcc_sm6115_resets,
   3489	.num_resets = ARRAY_SIZE(gcc_sm6115_resets),
   3490	.gdscs = gcc_sm6115_gdscs,
   3491	.num_gdscs = ARRAY_SIZE(gcc_sm6115_gdscs),
   3492};
   3493
   3494static const struct of_device_id gcc_sm6115_match_table[] = {
   3495	{ .compatible = "qcom,gcc-sm6115" },
   3496	{ }
   3497};
   3498MODULE_DEVICE_TABLE(of, gcc_sm6115_match_table);
   3499
   3500static int gcc_sm6115_probe(struct platform_device *pdev)
   3501{
   3502	struct regmap *regmap;
   3503	int ret;
   3504
   3505	regmap = qcom_cc_map(pdev, &gcc_sm6115_desc);
   3506	if (IS_ERR(regmap))
   3507		return PTR_ERR(regmap);
   3508
   3509	ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
   3510			ARRAY_SIZE(gcc_dfs_clocks));
   3511	if (ret)
   3512		return ret;
   3513
   3514	clk_alpha_pll_configure(&gpll8, regmap, &gpll8_config);
   3515	clk_alpha_pll_configure(&gpll9, regmap, &gpll9_config);
   3516	clk_alpha_pll_configure(&gpll10, regmap, &gpll10_config);
   3517	clk_alpha_pll_configure(&gpll11, regmap, &gpll11_config);
   3518
   3519	return qcom_cc_really_probe(pdev, &gcc_sm6115_desc, regmap);
   3520}
   3521
   3522static struct platform_driver gcc_sm6115_driver = {
   3523	.probe = gcc_sm6115_probe,
   3524	.driver = {
   3525		.name = "gcc-sm6115",
   3526		.of_match_table = gcc_sm6115_match_table,
   3527	},
   3528};
   3529
   3530static int __init gcc_sm6115_init(void)
   3531{
   3532	return platform_driver_register(&gcc_sm6115_driver);
   3533}
   3534subsys_initcall(gcc_sm6115_init);
   3535
   3536static void __exit gcc_sm6115_exit(void)
   3537{
   3538	platform_driver_unregister(&gcc_sm6115_driver);
   3539}
   3540module_exit(gcc_sm6115_exit);
   3541
   3542MODULE_DESCRIPTION("QTI GCC SM6115 and SM4250 Driver");
   3543MODULE_LICENSE("GPL v2");
   3544MODULE_ALIAS("platform:gcc-sm6115");