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-msm8976.c (104543B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * Qualcomm Global Clock Controller driver for MSM8956/76
      4 *
      5 * Copyright (c) 2016-2021, AngeloGioacchino Del Regno
      6 *                     <angelogioacchino.delregno@somainline.org>
      7 *
      8 * Driver cleanup and modernization
      9 * Copyright (c) 2021, Konrad Dybcio <konrad.dybcio@somainline.org>
     10 *                     Marijn Suijten <marijn.suijten@somainline.org>
     11 *
     12 */
     13
     14#include <linux/clk-provider.h>
     15#include <linux/err.h>
     16#include <linux/kernel.h>
     17#include <linux/module.h>
     18#include <linux/of_device.h>
     19#include <linux/of.h>
     20#include <linux/regmap.h>
     21
     22#include <dt-bindings/clock/qcom,gcc-msm8976.h>
     23
     24#include "clk-pll.h"
     25#include "clk-branch.h"
     26#include "clk-rcg.h"
     27#include "common.h"
     28#include "gdsc.h"
     29#include "reset.h"
     30
     31enum {
     32	P_GPLL0_OUT_MAIN,
     33	P_GPLL0_AUX,
     34	P_GPLL0_OUT,
     35	P_GPLL0_OUT_M,
     36	P_GPLL0_OUT_MDP,
     37	P_GPLL2_AUX,
     38	P_GPLL2_OUT,
     39	P_GPLL4_OUT_MAIN,
     40	P_GPLL4_AUX,
     41	P_GPLL4_OUT,
     42	P_GPLL4_GFX3D,
     43	P_GPLL6_OUT_MAIN,
     44	P_GPLL6_AUX,
     45	P_GPLL6_OUT,
     46	P_GPLL6_GFX3D,
     47	P_DSI0PLL,
     48	P_DSI1PLL,
     49	P_DSI0PLL_BYTE,
     50	P_DSI1PLL_BYTE,
     51	P_XO_A,
     52	P_XO,
     53};
     54
     55static struct clk_pll gpll0 = {
     56	.l_reg = 0x21004,
     57	.m_reg = 0x21008,
     58	.n_reg = 0x2100c,
     59	.config_reg = 0x21014,
     60	.mode_reg = 0x21000,
     61	.status_reg = 0x2101c,
     62	.status_bit = 17,
     63	.clkr.hw.init = &(struct clk_init_data){
     64		.name = "gpll0",
     65		.parent_data = &(const struct clk_parent_data){
     66			.fw_name = "xo",
     67		},
     68		.num_parents = 1,
     69		.ops = &clk_pll_ops,
     70	},
     71};
     72
     73static struct clk_regmap gpll0_vote = {
     74	.enable_reg = 0x45000,
     75	.enable_mask = BIT(0),
     76	.hw.init = &(struct clk_init_data){
     77		.name = "gpll0_vote",
     78		.parent_hws = (const struct clk_hw *[]) {
     79			&gpll0.clkr.hw,
     80		},
     81		.num_parents = 1,
     82		/* This clock is required for other ones to function. */
     83		.flags = CLK_IS_CRITICAL,
     84		.ops = &clk_pll_vote_ops,
     85	},
     86};
     87
     88static struct clk_pll gpll2 = {
     89	.l_reg = 0x4a004,
     90	.m_reg = 0x4a008,
     91	.n_reg = 0x4a00c,
     92	.config_reg = 0x4a014,
     93	.mode_reg = 0x4a000,
     94	.status_reg = 0x4a01c,
     95	.status_bit = 17,
     96	.clkr.hw.init = &(struct clk_init_data){
     97		.name = "gpll2",
     98		.parent_data = &(const struct clk_parent_data){
     99			.fw_name = "xo",
    100		},
    101		.num_parents = 1,
    102		.ops = &clk_pll_ops,
    103	},
    104};
    105
    106static struct clk_regmap gpll2_vote = {
    107	.enable_reg = 0x45000,
    108	.enable_mask = BIT(2),
    109	.hw.init = &(struct clk_init_data){
    110		.name = "gpll2_vote",
    111		.parent_hws = (const struct clk_hw *[]) {
    112			&gpll2.clkr.hw,
    113		},
    114		.num_parents = 1,
    115		.ops = &clk_pll_vote_ops,
    116	},
    117};
    118
    119static const struct pll_freq_tbl gpll3_freq_tbl[] = {
    120	{ 1100000000, 57, 7, 24, 0 },
    121	{ }
    122};
    123
    124static struct clk_pll gpll3 = {
    125	.l_reg = 0x22004,
    126	.m_reg = 0x22008,
    127	.n_reg = 0x2200c,
    128	.config_reg = 0x22010,
    129	.mode_reg = 0x22000,
    130	.status_reg = 0x22024,
    131	.status_bit = 17,
    132	.freq_tbl = gpll3_freq_tbl,
    133	.clkr.hw.init = &(struct clk_init_data) {
    134		.name = "gpll3",
    135		.parent_data = &(const struct clk_parent_data){
    136			.fw_name = "xo",
    137		},
    138		.num_parents = 1,
    139		.ops = &clk_pll_ops,
    140	},
    141};
    142
    143static struct clk_regmap gpll3_vote = {
    144	.enable_reg = 0x45000,
    145	.enable_mask = BIT(4),
    146	.hw.init = &(struct clk_init_data){
    147		.name = "gpll3_vote",
    148		.parent_hws = (const struct clk_hw *[]) {
    149			&gpll3.clkr.hw,
    150		},
    151		.num_parents = 1,
    152		.ops = &clk_pll_vote_ops,
    153	},
    154};
    155
    156/* GPLL3 at 1100MHz, main output enabled. */
    157static const struct pll_config gpll3_config = {
    158	.l = 57,
    159	.m = 7,
    160	.n = 24,
    161	.vco_val = 0x0,
    162	.vco_mask = 0x3 << 20,
    163	.pre_div_val = 0x0,
    164	.pre_div_mask = 0x7 << 12,
    165	.post_div_val = 0x0,
    166	.post_div_mask = 0x3 << 8,
    167	.mn_ena_mask = BIT(24),
    168	.main_output_mask = BIT(0),
    169	.aux_output_mask = BIT(1),
    170};
    171
    172static struct clk_pll gpll4 = {
    173	.l_reg = 0x24004,
    174	.m_reg = 0x24008,
    175	.n_reg = 0x2400c,
    176	.config_reg = 0x24018,
    177	.mode_reg = 0x24000,
    178	.status_reg = 0x24024,
    179	.status_bit = 17,
    180	.clkr.hw.init = &(struct clk_init_data){
    181		.name = "gpll4",
    182		.parent_data = &(const struct clk_parent_data){
    183			.fw_name = "xo",
    184		},
    185		.num_parents = 1,
    186		.ops = &clk_pll_ops,
    187	},
    188};
    189
    190static struct clk_regmap gpll4_vote = {
    191	.enable_reg = 0x45000,
    192	.enable_mask = BIT(5),
    193	.hw.init = &(struct clk_init_data){
    194		.name = "gpll4_vote",
    195		.parent_hws = (const struct clk_hw *[]) {
    196			&gpll4.clkr.hw,
    197		},
    198		.num_parents = 1,
    199		.ops = &clk_pll_vote_ops,
    200	},
    201};
    202
    203static struct clk_pll gpll6 = {
    204	.mode_reg = 0x37000,
    205	.l_reg = 0x37004,
    206	.m_reg = 0x37008,
    207	.n_reg = 0x3700c,
    208	.config_reg = 0x37014,
    209	.status_reg = 0x3701c,
    210	.status_bit = 17,
    211	.clkr.hw.init = &(struct clk_init_data){
    212		.name = "gpll6",
    213		.parent_data = &(const struct clk_parent_data){
    214			.fw_name = "xo",
    215		},
    216		.num_parents = 1,
    217		.ops = &clk_pll_ops,
    218	},
    219};
    220
    221static struct clk_regmap gpll6_vote = {
    222	.enable_reg = 0x45000,
    223	.enable_mask = BIT(7),
    224	.hw.init = &(struct clk_init_data){
    225		.name = "gpll6_vote",
    226		.parent_hws = (const struct clk_hw *[]) {
    227			&gpll6.clkr.hw,
    228		},
    229		.num_parents = 1,
    230		.ops = &clk_pll_vote_ops,
    231	},
    232};
    233
    234static const struct parent_map gcc_parent_map_1[] = {
    235	{ P_XO, 0 },
    236	{ P_GPLL0_OUT_MAIN, 1 },
    237	{ P_GPLL4_OUT, 2 },
    238};
    239
    240static const struct clk_parent_data gcc_parent_data_1[] = {
    241	{ .fw_name = "xo" },
    242	{ .hw = &gpll0_vote.hw },
    243	{ .hw = &gpll4_vote.hw },
    244};
    245
    246static const struct parent_map gcc_parent_map_v1_1[] = {
    247	{ P_XO, 0 },
    248	{ P_GPLL0_OUT_MAIN, 1 },
    249	{ P_GPLL2_OUT, 4 },
    250};
    251
    252static const struct clk_parent_data gcc_parent_data_v1_1[] = {
    253	{ .fw_name = "xo" },
    254	{ .hw = &gpll0_vote.hw },
    255	{ .hw = &gpll2_vote.hw },
    256};
    257
    258static const struct parent_map gcc_parent_map_2[] = {
    259	{ P_XO, 0 },
    260	{ P_GPLL0_OUT_MAIN, 1 },
    261	{ P_GPLL2_AUX, 3 },
    262	{ P_GPLL4_OUT, 2 },
    263};
    264
    265static const struct clk_parent_data gcc_parent_data_2[] = {
    266	{ .fw_name = "xo" },
    267	{ .hw = &gpll0_vote.hw },
    268	{ .hw = &gpll2_vote.hw },
    269	{ .hw = &gpll4_vote.hw },
    270};
    271
    272static const struct parent_map gcc_parent_map_3[] = {
    273	{ P_XO, 0 },
    274	{ P_GPLL0_OUT_MAIN, 1 },
    275	{ P_GPLL2_AUX, 3 },
    276	{ P_GPLL6_AUX, 2 },
    277};
    278
    279static const struct clk_parent_data gcc_parent_data_3[] = {
    280	{ .fw_name = "xo" },
    281	{ .hw = &gpll0_vote.hw },
    282	{ .hw = &gpll2_vote.hw },
    283	{ .hw = &gpll6_vote.hw },
    284};
    285
    286static const struct parent_map gcc_parent_map_4[] = {
    287	{ P_XO, 0 },
    288	{ P_GPLL0_OUT_MAIN, 1 },
    289};
    290
    291static const struct parent_map gcc_parent_map_4_fs[] = {
    292	{ P_XO, 0 },
    293	{ P_GPLL0_OUT, 2 },
    294};
    295
    296static const struct parent_map gcc_parent_map_5[] = {
    297	{ P_XO, 0 },
    298	{ P_GPLL4_OUT, 2 },
    299	{ P_GPLL6_OUT_MAIN, 1 },
    300};
    301
    302static const struct clk_parent_data gcc_parent_data_5[] = {
    303	{ .fw_name = "xo" },
    304	{ .hw = &gpll4_vote.hw },
    305	{ .hw = &gpll6_vote.hw },
    306};
    307
    308static const struct parent_map gcc_parent_map_6[] = {
    309	{ P_XO, 0 },
    310	{ P_GPLL0_OUT_MAIN, 1 },
    311	{ P_GPLL4_OUT_MAIN, 5 },
    312};
    313
    314static const struct clk_parent_data gcc_parent_data_6[] = {
    315	{ .fw_name = "xo" },
    316	{ .hw = &gpll0_vote.hw },
    317	{ .hw = &gpll4_vote.hw },
    318};
    319
    320static const struct parent_map gcc_parent_map_7_mdp[] = {
    321	{ P_XO, 0 },
    322	{ P_GPLL6_OUT, 3 },
    323	{ P_GPLL0_OUT_MDP, 6 },
    324};
    325
    326static const struct clk_parent_data gcc_parent_data_7_mdp[] = {
    327	{ .fw_name = "xo" },
    328	{ .hw = &gpll6_vote.hw },
    329	{ .hw = &gpll0_vote.hw },
    330};
    331
    332static const struct parent_map gcc_parent_map_7[] = {
    333	{ P_GPLL0_OUT_MAIN, 1 },
    334	{ P_GPLL6_OUT, 3 },
    335};
    336
    337static const struct clk_parent_data gcc_parent_data_7[] = {
    338	{ .hw = &gpll0_vote.hw },
    339	{ .hw = &gpll6_vote.hw },
    340};
    341
    342static const struct parent_map gcc_parent_map_8[] = {
    343	{ P_XO, 0 },
    344	{ P_GPLL0_OUT_MAIN, 1 },
    345};
    346
    347static const struct clk_parent_data gcc_parent_data_4_8[] = {
    348	{ .fw_name = "xo" },
    349	{ .hw = &gpll0_vote.hw },
    350};
    351
    352static const struct parent_map gcc_parent_map_8_a[] = {
    353	{ P_XO_A, 0 },
    354	{ P_GPLL0_OUT_MAIN, 1 },
    355};
    356
    357static const struct clk_parent_data gcc_parent_data_8_a[] = {
    358	{ .fw_name = "xo_a" },
    359	{ .hw = &gpll0_vote.hw },
    360};
    361
    362static const struct parent_map gcc_parent_map_8_gp[] = {
    363	{ P_GPLL0_OUT_MAIN, 1 },
    364};
    365
    366static const struct clk_parent_data gcc_parent_data_8_gp[] = {
    367	{ .hw = &gpll0_vote.hw },
    368};
    369
    370static const struct parent_map gcc_parent_map_9[] = {
    371	{ P_XO, 0 },
    372	{ P_GPLL6_OUT_MAIN, 6 },
    373};
    374
    375static const struct clk_parent_data gcc_parent_data_9[] = {
    376	{ .fw_name = "xo" },
    377	{ .hw = &gpll6_vote.hw },
    378};
    379
    380static const struct parent_map gcc_parent_map_10[] = {
    381	{ P_XO, 0 },
    382};
    383
    384static const struct clk_parent_data gcc_parent_data_10[] = {
    385	{ .fw_name = "xo" },
    386};
    387
    388static const struct parent_map gcc_parent_map_sdcc_ice[] = {
    389	{ P_XO, 0 },
    390	{ P_GPLL0_OUT_M, 3 },
    391};
    392
    393static const struct parent_map gcc_parent_map_cci[] = {
    394	{ P_XO, 0 },
    395	{ P_GPLL0_AUX, 2 },
    396};
    397
    398static const struct parent_map gcc_parent_map_cpp[] = {
    399	{ P_XO, 0 },
    400	{ P_GPLL0_OUT_MAIN, 1 },
    401	{ P_GPLL4_AUX, 3 },
    402};
    403
    404static const struct parent_map gcc_parent_map_mdss_pix0[] = {
    405	{ P_XO, 0 },
    406	{ P_DSI0PLL, 1 },
    407};
    408
    409static const struct clk_parent_data gcc_parent_data_mdss_pix0[] = {
    410	{ .fw_name = "xo" },
    411	{ .fw_name = "dsi0pll" },
    412};
    413
    414static const struct parent_map gcc_parent_map_mdss_pix1[] = {
    415	{ P_XO, 0 },
    416	{ P_DSI0PLL, 3 },
    417	{ P_DSI1PLL, 1 },
    418};
    419
    420static const struct clk_parent_data gcc_parent_data_mdss_pix1[] = {
    421	{ .fw_name = "xo" },
    422	{ .fw_name = "dsi0pll" },
    423	{ .fw_name = "dsi1pll" },
    424};
    425
    426static const struct parent_map gcc_parent_map_mdss_byte0[] = {
    427	{ P_XO, 0 },
    428	{ P_DSI0PLL_BYTE, 1 },
    429};
    430
    431static const struct clk_parent_data gcc_parent_data_mdss_byte0[] = {
    432	{ .fw_name = "xo" },
    433	{ .fw_name = "dsi0pllbyte" },
    434};
    435
    436static const struct parent_map gcc_parent_map_mdss_byte1[] = {
    437	{ P_XO, 0 },
    438	{ P_DSI0PLL_BYTE, 3 },
    439	{ P_DSI1PLL_BYTE, 1 },
    440};
    441
    442static const struct clk_parent_data gcc_parent_data_mdss_byte1[] = {
    443	{ .fw_name = "xo" },
    444	{ .fw_name = "dsi0pllbyte" },
    445	{ .fw_name = "dsi1pllbyte" },
    446};
    447
    448static const struct parent_map gcc_parent_map_gfx3d[] = {
    449	{ P_XO, 0 },
    450	{ P_GPLL0_OUT_MAIN, 1 },
    451	{ P_GPLL4_GFX3D, 5 },
    452	{ P_GPLL6_GFX3D, 3 },
    453};
    454
    455static const struct clk_parent_data gcc_parent_data_gfx3d[] = {
    456	{ .fw_name = "xo" },
    457	{ .hw = &gpll0_vote.hw },
    458	{ .hw = &gpll4_vote.hw },
    459	{ .hw = &gpll6_vote.hw },
    460};
    461
    462static const struct freq_tbl ftbl_aps_0_clk_src[] = {
    463	F(19200000, P_XO, 1, 0, 0),
    464	F(300000000, P_GPLL4_OUT, 4, 0, 0),
    465	F(540000000, P_GPLL6_OUT_MAIN, 2, 0, 0),
    466	{ }
    467};
    468
    469static struct clk_rcg2 aps_0_clk_src = {
    470	.cmd_rcgr = 0x78008,
    471	.hid_width = 5,
    472	.parent_map = gcc_parent_map_5,
    473	.freq_tbl = ftbl_aps_0_clk_src,
    474	.clkr.hw.init = &(struct clk_init_data){
    475		.name = "aps_0_clk_src",
    476		.parent_data = gcc_parent_data_5,
    477		.num_parents = ARRAY_SIZE(gcc_parent_data_5),
    478		.ops = &clk_rcg2_ops,
    479	},
    480};
    481
    482static const struct freq_tbl ftbl_aps_1_clk_src[] = {
    483	F(19200000, P_XO, 1, 0, 0),
    484	F(300000000, P_GPLL4_OUT, 4, 0, 0),
    485	F(540000000, P_GPLL6_OUT_MAIN, 2, 0, 0),
    486	{ }
    487};
    488
    489static struct clk_rcg2 aps_1_clk_src = {
    490	.cmd_rcgr = 0x79008,
    491	.hid_width = 5,
    492	.parent_map = gcc_parent_map_5,
    493	.freq_tbl = ftbl_aps_1_clk_src,
    494	.clkr.hw.init = &(struct clk_init_data){
    495		.name = "aps_1_clk_src",
    496		.parent_data = gcc_parent_data_5,
    497		.num_parents = ARRAY_SIZE(gcc_parent_data_5),
    498		.ops = &clk_rcg2_ops,
    499	},
    500};
    501
    502static const struct freq_tbl ftbl_apss_ahb_clk_src[] = {
    503	F(19200000, P_XO_A, 1, 0, 0),
    504	F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
    505	F(88890000, P_GPLL0_OUT_MAIN, 9, 0, 0),
    506	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
    507	{ }
    508};
    509
    510static struct clk_rcg2 apss_ahb_clk_src = {
    511	.cmd_rcgr = 0x46000,
    512	.hid_width = 5,
    513	.parent_map = gcc_parent_map_8_a,
    514	.freq_tbl = ftbl_apss_ahb_clk_src,
    515	.clkr.hw.init = &(struct clk_init_data){
    516		.name = "apss_ahb_clk_src",
    517		.parent_data = gcc_parent_data_8_a,
    518		.num_parents = ARRAY_SIZE(gcc_parent_data_8_a),
    519		.ops = &clk_rcg2_ops,
    520		/*
    521		 * This clock allows the CPUs to communicate with
    522		 * the rest of the SoC. Without it, the brain will
    523		 * operate without the rest of the body.
    524		 */
    525		.flags = CLK_IS_CRITICAL,
    526	},
    527};
    528
    529static const struct freq_tbl ftbl_blsp_i2c_apps_clk_src[] = {
    530	F(19200000, P_XO, 1, 0, 0),
    531	F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
    532	{ }
    533};
    534
    535static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
    536	.cmd_rcgr = 0x200c,
    537	.hid_width = 5,
    538	.parent_map = gcc_parent_map_8,
    539	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
    540	.clkr.hw.init = &(struct clk_init_data){
    541		.name = "blsp1_qup1_i2c_apps_clk_src",
    542		.parent_data = gcc_parent_data_4_8,
    543		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
    544		.ops = &clk_rcg2_ops,
    545	},
    546};
    547
    548static const struct freq_tbl ftbl_blsp_spi_apps_clk_src[] = {
    549	F(960000, P_XO, 10, 1, 2),
    550	F(4800000, P_XO, 4, 0, 0),
    551	F(9600000, P_XO, 2, 0, 0),
    552	F(16000000, P_GPLL0_OUT_MAIN, 10, 1, 5),
    553	F(19200000, P_XO, 1, 0, 0),
    554	F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2),
    555	F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
    556	{ }
    557};
    558
    559static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
    560	.cmd_rcgr = 0x2024,
    561	.mnd_width = 8,
    562	.hid_width = 5,
    563	.parent_map = gcc_parent_map_8,
    564	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
    565	.clkr.hw.init = &(struct clk_init_data){
    566		.name = "blsp1_qup1_spi_apps_clk_src",
    567		.parent_data = gcc_parent_data_4_8,
    568		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
    569		.ops = &clk_rcg2_ops,
    570	},
    571};
    572
    573static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
    574	.cmd_rcgr = 0x3000,
    575	.hid_width = 5,
    576	.parent_map = gcc_parent_map_8,
    577	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
    578	.clkr.hw.init = &(struct clk_init_data){
    579		.name = "blsp1_qup2_i2c_apps_clk_src",
    580		.parent_data = gcc_parent_data_4_8,
    581		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
    582		.ops = &clk_rcg2_ops,
    583	},
    584};
    585
    586static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
    587	.cmd_rcgr = 0x3014,
    588	.mnd_width = 8,
    589	.hid_width = 5,
    590	.parent_map = gcc_parent_map_8,
    591	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
    592	.clkr.hw.init = &(struct clk_init_data){
    593		.name = "blsp1_qup2_spi_apps_clk_src",
    594		.parent_data = gcc_parent_data_4_8,
    595		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
    596		.ops = &clk_rcg2_ops,
    597	},
    598};
    599
    600static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
    601	.cmd_rcgr = 0x4000,
    602	.hid_width = 5,
    603	.parent_map = gcc_parent_map_8,
    604	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
    605	.clkr.hw.init = &(struct clk_init_data){
    606		.name = "blsp1_qup3_i2c_apps_clk_src",
    607		.parent_data = gcc_parent_data_4_8,
    608		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
    609		.ops = &clk_rcg2_ops,
    610	},
    611};
    612
    613static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
    614	.cmd_rcgr = 0x4024,
    615	.mnd_width = 8,
    616	.hid_width = 5,
    617	.parent_map = gcc_parent_map_8,
    618	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
    619	.clkr.hw.init = &(struct clk_init_data){
    620		.name = "blsp1_qup3_spi_apps_clk_src",
    621		.parent_data = gcc_parent_data_4_8,
    622		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
    623		.ops = &clk_rcg2_ops,
    624	},
    625};
    626
    627static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
    628	.cmd_rcgr = 0x5000,
    629	.hid_width = 5,
    630	.parent_map = gcc_parent_map_8,
    631	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
    632	.clkr.hw.init = &(struct clk_init_data){
    633		.name = "blsp1_qup4_i2c_apps_clk_src",
    634		.parent_data = gcc_parent_data_4_8,
    635		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
    636		.ops = &clk_rcg2_ops,
    637	},
    638};
    639
    640static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
    641	.cmd_rcgr = 0x5024,
    642	.mnd_width = 8,
    643	.hid_width = 5,
    644	.parent_map = gcc_parent_map_8,
    645	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
    646	.clkr.hw.init = &(struct clk_init_data){
    647		.name = "blsp1_qup4_spi_apps_clk_src",
    648		.parent_data = gcc_parent_data_4_8,
    649		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
    650		.ops = &clk_rcg2_ops,
    651	},
    652};
    653
    654static const struct freq_tbl ftbl_blsp_uart_apps_clk_src[] = {
    655	F(3686400, P_GPLL0_OUT_MAIN, 1, 72, 15625),
    656	F(7372800, P_GPLL0_OUT_MAIN, 1, 144, 15625),
    657	F(14745600, P_GPLL0_OUT_MAIN, 1, 288, 15625),
    658	F(16000000, P_GPLL0_OUT_MAIN, 10, 1, 5),
    659	F(19200000, P_XO, 1, 0, 0),
    660	F(24000000, P_GPLL0_OUT_MAIN, 1, 3, 100),
    661	F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2),
    662	F(32000000, P_GPLL0_OUT_MAIN, 1, 1, 25),
    663	F(40000000, P_GPLL0_OUT_MAIN, 1, 1, 20),
    664	F(46400000, P_GPLL0_OUT_MAIN, 1, 29, 500),
    665	F(48000000, P_GPLL0_OUT_MAIN, 1, 3, 50),
    666	F(51200000, P_GPLL0_OUT_MAIN, 1, 8, 125),
    667	F(56000000, P_GPLL0_OUT_MAIN, 1, 7, 100),
    668	F(58982400, P_GPLL0_OUT_MAIN, 1, 1152, 15625),
    669	F(60000000, P_GPLL0_OUT_MAIN, 1, 3, 40),
    670	F(64000000, P_GPLL0_OUT_MAIN, 1, 2, 25),
    671	{ }
    672};
    673
    674static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
    675	.cmd_rcgr = 0x2044,
    676	.mnd_width = 16,
    677	.hid_width = 5,
    678	.parent_map = gcc_parent_map_8,
    679	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
    680	.clkr.hw.init = &(struct clk_init_data){
    681		.name = "blsp1_uart1_apps_clk_src",
    682		.parent_data = gcc_parent_data_4_8,
    683		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
    684		.ops = &clk_rcg2_ops,
    685	},
    686};
    687
    688static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
    689	.cmd_rcgr = 0x3034,
    690	.mnd_width = 16,
    691	.hid_width = 5,
    692	.parent_map = gcc_parent_map_8,
    693	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
    694	.clkr.hw.init = &(struct clk_init_data){
    695		.name = "blsp1_uart2_apps_clk_src",
    696		.parent_data = gcc_parent_data_4_8,
    697		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
    698		.ops = &clk_rcg2_ops,
    699	},
    700};
    701
    702static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
    703	.cmd_rcgr = 0xc00c,
    704	.hid_width = 5,
    705	.parent_map = gcc_parent_map_8,
    706	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
    707	.clkr.hw.init = &(struct clk_init_data){
    708		.name = "blsp2_qup1_i2c_apps_clk_src",
    709		.parent_data = gcc_parent_data_4_8,
    710		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
    711		.ops = &clk_rcg2_ops,
    712	},
    713};
    714
    715static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
    716	.cmd_rcgr = 0xc024,
    717	.mnd_width = 8,
    718	.hid_width = 5,
    719	.parent_map = gcc_parent_map_8,
    720	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
    721	.clkr.hw.init = &(struct clk_init_data){
    722		.name = "blsp2_qup1_spi_apps_clk_src",
    723		.parent_data = gcc_parent_data_4_8,
    724		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
    725		.ops = &clk_rcg2_ops,
    726	},
    727};
    728
    729static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
    730	.cmd_rcgr = 0xd000,
    731	.hid_width = 5,
    732	.parent_map = gcc_parent_map_8,
    733	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
    734	.clkr.hw.init = &(struct clk_init_data){
    735		.name = "blsp2_qup2_i2c_apps_clk_src",
    736		.parent_data = gcc_parent_data_4_8,
    737		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
    738		.ops = &clk_rcg2_ops,
    739	},
    740};
    741
    742static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
    743	.cmd_rcgr = 0xd014,
    744	.mnd_width = 8,
    745	.hid_width = 5,
    746	.parent_map = gcc_parent_map_8,
    747	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
    748	.clkr.hw.init = &(struct clk_init_data){
    749		.name = "blsp2_qup2_spi_apps_clk_src",
    750		.parent_data = gcc_parent_data_4_8,
    751		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
    752		.ops = &clk_rcg2_ops,
    753	},
    754};
    755
    756static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
    757	.cmd_rcgr = 0xf000,
    758	.hid_width = 5,
    759	.parent_map = gcc_parent_map_8,
    760	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
    761	.clkr.hw.init = &(struct clk_init_data){
    762		.name = "blsp2_qup3_i2c_apps_clk_src",
    763		.parent_data = gcc_parent_data_4_8,
    764		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
    765		.ops = &clk_rcg2_ops,
    766	},
    767};
    768
    769static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
    770	.cmd_rcgr = 0xf024,
    771	.mnd_width = 8,
    772	.hid_width = 5,
    773	.parent_map = gcc_parent_map_8,
    774	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
    775	.clkr.hw.init = &(struct clk_init_data){
    776		.name = "blsp2_qup3_spi_apps_clk_src",
    777		.parent_data = gcc_parent_data_4_8,
    778		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
    779		.ops = &clk_rcg2_ops,
    780	},
    781};
    782
    783static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
    784	.cmd_rcgr = 0x18000,
    785	.hid_width = 5,
    786	.parent_map = gcc_parent_map_8,
    787	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
    788	.clkr.hw.init = &(struct clk_init_data){
    789		.name = "blsp2_qup4_i2c_apps_clk_src",
    790		.parent_data = gcc_parent_data_4_8,
    791		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
    792		.ops = &clk_rcg2_ops,
    793	},
    794};
    795
    796static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
    797	.cmd_rcgr = 0x18024,
    798	.mnd_width = 8,
    799	.hid_width = 5,
    800	.parent_map = gcc_parent_map_8,
    801	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
    802	.clkr.hw.init = &(struct clk_init_data){
    803		.name = "blsp2_qup4_spi_apps_clk_src",
    804		.parent_data = gcc_parent_data_4_8,
    805		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
    806		.ops = &clk_rcg2_ops,
    807	},
    808};
    809
    810static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
    811	.cmd_rcgr = 0xc044,
    812	.mnd_width = 16,
    813	.hid_width = 5,
    814	.parent_map = gcc_parent_map_8,
    815	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
    816	.clkr.hw.init = &(struct clk_init_data){
    817		.name = "blsp2_uart1_apps_clk_src",
    818		.parent_data = gcc_parent_data_4_8,
    819		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
    820		.ops = &clk_rcg2_ops,
    821	},
    822};
    823
    824static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
    825	.cmd_rcgr = 0xd034,
    826	.mnd_width = 16,
    827	.hid_width = 5,
    828	.parent_map = gcc_parent_map_8,
    829	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
    830	.clkr.hw.init = &(struct clk_init_data){
    831		.name = "blsp2_uart2_apps_clk_src",
    832		.parent_data = gcc_parent_data_4_8,
    833		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
    834		.ops = &clk_rcg2_ops,
    835	},
    836};
    837
    838static const struct freq_tbl ftbl_cci_clk_src[] = {
    839	F(19200000, P_XO, 1, 0, 0),
    840	F(37500000, P_GPLL0_AUX, 1, 3, 64),
    841	{ }
    842};
    843
    844static struct clk_rcg2 cci_clk_src = {
    845	.cmd_rcgr = 0x51000,
    846	.mnd_width = 8,
    847	.hid_width = 5,
    848	.parent_map = gcc_parent_map_cci,
    849	.freq_tbl = ftbl_cci_clk_src,
    850	.clkr.hw.init = &(struct clk_init_data){
    851		.name = "cci_clk_src",
    852		.parent_data = gcc_parent_data_4_8,
    853		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
    854		.ops = &clk_rcg2_ops,
    855	},
    856};
    857
    858static const struct freq_tbl ftbl_cpp_clk_src[] = {
    859	F(160000000, P_GPLL0_OUT_MAIN, 5, 0, 0),
    860	F(240000000, P_GPLL4_AUX, 5, 0, 0),
    861	F(320000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
    862	F(400000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
    863	F(480000000, P_GPLL4_AUX, 2.5, 0, 0),
    864	{ }
    865};
    866
    867static struct clk_rcg2 cpp_clk_src = {
    868	.cmd_rcgr = 0x58018,
    869	.hid_width = 5,
    870	.parent_map = gcc_parent_map_cpp,
    871	.freq_tbl = ftbl_cpp_clk_src,
    872	.clkr.hw.init = &(struct clk_init_data){
    873		.name = "cpp_clk_src",
    874		.parent_data = gcc_parent_data_6,
    875		.num_parents = ARRAY_SIZE(gcc_parent_data_6),
    876		.ops = &clk_rcg2_ops,
    877	},
    878};
    879
    880static const struct freq_tbl ftbl_csi0_clk_src[] = {
    881	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
    882	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
    883	F(266670000, P_GPLL0_OUT_MAIN, 3, 0, 0),
    884	{ }
    885};
    886
    887static struct clk_rcg2 csi0_clk_src = {
    888	.cmd_rcgr = 0x4e020,
    889	.hid_width = 5,
    890	.parent_map = gcc_parent_map_8,
    891	.freq_tbl = ftbl_csi0_clk_src,
    892	.clkr.hw.init = &(struct clk_init_data){
    893		.name = "csi0_clk_src",
    894		.parent_data = gcc_parent_data_4_8,
    895		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
    896		.ops = &clk_rcg2_ops,
    897	},
    898};
    899
    900static const struct freq_tbl ftbl_csi1_clk_src[] = {
    901	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
    902	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
    903	F(266670000, P_GPLL0_OUT_MAIN, 3, 0, 0),
    904	{ }
    905};
    906
    907static struct clk_rcg2 csi1_clk_src = {
    908	.cmd_rcgr = 0x4f020,
    909	.hid_width = 5,
    910	.parent_map = gcc_parent_map_8,
    911	.freq_tbl = ftbl_csi1_clk_src,
    912	.clkr.hw.init = &(struct clk_init_data){
    913		.name = "csi1_clk_src",
    914		.parent_data = gcc_parent_data_4_8,
    915		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
    916		.ops = &clk_rcg2_ops,
    917	},
    918};
    919
    920static const struct freq_tbl ftbl_csi2_clk_src[] = {
    921	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
    922	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
    923	F(266670000, P_GPLL0_OUT_MAIN, 3, 0, 0),
    924	{ }
    925};
    926
    927static struct clk_rcg2 csi2_clk_src = {
    928	.cmd_rcgr = 0x3c020,
    929	.hid_width = 5,
    930	.parent_map = gcc_parent_map_8,
    931	.freq_tbl = ftbl_csi2_clk_src,
    932	.clkr.hw.init = &(struct clk_init_data){
    933		.name = "csi2_clk_src",
    934		.parent_data = gcc_parent_data_4_8,
    935		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
    936		.ops = &clk_rcg2_ops,
    937	},
    938};
    939
    940static const struct freq_tbl ftbl_camss_gp0_clk_src[] = {
    941	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
    942	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
    943	F(266670000, P_GPLL0_OUT_MAIN, 3, 0, 0),
    944	{ }
    945};
    946
    947static struct clk_rcg2 camss_gp0_clk_src = {
    948	.cmd_rcgr = 0x54000,
    949	.mnd_width = 8,
    950	.hid_width = 5,
    951	.parent_map = gcc_parent_map_8_gp,
    952	.freq_tbl = ftbl_camss_gp0_clk_src,
    953	.clkr.hw.init = &(struct clk_init_data){
    954		.name = "camss_gp0_clk_src",
    955		.parent_data = gcc_parent_data_8_gp,
    956		.num_parents = ARRAY_SIZE(gcc_parent_data_8_gp),
    957		.ops = &clk_rcg2_ops,
    958	},
    959};
    960
    961static const struct freq_tbl ftbl_camss_gp1_clk_src[] = {
    962	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
    963	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
    964	F(266670000, P_GPLL0_OUT_MAIN, 3, 0, 0),
    965	{ }
    966};
    967
    968static struct clk_rcg2 camss_gp1_clk_src = {
    969	.cmd_rcgr = 0x55000,
    970	.mnd_width = 8,
    971	.hid_width = 5,
    972	.parent_map = gcc_parent_map_8_gp,
    973	.freq_tbl = ftbl_camss_gp1_clk_src,
    974	.clkr.hw.init = &(struct clk_init_data){
    975		.name = "camss_gp1_clk_src",
    976		.parent_data = gcc_parent_data_8_gp,
    977		.num_parents = ARRAY_SIZE(gcc_parent_data_8_gp),
    978		.ops = &clk_rcg2_ops,
    979	},
    980};
    981
    982static const struct freq_tbl ftbl_jpeg0_clk_src[] = {
    983	F(133330000, P_GPLL0_OUT_MAIN, 6, 0, 0),
    984	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
    985	F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0),
    986	F(320000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
    987	{ }
    988};
    989
    990static struct clk_rcg2 jpeg0_clk_src = {
    991	.cmd_rcgr = 0x57000,
    992	.hid_width = 5,
    993	.parent_map = gcc_parent_map_6,
    994	.freq_tbl = ftbl_jpeg0_clk_src,
    995	.clkr.hw.init = &(struct clk_init_data){
    996		.name = "jpeg0_clk_src",
    997		.parent_data = gcc_parent_data_6,
    998		.num_parents = ARRAY_SIZE(gcc_parent_data_6),
    999		.ops = &clk_rcg2_ops,
   1000	},
   1001};
   1002
   1003static const struct freq_tbl ftbl_mclk_clk_src[] = {
   1004	F(8000000, P_GPLL0_OUT_MAIN, 1, 1, 100),
   1005	F(24000000, P_GPLL6_OUT, 1, 1, 45),
   1006	F(66670000, P_GPLL0_OUT_MAIN, 12, 0, 0),
   1007	{ }
   1008};
   1009
   1010static struct clk_rcg2 mclk0_clk_src = {
   1011	.cmd_rcgr = 0x52000,
   1012	.mnd_width = 8,
   1013	.hid_width = 5,
   1014	.parent_map = gcc_parent_map_7,
   1015	.freq_tbl = ftbl_mclk_clk_src,
   1016	.clkr.hw.init = &(struct clk_init_data){
   1017		.name = "mclk0_clk_src",
   1018		.parent_data = gcc_parent_data_7,
   1019		.num_parents = ARRAY_SIZE(gcc_parent_data_7),
   1020		.ops = &clk_rcg2_ops,
   1021	},
   1022};
   1023
   1024static struct clk_rcg2 mclk1_clk_src = {
   1025	.cmd_rcgr = 0x53000,
   1026	.mnd_width = 8,
   1027	.hid_width = 5,
   1028	.parent_map = gcc_parent_map_7,
   1029	.freq_tbl = ftbl_mclk_clk_src,
   1030	.clkr.hw.init = &(struct clk_init_data){
   1031		.name = "mclk1_clk_src",
   1032		.parent_data = gcc_parent_data_7,
   1033		.num_parents = ARRAY_SIZE(gcc_parent_data_7),
   1034		.ops = &clk_rcg2_ops,
   1035	},
   1036};
   1037
   1038static struct clk_rcg2 mclk2_clk_src = {
   1039	.cmd_rcgr = 0x5c000,
   1040	.mnd_width = 8,
   1041	.hid_width = 5,
   1042	.parent_map = gcc_parent_map_7,
   1043	.freq_tbl = ftbl_mclk_clk_src,
   1044	.clkr.hw.init = &(struct clk_init_data){
   1045		.name = "mclk2_clk_src",
   1046		.parent_data = gcc_parent_data_7,
   1047		.num_parents = ARRAY_SIZE(gcc_parent_data_7),
   1048		.ops = &clk_rcg2_ops,
   1049	},
   1050};
   1051
   1052static const struct freq_tbl ftbl_csi0phytimer_clk_src[] = {
   1053	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
   1054	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
   1055	F(266670000, P_GPLL0_OUT_MAIN, 3, 0, 0),
   1056	{ }
   1057};
   1058
   1059static struct clk_rcg2 csi0phytimer_clk_src = {
   1060	.cmd_rcgr = 0x4e000,
   1061	.hid_width = 5,
   1062	.parent_map = gcc_parent_map_8,
   1063	.freq_tbl = ftbl_csi0phytimer_clk_src,
   1064	.clkr.hw.init = &(struct clk_init_data){
   1065		.name = "csi0phytimer_clk_src",
   1066		.parent_data = gcc_parent_data_4_8,
   1067		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
   1068		.ops = &clk_rcg2_ops,
   1069	},
   1070};
   1071
   1072static const struct freq_tbl ftbl_csi1phytimer_clk_src[] = {
   1073	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
   1074	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
   1075	F(266670000, P_GPLL0_OUT_MAIN, 3, 0, 0),
   1076	{ }
   1077};
   1078
   1079static struct clk_rcg2 csi1phytimer_clk_src = {
   1080	.cmd_rcgr = 0x4f000,
   1081	.hid_width = 5,
   1082	.parent_map = gcc_parent_map_8,
   1083	.freq_tbl = ftbl_csi1phytimer_clk_src,
   1084	.clkr.hw.init = &(struct clk_init_data){
   1085		.name = "csi1phytimer_clk_src",
   1086		.parent_data = gcc_parent_data_4_8,
   1087		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
   1088		.ops = &clk_rcg2_ops,
   1089	},
   1090};
   1091
   1092static const struct freq_tbl ftbl_camss_top_ahb_clk_src[] = {
   1093	F(40000000, P_GPLL0_OUT_MAIN, 10, 1, 2),
   1094	F(80000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
   1095	{ }
   1096};
   1097
   1098static struct clk_rcg2 camss_top_ahb_clk_src = {
   1099	.cmd_rcgr = 0x5a000,
   1100	.mnd_width = 8,
   1101	.hid_width = 5,
   1102	.parent_map = gcc_parent_map_8,
   1103	.freq_tbl = ftbl_camss_top_ahb_clk_src,
   1104	.clkr.hw.init = &(struct clk_init_data){
   1105		.name = "camss_top_ahb_clk_src",
   1106		.parent_data = gcc_parent_data_4_8,
   1107		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
   1108		.ops = &clk_rcg2_ops,
   1109	},
   1110};
   1111
   1112static const struct freq_tbl ftbl_vfe0_clk_src[] = {
   1113	F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
   1114	F(80000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
   1115	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
   1116	F(133333333, P_GPLL0_OUT_MAIN, 6, 0, 0),
   1117	F(160000000, P_GPLL0_OUT_MAIN, 5, 0, 0),
   1118	F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
   1119	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
   1120	F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0),
   1121	F(300000000, P_GPLL4_OUT, 4, 0, 0),
   1122	F(320000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
   1123	F(466000000, P_GPLL2_AUX, 2, 0, 0),
   1124	{ }
   1125};
   1126
   1127static struct clk_rcg2 vfe0_clk_src = {
   1128	.cmd_rcgr = 0x58000,
   1129	.hid_width = 5,
   1130	.parent_map = gcc_parent_map_2,
   1131	.freq_tbl = ftbl_vfe0_clk_src,
   1132	.clkr.hw.init = &(struct clk_init_data){
   1133		.name = "vfe0_clk_src",
   1134		.parent_data = gcc_parent_data_2,
   1135		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
   1136		.ops = &clk_rcg2_ops,
   1137	},
   1138};
   1139
   1140static const struct freq_tbl ftbl_vfe1_clk_src[] = {
   1141	F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
   1142	F(80000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
   1143	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
   1144	F(133333333, P_GPLL0_OUT_MAIN, 6, 0, 0),
   1145	F(160000000, P_GPLL0_OUT_MAIN, 5, 0, 0),
   1146	F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
   1147	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
   1148	F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0),
   1149	F(300000000, P_GPLL4_OUT, 4, 0, 0),
   1150	F(320000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
   1151	F(466000000, P_GPLL2_AUX, 2, 0, 0),
   1152	{ }
   1153};
   1154
   1155static struct clk_rcg2 vfe1_clk_src = {
   1156	.cmd_rcgr = 0x58054,
   1157	.hid_width = 5,
   1158	.parent_map = gcc_parent_map_2,
   1159	.freq_tbl = ftbl_vfe1_clk_src,
   1160	.clkr.hw.init = &(struct clk_init_data){
   1161		.name = "vfe1_clk_src",
   1162		.parent_data = gcc_parent_data_2,
   1163		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
   1164		.ops = &clk_rcg2_ops,
   1165	},
   1166};
   1167
   1168static const struct freq_tbl ftbl_crypto_clk_src[] = {
   1169	F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
   1170	F(80000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
   1171	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
   1172	F(160000000, P_GPLL0_OUT_MAIN, 5, 0, 0),
   1173	{ }
   1174};
   1175
   1176static struct clk_rcg2 crypto_clk_src = {
   1177	.cmd_rcgr = 0x16004,
   1178	.hid_width = 5,
   1179	.parent_map = gcc_parent_map_8,
   1180	.freq_tbl = ftbl_crypto_clk_src,
   1181	.clkr.hw.init = &(struct clk_init_data){
   1182		.name = "crypto_clk_src",
   1183		.parent_data = gcc_parent_data_4_8,
   1184		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
   1185		.ops = &clk_rcg2_ops,
   1186	},
   1187};
   1188
   1189static const struct freq_tbl ftbl_gp1_clk_src[] = {
   1190	F(19200000, P_XO, 1, 0, 0),
   1191	{ }
   1192};
   1193
   1194static struct clk_rcg2 gp1_clk_src = {
   1195	.cmd_rcgr = 0x8004,
   1196	.mnd_width = 8,
   1197	.hid_width = 5,
   1198	.parent_map = gcc_parent_map_8_gp,
   1199	.freq_tbl = ftbl_gp1_clk_src,
   1200	.clkr.hw.init = &(struct clk_init_data){
   1201		.name = "gp1_clk_src",
   1202		.parent_hws = (const struct clk_hw *[]) {
   1203			&gpll0_vote.hw,
   1204		},
   1205		.num_parents = 1,
   1206		.ops = &clk_rcg2_ops,
   1207	},
   1208};
   1209
   1210static const struct freq_tbl ftbl_gp2_clk_src[] = {
   1211	F(19200000, P_XO, 1, 0, 0),
   1212	{ }
   1213};
   1214
   1215static struct clk_rcg2 gp2_clk_src = {
   1216	.cmd_rcgr = 0x9004,
   1217	.mnd_width = 8,
   1218	.hid_width = 5,
   1219	.parent_map = gcc_parent_map_8_gp,
   1220	.freq_tbl = ftbl_gp2_clk_src,
   1221	.clkr.hw.init = &(struct clk_init_data){
   1222		.name = "gp2_clk_src",
   1223		.parent_hws = (const struct clk_hw *[]) {
   1224			&gpll0_vote.hw,
   1225		},
   1226		.num_parents = 1,
   1227		.ops = &clk_rcg2_ops,
   1228	},
   1229};
   1230
   1231static const struct freq_tbl ftbl_gp3_clk_src[] = {
   1232	F(19200000, P_XO, 1, 0, 0),
   1233	{ }
   1234};
   1235
   1236static struct clk_rcg2 gp3_clk_src = {
   1237	.cmd_rcgr = 0xa004,
   1238	.mnd_width = 8,
   1239	.hid_width = 5,
   1240	.parent_map = gcc_parent_map_8_gp,
   1241	.freq_tbl = ftbl_gp3_clk_src,
   1242	.clkr.hw.init = &(struct clk_init_data){
   1243		.name = "gp3_clk_src",
   1244		.parent_hws = (const struct clk_hw *[]) {
   1245			&gpll0_vote.hw,
   1246		},
   1247		.num_parents = 1,
   1248		.ops = &clk_rcg2_ops,
   1249	},
   1250};
   1251
   1252static struct clk_rcg2 byte0_clk_src = {
   1253	.cmd_rcgr = 0x4d044,
   1254	.mnd_width = 0,
   1255	.hid_width = 5,
   1256	.parent_map = gcc_parent_map_mdss_byte0,
   1257	.clkr.hw.init = &(struct clk_init_data){
   1258		.name = "byte0_clk_src",
   1259		.parent_data = gcc_parent_data_mdss_byte0,
   1260		.num_parents = ARRAY_SIZE(gcc_parent_data_mdss_byte0),
   1261		.ops = &clk_byte2_ops,
   1262		.flags = CLK_SET_RATE_PARENT,
   1263	},
   1264};
   1265
   1266static struct clk_rcg2 byte1_clk_src = {
   1267	.cmd_rcgr = 0x4d0b0,
   1268	.mnd_width = 0,
   1269	.hid_width = 5,
   1270	.parent_map = gcc_parent_map_mdss_byte1,
   1271	.clkr.hw.init = &(struct clk_init_data){
   1272		.name = "byte1_clk_src",
   1273		.parent_data = gcc_parent_data_mdss_byte1,
   1274		.num_parents = ARRAY_SIZE(gcc_parent_data_mdss_byte1),
   1275		.ops = &clk_byte2_ops,
   1276		.flags = CLK_SET_RATE_PARENT,
   1277	},
   1278};
   1279
   1280static const struct freq_tbl ftbl_esc0_1_clk_src[] = {
   1281	F(19200000, P_XO, 1, 0, 0),
   1282	{ }
   1283};
   1284
   1285static struct clk_rcg2 esc0_clk_src = {
   1286	.cmd_rcgr = 0x4d05c,
   1287	.hid_width = 5,
   1288	.freq_tbl = ftbl_esc0_1_clk_src,
   1289	.parent_map = gcc_parent_map_mdss_byte0,
   1290	.clkr.hw.init = &(struct clk_init_data){
   1291		.name = "esc0_clk_src",
   1292		.parent_data = gcc_parent_data_mdss_byte0,
   1293		.num_parents = ARRAY_SIZE(gcc_parent_data_mdss_byte0),
   1294		.ops = &clk_rcg2_ops,
   1295	},
   1296};
   1297
   1298static struct clk_rcg2 esc1_clk_src = {
   1299	.cmd_rcgr = 0x4d0a8,
   1300	.hid_width = 5,
   1301	.freq_tbl = ftbl_esc0_1_clk_src,
   1302	.parent_map = gcc_parent_map_mdss_byte1,
   1303	.clkr.hw.init = &(struct clk_init_data){
   1304		.name = "esc1_clk_src",
   1305		.parent_data = gcc_parent_data_mdss_byte1,
   1306		.num_parents = ARRAY_SIZE(gcc_parent_data_mdss_byte1),
   1307		.ops = &clk_rcg2_ops,
   1308	},
   1309};
   1310
   1311static const struct freq_tbl ftbl_mdp_clk_src[] = {
   1312	F(50000000, P_GPLL0_OUT_MDP, 16, 0, 0),
   1313	F(80000000, P_GPLL0_OUT_MDP, 10, 0, 0),
   1314	F(100000000, P_GPLL0_OUT_MDP, 8, 0, 0),
   1315	F(145454545, P_GPLL0_OUT_MDP, 5.5, 0, 0),
   1316	F(160000000, P_GPLL0_OUT_MDP, 5, 0, 0),
   1317	F(177777778, P_GPLL0_OUT_MDP, 4.5, 0, 0),
   1318	F(200000000, P_GPLL0_OUT_MDP, 4, 0, 0),
   1319	F(270000000, P_GPLL6_OUT, 4, 0, 0),
   1320	F(320000000, P_GPLL0_OUT_MDP, 2.5, 0, 0),
   1321	F(360000000, P_GPLL6_OUT, 3, 0, 0),
   1322	{ }
   1323};
   1324
   1325static struct clk_rcg2 mdp_clk_src = {
   1326	.cmd_rcgr = 0x4d014,
   1327	.hid_width = 5,
   1328	.parent_map = gcc_parent_map_7_mdp,
   1329	.freq_tbl = ftbl_mdp_clk_src,
   1330	.clkr.hw.init = &(struct clk_init_data){
   1331		.name = "mdp_clk_src",
   1332		.parent_data = gcc_parent_data_7_mdp,
   1333		.num_parents = ARRAY_SIZE(gcc_parent_data_7_mdp),
   1334		.ops = &clk_rcg2_ops,
   1335	},
   1336};
   1337
   1338static struct clk_rcg2 pclk0_clk_src = {
   1339	.cmd_rcgr = 0x4d000,
   1340	.mnd_width = 8,
   1341	.hid_width = 5,
   1342	.parent_map = gcc_parent_map_mdss_pix0,
   1343	.clkr.hw.init = &(struct clk_init_data){
   1344		.name = "pclk0_clk_src",
   1345		.parent_data = gcc_parent_data_mdss_pix0,
   1346		.num_parents = ARRAY_SIZE(gcc_parent_data_mdss_pix0),
   1347		.ops = &clk_pixel_ops,
   1348		.flags = CLK_SET_RATE_PARENT,
   1349	},
   1350};
   1351
   1352static struct clk_rcg2 pclk1_clk_src = {
   1353	.cmd_rcgr = 0x4d0b8,
   1354	.mnd_width = 8,
   1355	.hid_width = 5,
   1356	.parent_map = gcc_parent_map_mdss_pix1,
   1357	.clkr.hw.init = &(struct clk_init_data){
   1358		.name = "pclk1_clk_src",
   1359		.parent_data = gcc_parent_data_mdss_pix1,
   1360		.num_parents = ARRAY_SIZE(gcc_parent_data_mdss_pix1),
   1361		.ops = &clk_pixel_ops,
   1362		.flags = CLK_SET_RATE_PARENT,
   1363	},
   1364};
   1365
   1366static const struct freq_tbl ftbl_vsync_clk_src[] = {
   1367	F(19200000, P_XO, 1, 0, 0),
   1368	{ }
   1369};
   1370
   1371static struct clk_rcg2 vsync_clk_src = {
   1372	.cmd_rcgr = 0x4d02c,
   1373	.hid_width = 5,
   1374	.parent_map = gcc_parent_map_10,
   1375	.freq_tbl = ftbl_vsync_clk_src,
   1376	.clkr.hw.init = &(struct clk_init_data){
   1377		.name = "vsync_clk_src",
   1378		.parent_data = gcc_parent_data_10,
   1379		.num_parents = ARRAY_SIZE(gcc_parent_data_10),
   1380		.ops = &clk_rcg2_ops,
   1381	},
   1382};
   1383
   1384static const struct freq_tbl ftbl_gfx3d_clk_src[] = {
   1385	F(19200000, P_XO, 1, 0, 0),
   1386	F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
   1387	F(80000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
   1388	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
   1389	F(133333333, P_GPLL0_OUT_MAIN, 6, 0, 0),
   1390	F(160000000, P_GPLL0_OUT_MAIN, 5, 0, 0),
   1391	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
   1392	F(228571429, P_GPLL0_OUT_MAIN, 3.5, 0, 0),
   1393	F(240000000, P_GPLL6_GFX3D, 4.5, 0, 0),
   1394	F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0),
   1395	F(300000000, P_GPLL4_GFX3D, 4, 0, 0),
   1396	F(360000000, P_GPLL6_GFX3D, 3, 0, 0),
   1397	F(400000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
   1398	F(432000000, P_GPLL6_GFX3D, 2.5, 0, 0),
   1399	F(480000000, P_GPLL4_GFX3D, 2.5, 0, 0),
   1400	F(540000000, P_GPLL6_GFX3D, 2, 0, 0),
   1401	F(600000000, P_GPLL4_GFX3D, 2, 0, 0),
   1402	{ }
   1403};
   1404
   1405static const struct clk_init_data gfx3d_clk_params = {
   1406	.name = "gfx3d_clk_src",
   1407	.parent_data = gcc_parent_data_gfx3d,
   1408	.num_parents = ARRAY_SIZE(gcc_parent_data_gfx3d),
   1409	.ops = &clk_rcg2_ops,
   1410};
   1411
   1412static struct clk_rcg2 gfx3d_clk_src = {
   1413	.cmd_rcgr = 0x59000,
   1414	.hid_width = 5,
   1415	.parent_map = gcc_parent_map_gfx3d,
   1416	.freq_tbl = ftbl_gfx3d_clk_src,
   1417	.clkr.hw.init = &gfx3d_clk_params,
   1418};
   1419
   1420static const struct freq_tbl ftbl_pdm2_clk_src[] = {
   1421	F(64000000, P_GPLL0_OUT_MAIN, 12.5, 0, 0),
   1422	{ }
   1423};
   1424
   1425static struct clk_rcg2 pdm2_clk_src = {
   1426	.cmd_rcgr = 0x44010,
   1427	.hid_width = 5,
   1428	.parent_map = gcc_parent_map_8,
   1429	.freq_tbl = ftbl_pdm2_clk_src,
   1430	.clkr.hw.init = &(struct clk_init_data){
   1431		.name = "pdm2_clk_src",
   1432		.parent_data = gcc_parent_data_4_8,
   1433		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
   1434		.ops = &clk_rcg2_ops,
   1435	},
   1436};
   1437
   1438static const struct freq_tbl ftbl_rbcpr_gfx_clk_src[] = {
   1439	F(19200000, P_XO, 1, 0, 0),
   1440	F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
   1441	{ }
   1442};
   1443
   1444static struct clk_rcg2 rbcpr_gfx_clk_src = {
   1445	.cmd_rcgr = 0x3a00c,
   1446	.hid_width = 5,
   1447	.parent_map = gcc_parent_map_8,
   1448	.freq_tbl = ftbl_rbcpr_gfx_clk_src,
   1449	.clkr.hw.init = &(struct clk_init_data){
   1450		.name = "rbcpr_gfx_clk_src",
   1451		.parent_data = gcc_parent_data_4_8,
   1452		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
   1453		.ops = &clk_rcg2_ops,
   1454	},
   1455};
   1456
   1457static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
   1458	F(144000, P_XO, 16, 3, 25),
   1459	F(400000, P_XO, 12, 1, 4),
   1460	F(20000000, P_GPLL0_OUT_MAIN, 10, 1, 4),
   1461	F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2),
   1462	F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
   1463	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
   1464	F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
   1465	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
   1466	F(342850000, P_GPLL4_OUT, 3.5, 0, 0),
   1467	F(400000000, P_GPLL4_OUT, 3, 0, 0),
   1468	{ }
   1469};
   1470
   1471static const struct freq_tbl ftbl_sdcc1_8976_v1_1_apps_clk_src[] = {
   1472	F(144000, P_XO, 16, 3, 25),
   1473	F(400000, P_XO, 12, 1, 4),
   1474	F(20000000, P_GPLL0_OUT_MAIN, 10, 1, 4),
   1475	F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2),
   1476	F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
   1477	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
   1478	F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
   1479	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
   1480	F(186400000, P_GPLL2_OUT, 5, 0, 0),
   1481	F(372800000, P_GPLL2_OUT, 2.5, 0, 0),
   1482	{ }
   1483};
   1484
   1485static const struct clk_init_data sdcc1_apps_clk_src_8976v1_1_init = {
   1486	.name = "sdcc1_apps_clk_src",
   1487	.parent_data = gcc_parent_data_v1_1,
   1488	.num_parents = ARRAY_SIZE(gcc_parent_data_v1_1),
   1489	.ops = &clk_rcg2_floor_ops,
   1490};
   1491
   1492static struct clk_rcg2 sdcc1_apps_clk_src = {
   1493	.cmd_rcgr = 0x42004,
   1494	.mnd_width = 8,
   1495	.hid_width = 5,
   1496	.parent_map = gcc_parent_map_1,
   1497	.freq_tbl = ftbl_sdcc1_apps_clk_src,
   1498	.clkr.hw.init = &(struct clk_init_data){
   1499		.name = "sdcc1_apps_clk_src",
   1500		.parent_data = gcc_parent_data_1,
   1501		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
   1502		.ops = &clk_rcg2_floor_ops,
   1503	},
   1504};
   1505
   1506static const struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = {
   1507	F(100000000, P_GPLL0_OUT_M, 8, 0, 0),
   1508	F(200000000, P_GPLL0_OUT_M, 4, 0, 0),
   1509	{ }
   1510};
   1511
   1512static struct clk_rcg2 sdcc1_ice_core_clk_src = {
   1513	.cmd_rcgr = 0x5d000,
   1514	.mnd_width = 8,
   1515	.hid_width = 5,
   1516	.parent_map = gcc_parent_map_sdcc_ice,
   1517	.freq_tbl = ftbl_sdcc1_ice_core_clk_src,
   1518	.clkr.hw.init = &(struct clk_init_data){
   1519		.name = "sdcc1_ice_core_clk_src",
   1520		.parent_data = gcc_parent_data_4_8,
   1521		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
   1522		.ops = &clk_rcg2_ops,
   1523	},
   1524};
   1525
   1526static const struct freq_tbl ftbl_sdcc2_4_apps_clk_src[] = {
   1527	F(144000, P_XO, 16, 3, 25),
   1528	F(400000, P_XO, 12, 1, 4),
   1529	F(20000000, P_GPLL0_OUT_MAIN, 10, 1, 4),
   1530	F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2),
   1531	F(40000000, P_GPLL0_OUT_MAIN, 10, 1, 2),
   1532	F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
   1533	F(80000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
   1534	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
   1535	F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
   1536	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
   1537	{ }
   1538};
   1539
   1540static struct clk_rcg2 sdcc2_apps_clk_src = {
   1541	.cmd_rcgr = 0x43004,
   1542	.mnd_width = 8,
   1543	.hid_width = 5,
   1544	.parent_map = gcc_parent_map_4,
   1545	.freq_tbl = ftbl_sdcc2_4_apps_clk_src,
   1546	.clkr.hw.init = &(struct clk_init_data){
   1547		.name = "sdcc2_apps_clk_src",
   1548		.parent_data = gcc_parent_data_4_8,
   1549		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
   1550		.ops = &clk_rcg2_floor_ops,
   1551	},
   1552};
   1553
   1554static struct clk_rcg2 sdcc3_apps_clk_src = {
   1555	.cmd_rcgr = 0x39004,
   1556	.mnd_width = 8,
   1557	.hid_width = 5,
   1558	.parent_map = gcc_parent_map_4,
   1559	.freq_tbl = ftbl_sdcc2_4_apps_clk_src,
   1560	.clkr.hw.init = &(struct clk_init_data){
   1561		.name = "sdcc3_apps_clk_src",
   1562		.parent_data = gcc_parent_data_4_8,
   1563		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
   1564		.ops = &clk_rcg2_ops,
   1565	},
   1566};
   1567
   1568static const struct freq_tbl ftbl_usb_fs_ic_clk_src[] = {
   1569	F(60000000, P_GPLL6_OUT_MAIN, 6, 1, 3),
   1570	{ }
   1571};
   1572
   1573static struct clk_rcg2 usb_fs_ic_clk_src = {
   1574	.cmd_rcgr = 0x3f034,
   1575	.mnd_width = 8,
   1576	.hid_width = 5,
   1577	.parent_map = gcc_parent_map_9,
   1578	.freq_tbl = ftbl_usb_fs_ic_clk_src,
   1579	.clkr.hw.init = &(struct clk_init_data){
   1580		.name = "usb_fs_ic_clk_src",
   1581		.parent_data = gcc_parent_data_9,
   1582		.num_parents = ARRAY_SIZE(gcc_parent_data_9),
   1583		.ops = &clk_rcg2_ops,
   1584	},
   1585};
   1586
   1587static const struct freq_tbl ftbl_usb_fs_system_clk_src[] = {
   1588	F(64000000, P_GPLL0_OUT, 12.5, 0, 0),
   1589	{ }
   1590};
   1591
   1592static struct clk_rcg2 usb_fs_system_clk_src = {
   1593	.cmd_rcgr = 0x3f010,
   1594	.mnd_width = 8,
   1595	.hid_width = 5,
   1596	.parent_map = gcc_parent_map_4_fs,
   1597	.freq_tbl = ftbl_usb_fs_system_clk_src,
   1598	.clkr.hw.init = &(struct clk_init_data){
   1599		.name = "usb_fs_system_clk_src",
   1600		.parent_data = gcc_parent_data_4_8,
   1601		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
   1602		.ops = &clk_rcg2_ops,
   1603	},
   1604};
   1605
   1606static const struct freq_tbl ftbl_usb_hs_system_clk_src[] = {
   1607	F(57140000, P_GPLL0_OUT_MAIN, 14, 0, 0),
   1608	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
   1609	F(133333333, P_GPLL0_OUT_MAIN, 6, 0, 0),
   1610	F(177780000, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
   1611	{ }
   1612};
   1613
   1614static struct clk_rcg2 usb_hs_system_clk_src = {
   1615	.cmd_rcgr = 0x41010,
   1616	.hid_width = 5,
   1617	.parent_map = gcc_parent_map_4,
   1618	.freq_tbl = ftbl_usb_hs_system_clk_src,
   1619	.clkr.hw.init = &(struct clk_init_data){
   1620		.name = "usb_hs_system_clk_src",
   1621		.parent_data = gcc_parent_data_4_8,
   1622		.num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
   1623		.ops = &clk_rcg2_ops,
   1624	},
   1625};
   1626
   1627static const struct freq_tbl ftbl_vcodec0_clk_src[] = {
   1628	F(72727200, P_GPLL0_OUT_MAIN, 11, 0, 0),
   1629	F(80000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
   1630	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
   1631	F(133333333, P_GPLL0_OUT_MAIN, 6, 0, 0),
   1632	F(228570000, P_GPLL0_OUT_MAIN, 3.5, 0, 0),
   1633	F(310667000, P_GPLL2_AUX, 3, 0, 0),
   1634	F(360000000, P_GPLL6_AUX, 3, 0, 0),
   1635	F(400000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
   1636	F(466000000, P_GPLL2_AUX, 2, 0, 0),
   1637	{ }
   1638};
   1639
   1640static struct clk_rcg2 vcodec0_clk_src = {
   1641	.cmd_rcgr = 0x4c000,
   1642	.mnd_width = 8,
   1643	.hid_width = 5,
   1644	.parent_map = gcc_parent_map_3,
   1645	.freq_tbl = ftbl_vcodec0_clk_src,
   1646	.clkr.hw.init = &(struct clk_init_data){
   1647		.name = "vcodec0_clk_src",
   1648		.parent_data = gcc_parent_data_3,
   1649		.num_parents = ARRAY_SIZE(gcc_parent_data_3),
   1650		.ops = &clk_rcg2_ops,
   1651	},
   1652};
   1653
   1654static struct clk_branch gcc_aps_0_clk = {
   1655	.halt_reg = 0x78004,
   1656	.clkr = {
   1657		.enable_reg = 0x78004,
   1658		.enable_mask = BIT(0),
   1659		.hw.init = &(struct clk_init_data) {
   1660			.name = "gcc_aps_0_clk",
   1661			.parent_hws = (const struct clk_hw *[]) {
   1662				&aps_0_clk_src.clkr.hw,
   1663			},
   1664			.num_parents = 1,
   1665			.flags = CLK_SET_RATE_PARENT,
   1666			.ops = &clk_branch2_ops,
   1667		},
   1668	},
   1669};
   1670
   1671static struct clk_branch gcc_aps_1_clk = {
   1672	.halt_reg = 0x79004,
   1673	.clkr = {
   1674		.enable_reg = 0x79004,
   1675		.enable_mask = BIT(0),
   1676		.hw.init = &(struct clk_init_data) {
   1677			.name = "gcc_aps_1_clk",
   1678			.parent_hws = (const struct clk_hw *[]) {
   1679				&aps_1_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_blsp1_qup1_i2c_apps_clk = {
   1689	.halt_reg = 0x2008,
   1690	.halt_check = BRANCH_HALT,
   1691	.clkr = {
   1692		.enable_reg = 0x2008,
   1693		.enable_mask = BIT(0),
   1694		.hw.init = &(struct clk_init_data) {
   1695			.name = "gcc_blsp1_qup1_i2c_apps_clk",
   1696			.parent_hws = (const struct clk_hw *[]) {
   1697				&blsp1_qup1_i2c_apps_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_blsp1_qup1_spi_apps_clk = {
   1707	.halt_reg = 0x2004,
   1708	.halt_check = BRANCH_HALT,
   1709	.clkr = {
   1710		.enable_reg = 0x2004,
   1711		.enable_mask = BIT(0),
   1712		.hw.init = &(struct clk_init_data) {
   1713			.name = "gcc_blsp1_qup1_spi_apps_clk",
   1714			.parent_hws = (const struct clk_hw *[]) {
   1715				&blsp1_qup1_spi_apps_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_blsp1_qup2_i2c_apps_clk = {
   1725	.halt_reg = 0x3010,
   1726	.halt_check = BRANCH_HALT,
   1727	.clkr = {
   1728		.enable_reg = 0x3010,
   1729		.enable_mask = BIT(0),
   1730		.hw.init = &(struct clk_init_data) {
   1731			.name = "gcc_blsp1_qup2_i2c_apps_clk",
   1732			.parent_hws = (const struct clk_hw *[]) {
   1733				&blsp1_qup2_i2c_apps_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_blsp1_qup2_spi_apps_clk = {
   1743	.halt_reg = 0x300c,
   1744	.halt_check = BRANCH_HALT,
   1745	.clkr = {
   1746		.enable_reg = 0x300c,
   1747		.enable_mask = BIT(0),
   1748		.hw.init = &(struct clk_init_data) {
   1749			.name = "gcc_blsp1_qup2_spi_apps_clk",
   1750			.parent_hws = (const struct clk_hw *[]) {
   1751				&blsp1_qup2_spi_apps_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_blsp1_qup3_i2c_apps_clk = {
   1761	.halt_reg = 0x4020,
   1762	.halt_check = BRANCH_HALT,
   1763	.clkr = {
   1764		.enable_reg = 0x4020,
   1765		.enable_mask = BIT(0),
   1766		.hw.init = &(struct clk_init_data) {
   1767			.name = "gcc_blsp1_qup3_i2c_apps_clk",
   1768			.parent_hws = (const struct clk_hw *[]) {
   1769				&blsp1_qup3_i2c_apps_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_blsp1_qup3_spi_apps_clk = {
   1779	.halt_reg = 0x401c,
   1780	.halt_check = BRANCH_HALT,
   1781	.clkr = {
   1782		.enable_reg = 0x401c,
   1783		.enable_mask = BIT(0),
   1784		.hw.init = &(struct clk_init_data) {
   1785			.name = "gcc_blsp1_qup3_spi_apps_clk",
   1786			.parent_hws = (const struct clk_hw *[]) {
   1787				&blsp1_qup3_spi_apps_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_blsp1_qup4_i2c_apps_clk = {
   1797	.halt_reg = 0x5020,
   1798	.halt_check = BRANCH_HALT,
   1799	.clkr = {
   1800		.enable_reg = 0x5020,
   1801		.enable_mask = BIT(0),
   1802		.hw.init = &(struct clk_init_data) {
   1803			.name = "gcc_blsp1_qup4_i2c_apps_clk",
   1804			.parent_hws = (const struct clk_hw *[]) {
   1805				&blsp1_qup4_i2c_apps_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_blsp1_qup4_spi_apps_clk = {
   1815	.halt_reg = 0x501c,
   1816	.halt_check = BRANCH_HALT,
   1817	.clkr = {
   1818		.enable_reg = 0x501c,
   1819		.enable_mask = BIT(0),
   1820		.hw.init = &(struct clk_init_data) {
   1821			.name = "gcc_blsp1_qup4_spi_apps_clk",
   1822			.parent_hws = (const struct clk_hw *[]) {
   1823				&blsp1_qup4_spi_apps_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_blsp1_uart1_apps_clk = {
   1833	.halt_reg = 0x203c,
   1834	.halt_check = BRANCH_HALT,
   1835	.clkr = {
   1836		.enable_reg = 0x203c,
   1837		.enable_mask = BIT(0),
   1838		.hw.init = &(struct clk_init_data) {
   1839			.name = "gcc_blsp1_uart1_apps_clk",
   1840			.parent_hws = (const struct clk_hw *[]) {
   1841				&blsp1_uart1_apps_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_blsp1_uart2_apps_clk = {
   1851	.halt_reg = 0x302c,
   1852	.halt_check = BRANCH_HALT,
   1853	.clkr = {
   1854		.enable_reg = 0x302c,
   1855		.enable_mask = BIT(0),
   1856		.hw.init = &(struct clk_init_data) {
   1857			.name = "gcc_blsp1_uart2_apps_clk",
   1858			.parent_hws = (const struct clk_hw *[]) {
   1859				&blsp1_uart2_apps_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_blsp2_qup1_i2c_apps_clk = {
   1869	.halt_reg = 0xc008,
   1870	.halt_check = BRANCH_HALT,
   1871	.clkr = {
   1872		.enable_reg = 0xc008,
   1873		.enable_mask = BIT(0),
   1874		.hw.init = &(struct clk_init_data) {
   1875			.name = "gcc_blsp2_qup1_i2c_apps_clk",
   1876			.parent_hws = (const struct clk_hw *[]) {
   1877				&blsp2_qup1_i2c_apps_clk_src.clkr.hw,
   1878			},
   1879			.num_parents = 1,
   1880			.flags = CLK_SET_RATE_PARENT,
   1881			.ops = &clk_branch2_ops,
   1882		},
   1883	},
   1884};
   1885
   1886static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
   1887	.halt_reg = 0xc004,
   1888	.halt_check = BRANCH_HALT,
   1889	.clkr = {
   1890		.enable_reg = 0xc004,
   1891		.enable_mask = BIT(0),
   1892		.hw.init = &(struct clk_init_data) {
   1893			.name = "gcc_blsp2_qup1_spi_apps_clk",
   1894			.parent_hws = (const struct clk_hw *[]) {
   1895				&blsp2_qup1_spi_apps_clk_src.clkr.hw,
   1896			},
   1897			.num_parents = 1,
   1898			.flags = CLK_SET_RATE_PARENT,
   1899			.ops = &clk_branch2_ops,
   1900		},
   1901	},
   1902};
   1903
   1904static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
   1905	.halt_reg = 0xd010,
   1906	.halt_check = BRANCH_HALT,
   1907	.clkr = {
   1908		.enable_reg = 0xd010,
   1909		.enable_mask = BIT(0),
   1910		.hw.init = &(struct clk_init_data) {
   1911			.name = "gcc_blsp2_qup2_i2c_apps_clk",
   1912			.parent_hws = (const struct clk_hw *[]) {
   1913				&blsp2_qup2_i2c_apps_clk_src.clkr.hw,
   1914			},
   1915			.num_parents = 1,
   1916			.flags = CLK_SET_RATE_PARENT,
   1917			.ops = &clk_branch2_ops,
   1918		},
   1919	},
   1920};
   1921
   1922static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
   1923	.halt_reg = 0xd00c,
   1924	.halt_check = BRANCH_HALT,
   1925	.clkr = {
   1926		.enable_reg = 0xd00c,
   1927		.enable_mask = BIT(0),
   1928		.hw.init = &(struct clk_init_data) {
   1929			.name = "gcc_blsp2_qup2_spi_apps_clk",
   1930			.parent_hws = (const struct clk_hw *[]) {
   1931				&blsp2_qup2_spi_apps_clk_src.clkr.hw,
   1932			},
   1933			.num_parents = 1,
   1934			.flags = CLK_SET_RATE_PARENT,
   1935			.ops = &clk_branch2_ops,
   1936		},
   1937	},
   1938};
   1939
   1940static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
   1941	.halt_reg = 0xf020,
   1942	.halt_check = BRANCH_HALT,
   1943	.clkr = {
   1944		.enable_reg = 0xf020,
   1945		.enable_mask = BIT(0),
   1946		.hw.init = &(struct clk_init_data) {
   1947			.name = "gcc_blsp2_qup3_i2c_apps_clk",
   1948			.parent_hws = (const struct clk_hw *[]) {
   1949				&blsp2_qup3_i2c_apps_clk_src.clkr.hw,
   1950			},
   1951			.num_parents = 1,
   1952			.flags = CLK_SET_RATE_PARENT,
   1953			.ops = &clk_branch2_ops,
   1954		},
   1955	},
   1956};
   1957
   1958static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
   1959	.halt_reg = 0xf01c,
   1960	.halt_check = BRANCH_HALT,
   1961	.clkr = {
   1962		.enable_reg = 0xf01c,
   1963		.enable_mask = BIT(0),
   1964		.hw.init = &(struct clk_init_data) {
   1965			.name = "gcc_blsp2_qup3_spi_apps_clk",
   1966			.parent_hws = (const struct clk_hw *[]) {
   1967				&blsp2_qup3_spi_apps_clk_src.clkr.hw,
   1968			},
   1969			.num_parents = 1,
   1970			.flags = CLK_SET_RATE_PARENT,
   1971			.ops = &clk_branch2_ops,
   1972		},
   1973	},
   1974};
   1975
   1976static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
   1977	.halt_reg = 0x18020,
   1978	.halt_check = BRANCH_HALT,
   1979	.clkr = {
   1980		.enable_reg = 0x18020,
   1981		.enable_mask = BIT(0),
   1982		.hw.init = &(struct clk_init_data) {
   1983			.name = "gcc_blsp2_qup4_i2c_apps_clk",
   1984			.parent_hws = (const struct clk_hw *[]) {
   1985				&blsp2_qup4_i2c_apps_clk_src.clkr.hw,
   1986			},
   1987			.num_parents = 1,
   1988			.flags = CLK_SET_RATE_PARENT,
   1989			.ops = &clk_branch2_ops,
   1990		},
   1991	},
   1992};
   1993
   1994static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
   1995	.halt_reg = 0x1801c,
   1996	.halt_check = BRANCH_HALT,
   1997	.clkr = {
   1998		.enable_reg = 0x1801c,
   1999		.enable_mask = BIT(0),
   2000		.hw.init = &(struct clk_init_data) {
   2001			.name = "gcc_blsp2_qup4_spi_apps_clk",
   2002			.parent_hws = (const struct clk_hw *[]) {
   2003				&blsp2_qup4_spi_apps_clk_src.clkr.hw,
   2004			},
   2005			.num_parents = 1,
   2006			.flags = CLK_SET_RATE_PARENT,
   2007			.ops = &clk_branch2_ops,
   2008		},
   2009	},
   2010};
   2011
   2012static struct clk_branch gcc_blsp2_uart1_apps_clk = {
   2013	.halt_reg = 0xc03c,
   2014	.halt_check = BRANCH_HALT,
   2015	.clkr = {
   2016		.enable_reg = 0xc03c,
   2017		.enable_mask = BIT(0),
   2018		.hw.init = &(struct clk_init_data) {
   2019			.name = "gcc_blsp2_uart1_apps_clk",
   2020			.parent_hws = (const struct clk_hw *[]) {
   2021				&blsp2_uart1_apps_clk_src.clkr.hw,
   2022			},
   2023			.num_parents = 1,
   2024			.flags = CLK_SET_RATE_PARENT,
   2025			.ops = &clk_branch2_ops,
   2026		},
   2027	},
   2028};
   2029
   2030static struct clk_branch gcc_blsp2_uart2_apps_clk = {
   2031	.halt_reg = 0xd02c,
   2032	.halt_check = BRANCH_HALT,
   2033	.clkr = {
   2034		.enable_reg = 0xd02c,
   2035		.enable_mask = BIT(0),
   2036		.hw.init = &(struct clk_init_data) {
   2037			.name = "gcc_blsp2_uart2_apps_clk",
   2038			.parent_hws = (const struct clk_hw *[]) {
   2039				&blsp2_uart2_apps_clk_src.clkr.hw,
   2040			},
   2041			.num_parents = 1,
   2042			.flags = CLK_SET_RATE_PARENT,
   2043			.ops = &clk_branch2_ops,
   2044		},
   2045	},
   2046};
   2047
   2048static struct clk_branch gcc_camss_cci_ahb_clk = {
   2049	.halt_reg = 0x5101c,
   2050	.clkr = {
   2051		.enable_reg = 0x5101c,
   2052		.enable_mask = BIT(0),
   2053		.hw.init = &(struct clk_init_data) {
   2054			.name = "gcc_camss_cci_ahb_clk",
   2055			.parent_hws = (const struct clk_hw *[]) {
   2056				&camss_top_ahb_clk_src.clkr.hw,
   2057			},
   2058			.num_parents = 1,
   2059			.flags = CLK_SET_RATE_PARENT,
   2060			.ops = &clk_branch2_ops,
   2061		},
   2062	},
   2063};
   2064
   2065static struct clk_branch gcc_camss_cci_clk = {
   2066	.halt_reg = 0x51018,
   2067	.clkr = {
   2068		.enable_reg = 0x51018,
   2069		.enable_mask = BIT(0),
   2070		.hw.init = &(struct clk_init_data) {
   2071			.name = "gcc_camss_cci_clk",
   2072			.parent_hws = (const struct clk_hw *[]) {
   2073				&cci_clk_src.clkr.hw,
   2074			},
   2075			.num_parents = 1,
   2076			.flags = CLK_SET_RATE_PARENT,
   2077			.ops = &clk_branch2_ops,
   2078		},
   2079	},
   2080};
   2081
   2082static struct clk_branch gcc_camss_cpp_ahb_clk = {
   2083	.halt_reg = 0x58040,
   2084	.clkr = {
   2085		.enable_reg = 0x58040,
   2086		.enable_mask = BIT(0),
   2087		.hw.init = &(struct clk_init_data) {
   2088			.name = "gcc_camss_cpp_ahb_clk",
   2089			.parent_hws = (const struct clk_hw *[]) {
   2090				&camss_top_ahb_clk_src.clkr.hw,
   2091			},
   2092			.num_parents = 1,
   2093			.flags = CLK_SET_RATE_PARENT,
   2094			.ops = &clk_branch2_ops,
   2095		},
   2096	},
   2097};
   2098
   2099static struct clk_branch gcc_camss_cpp_axi_clk = {
   2100	.halt_reg = 0x58064,
   2101	.clkr = {
   2102		.enable_reg = 0x58064,
   2103		.enable_mask = BIT(0),
   2104		.hw.init = &(struct clk_init_data) {
   2105			.name = "gcc_camss_cpp_axi_clk",
   2106			.ops = &clk_branch2_ops,
   2107		},
   2108	},
   2109};
   2110
   2111static struct clk_branch gcc_camss_cpp_clk = {
   2112	.halt_reg = 0x5803c,
   2113	.clkr = {
   2114		.enable_reg = 0x5803c,
   2115		.enable_mask = BIT(0),
   2116		.hw.init = &(struct clk_init_data) {
   2117			.name = "gcc_camss_cpp_clk",
   2118			.parent_hws = (const struct clk_hw *[]) {
   2119				&cpp_clk_src.clkr.hw,
   2120			},
   2121			.num_parents = 1,
   2122			.flags = CLK_SET_RATE_PARENT,
   2123			.ops = &clk_branch2_ops,
   2124		},
   2125	},
   2126};
   2127
   2128static struct clk_branch gcc_camss_csi0_ahb_clk = {
   2129	.halt_reg = 0x4e040,
   2130	.clkr = {
   2131		.enable_reg = 0x4e040,
   2132		.enable_mask = BIT(0),
   2133		.hw.init = &(struct clk_init_data) {
   2134			.name = "gcc_camss_csi0_ahb_clk",
   2135			.parent_hws = (const struct clk_hw *[]) {
   2136				&camss_top_ahb_clk_src.clkr.hw,
   2137			},
   2138			.num_parents = 1,
   2139			.flags = CLK_SET_RATE_PARENT,
   2140			.ops = &clk_branch2_ops,
   2141		},
   2142	},
   2143};
   2144
   2145static struct clk_branch gcc_camss_csi0_clk = {
   2146	.halt_reg = 0x4e03c,
   2147	.clkr = {
   2148		.enable_reg = 0x4e03c,
   2149		.enable_mask = BIT(0),
   2150		.hw.init = &(struct clk_init_data) {
   2151			.name = "gcc_camss_csi0_clk",
   2152			.parent_hws = (const struct clk_hw *[]) {
   2153				&csi0_clk_src.clkr.hw,
   2154			},
   2155			.num_parents = 1,
   2156			.flags = CLK_SET_RATE_PARENT,
   2157			.ops = &clk_branch2_ops,
   2158		},
   2159	},
   2160};
   2161
   2162static struct clk_branch gcc_camss_csi0phy_clk = {
   2163	.halt_reg = 0x4e048,
   2164	.clkr = {
   2165		.enable_reg = 0x4e048,
   2166		.enable_mask = BIT(0),
   2167		.hw.init = &(struct clk_init_data) {
   2168			.name = "gcc_camss_csi0phy_clk",
   2169			.parent_hws = (const struct clk_hw *[]) {
   2170				&csi0_clk_src.clkr.hw,
   2171			},
   2172			.num_parents = 1,
   2173			.flags = CLK_SET_RATE_PARENT,
   2174			.ops = &clk_branch2_ops,
   2175		},
   2176	},
   2177};
   2178
   2179static struct clk_branch gcc_camss_csi0pix_clk = {
   2180	.halt_reg = 0x4e058,
   2181	.clkr = {
   2182		.enable_reg = 0x4e058,
   2183		.enable_mask = BIT(0),
   2184		.hw.init = &(struct clk_init_data) {
   2185			.name = "gcc_camss_csi0pix_clk",
   2186			.parent_hws = (const struct clk_hw *[]) {
   2187				&csi0_clk_src.clkr.hw,
   2188			},
   2189			.num_parents = 1,
   2190			.flags = CLK_SET_RATE_PARENT,
   2191			.ops = &clk_branch2_ops,
   2192		},
   2193	},
   2194};
   2195
   2196static struct clk_branch gcc_camss_csi0rdi_clk = {
   2197	.halt_reg = 0x4e050,
   2198	.clkr = {
   2199		.enable_reg = 0x4e050,
   2200		.enable_mask = BIT(0),
   2201		.hw.init = &(struct clk_init_data) {
   2202			.name = "gcc_camss_csi0rdi_clk",
   2203			.parent_hws = (const struct clk_hw *[]) {
   2204				&csi0_clk_src.clkr.hw,
   2205			},
   2206			.num_parents = 1,
   2207			.flags = CLK_SET_RATE_PARENT,
   2208			.ops = &clk_branch2_ops,
   2209		},
   2210	},
   2211};
   2212
   2213static struct clk_branch gcc_camss_csi1_ahb_clk = {
   2214	.halt_reg = 0x4f040,
   2215	.clkr = {
   2216		.enable_reg = 0x4f040,
   2217		.enable_mask = BIT(0),
   2218		.hw.init = &(struct clk_init_data) {
   2219			.name = "gcc_camss_csi1_ahb_clk",
   2220			.parent_hws = (const struct clk_hw *[]) {
   2221				&camss_top_ahb_clk_src.clkr.hw,
   2222			},
   2223			.num_parents = 1,
   2224			.flags = CLK_SET_RATE_PARENT,
   2225			.ops = &clk_branch2_ops,
   2226		},
   2227	},
   2228};
   2229
   2230static struct clk_branch gcc_camss_csi1_clk = {
   2231	.halt_reg = 0x4f03c,
   2232	.clkr = {
   2233		.enable_reg = 0x4f03c,
   2234		.enable_mask = BIT(0),
   2235		.hw.init = &(struct clk_init_data) {
   2236			.name = "gcc_camss_csi1_clk",
   2237			.parent_hws = (const struct clk_hw *[]) {
   2238				&csi1_clk_src.clkr.hw,
   2239			},
   2240			.num_parents = 1,
   2241			.flags = CLK_SET_RATE_PARENT,
   2242			.ops = &clk_branch2_ops,
   2243		},
   2244	},
   2245};
   2246
   2247static struct clk_branch gcc_camss_csi1phy_clk = {
   2248	.halt_reg = 0x4f048,
   2249	.clkr = {
   2250		.enable_reg = 0x4f048,
   2251		.enable_mask = BIT(0),
   2252		.hw.init = &(struct clk_init_data) {
   2253			.name = "gcc_camss_csi1phy_clk",
   2254			.parent_hws = (const struct clk_hw *[]) {
   2255				&csi1_clk_src.clkr.hw,
   2256			},
   2257			.num_parents = 1,
   2258			.flags = CLK_SET_RATE_PARENT,
   2259			.ops = &clk_branch2_ops,
   2260		},
   2261	},
   2262};
   2263
   2264static struct clk_branch gcc_camss_csi1pix_clk = {
   2265	.halt_reg = 0x4f058,
   2266	.clkr = {
   2267		.enable_reg = 0x4f058,
   2268		.enable_mask = BIT(0),
   2269		.hw.init = &(struct clk_init_data) {
   2270			.name = "gcc_camss_csi1pix_clk",
   2271			.parent_hws = (const struct clk_hw *[]) {
   2272				&csi1_clk_src.clkr.hw,
   2273			},
   2274			.num_parents = 1,
   2275			.flags = CLK_SET_RATE_PARENT,
   2276			.ops = &clk_branch2_ops,
   2277		},
   2278	},
   2279};
   2280
   2281static struct clk_branch gcc_camss_csi1rdi_clk = {
   2282	.halt_reg = 0x4f050,
   2283	.clkr = {
   2284		.enable_reg = 0x4f050,
   2285		.enable_mask = BIT(0),
   2286		.hw.init = &(struct clk_init_data) {
   2287			.name = "gcc_camss_csi1rdi_clk",
   2288			.parent_hws = (const struct clk_hw *[]) {
   2289				&csi1_clk_src.clkr.hw,
   2290			},
   2291			.num_parents = 1,
   2292			.flags = CLK_SET_RATE_PARENT,
   2293			.ops = &clk_branch2_ops,
   2294		},
   2295	},
   2296};
   2297
   2298static struct clk_branch gcc_camss_csi2_ahb_clk = {
   2299	.halt_reg = 0x3c040,
   2300	.clkr = {
   2301		.enable_reg = 0x3c040,
   2302		.enable_mask = BIT(0),
   2303		.hw.init = &(struct clk_init_data) {
   2304			.name = "gcc_camss_csi2_ahb_clk",
   2305			.parent_hws = (const struct clk_hw *[]) {
   2306				&camss_top_ahb_clk_src.clkr.hw,
   2307			},
   2308			.num_parents = 1,
   2309			.flags = CLK_SET_RATE_PARENT,
   2310			.ops = &clk_branch2_ops,
   2311		},
   2312	},
   2313};
   2314
   2315static struct clk_branch gcc_camss_csi2_clk = {
   2316	.halt_reg = 0x3c03c,
   2317	.clkr = {
   2318		.enable_reg = 0x3c03c,
   2319		.enable_mask = BIT(0),
   2320		.hw.init = &(struct clk_init_data) {
   2321			.name = "gcc_camss_csi2_clk",
   2322			.parent_hws = (const struct clk_hw *[]) {
   2323				&csi2_clk_src.clkr.hw,
   2324			},
   2325			.num_parents = 1,
   2326			.flags = CLK_SET_RATE_PARENT,
   2327			.ops = &clk_branch2_ops,
   2328		},
   2329	},
   2330};
   2331
   2332static struct clk_branch gcc_camss_csi2phy_clk = {
   2333	.halt_reg = 0x3c048,
   2334	.clkr = {
   2335		.enable_reg = 0x3c048,
   2336		.enable_mask = BIT(0),
   2337		.hw.init = &(struct clk_init_data) {
   2338			.name = "gcc_camss_csi2phy_clk",
   2339			.parent_hws = (const struct clk_hw *[]) {
   2340				&csi2_clk_src.clkr.hw,
   2341			},
   2342			.num_parents = 1,
   2343			.flags = CLK_SET_RATE_PARENT,
   2344			.ops = &clk_branch2_ops,
   2345		},
   2346	},
   2347};
   2348
   2349static struct clk_branch gcc_camss_csi2pix_clk = {
   2350	.halt_reg = 0x3c058,
   2351	.clkr = {
   2352		.enable_reg = 0x3c058,
   2353		.enable_mask = BIT(0),
   2354		.hw.init = &(struct clk_init_data) {
   2355			.name = "gcc_camss_csi2pix_clk",
   2356			.parent_hws = (const struct clk_hw *[]) {
   2357				&csi2_clk_src.clkr.hw,
   2358			},
   2359			.num_parents = 1,
   2360			.flags = CLK_SET_RATE_PARENT,
   2361			.ops = &clk_branch2_ops,
   2362		},
   2363	},
   2364};
   2365
   2366static struct clk_branch gcc_camss_csi2rdi_clk = {
   2367	.halt_reg = 0x3c050,
   2368	.clkr = {
   2369		.enable_reg = 0x3c050,
   2370		.enable_mask = BIT(0),
   2371		.hw.init = &(struct clk_init_data) {
   2372			.name = "gcc_camss_csi2rdi_clk",
   2373			.parent_hws = (const struct clk_hw *[]) {
   2374				&csi2_clk_src.clkr.hw,
   2375			},
   2376			.num_parents = 1,
   2377			.flags = CLK_SET_RATE_PARENT,
   2378			.ops = &clk_branch2_ops,
   2379		},
   2380	},
   2381};
   2382
   2383static struct clk_branch gcc_camss_csi_vfe0_clk = {
   2384	.halt_reg = 0x58050,
   2385	.clkr = {
   2386		.enable_reg = 0x58050,
   2387		.enable_mask = BIT(0),
   2388		.hw.init = &(struct clk_init_data) {
   2389			.name = "gcc_camss_csi_vfe0_clk",
   2390			.parent_hws = (const struct clk_hw *[]) {
   2391				&vfe0_clk_src.clkr.hw,
   2392			},
   2393			.num_parents = 1,
   2394			.flags = CLK_SET_RATE_PARENT,
   2395			.ops = &clk_branch2_ops,
   2396		},
   2397	},
   2398};
   2399
   2400static struct clk_branch gcc_camss_csi_vfe1_clk = {
   2401	.halt_reg = 0x58074,
   2402	.clkr = {
   2403		.enable_reg = 0x58074,
   2404		.enable_mask = BIT(0),
   2405		.hw.init = &(struct clk_init_data) {
   2406			.name = "gcc_camss_csi_vfe1_clk",
   2407			.parent_hws = (const struct clk_hw *[]) {
   2408				&vfe1_clk_src.clkr.hw,
   2409			},
   2410			.num_parents = 1,
   2411			.flags = CLK_SET_RATE_PARENT,
   2412			.ops = &clk_branch2_ops,
   2413		},
   2414	},
   2415};
   2416
   2417static struct clk_branch gcc_camss_gp0_clk = {
   2418	.halt_reg = 0x54018,
   2419	.clkr = {
   2420		.enable_reg = 0x54018,
   2421		.enable_mask = BIT(0),
   2422		.hw.init = &(struct clk_init_data) {
   2423			.name = "gcc_camss_gp0_clk",
   2424			.parent_hws = (const struct clk_hw *[]) {
   2425				&camss_gp0_clk_src.clkr.hw,
   2426			},
   2427			.num_parents = 1,
   2428			.flags = CLK_SET_RATE_PARENT,
   2429			.ops = &clk_branch2_ops,
   2430		},
   2431	},
   2432};
   2433
   2434static struct clk_branch gcc_camss_gp1_clk = {
   2435	.halt_reg = 0x55018,
   2436	.clkr = {
   2437		.enable_reg = 0x55018,
   2438		.enable_mask = BIT(0),
   2439		.hw.init = &(struct clk_init_data) {
   2440			.name = "gcc_camss_gp1_clk",
   2441			.parent_hws = (const struct clk_hw *[]) {
   2442				&camss_gp1_clk_src.clkr.hw,
   2443			},
   2444			.num_parents = 1,
   2445			.flags = CLK_SET_RATE_PARENT,
   2446			.ops = &clk_branch2_ops,
   2447		},
   2448	},
   2449};
   2450
   2451static struct clk_branch gcc_camss_ispif_ahb_clk = {
   2452	.halt_reg = 0x50004,
   2453	.clkr = {
   2454		.enable_reg = 0x50004,
   2455		.enable_mask = BIT(0),
   2456		.hw.init = &(struct clk_init_data) {
   2457			.name = "gcc_camss_ispif_ahb_clk",
   2458			.parent_hws = (const struct clk_hw *[]) {
   2459				&camss_top_ahb_clk_src.clkr.hw,
   2460			},
   2461			.num_parents = 1,
   2462			.flags = CLK_SET_RATE_PARENT,
   2463			.ops = &clk_branch2_ops,
   2464		},
   2465	},
   2466};
   2467
   2468static struct clk_branch gcc_camss_jpeg0_clk = {
   2469	.halt_reg = 0x57020,
   2470	.halt_check = BRANCH_HALT,
   2471	.clkr = {
   2472		.enable_reg = 0x57020,
   2473		.enable_mask = BIT(0),
   2474		.hw.init = &(struct clk_init_data) {
   2475			.name = "gcc_camss_jpeg0_clk",
   2476			.parent_hws = (const struct clk_hw *[]) {
   2477				&jpeg0_clk_src.clkr.hw,
   2478			},
   2479			.num_parents = 1,
   2480			.flags = CLK_SET_RATE_PARENT,
   2481			.ops = &clk_branch2_ops,
   2482		},
   2483	},
   2484};
   2485
   2486static struct clk_branch gcc_camss_jpeg_ahb_clk = {
   2487	.halt_reg = 0x57024,
   2488	.clkr = {
   2489		.enable_reg = 0x57024,
   2490		.enable_mask = BIT(0),
   2491		.hw.init = &(struct clk_init_data) {
   2492			.name = "gcc_camss_jpeg_ahb_clk",
   2493			.parent_hws = (const struct clk_hw *[]) {
   2494				&camss_top_ahb_clk_src.clkr.hw,
   2495			},
   2496			.num_parents = 1,
   2497			.flags = CLK_SET_RATE_PARENT,
   2498			.ops = &clk_branch2_ops,
   2499		},
   2500	},
   2501};
   2502
   2503static struct clk_branch gcc_camss_jpeg_axi_clk = {
   2504	.halt_reg = 0x57028,
   2505	.clkr = {
   2506		.enable_reg = 0x57028,
   2507		.enable_mask = BIT(0),
   2508		.hw.init = &(struct clk_init_data) {
   2509			.name = "gcc_camss_jpeg_axi_clk",
   2510			.ops = &clk_branch2_ops,
   2511		},
   2512	},
   2513};
   2514
   2515static struct clk_branch gcc_camss_mclk0_clk = {
   2516	.halt_reg = 0x52018,
   2517	.clkr = {
   2518		.enable_reg = 0x52018,
   2519		.enable_mask = BIT(0),
   2520		.hw.init = &(struct clk_init_data) {
   2521			.name = "gcc_camss_mclk0_clk",
   2522			.parent_hws = (const struct clk_hw *[]) {
   2523				&mclk0_clk_src.clkr.hw,
   2524			},
   2525			.num_parents = 1,
   2526			.flags = CLK_SET_RATE_PARENT,
   2527			.ops = &clk_branch2_ops,
   2528		},
   2529	},
   2530};
   2531
   2532static struct clk_branch gcc_camss_mclk1_clk = {
   2533	.halt_reg = 0x53018,
   2534	.clkr = {
   2535		.enable_reg = 0x53018,
   2536		.enable_mask = BIT(0),
   2537		.hw.init = &(struct clk_init_data) {
   2538			.name = "gcc_camss_mclk1_clk",
   2539			.parent_hws = (const struct clk_hw *[]) {
   2540				&mclk1_clk_src.clkr.hw,
   2541			},
   2542			.num_parents = 1,
   2543			.flags = CLK_SET_RATE_PARENT,
   2544			.ops = &clk_branch2_ops,
   2545		},
   2546	},
   2547};
   2548
   2549static struct clk_branch gcc_camss_mclk2_clk = {
   2550	.halt_reg = 0x5c018,
   2551	.clkr = {
   2552		.enable_reg = 0x5c018,
   2553		.enable_mask = BIT(0),
   2554		.hw.init = &(struct clk_init_data) {
   2555			.name = "gcc_camss_mclk2_clk",
   2556			.parent_hws = (const struct clk_hw *[]) {
   2557				&mclk2_clk_src.clkr.hw,
   2558			},
   2559			.num_parents = 1,
   2560			.ops = &clk_branch2_ops,
   2561		},
   2562	},
   2563};
   2564
   2565static struct clk_branch gcc_camss_micro_ahb_clk = {
   2566	.halt_reg = 0x5600c,
   2567	.clkr = {
   2568		.enable_reg = 0x5600c,
   2569		.enable_mask = BIT(0),
   2570		.hw.init = &(struct clk_init_data) {
   2571			.name = "gcc_camss_micro_ahb_clk",
   2572			.parent_hws = (const struct clk_hw *[]) {
   2573				&camss_top_ahb_clk_src.clkr.hw,
   2574			},
   2575			.num_parents = 1,
   2576			.flags = CLK_SET_RATE_PARENT,
   2577			.ops = &clk_branch2_ops,
   2578		},
   2579	},
   2580};
   2581
   2582static struct clk_branch gcc_camss_csi0phytimer_clk = {
   2583	.halt_reg = 0x4e01c,
   2584	.clkr = {
   2585		.enable_reg = 0x4e01c,
   2586		.enable_mask = BIT(0),
   2587		.hw.init = &(struct clk_init_data) {
   2588			.name = "gcc_camss_csi0phytimer_clk",
   2589			.parent_hws = (const struct clk_hw *[]) {
   2590				&csi0phytimer_clk_src.clkr.hw,
   2591			},
   2592			.num_parents = 1,
   2593			.flags = CLK_SET_RATE_PARENT,
   2594			.ops = &clk_branch2_ops,
   2595		},
   2596	},
   2597};
   2598
   2599static struct clk_branch gcc_camss_csi1phytimer_clk = {
   2600	.halt_reg = 0x4f01c,
   2601	.clkr = {
   2602		.enable_reg = 0x4f01c,
   2603		.enable_mask = BIT(0),
   2604		.hw.init = &(struct clk_init_data) {
   2605			.name = "gcc_camss_csi1phytimer_clk",
   2606			.parent_hws = (const struct clk_hw *[]) {
   2607				&csi1phytimer_clk_src.clkr.hw,
   2608			},
   2609			.num_parents = 1,
   2610			.flags = CLK_SET_RATE_PARENT,
   2611			.ops = &clk_branch2_ops,
   2612		},
   2613	},
   2614};
   2615
   2616static struct clk_branch gcc_camss_ahb_clk = {
   2617	.halt_reg = 0x56004,
   2618	.clkr = {
   2619		.enable_reg = 0x56004,
   2620		.enable_mask = BIT(0),
   2621		.hw.init = &(struct clk_init_data) {
   2622			.name = "gcc_camss_ahb_clk",
   2623			.ops = &clk_branch2_ops,
   2624		},
   2625	},
   2626};
   2627
   2628static struct clk_branch gcc_camss_top_ahb_clk = {
   2629	.halt_reg = 0x5a014,
   2630	.clkr = {
   2631		.enable_reg = 0x5a014,
   2632		.enable_mask = BIT(0),
   2633		.hw.init = &(struct clk_init_data) {
   2634			.name = "gcc_camss_top_ahb_clk",
   2635			.parent_hws = (const struct clk_hw *[]) {
   2636				&camss_top_ahb_clk_src.clkr.hw,
   2637			},
   2638			.num_parents = 1,
   2639			.flags = CLK_SET_RATE_PARENT,
   2640			.ops = &clk_branch2_ops,
   2641		},
   2642	},
   2643};
   2644
   2645static struct clk_branch gcc_camss_vfe0_clk = {
   2646	.halt_reg = 0x58038,
   2647	.clkr = {
   2648		.enable_reg = 0x58038,
   2649		.enable_mask = BIT(0),
   2650		.hw.init = &(struct clk_init_data) {
   2651			.name = "gcc_camss_vfe0_clk",
   2652			.parent_hws = (const struct clk_hw *[]) {
   2653				&vfe0_clk_src.clkr.hw,
   2654			},
   2655			.num_parents = 1,
   2656			.flags = CLK_SET_RATE_PARENT,
   2657			.ops = &clk_branch2_ops,
   2658		},
   2659	},
   2660};
   2661
   2662static struct clk_branch gcc_camss_vfe_ahb_clk = {
   2663	.halt_reg = 0x58044,
   2664	.clkr = {
   2665		.enable_reg = 0x58044,
   2666		.enable_mask = BIT(0),
   2667		.hw.init = &(struct clk_init_data) {
   2668			.name = "gcc_camss_vfe_ahb_clk",
   2669			.parent_hws = (const struct clk_hw *[]) {
   2670				&camss_top_ahb_clk_src.clkr.hw,
   2671			},
   2672			.num_parents = 1,
   2673			.flags = CLK_SET_RATE_PARENT,
   2674			.ops = &clk_branch2_ops,
   2675		},
   2676	},
   2677};
   2678
   2679static struct clk_branch gcc_camss_vfe_axi_clk = {
   2680	.halt_reg = 0x58048,
   2681	.clkr = {
   2682		.enable_reg = 0x58048,
   2683		.enable_mask = BIT(0),
   2684		.hw.init = &(struct clk_init_data) {
   2685			.name = "gcc_camss_vfe_axi_clk",
   2686			.ops = &clk_branch2_ops,
   2687		},
   2688	},
   2689};
   2690
   2691static struct clk_branch gcc_camss_vfe1_ahb_clk = {
   2692	.halt_reg = 0x58060,
   2693	.clkr = {
   2694		.enable_reg = 0x58060,
   2695		.enable_mask = BIT(0),
   2696		.hw.init = &(struct clk_init_data) {
   2697			.name = "gcc_camss_vfe1_ahb_clk",
   2698			.parent_hws = (const struct clk_hw *[]) {
   2699				&camss_top_ahb_clk_src.clkr.hw,
   2700			},
   2701			.num_parents = 1,
   2702			.flags = CLK_SET_RATE_PARENT,
   2703			.ops = &clk_branch2_ops,
   2704		},
   2705	},
   2706};
   2707
   2708static struct clk_branch gcc_camss_vfe1_axi_clk = {
   2709	.halt_reg = 0x58068,
   2710	.clkr = {
   2711		.enable_reg = 0x58068,
   2712		.enable_mask = BIT(0),
   2713		.hw.init = &(struct clk_init_data) {
   2714			.name = "gcc_camss_vfe1_axi_clk",
   2715			.ops = &clk_branch2_ops,
   2716		},
   2717	},
   2718};
   2719
   2720static struct clk_branch gcc_camss_vfe1_clk = {
   2721	.halt_reg = 0x5805c,
   2722	.clkr = {
   2723		.enable_reg = 0x5805c,
   2724		.enable_mask = BIT(0),
   2725		.hw.init = &(struct clk_init_data) {
   2726			.name = "gcc_camss_vfe1_clk",
   2727			.parent_hws = (const struct clk_hw *[]) {
   2728				&vfe1_clk_src.clkr.hw,
   2729			},
   2730			.num_parents = 1,
   2731			.flags = CLK_SET_RATE_PARENT,
   2732			.ops = &clk_branch2_ops,
   2733		},
   2734	},
   2735};
   2736
   2737static struct clk_branch gcc_dcc_clk = {
   2738	.halt_reg = 0x77004,
   2739	.clkr = {
   2740		.enable_reg = 0x77004,
   2741		.enable_mask = BIT(0),
   2742		.hw.init = &(struct clk_init_data) {
   2743			.name = "gcc_dcc_clk",
   2744			.ops = &clk_branch2_ops,
   2745		},
   2746	},
   2747};
   2748
   2749static struct clk_branch gcc_oxili_gmem_clk = {
   2750	.halt_reg = 0x59024,
   2751	.clkr = {
   2752		.enable_reg = 0x59024,
   2753		.enable_mask = BIT(0),
   2754		.hw.init = &(struct clk_init_data) {
   2755			.name = "gcc_oxili_gmem_clk",
   2756			.parent_hws = (const struct clk_hw *[]) {
   2757				&gfx3d_clk_src.clkr.hw,
   2758			},
   2759			.num_parents = 1,
   2760			.flags = CLK_SET_RATE_PARENT,
   2761			.ops = &clk_branch2_ops,
   2762		},
   2763	},
   2764};
   2765
   2766static struct clk_branch gcc_gp1_clk = {
   2767	.halt_reg = 0x8000,
   2768	.halt_check = BRANCH_HALT,
   2769	.clkr = {
   2770		.enable_reg = 0x8000,
   2771		.enable_mask = BIT(0),
   2772		.hw.init = &(struct clk_init_data) {
   2773			.name = "gcc_gp1_clk",
   2774			.parent_hws = (const struct clk_hw *[]) {
   2775				&gp1_clk_src.clkr.hw,
   2776			},
   2777			.num_parents = 1,
   2778			.flags = CLK_SET_RATE_PARENT,
   2779			.ops = &clk_branch2_ops,
   2780		},
   2781	},
   2782};
   2783
   2784static struct clk_branch gcc_gp2_clk = {
   2785	.halt_reg = 0x9000,
   2786	.halt_check = BRANCH_HALT,
   2787	.clkr = {
   2788		.enable_reg = 0x9000,
   2789		.enable_mask = BIT(0),
   2790		.hw.init = &(struct clk_init_data) {
   2791			.name = "gcc_gp2_clk",
   2792			.parent_hws = (const struct clk_hw *[]) {
   2793				&gp2_clk_src.clkr.hw,
   2794			},
   2795			.num_parents = 1,
   2796			.flags = CLK_SET_RATE_PARENT,
   2797			.ops = &clk_branch2_ops,
   2798		},
   2799	},
   2800};
   2801
   2802static struct clk_branch gcc_gp3_clk = {
   2803	.halt_reg = 0xa000,
   2804	.halt_check = BRANCH_HALT,
   2805	.clkr = {
   2806		.enable_reg = 0xa000,
   2807		.enable_mask = BIT(0),
   2808		.hw.init = &(struct clk_init_data) {
   2809			.name = "gcc_gp3_clk",
   2810			.parent_hws = (const struct clk_hw *[]) {
   2811				&gp3_clk_src.clkr.hw,
   2812			},
   2813			.num_parents = 1,
   2814			.flags = CLK_SET_RATE_PARENT,
   2815			.ops = &clk_branch2_ops,
   2816		},
   2817	},
   2818};
   2819
   2820static struct clk_branch gcc_mdss_ahb_clk = {
   2821	.halt_reg = 0x4d07c,
   2822	.halt_check = BRANCH_HALT,
   2823	.clkr = {
   2824		.enable_reg = 0x4d07c,
   2825		.enable_mask = BIT(0),
   2826		.hw.init = &(struct clk_init_data) {
   2827			.name = "gcc_mdss_ahb_clk",
   2828			.ops = &clk_branch2_ops,
   2829		},
   2830	},
   2831};
   2832
   2833static struct clk_branch gcc_mdss_axi_clk = {
   2834	.halt_reg = 0x4d080,
   2835	.halt_check = BRANCH_HALT,
   2836	.clkr = {
   2837		.enable_reg = 0x4d080,
   2838		.enable_mask = BIT(0),
   2839		.hw.init = &(struct clk_init_data) {
   2840			.name = "gcc_mdss_axi_clk",
   2841			.ops = &clk_branch2_ops,
   2842		},
   2843	},
   2844};
   2845
   2846static struct clk_branch gcc_mdss_byte0_clk = {
   2847	.halt_reg = 0x4d094,
   2848	.halt_check = BRANCH_HALT,
   2849	.clkr = {
   2850		.enable_reg = 0x4d094,
   2851		.enable_mask = BIT(0),
   2852		.hw.init = &(struct clk_init_data) {
   2853			.name = "gcc_mdss_byte0_clk",
   2854			.parent_hws = (const struct clk_hw *[]) {
   2855				&byte0_clk_src.clkr.hw,
   2856			},
   2857			.num_parents = 1,
   2858			.flags = CLK_SET_RATE_PARENT,
   2859			.ops = &clk_branch2_ops,
   2860		},
   2861	},
   2862};
   2863
   2864static struct clk_branch gcc_mdss_byte1_clk = {
   2865	.halt_reg = 0x4d0a0,
   2866	.halt_check = BRANCH_HALT,
   2867	.clkr = {
   2868		.enable_reg = 0x4d0a0,
   2869		.enable_mask = BIT(0),
   2870		.hw.init = &(struct clk_init_data) {
   2871			.name = "gcc_mdss_byte1_clk",
   2872			.parent_hws = (const struct clk_hw *[]) {
   2873				&byte1_clk_src.clkr.hw,
   2874			},
   2875			.num_parents = 1,
   2876			.flags = CLK_SET_RATE_PARENT,
   2877			.ops = &clk_branch2_ops,
   2878		},
   2879	},
   2880};
   2881
   2882static struct clk_branch gcc_mdss_esc0_clk = {
   2883	.halt_reg = 0x4d098,
   2884	.halt_check = BRANCH_HALT,
   2885	.clkr = {
   2886		.enable_reg = 0x4d098,
   2887		.enable_mask = BIT(0),
   2888		.hw.init = &(struct clk_init_data) {
   2889			.name = "gcc_mdss_esc0_clk",
   2890			.parent_hws = (const struct clk_hw *[]) {
   2891				&esc0_clk_src.clkr.hw,
   2892			},
   2893			.num_parents = 1,
   2894			.flags = CLK_SET_RATE_PARENT,
   2895			.ops = &clk_branch2_ops,
   2896		},
   2897	},
   2898};
   2899
   2900static struct clk_branch gcc_mdss_esc1_clk = {
   2901	.halt_reg = 0x4d09c,
   2902	.halt_check = BRANCH_HALT,
   2903	.clkr = {
   2904		.enable_reg = 0x4d09c,
   2905		.enable_mask = BIT(0),
   2906		.hw.init = &(struct clk_init_data) {
   2907			.name = "gcc_mdss_esc1_clk",
   2908			.parent_hws = (const struct clk_hw *[]) {
   2909				&esc1_clk_src.clkr.hw,
   2910			},
   2911			.num_parents = 1,
   2912			.flags = CLK_SET_RATE_PARENT,
   2913			.ops = &clk_branch2_ops,
   2914		},
   2915	},
   2916};
   2917
   2918static struct clk_branch gcc_mdss_mdp_clk = {
   2919	.halt_reg = 0x4d088,
   2920	.halt_check = BRANCH_HALT,
   2921	.clkr = {
   2922		.enable_reg = 0x4d088,
   2923		.enable_mask = BIT(0),
   2924		.hw.init = &(struct clk_init_data) {
   2925			.name = "gcc_mdss_mdp_clk",
   2926			.parent_hws = (const struct clk_hw *[]) {
   2927				&mdp_clk_src.clkr.hw,
   2928			},
   2929			.num_parents = 1,
   2930			.flags = CLK_SET_RATE_PARENT,
   2931			.ops = &clk_branch2_ops,
   2932		},
   2933	},
   2934};
   2935
   2936static struct clk_branch gcc_mdss_pclk0_clk = {
   2937	.halt_reg = 0x4d084,
   2938	.halt_check = BRANCH_HALT,
   2939	.clkr = {
   2940		.enable_reg = 0x4d084,
   2941		.enable_mask = BIT(0),
   2942		.hw.init = &(struct clk_init_data) {
   2943			.name = "gcc_mdss_pclk0_clk",
   2944			.parent_hws = (const struct clk_hw *[]) {
   2945				&pclk0_clk_src.clkr.hw,
   2946			},
   2947			.num_parents = 1,
   2948			.flags = CLK_SET_RATE_PARENT,
   2949			.ops = &clk_branch2_ops,
   2950		},
   2951	},
   2952};
   2953
   2954static struct clk_branch gcc_mdss_pclk1_clk = {
   2955	.halt_reg = 0x4d0a4,
   2956	.halt_check = BRANCH_HALT,
   2957	.clkr = {
   2958		.enable_reg = 0x4d0a4,
   2959		.enable_mask = BIT(0),
   2960		.hw.init = &(struct clk_init_data) {
   2961			.name = "gcc_mdss_pclk1_clk",
   2962			.parent_hws = (const struct clk_hw *[]) {
   2963				&pclk1_clk_src.clkr.hw,
   2964			},
   2965			.num_parents = 1,
   2966			.flags = CLK_SET_RATE_PARENT,
   2967			.ops = &clk_branch2_ops,
   2968		},
   2969	},
   2970};
   2971
   2972static struct clk_branch gcc_mdss_vsync_clk = {
   2973	.halt_reg = 0x4d090,
   2974	.halt_check = BRANCH_HALT,
   2975	.clkr = {
   2976		.enable_reg = 0x4d090,
   2977		.enable_mask = BIT(0),
   2978		.hw.init = &(struct clk_init_data) {
   2979			.name = "gcc_mdss_vsync_clk",
   2980			.parent_hws = (const struct clk_hw *[]) {
   2981				&vsync_clk_src.clkr.hw,
   2982			},
   2983			.num_parents = 1,
   2984			.flags = CLK_SET_RATE_PARENT,
   2985			.ops = &clk_branch2_ops,
   2986		},
   2987	},
   2988};
   2989
   2990static struct clk_branch gcc_mss_cfg_ahb_clk = {
   2991	.halt_reg = 0x49000,
   2992	.clkr = {
   2993		.enable_reg = 0x49000,
   2994		.enable_mask = BIT(0),
   2995		.hw.init = &(struct clk_init_data) {
   2996			.name = "gcc_mss_cfg_ahb_clk",
   2997			.ops = &clk_branch2_ops,
   2998		},
   2999	},
   3000};
   3001
   3002static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
   3003	.halt_reg = 0x49004,
   3004	.halt_check = BRANCH_HALT,
   3005	.clkr = {
   3006		.enable_reg = 0x49004,
   3007		.enable_mask = BIT(0),
   3008		.hw.init = &(struct clk_init_data) {
   3009			.name = "gcc_mss_q6_bimc_axi_clk",
   3010			.ops = &clk_branch2_ops,
   3011		},
   3012	},
   3013};
   3014
   3015static struct clk_branch gcc_bimc_gfx_clk = {
   3016	.halt_reg = 0x59048,
   3017	.clkr = {
   3018		.enable_reg = 0x59048,
   3019		.enable_mask = BIT(0),
   3020		.hw.init = &(struct clk_init_data) {
   3021			.name = "gcc_bimc_gfx_clk",
   3022			.ops = &clk_branch2_ops,
   3023		},
   3024	},
   3025};
   3026
   3027static struct clk_branch gcc_oxili_ahb_clk = {
   3028	.halt_reg = 0x59028,
   3029	.clkr = {
   3030		.enable_reg = 0x59028,
   3031		.enable_mask = BIT(0),
   3032		.hw.init = &(struct clk_init_data) {
   3033			.name = "gcc_oxili_ahb_clk",
   3034			.ops = &clk_branch2_ops,
   3035		},
   3036	},
   3037};
   3038
   3039static struct clk_branch gcc_oxili_aon_clk = {
   3040	.halt_reg = 0x59044,
   3041	.clkr = {
   3042		.enable_reg = 0x59044,
   3043		.enable_mask = BIT(0),
   3044		.hw.init = &(struct clk_init_data) {
   3045			.name = "gcc_oxili_aon_clk",
   3046			.parent_hws = (const struct clk_hw *[]) {
   3047				&gfx3d_clk_src.clkr.hw,
   3048			},
   3049			.num_parents = 1,
   3050			.flags = CLK_SET_RATE_PARENT,
   3051			.ops = &clk_branch2_ops,
   3052		},
   3053	},
   3054};
   3055
   3056static struct clk_branch gcc_oxili_gfx3d_clk = {
   3057	.halt_reg = 0x59020,
   3058	.clkr = {
   3059		.enable_reg = 0x59020,
   3060		.enable_mask = BIT(0),
   3061		.hw.init = &(struct clk_init_data) {
   3062			.name = "gcc_oxili_gfx3d_clk",
   3063			.parent_hws = (const struct clk_hw *[]) {
   3064				&gfx3d_clk_src.clkr.hw,
   3065			},
   3066			.num_parents = 1,
   3067			.flags = CLK_SET_RATE_PARENT,
   3068			.ops = &clk_branch2_ops,
   3069		},
   3070	},
   3071};
   3072
   3073static struct clk_branch gcc_oxili_timer_clk = {
   3074	.halt_reg = 0x59040,
   3075	.clkr = {
   3076		.enable_reg = 0x59040,
   3077		.enable_mask = BIT(0),
   3078		.hw.init = &(struct clk_init_data) {
   3079			.name = "gcc_oxili_timer_clk",
   3080			.parent_data = &(const struct clk_parent_data){
   3081				.fw_name = "xo",
   3082			},
   3083			.num_parents = 1,
   3084			.ops = &clk_branch2_ops,
   3085		},
   3086	},
   3087};
   3088
   3089static struct clk_branch gcc_pdm2_clk = {
   3090	.halt_reg = 0x4400c,
   3091	.halt_check = BRANCH_HALT,
   3092	.clkr = {
   3093		.enable_reg = 0x4400c,
   3094		.enable_mask = BIT(0),
   3095		.hw.init = &(struct clk_init_data) {
   3096			.name = "gcc_pdm2_clk",
   3097			.parent_hws = (const struct clk_hw *[]) {
   3098				&pdm2_clk_src.clkr.hw,
   3099			},
   3100			.num_parents = 1,
   3101			.flags = CLK_SET_RATE_PARENT,
   3102			.ops = &clk_branch2_ops,
   3103		},
   3104	},
   3105};
   3106
   3107static struct clk_branch gcc_pdm_ahb_clk = {
   3108	.halt_reg = 0x44004,
   3109	.halt_check = BRANCH_HALT,
   3110	.clkr = {
   3111		.enable_reg = 0x44004,
   3112		.enable_mask = BIT(0),
   3113		.hw.init = &(struct clk_init_data) {
   3114			.name = "gcc_pdm_ahb_clk",
   3115			.ops = &clk_branch2_ops,
   3116		},
   3117	},
   3118};
   3119
   3120static struct clk_branch gcc_rbcpr_gfx_ahb_clk = {
   3121	.halt_reg = 0x3a008,
   3122	.clkr = {
   3123		.enable_reg = 0x3a008,
   3124		.enable_mask = BIT(0),
   3125		.hw.init = &(struct clk_init_data) {
   3126			.name = "gcc_rbcpr_gfx_ahb_clk",
   3127			.ops = &clk_branch2_ops,
   3128		},
   3129	},
   3130};
   3131
   3132static struct clk_branch gcc_rbcpr_gfx_clk = {
   3133	.halt_reg = 0x3a004,
   3134	.clkr = {
   3135		.enable_reg = 0x3a004,
   3136		.enable_mask = BIT(0),
   3137		.hw.init = &(struct clk_init_data) {
   3138			.name = "gcc_rbcpr_gfx_clk",
   3139			.parent_hws = (const struct clk_hw *[]) {
   3140				&rbcpr_gfx_clk_src.clkr.hw,
   3141			},
   3142			.num_parents = 1,
   3143			.flags = CLK_SET_RATE_PARENT,
   3144			.ops = &clk_branch2_ops,
   3145		},
   3146	},
   3147};
   3148
   3149static struct clk_branch gcc_sdcc1_ahb_clk = {
   3150	.halt_reg = 0x4201c,
   3151	.halt_check = BRANCH_HALT,
   3152	.clkr = {
   3153		.enable_reg = 0x4201c,
   3154		.enable_mask = BIT(0),
   3155		.hw.init = &(struct clk_init_data) {
   3156			.name = "gcc_sdcc1_ahb_clk",
   3157			.ops = &clk_branch2_ops,
   3158		},
   3159	},
   3160};
   3161
   3162static struct clk_branch gcc_sdcc1_apps_clk = {
   3163	.halt_reg = 0x42018,
   3164	.halt_check = BRANCH_HALT,
   3165	.clkr = {
   3166		.enable_reg = 0x42018,
   3167		.enable_mask = BIT(0),
   3168		.hw.init = &(struct clk_init_data) {
   3169			.name = "gcc_sdcc1_apps_clk",
   3170			.parent_hws = (const struct clk_hw *[]) {
   3171				&sdcc1_apps_clk_src.clkr.hw,
   3172			},
   3173			.num_parents = 1,
   3174			.flags = CLK_SET_RATE_PARENT,
   3175			.ops = &clk_branch2_ops,
   3176		},
   3177	},
   3178};
   3179
   3180static struct clk_branch gcc_sdcc1_ice_core_clk = {
   3181	.halt_reg = 0x5d014,
   3182	.halt_check = BRANCH_HALT,
   3183	.clkr = {
   3184		.enable_reg = 0x5d014,
   3185		.enable_mask = BIT(0),
   3186		.hw.init = &(struct clk_init_data) {
   3187			.name = "gcc_sdcc1_ice_core_clk",
   3188			.parent_hws = (const struct clk_hw *[]) {
   3189				&sdcc1_ice_core_clk_src.clkr.hw,
   3190			},
   3191			.num_parents = 1,
   3192			.flags = CLK_SET_RATE_PARENT,
   3193			.ops = &clk_branch2_ops,
   3194		},
   3195	},
   3196};
   3197
   3198static struct clk_branch gcc_sdcc2_ahb_clk = {
   3199	.halt_reg = 0x4301c,
   3200	.halt_check = BRANCH_HALT,
   3201	.clkr = {
   3202		.enable_reg = 0x4301c,
   3203		.enable_mask = BIT(0),
   3204		.hw.init = &(struct clk_init_data) {
   3205			.name = "gcc_sdcc2_ahb_clk",
   3206			.ops = &clk_branch2_ops,
   3207		},
   3208	},
   3209};
   3210
   3211static struct clk_branch gcc_sdcc2_apps_clk = {
   3212	.halt_reg = 0x43018,
   3213	.halt_check = BRANCH_HALT,
   3214	.clkr = {
   3215		.enable_reg = 0x43018,
   3216		.enable_mask = BIT(0),
   3217		.hw.init = &(struct clk_init_data) {
   3218			.name = "gcc_sdcc2_apps_clk",
   3219			.parent_hws = (const struct clk_hw *[]) {
   3220				&sdcc2_apps_clk_src.clkr.hw,
   3221			},
   3222			.num_parents = 1,
   3223			.flags = CLK_SET_RATE_PARENT,
   3224			.ops = &clk_branch2_ops,
   3225		},
   3226	},
   3227};
   3228
   3229static struct clk_branch gcc_sdcc3_ahb_clk = {
   3230	.halt_reg = 0x3901c,
   3231	.halt_check = BRANCH_HALT,
   3232	.clkr = {
   3233		.enable_reg = 0x3901c,
   3234		.enable_mask = BIT(0),
   3235		.hw.init = &(struct clk_init_data) {
   3236			.name = "gcc_sdcc3_ahb_clk",
   3237			.ops = &clk_branch2_ops,
   3238		},
   3239	},
   3240};
   3241
   3242static struct clk_branch gcc_sdcc3_apps_clk = {
   3243	.halt_reg = 0x39018,
   3244	.halt_check = BRANCH_HALT,
   3245	.clkr = {
   3246		.enable_reg = 0x39018,
   3247		.enable_mask = BIT(0),
   3248		.hw.init = &(struct clk_init_data) {
   3249			.name = "gcc_sdcc3_apps_clk",
   3250			.parent_hws = (const struct clk_hw *[]) {
   3251				&sdcc3_apps_clk_src.clkr.hw,
   3252			},
   3253			.num_parents = 1,
   3254			.flags = CLK_SET_RATE_PARENT,
   3255			.ops = &clk_branch2_ops,
   3256		},
   3257	},
   3258};
   3259
   3260static struct clk_branch gcc_usb2a_phy_sleep_clk = {
   3261	.halt_reg = 0x4102c,
   3262	.clkr = {
   3263		.enable_reg = 0x4102c,
   3264		.enable_mask = BIT(0),
   3265		.hw.init = &(struct clk_init_data) {
   3266			.name = "gcc_usb2a_phy_sleep_clk",
   3267			.ops = &clk_branch2_ops,
   3268		},
   3269	},
   3270};
   3271
   3272static struct clk_branch gcc_usb_hs_phy_cfg_ahb_clk = {
   3273	.halt_reg = 0x41030,
   3274	.clkr = {
   3275		.enable_reg = 0x41030,
   3276		.enable_mask = BIT(0),
   3277		.hw.init = &(struct clk_init_data) {
   3278			.name = "gcc_usb_hs_phy_cfg_ahb_clk",
   3279			.ops = &clk_branch2_ops,
   3280		},
   3281	},
   3282};
   3283
   3284static struct clk_branch gcc_usb_fs_ahb_clk = {
   3285	.halt_reg = 0x3f008,
   3286	.clkr = {
   3287		.enable_reg = 0x3f008,
   3288		.enable_mask = BIT(0),
   3289		.hw.init = &(struct clk_init_data) {
   3290			.name = "gcc_usb_fs_ahb_clk",
   3291			.ops = &clk_branch2_ops,
   3292		},
   3293	},
   3294};
   3295
   3296static struct clk_branch gcc_usb_fs_ic_clk = {
   3297	.halt_reg = 0x3f030,
   3298	.clkr = {
   3299		.enable_reg = 0x3f030,
   3300		.enable_mask = BIT(0),
   3301		.hw.init = &(struct clk_init_data) {
   3302			.name = "gcc_usb_fs_ic_clk",
   3303			.parent_hws = (const struct clk_hw *[]) {
   3304				&usb_fs_ic_clk_src.clkr.hw,
   3305			},
   3306			.num_parents = 1,
   3307			.flags = CLK_SET_RATE_PARENT,
   3308			.ops = &clk_branch2_ops,
   3309		},
   3310	},
   3311};
   3312
   3313static struct clk_branch gcc_usb_fs_system_clk = {
   3314	.halt_reg = 0x3f004,
   3315	.clkr = {
   3316		.enable_reg = 0x3f004,
   3317		.enable_mask = BIT(0),
   3318		.hw.init = &(struct clk_init_data) {
   3319			.name = "gcc_usb_fs_system_clk",
   3320			.parent_hws = (const struct clk_hw *[]) {
   3321				&usb_fs_system_clk_src.clkr.hw,
   3322			},
   3323			.num_parents = 1,
   3324			.flags = CLK_SET_RATE_PARENT,
   3325			.ops = &clk_branch2_ops,
   3326		},
   3327	},
   3328};
   3329
   3330static struct clk_branch gcc_usb_hs_ahb_clk = {
   3331	.halt_reg = 0x41008,
   3332	.clkr = {
   3333		.enable_reg = 0x41008,
   3334		.enable_mask = BIT(0),
   3335		.hw.init = &(struct clk_init_data) {
   3336			.name = "gcc_usb_hs_ahb_clk",
   3337			.ops = &clk_branch2_ops,
   3338		},
   3339	},
   3340};
   3341
   3342static struct clk_branch gcc_usb_hs_system_clk = {
   3343	.halt_reg = 0x41004,
   3344	.clkr = {
   3345		.enable_reg = 0x41004,
   3346		.enable_mask = BIT(0),
   3347		.hw.init = &(struct clk_init_data) {
   3348			.name = "gcc_usb_hs_system_clk",
   3349			.parent_hws = (const struct clk_hw *[]) {
   3350				&usb_hs_system_clk_src.clkr.hw,
   3351			},
   3352			.num_parents = 1,
   3353			.flags = CLK_SET_RATE_PARENT,
   3354			.ops = &clk_branch2_ops,
   3355		},
   3356	},
   3357};
   3358
   3359static struct clk_branch gcc_venus0_ahb_clk = {
   3360	.halt_reg = 0x4c020,
   3361	.clkr = {
   3362		.enable_reg = 0x4c020,
   3363		.enable_mask = BIT(0),
   3364		.hw.init = &(struct clk_init_data) {
   3365			.name = "gcc_venus0_ahb_clk",
   3366			.ops = &clk_branch2_ops,
   3367		},
   3368	},
   3369};
   3370
   3371static struct clk_branch gcc_venus0_axi_clk = {
   3372	.halt_reg = 0x4c024,
   3373	.clkr = {
   3374		.enable_reg = 0x4c024,
   3375		.enable_mask = BIT(0),
   3376		.hw.init = &(struct clk_init_data) {
   3377			.name = "gcc_venus0_axi_clk",
   3378			.ops = &clk_branch2_ops,
   3379		},
   3380	},
   3381};
   3382
   3383static struct clk_branch gcc_venus0_core0_vcodec0_clk = {
   3384	.halt_reg = 0x4c02c,
   3385	.clkr = {
   3386		.enable_reg = 0x4c02c,
   3387		.enable_mask = BIT(0),
   3388		.hw.init = &(struct clk_init_data) {
   3389			.name = "gcc_venus0_core0_vcodec0_clk",
   3390			.parent_hws = (const struct clk_hw *[]) {
   3391				&vcodec0_clk_src.clkr.hw,
   3392			},
   3393			.num_parents = 1,
   3394			.flags = CLK_SET_RATE_PARENT,
   3395			.ops = &clk_branch2_ops,
   3396		},
   3397	},
   3398};
   3399
   3400static struct clk_branch gcc_venus0_core1_vcodec0_clk = {
   3401	.halt_reg = 0x4c034,
   3402	.clkr = {
   3403		.enable_reg = 0x4c034,
   3404		.enable_mask = BIT(0),
   3405		.hw.init = &(struct clk_init_data) {
   3406			.name = "gcc_venus0_core1_vcodec0_clk",
   3407			.parent_hws = (const struct clk_hw *[]) {
   3408				&vcodec0_clk_src.clkr.hw,
   3409			},
   3410			.num_parents = 1,
   3411			.flags = CLK_SET_RATE_PARENT,
   3412			.ops = &clk_branch2_ops,
   3413		},
   3414	},
   3415};
   3416
   3417static struct clk_branch gcc_venus0_vcodec0_clk = {
   3418	.halt_reg = 0x4c01c,
   3419	.clkr = {
   3420		.enable_reg = 0x4c01c,
   3421		.enable_mask = BIT(0),
   3422		.hw.init = &(struct clk_init_data) {
   3423			.name = "gcc_venus0_vcodec0_clk",
   3424			.parent_hws = (const struct clk_hw *[]) {
   3425				&vcodec0_clk_src.clkr.hw,
   3426			},
   3427			.num_parents = 1,
   3428			.flags = CLK_SET_RATE_PARENT,
   3429			.ops = &clk_branch2_ops,
   3430		},
   3431	},
   3432};
   3433
   3434/* Vote clocks */
   3435static struct clk_branch gcc_apss_ahb_clk = {
   3436	.halt_reg = 0x4601c,
   3437	.halt_check = BRANCH_HALT_VOTED,
   3438	.clkr = {
   3439		.enable_reg = 0x45004,
   3440		.enable_mask = BIT(14),
   3441		.hw.init = &(struct clk_init_data){
   3442			.name = "gcc_apss_ahb_clk",
   3443			.ops = &clk_branch2_ops,
   3444		},
   3445	},
   3446};
   3447
   3448static struct clk_branch gcc_apss_axi_clk = {
   3449	.halt_reg = 0x46020,
   3450	.halt_check = BRANCH_HALT_VOTED,
   3451	.clkr = {
   3452		.enable_reg = 0x45004,
   3453		.enable_mask = BIT(13),
   3454		.hw.init = &(struct clk_init_data){
   3455			.name = "gcc_apss_axi_clk",
   3456			.ops = &clk_branch2_ops,
   3457		},
   3458	},
   3459};
   3460
   3461static struct clk_branch gcc_blsp1_ahb_clk = {
   3462	.halt_reg = 0x1008,
   3463	.halt_check = BRANCH_HALT_VOTED,
   3464	.clkr = {
   3465		.enable_reg = 0x45004,
   3466		.enable_mask = BIT(10),
   3467		.hw.init = &(struct clk_init_data){
   3468			.name = "gcc_blsp1_ahb_clk",
   3469			.ops = &clk_branch2_ops,
   3470		},
   3471	},
   3472};
   3473
   3474static struct clk_branch gcc_blsp2_ahb_clk = {
   3475	.halt_reg = 0xb008,
   3476	.halt_check = BRANCH_HALT_VOTED,
   3477	.clkr = {
   3478		.enable_reg = 0x45004,
   3479		.enable_mask = BIT(20),
   3480		.hw.init = &(struct clk_init_data){
   3481			.name = "gcc_blsp2_ahb_clk",
   3482			.ops = &clk_branch2_ops,
   3483		},
   3484	},
   3485};
   3486
   3487static struct clk_branch gcc_prng_ahb_clk = {
   3488	.halt_reg = 0x13004,
   3489	.halt_check = BRANCH_HALT_VOTED,
   3490	.clkr = {
   3491		.enable_reg = 0x45004,
   3492		.enable_mask = BIT(8),
   3493		.hw.init = &(struct clk_init_data){
   3494			.name = "gcc_prng_ahb_clk",
   3495			.ops = &clk_branch2_ops,
   3496		},
   3497	},
   3498};
   3499
   3500static struct clk_branch gcc_boot_rom_ahb_clk = {
   3501	.halt_reg = 0x1300c,
   3502	.halt_check = BRANCH_HALT_VOTED,
   3503	.clkr = {
   3504		.enable_reg = 0x45004,
   3505		.enable_mask = BIT(7),
   3506		.hw.init = &(struct clk_init_data){
   3507			.name = "gcc_boot_rom_ahb_clk",
   3508			.ops = &clk_branch2_ops,
   3509		},
   3510	},
   3511};
   3512
   3513static struct clk_branch gcc_crypto_ahb_clk = {
   3514	.halt_reg = 0x16024,
   3515	.halt_check = BRANCH_HALT_VOTED,
   3516	.clkr = {
   3517		.enable_reg = 0x45004,
   3518		.enable_mask = BIT(0),
   3519		.hw.init = &(struct clk_init_data){
   3520			.name = "gcc_crypto_ahb_clk",
   3521			.ops = &clk_branch2_ops,
   3522		},
   3523	},
   3524};
   3525
   3526static struct clk_branch gcc_crypto_axi_clk = {
   3527	.halt_reg = 0x16020,
   3528	.halt_check = BRANCH_HALT_VOTED,
   3529	.clkr = {
   3530		.enable_reg = 0x45004,
   3531		.enable_mask = BIT(1),
   3532		.hw.init = &(struct clk_init_data){
   3533			.name = "gcc_crypto_axi_clk",
   3534			.ops = &clk_branch2_ops,
   3535		},
   3536	},
   3537};
   3538
   3539static struct clk_branch gcc_crypto_clk = {
   3540	.halt_reg = 0x1601c,
   3541	.halt_check = BRANCH_HALT_VOTED,
   3542	.clkr = {
   3543		.enable_reg = 0x45004,
   3544		.enable_mask = BIT(2),
   3545		.hw.init = &(struct clk_init_data){
   3546			.name = "gcc_crypto_clk",
   3547			.parent_hws = (const struct clk_hw *[]) {
   3548				&crypto_clk_src.clkr.hw,
   3549			},
   3550			.num_parents = 1,
   3551			.flags = CLK_SET_RATE_PARENT,
   3552			.ops = &clk_branch2_ops,
   3553		},
   3554	},
   3555};
   3556
   3557static struct clk_branch gcc_cpp_tbu_clk = {
   3558	.halt_reg = 0x12040,
   3559	.halt_check = BRANCH_HALT_VOTED,
   3560	.clkr = {
   3561		.enable_reg = 0x4500c,
   3562		.enable_mask = BIT(14),
   3563		.hw.init = &(struct clk_init_data){
   3564			.name = "gcc_cpp_tbu_clk",
   3565			.ops = &clk_branch2_ops,
   3566		},
   3567	},
   3568};
   3569
   3570static struct clk_branch gcc_gfx_1_tbu_clk = {
   3571	.halt_reg = 0x12098,
   3572	.halt_check = BRANCH_HALT_VOTED,
   3573	.clkr = {
   3574		.enable_reg = 0x4500c,
   3575		.enable_mask = BIT(19),
   3576		.hw.init = &(struct clk_init_data){
   3577			.name = "gcc_gfx_1_tbu_clk",
   3578			.ops = &clk_branch2_ops,
   3579		},
   3580	},
   3581};
   3582
   3583static struct clk_branch gcc_gfx_tbu_clk = {
   3584	.halt_reg = 0x12010,
   3585	.halt_check = BRANCH_HALT_VOTED,
   3586	.clkr = {
   3587		.enable_reg = 0x4500c,
   3588		.enable_mask = BIT(3),
   3589		.hw.init = &(struct clk_init_data){
   3590			.name = "gcc_gfx_tbu_clk",
   3591			.ops = &clk_branch2_ops,
   3592		},
   3593	},
   3594};
   3595
   3596static struct clk_branch gcc_gfx_tcu_clk = {
   3597	.halt_reg = 0x12020,
   3598	.halt_check = BRANCH_HALT_VOTED,
   3599	.clkr = {
   3600		.enable_reg = 0x4500c,
   3601		.enable_mask = BIT(2),
   3602		.hw.init = &(struct clk_init_data){
   3603			.name = "gcc_gfx_tcu_clk",
   3604			.ops = &clk_branch2_ops,
   3605		},
   3606	},
   3607};
   3608
   3609static struct clk_branch gcc_apss_tcu_clk = {
   3610	.halt_reg = 0x12018,
   3611	.halt_check = BRANCH_HALT_VOTED,
   3612	.clkr = {
   3613		.enable_reg = 0x4500c,
   3614		.enable_mask = BIT(1),
   3615		.hw.init = &(struct clk_init_data){
   3616			.name = "gcc_apss_tcu_clk",
   3617			.ops = &clk_branch2_ops,
   3618		},
   3619	},
   3620};
   3621
   3622static struct clk_branch gcc_gtcu_ahb_clk = {
   3623	.halt_reg = 0x12044,
   3624	.halt_check = BRANCH_HALT_VOTED,
   3625	.clkr = {
   3626		.enable_reg = 0x4500c,
   3627		.enable_mask = BIT(13),
   3628		.hw.init = &(struct clk_init_data){
   3629			.name = "gcc_gtcu_ahb_clk",
   3630			.ops = &clk_branch2_ops,
   3631		},
   3632	},
   3633};
   3634
   3635static struct clk_branch gcc_jpeg_tbu_clk = {
   3636	.halt_reg = 0x12034,
   3637	.halt_check = BRANCH_HALT_VOTED,
   3638	.clkr = {
   3639		.enable_reg = 0x4500c,
   3640		.enable_mask = BIT(10),
   3641		.hw.init = &(struct clk_init_data){
   3642			.name = "gcc_jpeg_tbu_clk",
   3643			.ops = &clk_branch2_ops,
   3644		},
   3645	},
   3646};
   3647
   3648static struct clk_branch gcc_mdp_rt_tbu_clk = {
   3649	.halt_reg = 0x1204c,
   3650	.halt_check = BRANCH_HALT_VOTED,
   3651	.clkr = {
   3652		.enable_reg = 0x4500c,
   3653		.enable_mask = BIT(15),
   3654		.hw.init = &(struct clk_init_data){
   3655			.name = "gcc_mdp_rt_tbu_clk",
   3656			.ops = &clk_branch2_ops,
   3657		},
   3658	},
   3659};
   3660
   3661static struct clk_branch gcc_mdp_tbu_clk = {
   3662	.halt_reg = 0x1201c,
   3663	.halt_check = BRANCH_HALT_VOTED,
   3664	.clkr = {
   3665		.enable_reg = 0x4500c,
   3666		.enable_mask = BIT(4),
   3667		.hw.init = &(struct clk_init_data){
   3668			.name = "gcc_mdp_tbu_clk",
   3669			.ops = &clk_branch2_ops,
   3670		},
   3671	},
   3672};
   3673
   3674static struct clk_branch gcc_smmu_cfg_clk = {
   3675	.halt_reg = 0x12038,
   3676	.halt_check = BRANCH_HALT_VOTED,
   3677	.clkr = {
   3678		.enable_reg = 0x4500c,
   3679		.enable_mask = BIT(12),
   3680		.hw.init = &(struct clk_init_data){
   3681			.name = "gcc_smmu_cfg_clk",
   3682			.ops = &clk_branch2_ops,
   3683		},
   3684	},
   3685};
   3686
   3687static struct clk_branch gcc_venus_1_tbu_clk = {
   3688	.halt_reg = 0x1209c,
   3689	.halt_check = BRANCH_HALT_VOTED,
   3690	.clkr = {
   3691		.enable_reg = 0x4500c,
   3692		.enable_mask = BIT(20),
   3693		.hw.init = &(struct clk_init_data){
   3694			.name = "gcc_venus_1_tbu_clk",
   3695			.ops = &clk_branch2_ops,
   3696		},
   3697	},
   3698};
   3699
   3700static struct clk_branch gcc_venus_tbu_clk = {
   3701	.halt_reg = 0x12014,
   3702	.halt_check = BRANCH_HALT_VOTED,
   3703	.clkr = {
   3704		.enable_reg = 0x4500c,
   3705		.enable_mask = BIT(5),
   3706		.hw.init = &(struct clk_init_data){
   3707			.name = "gcc_venus_tbu_clk",
   3708			.ops = &clk_branch2_ops,
   3709		},
   3710	},
   3711};
   3712
   3713static struct clk_branch gcc_vfe1_tbu_clk = {
   3714	.halt_reg = 0x12090,
   3715	.halt_check = BRANCH_HALT_VOTED,
   3716	.clkr = {
   3717		.enable_reg = 0x4500c,
   3718		.enable_mask = BIT(17),
   3719		.hw.init = &(struct clk_init_data){
   3720			.name = "gcc_vfe1_tbu_clk",
   3721			.ops = &clk_branch2_ops,
   3722		},
   3723	},
   3724};
   3725
   3726static struct clk_branch gcc_vfe_tbu_clk = {
   3727	.halt_reg = 0x1203c,
   3728	.halt_check = BRANCH_HALT_VOTED,
   3729	.clkr = {
   3730		.enable_reg = 0x4500c,
   3731		.enable_mask = BIT(9),
   3732		.hw.init = &(struct clk_init_data){
   3733			.name = "gcc_vfe_tbu_clk",
   3734			.ops = &clk_branch2_ops,
   3735		},
   3736	},
   3737};
   3738
   3739static struct gdsc venus_gdsc = {
   3740	.gdscr = 0x4c018,
   3741	.cxcs = (unsigned int []){ 0x4c024, 0x4c01c },
   3742	.cxc_count = 2,
   3743	.pd = {
   3744		.name = "venus_gdsc",
   3745	},
   3746	.pwrsts = PWRSTS_OFF_ON,
   3747};
   3748
   3749static struct gdsc venus_core0_gdsc = {
   3750	.gdscr = 0x4c028,
   3751	.cxcs = (unsigned int []){ 0x4c02c },
   3752	.cxc_count = 1,
   3753	.pd = {
   3754		.name = "venus_core0_gdsc",
   3755	},
   3756	.pwrsts = PWRSTS_OFF_ON,
   3757};
   3758
   3759static struct gdsc venus_core1_gdsc = {
   3760	.gdscr = 0x4c030,
   3761	.pd = {
   3762		.name = "venus_core1_gdsc",
   3763	},
   3764	.pwrsts = PWRSTS_OFF_ON,
   3765};
   3766
   3767static struct gdsc mdss_gdsc = {
   3768	.gdscr = 0x4d078,
   3769	.cxcs = (unsigned int []){ 0x4d080, 0x4d088 },
   3770	.cxc_count = 2,
   3771	.pd = {
   3772		.name = "mdss_gdsc",
   3773	},
   3774	.pwrsts = PWRSTS_OFF_ON,
   3775};
   3776
   3777static struct gdsc jpeg_gdsc = {
   3778	.gdscr = 0x5701c,
   3779	.cxcs = (unsigned int []){ 0x57020, 0x57028 },
   3780	.cxc_count = 2,
   3781	.pd = {
   3782		.name = "jpeg_gdsc",
   3783	},
   3784	.pwrsts = PWRSTS_OFF_ON,
   3785};
   3786
   3787static struct gdsc vfe0_gdsc = {
   3788	.gdscr = 0x58034,
   3789	.cxcs = (unsigned int []){ 0x58038, 0x58048, 0x5600c, 0x58050 },
   3790	.cxc_count = 4,
   3791	.pd = {
   3792		.name = "vfe0_gdsc",
   3793	},
   3794	.pwrsts = PWRSTS_OFF_ON,
   3795};
   3796
   3797static struct gdsc vfe1_gdsc = {
   3798	.gdscr = 0x5806c,
   3799	.cxcs = (unsigned int []){ 0x5805c, 0x58068, 0x5600c, 0x58074 },
   3800	.cxc_count = 4,
   3801	.pd = {
   3802		.name = "vfe1_gdsc",
   3803	},
   3804	.pwrsts = PWRSTS_OFF_ON,
   3805};
   3806
   3807static struct gdsc cpp_gdsc = {
   3808	.gdscr = 0x58078,
   3809	.cxcs = (unsigned int []){ 0x5803c, 0x58064 },
   3810	.cxc_count = 2,
   3811	.pd = {
   3812		.name = "cpp_gdsc",
   3813	},
   3814	.pwrsts = PWRSTS_OFF_ON,
   3815};
   3816
   3817static struct gdsc oxili_cx_gdsc = {
   3818	.gdscr = 0x5904c,
   3819	.cxcs = (unsigned int []){ 0x59020 },
   3820	.cxc_count = 1,
   3821	.pd = {
   3822		.name = "oxili_cx_gdsc",
   3823	},
   3824	.pwrsts = PWRSTS_OFF_ON,
   3825	.flags = VOTABLE,
   3826};
   3827
   3828static struct gdsc oxili_gx_gdsc = {
   3829	.gdscr = 0x5901c,
   3830	.clamp_io_ctrl = 0x5b00c,
   3831	.cxcs = (unsigned int []){ 0x59000, 0x59024 },
   3832	.cxc_count = 2,
   3833	.pd = {
   3834		.name = "oxili_gx_gdsc",
   3835	},
   3836	.pwrsts = PWRSTS_OFF_ON,
   3837	.supply = "vdd_gfx",
   3838	.flags = CLAMP_IO,
   3839};
   3840
   3841static struct clk_regmap *gcc_msm8976_clocks[] = {
   3842	[GPLL0] = &gpll0.clkr,
   3843	[GPLL2] = &gpll2.clkr,
   3844	[GPLL3] = &gpll3.clkr,
   3845	[GPLL4] = &gpll4.clkr,
   3846	[GPLL6] = &gpll6.clkr,
   3847	[GPLL0_CLK_SRC] = &gpll0_vote,
   3848	[GPLL2_CLK_SRC] = &gpll2_vote,
   3849	[GPLL3_CLK_SRC] = &gpll3_vote,
   3850	[GPLL4_CLK_SRC] = &gpll4_vote,
   3851	[GPLL6_CLK_SRC] = &gpll6_vote,
   3852	[GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
   3853	[GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
   3854	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
   3855	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
   3856	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
   3857	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
   3858	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
   3859	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
   3860	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
   3861	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
   3862	[GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
   3863	[GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
   3864	[GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
   3865	[GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
   3866	[GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
   3867	[GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
   3868	[GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
   3869	[GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
   3870	[GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
   3871	[GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
   3872	[GCC_CAMSS_CCI_AHB_CLK] = &gcc_camss_cci_ahb_clk.clkr,
   3873	[GCC_CAMSS_CCI_CLK] = &gcc_camss_cci_clk.clkr,
   3874	[GCC_CAMSS_CPP_AHB_CLK] = &gcc_camss_cpp_ahb_clk.clkr,
   3875	[GCC_CAMSS_CPP_AXI_CLK] = &gcc_camss_cpp_axi_clk.clkr,
   3876	[GCC_CAMSS_CPP_CLK] = &gcc_camss_cpp_clk.clkr,
   3877	[GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr,
   3878	[GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr,
   3879	[GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr,
   3880	[GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr,
   3881	[GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr,
   3882	[GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr,
   3883	[GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr,
   3884	[GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr,
   3885	[GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr,
   3886	[GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr,
   3887	[GCC_CAMSS_CSI2_AHB_CLK] = &gcc_camss_csi2_ahb_clk.clkr,
   3888	[GCC_CAMSS_CSI2_CLK] = &gcc_camss_csi2_clk.clkr,
   3889	[GCC_CAMSS_CSI2PHY_CLK] = &gcc_camss_csi2phy_clk.clkr,
   3890	[GCC_CAMSS_CSI2PIX_CLK] = &gcc_camss_csi2pix_clk.clkr,
   3891	[GCC_CAMSS_CSI2RDI_CLK] = &gcc_camss_csi2rdi_clk.clkr,
   3892	[GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr,
   3893	[GCC_CAMSS_CSI_VFE1_CLK] = &gcc_camss_csi_vfe1_clk.clkr,
   3894	[GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr,
   3895	[GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr,
   3896	[GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr,
   3897	[GCC_CAMSS_JPEG0_CLK] = &gcc_camss_jpeg0_clk.clkr,
   3898	[GCC_CAMSS_JPEG_AHB_CLK] = &gcc_camss_jpeg_ahb_clk.clkr,
   3899	[GCC_CAMSS_JPEG_AXI_CLK] = &gcc_camss_jpeg_axi_clk.clkr,
   3900	[GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
   3901	[GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
   3902	[GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr,
   3903	[GCC_CAMSS_MICRO_AHB_CLK] = &gcc_camss_micro_ahb_clk.clkr,
   3904	[GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
   3905	[GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
   3906	[GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr,
   3907	[GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
   3908	[GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr,
   3909	[GCC_CAMSS_VFE_AHB_CLK] = &gcc_camss_vfe_ahb_clk.clkr,
   3910	[GCC_CAMSS_VFE_AXI_CLK] = &gcc_camss_vfe_axi_clk.clkr,
   3911	[GCC_CAMSS_VFE1_AHB_CLK] = &gcc_camss_vfe1_ahb_clk.clkr,
   3912	[GCC_CAMSS_VFE1_AXI_CLK] = &gcc_camss_vfe1_axi_clk.clkr,
   3913	[GCC_CAMSS_VFE1_CLK] = &gcc_camss_vfe1_clk.clkr,
   3914	[GCC_DCC_CLK] = &gcc_dcc_clk.clkr,
   3915	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
   3916	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
   3917	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
   3918	[GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr,
   3919	[GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr,
   3920	[GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr,
   3921	[GCC_MDSS_ESC1_CLK] = &gcc_mdss_esc1_clk.clkr,
   3922	[GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr,
   3923	[GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr,
   3924	[GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
   3925	[GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
   3926	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
   3927	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
   3928	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
   3929	[GCC_RBCPR_GFX_AHB_CLK] = &gcc_rbcpr_gfx_ahb_clk.clkr,
   3930	[GCC_RBCPR_GFX_CLK] = &gcc_rbcpr_gfx_clk.clkr,
   3931	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
   3932	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
   3933	[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
   3934	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
   3935	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
   3936	[GCC_SDCC3_AHB_CLK] = &gcc_sdcc3_ahb_clk.clkr,
   3937	[GCC_SDCC3_APPS_CLK] = &gcc_sdcc3_apps_clk.clkr,
   3938	[GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
   3939	[GCC_USB_HS_PHY_CFG_AHB_CLK] = &gcc_usb_hs_phy_cfg_ahb_clk.clkr,
   3940	[GCC_USB_FS_AHB_CLK] = &gcc_usb_fs_ahb_clk.clkr,
   3941	[GCC_USB_FS_IC_CLK] = &gcc_usb_fs_ic_clk.clkr,
   3942	[GCC_USB_FS_SYSTEM_CLK] = &gcc_usb_fs_system_clk.clkr,
   3943	[GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
   3944	[GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
   3945	[GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr,
   3946	[GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr,
   3947	[GCC_VENUS0_CORE0_VCODEC0_CLK] = &gcc_venus0_core0_vcodec0_clk.clkr,
   3948	[GCC_VENUS0_CORE1_VCODEC0_CLK] = &gcc_venus0_core1_vcodec0_clk.clkr,
   3949	[GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr,
   3950	[GCC_APSS_AHB_CLK] = &gcc_apss_ahb_clk.clkr,
   3951	[GCC_APSS_AXI_CLK] = &gcc_apss_axi_clk.clkr,
   3952	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
   3953	[GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
   3954	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
   3955	[GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
   3956	[GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
   3957	[GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
   3958	[GCC_CPP_TBU_CLK] = &gcc_cpp_tbu_clk.clkr,
   3959	[GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr,
   3960	[GCC_JPEG_TBU_CLK] = &gcc_jpeg_tbu_clk.clkr,
   3961	[GCC_MDP_RT_TBU_CLK] = &gcc_mdp_rt_tbu_clk.clkr,
   3962	[GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr,
   3963	[GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,
   3964	[GCC_VENUS_1_TBU_CLK] = &gcc_venus_1_tbu_clk.clkr,
   3965	[GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr,
   3966	[GCC_VFE1_TBU_CLK] = &gcc_vfe1_tbu_clk.clkr,
   3967	[GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr,
   3968	[GCC_APS_0_CLK] = &gcc_aps_0_clk.clkr,
   3969	[GCC_APS_1_CLK] = &gcc_aps_1_clk.clkr,
   3970	[APS_0_CLK_SRC] = &aps_0_clk_src.clkr,
   3971	[APS_1_CLK_SRC] = &aps_1_clk_src.clkr,
   3972	[APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
   3973	[BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
   3974	[BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
   3975	[BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
   3976	[BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
   3977	[BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
   3978	[BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
   3979	[BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
   3980	[BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
   3981	[BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
   3982	[BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
   3983	[BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
   3984	[BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
   3985	[BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
   3986	[BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
   3987	[BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
   3988	[BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
   3989	[BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
   3990	[BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
   3991	[BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
   3992	[BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
   3993	[CCI_CLK_SRC] = &cci_clk_src.clkr,
   3994	[CPP_CLK_SRC] = &cpp_clk_src.clkr,
   3995	[CSI0_CLK_SRC] = &csi0_clk_src.clkr,
   3996	[CSI1_CLK_SRC] = &csi1_clk_src.clkr,
   3997	[CSI2_CLK_SRC] = &csi2_clk_src.clkr,
   3998	[CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
   3999	[CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
   4000	[JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
   4001	[MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
   4002	[MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
   4003	[MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,
   4004	[CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
   4005	[CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
   4006	[CAMSS_TOP_AHB_CLK_SRC] = &camss_top_ahb_clk_src.clkr,
   4007	[VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
   4008	[VFE1_CLK_SRC] = &vfe1_clk_src.clkr,
   4009	[CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
   4010	[GP1_CLK_SRC] = &gp1_clk_src.clkr,
   4011	[GP2_CLK_SRC] = &gp2_clk_src.clkr,
   4012	[GP3_CLK_SRC] = &gp3_clk_src.clkr,
   4013	[ESC0_CLK_SRC] = &esc0_clk_src.clkr,
   4014	[ESC1_CLK_SRC] = &esc1_clk_src.clkr,
   4015	[MDP_CLK_SRC] = &mdp_clk_src.clkr,
   4016	[VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
   4017	[PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
   4018	[RBCPR_GFX_CLK_SRC] = &rbcpr_gfx_clk_src.clkr,
   4019	[SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
   4020	[SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
   4021	[SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
   4022	[SDCC3_APPS_CLK_SRC] = &sdcc3_apps_clk_src.clkr,
   4023	[USB_FS_IC_CLK_SRC] = &usb_fs_ic_clk_src.clkr,
   4024	[USB_FS_SYSTEM_CLK_SRC] = &usb_fs_system_clk_src.clkr,
   4025	[USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
   4026	[VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
   4027	[GCC_MDSS_BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
   4028	[GCC_MDSS_BYTE1_CLK_SRC] = &byte1_clk_src.clkr,
   4029	[GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr,
   4030	[GCC_MDSS_BYTE1_CLK] = &gcc_mdss_byte1_clk.clkr,
   4031	[GCC_MDSS_PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
   4032	[GCC_MDSS_PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,
   4033	[GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr,
   4034	[GCC_MDSS_PCLK1_CLK] = &gcc_mdss_pclk1_clk.clkr,
   4035	[GCC_GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
   4036	[GCC_GFX3D_OXILI_CLK] = &gcc_oxili_gfx3d_clk.clkr,
   4037	[GCC_GFX3D_BIMC_CLK] = &gcc_bimc_gfx_clk.clkr,
   4038	[GCC_GFX3D_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr,
   4039	[GCC_GFX3D_OXILI_AON_CLK] = &gcc_oxili_aon_clk.clkr,
   4040	[GCC_GFX3D_OXILI_GMEM_CLK] = &gcc_oxili_gmem_clk.clkr,
   4041	[GCC_GFX3D_OXILI_TIMER_CLK] = &gcc_oxili_timer_clk.clkr,
   4042	[GCC_GFX3D_TBU0_CLK] = &gcc_gfx_tbu_clk.clkr,
   4043	[GCC_GFX3D_TBU1_CLK] = &gcc_gfx_1_tbu_clk.clkr,
   4044	[GCC_GFX3D_TCU_CLK] = &gcc_gfx_tcu_clk.clkr,
   4045	[GCC_GFX3D_GTCU_AHB_CLK] = &gcc_gtcu_ahb_clk.clkr,
   4046};
   4047
   4048static const struct qcom_reset_map gcc_msm8976_resets[] = {
   4049	[RST_CAMSS_MICRO_BCR]		= { 0x56008 },
   4050	[RST_USB_HS_BCR]		= { 0x41000 },
   4051	[RST_QUSB2_PHY_BCR]		= { 0x4103c },
   4052	[RST_USB2_HS_PHY_ONLY_BCR]	= { 0x41034 },
   4053	[RST_USB_HS_PHY_CFG_AHB_BCR]	= { 0x41038 },
   4054	[RST_USB_FS_BCR]		= { 0x3f000 },
   4055	[RST_CAMSS_CSI1PIX_BCR]		= { 0x4f054 },
   4056	[RST_CAMSS_CSI_VFE1_BCR]	= { 0x58070 },
   4057	[RST_CAMSS_VFE1_BCR]		= { 0x5807c },
   4058	[RST_CAMSS_CPP_BCR]		= { 0x58080 },
   4059	[RST_MSS_BCR]			= { 0x71000 },
   4060};
   4061
   4062static struct gdsc *gcc_msm8976_gdscs[] = {
   4063	[VENUS_GDSC] = &venus_gdsc,
   4064	[VENUS_CORE0_GDSC] = &venus_core0_gdsc,
   4065	[VENUS_CORE1_GDSC] = &venus_core1_gdsc,
   4066	[MDSS_GDSC] = &mdss_gdsc,
   4067	[JPEG_GDSC] = &jpeg_gdsc,
   4068	[VFE0_GDSC] = &vfe0_gdsc,
   4069	[VFE1_GDSC] = &vfe1_gdsc,
   4070	[CPP_GDSC] = &cpp_gdsc,
   4071	[OXILI_GX_GDSC] = &oxili_gx_gdsc,
   4072	[OXILI_CX_GDSC] = &oxili_cx_gdsc,
   4073};
   4074
   4075static const struct regmap_config gcc_msm8976_regmap_config = {
   4076	.reg_bits	= 32,
   4077	.reg_stride	= 4,
   4078	.val_bits	= 32,
   4079	.max_register	= 0x7fffc,
   4080	.fast_io	= true,
   4081};
   4082
   4083static const struct qcom_cc_desc gcc_msm8976_desc = {
   4084	.config		= &gcc_msm8976_regmap_config,
   4085	.clks		= gcc_msm8976_clocks,
   4086	.num_clks	= ARRAY_SIZE(gcc_msm8976_clocks),
   4087	.resets		= gcc_msm8976_resets,
   4088	.num_resets	= ARRAY_SIZE(gcc_msm8976_resets),
   4089	.gdscs		= gcc_msm8976_gdscs,
   4090	.num_gdscs	= ARRAY_SIZE(gcc_msm8976_gdscs),
   4091};
   4092
   4093static const struct of_device_id gcc_msm8976_match_table[] = {
   4094	{ .compatible = "qcom,gcc-msm8976" }, /* Also valid for 8x56 */
   4095	{ .compatible = "qcom,gcc-msm8976-v1.1" },
   4096	{ }
   4097};
   4098MODULE_DEVICE_TABLE(of, gcc_msm8976_match_table);
   4099
   4100static int gcc_msm8976_probe(struct platform_device *pdev)
   4101{
   4102	struct regmap *regmap;
   4103	int ret;
   4104
   4105	if (of_device_is_compatible(pdev->dev.of_node, "qcom,gcc-msm8976-v1.1")) {
   4106		sdcc1_apps_clk_src.parent_map = gcc_parent_map_v1_1;
   4107		sdcc1_apps_clk_src.freq_tbl = ftbl_sdcc1_8976_v1_1_apps_clk_src;
   4108		sdcc1_apps_clk_src.clkr.hw.init = &sdcc1_apps_clk_src_8976v1_1_init;
   4109	}
   4110
   4111	regmap = qcom_cc_map(pdev, &gcc_msm8976_desc);
   4112	if (IS_ERR(regmap))
   4113		return PTR_ERR(regmap);
   4114
   4115	/* Set Sleep and Wakeup cycles to 0 for GMEM clock */
   4116	ret = regmap_update_bits(regmap, gcc_oxili_gmem_clk.clkr.enable_reg, 0xff0, 0);
   4117	if (ret)
   4118		return ret;
   4119
   4120	clk_pll_configure_sr_hpm_lp(&gpll3, regmap, &gpll3_config, true);
   4121
   4122	/* Enable AUX2 clock for APSS */
   4123	ret = regmap_update_bits(regmap, 0x60000, BIT(2), BIT(2));
   4124	if (ret)
   4125		return ret;
   4126
   4127	/* Set Sleep cycles to 0 for OXILI clock */
   4128	ret = regmap_update_bits(regmap, gcc_oxili_gfx3d_clk.clkr.enable_reg, 0xf0, 0);
   4129	if (ret)
   4130		return ret;
   4131
   4132	return qcom_cc_really_probe(pdev, &gcc_msm8976_desc, regmap);
   4133}
   4134
   4135static struct platform_driver gcc_msm8976_driver = {
   4136	.probe = gcc_msm8976_probe,
   4137	.driver = {
   4138		.name = "qcom,gcc-msm8976",
   4139		.of_match_table = gcc_msm8976_match_table,
   4140	},
   4141};
   4142
   4143static int __init gcc_msm8976_init(void)
   4144{
   4145	return platform_driver_register(&gcc_msm8976_driver);
   4146}
   4147core_initcall(gcc_msm8976_init);
   4148
   4149static void __exit gcc_msm8976_exit(void)
   4150{
   4151	platform_driver_unregister(&gcc_msm8976_driver);
   4152}
   4153module_exit(gcc_msm8976_exit);
   4154
   4155MODULE_AUTHOR("AngeloGioacchino Del Regno <angelogioacchino.delregno@somainline.org>");
   4156MODULE_LICENSE("GPL v2");