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-msm8916.c (83126B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * Copyright 2015 Linaro Limited
      4 */
      5
      6#include <linux/kernel.h>
      7#include <linux/bitops.h>
      8#include <linux/err.h>
      9#include <linux/platform_device.h>
     10#include <linux/module.h>
     11#include <linux/of.h>
     12#include <linux/of_device.h>
     13#include <linux/clk-provider.h>
     14#include <linux/regmap.h>
     15#include <linux/reset-controller.h>
     16
     17#include <dt-bindings/clock/qcom,gcc-msm8916.h>
     18#include <dt-bindings/reset/qcom,gcc-msm8916.h>
     19
     20#include "common.h"
     21#include "clk-regmap.h"
     22#include "clk-pll.h"
     23#include "clk-rcg.h"
     24#include "clk-branch.h"
     25#include "reset.h"
     26#include "gdsc.h"
     27
     28enum {
     29	P_XO,
     30	P_GPLL0,
     31	P_GPLL0_AUX,
     32	P_BIMC,
     33	P_GPLL1,
     34	P_GPLL1_AUX,
     35	P_GPLL2,
     36	P_GPLL2_AUX,
     37	P_SLEEP_CLK,
     38	P_DSI0_PHYPLL_BYTE,
     39	P_DSI0_PHYPLL_DSI,
     40	P_EXT_PRI_I2S,
     41	P_EXT_SEC_I2S,
     42	P_EXT_MCLK,
     43};
     44
     45static const struct parent_map gcc_xo_gpll0_map[] = {
     46	{ P_XO, 0 },
     47	{ P_GPLL0, 1 },
     48};
     49
     50static const char * const gcc_xo_gpll0[] = {
     51	"xo",
     52	"gpll0_vote",
     53};
     54
     55static const struct parent_map gcc_xo_gpll0_bimc_map[] = {
     56	{ P_XO, 0 },
     57	{ P_GPLL0, 1 },
     58	{ P_BIMC, 2 },
     59};
     60
     61static const char * const gcc_xo_gpll0_bimc[] = {
     62	"xo",
     63	"gpll0_vote",
     64	"bimc_pll_vote",
     65};
     66
     67static const struct parent_map gcc_xo_gpll0a_gpll1_gpll2a_map[] = {
     68	{ P_XO, 0 },
     69	{ P_GPLL0_AUX, 3 },
     70	{ P_GPLL1, 1 },
     71	{ P_GPLL2_AUX, 2 },
     72};
     73
     74static const char * const gcc_xo_gpll0a_gpll1_gpll2a[] = {
     75	"xo",
     76	"gpll0_vote",
     77	"gpll1_vote",
     78	"gpll2_vote",
     79};
     80
     81static const struct parent_map gcc_xo_gpll0_gpll2_map[] = {
     82	{ P_XO, 0 },
     83	{ P_GPLL0, 1 },
     84	{ P_GPLL2, 2 },
     85};
     86
     87static const char * const gcc_xo_gpll0_gpll2[] = {
     88	"xo",
     89	"gpll0_vote",
     90	"gpll2_vote",
     91};
     92
     93static const struct parent_map gcc_xo_gpll0a_map[] = {
     94	{ P_XO, 0 },
     95	{ P_GPLL0_AUX, 2 },
     96};
     97
     98static const char * const gcc_xo_gpll0a[] = {
     99	"xo",
    100	"gpll0_vote",
    101};
    102
    103static const struct parent_map gcc_xo_gpll0_gpll1a_sleep_map[] = {
    104	{ P_XO, 0 },
    105	{ P_GPLL0, 1 },
    106	{ P_GPLL1_AUX, 2 },
    107	{ P_SLEEP_CLK, 6 },
    108};
    109
    110static const char * const gcc_xo_gpll0_gpll1a_sleep[] = {
    111	"xo",
    112	"gpll0_vote",
    113	"gpll1_vote",
    114	"sleep_clk",
    115};
    116
    117static const struct parent_map gcc_xo_gpll0_gpll1a_map[] = {
    118	{ P_XO, 0 },
    119	{ P_GPLL0, 1 },
    120	{ P_GPLL1_AUX, 2 },
    121};
    122
    123static const char * const gcc_xo_gpll0_gpll1a[] = {
    124	"xo",
    125	"gpll0_vote",
    126	"gpll1_vote",
    127};
    128
    129static const struct parent_map gcc_xo_dsibyte_map[] = {
    130	{ P_XO, 0, },
    131	{ P_DSI0_PHYPLL_BYTE, 2 },
    132};
    133
    134static const char * const gcc_xo_dsibyte[] = {
    135	"xo",
    136	"dsi0pllbyte",
    137};
    138
    139static const struct parent_map gcc_xo_gpll0a_dsibyte_map[] = {
    140	{ P_XO, 0 },
    141	{ P_GPLL0_AUX, 2 },
    142	{ P_DSI0_PHYPLL_BYTE, 1 },
    143};
    144
    145static const char * const gcc_xo_gpll0a_dsibyte[] = {
    146	"xo",
    147	"gpll0_vote",
    148	"dsi0pllbyte",
    149};
    150
    151static const struct parent_map gcc_xo_gpll0_dsiphy_map[] = {
    152	{ P_XO, 0 },
    153	{ P_GPLL0, 1 },
    154	{ P_DSI0_PHYPLL_DSI, 2 },
    155};
    156
    157static const char * const gcc_xo_gpll0_dsiphy[] = {
    158	"xo",
    159	"gpll0_vote",
    160	"dsi0pll",
    161};
    162
    163static const struct parent_map gcc_xo_gpll0a_dsiphy_map[] = {
    164	{ P_XO, 0 },
    165	{ P_GPLL0_AUX, 2 },
    166	{ P_DSI0_PHYPLL_DSI, 1 },
    167};
    168
    169static const char * const gcc_xo_gpll0a_dsiphy[] = {
    170	"xo",
    171	"gpll0_vote",
    172	"dsi0pll",
    173};
    174
    175static const struct parent_map gcc_xo_gpll0a_gpll1_gpll2_map[] = {
    176	{ P_XO, 0 },
    177	{ P_GPLL0_AUX, 1 },
    178	{ P_GPLL1, 3 },
    179	{ P_GPLL2, 2 },
    180};
    181
    182static const char * const gcc_xo_gpll0a_gpll1_gpll2[] = {
    183	"xo",
    184	"gpll0_vote",
    185	"gpll1_vote",
    186	"gpll2_vote",
    187};
    188
    189static const struct parent_map gcc_xo_gpll0_gpll1_sleep_map[] = {
    190	{ P_XO, 0 },
    191	{ P_GPLL0, 1 },
    192	{ P_GPLL1, 2 },
    193	{ P_SLEEP_CLK, 6 }
    194};
    195
    196static const char * const gcc_xo_gpll0_gpll1_sleep[] = {
    197	"xo",
    198	"gpll0_vote",
    199	"gpll1_vote",
    200	"sleep_clk",
    201};
    202
    203static const struct parent_map gcc_xo_gpll1_epi2s_emclk_sleep_map[] = {
    204	{ P_XO, 0 },
    205	{ P_GPLL1, 1 },
    206	{ P_EXT_PRI_I2S, 2 },
    207	{ P_EXT_MCLK, 3 },
    208	{ P_SLEEP_CLK, 6 }
    209};
    210
    211static const char * const gcc_xo_gpll1_epi2s_emclk_sleep[] = {
    212	"xo",
    213	"gpll1_vote",
    214	"ext_pri_i2s",
    215	"ext_mclk",
    216	"sleep_clk",
    217};
    218
    219static const struct parent_map gcc_xo_gpll1_esi2s_emclk_sleep_map[] = {
    220	{ P_XO, 0 },
    221	{ P_GPLL1, 1 },
    222	{ P_EXT_SEC_I2S, 2 },
    223	{ P_EXT_MCLK, 3 },
    224	{ P_SLEEP_CLK, 6 }
    225};
    226
    227static const char * const gcc_xo_gpll1_esi2s_emclk_sleep[] = {
    228	"xo",
    229	"gpll1_vote",
    230	"ext_sec_i2s",
    231	"ext_mclk",
    232	"sleep_clk",
    233};
    234
    235static const struct parent_map gcc_xo_sleep_map[] = {
    236	{ P_XO, 0 },
    237	{ P_SLEEP_CLK, 6 }
    238};
    239
    240static const char * const gcc_xo_sleep[] = {
    241	"xo",
    242	"sleep_clk",
    243};
    244
    245static const struct parent_map gcc_xo_gpll1_emclk_sleep_map[] = {
    246	{ P_XO, 0 },
    247	{ P_GPLL1, 1 },
    248	{ P_EXT_MCLK, 2 },
    249	{ P_SLEEP_CLK, 6 }
    250};
    251
    252static const char * const gcc_xo_gpll1_emclk_sleep[] = {
    253	"xo",
    254	"gpll1_vote",
    255	"ext_mclk",
    256	"sleep_clk",
    257};
    258
    259static struct clk_pll gpll0 = {
    260	.l_reg = 0x21004,
    261	.m_reg = 0x21008,
    262	.n_reg = 0x2100c,
    263	.config_reg = 0x21010,
    264	.mode_reg = 0x21000,
    265	.status_reg = 0x2101c,
    266	.status_bit = 17,
    267	.clkr.hw.init = &(struct clk_init_data){
    268		.name = "gpll0",
    269		.parent_names = (const char *[]){ "xo" },
    270		.num_parents = 1,
    271		.ops = &clk_pll_ops,
    272	},
    273};
    274
    275static struct clk_regmap gpll0_vote = {
    276	.enable_reg = 0x45000,
    277	.enable_mask = BIT(0),
    278	.hw.init = &(struct clk_init_data){
    279		.name = "gpll0_vote",
    280		.parent_names = (const char *[]){ "gpll0" },
    281		.num_parents = 1,
    282		.ops = &clk_pll_vote_ops,
    283	},
    284};
    285
    286static struct clk_pll gpll1 = {
    287	.l_reg = 0x20004,
    288	.m_reg = 0x20008,
    289	.n_reg = 0x2000c,
    290	.config_reg = 0x20010,
    291	.mode_reg = 0x20000,
    292	.status_reg = 0x2001c,
    293	.status_bit = 17,
    294	.clkr.hw.init = &(struct clk_init_data){
    295		.name = "gpll1",
    296		.parent_names = (const char *[]){ "xo" },
    297		.num_parents = 1,
    298		.ops = &clk_pll_ops,
    299	},
    300};
    301
    302static struct clk_regmap gpll1_vote = {
    303	.enable_reg = 0x45000,
    304	.enable_mask = BIT(1),
    305	.hw.init = &(struct clk_init_data){
    306		.name = "gpll1_vote",
    307		.parent_names = (const char *[]){ "gpll1" },
    308		.num_parents = 1,
    309		.ops = &clk_pll_vote_ops,
    310	},
    311};
    312
    313static struct clk_pll gpll2 = {
    314	.l_reg = 0x4a004,
    315	.m_reg = 0x4a008,
    316	.n_reg = 0x4a00c,
    317	.config_reg = 0x4a010,
    318	.mode_reg = 0x4a000,
    319	.status_reg = 0x4a01c,
    320	.status_bit = 17,
    321	.clkr.hw.init = &(struct clk_init_data){
    322		.name = "gpll2",
    323		.parent_names = (const char *[]){ "xo" },
    324		.num_parents = 1,
    325		.ops = &clk_pll_ops,
    326	},
    327};
    328
    329static struct clk_regmap gpll2_vote = {
    330	.enable_reg = 0x45000,
    331	.enable_mask = BIT(2),
    332	.hw.init = &(struct clk_init_data){
    333		.name = "gpll2_vote",
    334		.parent_names = (const char *[]){ "gpll2" },
    335		.num_parents = 1,
    336		.ops = &clk_pll_vote_ops,
    337	},
    338};
    339
    340static struct clk_pll bimc_pll = {
    341	.l_reg = 0x23004,
    342	.m_reg = 0x23008,
    343	.n_reg = 0x2300c,
    344	.config_reg = 0x23010,
    345	.mode_reg = 0x23000,
    346	.status_reg = 0x2301c,
    347	.status_bit = 17,
    348	.clkr.hw.init = &(struct clk_init_data){
    349		.name = "bimc_pll",
    350		.parent_names = (const char *[]){ "xo" },
    351		.num_parents = 1,
    352		.ops = &clk_pll_ops,
    353	},
    354};
    355
    356static struct clk_regmap bimc_pll_vote = {
    357	.enable_reg = 0x45000,
    358	.enable_mask = BIT(3),
    359	.hw.init = &(struct clk_init_data){
    360		.name = "bimc_pll_vote",
    361		.parent_names = (const char *[]){ "bimc_pll" },
    362		.num_parents = 1,
    363		.ops = &clk_pll_vote_ops,
    364	},
    365};
    366
    367static struct clk_rcg2 pcnoc_bfdcd_clk_src = {
    368	.cmd_rcgr = 0x27000,
    369	.hid_width = 5,
    370	.parent_map = gcc_xo_gpll0_bimc_map,
    371	.clkr.hw.init = &(struct clk_init_data){
    372		.name = "pcnoc_bfdcd_clk_src",
    373		.parent_names = gcc_xo_gpll0_bimc,
    374		.num_parents = 3,
    375		.ops = &clk_rcg2_ops,
    376	},
    377};
    378
    379static struct clk_rcg2 system_noc_bfdcd_clk_src = {
    380	.cmd_rcgr = 0x26004,
    381	.hid_width = 5,
    382	.parent_map = gcc_xo_gpll0_bimc_map,
    383	.clkr.hw.init = &(struct clk_init_data){
    384		.name = "system_noc_bfdcd_clk_src",
    385		.parent_names = gcc_xo_gpll0_bimc,
    386		.num_parents = 3,
    387		.ops = &clk_rcg2_ops,
    388	},
    389};
    390
    391static const struct freq_tbl ftbl_gcc_camss_ahb_clk[] = {
    392	F(40000000, P_GPLL0, 10, 1, 2),
    393	F(80000000, P_GPLL0, 10, 0, 0),
    394	{ }
    395};
    396
    397static struct clk_rcg2 camss_ahb_clk_src = {
    398	.cmd_rcgr = 0x5a000,
    399	.mnd_width = 8,
    400	.hid_width = 5,
    401	.parent_map = gcc_xo_gpll0_map,
    402	.freq_tbl = ftbl_gcc_camss_ahb_clk,
    403	.clkr.hw.init = &(struct clk_init_data){
    404		.name = "camss_ahb_clk_src",
    405		.parent_names = gcc_xo_gpll0,
    406		.num_parents = 2,
    407		.ops = &clk_rcg2_ops,
    408	},
    409};
    410
    411static const struct freq_tbl ftbl_apss_ahb_clk[] = {
    412	F(19200000, P_XO, 1, 0, 0),
    413	F(50000000, P_GPLL0, 16, 0, 0),
    414	F(100000000, P_GPLL0, 8, 0, 0),
    415	F(133330000, P_GPLL0, 6, 0, 0),
    416	{ }
    417};
    418
    419static struct clk_rcg2 apss_ahb_clk_src = {
    420	.cmd_rcgr = 0x46000,
    421	.hid_width = 5,
    422	.parent_map = gcc_xo_gpll0_map,
    423	.freq_tbl = ftbl_apss_ahb_clk,
    424	.clkr.hw.init = &(struct clk_init_data){
    425		.name = "apss_ahb_clk_src",
    426		.parent_names = gcc_xo_gpll0,
    427		.num_parents = 2,
    428		.ops = &clk_rcg2_ops,
    429	},
    430};
    431
    432static const struct freq_tbl ftbl_gcc_camss_csi0_1_clk[] = {
    433	F(100000000, P_GPLL0, 8, 0,	0),
    434	F(200000000, P_GPLL0, 4, 0,	0),
    435	{ }
    436};
    437
    438static struct clk_rcg2 csi0_clk_src = {
    439	.cmd_rcgr = 0x4e020,
    440	.hid_width = 5,
    441	.parent_map = gcc_xo_gpll0_map,
    442	.freq_tbl = ftbl_gcc_camss_csi0_1_clk,
    443	.clkr.hw.init = &(struct clk_init_data){
    444		.name = "csi0_clk_src",
    445		.parent_names = gcc_xo_gpll0,
    446		.num_parents = 2,
    447		.ops = &clk_rcg2_ops,
    448	},
    449};
    450
    451static struct clk_rcg2 csi1_clk_src = {
    452	.cmd_rcgr = 0x4f020,
    453	.hid_width = 5,
    454	.parent_map = gcc_xo_gpll0_map,
    455	.freq_tbl = ftbl_gcc_camss_csi0_1_clk,
    456	.clkr.hw.init = &(struct clk_init_data){
    457		.name = "csi1_clk_src",
    458		.parent_names = gcc_xo_gpll0,
    459		.num_parents = 2,
    460		.ops = &clk_rcg2_ops,
    461	},
    462};
    463
    464static const struct freq_tbl ftbl_gcc_oxili_gfx3d_clk[] = {
    465	F(19200000, P_XO, 1, 0, 0),
    466	F(50000000, P_GPLL0_AUX, 16, 0, 0),
    467	F(80000000, P_GPLL0_AUX, 10, 0, 0),
    468	F(100000000, P_GPLL0_AUX, 8, 0, 0),
    469	F(160000000, P_GPLL0_AUX, 5, 0, 0),
    470	F(177780000, P_GPLL0_AUX, 4.5, 0, 0),
    471	F(200000000, P_GPLL0_AUX, 4, 0, 0),
    472	F(266670000, P_GPLL0_AUX, 3, 0, 0),
    473	F(294912000, P_GPLL1, 3, 0, 0),
    474	F(310000000, P_GPLL2, 3, 0, 0),
    475	F(400000000, P_GPLL0_AUX, 2, 0, 0),
    476	{ }
    477};
    478
    479static struct clk_rcg2 gfx3d_clk_src = {
    480	.cmd_rcgr = 0x59000,
    481	.hid_width = 5,
    482	.parent_map = gcc_xo_gpll0a_gpll1_gpll2a_map,
    483	.freq_tbl = ftbl_gcc_oxili_gfx3d_clk,
    484	.clkr.hw.init = &(struct clk_init_data){
    485		.name = "gfx3d_clk_src",
    486		.parent_names = gcc_xo_gpll0a_gpll1_gpll2a,
    487		.num_parents = 4,
    488		.ops = &clk_rcg2_ops,
    489	},
    490};
    491
    492static const struct freq_tbl ftbl_gcc_camss_vfe0_clk[] = {
    493	F(50000000, P_GPLL0, 16, 0, 0),
    494	F(80000000, P_GPLL0, 10, 0, 0),
    495	F(100000000, P_GPLL0, 8, 0, 0),
    496	F(160000000, P_GPLL0, 5, 0, 0),
    497	F(177780000, P_GPLL0, 4.5, 0, 0),
    498	F(200000000, P_GPLL0, 4, 0, 0),
    499	F(266670000, P_GPLL0, 3, 0, 0),
    500	F(320000000, P_GPLL0, 2.5, 0, 0),
    501	F(400000000, P_GPLL0, 2, 0, 0),
    502	F(465000000, P_GPLL2, 2, 0, 0),
    503	{ }
    504};
    505
    506static struct clk_rcg2 vfe0_clk_src = {
    507	.cmd_rcgr = 0x58000,
    508	.hid_width = 5,
    509	.parent_map = gcc_xo_gpll0_gpll2_map,
    510	.freq_tbl = ftbl_gcc_camss_vfe0_clk,
    511	.clkr.hw.init = &(struct clk_init_data){
    512		.name = "vfe0_clk_src",
    513		.parent_names = gcc_xo_gpll0_gpll2,
    514		.num_parents = 3,
    515		.ops = &clk_rcg2_ops,
    516	},
    517};
    518
    519static const struct freq_tbl ftbl_gcc_blsp1_qup1_6_i2c_apps_clk[] = {
    520	F(19200000, P_XO, 1, 0, 0),
    521	F(50000000, P_GPLL0, 16, 0, 0),
    522	{ }
    523};
    524
    525static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
    526	.cmd_rcgr = 0x0200c,
    527	.hid_width = 5,
    528	.parent_map = gcc_xo_gpll0_map,
    529	.freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
    530	.clkr.hw.init = &(struct clk_init_data){
    531		.name = "blsp1_qup1_i2c_apps_clk_src",
    532		.parent_names = gcc_xo_gpll0,
    533		.num_parents = 2,
    534		.ops = &clk_rcg2_ops,
    535	},
    536};
    537
    538static const struct freq_tbl ftbl_gcc_blsp1_qup1_6_spi_apps_clk[] = {
    539	F(100000, P_XO, 16, 2, 24),
    540	F(250000, P_XO, 16, 5, 24),
    541	F(500000, P_XO, 8, 5, 24),
    542	F(960000, P_XO, 10, 1, 2),
    543	F(1000000, P_XO, 4, 5, 24),
    544	F(4800000, P_XO, 4, 0, 0),
    545	F(9600000, P_XO, 2, 0, 0),
    546	F(16000000, P_GPLL0, 10, 1, 5),
    547	F(19200000, P_XO, 1, 0, 0),
    548	F(25000000, P_GPLL0, 16, 1, 2),
    549	F(50000000, P_GPLL0, 16, 0, 0),
    550	{ }
    551};
    552
    553static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
    554	.cmd_rcgr = 0x02024,
    555	.mnd_width = 8,
    556	.hid_width = 5,
    557	.parent_map = gcc_xo_gpll0_map,
    558	.freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
    559	.clkr.hw.init = &(struct clk_init_data){
    560		.name = "blsp1_qup1_spi_apps_clk_src",
    561		.parent_names = gcc_xo_gpll0,
    562		.num_parents = 2,
    563		.ops = &clk_rcg2_ops,
    564	},
    565};
    566
    567static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
    568	.cmd_rcgr = 0x03000,
    569	.hid_width = 5,
    570	.parent_map = gcc_xo_gpll0_map,
    571	.freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
    572	.clkr.hw.init = &(struct clk_init_data){
    573		.name = "blsp1_qup2_i2c_apps_clk_src",
    574		.parent_names = gcc_xo_gpll0,
    575		.num_parents = 2,
    576		.ops = &clk_rcg2_ops,
    577	},
    578};
    579
    580static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
    581	.cmd_rcgr = 0x03014,
    582	.mnd_width = 8,
    583	.hid_width = 5,
    584	.parent_map = gcc_xo_gpll0_map,
    585	.freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
    586	.clkr.hw.init = &(struct clk_init_data){
    587		.name = "blsp1_qup2_spi_apps_clk_src",
    588		.parent_names = gcc_xo_gpll0,
    589		.num_parents = 2,
    590		.ops = &clk_rcg2_ops,
    591	},
    592};
    593
    594static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
    595	.cmd_rcgr = 0x04000,
    596	.hid_width = 5,
    597	.parent_map = gcc_xo_gpll0_map,
    598	.freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
    599	.clkr.hw.init = &(struct clk_init_data){
    600		.name = "blsp1_qup3_i2c_apps_clk_src",
    601		.parent_names = gcc_xo_gpll0,
    602		.num_parents = 2,
    603		.ops = &clk_rcg2_ops,
    604	},
    605};
    606
    607static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
    608	.cmd_rcgr = 0x04024,
    609	.mnd_width = 8,
    610	.hid_width = 5,
    611	.parent_map = gcc_xo_gpll0_map,
    612	.freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
    613	.clkr.hw.init = &(struct clk_init_data){
    614		.name = "blsp1_qup3_spi_apps_clk_src",
    615		.parent_names = gcc_xo_gpll0,
    616		.num_parents = 2,
    617		.ops = &clk_rcg2_ops,
    618	},
    619};
    620
    621static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
    622	.cmd_rcgr = 0x05000,
    623	.hid_width = 5,
    624	.parent_map = gcc_xo_gpll0_map,
    625	.freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
    626	.clkr.hw.init = &(struct clk_init_data){
    627		.name = "blsp1_qup4_i2c_apps_clk_src",
    628		.parent_names = gcc_xo_gpll0,
    629		.num_parents = 2,
    630		.ops = &clk_rcg2_ops,
    631	},
    632};
    633
    634static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
    635	.cmd_rcgr = 0x05024,
    636	.mnd_width = 8,
    637	.hid_width = 5,
    638	.parent_map = gcc_xo_gpll0_map,
    639	.freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
    640	.clkr.hw.init = &(struct clk_init_data){
    641		.name = "blsp1_qup4_spi_apps_clk_src",
    642		.parent_names = gcc_xo_gpll0,
    643		.num_parents = 2,
    644		.ops = &clk_rcg2_ops,
    645	},
    646};
    647
    648static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
    649	.cmd_rcgr = 0x06000,
    650	.hid_width = 5,
    651	.parent_map = gcc_xo_gpll0_map,
    652	.freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
    653	.clkr.hw.init = &(struct clk_init_data){
    654		.name = "blsp1_qup5_i2c_apps_clk_src",
    655		.parent_names = gcc_xo_gpll0,
    656		.num_parents = 2,
    657		.ops = &clk_rcg2_ops,
    658	},
    659};
    660
    661static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
    662	.cmd_rcgr = 0x06024,
    663	.mnd_width = 8,
    664	.hid_width = 5,
    665	.parent_map = gcc_xo_gpll0_map,
    666	.freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
    667	.clkr.hw.init = &(struct clk_init_data){
    668		.name = "blsp1_qup5_spi_apps_clk_src",
    669		.parent_names = gcc_xo_gpll0,
    670		.num_parents = 2,
    671		.ops = &clk_rcg2_ops,
    672	},
    673};
    674
    675static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
    676	.cmd_rcgr = 0x07000,
    677	.hid_width = 5,
    678	.parent_map = gcc_xo_gpll0_map,
    679	.freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
    680	.clkr.hw.init = &(struct clk_init_data){
    681		.name = "blsp1_qup6_i2c_apps_clk_src",
    682		.parent_names = gcc_xo_gpll0,
    683		.num_parents = 2,
    684		.ops = &clk_rcg2_ops,
    685	},
    686};
    687
    688static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
    689	.cmd_rcgr = 0x07024,
    690	.mnd_width = 8,
    691	.hid_width = 5,
    692	.parent_map = gcc_xo_gpll0_map,
    693	.freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
    694	.clkr.hw.init = &(struct clk_init_data){
    695		.name = "blsp1_qup6_spi_apps_clk_src",
    696		.parent_names = gcc_xo_gpll0,
    697		.num_parents = 2,
    698		.ops = &clk_rcg2_ops,
    699	},
    700};
    701
    702static const struct freq_tbl ftbl_gcc_blsp1_uart1_6_apps_clk[] = {
    703	F(3686400, P_GPLL0, 1, 72, 15625),
    704	F(7372800, P_GPLL0, 1, 144, 15625),
    705	F(14745600, P_GPLL0, 1, 288, 15625),
    706	F(16000000, P_GPLL0, 10, 1, 5),
    707	F(19200000, P_XO, 1, 0, 0),
    708	F(24000000, P_GPLL0, 1, 3, 100),
    709	F(25000000, P_GPLL0, 16, 1, 2),
    710	F(32000000, P_GPLL0, 1, 1, 25),
    711	F(40000000, P_GPLL0, 1, 1, 20),
    712	F(46400000, P_GPLL0, 1, 29, 500),
    713	F(48000000, P_GPLL0, 1, 3, 50),
    714	F(51200000, P_GPLL0, 1, 8, 125),
    715	F(56000000, P_GPLL0, 1, 7, 100),
    716	F(58982400, P_GPLL0, 1, 1152, 15625),
    717	F(60000000, P_GPLL0, 1, 3, 40),
    718	{ }
    719};
    720
    721static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
    722	.cmd_rcgr = 0x02044,
    723	.mnd_width = 16,
    724	.hid_width = 5,
    725	.parent_map = gcc_xo_gpll0_map,
    726	.freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
    727	.clkr.hw.init = &(struct clk_init_data){
    728		.name = "blsp1_uart1_apps_clk_src",
    729		.parent_names = gcc_xo_gpll0,
    730		.num_parents = 2,
    731		.ops = &clk_rcg2_ops,
    732	},
    733};
    734
    735static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
    736	.cmd_rcgr = 0x03034,
    737	.mnd_width = 16,
    738	.hid_width = 5,
    739	.parent_map = gcc_xo_gpll0_map,
    740	.freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
    741	.clkr.hw.init = &(struct clk_init_data){
    742		.name = "blsp1_uart2_apps_clk_src",
    743		.parent_names = gcc_xo_gpll0,
    744		.num_parents = 2,
    745		.ops = &clk_rcg2_ops,
    746	},
    747};
    748
    749static const struct freq_tbl ftbl_gcc_camss_cci_clk[] = {
    750	F(19200000,	P_XO, 1, 0,	0),
    751	{ }
    752};
    753
    754static struct clk_rcg2 cci_clk_src = {
    755	.cmd_rcgr = 0x51000,
    756	.mnd_width = 8,
    757	.hid_width = 5,
    758	.parent_map = gcc_xo_gpll0a_map,
    759	.freq_tbl = ftbl_gcc_camss_cci_clk,
    760	.clkr.hw.init = &(struct clk_init_data){
    761		.name = "cci_clk_src",
    762		.parent_names = gcc_xo_gpll0a,
    763		.num_parents = 2,
    764		.ops = &clk_rcg2_ops,
    765	},
    766};
    767
    768static const struct freq_tbl ftbl_gcc_camss_gp0_1_clk[] = {
    769	F(100000000, P_GPLL0, 8, 0, 0),
    770	F(200000000, P_GPLL0, 4, 0, 0),
    771	{ }
    772};
    773
    774static struct clk_rcg2 camss_gp0_clk_src = {
    775	.cmd_rcgr = 0x54000,
    776	.mnd_width = 8,
    777	.hid_width = 5,
    778	.parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
    779	.freq_tbl = ftbl_gcc_camss_gp0_1_clk,
    780	.clkr.hw.init = &(struct clk_init_data){
    781		.name = "camss_gp0_clk_src",
    782		.parent_names = gcc_xo_gpll0_gpll1a_sleep,
    783		.num_parents = 4,
    784		.ops = &clk_rcg2_ops,
    785	},
    786};
    787
    788static struct clk_rcg2 camss_gp1_clk_src = {
    789	.cmd_rcgr = 0x55000,
    790	.mnd_width = 8,
    791	.hid_width = 5,
    792	.parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
    793	.freq_tbl = ftbl_gcc_camss_gp0_1_clk,
    794	.clkr.hw.init = &(struct clk_init_data){
    795		.name = "camss_gp1_clk_src",
    796		.parent_names = gcc_xo_gpll0_gpll1a_sleep,
    797		.num_parents = 4,
    798		.ops = &clk_rcg2_ops,
    799	},
    800};
    801
    802static const struct freq_tbl ftbl_gcc_camss_jpeg0_clk[] = {
    803	F(133330000, P_GPLL0, 6, 0,	0),
    804	F(266670000, P_GPLL0, 3, 0,	0),
    805	F(320000000, P_GPLL0, 2.5, 0, 0),
    806	{ }
    807};
    808
    809static struct clk_rcg2 jpeg0_clk_src = {
    810	.cmd_rcgr = 0x57000,
    811	.hid_width = 5,
    812	.parent_map = gcc_xo_gpll0_map,
    813	.freq_tbl = ftbl_gcc_camss_jpeg0_clk,
    814	.clkr.hw.init = &(struct clk_init_data){
    815		.name = "jpeg0_clk_src",
    816		.parent_names = gcc_xo_gpll0,
    817		.num_parents = 2,
    818		.ops = &clk_rcg2_ops,
    819	},
    820};
    821
    822static const struct freq_tbl ftbl_gcc_camss_mclk0_1_clk[] = {
    823	F(9600000, P_XO, 2, 0, 0),
    824	F(23880000, P_GPLL0, 1, 2, 67),
    825	F(66670000, P_GPLL0, 12, 0, 0),
    826	{ }
    827};
    828
    829static struct clk_rcg2 mclk0_clk_src = {
    830	.cmd_rcgr = 0x52000,
    831	.mnd_width = 8,
    832	.hid_width = 5,
    833	.parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
    834	.freq_tbl = ftbl_gcc_camss_mclk0_1_clk,
    835	.clkr.hw.init = &(struct clk_init_data){
    836		.name = "mclk0_clk_src",
    837		.parent_names = gcc_xo_gpll0_gpll1a_sleep,
    838		.num_parents = 4,
    839		.ops = &clk_rcg2_ops,
    840	},
    841};
    842
    843static struct clk_rcg2 mclk1_clk_src = {
    844	.cmd_rcgr = 0x53000,
    845	.mnd_width = 8,
    846	.hid_width = 5,
    847	.parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
    848	.freq_tbl = ftbl_gcc_camss_mclk0_1_clk,
    849	.clkr.hw.init = &(struct clk_init_data){
    850		.name = "mclk1_clk_src",
    851		.parent_names = gcc_xo_gpll0_gpll1a_sleep,
    852		.num_parents = 4,
    853		.ops = &clk_rcg2_ops,
    854	},
    855};
    856
    857static const struct freq_tbl ftbl_gcc_camss_csi0_1phytimer_clk[] = {
    858	F(100000000, P_GPLL0, 8, 0,	0),
    859	F(200000000, P_GPLL0, 4, 0,	0),
    860	{ }
    861};
    862
    863static struct clk_rcg2 csi0phytimer_clk_src = {
    864	.cmd_rcgr = 0x4e000,
    865	.hid_width = 5,
    866	.parent_map = gcc_xo_gpll0_gpll1a_map,
    867	.freq_tbl = ftbl_gcc_camss_csi0_1phytimer_clk,
    868	.clkr.hw.init = &(struct clk_init_data){
    869		.name = "csi0phytimer_clk_src",
    870		.parent_names = gcc_xo_gpll0_gpll1a,
    871		.num_parents = 3,
    872		.ops = &clk_rcg2_ops,
    873	},
    874};
    875
    876static struct clk_rcg2 csi1phytimer_clk_src = {
    877	.cmd_rcgr = 0x4f000,
    878	.hid_width = 5,
    879	.parent_map = gcc_xo_gpll0_gpll1a_map,
    880	.freq_tbl = ftbl_gcc_camss_csi0_1phytimer_clk,
    881	.clkr.hw.init = &(struct clk_init_data){
    882		.name = "csi1phytimer_clk_src",
    883		.parent_names = gcc_xo_gpll0_gpll1a,
    884		.num_parents = 3,
    885		.ops = &clk_rcg2_ops,
    886	},
    887};
    888
    889static const struct freq_tbl ftbl_gcc_camss_cpp_clk[] = {
    890	F(160000000, P_GPLL0, 5, 0, 0),
    891	F(320000000, P_GPLL0, 2.5, 0, 0),
    892	F(465000000, P_GPLL2, 2, 0, 0),
    893	{ }
    894};
    895
    896static struct clk_rcg2 cpp_clk_src = {
    897	.cmd_rcgr = 0x58018,
    898	.hid_width = 5,
    899	.parent_map = gcc_xo_gpll0_gpll2_map,
    900	.freq_tbl = ftbl_gcc_camss_cpp_clk,
    901	.clkr.hw.init = &(struct clk_init_data){
    902		.name = "cpp_clk_src",
    903		.parent_names = gcc_xo_gpll0_gpll2,
    904		.num_parents = 3,
    905		.ops = &clk_rcg2_ops,
    906	},
    907};
    908
    909static const struct freq_tbl ftbl_gcc_crypto_clk[] = {
    910	F(50000000, P_GPLL0, 16, 0, 0),
    911	F(80000000, P_GPLL0, 10, 0, 0),
    912	F(100000000, P_GPLL0, 8, 0, 0),
    913	F(160000000, P_GPLL0, 5, 0, 0),
    914	{ }
    915};
    916
    917static struct clk_rcg2 crypto_clk_src = {
    918	.cmd_rcgr = 0x16004,
    919	.hid_width = 5,
    920	.parent_map = gcc_xo_gpll0_map,
    921	.freq_tbl = ftbl_gcc_crypto_clk,
    922	.clkr.hw.init = &(struct clk_init_data){
    923		.name = "crypto_clk_src",
    924		.parent_names = gcc_xo_gpll0,
    925		.num_parents = 2,
    926		.ops = &clk_rcg2_ops,
    927	},
    928};
    929
    930static const struct freq_tbl ftbl_gcc_gp1_3_clk[] = {
    931	F(19200000, P_XO, 1, 0,	0),
    932	{ }
    933};
    934
    935static struct clk_rcg2 gp1_clk_src = {
    936	.cmd_rcgr = 0x08004,
    937	.mnd_width = 8,
    938	.hid_width = 5,
    939	.parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
    940	.freq_tbl = ftbl_gcc_gp1_3_clk,
    941	.clkr.hw.init = &(struct clk_init_data){
    942		.name = "gp1_clk_src",
    943		.parent_names = gcc_xo_gpll0_gpll1a_sleep,
    944		.num_parents = 3,
    945		.ops = &clk_rcg2_ops,
    946	},
    947};
    948
    949static struct clk_rcg2 gp2_clk_src = {
    950	.cmd_rcgr = 0x09004,
    951	.mnd_width = 8,
    952	.hid_width = 5,
    953	.parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
    954	.freq_tbl = ftbl_gcc_gp1_3_clk,
    955	.clkr.hw.init = &(struct clk_init_data){
    956		.name = "gp2_clk_src",
    957		.parent_names = gcc_xo_gpll0_gpll1a_sleep,
    958		.num_parents = 3,
    959		.ops = &clk_rcg2_ops,
    960	},
    961};
    962
    963static struct clk_rcg2 gp3_clk_src = {
    964	.cmd_rcgr = 0x0a004,
    965	.mnd_width = 8,
    966	.hid_width = 5,
    967	.parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
    968	.freq_tbl = ftbl_gcc_gp1_3_clk,
    969	.clkr.hw.init = &(struct clk_init_data){
    970		.name = "gp3_clk_src",
    971		.parent_names = gcc_xo_gpll0_gpll1a_sleep,
    972		.num_parents = 3,
    973		.ops = &clk_rcg2_ops,
    974	},
    975};
    976
    977static struct clk_rcg2 byte0_clk_src = {
    978	.cmd_rcgr = 0x4d044,
    979	.hid_width = 5,
    980	.parent_map = gcc_xo_gpll0a_dsibyte_map,
    981	.clkr.hw.init = &(struct clk_init_data){
    982		.name = "byte0_clk_src",
    983		.parent_names = gcc_xo_gpll0a_dsibyte,
    984		.num_parents = 3,
    985		.ops = &clk_byte2_ops,
    986		.flags = CLK_SET_RATE_PARENT,
    987	},
    988};
    989
    990static const struct freq_tbl ftbl_gcc_mdss_esc0_clk[] = {
    991	F(19200000, P_XO, 1, 0, 0),
    992	{ }
    993};
    994
    995static struct clk_rcg2 esc0_clk_src = {
    996	.cmd_rcgr = 0x4d05c,
    997	.hid_width = 5,
    998	.parent_map = gcc_xo_dsibyte_map,
    999	.freq_tbl = ftbl_gcc_mdss_esc0_clk,
   1000	.clkr.hw.init = &(struct clk_init_data){
   1001		.name = "esc0_clk_src",
   1002		.parent_names = gcc_xo_dsibyte,
   1003		.num_parents = 2,
   1004		.ops = &clk_rcg2_ops,
   1005	},
   1006};
   1007
   1008static const struct freq_tbl ftbl_gcc_mdss_mdp_clk[] = {
   1009	F(50000000, P_GPLL0, 16, 0, 0),
   1010	F(80000000, P_GPLL0, 10, 0, 0),
   1011	F(100000000, P_GPLL0, 8, 0, 0),
   1012	F(160000000, P_GPLL0, 5, 0, 0),
   1013	F(177780000, P_GPLL0, 4.5, 0, 0),
   1014	F(200000000, P_GPLL0, 4, 0, 0),
   1015	F(266670000, P_GPLL0, 3, 0, 0),
   1016	F(320000000, P_GPLL0, 2.5, 0, 0),
   1017	{ }
   1018};
   1019
   1020static struct clk_rcg2 mdp_clk_src = {
   1021	.cmd_rcgr = 0x4d014,
   1022	.hid_width = 5,
   1023	.parent_map = gcc_xo_gpll0_dsiphy_map,
   1024	.freq_tbl = ftbl_gcc_mdss_mdp_clk,
   1025	.clkr.hw.init = &(struct clk_init_data){
   1026		.name = "mdp_clk_src",
   1027		.parent_names = gcc_xo_gpll0_dsiphy,
   1028		.num_parents = 3,
   1029		.ops = &clk_rcg2_ops,
   1030	},
   1031};
   1032
   1033static struct clk_rcg2 pclk0_clk_src = {
   1034	.cmd_rcgr = 0x4d000,
   1035	.mnd_width = 8,
   1036	.hid_width = 5,
   1037	.parent_map = gcc_xo_gpll0a_dsiphy_map,
   1038	.clkr.hw.init = &(struct clk_init_data){
   1039		.name = "pclk0_clk_src",
   1040		.parent_names = gcc_xo_gpll0a_dsiphy,
   1041		.num_parents = 3,
   1042		.ops = &clk_pixel_ops,
   1043		.flags = CLK_SET_RATE_PARENT,
   1044	},
   1045};
   1046
   1047static const struct freq_tbl ftbl_gcc_mdss_vsync_clk[] = {
   1048	F(19200000, P_XO, 1, 0,	0),
   1049	{ }
   1050};
   1051
   1052static struct clk_rcg2 vsync_clk_src = {
   1053	.cmd_rcgr = 0x4d02c,
   1054	.hid_width = 5,
   1055	.parent_map = gcc_xo_gpll0a_map,
   1056	.freq_tbl = ftbl_gcc_mdss_vsync_clk,
   1057	.clkr.hw.init = &(struct clk_init_data){
   1058		.name = "vsync_clk_src",
   1059		.parent_names = gcc_xo_gpll0a,
   1060		.num_parents = 2,
   1061		.ops = &clk_rcg2_ops,
   1062	},
   1063};
   1064
   1065static const struct freq_tbl ftbl_gcc_pdm2_clk[] = {
   1066	F(64000000, P_GPLL0, 12.5, 0, 0),
   1067	{ }
   1068};
   1069
   1070static struct clk_rcg2 pdm2_clk_src = {
   1071	.cmd_rcgr = 0x44010,
   1072	.hid_width = 5,
   1073	.parent_map = gcc_xo_gpll0_map,
   1074	.freq_tbl = ftbl_gcc_pdm2_clk,
   1075	.clkr.hw.init = &(struct clk_init_data){
   1076		.name = "pdm2_clk_src",
   1077		.parent_names = gcc_xo_gpll0,
   1078		.num_parents = 2,
   1079		.ops = &clk_rcg2_ops,
   1080	},
   1081};
   1082
   1083static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk[] = {
   1084	F(144000, P_XO, 16, 3, 25),
   1085	F(400000, P_XO, 12, 1, 4),
   1086	F(20000000, P_GPLL0, 10, 1, 4),
   1087	F(25000000, P_GPLL0, 16, 1, 2),
   1088	F(50000000, P_GPLL0, 16, 0, 0),
   1089	F(100000000, P_GPLL0, 8, 0, 0),
   1090	F(177770000, P_GPLL0, 4.5, 0, 0),
   1091	{ }
   1092};
   1093
   1094static struct clk_rcg2 sdcc1_apps_clk_src = {
   1095	.cmd_rcgr = 0x42004,
   1096	.mnd_width = 8,
   1097	.hid_width = 5,
   1098	.parent_map = gcc_xo_gpll0_map,
   1099	.freq_tbl = ftbl_gcc_sdcc1_apps_clk,
   1100	.clkr.hw.init = &(struct clk_init_data){
   1101		.name = "sdcc1_apps_clk_src",
   1102		.parent_names = gcc_xo_gpll0,
   1103		.num_parents = 2,
   1104		.ops = &clk_rcg2_floor_ops,
   1105	},
   1106};
   1107
   1108static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk[] = {
   1109	F(144000, P_XO, 16, 3, 25),
   1110	F(400000, P_XO, 12, 1, 4),
   1111	F(20000000, P_GPLL0, 10, 1, 4),
   1112	F(25000000, P_GPLL0, 16, 1, 2),
   1113	F(50000000, P_GPLL0, 16, 0, 0),
   1114	F(100000000, P_GPLL0, 8, 0, 0),
   1115	F(200000000, P_GPLL0, 4, 0, 0),
   1116	{ }
   1117};
   1118
   1119static struct clk_rcg2 sdcc2_apps_clk_src = {
   1120	.cmd_rcgr = 0x43004,
   1121	.mnd_width = 8,
   1122	.hid_width = 5,
   1123	.parent_map = gcc_xo_gpll0_map,
   1124	.freq_tbl = ftbl_gcc_sdcc2_apps_clk,
   1125	.clkr.hw.init = &(struct clk_init_data){
   1126		.name = "sdcc2_apps_clk_src",
   1127		.parent_names = gcc_xo_gpll0,
   1128		.num_parents = 2,
   1129		.ops = &clk_rcg2_floor_ops,
   1130	},
   1131};
   1132
   1133static const struct freq_tbl ftbl_gcc_apss_tcu_clk[] = {
   1134	F(155000000, P_GPLL2, 6, 0, 0),
   1135	F(310000000, P_GPLL2, 3, 0, 0),
   1136	F(400000000, P_GPLL0, 2, 0, 0),
   1137	{ }
   1138};
   1139
   1140static struct clk_rcg2 apss_tcu_clk_src = {
   1141	.cmd_rcgr = 0x1207c,
   1142	.hid_width = 5,
   1143	.parent_map = gcc_xo_gpll0a_gpll1_gpll2_map,
   1144	.freq_tbl = ftbl_gcc_apss_tcu_clk,
   1145	.clkr.hw.init = &(struct clk_init_data){
   1146		.name = "apss_tcu_clk_src",
   1147		.parent_names = gcc_xo_gpll0a_gpll1_gpll2,
   1148		.num_parents = 4,
   1149		.ops = &clk_rcg2_ops,
   1150	},
   1151};
   1152
   1153static const struct freq_tbl ftbl_gcc_bimc_gpu_clk[] = {
   1154	F(19200000, P_XO, 1, 0, 0),
   1155	F(100000000, P_GPLL0, 8, 0, 0),
   1156	F(200000000, P_GPLL0, 4, 0, 0),
   1157	F(266500000, P_BIMC, 4, 0, 0),
   1158	F(400000000, P_GPLL0, 2, 0, 0),
   1159	F(533000000, P_BIMC, 2, 0, 0),
   1160	{ }
   1161};
   1162
   1163static struct clk_rcg2 bimc_gpu_clk_src = {
   1164	.cmd_rcgr = 0x31028,
   1165	.hid_width = 5,
   1166	.parent_map = gcc_xo_gpll0_bimc_map,
   1167	.freq_tbl = ftbl_gcc_bimc_gpu_clk,
   1168	.clkr.hw.init = &(struct clk_init_data){
   1169		.name = "bimc_gpu_clk_src",
   1170		.parent_names = gcc_xo_gpll0_bimc,
   1171		.num_parents = 3,
   1172		.flags = CLK_GET_RATE_NOCACHE,
   1173		.ops = &clk_rcg2_ops,
   1174	},
   1175};
   1176
   1177static const struct freq_tbl ftbl_gcc_usb_hs_system_clk[] = {
   1178	F(80000000, P_GPLL0, 10, 0, 0),
   1179	{ }
   1180};
   1181
   1182static struct clk_rcg2 usb_hs_system_clk_src = {
   1183	.cmd_rcgr = 0x41010,
   1184	.hid_width = 5,
   1185	.parent_map = gcc_xo_gpll0_map,
   1186	.freq_tbl = ftbl_gcc_usb_hs_system_clk,
   1187	.clkr.hw.init = &(struct clk_init_data){
   1188		.name = "usb_hs_system_clk_src",
   1189		.parent_names = gcc_xo_gpll0,
   1190		.num_parents = 2,
   1191		.ops = &clk_rcg2_ops,
   1192	},
   1193};
   1194
   1195static const struct freq_tbl ftbl_gcc_ultaudio_ahb_clk[] = {
   1196	F(3200000, P_XO, 6, 0, 0),
   1197	F(6400000, P_XO, 3, 0, 0),
   1198	F(9600000, P_XO, 2, 0, 0),
   1199	F(19200000, P_XO, 1, 0, 0),
   1200	F(40000000, P_GPLL0, 10, 1, 2),
   1201	F(66670000, P_GPLL0, 12, 0, 0),
   1202	F(80000000, P_GPLL0, 10, 0, 0),
   1203	F(100000000, P_GPLL0, 8, 0, 0),
   1204	{ }
   1205};
   1206
   1207static struct clk_rcg2 ultaudio_ahbfabric_clk_src = {
   1208	.cmd_rcgr = 0x1c010,
   1209	.hid_width = 5,
   1210	.mnd_width = 8,
   1211	.parent_map = gcc_xo_gpll0_gpll1_sleep_map,
   1212	.freq_tbl = ftbl_gcc_ultaudio_ahb_clk,
   1213	.clkr.hw.init = &(struct clk_init_data){
   1214		.name = "ultaudio_ahbfabric_clk_src",
   1215		.parent_names = gcc_xo_gpll0_gpll1_sleep,
   1216		.num_parents = 4,
   1217		.ops = &clk_rcg2_ops,
   1218	},
   1219};
   1220
   1221static struct clk_branch gcc_ultaudio_ahbfabric_ixfabric_clk = {
   1222	.halt_reg = 0x1c028,
   1223	.clkr = {
   1224		.enable_reg = 0x1c028,
   1225		.enable_mask = BIT(0),
   1226		.hw.init = &(struct clk_init_data){
   1227			.name = "gcc_ultaudio_ahbfabric_ixfabric_clk",
   1228			.parent_names = (const char *[]){
   1229				"ultaudio_ahbfabric_clk_src",
   1230			},
   1231			.num_parents = 1,
   1232			.flags = CLK_SET_RATE_PARENT,
   1233			.ops = &clk_branch2_ops,
   1234		},
   1235	},
   1236};
   1237
   1238static struct clk_branch gcc_ultaudio_ahbfabric_ixfabric_lpm_clk = {
   1239	.halt_reg = 0x1c024,
   1240	.clkr = {
   1241		.enable_reg = 0x1c024,
   1242		.enable_mask = BIT(0),
   1243		.hw.init = &(struct clk_init_data){
   1244			.name = "gcc_ultaudio_ahbfabric_ixfabric_lpm_clk",
   1245			.parent_names = (const char *[]){
   1246				"ultaudio_ahbfabric_clk_src",
   1247			},
   1248			.num_parents = 1,
   1249			.flags = CLK_SET_RATE_PARENT,
   1250			.ops = &clk_branch2_ops,
   1251		},
   1252	},
   1253};
   1254
   1255static const struct freq_tbl ftbl_gcc_ultaudio_lpaif_i2s_clk[] = {
   1256	F(128000, P_XO, 10, 1, 15),
   1257	F(256000, P_XO, 5, 1, 15),
   1258	F(384000, P_XO, 5, 1, 10),
   1259	F(512000, P_XO, 5, 2, 15),
   1260	F(576000, P_XO, 5, 3, 20),
   1261	F(705600, P_GPLL1, 16, 1, 80),
   1262	F(768000, P_XO, 5, 1, 5),
   1263	F(800000, P_XO, 5, 5, 24),
   1264	F(1024000, P_XO, 5, 4, 15),
   1265	F(1152000, P_XO, 1, 3, 50),
   1266	F(1411200, P_GPLL1, 16, 1, 40),
   1267	F(1536000, P_XO, 1, 2, 25),
   1268	F(1600000, P_XO, 12, 0, 0),
   1269	F(1728000, P_XO, 5, 9, 20),
   1270	F(2048000, P_XO, 5, 8, 15),
   1271	F(2304000, P_XO, 5, 3, 5),
   1272	F(2400000, P_XO, 8, 0, 0),
   1273	F(2822400, P_GPLL1, 16, 1, 20),
   1274	F(3072000, P_XO, 5, 4, 5),
   1275	F(4096000, P_GPLL1, 9, 2, 49),
   1276	F(4800000, P_XO, 4, 0, 0),
   1277	F(5644800, P_GPLL1, 16, 1, 10),
   1278	F(6144000, P_GPLL1, 7, 1, 21),
   1279	F(8192000, P_GPLL1, 9, 4, 49),
   1280	F(9600000, P_XO, 2, 0, 0),
   1281	F(11289600, P_GPLL1, 16, 1, 5),
   1282	F(12288000, P_GPLL1, 7, 2, 21),
   1283	{ }
   1284};
   1285
   1286static struct clk_rcg2 ultaudio_lpaif_pri_i2s_clk_src = {
   1287	.cmd_rcgr = 0x1c054,
   1288	.hid_width = 5,
   1289	.mnd_width = 8,
   1290	.parent_map = gcc_xo_gpll1_epi2s_emclk_sleep_map,
   1291	.freq_tbl = ftbl_gcc_ultaudio_lpaif_i2s_clk,
   1292	.clkr.hw.init = &(struct clk_init_data){
   1293		.name = "ultaudio_lpaif_pri_i2s_clk_src",
   1294		.parent_names = gcc_xo_gpll1_epi2s_emclk_sleep,
   1295		.num_parents = 5,
   1296		.ops = &clk_rcg2_ops,
   1297	},
   1298};
   1299
   1300static struct clk_branch gcc_ultaudio_lpaif_pri_i2s_clk = {
   1301	.halt_reg = 0x1c068,
   1302	.clkr = {
   1303		.enable_reg = 0x1c068,
   1304		.enable_mask = BIT(0),
   1305		.hw.init = &(struct clk_init_data){
   1306			.name = "gcc_ultaudio_lpaif_pri_i2s_clk",
   1307			.parent_names = (const char *[]){
   1308				"ultaudio_lpaif_pri_i2s_clk_src",
   1309			},
   1310			.num_parents = 1,
   1311			.flags = CLK_SET_RATE_PARENT,
   1312			.ops = &clk_branch2_ops,
   1313		},
   1314	},
   1315};
   1316
   1317static struct clk_rcg2 ultaudio_lpaif_sec_i2s_clk_src = {
   1318	.cmd_rcgr = 0x1c06c,
   1319	.hid_width = 5,
   1320	.mnd_width = 8,
   1321	.parent_map = gcc_xo_gpll1_esi2s_emclk_sleep_map,
   1322	.freq_tbl = ftbl_gcc_ultaudio_lpaif_i2s_clk,
   1323	.clkr.hw.init = &(struct clk_init_data){
   1324		.name = "ultaudio_lpaif_sec_i2s_clk_src",
   1325		.parent_names = gcc_xo_gpll1_esi2s_emclk_sleep,
   1326		.num_parents = 5,
   1327		.ops = &clk_rcg2_ops,
   1328	},
   1329};
   1330
   1331static struct clk_branch gcc_ultaudio_lpaif_sec_i2s_clk = {
   1332	.halt_reg = 0x1c080,
   1333	.clkr = {
   1334		.enable_reg = 0x1c080,
   1335		.enable_mask = BIT(0),
   1336		.hw.init = &(struct clk_init_data){
   1337			.name = "gcc_ultaudio_lpaif_sec_i2s_clk",
   1338			.parent_names = (const char *[]){
   1339				"ultaudio_lpaif_sec_i2s_clk_src",
   1340			},
   1341			.num_parents = 1,
   1342			.flags = CLK_SET_RATE_PARENT,
   1343			.ops = &clk_branch2_ops,
   1344		},
   1345	},
   1346};
   1347
   1348static struct clk_rcg2 ultaudio_lpaif_aux_i2s_clk_src = {
   1349	.cmd_rcgr = 0x1c084,
   1350	.hid_width = 5,
   1351	.mnd_width = 8,
   1352	.parent_map = gcc_xo_gpll1_emclk_sleep_map,
   1353	.freq_tbl = ftbl_gcc_ultaudio_lpaif_i2s_clk,
   1354	.clkr.hw.init = &(struct clk_init_data){
   1355		.name = "ultaudio_lpaif_aux_i2s_clk_src",
   1356		.parent_names = gcc_xo_gpll1_esi2s_emclk_sleep,
   1357		.num_parents = 5,
   1358		.ops = &clk_rcg2_ops,
   1359	},
   1360};
   1361
   1362static struct clk_branch gcc_ultaudio_lpaif_aux_i2s_clk = {
   1363	.halt_reg = 0x1c098,
   1364	.clkr = {
   1365		.enable_reg = 0x1c098,
   1366		.enable_mask = BIT(0),
   1367		.hw.init = &(struct clk_init_data){
   1368			.name = "gcc_ultaudio_lpaif_aux_i2s_clk",
   1369			.parent_names = (const char *[]){
   1370				"ultaudio_lpaif_aux_i2s_clk_src",
   1371			},
   1372			.num_parents = 1,
   1373			.flags = CLK_SET_RATE_PARENT,
   1374			.ops = &clk_branch2_ops,
   1375		},
   1376	},
   1377};
   1378
   1379static const struct freq_tbl ftbl_gcc_ultaudio_xo_clk[] = {
   1380	F(19200000, P_XO, 1, 0, 0),
   1381	{ }
   1382};
   1383
   1384static struct clk_rcg2 ultaudio_xo_clk_src = {
   1385	.cmd_rcgr = 0x1c034,
   1386	.hid_width = 5,
   1387	.parent_map = gcc_xo_sleep_map,
   1388	.freq_tbl = ftbl_gcc_ultaudio_xo_clk,
   1389	.clkr.hw.init = &(struct clk_init_data){
   1390		.name = "ultaudio_xo_clk_src",
   1391		.parent_names = gcc_xo_sleep,
   1392		.num_parents = 2,
   1393		.ops = &clk_rcg2_ops,
   1394	},
   1395};
   1396
   1397static struct clk_branch gcc_ultaudio_avsync_xo_clk = {
   1398	.halt_reg = 0x1c04c,
   1399	.clkr = {
   1400		.enable_reg = 0x1c04c,
   1401		.enable_mask = BIT(0),
   1402		.hw.init = &(struct clk_init_data){
   1403			.name = "gcc_ultaudio_avsync_xo_clk",
   1404			.parent_names = (const char *[]){
   1405				"ultaudio_xo_clk_src",
   1406			},
   1407			.num_parents = 1,
   1408			.flags = CLK_SET_RATE_PARENT,
   1409			.ops = &clk_branch2_ops,
   1410		},
   1411	},
   1412};
   1413
   1414static struct clk_branch gcc_ultaudio_stc_xo_clk = {
   1415	.halt_reg = 0x1c050,
   1416	.clkr = {
   1417		.enable_reg = 0x1c050,
   1418		.enable_mask = BIT(0),
   1419		.hw.init = &(struct clk_init_data){
   1420			.name = "gcc_ultaudio_stc_xo_clk",
   1421			.parent_names = (const char *[]){
   1422				"ultaudio_xo_clk_src",
   1423			},
   1424			.num_parents = 1,
   1425			.flags = CLK_SET_RATE_PARENT,
   1426			.ops = &clk_branch2_ops,
   1427		},
   1428	},
   1429};
   1430
   1431static const struct freq_tbl ftbl_codec_clk[] = {
   1432	F(9600000, P_XO, 2, 0, 0),
   1433	F(12288000, P_XO, 1, 16, 25),
   1434	F(19200000, P_XO, 1, 0, 0),
   1435	F(11289600, P_EXT_MCLK, 1, 0, 0),
   1436	{ }
   1437};
   1438
   1439static struct clk_rcg2 codec_digcodec_clk_src = {
   1440	.cmd_rcgr = 0x1c09c,
   1441	.mnd_width = 8,
   1442	.hid_width = 5,
   1443	.parent_map = gcc_xo_gpll1_emclk_sleep_map,
   1444	.freq_tbl = ftbl_codec_clk,
   1445	.clkr.hw.init = &(struct clk_init_data){
   1446		.name = "codec_digcodec_clk_src",
   1447		.parent_names = gcc_xo_gpll1_emclk_sleep,
   1448		.num_parents = 4,
   1449		.ops = &clk_rcg2_ops,
   1450	},
   1451};
   1452
   1453static struct clk_branch gcc_codec_digcodec_clk = {
   1454	.halt_reg = 0x1c0b0,
   1455	.clkr = {
   1456		.enable_reg = 0x1c0b0,
   1457		.enable_mask = BIT(0),
   1458		.hw.init = &(struct clk_init_data){
   1459			.name = "gcc_ultaudio_codec_digcodec_clk",
   1460			.parent_names = (const char *[]){
   1461				"codec_digcodec_clk_src",
   1462			},
   1463			.num_parents = 1,
   1464			.flags = CLK_SET_RATE_PARENT,
   1465			.ops = &clk_branch2_ops,
   1466		},
   1467	},
   1468};
   1469
   1470static struct clk_branch gcc_ultaudio_pcnoc_mport_clk = {
   1471	.halt_reg = 0x1c000,
   1472	.clkr = {
   1473		.enable_reg = 0x1c000,
   1474		.enable_mask = BIT(0),
   1475		.hw.init = &(struct clk_init_data){
   1476			.name = "gcc_ultaudio_pcnoc_mport_clk",
   1477			.parent_names = (const char *[]){
   1478				"pcnoc_bfdcd_clk_src",
   1479			},
   1480			.num_parents = 1,
   1481			.ops = &clk_branch2_ops,
   1482		},
   1483	},
   1484};
   1485
   1486static struct clk_branch gcc_ultaudio_pcnoc_sway_clk = {
   1487	.halt_reg = 0x1c004,
   1488	.clkr = {
   1489		.enable_reg = 0x1c004,
   1490		.enable_mask = BIT(0),
   1491		.hw.init = &(struct clk_init_data){
   1492			.name = "gcc_ultaudio_pcnoc_sway_clk",
   1493			.parent_names = (const char *[]){
   1494				"pcnoc_bfdcd_clk_src",
   1495			},
   1496			.num_parents = 1,
   1497			.ops = &clk_branch2_ops,
   1498		},
   1499	},
   1500};
   1501
   1502static const struct freq_tbl ftbl_gcc_venus0_vcodec0_clk[] = {
   1503	F(100000000, P_GPLL0, 8, 0, 0),
   1504	F(160000000, P_GPLL0, 5, 0, 0),
   1505	F(228570000, P_GPLL0, 3.5, 0, 0),
   1506	{ }
   1507};
   1508
   1509static struct clk_rcg2 vcodec0_clk_src = {
   1510	.cmd_rcgr = 0x4C000,
   1511	.mnd_width = 8,
   1512	.hid_width = 5,
   1513	.parent_map = gcc_xo_gpll0_map,
   1514	.freq_tbl = ftbl_gcc_venus0_vcodec0_clk,
   1515	.clkr.hw.init = &(struct clk_init_data){
   1516		.name = "vcodec0_clk_src",
   1517		.parent_names = gcc_xo_gpll0,
   1518		.num_parents = 2,
   1519		.ops = &clk_rcg2_ops,
   1520	},
   1521};
   1522
   1523static struct clk_branch gcc_blsp1_ahb_clk = {
   1524	.halt_reg = 0x01008,
   1525	.halt_check = BRANCH_HALT_VOTED,
   1526	.clkr = {
   1527		.enable_reg = 0x45004,
   1528		.enable_mask = BIT(10),
   1529		.hw.init = &(struct clk_init_data){
   1530			.name = "gcc_blsp1_ahb_clk",
   1531			.parent_names = (const char *[]){
   1532				"pcnoc_bfdcd_clk_src",
   1533			},
   1534			.num_parents = 1,
   1535			.ops = &clk_branch2_ops,
   1536		},
   1537	},
   1538};
   1539
   1540static struct clk_branch gcc_blsp1_sleep_clk = {
   1541	.halt_reg = 0x01004,
   1542	.clkr = {
   1543		.enable_reg = 0x01004,
   1544		.enable_mask = BIT(0),
   1545		.hw.init = &(struct clk_init_data){
   1546			.name = "gcc_blsp1_sleep_clk",
   1547			.parent_names = (const char *[]){
   1548				"sleep_clk_src",
   1549			},
   1550			.num_parents = 1,
   1551			.flags = CLK_SET_RATE_PARENT,
   1552			.ops = &clk_branch2_ops,
   1553		},
   1554	},
   1555};
   1556
   1557static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
   1558	.halt_reg = 0x02008,
   1559	.clkr = {
   1560		.enable_reg = 0x02008,
   1561		.enable_mask = BIT(0),
   1562		.hw.init = &(struct clk_init_data){
   1563			.name = "gcc_blsp1_qup1_i2c_apps_clk",
   1564			.parent_names = (const char *[]){
   1565				"blsp1_qup1_i2c_apps_clk_src",
   1566			},
   1567			.num_parents = 1,
   1568			.flags = CLK_SET_RATE_PARENT,
   1569			.ops = &clk_branch2_ops,
   1570		},
   1571	},
   1572};
   1573
   1574static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
   1575	.halt_reg = 0x02004,
   1576	.clkr = {
   1577		.enable_reg = 0x02004,
   1578		.enable_mask = BIT(0),
   1579		.hw.init = &(struct clk_init_data){
   1580			.name = "gcc_blsp1_qup1_spi_apps_clk",
   1581			.parent_names = (const char *[]){
   1582				"blsp1_qup1_spi_apps_clk_src",
   1583			},
   1584			.num_parents = 1,
   1585			.flags = CLK_SET_RATE_PARENT,
   1586			.ops = &clk_branch2_ops,
   1587		},
   1588	},
   1589};
   1590
   1591static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
   1592	.halt_reg = 0x03010,
   1593	.clkr = {
   1594		.enable_reg = 0x03010,
   1595		.enable_mask = BIT(0),
   1596		.hw.init = &(struct clk_init_data){
   1597			.name = "gcc_blsp1_qup2_i2c_apps_clk",
   1598			.parent_names = (const char *[]){
   1599				"blsp1_qup2_i2c_apps_clk_src",
   1600			},
   1601			.num_parents = 1,
   1602			.flags = CLK_SET_RATE_PARENT,
   1603			.ops = &clk_branch2_ops,
   1604		},
   1605	},
   1606};
   1607
   1608static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
   1609	.halt_reg = 0x0300c,
   1610	.clkr = {
   1611		.enable_reg = 0x0300c,
   1612		.enable_mask = BIT(0),
   1613		.hw.init = &(struct clk_init_data){
   1614			.name = "gcc_blsp1_qup2_spi_apps_clk",
   1615			.parent_names = (const char *[]){
   1616				"blsp1_qup2_spi_apps_clk_src",
   1617			},
   1618			.num_parents = 1,
   1619			.flags = CLK_SET_RATE_PARENT,
   1620			.ops = &clk_branch2_ops,
   1621		},
   1622	},
   1623};
   1624
   1625static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
   1626	.halt_reg = 0x04020,
   1627	.clkr = {
   1628		.enable_reg = 0x04020,
   1629		.enable_mask = BIT(0),
   1630		.hw.init = &(struct clk_init_data){
   1631			.name = "gcc_blsp1_qup3_i2c_apps_clk",
   1632			.parent_names = (const char *[]){
   1633				"blsp1_qup3_i2c_apps_clk_src",
   1634			},
   1635			.num_parents = 1,
   1636			.flags = CLK_SET_RATE_PARENT,
   1637			.ops = &clk_branch2_ops,
   1638		},
   1639	},
   1640};
   1641
   1642static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
   1643	.halt_reg = 0x0401c,
   1644	.clkr = {
   1645		.enable_reg = 0x0401c,
   1646		.enable_mask = BIT(0),
   1647		.hw.init = &(struct clk_init_data){
   1648			.name = "gcc_blsp1_qup3_spi_apps_clk",
   1649			.parent_names = (const char *[]){
   1650				"blsp1_qup3_spi_apps_clk_src",
   1651			},
   1652			.num_parents = 1,
   1653			.flags = CLK_SET_RATE_PARENT,
   1654			.ops = &clk_branch2_ops,
   1655		},
   1656	},
   1657};
   1658
   1659static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
   1660	.halt_reg = 0x05020,
   1661	.clkr = {
   1662		.enable_reg = 0x05020,
   1663		.enable_mask = BIT(0),
   1664		.hw.init = &(struct clk_init_data){
   1665			.name = "gcc_blsp1_qup4_i2c_apps_clk",
   1666			.parent_names = (const char *[]){
   1667				"blsp1_qup4_i2c_apps_clk_src",
   1668			},
   1669			.num_parents = 1,
   1670			.flags = CLK_SET_RATE_PARENT,
   1671			.ops = &clk_branch2_ops,
   1672		},
   1673	},
   1674};
   1675
   1676static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
   1677	.halt_reg = 0x0501c,
   1678	.clkr = {
   1679		.enable_reg = 0x0501c,
   1680		.enable_mask = BIT(0),
   1681		.hw.init = &(struct clk_init_data){
   1682			.name = "gcc_blsp1_qup4_spi_apps_clk",
   1683			.parent_names = (const char *[]){
   1684				"blsp1_qup4_spi_apps_clk_src",
   1685			},
   1686			.num_parents = 1,
   1687			.flags = CLK_SET_RATE_PARENT,
   1688			.ops = &clk_branch2_ops,
   1689		},
   1690	},
   1691};
   1692
   1693static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
   1694	.halt_reg = 0x06020,
   1695	.clkr = {
   1696		.enable_reg = 0x06020,
   1697		.enable_mask = BIT(0),
   1698		.hw.init = &(struct clk_init_data){
   1699			.name = "gcc_blsp1_qup5_i2c_apps_clk",
   1700			.parent_names = (const char *[]){
   1701				"blsp1_qup5_i2c_apps_clk_src",
   1702			},
   1703			.num_parents = 1,
   1704			.flags = CLK_SET_RATE_PARENT,
   1705			.ops = &clk_branch2_ops,
   1706		},
   1707	},
   1708};
   1709
   1710static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
   1711	.halt_reg = 0x0601c,
   1712	.clkr = {
   1713		.enable_reg = 0x0601c,
   1714		.enable_mask = BIT(0),
   1715		.hw.init = &(struct clk_init_data){
   1716			.name = "gcc_blsp1_qup5_spi_apps_clk",
   1717			.parent_names = (const char *[]){
   1718				"blsp1_qup5_spi_apps_clk_src",
   1719			},
   1720			.num_parents = 1,
   1721			.flags = CLK_SET_RATE_PARENT,
   1722			.ops = &clk_branch2_ops,
   1723		},
   1724	},
   1725};
   1726
   1727static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
   1728	.halt_reg = 0x07020,
   1729	.clkr = {
   1730		.enable_reg = 0x07020,
   1731		.enable_mask = BIT(0),
   1732		.hw.init = &(struct clk_init_data){
   1733			.name = "gcc_blsp1_qup6_i2c_apps_clk",
   1734			.parent_names = (const char *[]){
   1735				"blsp1_qup6_i2c_apps_clk_src",
   1736			},
   1737			.num_parents = 1,
   1738			.flags = CLK_SET_RATE_PARENT,
   1739			.ops = &clk_branch2_ops,
   1740		},
   1741	},
   1742};
   1743
   1744static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
   1745	.halt_reg = 0x0701c,
   1746	.clkr = {
   1747		.enable_reg = 0x0701c,
   1748		.enable_mask = BIT(0),
   1749		.hw.init = &(struct clk_init_data){
   1750			.name = "gcc_blsp1_qup6_spi_apps_clk",
   1751			.parent_names = (const char *[]){
   1752				"blsp1_qup6_spi_apps_clk_src",
   1753			},
   1754			.num_parents = 1,
   1755			.flags = CLK_SET_RATE_PARENT,
   1756			.ops = &clk_branch2_ops,
   1757		},
   1758	},
   1759};
   1760
   1761static struct clk_branch gcc_blsp1_uart1_apps_clk = {
   1762	.halt_reg = 0x0203c,
   1763	.clkr = {
   1764		.enable_reg = 0x0203c,
   1765		.enable_mask = BIT(0),
   1766		.hw.init = &(struct clk_init_data){
   1767			.name = "gcc_blsp1_uart1_apps_clk",
   1768			.parent_names = (const char *[]){
   1769				"blsp1_uart1_apps_clk_src",
   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_uart2_apps_clk = {
   1779	.halt_reg = 0x0302c,
   1780	.clkr = {
   1781		.enable_reg = 0x0302c,
   1782		.enable_mask = BIT(0),
   1783		.hw.init = &(struct clk_init_data){
   1784			.name = "gcc_blsp1_uart2_apps_clk",
   1785			.parent_names = (const char *[]){
   1786				"blsp1_uart2_apps_clk_src",
   1787			},
   1788			.num_parents = 1,
   1789			.flags = CLK_SET_RATE_PARENT,
   1790			.ops = &clk_branch2_ops,
   1791		},
   1792	},
   1793};
   1794
   1795static struct clk_branch gcc_boot_rom_ahb_clk = {
   1796	.halt_reg = 0x1300c,
   1797	.halt_check = BRANCH_HALT_VOTED,
   1798	.clkr = {
   1799		.enable_reg = 0x45004,
   1800		.enable_mask = BIT(7),
   1801		.hw.init = &(struct clk_init_data){
   1802			.name = "gcc_boot_rom_ahb_clk",
   1803			.parent_names = (const char *[]){
   1804				"pcnoc_bfdcd_clk_src",
   1805			},
   1806			.num_parents = 1,
   1807			.ops = &clk_branch2_ops,
   1808		},
   1809	},
   1810};
   1811
   1812static struct clk_branch gcc_camss_cci_ahb_clk = {
   1813	.halt_reg = 0x5101c,
   1814	.clkr = {
   1815		.enable_reg = 0x5101c,
   1816		.enable_mask = BIT(0),
   1817		.hw.init = &(struct clk_init_data){
   1818			.name = "gcc_camss_cci_ahb_clk",
   1819			.parent_names = (const char *[]){
   1820				"camss_ahb_clk_src",
   1821			},
   1822			.num_parents = 1,
   1823			.flags = CLK_SET_RATE_PARENT,
   1824			.ops = &clk_branch2_ops,
   1825		},
   1826	},
   1827};
   1828
   1829static struct clk_branch gcc_camss_cci_clk = {
   1830	.halt_reg = 0x51018,
   1831	.clkr = {
   1832		.enable_reg = 0x51018,
   1833		.enable_mask = BIT(0),
   1834		.hw.init = &(struct clk_init_data){
   1835			.name = "gcc_camss_cci_clk",
   1836			.parent_names = (const char *[]){
   1837				"cci_clk_src",
   1838			},
   1839			.num_parents = 1,
   1840			.flags = CLK_SET_RATE_PARENT,
   1841			.ops = &clk_branch2_ops,
   1842		},
   1843	},
   1844};
   1845
   1846static struct clk_branch gcc_camss_csi0_ahb_clk = {
   1847	.halt_reg = 0x4e040,
   1848	.clkr = {
   1849		.enable_reg = 0x4e040,
   1850		.enable_mask = BIT(0),
   1851		.hw.init = &(struct clk_init_data){
   1852			.name = "gcc_camss_csi0_ahb_clk",
   1853			.parent_names = (const char *[]){
   1854				"camss_ahb_clk_src",
   1855			},
   1856			.num_parents = 1,
   1857			.flags = CLK_SET_RATE_PARENT,
   1858			.ops = &clk_branch2_ops,
   1859		},
   1860	},
   1861};
   1862
   1863static struct clk_branch gcc_camss_csi0_clk = {
   1864	.halt_reg = 0x4e03c,
   1865	.clkr = {
   1866		.enable_reg = 0x4e03c,
   1867		.enable_mask = BIT(0),
   1868		.hw.init = &(struct clk_init_data){
   1869			.name = "gcc_camss_csi0_clk",
   1870			.parent_names = (const char *[]){
   1871				"csi0_clk_src",
   1872			},
   1873			.num_parents = 1,
   1874			.flags = CLK_SET_RATE_PARENT,
   1875			.ops = &clk_branch2_ops,
   1876		},
   1877	},
   1878};
   1879
   1880static struct clk_branch gcc_camss_csi0phy_clk = {
   1881	.halt_reg = 0x4e048,
   1882	.clkr = {
   1883		.enable_reg = 0x4e048,
   1884		.enable_mask = BIT(0),
   1885		.hw.init = &(struct clk_init_data){
   1886			.name = "gcc_camss_csi0phy_clk",
   1887			.parent_names = (const char *[]){
   1888				"csi0_clk_src",
   1889			},
   1890			.num_parents = 1,
   1891			.flags = CLK_SET_RATE_PARENT,
   1892			.ops = &clk_branch2_ops,
   1893		},
   1894	},
   1895};
   1896
   1897static struct clk_branch gcc_camss_csi0pix_clk = {
   1898	.halt_reg = 0x4e058,
   1899	.clkr = {
   1900		.enable_reg = 0x4e058,
   1901		.enable_mask = BIT(0),
   1902		.hw.init = &(struct clk_init_data){
   1903			.name = "gcc_camss_csi0pix_clk",
   1904			.parent_names = (const char *[]){
   1905				"csi0_clk_src",
   1906			},
   1907			.num_parents = 1,
   1908			.flags = CLK_SET_RATE_PARENT,
   1909			.ops = &clk_branch2_ops,
   1910		},
   1911	},
   1912};
   1913
   1914static struct clk_branch gcc_camss_csi0rdi_clk = {
   1915	.halt_reg = 0x4e050,
   1916	.clkr = {
   1917		.enable_reg = 0x4e050,
   1918		.enable_mask = BIT(0),
   1919		.hw.init = &(struct clk_init_data){
   1920			.name = "gcc_camss_csi0rdi_clk",
   1921			.parent_names = (const char *[]){
   1922				"csi0_clk_src",
   1923			},
   1924			.num_parents = 1,
   1925			.flags = CLK_SET_RATE_PARENT,
   1926			.ops = &clk_branch2_ops,
   1927		},
   1928	},
   1929};
   1930
   1931static struct clk_branch gcc_camss_csi1_ahb_clk = {
   1932	.halt_reg = 0x4f040,
   1933	.clkr = {
   1934		.enable_reg = 0x4f040,
   1935		.enable_mask = BIT(0),
   1936		.hw.init = &(struct clk_init_data){
   1937			.name = "gcc_camss_csi1_ahb_clk",
   1938			.parent_names = (const char *[]){
   1939				"camss_ahb_clk_src",
   1940			},
   1941			.num_parents = 1,
   1942			.flags = CLK_SET_RATE_PARENT,
   1943			.ops = &clk_branch2_ops,
   1944		},
   1945	},
   1946};
   1947
   1948static struct clk_branch gcc_camss_csi1_clk = {
   1949	.halt_reg = 0x4f03c,
   1950	.clkr = {
   1951		.enable_reg = 0x4f03c,
   1952		.enable_mask = BIT(0),
   1953		.hw.init = &(struct clk_init_data){
   1954			.name = "gcc_camss_csi1_clk",
   1955			.parent_names = (const char *[]){
   1956				"csi1_clk_src",
   1957			},
   1958			.num_parents = 1,
   1959			.flags = CLK_SET_RATE_PARENT,
   1960			.ops = &clk_branch2_ops,
   1961		},
   1962	},
   1963};
   1964
   1965static struct clk_branch gcc_camss_csi1phy_clk = {
   1966	.halt_reg = 0x4f048,
   1967	.clkr = {
   1968		.enable_reg = 0x4f048,
   1969		.enable_mask = BIT(0),
   1970		.hw.init = &(struct clk_init_data){
   1971			.name = "gcc_camss_csi1phy_clk",
   1972			.parent_names = (const char *[]){
   1973				"csi1_clk_src",
   1974			},
   1975			.num_parents = 1,
   1976			.flags = CLK_SET_RATE_PARENT,
   1977			.ops = &clk_branch2_ops,
   1978		},
   1979	},
   1980};
   1981
   1982static struct clk_branch gcc_camss_csi1pix_clk = {
   1983	.halt_reg = 0x4f058,
   1984	.clkr = {
   1985		.enable_reg = 0x4f058,
   1986		.enable_mask = BIT(0),
   1987		.hw.init = &(struct clk_init_data){
   1988			.name = "gcc_camss_csi1pix_clk",
   1989			.parent_names = (const char *[]){
   1990				"csi1_clk_src",
   1991			},
   1992			.num_parents = 1,
   1993			.flags = CLK_SET_RATE_PARENT,
   1994			.ops = &clk_branch2_ops,
   1995		},
   1996	},
   1997};
   1998
   1999static struct clk_branch gcc_camss_csi1rdi_clk = {
   2000	.halt_reg = 0x4f050,
   2001	.clkr = {
   2002		.enable_reg = 0x4f050,
   2003		.enable_mask = BIT(0),
   2004		.hw.init = &(struct clk_init_data){
   2005			.name = "gcc_camss_csi1rdi_clk",
   2006			.parent_names = (const char *[]){
   2007				"csi1_clk_src",
   2008			},
   2009			.num_parents = 1,
   2010			.flags = CLK_SET_RATE_PARENT,
   2011			.ops = &clk_branch2_ops,
   2012		},
   2013	},
   2014};
   2015
   2016static struct clk_branch gcc_camss_csi_vfe0_clk = {
   2017	.halt_reg = 0x58050,
   2018	.clkr = {
   2019		.enable_reg = 0x58050,
   2020		.enable_mask = BIT(0),
   2021		.hw.init = &(struct clk_init_data){
   2022			.name = "gcc_camss_csi_vfe0_clk",
   2023			.parent_names = (const char *[]){
   2024				"vfe0_clk_src",
   2025			},
   2026			.num_parents = 1,
   2027			.flags = CLK_SET_RATE_PARENT,
   2028			.ops = &clk_branch2_ops,
   2029		},
   2030	},
   2031};
   2032
   2033static struct clk_branch gcc_camss_gp0_clk = {
   2034	.halt_reg = 0x54018,
   2035	.clkr = {
   2036		.enable_reg = 0x54018,
   2037		.enable_mask = BIT(0),
   2038		.hw.init = &(struct clk_init_data){
   2039			.name = "gcc_camss_gp0_clk",
   2040			.parent_names = (const char *[]){
   2041				"camss_gp0_clk_src",
   2042			},
   2043			.num_parents = 1,
   2044			.flags = CLK_SET_RATE_PARENT,
   2045			.ops = &clk_branch2_ops,
   2046		},
   2047	},
   2048};
   2049
   2050static struct clk_branch gcc_camss_gp1_clk = {
   2051	.halt_reg = 0x55018,
   2052	.clkr = {
   2053		.enable_reg = 0x55018,
   2054		.enable_mask = BIT(0),
   2055		.hw.init = &(struct clk_init_data){
   2056			.name = "gcc_camss_gp1_clk",
   2057			.parent_names = (const char *[]){
   2058				"camss_gp1_clk_src",
   2059			},
   2060			.num_parents = 1,
   2061			.flags = CLK_SET_RATE_PARENT,
   2062			.ops = &clk_branch2_ops,
   2063		},
   2064	},
   2065};
   2066
   2067static struct clk_branch gcc_camss_ispif_ahb_clk = {
   2068	.halt_reg = 0x50004,
   2069	.clkr = {
   2070		.enable_reg = 0x50004,
   2071		.enable_mask = BIT(0),
   2072		.hw.init = &(struct clk_init_data){
   2073			.name = "gcc_camss_ispif_ahb_clk",
   2074			.parent_names = (const char *[]){
   2075				"camss_ahb_clk_src",
   2076			},
   2077			.num_parents = 1,
   2078			.flags = CLK_SET_RATE_PARENT,
   2079			.ops = &clk_branch2_ops,
   2080		},
   2081	},
   2082};
   2083
   2084static struct clk_branch gcc_camss_jpeg0_clk = {
   2085	.halt_reg = 0x57020,
   2086	.clkr = {
   2087		.enable_reg = 0x57020,
   2088		.enable_mask = BIT(0),
   2089		.hw.init = &(struct clk_init_data){
   2090			.name = "gcc_camss_jpeg0_clk",
   2091			.parent_names = (const char *[]){
   2092				"jpeg0_clk_src",
   2093			},
   2094			.num_parents = 1,
   2095			.flags = CLK_SET_RATE_PARENT,
   2096			.ops = &clk_branch2_ops,
   2097		},
   2098	},
   2099};
   2100
   2101static struct clk_branch gcc_camss_jpeg_ahb_clk = {
   2102	.halt_reg = 0x57024,
   2103	.clkr = {
   2104		.enable_reg = 0x57024,
   2105		.enable_mask = BIT(0),
   2106		.hw.init = &(struct clk_init_data){
   2107			.name = "gcc_camss_jpeg_ahb_clk",
   2108			.parent_names = (const char *[]){
   2109				"camss_ahb_clk_src",
   2110			},
   2111			.num_parents = 1,
   2112			.flags = CLK_SET_RATE_PARENT,
   2113			.ops = &clk_branch2_ops,
   2114		},
   2115	},
   2116};
   2117
   2118static struct clk_branch gcc_camss_jpeg_axi_clk = {
   2119	.halt_reg = 0x57028,
   2120	.clkr = {
   2121		.enable_reg = 0x57028,
   2122		.enable_mask = BIT(0),
   2123		.hw.init = &(struct clk_init_data){
   2124			.name = "gcc_camss_jpeg_axi_clk",
   2125			.parent_names = (const char *[]){
   2126				"system_noc_bfdcd_clk_src",
   2127			},
   2128			.num_parents = 1,
   2129			.flags = CLK_SET_RATE_PARENT,
   2130			.ops = &clk_branch2_ops,
   2131		},
   2132	},
   2133};
   2134
   2135static struct clk_branch gcc_camss_mclk0_clk = {
   2136	.halt_reg = 0x52018,
   2137	.clkr = {
   2138		.enable_reg = 0x52018,
   2139		.enable_mask = BIT(0),
   2140		.hw.init = &(struct clk_init_data){
   2141			.name = "gcc_camss_mclk0_clk",
   2142			.parent_names = (const char *[]){
   2143				"mclk0_clk_src",
   2144			},
   2145			.num_parents = 1,
   2146			.flags = CLK_SET_RATE_PARENT,
   2147			.ops = &clk_branch2_ops,
   2148		},
   2149	},
   2150};
   2151
   2152static struct clk_branch gcc_camss_mclk1_clk = {
   2153	.halt_reg = 0x53018,
   2154	.clkr = {
   2155		.enable_reg = 0x53018,
   2156		.enable_mask = BIT(0),
   2157		.hw.init = &(struct clk_init_data){
   2158			.name = "gcc_camss_mclk1_clk",
   2159			.parent_names = (const char *[]){
   2160				"mclk1_clk_src",
   2161			},
   2162			.num_parents = 1,
   2163			.flags = CLK_SET_RATE_PARENT,
   2164			.ops = &clk_branch2_ops,
   2165		},
   2166	},
   2167};
   2168
   2169static struct clk_branch gcc_camss_micro_ahb_clk = {
   2170	.halt_reg = 0x5600c,
   2171	.clkr = {
   2172		.enable_reg = 0x5600c,
   2173		.enable_mask = BIT(0),
   2174		.hw.init = &(struct clk_init_data){
   2175			.name = "gcc_camss_micro_ahb_clk",
   2176			.parent_names = (const char *[]){
   2177				"camss_ahb_clk_src",
   2178			},
   2179			.num_parents = 1,
   2180			.flags = CLK_SET_RATE_PARENT,
   2181			.ops = &clk_branch2_ops,
   2182		},
   2183	},
   2184};
   2185
   2186static struct clk_branch gcc_camss_csi0phytimer_clk = {
   2187	.halt_reg = 0x4e01c,
   2188	.clkr = {
   2189		.enable_reg = 0x4e01c,
   2190		.enable_mask = BIT(0),
   2191		.hw.init = &(struct clk_init_data){
   2192			.name = "gcc_camss_csi0phytimer_clk",
   2193			.parent_names = (const char *[]){
   2194				"csi0phytimer_clk_src",
   2195			},
   2196			.num_parents = 1,
   2197			.flags = CLK_SET_RATE_PARENT,
   2198			.ops = &clk_branch2_ops,
   2199		},
   2200	},
   2201};
   2202
   2203static struct clk_branch gcc_camss_csi1phytimer_clk = {
   2204	.halt_reg = 0x4f01c,
   2205	.clkr = {
   2206		.enable_reg = 0x4f01c,
   2207		.enable_mask = BIT(0),
   2208		.hw.init = &(struct clk_init_data){
   2209			.name = "gcc_camss_csi1phytimer_clk",
   2210			.parent_names = (const char *[]){
   2211				"csi1phytimer_clk_src",
   2212			},
   2213			.num_parents = 1,
   2214			.flags = CLK_SET_RATE_PARENT,
   2215			.ops = &clk_branch2_ops,
   2216		},
   2217	},
   2218};
   2219
   2220static struct clk_branch gcc_camss_ahb_clk = {
   2221	.halt_reg = 0x5a014,
   2222	.clkr = {
   2223		.enable_reg = 0x5a014,
   2224		.enable_mask = BIT(0),
   2225		.hw.init = &(struct clk_init_data){
   2226			.name = "gcc_camss_ahb_clk",
   2227			.parent_names = (const char *[]){
   2228				"camss_ahb_clk_src",
   2229			},
   2230			.num_parents = 1,
   2231			.flags = CLK_SET_RATE_PARENT,
   2232			.ops = &clk_branch2_ops,
   2233		},
   2234	},
   2235};
   2236
   2237static struct clk_branch gcc_camss_top_ahb_clk = {
   2238	.halt_reg = 0x56004,
   2239	.clkr = {
   2240		.enable_reg = 0x56004,
   2241		.enable_mask = BIT(0),
   2242		.hw.init = &(struct clk_init_data){
   2243			.name = "gcc_camss_top_ahb_clk",
   2244			.parent_names = (const char *[]){
   2245				"pcnoc_bfdcd_clk_src",
   2246			},
   2247			.num_parents = 1,
   2248			.flags = CLK_SET_RATE_PARENT,
   2249			.ops = &clk_branch2_ops,
   2250		},
   2251	},
   2252};
   2253
   2254static struct clk_branch gcc_camss_cpp_ahb_clk = {
   2255	.halt_reg = 0x58040,
   2256	.clkr = {
   2257		.enable_reg = 0x58040,
   2258		.enable_mask = BIT(0),
   2259		.hw.init = &(struct clk_init_data){
   2260			.name = "gcc_camss_cpp_ahb_clk",
   2261			.parent_names = (const char *[]){
   2262				"camss_ahb_clk_src",
   2263			},
   2264			.num_parents = 1,
   2265			.flags = CLK_SET_RATE_PARENT,
   2266			.ops = &clk_branch2_ops,
   2267		},
   2268	},
   2269};
   2270
   2271static struct clk_branch gcc_camss_cpp_clk = {
   2272	.halt_reg = 0x5803c,
   2273	.clkr = {
   2274		.enable_reg = 0x5803c,
   2275		.enable_mask = BIT(0),
   2276		.hw.init = &(struct clk_init_data){
   2277			.name = "gcc_camss_cpp_clk",
   2278			.parent_names = (const char *[]){
   2279				"cpp_clk_src",
   2280			},
   2281			.num_parents = 1,
   2282			.flags = CLK_SET_RATE_PARENT,
   2283			.ops = &clk_branch2_ops,
   2284		},
   2285	},
   2286};
   2287
   2288static struct clk_branch gcc_camss_vfe0_clk = {
   2289	.halt_reg = 0x58038,
   2290	.clkr = {
   2291		.enable_reg = 0x58038,
   2292		.enable_mask = BIT(0),
   2293		.hw.init = &(struct clk_init_data){
   2294			.name = "gcc_camss_vfe0_clk",
   2295			.parent_names = (const char *[]){
   2296				"vfe0_clk_src",
   2297			},
   2298			.num_parents = 1,
   2299			.flags = CLK_SET_RATE_PARENT,
   2300			.ops = &clk_branch2_ops,
   2301		},
   2302	},
   2303};
   2304
   2305static struct clk_branch gcc_camss_vfe_ahb_clk = {
   2306	.halt_reg = 0x58044,
   2307	.clkr = {
   2308		.enable_reg = 0x58044,
   2309		.enable_mask = BIT(0),
   2310		.hw.init = &(struct clk_init_data){
   2311			.name = "gcc_camss_vfe_ahb_clk",
   2312			.parent_names = (const char *[]){
   2313				"camss_ahb_clk_src",
   2314			},
   2315			.num_parents = 1,
   2316			.flags = CLK_SET_RATE_PARENT,
   2317			.ops = &clk_branch2_ops,
   2318		},
   2319	},
   2320};
   2321
   2322static struct clk_branch gcc_camss_vfe_axi_clk = {
   2323	.halt_reg = 0x58048,
   2324	.clkr = {
   2325		.enable_reg = 0x58048,
   2326		.enable_mask = BIT(0),
   2327		.hw.init = &(struct clk_init_data){
   2328			.name = "gcc_camss_vfe_axi_clk",
   2329			.parent_names = (const char *[]){
   2330				"system_noc_bfdcd_clk_src",
   2331			},
   2332			.num_parents = 1,
   2333			.flags = CLK_SET_RATE_PARENT,
   2334			.ops = &clk_branch2_ops,
   2335		},
   2336	},
   2337};
   2338
   2339static struct clk_branch gcc_crypto_ahb_clk = {
   2340	.halt_reg = 0x16024,
   2341	.halt_check = BRANCH_HALT_VOTED,
   2342	.clkr = {
   2343		.enable_reg = 0x45004,
   2344		.enable_mask = BIT(0),
   2345		.hw.init = &(struct clk_init_data){
   2346			.name = "gcc_crypto_ahb_clk",
   2347			.parent_names = (const char *[]){
   2348				"pcnoc_bfdcd_clk_src",
   2349			},
   2350			.num_parents = 1,
   2351			.flags = CLK_SET_RATE_PARENT,
   2352			.ops = &clk_branch2_ops,
   2353		},
   2354	},
   2355};
   2356
   2357static struct clk_branch gcc_crypto_axi_clk = {
   2358	.halt_reg = 0x16020,
   2359	.halt_check = BRANCH_HALT_VOTED,
   2360	.clkr = {
   2361		.enable_reg = 0x45004,
   2362		.enable_mask = BIT(1),
   2363		.hw.init = &(struct clk_init_data){
   2364			.name = "gcc_crypto_axi_clk",
   2365			.parent_names = (const char *[]){
   2366				"pcnoc_bfdcd_clk_src",
   2367			},
   2368			.num_parents = 1,
   2369			.flags = CLK_SET_RATE_PARENT,
   2370			.ops = &clk_branch2_ops,
   2371		},
   2372	},
   2373};
   2374
   2375static struct clk_branch gcc_crypto_clk = {
   2376	.halt_reg = 0x1601c,
   2377	.halt_check = BRANCH_HALT_VOTED,
   2378	.clkr = {
   2379		.enable_reg = 0x45004,
   2380		.enable_mask = BIT(2),
   2381		.hw.init = &(struct clk_init_data){
   2382			.name = "gcc_crypto_clk",
   2383			.parent_names = (const char *[]){
   2384				"crypto_clk_src",
   2385			},
   2386			.num_parents = 1,
   2387			.flags = CLK_SET_RATE_PARENT,
   2388			.ops = &clk_branch2_ops,
   2389		},
   2390	},
   2391};
   2392
   2393static struct clk_branch gcc_oxili_gmem_clk = {
   2394	.halt_reg = 0x59024,
   2395	.clkr = {
   2396		.enable_reg = 0x59024,
   2397		.enable_mask = BIT(0),
   2398		.hw.init = &(struct clk_init_data){
   2399			.name = "gcc_oxili_gmem_clk",
   2400			.parent_names = (const char *[]){
   2401				"gfx3d_clk_src",
   2402			},
   2403			.num_parents = 1,
   2404			.flags = CLK_SET_RATE_PARENT,
   2405			.ops = &clk_branch2_ops,
   2406		},
   2407	},
   2408};
   2409
   2410static struct clk_branch gcc_gp1_clk = {
   2411	.halt_reg = 0x08000,
   2412	.clkr = {
   2413		.enable_reg = 0x08000,
   2414		.enable_mask = BIT(0),
   2415		.hw.init = &(struct clk_init_data){
   2416			.name = "gcc_gp1_clk",
   2417			.parent_names = (const char *[]){
   2418				"gp1_clk_src",
   2419			},
   2420			.num_parents = 1,
   2421			.flags = CLK_SET_RATE_PARENT,
   2422			.ops = &clk_branch2_ops,
   2423		},
   2424	},
   2425};
   2426
   2427static struct clk_branch gcc_gp2_clk = {
   2428	.halt_reg = 0x09000,
   2429	.clkr = {
   2430		.enable_reg = 0x09000,
   2431		.enable_mask = BIT(0),
   2432		.hw.init = &(struct clk_init_data){
   2433			.name = "gcc_gp2_clk",
   2434			.parent_names = (const char *[]){
   2435				"gp2_clk_src",
   2436			},
   2437			.num_parents = 1,
   2438			.flags = CLK_SET_RATE_PARENT,
   2439			.ops = &clk_branch2_ops,
   2440		},
   2441	},
   2442};
   2443
   2444static struct clk_branch gcc_gp3_clk = {
   2445	.halt_reg = 0x0a000,
   2446	.clkr = {
   2447		.enable_reg = 0x0a000,
   2448		.enable_mask = BIT(0),
   2449		.hw.init = &(struct clk_init_data){
   2450			.name = "gcc_gp3_clk",
   2451			.parent_names = (const char *[]){
   2452				"gp3_clk_src",
   2453			},
   2454			.num_parents = 1,
   2455			.flags = CLK_SET_RATE_PARENT,
   2456			.ops = &clk_branch2_ops,
   2457		},
   2458	},
   2459};
   2460
   2461static struct clk_branch gcc_mdss_ahb_clk = {
   2462	.halt_reg = 0x4d07c,
   2463	.clkr = {
   2464		.enable_reg = 0x4d07c,
   2465		.enable_mask = BIT(0),
   2466		.hw.init = &(struct clk_init_data){
   2467			.name = "gcc_mdss_ahb_clk",
   2468			.parent_names = (const char *[]){
   2469				"pcnoc_bfdcd_clk_src",
   2470			},
   2471			.num_parents = 1,
   2472			.flags = CLK_SET_RATE_PARENT,
   2473			.ops = &clk_branch2_ops,
   2474		},
   2475	},
   2476};
   2477
   2478static struct clk_branch gcc_mdss_axi_clk = {
   2479	.halt_reg = 0x4d080,
   2480	.clkr = {
   2481		.enable_reg = 0x4d080,
   2482		.enable_mask = BIT(0),
   2483		.hw.init = &(struct clk_init_data){
   2484			.name = "gcc_mdss_axi_clk",
   2485			.parent_names = (const char *[]){
   2486				"system_noc_bfdcd_clk_src",
   2487			},
   2488			.num_parents = 1,
   2489			.flags = CLK_SET_RATE_PARENT,
   2490			.ops = &clk_branch2_ops,
   2491		},
   2492	},
   2493};
   2494
   2495static struct clk_branch gcc_mdss_byte0_clk = {
   2496	.halt_reg = 0x4d094,
   2497	.clkr = {
   2498		.enable_reg = 0x4d094,
   2499		.enable_mask = BIT(0),
   2500		.hw.init = &(struct clk_init_data){
   2501			.name = "gcc_mdss_byte0_clk",
   2502			.parent_names = (const char *[]){
   2503				"byte0_clk_src",
   2504			},
   2505			.num_parents = 1,
   2506			.flags = CLK_SET_RATE_PARENT,
   2507			.ops = &clk_branch2_ops,
   2508		},
   2509	},
   2510};
   2511
   2512static struct clk_branch gcc_mdss_esc0_clk = {
   2513	.halt_reg = 0x4d098,
   2514	.clkr = {
   2515		.enable_reg = 0x4d098,
   2516		.enable_mask = BIT(0),
   2517		.hw.init = &(struct clk_init_data){
   2518			.name = "gcc_mdss_esc0_clk",
   2519			.parent_names = (const char *[]){
   2520				"esc0_clk_src",
   2521			},
   2522			.num_parents = 1,
   2523			.flags = CLK_SET_RATE_PARENT,
   2524			.ops = &clk_branch2_ops,
   2525		},
   2526	},
   2527};
   2528
   2529static struct clk_branch gcc_mdss_mdp_clk = {
   2530	.halt_reg = 0x4D088,
   2531	.clkr = {
   2532		.enable_reg = 0x4D088,
   2533		.enable_mask = BIT(0),
   2534		.hw.init = &(struct clk_init_data){
   2535			.name = "gcc_mdss_mdp_clk",
   2536			.parent_names = (const char *[]){
   2537				"mdp_clk_src",
   2538			},
   2539			.num_parents = 1,
   2540			.flags = CLK_SET_RATE_PARENT,
   2541			.ops = &clk_branch2_ops,
   2542		},
   2543	},
   2544};
   2545
   2546static struct clk_branch gcc_mdss_pclk0_clk = {
   2547	.halt_reg = 0x4d084,
   2548	.clkr = {
   2549		.enable_reg = 0x4d084,
   2550		.enable_mask = BIT(0),
   2551		.hw.init = &(struct clk_init_data){
   2552			.name = "gcc_mdss_pclk0_clk",
   2553			.parent_names = (const char *[]){
   2554				"pclk0_clk_src",
   2555			},
   2556			.num_parents = 1,
   2557			.flags = CLK_SET_RATE_PARENT,
   2558			.ops = &clk_branch2_ops,
   2559		},
   2560	},
   2561};
   2562
   2563static struct clk_branch gcc_mdss_vsync_clk = {
   2564	.halt_reg = 0x4d090,
   2565	.clkr = {
   2566		.enable_reg = 0x4d090,
   2567		.enable_mask = BIT(0),
   2568		.hw.init = &(struct clk_init_data){
   2569			.name = "gcc_mdss_vsync_clk",
   2570			.parent_names = (const char *[]){
   2571				"vsync_clk_src",
   2572			},
   2573			.num_parents = 1,
   2574			.flags = CLK_SET_RATE_PARENT,
   2575			.ops = &clk_branch2_ops,
   2576		},
   2577	},
   2578};
   2579
   2580static struct clk_branch gcc_mss_cfg_ahb_clk = {
   2581	.halt_reg = 0x49000,
   2582	.clkr = {
   2583		.enable_reg = 0x49000,
   2584		.enable_mask = BIT(0),
   2585		.hw.init = &(struct clk_init_data){
   2586			.name = "gcc_mss_cfg_ahb_clk",
   2587			.parent_names = (const char *[]){
   2588				"pcnoc_bfdcd_clk_src",
   2589			},
   2590			.num_parents = 1,
   2591			.flags = CLK_SET_RATE_PARENT,
   2592			.ops = &clk_branch2_ops,
   2593		},
   2594	},
   2595};
   2596
   2597static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
   2598	.halt_reg = 0x49004,
   2599	.clkr = {
   2600		.enable_reg = 0x49004,
   2601		.enable_mask = BIT(0),
   2602		.hw.init = &(struct clk_init_data){
   2603			.name = "gcc_mss_q6_bimc_axi_clk",
   2604			.parent_names = (const char *[]){
   2605				"bimc_ddr_clk_src",
   2606			},
   2607			.num_parents = 1,
   2608			.flags = CLK_SET_RATE_PARENT,
   2609			.ops = &clk_branch2_ops,
   2610		},
   2611	},
   2612};
   2613
   2614static struct clk_branch gcc_oxili_ahb_clk = {
   2615	.halt_reg = 0x59028,
   2616	.clkr = {
   2617		.enable_reg = 0x59028,
   2618		.enable_mask = BIT(0),
   2619		.hw.init = &(struct clk_init_data){
   2620			.name = "gcc_oxili_ahb_clk",
   2621			.parent_names = (const char *[]){
   2622				"pcnoc_bfdcd_clk_src",
   2623			},
   2624			.num_parents = 1,
   2625			.flags = CLK_SET_RATE_PARENT,
   2626			.ops = &clk_branch2_ops,
   2627		},
   2628	},
   2629};
   2630
   2631static struct clk_branch gcc_oxili_gfx3d_clk = {
   2632	.halt_reg = 0x59020,
   2633	.clkr = {
   2634		.enable_reg = 0x59020,
   2635		.enable_mask = BIT(0),
   2636		.hw.init = &(struct clk_init_data){
   2637			.name = "gcc_oxili_gfx3d_clk",
   2638			.parent_names = (const char *[]){
   2639				"gfx3d_clk_src",
   2640			},
   2641			.num_parents = 1,
   2642			.flags = CLK_SET_RATE_PARENT,
   2643			.ops = &clk_branch2_ops,
   2644		},
   2645	},
   2646};
   2647
   2648static struct clk_branch gcc_pdm2_clk = {
   2649	.halt_reg = 0x4400c,
   2650	.clkr = {
   2651		.enable_reg = 0x4400c,
   2652		.enable_mask = BIT(0),
   2653		.hw.init = &(struct clk_init_data){
   2654			.name = "gcc_pdm2_clk",
   2655			.parent_names = (const char *[]){
   2656				"pdm2_clk_src",
   2657			},
   2658			.num_parents = 1,
   2659			.flags = CLK_SET_RATE_PARENT,
   2660			.ops = &clk_branch2_ops,
   2661		},
   2662	},
   2663};
   2664
   2665static struct clk_branch gcc_pdm_ahb_clk = {
   2666	.halt_reg = 0x44004,
   2667	.clkr = {
   2668		.enable_reg = 0x44004,
   2669		.enable_mask = BIT(0),
   2670		.hw.init = &(struct clk_init_data){
   2671			.name = "gcc_pdm_ahb_clk",
   2672			.parent_names = (const char *[]){
   2673				"pcnoc_bfdcd_clk_src",
   2674			},
   2675			.num_parents = 1,
   2676			.flags = CLK_SET_RATE_PARENT,
   2677			.ops = &clk_branch2_ops,
   2678		},
   2679	},
   2680};
   2681
   2682static struct clk_branch gcc_prng_ahb_clk = {
   2683	.halt_reg = 0x13004,
   2684	.halt_check = BRANCH_HALT_VOTED,
   2685	.clkr = {
   2686		.enable_reg = 0x45004,
   2687		.enable_mask = BIT(8),
   2688		.hw.init = &(struct clk_init_data){
   2689			.name = "gcc_prng_ahb_clk",
   2690			.parent_names = (const char *[]){
   2691				"pcnoc_bfdcd_clk_src",
   2692			},
   2693			.num_parents = 1,
   2694			.ops = &clk_branch2_ops,
   2695		},
   2696	},
   2697};
   2698
   2699static struct clk_branch gcc_sdcc1_ahb_clk = {
   2700	.halt_reg = 0x4201c,
   2701	.clkr = {
   2702		.enable_reg = 0x4201c,
   2703		.enable_mask = BIT(0),
   2704		.hw.init = &(struct clk_init_data){
   2705			.name = "gcc_sdcc1_ahb_clk",
   2706			.parent_names = (const char *[]){
   2707				"pcnoc_bfdcd_clk_src",
   2708			},
   2709			.num_parents = 1,
   2710			.flags = CLK_SET_RATE_PARENT,
   2711			.ops = &clk_branch2_ops,
   2712		},
   2713	},
   2714};
   2715
   2716static struct clk_branch gcc_sdcc1_apps_clk = {
   2717	.halt_reg = 0x42018,
   2718	.clkr = {
   2719		.enable_reg = 0x42018,
   2720		.enable_mask = BIT(0),
   2721		.hw.init = &(struct clk_init_data){
   2722			.name = "gcc_sdcc1_apps_clk",
   2723			.parent_names = (const char *[]){
   2724				"sdcc1_apps_clk_src",
   2725			},
   2726			.num_parents = 1,
   2727			.flags = CLK_SET_RATE_PARENT,
   2728			.ops = &clk_branch2_ops,
   2729		},
   2730	},
   2731};
   2732
   2733static struct clk_branch gcc_sdcc2_ahb_clk = {
   2734	.halt_reg = 0x4301c,
   2735	.clkr = {
   2736		.enable_reg = 0x4301c,
   2737		.enable_mask = BIT(0),
   2738		.hw.init = &(struct clk_init_data){
   2739			.name = "gcc_sdcc2_ahb_clk",
   2740			.parent_names = (const char *[]){
   2741				"pcnoc_bfdcd_clk_src",
   2742			},
   2743			.num_parents = 1,
   2744			.flags = CLK_SET_RATE_PARENT,
   2745			.ops = &clk_branch2_ops,
   2746		},
   2747	},
   2748};
   2749
   2750static struct clk_branch gcc_sdcc2_apps_clk = {
   2751	.halt_reg = 0x43018,
   2752	.clkr = {
   2753		.enable_reg = 0x43018,
   2754		.enable_mask = BIT(0),
   2755		.hw.init = &(struct clk_init_data){
   2756			.name = "gcc_sdcc2_apps_clk",
   2757			.parent_names = (const char *[]){
   2758				"sdcc2_apps_clk_src",
   2759			},
   2760			.num_parents = 1,
   2761			.flags = CLK_SET_RATE_PARENT,
   2762			.ops = &clk_branch2_ops,
   2763		},
   2764	},
   2765};
   2766
   2767static struct clk_rcg2 bimc_ddr_clk_src = {
   2768	.cmd_rcgr = 0x32004,
   2769	.hid_width = 5,
   2770	.parent_map = gcc_xo_gpll0_bimc_map,
   2771	.clkr.hw.init = &(struct clk_init_data){
   2772		.name = "bimc_ddr_clk_src",
   2773		.parent_names = gcc_xo_gpll0_bimc,
   2774		.num_parents = 3,
   2775		.ops = &clk_rcg2_ops,
   2776		.flags = CLK_GET_RATE_NOCACHE,
   2777	},
   2778};
   2779
   2780static struct clk_branch gcc_apss_tcu_clk = {
   2781	.halt_reg = 0x12018,
   2782	.clkr = {
   2783		.enable_reg = 0x4500c,
   2784		.enable_mask = BIT(1),
   2785		.hw.init = &(struct clk_init_data){
   2786			.name = "gcc_apss_tcu_clk",
   2787			.parent_names = (const char *[]){
   2788				"bimc_ddr_clk_src",
   2789			},
   2790			.num_parents = 1,
   2791			.ops = &clk_branch2_ops,
   2792		},
   2793	},
   2794};
   2795
   2796static struct clk_branch gcc_gfx_tcu_clk = {
   2797	.halt_reg = 0x12020,
   2798	.clkr = {
   2799		.enable_reg = 0x4500c,
   2800		.enable_mask = BIT(2),
   2801		.hw.init = &(struct clk_init_data){
   2802			.name = "gcc_gfx_tcu_clk",
   2803			.parent_names = (const char *[]){
   2804				"bimc_ddr_clk_src",
   2805			},
   2806			.num_parents = 1,
   2807			.ops = &clk_branch2_ops,
   2808		},
   2809	},
   2810};
   2811
   2812static struct clk_branch gcc_gtcu_ahb_clk = {
   2813	.halt_reg = 0x12044,
   2814	.clkr = {
   2815		.enable_reg = 0x4500c,
   2816		.enable_mask = BIT(13),
   2817		.hw.init = &(struct clk_init_data){
   2818			.name = "gcc_gtcu_ahb_clk",
   2819			.parent_names = (const char *[]){
   2820				"pcnoc_bfdcd_clk_src",
   2821			},
   2822			.num_parents = 1,
   2823			.flags = CLK_SET_RATE_PARENT,
   2824			.ops = &clk_branch2_ops,
   2825		},
   2826	},
   2827};
   2828
   2829static struct clk_branch gcc_bimc_gfx_clk = {
   2830	.halt_reg = 0x31024,
   2831	.clkr = {
   2832		.enable_reg = 0x31024,
   2833		.enable_mask = BIT(0),
   2834		.hw.init = &(struct clk_init_data){
   2835			.name = "gcc_bimc_gfx_clk",
   2836			.parent_names = (const char *[]){
   2837				"bimc_gpu_clk_src",
   2838			},
   2839			.num_parents = 1,
   2840			.flags = CLK_SET_RATE_PARENT,
   2841			.ops = &clk_branch2_ops,
   2842		},
   2843	},
   2844};
   2845
   2846static struct clk_branch gcc_bimc_gpu_clk = {
   2847	.halt_reg = 0x31040,
   2848	.clkr = {
   2849		.enable_reg = 0x31040,
   2850		.enable_mask = BIT(0),
   2851		.hw.init = &(struct clk_init_data){
   2852			.name = "gcc_bimc_gpu_clk",
   2853			.parent_names = (const char *[]){
   2854				"bimc_gpu_clk_src",
   2855			},
   2856			.num_parents = 1,
   2857			.flags = CLK_SET_RATE_PARENT,
   2858			.ops = &clk_branch2_ops,
   2859		},
   2860	},
   2861};
   2862
   2863static struct clk_branch gcc_jpeg_tbu_clk = {
   2864	.halt_reg = 0x12034,
   2865	.clkr = {
   2866		.enable_reg = 0x4500c,
   2867		.enable_mask = BIT(10),
   2868		.hw.init = &(struct clk_init_data){
   2869			.name = "gcc_jpeg_tbu_clk",
   2870			.parent_names = (const char *[]){
   2871				"system_noc_bfdcd_clk_src",
   2872			},
   2873			.num_parents = 1,
   2874			.flags = CLK_SET_RATE_PARENT,
   2875			.ops = &clk_branch2_ops,
   2876		},
   2877	},
   2878};
   2879
   2880static struct clk_branch gcc_mdp_tbu_clk = {
   2881	.halt_reg = 0x1201c,
   2882	.clkr = {
   2883		.enable_reg = 0x4500c,
   2884		.enable_mask = BIT(4),
   2885		.hw.init = &(struct clk_init_data){
   2886			.name = "gcc_mdp_tbu_clk",
   2887			.parent_names = (const char *[]){
   2888				"system_noc_bfdcd_clk_src",
   2889			},
   2890			.num_parents = 1,
   2891			.flags = CLK_SET_RATE_PARENT,
   2892			.ops = &clk_branch2_ops,
   2893		},
   2894	},
   2895};
   2896
   2897static struct clk_branch gcc_smmu_cfg_clk = {
   2898	.halt_reg = 0x12038,
   2899	.clkr = {
   2900		.enable_reg = 0x4500c,
   2901		.enable_mask = BIT(12),
   2902		.hw.init = &(struct clk_init_data){
   2903			.name = "gcc_smmu_cfg_clk",
   2904			.parent_names = (const char *[]){
   2905				"pcnoc_bfdcd_clk_src",
   2906			},
   2907			.num_parents = 1,
   2908			.flags = CLK_SET_RATE_PARENT,
   2909			.ops = &clk_branch2_ops,
   2910		},
   2911	},
   2912};
   2913
   2914static struct clk_branch gcc_venus_tbu_clk = {
   2915	.halt_reg = 0x12014,
   2916	.clkr = {
   2917		.enable_reg = 0x4500c,
   2918		.enable_mask = BIT(5),
   2919		.hw.init = &(struct clk_init_data){
   2920			.name = "gcc_venus_tbu_clk",
   2921			.parent_names = (const char *[]){
   2922				"system_noc_bfdcd_clk_src",
   2923			},
   2924			.num_parents = 1,
   2925			.flags = CLK_SET_RATE_PARENT,
   2926			.ops = &clk_branch2_ops,
   2927		},
   2928	},
   2929};
   2930
   2931static struct clk_branch gcc_vfe_tbu_clk = {
   2932	.halt_reg = 0x1203c,
   2933	.clkr = {
   2934		.enable_reg = 0x4500c,
   2935		.enable_mask = BIT(9),
   2936		.hw.init = &(struct clk_init_data){
   2937			.name = "gcc_vfe_tbu_clk",
   2938			.parent_names = (const char *[]){
   2939				"system_noc_bfdcd_clk_src",
   2940			},
   2941			.num_parents = 1,
   2942			.flags = CLK_SET_RATE_PARENT,
   2943			.ops = &clk_branch2_ops,
   2944		},
   2945	},
   2946};
   2947
   2948static struct clk_branch gcc_usb2a_phy_sleep_clk = {
   2949	.halt_reg = 0x4102c,
   2950	.clkr = {
   2951		.enable_reg = 0x4102c,
   2952		.enable_mask = BIT(0),
   2953		.hw.init = &(struct clk_init_data){
   2954			.name = "gcc_usb2a_phy_sleep_clk",
   2955			.parent_names = (const char *[]){
   2956				"sleep_clk_src",
   2957			},
   2958			.num_parents = 1,
   2959			.flags = CLK_SET_RATE_PARENT,
   2960			.ops = &clk_branch2_ops,
   2961		},
   2962	},
   2963};
   2964
   2965static struct clk_branch gcc_usb_hs_ahb_clk = {
   2966	.halt_reg = 0x41008,
   2967	.clkr = {
   2968		.enable_reg = 0x41008,
   2969		.enable_mask = BIT(0),
   2970		.hw.init = &(struct clk_init_data){
   2971			.name = "gcc_usb_hs_ahb_clk",
   2972			.parent_names = (const char *[]){
   2973				"pcnoc_bfdcd_clk_src",
   2974			},
   2975			.num_parents = 1,
   2976			.flags = CLK_SET_RATE_PARENT,
   2977			.ops = &clk_branch2_ops,
   2978		},
   2979	},
   2980};
   2981
   2982static struct clk_branch gcc_usb_hs_system_clk = {
   2983	.halt_reg = 0x41004,
   2984	.clkr = {
   2985		.enable_reg = 0x41004,
   2986		.enable_mask = BIT(0),
   2987		.hw.init = &(struct clk_init_data){
   2988			.name = "gcc_usb_hs_system_clk",
   2989			.parent_names = (const char *[]){
   2990				"usb_hs_system_clk_src",
   2991			},
   2992			.num_parents = 1,
   2993			.flags = CLK_SET_RATE_PARENT,
   2994			.ops = &clk_branch2_ops,
   2995		},
   2996	},
   2997};
   2998
   2999static struct clk_branch gcc_venus0_ahb_clk = {
   3000	.halt_reg = 0x4c020,
   3001	.clkr = {
   3002		.enable_reg = 0x4c020,
   3003		.enable_mask = BIT(0),
   3004		.hw.init = &(struct clk_init_data){
   3005			.name = "gcc_venus0_ahb_clk",
   3006			.parent_names = (const char *[]){
   3007				"pcnoc_bfdcd_clk_src",
   3008			},
   3009			.num_parents = 1,
   3010			.flags = CLK_SET_RATE_PARENT,
   3011			.ops = &clk_branch2_ops,
   3012		},
   3013	},
   3014};
   3015
   3016static struct clk_branch gcc_venus0_axi_clk = {
   3017	.halt_reg = 0x4c024,
   3018	.clkr = {
   3019		.enable_reg = 0x4c024,
   3020		.enable_mask = BIT(0),
   3021		.hw.init = &(struct clk_init_data){
   3022			.name = "gcc_venus0_axi_clk",
   3023			.parent_names = (const char *[]){
   3024				"system_noc_bfdcd_clk_src",
   3025			},
   3026			.num_parents = 1,
   3027			.flags = CLK_SET_RATE_PARENT,
   3028			.ops = &clk_branch2_ops,
   3029		},
   3030	},
   3031};
   3032
   3033static struct clk_branch gcc_venus0_vcodec0_clk = {
   3034	.halt_reg = 0x4c01c,
   3035	.clkr = {
   3036		.enable_reg = 0x4c01c,
   3037		.enable_mask = BIT(0),
   3038		.hw.init = &(struct clk_init_data){
   3039			.name = "gcc_venus0_vcodec0_clk",
   3040			.parent_names = (const char *[]){
   3041				"vcodec0_clk_src",
   3042			},
   3043			.num_parents = 1,
   3044			.flags = CLK_SET_RATE_PARENT,
   3045			.ops = &clk_branch2_ops,
   3046		},
   3047	},
   3048};
   3049
   3050static struct gdsc venus_gdsc = {
   3051	.gdscr = 0x4c018,
   3052	.pd = {
   3053		.name = "venus",
   3054	},
   3055	.pwrsts = PWRSTS_OFF_ON,
   3056};
   3057
   3058static struct gdsc mdss_gdsc = {
   3059	.gdscr = 0x4d078,
   3060	.pd = {
   3061		.name = "mdss",
   3062	},
   3063	.pwrsts = PWRSTS_OFF_ON,
   3064};
   3065
   3066static struct gdsc jpeg_gdsc = {
   3067	.gdscr = 0x5701c,
   3068	.pd = {
   3069		.name = "jpeg",
   3070	},
   3071	.pwrsts = PWRSTS_OFF_ON,
   3072};
   3073
   3074static struct gdsc vfe_gdsc = {
   3075	.gdscr = 0x58034,
   3076	.pd = {
   3077		.name = "vfe",
   3078	},
   3079	.pwrsts = PWRSTS_OFF_ON,
   3080};
   3081
   3082static struct gdsc oxili_gdsc = {
   3083	.gdscr = 0x5901c,
   3084	.pd = {
   3085		.name = "oxili",
   3086	},
   3087	.pwrsts = PWRSTS_OFF_ON,
   3088};
   3089
   3090static struct clk_regmap *gcc_msm8916_clocks[] = {
   3091	[GPLL0] = &gpll0.clkr,
   3092	[GPLL0_VOTE] = &gpll0_vote,
   3093	[BIMC_PLL] = &bimc_pll.clkr,
   3094	[BIMC_PLL_VOTE] = &bimc_pll_vote,
   3095	[GPLL1] = &gpll1.clkr,
   3096	[GPLL1_VOTE] = &gpll1_vote,
   3097	[GPLL2] = &gpll2.clkr,
   3098	[GPLL2_VOTE] = &gpll2_vote,
   3099	[PCNOC_BFDCD_CLK_SRC] = &pcnoc_bfdcd_clk_src.clkr,
   3100	[SYSTEM_NOC_BFDCD_CLK_SRC] = &system_noc_bfdcd_clk_src.clkr,
   3101	[CAMSS_AHB_CLK_SRC] = &camss_ahb_clk_src.clkr,
   3102	[APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
   3103	[CSI0_CLK_SRC] = &csi0_clk_src.clkr,
   3104	[CSI1_CLK_SRC] = &csi1_clk_src.clkr,
   3105	[GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
   3106	[VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
   3107	[BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
   3108	[BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
   3109	[BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
   3110	[BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
   3111	[BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
   3112	[BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
   3113	[BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
   3114	[BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
   3115	[BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
   3116	[BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
   3117	[BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
   3118	[BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
   3119	[BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
   3120	[BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
   3121	[CCI_CLK_SRC] = &cci_clk_src.clkr,
   3122	[CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
   3123	[CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
   3124	[JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
   3125	[MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
   3126	[MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
   3127	[CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
   3128	[CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
   3129	[CPP_CLK_SRC] = &cpp_clk_src.clkr,
   3130	[CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
   3131	[GP1_CLK_SRC] = &gp1_clk_src.clkr,
   3132	[GP2_CLK_SRC] = &gp2_clk_src.clkr,
   3133	[GP3_CLK_SRC] = &gp3_clk_src.clkr,
   3134	[BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
   3135	[ESC0_CLK_SRC] = &esc0_clk_src.clkr,
   3136	[MDP_CLK_SRC] = &mdp_clk_src.clkr,
   3137	[PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
   3138	[VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
   3139	[PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
   3140	[SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
   3141	[SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
   3142	[APSS_TCU_CLK_SRC] = &apss_tcu_clk_src.clkr,
   3143	[USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
   3144	[VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
   3145	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
   3146	[GCC_BLSP1_SLEEP_CLK] = &gcc_blsp1_sleep_clk.clkr,
   3147	[GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
   3148	[GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
   3149	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
   3150	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
   3151	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
   3152	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
   3153	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
   3154	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
   3155	[GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
   3156	[GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
   3157	[GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
   3158	[GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
   3159	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
   3160	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
   3161	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
   3162	[GCC_CAMSS_CCI_AHB_CLK] = &gcc_camss_cci_ahb_clk.clkr,
   3163	[GCC_CAMSS_CCI_CLK] = &gcc_camss_cci_clk.clkr,
   3164	[GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr,
   3165	[GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr,
   3166	[GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr,
   3167	[GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr,
   3168	[GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr,
   3169	[GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr,
   3170	[GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr,
   3171	[GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr,
   3172	[GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr,
   3173	[GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr,
   3174	[GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr,
   3175	[GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr,
   3176	[GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr,
   3177	[GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr,
   3178	[GCC_CAMSS_JPEG0_CLK] = &gcc_camss_jpeg0_clk.clkr,
   3179	[GCC_CAMSS_JPEG_AHB_CLK] = &gcc_camss_jpeg_ahb_clk.clkr,
   3180	[GCC_CAMSS_JPEG_AXI_CLK] = &gcc_camss_jpeg_axi_clk.clkr,
   3181	[GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
   3182	[GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
   3183	[GCC_CAMSS_MICRO_AHB_CLK] = &gcc_camss_micro_ahb_clk.clkr,
   3184	[GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
   3185	[GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
   3186	[GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr,
   3187	[GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
   3188	[GCC_CAMSS_CPP_AHB_CLK] = &gcc_camss_cpp_ahb_clk.clkr,
   3189	[GCC_CAMSS_CPP_CLK] = &gcc_camss_cpp_clk.clkr,
   3190	[GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr,
   3191	[GCC_CAMSS_VFE_AHB_CLK] = &gcc_camss_vfe_ahb_clk.clkr,
   3192	[GCC_CAMSS_VFE_AXI_CLK] = &gcc_camss_vfe_axi_clk.clkr,
   3193	[GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
   3194	[GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
   3195	[GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
   3196	[GCC_OXILI_GMEM_CLK] = &gcc_oxili_gmem_clk.clkr,
   3197	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
   3198	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
   3199	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
   3200	[GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr,
   3201	[GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr,
   3202	[GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr,
   3203	[GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr,
   3204	[GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr,
   3205	[GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr,
   3206	[GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr,
   3207	[GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
   3208	[GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr,
   3209	[GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr,
   3210	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
   3211	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
   3212	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
   3213	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
   3214	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
   3215	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
   3216	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
   3217	[GCC_GTCU_AHB_CLK] = &gcc_gtcu_ahb_clk.clkr,
   3218	[GCC_JPEG_TBU_CLK] = &gcc_jpeg_tbu_clk.clkr,
   3219	[GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr,
   3220	[GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,
   3221	[GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr,
   3222	[GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr,
   3223	[GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
   3224	[GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
   3225	[GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
   3226	[GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr,
   3227	[GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr,
   3228	[GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr,
   3229	[BIMC_DDR_CLK_SRC] = &bimc_ddr_clk_src.clkr,
   3230	[GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr,
   3231	[GCC_GFX_TCU_CLK] = &gcc_gfx_tcu_clk.clkr,
   3232	[BIMC_GPU_CLK_SRC] = &bimc_gpu_clk_src.clkr,
   3233	[GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
   3234	[GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr,
   3235	[ULTAUDIO_AHBFABRIC_CLK_SRC] = &ultaudio_ahbfabric_clk_src.clkr,
   3236	[ULTAUDIO_LPAIF_PRI_I2S_CLK_SRC] = &ultaudio_lpaif_pri_i2s_clk_src.clkr,
   3237	[ULTAUDIO_LPAIF_SEC_I2S_CLK_SRC] = &ultaudio_lpaif_sec_i2s_clk_src.clkr,
   3238	[ULTAUDIO_LPAIF_AUX_I2S_CLK_SRC] = &ultaudio_lpaif_aux_i2s_clk_src.clkr,
   3239	[ULTAUDIO_XO_CLK_SRC] = &ultaudio_xo_clk_src.clkr,
   3240	[CODEC_DIGCODEC_CLK_SRC] = &codec_digcodec_clk_src.clkr,
   3241	[GCC_ULTAUDIO_PCNOC_MPORT_CLK] = &gcc_ultaudio_pcnoc_mport_clk.clkr,
   3242	[GCC_ULTAUDIO_PCNOC_SWAY_CLK] = &gcc_ultaudio_pcnoc_sway_clk.clkr,
   3243	[GCC_ULTAUDIO_AVSYNC_XO_CLK] = &gcc_ultaudio_avsync_xo_clk.clkr,
   3244	[GCC_ULTAUDIO_STC_XO_CLK] = &gcc_ultaudio_stc_xo_clk.clkr,
   3245	[GCC_ULTAUDIO_AHBFABRIC_IXFABRIC_CLK] =	&gcc_ultaudio_ahbfabric_ixfabric_clk.clkr,
   3246	[GCC_ULTAUDIO_AHBFABRIC_IXFABRIC_LPM_CLK] = &gcc_ultaudio_ahbfabric_ixfabric_lpm_clk.clkr,
   3247	[GCC_ULTAUDIO_LPAIF_PRI_I2S_CLK] = &gcc_ultaudio_lpaif_pri_i2s_clk.clkr,
   3248	[GCC_ULTAUDIO_LPAIF_SEC_I2S_CLK] = &gcc_ultaudio_lpaif_sec_i2s_clk.clkr,
   3249	[GCC_ULTAUDIO_LPAIF_AUX_I2S_CLK] = &gcc_ultaudio_lpaif_aux_i2s_clk.clkr,
   3250	[GCC_CODEC_DIGCODEC_CLK] = &gcc_codec_digcodec_clk.clkr,
   3251	[GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
   3252};
   3253
   3254static struct gdsc *gcc_msm8916_gdscs[] = {
   3255	[VENUS_GDSC] = &venus_gdsc,
   3256	[MDSS_GDSC] = &mdss_gdsc,
   3257	[JPEG_GDSC] = &jpeg_gdsc,
   3258	[VFE_GDSC] = &vfe_gdsc,
   3259	[OXILI_GDSC] = &oxili_gdsc,
   3260};
   3261
   3262static const struct qcom_reset_map gcc_msm8916_resets[] = {
   3263	[GCC_BLSP1_BCR] = { 0x01000 },
   3264	[GCC_BLSP1_QUP1_BCR] = { 0x02000 },
   3265	[GCC_BLSP1_UART1_BCR] = { 0x02038 },
   3266	[GCC_BLSP1_QUP2_BCR] = { 0x03008 },
   3267	[GCC_BLSP1_UART2_BCR] = { 0x03028 },
   3268	[GCC_BLSP1_QUP3_BCR] = { 0x04018 },
   3269	[GCC_BLSP1_QUP4_BCR] = { 0x05018 },
   3270	[GCC_BLSP1_QUP5_BCR] = { 0x06018 },
   3271	[GCC_BLSP1_QUP6_BCR] = { 0x07018 },
   3272	[GCC_IMEM_BCR] = { 0x0e000 },
   3273	[GCC_SMMU_BCR] = { 0x12000 },
   3274	[GCC_APSS_TCU_BCR] = { 0x12050 },
   3275	[GCC_SMMU_XPU_BCR] = { 0x12054 },
   3276	[GCC_PCNOC_TBU_BCR] = { 0x12058 },
   3277	[GCC_PRNG_BCR] = { 0x13000 },
   3278	[GCC_BOOT_ROM_BCR] = { 0x13008 },
   3279	[GCC_CRYPTO_BCR] = { 0x16000 },
   3280	[GCC_SEC_CTRL_BCR] = { 0x1a000 },
   3281	[GCC_AUDIO_CORE_BCR] = { 0x1c008 },
   3282	[GCC_ULT_AUDIO_BCR] = { 0x1c0b4 },
   3283	[GCC_DEHR_BCR] = { 0x1f000 },
   3284	[GCC_SYSTEM_NOC_BCR] = { 0x26000 },
   3285	[GCC_PCNOC_BCR] = { 0x27018 },
   3286	[GCC_TCSR_BCR] = { 0x28000 },
   3287	[GCC_QDSS_BCR] = { 0x29000 },
   3288	[GCC_DCD_BCR] = { 0x2a000 },
   3289	[GCC_MSG_RAM_BCR] = { 0x2b000 },
   3290	[GCC_MPM_BCR] = { 0x2c000 },
   3291	[GCC_SPMI_BCR] = { 0x2e000 },
   3292	[GCC_SPDM_BCR] = { 0x2f000 },
   3293	[GCC_MM_SPDM_BCR] = { 0x2f024 },
   3294	[GCC_BIMC_BCR] = { 0x31000 },
   3295	[GCC_RBCPR_BCR] = { 0x33000 },
   3296	[GCC_TLMM_BCR] = { 0x34000 },
   3297	[GCC_USB_HS_BCR] = { 0x41000 },
   3298	[GCC_USB2A_PHY_BCR] = { 0x41028 },
   3299	[GCC_SDCC1_BCR] = { 0x42000 },
   3300	[GCC_SDCC2_BCR] = { 0x43000 },
   3301	[GCC_PDM_BCR] = { 0x44000 },
   3302	[GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x47000 },
   3303	[GCC_PCNOC_BUS_TIMEOUT0_BCR] = { 0x48000 },
   3304	[GCC_PCNOC_BUS_TIMEOUT1_BCR] = { 0x48008 },
   3305	[GCC_PCNOC_BUS_TIMEOUT2_BCR] = { 0x48010 },
   3306	[GCC_PCNOC_BUS_TIMEOUT3_BCR] = { 0x48018 },
   3307	[GCC_PCNOC_BUS_TIMEOUT4_BCR] = { 0x48020 },
   3308	[GCC_PCNOC_BUS_TIMEOUT5_BCR] = { 0x48028 },
   3309	[GCC_PCNOC_BUS_TIMEOUT6_BCR] = { 0x48030 },
   3310	[GCC_PCNOC_BUS_TIMEOUT7_BCR] = { 0x48038 },
   3311	[GCC_PCNOC_BUS_TIMEOUT8_BCR] = { 0x48040 },
   3312	[GCC_PCNOC_BUS_TIMEOUT9_BCR] = { 0x48048 },
   3313	[GCC_MMSS_BCR] = { 0x4b000 },
   3314	[GCC_VENUS0_BCR] = { 0x4c014 },
   3315	[GCC_MDSS_BCR] = { 0x4d074 },
   3316	[GCC_CAMSS_PHY0_BCR] = { 0x4e018 },
   3317	[GCC_CAMSS_CSI0_BCR] = { 0x4e038 },
   3318	[GCC_CAMSS_CSI0PHY_BCR] = { 0x4e044 },
   3319	[GCC_CAMSS_CSI0RDI_BCR] = { 0x4e04c },
   3320	[GCC_CAMSS_CSI0PIX_BCR] = { 0x4e054 },
   3321	[GCC_CAMSS_PHY1_BCR] = { 0x4f018 },
   3322	[GCC_CAMSS_CSI1_BCR] = { 0x4f038 },
   3323	[GCC_CAMSS_CSI1PHY_BCR] = { 0x4f044 },
   3324	[GCC_CAMSS_CSI1RDI_BCR] = { 0x4f04c },
   3325	[GCC_CAMSS_CSI1PIX_BCR] = { 0x4f054 },
   3326	[GCC_CAMSS_ISPIF_BCR] = { 0x50000 },
   3327	[GCC_CAMSS_CCI_BCR] = { 0x51014 },
   3328	[GCC_CAMSS_MCLK0_BCR] = { 0x52014 },
   3329	[GCC_CAMSS_MCLK1_BCR] = { 0x53014 },
   3330	[GCC_CAMSS_GP0_BCR] = { 0x54014 },
   3331	[GCC_CAMSS_GP1_BCR] = { 0x55014 },
   3332	[GCC_CAMSS_TOP_BCR] = { 0x56000 },
   3333	[GCC_CAMSS_MICRO_BCR] = { 0x56008 },
   3334	[GCC_CAMSS_JPEG_BCR] = { 0x57018 },
   3335	[GCC_CAMSS_VFE_BCR] = { 0x58030 },
   3336	[GCC_CAMSS_CSI_VFE0_BCR] = { 0x5804c },
   3337	[GCC_OXILI_BCR] = { 0x59018 },
   3338	[GCC_GMEM_BCR] = { 0x5902c },
   3339	[GCC_CAMSS_AHB_BCR] = { 0x5a018 },
   3340	[GCC_MDP_TBU_BCR] = { 0x62000 },
   3341	[GCC_GFX_TBU_BCR] = { 0x63000 },
   3342	[GCC_GFX_TCU_BCR] = { 0x64000 },
   3343	[GCC_MSS_TBU_AXI_BCR] = { 0x65000 },
   3344	[GCC_MSS_TBU_GSS_AXI_BCR] = { 0x66000 },
   3345	[GCC_MSS_TBU_Q6_AXI_BCR] = { 0x67000 },
   3346	[GCC_GTCU_AHB_BCR] = { 0x68000 },
   3347	[GCC_SMMU_CFG_BCR] = { 0x69000 },
   3348	[GCC_VFE_TBU_BCR] = { 0x6a000 },
   3349	[GCC_VENUS_TBU_BCR] = { 0x6b000 },
   3350	[GCC_JPEG_TBU_BCR] = { 0x6c000 },
   3351	[GCC_PRONTO_TBU_BCR] = { 0x6d000 },
   3352	[GCC_SMMU_CATS_BCR] = { 0x7c000 },
   3353};
   3354
   3355static const struct regmap_config gcc_msm8916_regmap_config = {
   3356	.reg_bits	= 32,
   3357	.reg_stride	= 4,
   3358	.val_bits	= 32,
   3359	.max_register	= 0x80000,
   3360	.fast_io	= true,
   3361};
   3362
   3363static const struct qcom_cc_desc gcc_msm8916_desc = {
   3364	.config = &gcc_msm8916_regmap_config,
   3365	.clks = gcc_msm8916_clocks,
   3366	.num_clks = ARRAY_SIZE(gcc_msm8916_clocks),
   3367	.resets = gcc_msm8916_resets,
   3368	.num_resets = ARRAY_SIZE(gcc_msm8916_resets),
   3369	.gdscs = gcc_msm8916_gdscs,
   3370	.num_gdscs = ARRAY_SIZE(gcc_msm8916_gdscs),
   3371};
   3372
   3373static const struct of_device_id gcc_msm8916_match_table[] = {
   3374	{ .compatible = "qcom,gcc-msm8916" },
   3375	{ }
   3376};
   3377MODULE_DEVICE_TABLE(of, gcc_msm8916_match_table);
   3378
   3379static int gcc_msm8916_probe(struct platform_device *pdev)
   3380{
   3381	int ret;
   3382	struct device *dev = &pdev->dev;
   3383
   3384	ret = qcom_cc_register_board_clk(dev, "xo_board", "xo", 19200000);
   3385	if (ret)
   3386		return ret;
   3387
   3388	ret = qcom_cc_register_sleep_clk(dev);
   3389	if (ret)
   3390		return ret;
   3391
   3392	return qcom_cc_probe(pdev, &gcc_msm8916_desc);
   3393}
   3394
   3395static struct platform_driver gcc_msm8916_driver = {
   3396	.probe		= gcc_msm8916_probe,
   3397	.driver		= {
   3398		.name	= "gcc-msm8916",
   3399		.of_match_table = gcc_msm8916_match_table,
   3400	},
   3401};
   3402
   3403static int __init gcc_msm8916_init(void)
   3404{
   3405	return platform_driver_register(&gcc_msm8916_driver);
   3406}
   3407core_initcall(gcc_msm8916_init);
   3408
   3409static void __exit gcc_msm8916_exit(void)
   3410{
   3411	platform_driver_unregister(&gcc_msm8916_driver);
   3412}
   3413module_exit(gcc_msm8916_exit);
   3414
   3415MODULE_DESCRIPTION("Qualcomm GCC MSM8916 Driver");
   3416MODULE_LICENSE("GPL v2");
   3417MODULE_ALIAS("platform:gcc-msm8916");