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-sdm660.c (66664B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
      4 * Copyright (c) 2018, Craig Tatlor.
      5 */
      6
      7#include <linux/kernel.h>
      8#include <linux/bitops.h>
      9#include <linux/err.h>
     10#include <linux/platform_device.h>
     11#include <linux/module.h>
     12#include <linux/of.h>
     13#include <linux/of_device.h>
     14#include <linux/clk-provider.h>
     15#include <linux/regmap.h>
     16#include <linux/reset-controller.h>
     17
     18#include <dt-bindings/clock/qcom,gcc-sdm660.h>
     19
     20#include "common.h"
     21#include "clk-regmap.h"
     22#include "clk-alpha-pll.h"
     23#include "clk-rcg.h"
     24#include "clk-branch.h"
     25#include "reset.h"
     26#include "gdsc.h"
     27
     28#define F(f, s, h, m, n) { (f), (s), (2 * (h) - 1), (m), (n) }
     29
     30enum {
     31	P_XO,
     32	P_SLEEP_CLK,
     33	P_GPLL0,
     34	P_GPLL1,
     35	P_GPLL4,
     36	P_GPLL0_EARLY_DIV,
     37	P_GPLL1_EARLY_DIV,
     38};
     39
     40static struct clk_fixed_factor xo = {
     41	.mult = 1,
     42	.div = 1,
     43	.hw.init = &(struct clk_init_data){
     44		.name = "xo",
     45		.parent_data = &(const struct clk_parent_data) {
     46			.fw_name = "xo"
     47		},
     48		.num_parents = 1,
     49		.ops = &clk_fixed_factor_ops,
     50	},
     51};
     52
     53static struct clk_alpha_pll gpll0_early = {
     54	.offset = 0x0,
     55	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
     56	.clkr = {
     57		.enable_reg = 0x52000,
     58		.enable_mask = BIT(0),
     59		.hw.init = &(struct clk_init_data){
     60			.name = "gpll0_early",
     61			.parent_data = &(const struct clk_parent_data){
     62				.fw_name = "xo",
     63			},
     64			.num_parents = 1,
     65			.ops = &clk_alpha_pll_ops,
     66		},
     67	},
     68};
     69
     70static struct clk_fixed_factor gpll0_early_div = {
     71	.mult = 1,
     72	.div = 2,
     73	.hw.init = &(struct clk_init_data){
     74		.name = "gpll0_early_div",
     75		.parent_hws = (const struct clk_hw*[]){
     76			&gpll0_early.clkr.hw,
     77		},
     78		.num_parents = 1,
     79		.ops = &clk_fixed_factor_ops,
     80	},
     81};
     82
     83static struct clk_alpha_pll_postdiv gpll0 = {
     84	.offset = 0x00000,
     85	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
     86	.clkr.hw.init = &(struct clk_init_data){
     87		.name = "gpll0",
     88		.parent_hws = (const struct clk_hw*[]){
     89			&gpll0_early.clkr.hw,
     90		},
     91		.num_parents = 1,
     92		.ops = &clk_alpha_pll_postdiv_ops,
     93	},
     94};
     95
     96static struct clk_alpha_pll gpll1_early = {
     97	.offset = 0x1000,
     98	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
     99	.clkr = {
    100		.enable_reg = 0x52000,
    101		.enable_mask = BIT(1),
    102		.hw.init = &(struct clk_init_data){
    103			.name = "gpll1_early",
    104			.parent_data = &(const struct clk_parent_data){
    105				.fw_name = "xo",
    106			},
    107			.num_parents = 1,
    108			.ops = &clk_alpha_pll_ops,
    109		},
    110	},
    111};
    112
    113static struct clk_fixed_factor gpll1_early_div = {
    114	.mult = 1,
    115	.div = 2,
    116	.hw.init = &(struct clk_init_data){
    117		.name = "gpll1_early_div",
    118		.parent_hws = (const struct clk_hw*[]){
    119			&gpll1_early.clkr.hw,
    120		},
    121		.num_parents = 1,
    122		.ops = &clk_fixed_factor_ops,
    123	},
    124};
    125
    126static struct clk_alpha_pll_postdiv gpll1 = {
    127	.offset = 0x1000,
    128	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
    129	.clkr.hw.init = &(struct clk_init_data){
    130		.name = "gpll1",
    131		.parent_hws = (const struct clk_hw*[]){
    132			&gpll1_early.clkr.hw,
    133		},
    134		.num_parents = 1,
    135		.ops = &clk_alpha_pll_postdiv_ops,
    136	},
    137};
    138
    139static struct clk_alpha_pll gpll4_early = {
    140	.offset = 0x77000,
    141	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
    142	.clkr = {
    143		.enable_reg = 0x52000,
    144		.enable_mask = BIT(4),
    145		.hw.init = &(struct clk_init_data){
    146			.name = "gpll4_early",
    147			.parent_data = &(const struct clk_parent_data){
    148				.fw_name = "xo",
    149			},
    150			.num_parents = 1,
    151			.ops = &clk_alpha_pll_ops,
    152		},
    153	},
    154};
    155
    156static struct clk_alpha_pll_postdiv gpll4 = {
    157	.offset = 0x77000,
    158	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
    159	.clkr.hw.init = &(struct clk_init_data)
    160	{
    161		.name = "gpll4",
    162		.parent_hws = (const struct clk_hw*[]){
    163			&gpll4_early.clkr.hw,
    164		},
    165		.num_parents = 1,
    166		.ops = &clk_alpha_pll_postdiv_ops,
    167	},
    168};
    169
    170static const struct parent_map gcc_parent_map_xo_gpll0_gpll0_early_div[] = {
    171	{ P_XO, 0 },
    172	{ P_GPLL0, 1 },
    173	{ P_GPLL0_EARLY_DIV, 6 },
    174};
    175
    176static const struct clk_parent_data gcc_parent_data_xo_gpll0_gpll0_early_div[] = {
    177	{ .fw_name = "xo" },
    178	{ .hw = &gpll0.clkr.hw },
    179	{ .hw = &gpll0_early_div.hw },
    180};
    181
    182static const struct parent_map gcc_parent_map_xo_gpll0[] = {
    183	{ P_XO, 0 },
    184	{ P_GPLL0, 1 },
    185};
    186
    187static const struct clk_parent_data gcc_parent_data_xo_gpll0[] = {
    188	{ .fw_name = "xo" },
    189	{ .hw = &gpll0.clkr.hw },
    190};
    191
    192static const struct parent_map gcc_parent_map_xo_gpll0_sleep_clk_gpll0_early_div[] = {
    193	{ P_XO, 0 },
    194	{ P_GPLL0, 1 },
    195	{ P_SLEEP_CLK, 5 },
    196	{ P_GPLL0_EARLY_DIV, 6 },
    197};
    198
    199static const struct clk_parent_data gcc_parent_data_xo_gpll0_sleep_clk_gpll0_early_div[] = {
    200	{ .fw_name = "xo" },
    201	{ .hw = &gpll0.clkr.hw },
    202	{ .fw_name = "sleep_clk" },
    203	{ .hw = &gpll0_early_div.hw },
    204};
    205
    206static const struct parent_map gcc_parent_map_xo_sleep_clk[] = {
    207	{ P_XO, 0 },
    208	{ P_SLEEP_CLK, 5 },
    209};
    210
    211static const struct clk_parent_data gcc_parent_data_xo_sleep_clk[] = {
    212	{ .fw_name = "xo" },
    213	{ .fw_name = "sleep_clk" },
    214};
    215
    216static const struct parent_map gcc_parent_map_xo_gpll4[] = {
    217	{ P_XO, 0 },
    218	{ P_GPLL4, 5 },
    219};
    220
    221static const struct clk_parent_data gcc_parent_data_xo_gpll4[] = {
    222	{ .fw_name = "xo" },
    223	{ .hw = &gpll4.clkr.hw },
    224};
    225
    226static const struct parent_map gcc_parent_map_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div[] = {
    227	{ P_XO, 0 },
    228	{ P_GPLL0, 1 },
    229	{ P_GPLL0_EARLY_DIV, 3 },
    230	{ P_GPLL1, 4 },
    231	{ P_GPLL4, 5 },
    232	{ P_GPLL1_EARLY_DIV, 6 },
    233};
    234
    235static const struct clk_parent_data gcc_parent_data_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div[] = {
    236	{ .fw_name = "xo" },
    237	{ .hw = &gpll0.clkr.hw },
    238	{ .hw = &gpll0_early_div.hw },
    239	{ .hw = &gpll1.clkr.hw },
    240	{ .hw = &gpll4.clkr.hw },
    241	{ .hw = &gpll1_early_div.hw },
    242};
    243
    244static const struct parent_map gcc_parent_map_xo_gpll0_gpll4_gpll0_early_div[] = {
    245	{ P_XO, 0 },
    246	{ P_GPLL0, 1 },
    247	{ P_GPLL4, 5 },
    248	{ P_GPLL0_EARLY_DIV, 6 },
    249};
    250
    251static const struct clk_parent_data gcc_parent_data_xo_gpll0_gpll4_gpll0_early_div[] = {
    252	{ .fw_name = "xo" },
    253	{ .hw = &gpll0.clkr.hw },
    254	{ .hw = &gpll4.clkr.hw },
    255	{ .hw = &gpll0_early_div.hw },
    256};
    257
    258static const struct parent_map gcc_parent_map_xo_gpll0_gpll0_early_div_gpll4[] = {
    259	{ P_XO, 0 },
    260	{ P_GPLL0, 1 },
    261	{ P_GPLL0_EARLY_DIV, 2 },
    262	{ P_GPLL4, 5 },
    263};
    264
    265static const struct clk_parent_data gcc_parent_data_xo_gpll0_gpll0_early_div_gpll4[] = {
    266	{ .fw_name = "xo" },
    267	{ .hw = &gpll0.clkr.hw },
    268	{ .hw = &gpll0_early_div.hw },
    269	{ .hw = &gpll4.clkr.hw },
    270};
    271
    272static const struct freq_tbl ftbl_blsp1_qup1_i2c_apps_clk_src[] = {
    273	F(19200000, P_XO, 1, 0, 0),
    274	F(50000000, P_GPLL0, 12, 0, 0),
    275	{ }
    276};
    277
    278static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
    279	.cmd_rcgr = 0x19020,
    280	.mnd_width = 0,
    281	.hid_width = 5,
    282	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
    283	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
    284	.clkr.hw.init = &(struct clk_init_data){
    285		.name = "blsp1_qup1_i2c_apps_clk_src",
    286		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
    287		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
    288		.ops = &clk_rcg2_ops,
    289	},
    290};
    291
    292static const struct freq_tbl ftbl_blsp1_qup1_spi_apps_clk_src[] = {
    293	F(960000, P_XO, 10, 1, 2),
    294	F(4800000, P_XO, 4, 0, 0),
    295	F(9600000, P_XO, 2, 0, 0),
    296	F(15000000, P_GPLL0, 10, 1, 4),
    297	F(19200000, P_XO, 1, 0, 0),
    298	F(25000000, P_GPLL0, 12, 1, 2),
    299	F(50000000, P_GPLL0, 12, 0, 0),
    300	{ }
    301};
    302
    303static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
    304	.cmd_rcgr = 0x1900c,
    305	.mnd_width = 8,
    306	.hid_width = 5,
    307	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
    308	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
    309	.clkr.hw.init = &(struct clk_init_data){
    310		.name = "blsp1_qup1_spi_apps_clk_src",
    311		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
    312		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
    313		.ops = &clk_rcg2_ops,
    314	},
    315};
    316
    317static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
    318	.cmd_rcgr = 0x1b020,
    319	.mnd_width = 0,
    320	.hid_width = 5,
    321	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
    322	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
    323	.clkr.hw.init = &(struct clk_init_data){
    324		.name = "blsp1_qup2_i2c_apps_clk_src",
    325		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
    326		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
    327		.ops = &clk_rcg2_ops,
    328	},
    329};
    330
    331static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
    332	.cmd_rcgr = 0x1b00c,
    333	.mnd_width = 8,
    334	.hid_width = 5,
    335	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
    336	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
    337	.clkr.hw.init = &(struct clk_init_data){
    338		.name = "blsp1_qup2_spi_apps_clk_src",
    339		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
    340		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
    341		.ops = &clk_rcg2_ops,
    342	},
    343};
    344
    345static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
    346	.cmd_rcgr = 0x1d020,
    347	.mnd_width = 0,
    348	.hid_width = 5,
    349	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
    350	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
    351	.clkr.hw.init = &(struct clk_init_data){
    352		.name = "blsp1_qup3_i2c_apps_clk_src",
    353		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
    354		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
    355		.ops = &clk_rcg2_ops,
    356	},
    357};
    358
    359static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
    360	.cmd_rcgr = 0x1d00c,
    361	.mnd_width = 8,
    362	.hid_width = 5,
    363	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
    364	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
    365	.clkr.hw.init = &(struct clk_init_data){
    366		.name = "blsp1_qup3_spi_apps_clk_src",
    367		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
    368		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
    369		.ops = &clk_rcg2_ops,
    370	},
    371};
    372
    373static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
    374	.cmd_rcgr = 0x1f020,
    375	.mnd_width = 0,
    376	.hid_width = 5,
    377	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
    378	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
    379	.clkr.hw.init = &(struct clk_init_data){
    380		.name = "blsp1_qup4_i2c_apps_clk_src",
    381		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
    382		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
    383		.ops = &clk_rcg2_ops,
    384	},
    385};
    386
    387static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
    388	.cmd_rcgr = 0x1f00c,
    389	.mnd_width = 8,
    390	.hid_width = 5,
    391	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
    392	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
    393	.clkr.hw.init = &(struct clk_init_data){
    394		.name = "blsp1_qup4_spi_apps_clk_src",
    395		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
    396		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
    397		.ops = &clk_rcg2_ops,
    398	},
    399};
    400
    401static const struct freq_tbl ftbl_blsp1_uart1_apps_clk_src[] = {
    402	F(3686400, P_GPLL0, 1, 96, 15625),
    403	F(7372800, P_GPLL0, 1, 192, 15625),
    404	F(14745600, P_GPLL0, 1, 384, 15625),
    405	F(16000000, P_GPLL0, 5, 2, 15),
    406	F(19200000, P_XO, 1, 0, 0),
    407	F(24000000, P_GPLL0, 5, 1, 5),
    408	F(32000000, P_GPLL0, 1, 4, 75),
    409	F(40000000, P_GPLL0, 15, 0, 0),
    410	F(46400000, P_GPLL0, 1, 29, 375),
    411	F(48000000, P_GPLL0, 12.5, 0, 0),
    412	F(51200000, P_GPLL0, 1, 32, 375),
    413	F(56000000, P_GPLL0, 1, 7, 75),
    414	F(58982400, P_GPLL0, 1, 1536, 15625),
    415	F(60000000, P_GPLL0, 10, 0, 0),
    416	F(63157895, P_GPLL0, 9.5, 0, 0),
    417	{ }
    418};
    419
    420static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
    421	.cmd_rcgr = 0x1a00c,
    422	.mnd_width = 16,
    423	.hid_width = 5,
    424	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
    425	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
    426	.clkr.hw.init = &(struct clk_init_data){
    427		.name = "blsp1_uart1_apps_clk_src",
    428		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
    429		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
    430		.ops = &clk_rcg2_ops,
    431	},
    432};
    433
    434static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
    435	.cmd_rcgr = 0x1c00c,
    436	.mnd_width = 16,
    437	.hid_width = 5,
    438	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
    439	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
    440	.clkr.hw.init = &(struct clk_init_data){
    441		.name = "blsp1_uart2_apps_clk_src",
    442		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
    443		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
    444		.ops = &clk_rcg2_ops,
    445	},
    446};
    447
    448static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
    449	.cmd_rcgr = 0x26020,
    450	.mnd_width = 0,
    451	.hid_width = 5,
    452	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
    453	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
    454	.clkr.hw.init = &(struct clk_init_data){
    455		.name = "blsp2_qup1_i2c_apps_clk_src",
    456		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
    457		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
    458		.ops = &clk_rcg2_ops,
    459	},
    460};
    461
    462static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
    463	.cmd_rcgr = 0x2600c,
    464	.mnd_width = 8,
    465	.hid_width = 5,
    466	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
    467	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
    468	.clkr.hw.init = &(struct clk_init_data){
    469		.name = "blsp2_qup1_spi_apps_clk_src",
    470		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
    471		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
    472		.ops = &clk_rcg2_ops,
    473	},
    474};
    475
    476static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
    477	.cmd_rcgr = 0x28020,
    478	.mnd_width = 0,
    479	.hid_width = 5,
    480	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
    481	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
    482	.clkr.hw.init = &(struct clk_init_data){
    483		.name = "blsp2_qup2_i2c_apps_clk_src",
    484		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
    485		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
    486		.ops = &clk_rcg2_ops,
    487	},
    488};
    489
    490static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
    491	.cmd_rcgr = 0x2800c,
    492	.mnd_width = 8,
    493	.hid_width = 5,
    494	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
    495	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
    496	.clkr.hw.init = &(struct clk_init_data){
    497		.name = "blsp2_qup2_spi_apps_clk_src",
    498		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
    499		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
    500		.ops = &clk_rcg2_ops,
    501	},
    502};
    503
    504static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
    505	.cmd_rcgr = 0x2a020,
    506	.mnd_width = 0,
    507	.hid_width = 5,
    508	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
    509	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
    510	.clkr.hw.init = &(struct clk_init_data){
    511		.name = "blsp2_qup3_i2c_apps_clk_src",
    512		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
    513		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
    514		.ops = &clk_rcg2_ops,
    515	},
    516};
    517
    518static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
    519	.cmd_rcgr = 0x2a00c,
    520	.mnd_width = 8,
    521	.hid_width = 5,
    522	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
    523	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
    524	.clkr.hw.init = &(struct clk_init_data){
    525		.name = "blsp2_qup3_spi_apps_clk_src",
    526		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
    527		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
    528		.ops = &clk_rcg2_ops,
    529	},
    530};
    531
    532static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
    533	.cmd_rcgr = 0x2c020,
    534	.mnd_width = 0,
    535	.hid_width = 5,
    536	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
    537	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
    538	.clkr.hw.init = &(struct clk_init_data){
    539		.name = "blsp2_qup4_i2c_apps_clk_src",
    540		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
    541		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
    542		.ops = &clk_rcg2_ops,
    543	},
    544};
    545
    546static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
    547	.cmd_rcgr = 0x2c00c,
    548	.mnd_width = 8,
    549	.hid_width = 5,
    550	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
    551	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
    552	.clkr.hw.init = &(struct clk_init_data){
    553		.name = "blsp2_qup4_spi_apps_clk_src",
    554		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
    555		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
    556		.ops = &clk_rcg2_ops,
    557	},
    558};
    559
    560static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
    561	.cmd_rcgr = 0x2700c,
    562	.mnd_width = 16,
    563	.hid_width = 5,
    564	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
    565	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
    566	.clkr.hw.init = &(struct clk_init_data){
    567		.name = "blsp2_uart1_apps_clk_src",
    568		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
    569		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
    570		.ops = &clk_rcg2_ops,
    571	},
    572};
    573
    574static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
    575	.cmd_rcgr = 0x2900c,
    576	.mnd_width = 16,
    577	.hid_width = 5,
    578	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
    579	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
    580	.clkr.hw.init = &(struct clk_init_data){
    581		.name = "blsp2_uart2_apps_clk_src",
    582		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
    583		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
    584		.ops = &clk_rcg2_ops,
    585	},
    586};
    587
    588static const struct freq_tbl ftbl_gp1_clk_src[] = {
    589	F(19200000, P_XO, 1, 0, 0),
    590	F(100000000, P_GPLL0, 6, 0, 0),
    591	F(200000000, P_GPLL0, 3, 0, 0),
    592	{ }
    593};
    594
    595static struct clk_rcg2 gp1_clk_src = {
    596	.cmd_rcgr = 0x64004,
    597	.mnd_width = 8,
    598	.hid_width = 5,
    599	.parent_map = gcc_parent_map_xo_gpll0_sleep_clk_gpll0_early_div,
    600	.freq_tbl = ftbl_gp1_clk_src,
    601	.clkr.hw.init = &(struct clk_init_data){
    602		.name = "gp1_clk_src",
    603		.parent_data = gcc_parent_data_xo_gpll0_sleep_clk_gpll0_early_div,
    604		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_sleep_clk_gpll0_early_div),
    605		.ops = &clk_rcg2_ops,
    606	},
    607};
    608
    609static struct clk_rcg2 gp2_clk_src = {
    610	.cmd_rcgr = 0x65004,
    611	.mnd_width = 8,
    612	.hid_width = 5,
    613	.parent_map = gcc_parent_map_xo_gpll0_sleep_clk_gpll0_early_div,
    614	.freq_tbl = ftbl_gp1_clk_src,
    615	.clkr.hw.init = &(struct clk_init_data){
    616		.name = "gp2_clk_src",
    617		.parent_data = gcc_parent_data_xo_gpll0_sleep_clk_gpll0_early_div,
    618		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_sleep_clk_gpll0_early_div),
    619		.ops = &clk_rcg2_ops,
    620	},
    621};
    622
    623static struct clk_rcg2 gp3_clk_src = {
    624	.cmd_rcgr = 0x66004,
    625	.mnd_width = 8,
    626	.hid_width = 5,
    627	.parent_map = gcc_parent_map_xo_gpll0_sleep_clk_gpll0_early_div,
    628	.freq_tbl = ftbl_gp1_clk_src,
    629	.clkr.hw.init = &(struct clk_init_data){
    630		.name = "gp3_clk_src",
    631		.parent_data = gcc_parent_data_xo_gpll0_sleep_clk_gpll0_early_div,
    632		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_sleep_clk_gpll0_early_div),
    633		.ops = &clk_rcg2_ops,
    634	},
    635};
    636
    637static const struct freq_tbl ftbl_hmss_gpll0_clk_src[] = {
    638	F(300000000, P_GPLL0, 2, 0, 0),
    639	F(600000000, P_GPLL0, 1, 0, 0),
    640	{ }
    641};
    642
    643static struct clk_rcg2 hmss_gpll0_clk_src = {
    644	.cmd_rcgr = 0x4805c,
    645	.mnd_width = 0,
    646	.hid_width = 5,
    647	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
    648	.freq_tbl = ftbl_hmss_gpll0_clk_src,
    649	.clkr.hw.init = &(struct clk_init_data){
    650		.name = "hmss_gpll0_clk_src",
    651		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
    652		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
    653		.ops = &clk_rcg2_ops,
    654	},
    655};
    656
    657static const struct freq_tbl ftbl_hmss_gpll4_clk_src[] = {
    658	F(384000000, P_GPLL4, 4, 0, 0),
    659	F(768000000, P_GPLL4, 2, 0, 0),
    660	F(1536000000, P_GPLL4, 1, 0, 0),
    661	{ }
    662};
    663
    664static struct clk_rcg2 hmss_gpll4_clk_src = {
    665	.cmd_rcgr = 0x48074,
    666	.mnd_width = 0,
    667	.hid_width = 5,
    668	.parent_map = gcc_parent_map_xo_gpll4,
    669	.freq_tbl = ftbl_hmss_gpll4_clk_src,
    670	.clkr.hw.init = &(struct clk_init_data){
    671		.name = "hmss_gpll4_clk_src",
    672		.parent_data = gcc_parent_data_xo_gpll4,
    673		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll4),
    674		.ops = &clk_rcg2_ops,
    675	},
    676};
    677
    678static const struct freq_tbl ftbl_hmss_rbcpr_clk_src[] = {
    679	F(19200000, P_XO, 1, 0, 0),
    680	{ }
    681};
    682
    683static struct clk_rcg2 hmss_rbcpr_clk_src = {
    684	.cmd_rcgr = 0x48044,
    685	.mnd_width = 0,
    686	.hid_width = 5,
    687	.parent_map = gcc_parent_map_xo_gpll0,
    688	.freq_tbl = ftbl_hmss_rbcpr_clk_src,
    689	.clkr.hw.init = &(struct clk_init_data){
    690		.name = "hmss_rbcpr_clk_src",
    691		.parent_data = gcc_parent_data_xo_gpll0,
    692		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0),
    693		.ops = &clk_rcg2_ops,
    694	},
    695};
    696
    697static const struct freq_tbl ftbl_pdm2_clk_src[] = {
    698	F(60000000, P_GPLL0, 10, 0, 0),
    699	{ }
    700};
    701
    702static struct clk_rcg2 pdm2_clk_src = {
    703	.cmd_rcgr = 0x33010,
    704	.mnd_width = 0,
    705	.hid_width = 5,
    706	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
    707	.freq_tbl = ftbl_pdm2_clk_src,
    708	.clkr.hw.init = &(struct clk_init_data){
    709		.name = "pdm2_clk_src",
    710		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
    711		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
    712		.ops = &clk_rcg2_ops,
    713	},
    714};
    715
    716static const struct freq_tbl ftbl_qspi_ser_clk_src[] = {
    717	F(19200000, P_XO, 1, 0, 0),
    718	F(80200000, P_GPLL1_EARLY_DIV, 5, 0, 0),
    719	F(160400000, P_GPLL1, 5, 0, 0),
    720	F(267333333, P_GPLL1, 3, 0, 0),
    721	{ }
    722};
    723
    724static struct clk_rcg2 qspi_ser_clk_src = {
    725	.cmd_rcgr = 0x4d00c,
    726	.mnd_width = 0,
    727	.hid_width = 5,
    728	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div,
    729	.freq_tbl = ftbl_qspi_ser_clk_src,
    730	.clkr.hw.init = &(struct clk_init_data){
    731		.name = "qspi_ser_clk_src",
    732		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div,
    733		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div),
    734		.ops = &clk_rcg2_ops,
    735	},
    736};
    737
    738static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
    739	F(144000, P_XO, 16, 3, 25),
    740	F(400000, P_XO, 12, 1, 4),
    741	F(20000000, P_GPLL0_EARLY_DIV, 5, 1, 3),
    742	F(25000000, P_GPLL0_EARLY_DIV, 6, 1, 2),
    743	F(50000000, P_GPLL0_EARLY_DIV, 6, 0, 0),
    744	F(100000000, P_GPLL0, 6, 0, 0),
    745	F(192000000, P_GPLL4, 8, 0, 0),
    746	F(384000000, P_GPLL4, 4, 0, 0),
    747	{ }
    748};
    749
    750static struct clk_rcg2 sdcc1_apps_clk_src = {
    751	.cmd_rcgr = 0x1602c,
    752	.mnd_width = 8,
    753	.hid_width = 5,
    754	.parent_map = gcc_parent_map_xo_gpll0_gpll4_gpll0_early_div,
    755	.freq_tbl = ftbl_sdcc1_apps_clk_src,
    756	.clkr.hw.init = &(struct clk_init_data){
    757		.name = "sdcc1_apps_clk_src",
    758		.parent_data = gcc_parent_data_xo_gpll0_gpll4_gpll0_early_div,
    759		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll4_gpll0_early_div),
    760		.ops = &clk_rcg2_ops,
    761	},
    762};
    763
    764static const struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = {
    765	F(75000000, P_GPLL0_EARLY_DIV, 4, 0, 0),
    766	F(150000000, P_GPLL0, 4, 0, 0),
    767	F(200000000, P_GPLL0, 3, 0, 0),
    768	F(300000000, P_GPLL0, 2, 0, 0),
    769	{ }
    770};
    771
    772static struct clk_rcg2 sdcc1_ice_core_clk_src = {
    773	.cmd_rcgr = 0x16010,
    774	.mnd_width = 0,
    775	.hid_width = 5,
    776	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
    777	.freq_tbl = ftbl_sdcc1_ice_core_clk_src,
    778	.clkr.hw.init = &(struct clk_init_data){
    779		.name = "sdcc1_ice_core_clk_src",
    780		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
    781		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
    782		.ops = &clk_rcg2_ops,
    783	},
    784};
    785
    786static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = {
    787	F(144000, P_XO, 16, 3, 25),
    788	F(400000, P_XO, 12, 1, 4),
    789	F(20000000, P_GPLL0_EARLY_DIV, 5, 1, 3),
    790	F(25000000, P_GPLL0_EARLY_DIV, 6, 1, 2),
    791	F(50000000, P_GPLL0_EARLY_DIV, 6, 0, 0),
    792	F(100000000, P_GPLL0, 6, 0, 0),
    793	F(192000000, P_GPLL4, 8, 0, 0),
    794	F(200000000, P_GPLL0, 3, 0, 0),
    795	{ }
    796};
    797
    798static struct clk_rcg2 sdcc2_apps_clk_src = {
    799	.cmd_rcgr = 0x14010,
    800	.mnd_width = 8,
    801	.hid_width = 5,
    802	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div_gpll4,
    803	.freq_tbl = ftbl_sdcc2_apps_clk_src,
    804	.clkr.hw.init = &(struct clk_init_data){
    805		.name = "sdcc2_apps_clk_src",
    806		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div_gpll4,
    807		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div_gpll4),
    808		.ops = &clk_rcg2_floor_ops,
    809	},
    810};
    811
    812static const struct freq_tbl ftbl_ufs_axi_clk_src[] = {
    813	F(50000000, P_GPLL0_EARLY_DIV, 6, 0, 0),
    814	F(100000000, P_GPLL0, 6, 0, 0),
    815	F(150000000, P_GPLL0, 4, 0, 0),
    816	F(200000000, P_GPLL0, 3, 0, 0),
    817	F(240000000, P_GPLL0, 2.5, 0, 0),
    818	{ }
    819};
    820
    821static struct clk_rcg2 ufs_axi_clk_src = {
    822	.cmd_rcgr = 0x75018,
    823	.mnd_width = 8,
    824	.hid_width = 5,
    825	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
    826	.freq_tbl = ftbl_ufs_axi_clk_src,
    827	.clkr.hw.init = &(struct clk_init_data){
    828		.name = "ufs_axi_clk_src",
    829		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
    830		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
    831		.ops = &clk_rcg2_ops,
    832	},
    833};
    834
    835static const struct freq_tbl ftbl_ufs_ice_core_clk_src[] = {
    836	F(75000000, P_GPLL0_EARLY_DIV, 4, 0, 0),
    837	F(150000000, P_GPLL0, 4, 0, 0),
    838	F(300000000, P_GPLL0, 2, 0, 0),
    839	{ }
    840};
    841
    842static struct clk_rcg2 ufs_ice_core_clk_src = {
    843	.cmd_rcgr = 0x76010,
    844	.mnd_width = 0,
    845	.hid_width = 5,
    846	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
    847	.freq_tbl = ftbl_ufs_ice_core_clk_src,
    848	.clkr.hw.init = &(struct clk_init_data){
    849		.name = "ufs_ice_core_clk_src",
    850		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
    851		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
    852		.ops = &clk_rcg2_ops,
    853	},
    854};
    855
    856static struct clk_rcg2 ufs_phy_aux_clk_src = {
    857	.cmd_rcgr = 0x76044,
    858	.mnd_width = 0,
    859	.hid_width = 5,
    860	.parent_map = gcc_parent_map_xo_sleep_clk,
    861	.freq_tbl = ftbl_hmss_rbcpr_clk_src,
    862	.clkr.hw.init = &(struct clk_init_data){
    863		.name = "ufs_phy_aux_clk_src",
    864		.parent_data = gcc_parent_data_xo_sleep_clk,
    865		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_sleep_clk),
    866		.ops = &clk_rcg2_ops,
    867	},
    868};
    869
    870static const struct freq_tbl ftbl_ufs_unipro_core_clk_src[] = {
    871	F(37500000, P_GPLL0_EARLY_DIV, 8, 0, 0),
    872	F(75000000, P_GPLL0, 8, 0, 0),
    873	F(150000000, P_GPLL0, 4, 0, 0),
    874	{ }
    875};
    876
    877static struct clk_rcg2 ufs_unipro_core_clk_src = {
    878	.cmd_rcgr = 0x76028,
    879	.mnd_width = 0,
    880	.hid_width = 5,
    881	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
    882	.freq_tbl = ftbl_ufs_unipro_core_clk_src,
    883	.clkr.hw.init = &(struct clk_init_data){
    884		.name = "ufs_unipro_core_clk_src",
    885		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
    886		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
    887		.ops = &clk_rcg2_ops,
    888	},
    889};
    890
    891static const struct freq_tbl ftbl_usb20_master_clk_src[] = {
    892	F(19200000, P_XO, 1, 0, 0),
    893	F(60000000, P_GPLL0, 10, 0, 0),
    894	F(120000000, P_GPLL0, 5, 0, 0),
    895	{ }
    896};
    897
    898static struct clk_rcg2 usb20_master_clk_src = {
    899	.cmd_rcgr = 0x2f010,
    900	.mnd_width = 8,
    901	.hid_width = 5,
    902	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
    903	.freq_tbl = ftbl_usb20_master_clk_src,
    904	.clkr.hw.init = &(struct clk_init_data){
    905		.name = "usb20_master_clk_src",
    906		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
    907		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
    908		.ops = &clk_rcg2_ops,
    909	},
    910};
    911
    912static const struct freq_tbl ftbl_usb20_mock_utmi_clk_src[] = {
    913	F(19200000, P_XO, 1, 0, 0),
    914	F(60000000, P_GPLL0, 10, 0, 0),
    915	{ }
    916};
    917
    918static struct clk_rcg2 usb20_mock_utmi_clk_src = {
    919	.cmd_rcgr = 0x2f024,
    920	.mnd_width = 0,
    921	.hid_width = 5,
    922	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
    923	.freq_tbl = ftbl_usb20_mock_utmi_clk_src,
    924	.clkr.hw.init = &(struct clk_init_data){
    925		.name = "usb20_mock_utmi_clk_src",
    926		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
    927		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
    928		.ops = &clk_rcg2_ops,
    929	},
    930};
    931
    932static const struct freq_tbl ftbl_usb30_master_clk_src[] = {
    933	F(19200000, P_XO, 1, 0, 0),
    934	F(66666667, P_GPLL0_EARLY_DIV, 4.5, 0, 0),
    935	F(120000000, P_GPLL0, 5, 0, 0),
    936	F(133333333, P_GPLL0, 4.5, 0, 0),
    937	F(150000000, P_GPLL0, 4, 0, 0),
    938	F(200000000, P_GPLL0, 3, 0, 0),
    939	F(240000000, P_GPLL0, 2.5, 0, 0),
    940	{ }
    941};
    942
    943static struct clk_rcg2 usb30_master_clk_src = {
    944	.cmd_rcgr = 0xf014,
    945	.mnd_width = 8,
    946	.hid_width = 5,
    947	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
    948	.freq_tbl = ftbl_usb30_master_clk_src,
    949	.clkr.hw.init = &(struct clk_init_data){
    950		.name = "usb30_master_clk_src",
    951		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
    952		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
    953		.ops = &clk_rcg2_ops,
    954	},
    955};
    956
    957static const struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = {
    958	F(19200000, P_XO, 1, 0, 0),
    959	F(40000000, P_GPLL0_EARLY_DIV, 7.5, 0, 0),
    960	F(60000000, P_GPLL0, 10, 0, 0),
    961	{ }
    962};
    963
    964static struct clk_rcg2 usb30_mock_utmi_clk_src = {
    965	.cmd_rcgr = 0xf028,
    966	.mnd_width = 0,
    967	.hid_width = 5,
    968	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
    969	.freq_tbl = ftbl_usb30_mock_utmi_clk_src,
    970	.clkr.hw.init = &(struct clk_init_data){
    971		.name = "usb30_mock_utmi_clk_src",
    972		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
    973		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
    974		.ops = &clk_rcg2_ops,
    975	},
    976};
    977
    978static const struct freq_tbl ftbl_usb3_phy_aux_clk_src[] = {
    979	F(1200000, P_XO, 16, 0, 0),
    980	F(19200000, P_XO, 1, 0, 0),
    981	{ }
    982};
    983
    984static struct clk_rcg2 usb3_phy_aux_clk_src = {
    985	.cmd_rcgr = 0x5000c,
    986	.mnd_width = 0,
    987	.hid_width = 5,
    988	.parent_map = gcc_parent_map_xo_sleep_clk,
    989	.freq_tbl = ftbl_usb3_phy_aux_clk_src,
    990	.clkr.hw.init = &(struct clk_init_data){
    991		.name = "usb3_phy_aux_clk_src",
    992		.parent_data = gcc_parent_data_xo_sleep_clk,
    993		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_sleep_clk),
    994		.ops = &clk_rcg2_ops,
    995	},
    996};
    997
    998static struct clk_branch gcc_aggre2_ufs_axi_clk = {
    999	.halt_reg = 0x75034,
   1000	.halt_check = BRANCH_HALT,
   1001	.clkr = {
   1002		.enable_reg = 0x75034,
   1003		.enable_mask = BIT(0),
   1004		.hw.init = &(struct clk_init_data){
   1005			.name = "gcc_aggre2_ufs_axi_clk",
   1006			.parent_hws = (const struct clk_hw*[]) {
   1007				&ufs_axi_clk_src.clkr.hw,
   1008			},
   1009			.num_parents = 1,
   1010			.ops = &clk_branch2_ops,
   1011		},
   1012	},
   1013};
   1014
   1015static struct clk_branch gcc_aggre2_usb3_axi_clk = {
   1016	.halt_reg = 0xf03c,
   1017	.halt_check = BRANCH_HALT,
   1018	.clkr = {
   1019		.enable_reg = 0xf03c,
   1020		.enable_mask = BIT(0),
   1021		.hw.init = &(struct clk_init_data){
   1022			.name = "gcc_aggre2_usb3_axi_clk",
   1023			.parent_hws = (const struct clk_hw*[]) {
   1024				&usb30_master_clk_src.clkr.hw,
   1025			},
   1026			.num_parents = 1,
   1027			.ops = &clk_branch2_ops,
   1028		},
   1029	},
   1030};
   1031
   1032static struct clk_branch gcc_bimc_gfx_clk = {
   1033	.halt_reg = 0x7106c,
   1034	.halt_check = BRANCH_VOTED,
   1035	.clkr = {
   1036		.enable_reg = 0x7106c,
   1037		.enable_mask = BIT(0),
   1038		.hw.init = &(struct clk_init_data){
   1039			.name = "gcc_bimc_gfx_clk",
   1040			.ops = &clk_branch2_ops,
   1041		},
   1042	},
   1043};
   1044
   1045static struct clk_branch gcc_bimc_hmss_axi_clk = {
   1046	.halt_reg = 0x48004,
   1047	.halt_check = BRANCH_HALT_VOTED,
   1048	.clkr = {
   1049		.enable_reg = 0x52004,
   1050		.enable_mask = BIT(22),
   1051		.hw.init = &(struct clk_init_data){
   1052			.name = "gcc_bimc_hmss_axi_clk",
   1053			.ops = &clk_branch2_ops,
   1054		},
   1055	},
   1056};
   1057
   1058static struct clk_branch gcc_bimc_mss_q6_axi_clk = {
   1059	.halt_reg = 0x4401c,
   1060	.halt_check = BRANCH_HALT,
   1061	.clkr = {
   1062		.enable_reg = 0x4401c,
   1063		.enable_mask = BIT(0),
   1064		.hw.init = &(struct clk_init_data){
   1065			.name = "gcc_bimc_mss_q6_axi_clk",
   1066			.ops = &clk_branch2_ops,
   1067		},
   1068	},
   1069};
   1070
   1071static struct clk_branch gcc_blsp1_ahb_clk = {
   1072	.halt_reg = 0x17004,
   1073	.halt_check = BRANCH_HALT_VOTED,
   1074	.clkr = {
   1075		.enable_reg = 0x52004,
   1076		.enable_mask = BIT(17),
   1077		.hw.init = &(struct clk_init_data){
   1078			.name = "gcc_blsp1_ahb_clk",
   1079			.ops = &clk_branch2_ops,
   1080		},
   1081	},
   1082};
   1083
   1084static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
   1085	.halt_reg = 0x19008,
   1086	.halt_check = BRANCH_HALT,
   1087	.clkr = {
   1088		.enable_reg = 0x19008,
   1089		.enable_mask = BIT(0),
   1090		.hw.init = &(struct clk_init_data){
   1091			.name = "gcc_blsp1_qup1_i2c_apps_clk",
   1092			.parent_hws = (const struct clk_hw*[]) {
   1093				&blsp1_qup1_i2c_apps_clk_src.clkr.hw,
   1094			},
   1095			.num_parents = 1,
   1096			.flags = CLK_SET_RATE_PARENT,
   1097			.ops = &clk_branch2_ops,
   1098		},
   1099	},
   1100};
   1101
   1102static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
   1103	.halt_reg = 0x19004,
   1104	.halt_check = BRANCH_HALT,
   1105	.clkr = {
   1106		.enable_reg = 0x19004,
   1107		.enable_mask = BIT(0),
   1108		.hw.init = &(struct clk_init_data){
   1109			.name = "gcc_blsp1_qup1_spi_apps_clk",
   1110			.parent_hws = (const struct clk_hw*[]) {
   1111				&blsp1_qup1_spi_apps_clk_src.clkr.hw,
   1112			},
   1113			.num_parents = 1,
   1114			.flags = CLK_SET_RATE_PARENT,
   1115			.ops = &clk_branch2_ops,
   1116		},
   1117	},
   1118};
   1119
   1120static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
   1121	.halt_reg = 0x1b008,
   1122	.halt_check = BRANCH_HALT,
   1123	.clkr = {
   1124		.enable_reg = 0x1b008,
   1125		.enable_mask = BIT(0),
   1126		.hw.init = &(struct clk_init_data){
   1127			.name = "gcc_blsp1_qup2_i2c_apps_clk",
   1128			.parent_hws = (const struct clk_hw*[]) {
   1129				&blsp1_qup2_i2c_apps_clk_src.clkr.hw,
   1130			},
   1131			.num_parents = 1,
   1132			.flags = CLK_SET_RATE_PARENT,
   1133			.ops = &clk_branch2_ops,
   1134		},
   1135	},
   1136};
   1137
   1138static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
   1139	.halt_reg = 0x1b004,
   1140	.halt_check = BRANCH_HALT,
   1141	.clkr = {
   1142		.enable_reg = 0x1b004,
   1143		.enable_mask = BIT(0),
   1144		.hw.init = &(struct clk_init_data){
   1145			.name = "gcc_blsp1_qup2_spi_apps_clk",
   1146			.parent_hws = (const struct clk_hw*[]) {
   1147				&blsp1_qup2_spi_apps_clk_src.clkr.hw,
   1148			},
   1149			.num_parents = 1,
   1150			.flags = CLK_SET_RATE_PARENT,
   1151			.ops = &clk_branch2_ops,
   1152		},
   1153	},
   1154};
   1155
   1156static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
   1157	.halt_reg = 0x1d008,
   1158	.halt_check = BRANCH_HALT,
   1159	.clkr = {
   1160		.enable_reg = 0x1d008,
   1161		.enable_mask = BIT(0),
   1162		.hw.init = &(struct clk_init_data){
   1163			.name = "gcc_blsp1_qup3_i2c_apps_clk",
   1164			.parent_hws = (const struct clk_hw*[]) {
   1165				&blsp1_qup3_i2c_apps_clk_src.clkr.hw,
   1166			},
   1167			.num_parents = 1,
   1168			.flags = CLK_SET_RATE_PARENT,
   1169			.ops = &clk_branch2_ops,
   1170		},
   1171	},
   1172};
   1173
   1174static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
   1175	.halt_reg = 0x1d004,
   1176	.halt_check = BRANCH_HALT,
   1177	.clkr = {
   1178		.enable_reg = 0x1d004,
   1179		.enable_mask = BIT(0),
   1180		.hw.init = &(struct clk_init_data){
   1181			.name = "gcc_blsp1_qup3_spi_apps_clk",
   1182			.parent_hws = (const struct clk_hw*[]) {
   1183				&blsp1_qup3_spi_apps_clk_src.clkr.hw,
   1184			},
   1185			.num_parents = 1,
   1186			.flags = CLK_SET_RATE_PARENT,
   1187			.ops = &clk_branch2_ops,
   1188		},
   1189	},
   1190};
   1191
   1192static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
   1193	.halt_reg = 0x1f008,
   1194	.halt_check = BRANCH_HALT,
   1195	.clkr = {
   1196		.enable_reg = 0x1f008,
   1197		.enable_mask = BIT(0),
   1198		.hw.init = &(struct clk_init_data){
   1199			.name = "gcc_blsp1_qup4_i2c_apps_clk",
   1200			.parent_hws = (const struct clk_hw*[]) {
   1201				&blsp1_qup4_i2c_apps_clk_src.clkr.hw,
   1202			},
   1203			.num_parents = 1,
   1204			.flags = CLK_SET_RATE_PARENT,
   1205			.ops = &clk_branch2_ops,
   1206		},
   1207	},
   1208};
   1209
   1210static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
   1211	.halt_reg = 0x1f004,
   1212	.halt_check = BRANCH_HALT,
   1213	.clkr = {
   1214		.enable_reg = 0x1f004,
   1215		.enable_mask = BIT(0),
   1216		.hw.init = &(struct clk_init_data){
   1217			.name = "gcc_blsp1_qup4_spi_apps_clk",
   1218			.parent_hws = (const struct clk_hw*[]) {
   1219				&blsp1_qup4_spi_apps_clk_src.clkr.hw,
   1220			},
   1221			.num_parents = 1,
   1222			.flags = CLK_SET_RATE_PARENT,
   1223			.ops = &clk_branch2_ops,
   1224		},
   1225	},
   1226};
   1227
   1228static struct clk_branch gcc_blsp1_uart1_apps_clk = {
   1229	.halt_reg = 0x1a004,
   1230	.halt_check = BRANCH_HALT,
   1231	.clkr = {
   1232		.enable_reg = 0x1a004,
   1233		.enable_mask = BIT(0),
   1234		.hw.init = &(struct clk_init_data){
   1235			.name = "gcc_blsp1_uart1_apps_clk",
   1236			.parent_hws = (const struct clk_hw*[]) {
   1237				&blsp1_uart1_apps_clk_src.clkr.hw,
   1238			},
   1239			.num_parents = 1,
   1240			.flags = CLK_SET_RATE_PARENT,
   1241			.ops = &clk_branch2_ops,
   1242		},
   1243	},
   1244};
   1245
   1246static struct clk_branch gcc_blsp1_uart2_apps_clk = {
   1247	.halt_reg = 0x1c004,
   1248	.halt_check = BRANCH_HALT,
   1249	.clkr = {
   1250		.enable_reg = 0x1c004,
   1251		.enable_mask = BIT(0),
   1252		.hw.init = &(struct clk_init_data){
   1253			.name = "gcc_blsp1_uart2_apps_clk",
   1254			.parent_hws = (const struct clk_hw*[]) {
   1255				&blsp1_uart2_apps_clk_src.clkr.hw,
   1256			},
   1257			.num_parents = 1,
   1258			.flags = CLK_SET_RATE_PARENT,
   1259			.ops = &clk_branch2_ops,
   1260		},
   1261	},
   1262};
   1263
   1264static struct clk_branch gcc_blsp2_ahb_clk = {
   1265	.halt_reg = 0x25004,
   1266	.halt_check = BRANCH_HALT_VOTED,
   1267	.clkr = {
   1268		.enable_reg = 0x52004,
   1269		.enable_mask = BIT(15),
   1270		.hw.init = &(struct clk_init_data){
   1271			.name = "gcc_blsp2_ahb_clk",
   1272			.ops = &clk_branch2_ops,
   1273		},
   1274	},
   1275};
   1276
   1277static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
   1278	.halt_reg = 0x26008,
   1279	.halt_check = BRANCH_HALT,
   1280	.clkr = {
   1281		.enable_reg = 0x26008,
   1282		.enable_mask = BIT(0),
   1283		.hw.init = &(struct clk_init_data){
   1284			.name = "gcc_blsp2_qup1_i2c_apps_clk",
   1285			.parent_hws = (const struct clk_hw*[]) {
   1286				&blsp2_qup1_i2c_apps_clk_src.clkr.hw,
   1287			},
   1288			.num_parents = 1,
   1289			.flags = CLK_SET_RATE_PARENT,
   1290			.ops = &clk_branch2_ops,
   1291		},
   1292	},
   1293};
   1294
   1295static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
   1296	.halt_reg = 0x26004,
   1297	.halt_check = BRANCH_HALT,
   1298	.clkr = {
   1299		.enable_reg = 0x26004,
   1300		.enable_mask = BIT(0),
   1301		.hw.init = &(struct clk_init_data){
   1302			.name = "gcc_blsp2_qup1_spi_apps_clk",
   1303			.parent_hws = (const struct clk_hw*[]) {
   1304				&blsp2_qup1_spi_apps_clk_src.clkr.hw,
   1305			},
   1306			.num_parents = 1,
   1307			.flags = CLK_SET_RATE_PARENT,
   1308			.ops = &clk_branch2_ops,
   1309		},
   1310	},
   1311};
   1312
   1313static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
   1314	.halt_reg = 0x28008,
   1315	.halt_check = BRANCH_HALT,
   1316	.clkr = {
   1317		.enable_reg = 0x28008,
   1318		.enable_mask = BIT(0),
   1319		.hw.init = &(struct clk_init_data){
   1320			.name = "gcc_blsp2_qup2_i2c_apps_clk",
   1321			.parent_hws = (const struct clk_hw*[]) {
   1322				&blsp2_qup2_i2c_apps_clk_src.clkr.hw,
   1323			},
   1324			.num_parents = 1,
   1325			.flags = CLK_SET_RATE_PARENT,
   1326			.ops = &clk_branch2_ops,
   1327		},
   1328	},
   1329};
   1330
   1331static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
   1332	.halt_reg = 0x28004,
   1333	.halt_check = BRANCH_HALT,
   1334	.clkr = {
   1335		.enable_reg = 0x28004,
   1336		.enable_mask = BIT(0),
   1337		.hw.init = &(struct clk_init_data){
   1338			.name = "gcc_blsp2_qup2_spi_apps_clk",
   1339			.parent_hws = (const struct clk_hw*[]) {
   1340				&blsp2_qup2_spi_apps_clk_src.clkr.hw,
   1341			},
   1342			.num_parents = 1,
   1343			.flags = CLK_SET_RATE_PARENT,
   1344			.ops = &clk_branch2_ops,
   1345		},
   1346	},
   1347};
   1348
   1349static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
   1350	.halt_reg = 0x2a008,
   1351	.halt_check = BRANCH_HALT,
   1352	.clkr = {
   1353		.enable_reg = 0x2a008,
   1354		.enable_mask = BIT(0),
   1355		.hw.init = &(struct clk_init_data){
   1356			.name = "gcc_blsp2_qup3_i2c_apps_clk",
   1357			.parent_hws = (const struct clk_hw*[]) {
   1358				&blsp2_qup3_i2c_apps_clk_src.clkr.hw,
   1359			},
   1360			.num_parents = 1,
   1361			.flags = CLK_SET_RATE_PARENT,
   1362			.ops = &clk_branch2_ops,
   1363		},
   1364	},
   1365};
   1366
   1367static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
   1368	.halt_reg = 0x2a004,
   1369	.halt_check = BRANCH_HALT,
   1370	.clkr = {
   1371		.enable_reg = 0x2a004,
   1372		.enable_mask = BIT(0),
   1373		.hw.init = &(struct clk_init_data){
   1374			.name = "gcc_blsp2_qup3_spi_apps_clk",
   1375			.parent_hws = (const struct clk_hw*[]) {
   1376				&blsp2_qup3_spi_apps_clk_src.clkr.hw,
   1377			},
   1378			.num_parents = 1,
   1379			.flags = CLK_SET_RATE_PARENT,
   1380			.ops = &clk_branch2_ops,
   1381		},
   1382	},
   1383};
   1384
   1385static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
   1386	.halt_reg = 0x2c008,
   1387	.halt_check = BRANCH_HALT,
   1388	.clkr = {
   1389		.enable_reg = 0x2c008,
   1390		.enable_mask = BIT(0),
   1391		.hw.init = &(struct clk_init_data){
   1392			.name = "gcc_blsp2_qup4_i2c_apps_clk",
   1393			.parent_hws = (const struct clk_hw*[]) {
   1394				&blsp2_qup4_i2c_apps_clk_src.clkr.hw,
   1395			},
   1396			.num_parents = 1,
   1397			.flags = CLK_SET_RATE_PARENT,
   1398			.ops = &clk_branch2_ops,
   1399		},
   1400	},
   1401};
   1402
   1403static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
   1404	.halt_reg = 0x2c004,
   1405	.halt_check = BRANCH_HALT,
   1406	.clkr = {
   1407		.enable_reg = 0x2c004,
   1408		.enable_mask = BIT(0),
   1409		.hw.init = &(struct clk_init_data){
   1410			.name = "gcc_blsp2_qup4_spi_apps_clk",
   1411			.parent_hws = (const struct clk_hw*[]) {
   1412				&blsp2_qup4_spi_apps_clk_src.clkr.hw,
   1413			},
   1414			.num_parents = 1,
   1415			.flags = CLK_SET_RATE_PARENT,
   1416			.ops = &clk_branch2_ops,
   1417		},
   1418	},
   1419};
   1420
   1421static struct clk_branch gcc_blsp2_uart1_apps_clk = {
   1422	.halt_reg = 0x27004,
   1423	.halt_check = BRANCH_HALT,
   1424	.clkr = {
   1425		.enable_reg = 0x27004,
   1426		.enable_mask = BIT(0),
   1427		.hw.init = &(struct clk_init_data){
   1428			.name = "gcc_blsp2_uart1_apps_clk",
   1429			.parent_hws = (const struct clk_hw*[]) {
   1430				&blsp2_uart1_apps_clk_src.clkr.hw,
   1431			},
   1432			.num_parents = 1,
   1433			.flags = CLK_SET_RATE_PARENT,
   1434			.ops = &clk_branch2_ops,
   1435		},
   1436	},
   1437};
   1438
   1439static struct clk_branch gcc_blsp2_uart2_apps_clk = {
   1440	.halt_reg = 0x29004,
   1441	.halt_check = BRANCH_HALT,
   1442	.clkr = {
   1443		.enable_reg = 0x29004,
   1444		.enable_mask = BIT(0),
   1445		.hw.init = &(struct clk_init_data){
   1446			.name = "gcc_blsp2_uart2_apps_clk",
   1447			.parent_hws = (const struct clk_hw*[]) {
   1448				&blsp2_uart2_apps_clk_src.clkr.hw,
   1449			},
   1450			.num_parents = 1,
   1451			.flags = CLK_SET_RATE_PARENT,
   1452			.ops = &clk_branch2_ops,
   1453		},
   1454	},
   1455};
   1456
   1457static struct clk_branch gcc_boot_rom_ahb_clk = {
   1458	.halt_reg = 0x38004,
   1459	.halt_check = BRANCH_HALT_VOTED,
   1460	.clkr = {
   1461		.enable_reg = 0x52004,
   1462		.enable_mask = BIT(10),
   1463		.hw.init = &(struct clk_init_data){
   1464			.name = "gcc_boot_rom_ahb_clk",
   1465			.ops = &clk_branch2_ops,
   1466		},
   1467	},
   1468};
   1469
   1470static struct clk_branch gcc_cfg_noc_usb2_axi_clk = {
   1471	.halt_reg = 0x5058,
   1472	.halt_check = BRANCH_HALT,
   1473	.clkr = {
   1474		.enable_reg = 0x5058,
   1475		.enable_mask = BIT(0),
   1476		.hw.init = &(struct clk_init_data){
   1477			.name = "gcc_cfg_noc_usb2_axi_clk",
   1478			.parent_hws = (const struct clk_hw*[]) {
   1479				&usb20_master_clk_src.clkr.hw,
   1480			},
   1481			.num_parents = 1,
   1482			.ops = &clk_branch2_ops,
   1483		},
   1484	},
   1485};
   1486
   1487static struct clk_branch gcc_cfg_noc_usb3_axi_clk = {
   1488	.halt_reg = 0x5018,
   1489	.halt_check = BRANCH_HALT,
   1490	.clkr = {
   1491		.enable_reg = 0x5018,
   1492		.enable_mask = BIT(0),
   1493		.hw.init = &(struct clk_init_data){
   1494			.name = "gcc_cfg_noc_usb3_axi_clk",
   1495			.parent_hws = (const struct clk_hw*[]) {
   1496				&usb30_master_clk_src.clkr.hw,
   1497			},
   1498			.num_parents = 1,
   1499			.ops = &clk_branch2_ops,
   1500		},
   1501	},
   1502};
   1503
   1504static struct clk_branch gcc_dcc_ahb_clk = {
   1505	.halt_reg = 0x84004,
   1506	.clkr = {
   1507		.enable_reg = 0x84004,
   1508		.enable_mask = BIT(0),
   1509		.hw.init = &(struct clk_init_data){
   1510			.name = "gcc_dcc_ahb_clk",
   1511			.ops = &clk_branch2_ops,
   1512		},
   1513	},
   1514};
   1515
   1516static struct clk_branch gcc_gp1_clk = {
   1517	.halt_reg = 0x64000,
   1518	.halt_check = BRANCH_HALT,
   1519	.clkr = {
   1520		.enable_reg = 0x64000,
   1521		.enable_mask = BIT(0),
   1522		.hw.init = &(struct clk_init_data){
   1523			.name = "gcc_gp1_clk",
   1524			.parent_hws = (const struct clk_hw*[]) {
   1525				&gp1_clk_src.clkr.hw,
   1526			},
   1527			.num_parents = 1,
   1528			.flags = CLK_SET_RATE_PARENT,
   1529			.ops = &clk_branch2_ops,
   1530		},
   1531	},
   1532};
   1533
   1534static struct clk_branch gcc_gp2_clk = {
   1535	.halt_reg = 0x65000,
   1536	.halt_check = BRANCH_HALT,
   1537	.clkr = {
   1538		.enable_reg = 0x65000,
   1539		.enable_mask = BIT(0),
   1540		.hw.init = &(struct clk_init_data){
   1541			.name = "gcc_gp2_clk",
   1542			.parent_hws = (const struct clk_hw*[]) {
   1543				&gp2_clk_src.clkr.hw,
   1544			},
   1545			.num_parents = 1,
   1546			.flags = CLK_SET_RATE_PARENT,
   1547			.ops = &clk_branch2_ops,
   1548		},
   1549	},
   1550};
   1551
   1552static struct clk_branch gcc_gp3_clk = {
   1553	.halt_reg = 0x66000,
   1554	.halt_check = BRANCH_HALT,
   1555	.clkr = {
   1556		.enable_reg = 0x66000,
   1557		.enable_mask = BIT(0),
   1558		.hw.init = &(struct clk_init_data){
   1559			.name = "gcc_gp3_clk",
   1560			.parent_hws = (const struct clk_hw*[]) {
   1561				&gp3_clk_src.clkr.hw,
   1562			},
   1563			.num_parents = 1,
   1564			.flags = CLK_SET_RATE_PARENT,
   1565			.ops = &clk_branch2_ops,
   1566		},
   1567	},
   1568};
   1569
   1570static struct clk_branch gcc_gpu_bimc_gfx_clk = {
   1571	.halt_reg = 0x71010,
   1572	.halt_check = BRANCH_VOTED,
   1573	.clkr = {
   1574		.enable_reg = 0x71010,
   1575		.enable_mask = BIT(0),
   1576		.hw.init = &(struct clk_init_data){
   1577			.name = "gcc_gpu_bimc_gfx_clk",
   1578			.ops = &clk_branch2_ops,
   1579		},
   1580	},
   1581};
   1582
   1583static struct clk_branch gcc_gpu_cfg_ahb_clk = {
   1584	.halt_reg = 0x71004,
   1585	.halt_check = BRANCH_VOTED,
   1586	.clkr = {
   1587		.enable_reg = 0x71004,
   1588		.enable_mask = BIT(0),
   1589		.hw.init = &(struct clk_init_data){
   1590			.name = "gcc_gpu_cfg_ahb_clk",
   1591			.ops = &clk_branch2_ops,
   1592			.flags = CLK_IS_CRITICAL,
   1593		},
   1594	},
   1595};
   1596
   1597static struct clk_branch gcc_gpu_gpll0_clk = {
   1598	.halt_reg = 0x5200c,
   1599	.halt_check = BRANCH_HALT_DELAY,
   1600	.clkr = {
   1601		.enable_reg = 0x5200c,
   1602		.enable_mask = BIT(4),
   1603		.hw.init = &(struct clk_init_data){
   1604			.name = "gcc_gpu_gpll0_clk",
   1605			.parent_hws = (const struct clk_hw*[]) {
   1606				&gpll0.clkr.hw,
   1607			},
   1608			.num_parents = 1,
   1609			.ops = &clk_branch2_ops,
   1610		},
   1611	},
   1612};
   1613
   1614static struct clk_branch gcc_gpu_gpll0_div_clk = {
   1615	.halt_reg = 0x5200c,
   1616	.halt_check = BRANCH_HALT_DELAY,
   1617	.clkr = {
   1618		.enable_reg = 0x5200c,
   1619		.enable_mask = BIT(3),
   1620		.hw.init = &(struct clk_init_data){
   1621			.name = "gcc_gpu_gpll0_div_clk",
   1622			.parent_hws = (const struct clk_hw*[]) {
   1623				&gpll0_early_div.hw,
   1624			},
   1625			.num_parents = 1,
   1626			.ops = &clk_branch2_ops,
   1627		},
   1628	},
   1629};
   1630
   1631static struct clk_branch gcc_hmss_dvm_bus_clk = {
   1632	.halt_reg = 0x4808c,
   1633	.halt_check = BRANCH_HALT,
   1634	.clkr = {
   1635		.enable_reg = 0x4808c,
   1636		.enable_mask = BIT(0),
   1637		.hw.init = &(struct clk_init_data){
   1638			.name = "gcc_hmss_dvm_bus_clk",
   1639			.ops = &clk_branch2_ops,
   1640			.flags = CLK_IGNORE_UNUSED,
   1641		},
   1642	},
   1643};
   1644
   1645static struct clk_branch gcc_hmss_rbcpr_clk = {
   1646	.halt_reg = 0x48008,
   1647	.halt_check = BRANCH_HALT,
   1648	.clkr = {
   1649		.enable_reg = 0x48008,
   1650		.enable_mask = BIT(0),
   1651		.hw.init = &(struct clk_init_data){
   1652			.name = "gcc_hmss_rbcpr_clk",
   1653			.parent_hws = (const struct clk_hw*[]) {
   1654				&hmss_rbcpr_clk_src.clkr.hw,
   1655			},
   1656			.num_parents = 1,
   1657			.flags = CLK_SET_RATE_PARENT,
   1658			.ops = &clk_branch2_ops,
   1659		},
   1660	},
   1661};
   1662
   1663static struct clk_branch gcc_mmss_gpll0_clk = {
   1664	.halt_reg = 0x5200c,
   1665	.halt_check = BRANCH_HALT_DELAY,
   1666	.clkr = {
   1667		.enable_reg = 0x5200c,
   1668		.enable_mask = BIT(1),
   1669		.hw.init = &(struct clk_init_data){
   1670			.name = "gcc_mmss_gpll0_clk",
   1671			.parent_hws = (const struct clk_hw*[]) {
   1672				&gpll0.clkr.hw,
   1673			},
   1674			.num_parents = 1,
   1675			.ops = &clk_branch2_ops,
   1676		},
   1677	},
   1678};
   1679
   1680static struct clk_branch gcc_mmss_gpll0_div_clk = {
   1681	.halt_reg = 0x5200c,
   1682	.halt_check = BRANCH_HALT_DELAY,
   1683	.clkr = {
   1684		.enable_reg = 0x5200c,
   1685		.enable_mask = BIT(0),
   1686		.hw.init = &(struct clk_init_data){
   1687			.name = "gcc_mmss_gpll0_div_clk",
   1688			.parent_hws = (const struct clk_hw*[]) {
   1689				&gpll0_early_div.hw,
   1690			},
   1691			.num_parents = 1,
   1692			.ops = &clk_branch2_ops,
   1693		},
   1694	},
   1695};
   1696
   1697static struct clk_branch gcc_mmss_noc_cfg_ahb_clk = {
   1698	.halt_reg = 0x9004,
   1699	.halt_check = BRANCH_HALT,
   1700	.clkr = {
   1701		.enable_reg = 0x9004,
   1702		.enable_mask = BIT(0),
   1703		.hw.init = &(struct clk_init_data){
   1704			.name = "gcc_mmss_noc_cfg_ahb_clk",
   1705			.ops = &clk_branch2_ops,
   1706			/*
   1707			 * Any access to mmss depends on this clock.
   1708			 * Gating this clock has been shown to crash the system
   1709			 * when mmssnoc_axi_rpm_clk is inited in rpmcc.
   1710			 */
   1711			.flags = CLK_IS_CRITICAL,
   1712		},
   1713	},
   1714};
   1715
   1716static struct clk_branch gcc_mmss_sys_noc_axi_clk = {
   1717	.halt_reg = 0x9000,
   1718	.halt_check = BRANCH_HALT,
   1719	.clkr = {
   1720		.enable_reg = 0x9000,
   1721		.enable_mask = BIT(0),
   1722		.hw.init = &(struct clk_init_data){
   1723			.name = "gcc_mmss_sys_noc_axi_clk",
   1724			.ops = &clk_branch2_ops,
   1725		},
   1726	},
   1727};
   1728
   1729static struct clk_branch gcc_mss_cfg_ahb_clk = {
   1730	.halt_reg = 0x8a000,
   1731	.clkr = {
   1732		.enable_reg = 0x8a000,
   1733		.enable_mask = BIT(0),
   1734		.hw.init = &(struct clk_init_data){
   1735			.name = "gcc_mss_cfg_ahb_clk",
   1736			.ops = &clk_branch2_ops,
   1737		},
   1738	},
   1739};
   1740
   1741static struct clk_branch gcc_mss_mnoc_bimc_axi_clk = {
   1742	.halt_reg = 0x8a004,
   1743	.halt_check = BRANCH_HALT,
   1744	.hwcg_reg = 0x8a004,
   1745	.hwcg_bit = 1,
   1746	.clkr = {
   1747		.enable_reg = 0x8a004,
   1748		.enable_mask = BIT(0),
   1749		.hw.init = &(struct clk_init_data){
   1750			.name = "gcc_mss_mnoc_bimc_axi_clk",
   1751			.ops = &clk_branch2_ops,
   1752		},
   1753	},
   1754};
   1755
   1756static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
   1757	.halt_reg = 0x8a040,
   1758	.clkr = {
   1759		.enable_reg = 0x8a040,
   1760		.enable_mask = BIT(0),
   1761		.hw.init = &(struct clk_init_data){
   1762			.name = "gcc_mss_q6_bimc_axi_clk",
   1763			.ops = &clk_branch2_ops,
   1764		},
   1765	},
   1766};
   1767
   1768static struct clk_branch gcc_mss_snoc_axi_clk = {
   1769	.halt_reg = 0x8a03c,
   1770	.clkr = {
   1771		.enable_reg = 0x8a03c,
   1772		.enable_mask = BIT(0),
   1773		.hw.init = &(struct clk_init_data){
   1774			.name = "gcc_mss_snoc_axi_clk",
   1775			.ops = &clk_branch2_ops,
   1776		},
   1777	},
   1778};
   1779
   1780static struct clk_branch gcc_pdm2_clk = {
   1781	.halt_reg = 0x3300c,
   1782	.halt_check = BRANCH_HALT,
   1783	.clkr = {
   1784		.enable_reg = 0x3300c,
   1785		.enable_mask = BIT(0),
   1786		.hw.init = &(struct clk_init_data){
   1787			.name = "gcc_pdm2_clk",
   1788			.parent_hws = (const struct clk_hw*[]) {
   1789				&pdm2_clk_src.clkr.hw,
   1790			},
   1791			.num_parents = 1,
   1792			.flags = CLK_SET_RATE_PARENT,
   1793			.ops = &clk_branch2_ops,
   1794		},
   1795	},
   1796};
   1797
   1798static struct clk_branch gcc_pdm_ahb_clk = {
   1799	.halt_reg = 0x33004,
   1800	.halt_check = BRANCH_HALT,
   1801	.clkr = {
   1802		.enable_reg = 0x33004,
   1803		.enable_mask = BIT(0),
   1804		.hw.init = &(struct clk_init_data){
   1805			.name = "gcc_pdm_ahb_clk",
   1806			.ops = &clk_branch2_ops,
   1807		},
   1808	},
   1809};
   1810
   1811static struct clk_branch gcc_prng_ahb_clk = {
   1812	.halt_reg = 0x34004,
   1813	.halt_check = BRANCH_HALT_VOTED,
   1814	.clkr = {
   1815		.enable_reg = 0x52004,
   1816		.enable_mask = BIT(13),
   1817		.hw.init = &(struct clk_init_data){
   1818			.name = "gcc_prng_ahb_clk",
   1819			.ops = &clk_branch2_ops,
   1820		},
   1821	},
   1822};
   1823
   1824static struct clk_branch gcc_qspi_ahb_clk = {
   1825	.halt_reg = 0x4d004,
   1826	.halt_check = BRANCH_HALT,
   1827	.clkr = {
   1828		.enable_reg = 0x4d004,
   1829		.enable_mask = BIT(0),
   1830		.hw.init = &(struct clk_init_data){
   1831			.name = "gcc_qspi_ahb_clk",
   1832			.ops = &clk_branch2_ops,
   1833		},
   1834	},
   1835};
   1836
   1837static struct clk_branch gcc_qspi_ser_clk = {
   1838	.halt_reg = 0x4d008,
   1839	.halt_check = BRANCH_HALT,
   1840	.clkr = {
   1841		.enable_reg = 0x4d008,
   1842		.enable_mask = BIT(0),
   1843		.hw.init = &(struct clk_init_data){
   1844			.name = "gcc_qspi_ser_clk",
   1845			.parent_hws = (const struct clk_hw*[]) {
   1846				&qspi_ser_clk_src.clkr.hw,
   1847			},
   1848			.num_parents = 1,
   1849			.flags = CLK_SET_RATE_PARENT,
   1850			.ops = &clk_branch2_ops,
   1851		},
   1852	},
   1853};
   1854
   1855static struct clk_branch gcc_rx0_usb2_clkref_clk = {
   1856	.halt_reg = 0x88018,
   1857	.halt_check = BRANCH_HALT_VOTED,
   1858	.clkr = {
   1859		.enable_reg = 0x88018,
   1860		.enable_mask = BIT(0),
   1861		.hw.init = &(struct clk_init_data){
   1862			.name = "gcc_rx0_usb2_clkref_clk",
   1863			.ops = &clk_branch2_ops,
   1864		},
   1865	},
   1866};
   1867
   1868static struct clk_branch gcc_rx1_usb2_clkref_clk = {
   1869	.halt_reg = 0x88014,
   1870	.halt_check = BRANCH_HALT_VOTED,
   1871	.clkr = {
   1872		.enable_reg = 0x88014,
   1873		.enable_mask = BIT(0),
   1874		.hw.init = &(struct clk_init_data){
   1875			.name = "gcc_rx1_usb2_clkref_clk",
   1876			.ops = &clk_branch2_ops,
   1877		},
   1878	},
   1879};
   1880
   1881static struct clk_branch gcc_sdcc1_ahb_clk = {
   1882	.halt_reg = 0x16008,
   1883	.halt_check = BRANCH_HALT,
   1884	.clkr = {
   1885		.enable_reg = 0x16008,
   1886		.enable_mask = BIT(0),
   1887		.hw.init = &(struct clk_init_data){
   1888			.name = "gcc_sdcc1_ahb_clk",
   1889			.ops = &clk_branch2_ops,
   1890		},
   1891	},
   1892};
   1893
   1894static struct clk_branch gcc_sdcc1_apps_clk = {
   1895	.halt_reg = 0x16004,
   1896	.halt_check = BRANCH_HALT,
   1897	.clkr = {
   1898		.enable_reg = 0x16004,
   1899		.enable_mask = BIT(0),
   1900		.hw.init = &(struct clk_init_data){
   1901			.name = "gcc_sdcc1_apps_clk",
   1902			.parent_hws = (const struct clk_hw*[]) {
   1903				&sdcc1_apps_clk_src.clkr.hw,
   1904			},
   1905			.num_parents = 1,
   1906			.flags = CLK_SET_RATE_PARENT,
   1907			.ops = &clk_branch2_ops,
   1908		},
   1909	},
   1910};
   1911
   1912static struct clk_branch gcc_sdcc1_ice_core_clk = {
   1913	.halt_reg = 0x1600c,
   1914	.halt_check = BRANCH_HALT,
   1915	.clkr = {
   1916		.enable_reg = 0x1600c,
   1917		.enable_mask = BIT(0),
   1918		.hw.init = &(struct clk_init_data){
   1919			.name = "gcc_sdcc1_ice_core_clk",
   1920			.parent_hws = (const struct clk_hw*[]) {
   1921				&sdcc1_ice_core_clk_src.clkr.hw,
   1922			},
   1923			.num_parents = 1,
   1924			.flags = CLK_SET_RATE_PARENT,
   1925			.ops = &clk_branch2_ops,
   1926		},
   1927	},
   1928};
   1929
   1930static struct clk_branch gcc_sdcc2_ahb_clk = {
   1931	.halt_reg = 0x14008,
   1932	.halt_check = BRANCH_HALT,
   1933	.clkr = {
   1934		.enable_reg = 0x14008,
   1935		.enable_mask = BIT(0),
   1936		.hw.init = &(struct clk_init_data){
   1937			.name = "gcc_sdcc2_ahb_clk",
   1938			.ops = &clk_branch2_ops,
   1939		},
   1940	},
   1941};
   1942
   1943static struct clk_branch gcc_sdcc2_apps_clk = {
   1944	.halt_reg = 0x14004,
   1945	.halt_check = BRANCH_HALT,
   1946	.clkr = {
   1947		.enable_reg = 0x14004,
   1948		.enable_mask = BIT(0),
   1949		.hw.init = &(struct clk_init_data){
   1950			.name = "gcc_sdcc2_apps_clk",
   1951			.parent_hws = (const struct clk_hw*[]) {
   1952				&sdcc2_apps_clk_src.clkr.hw,
   1953			},
   1954			.num_parents = 1,
   1955			.flags = CLK_SET_RATE_PARENT,
   1956			.ops = &clk_branch2_ops,
   1957		},
   1958	},
   1959};
   1960
   1961static struct clk_branch gcc_ufs_ahb_clk = {
   1962	.halt_reg = 0x7500c,
   1963	.halt_check = BRANCH_HALT,
   1964	.clkr = {
   1965		.enable_reg = 0x7500c,
   1966		.enable_mask = BIT(0),
   1967		.hw.init = &(struct clk_init_data){
   1968			.name = "gcc_ufs_ahb_clk",
   1969			.ops = &clk_branch2_ops,
   1970		},
   1971	},
   1972};
   1973
   1974static struct clk_branch gcc_ufs_axi_clk = {
   1975	.halt_reg = 0x75008,
   1976	.halt_check = BRANCH_HALT,
   1977	.clkr = {
   1978		.enable_reg = 0x75008,
   1979		.enable_mask = BIT(0),
   1980		.hw.init = &(struct clk_init_data){
   1981			.name = "gcc_ufs_axi_clk",
   1982			.parent_hws = (const struct clk_hw*[]) {
   1983				&ufs_axi_clk_src.clkr.hw,
   1984			},
   1985			.num_parents = 1,
   1986			.flags = CLK_SET_RATE_PARENT,
   1987			.ops = &clk_branch2_ops,
   1988		},
   1989	},
   1990};
   1991
   1992static struct clk_branch gcc_ufs_clkref_clk = {
   1993	.halt_reg = 0x88008,
   1994	.halt_check = BRANCH_HALT,
   1995	.clkr = {
   1996		.enable_reg = 0x88008,
   1997		.enable_mask = BIT(0),
   1998		.hw.init = &(struct clk_init_data){
   1999			.name = "gcc_ufs_clkref_clk",
   2000			.ops = &clk_branch2_ops,
   2001		},
   2002	},
   2003};
   2004
   2005static struct clk_branch gcc_ufs_ice_core_clk = {
   2006	.halt_reg = 0x7600c,
   2007	.halt_check = BRANCH_HALT,
   2008	.clkr = {
   2009		.enable_reg = 0x7600c,
   2010		.enable_mask = BIT(0),
   2011		.hw.init = &(struct clk_init_data){
   2012			.name = "gcc_ufs_ice_core_clk",
   2013			.parent_hws = (const struct clk_hw*[]) {
   2014				&ufs_ice_core_clk_src.clkr.hw,
   2015			},
   2016			.num_parents = 1,
   2017			.flags = CLK_SET_RATE_PARENT,
   2018			.ops = &clk_branch2_ops,
   2019		},
   2020	},
   2021};
   2022
   2023static struct clk_branch gcc_ufs_phy_aux_clk = {
   2024	.halt_reg = 0x76040,
   2025	.halt_check = BRANCH_HALT,
   2026	.clkr = {
   2027		.enable_reg = 0x76040,
   2028		.enable_mask = BIT(0),
   2029		.hw.init = &(struct clk_init_data){
   2030			.name = "gcc_ufs_phy_aux_clk",
   2031			.parent_hws = (const struct clk_hw*[]) {
   2032				&ufs_phy_aux_clk_src.clkr.hw,
   2033			},
   2034			.num_parents = 1,
   2035			.flags = CLK_SET_RATE_PARENT,
   2036			.ops = &clk_branch2_ops,
   2037		},
   2038	},
   2039};
   2040
   2041static struct clk_branch gcc_ufs_rx_symbol_0_clk = {
   2042	.halt_reg = 0x75014,
   2043	.halt_check = BRANCH_HALT_SKIP,
   2044	.clkr = {
   2045		.enable_reg = 0x75014,
   2046		.enable_mask = BIT(0),
   2047		.hw.init = &(struct clk_init_data){
   2048			.name = "gcc_ufs_rx_symbol_0_clk",
   2049			.ops = &clk_branch2_ops,
   2050		},
   2051	},
   2052};
   2053
   2054static struct clk_branch gcc_ufs_rx_symbol_1_clk = {
   2055	.halt_reg = 0x7605c,
   2056	.halt_check = BRANCH_HALT_SKIP,
   2057	.clkr = {
   2058		.enable_reg = 0x7605c,
   2059		.enable_mask = BIT(0),
   2060		.hw.init = &(struct clk_init_data){
   2061			.name = "gcc_ufs_rx_symbol_1_clk",
   2062			.ops = &clk_branch2_ops,
   2063		},
   2064	},
   2065};
   2066
   2067static struct clk_branch gcc_ufs_tx_symbol_0_clk = {
   2068	.halt_reg = 0x75010,
   2069	.halt_check = BRANCH_HALT_SKIP,
   2070	.clkr = {
   2071		.enable_reg = 0x75010,
   2072		.enable_mask = BIT(0),
   2073		.hw.init = &(struct clk_init_data){
   2074			.name = "gcc_ufs_tx_symbol_0_clk",
   2075			.ops = &clk_branch2_ops,
   2076		},
   2077	},
   2078};
   2079
   2080static struct clk_branch gcc_ufs_unipro_core_clk = {
   2081	.halt_reg = 0x76008,
   2082	.halt_check = BRANCH_HALT,
   2083	.clkr = {
   2084		.enable_reg = 0x76008,
   2085		.enable_mask = BIT(0),
   2086		.hw.init = &(struct clk_init_data){
   2087			.name = "gcc_ufs_unipro_core_clk",
   2088			.parent_hws = (const struct clk_hw*[]) {
   2089				&ufs_unipro_core_clk_src.clkr.hw,
   2090			},
   2091			.flags = CLK_SET_RATE_PARENT,
   2092			.num_parents = 1,
   2093			.ops = &clk_branch2_ops,
   2094		},
   2095	},
   2096};
   2097
   2098static struct clk_branch gcc_usb20_master_clk = {
   2099	.halt_reg = 0x2f004,
   2100	.halt_check = BRANCH_HALT,
   2101	.clkr = {
   2102		.enable_reg = 0x2f004,
   2103		.enable_mask = BIT(0),
   2104		.hw.init = &(struct clk_init_data){
   2105			.name = "gcc_usb20_master_clk",
   2106			.parent_hws = (const struct clk_hw*[]) {
   2107				&usb20_master_clk_src.clkr.hw,
   2108			},
   2109			.flags = CLK_SET_RATE_PARENT,
   2110			.num_parents = 1,
   2111			.ops = &clk_branch2_ops,
   2112		},
   2113	},
   2114};
   2115
   2116static struct clk_branch gcc_usb20_mock_utmi_clk = {
   2117	.halt_reg = 0x2f00c,
   2118	.halt_check = BRANCH_HALT,
   2119	.clkr = {
   2120		.enable_reg = 0x2f00c,
   2121		.enable_mask = BIT(0),
   2122		.hw.init = &(struct clk_init_data){
   2123			.name = "gcc_usb20_mock_utmi_clk",
   2124			.parent_hws = (const struct clk_hw*[]) {
   2125				&usb20_mock_utmi_clk_src.clkr.hw,
   2126			},
   2127			.num_parents = 1,
   2128			.flags = CLK_SET_RATE_PARENT,
   2129			.ops = &clk_branch2_ops,
   2130		},
   2131	},
   2132};
   2133
   2134static struct clk_branch gcc_usb20_sleep_clk = {
   2135	.halt_reg = 0x2f008,
   2136	.halt_check = BRANCH_HALT,
   2137	.clkr = {
   2138		.enable_reg = 0x2f008,
   2139		.enable_mask = BIT(0),
   2140		.hw.init = &(struct clk_init_data){
   2141			.name = "gcc_usb20_sleep_clk",
   2142			.ops = &clk_branch2_ops,
   2143		},
   2144	},
   2145};
   2146
   2147static struct clk_branch gcc_usb30_master_clk = {
   2148	.halt_reg = 0xf008,
   2149	.halt_check = BRANCH_HALT,
   2150	.clkr = {
   2151		.enable_reg = 0xf008,
   2152		.enable_mask = BIT(0),
   2153		.hw.init = &(struct clk_init_data){
   2154			.name = "gcc_usb30_master_clk",
   2155			.parent_hws = (const struct clk_hw*[]) {
   2156				&usb30_master_clk_src.clkr.hw,
   2157			},
   2158			.num_parents = 1,
   2159			.flags = CLK_SET_RATE_PARENT,
   2160			.ops = &clk_branch2_ops,
   2161		},
   2162	},
   2163};
   2164
   2165static struct clk_branch gcc_usb30_mock_utmi_clk = {
   2166	.halt_reg = 0xf010,
   2167	.halt_check = BRANCH_HALT,
   2168	.clkr = {
   2169		.enable_reg = 0xf010,
   2170		.enable_mask = BIT(0),
   2171		.hw.init = &(struct clk_init_data){
   2172			.name = "gcc_usb30_mock_utmi_clk",
   2173			.parent_hws = (const struct clk_hw*[]) {
   2174				&usb30_mock_utmi_clk_src.clkr.hw,
   2175			},
   2176			.num_parents = 1,
   2177			.flags = CLK_SET_RATE_PARENT,
   2178			.ops = &clk_branch2_ops,
   2179		},
   2180	},
   2181};
   2182
   2183static struct clk_branch gcc_usb30_sleep_clk = {
   2184	.halt_reg = 0xf00c,
   2185	.halt_check = BRANCH_HALT,
   2186	.clkr = {
   2187		.enable_reg = 0xf00c,
   2188		.enable_mask = BIT(0),
   2189		.hw.init = &(struct clk_init_data){
   2190			.name = "gcc_usb30_sleep_clk",
   2191			.ops = &clk_branch2_ops,
   2192		},
   2193	},
   2194};
   2195
   2196static struct clk_branch gcc_usb3_clkref_clk = {
   2197	.halt_reg = 0x8800c,
   2198	.halt_check = BRANCH_HALT,
   2199	.clkr = {
   2200		.enable_reg = 0x8800c,
   2201		.enable_mask = BIT(0),
   2202		.hw.init = &(struct clk_init_data){
   2203			.name = "gcc_usb3_clkref_clk",
   2204			.ops = &clk_branch2_ops,
   2205		},
   2206	},
   2207};
   2208
   2209static struct clk_branch gcc_usb3_phy_aux_clk = {
   2210	.halt_reg = 0x50000,
   2211	.halt_check = BRANCH_HALT,
   2212	.clkr = {
   2213		.enable_reg = 0x50000,
   2214		.enable_mask = BIT(0),
   2215		.hw.init = &(struct clk_init_data){
   2216			.name = "gcc_usb3_phy_aux_clk",
   2217			.parent_hws = (const struct clk_hw*[]) {
   2218				&usb3_phy_aux_clk_src.clkr.hw,
   2219			},
   2220			.num_parents = 1,
   2221			.flags = CLK_SET_RATE_PARENT,
   2222			.ops = &clk_branch2_ops,
   2223		},
   2224	},
   2225};
   2226
   2227static struct clk_branch gcc_usb3_phy_pipe_clk = {
   2228	.halt_reg = 0x50004,
   2229	.halt_check = BRANCH_HALT_DELAY,
   2230	.clkr = {
   2231		.enable_reg = 0x50004,
   2232		.enable_mask = BIT(0),
   2233		.hw.init = &(struct clk_init_data){
   2234			.name = "gcc_usb3_phy_pipe_clk",
   2235			.ops = &clk_branch2_ops,
   2236		},
   2237	},
   2238};
   2239
   2240static struct clk_branch gcc_usb_phy_cfg_ahb2phy_clk = {
   2241	.halt_reg = 0x6a004,
   2242	.halt_check = BRANCH_HALT,
   2243	.clkr = {
   2244		.enable_reg = 0x6a004,
   2245		.enable_mask = BIT(0),
   2246		.hw.init = &(struct clk_init_data){
   2247			.name = "gcc_usb_phy_cfg_ahb2phy_clk",
   2248			.ops = &clk_branch2_ops,
   2249		},
   2250	},
   2251};
   2252
   2253static struct gdsc ufs_gdsc = {
   2254	.gdscr = 0x75004,
   2255	.gds_hw_ctrl = 0x0,
   2256	.pd = {
   2257		.name = "ufs_gdsc",
   2258	},
   2259	.pwrsts = PWRSTS_OFF_ON,
   2260	.flags = VOTABLE,
   2261};
   2262
   2263static struct gdsc usb_30_gdsc = {
   2264	.gdscr = 0xf004,
   2265	.gds_hw_ctrl = 0x0,
   2266	.pd = {
   2267		.name = "usb_30_gdsc",
   2268	},
   2269	.pwrsts = PWRSTS_OFF_ON,
   2270	.flags = VOTABLE,
   2271};
   2272
   2273static struct gdsc pcie_0_gdsc = {
   2274	.gdscr = 0x6b004,
   2275	.gds_hw_ctrl = 0x0,
   2276	.pd = {
   2277		.name = "pcie_0_gdsc",
   2278	},
   2279	.pwrsts = PWRSTS_OFF_ON,
   2280	.flags = VOTABLE,
   2281};
   2282
   2283static struct clk_hw *gcc_sdm660_hws[] = {
   2284	&xo.hw,
   2285	&gpll0_early_div.hw,
   2286	&gpll1_early_div.hw,
   2287};
   2288
   2289static struct clk_regmap *gcc_sdm660_clocks[] = {
   2290	[BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
   2291	[BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
   2292	[BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
   2293	[BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
   2294	[BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
   2295	[BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
   2296	[BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
   2297	[BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
   2298	[BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
   2299	[BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
   2300	[BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
   2301	[BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
   2302	[BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
   2303	[BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
   2304	[BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
   2305	[BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
   2306	[BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
   2307	[BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
   2308	[BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
   2309	[BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
   2310	[GCC_AGGRE2_UFS_AXI_CLK] = &gcc_aggre2_ufs_axi_clk.clkr,
   2311	[GCC_AGGRE2_USB3_AXI_CLK] = &gcc_aggre2_usb3_axi_clk.clkr,
   2312	[GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
   2313	[GCC_BIMC_HMSS_AXI_CLK] = &gcc_bimc_hmss_axi_clk.clkr,
   2314	[GCC_BIMC_MSS_Q6_AXI_CLK] = &gcc_bimc_mss_q6_axi_clk.clkr,
   2315	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
   2316	[GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
   2317	[GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
   2318	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
   2319	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
   2320	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
   2321	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
   2322	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
   2323	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
   2324	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
   2325	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
   2326	[GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
   2327	[GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
   2328	[GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
   2329	[GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
   2330	[GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
   2331	[GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
   2332	[GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
   2333	[GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
   2334	[GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
   2335	[GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
   2336	[GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
   2337	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
   2338	[GCC_CFG_NOC_USB2_AXI_CLK] = &gcc_cfg_noc_usb2_axi_clk.clkr,
   2339	[GCC_CFG_NOC_USB3_AXI_CLK] = &gcc_cfg_noc_usb3_axi_clk.clkr,
   2340	[GCC_DCC_AHB_CLK] = &gcc_dcc_ahb_clk.clkr,
   2341	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
   2342	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
   2343	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
   2344	[GCC_GPU_BIMC_GFX_CLK] = &gcc_gpu_bimc_gfx_clk.clkr,
   2345	[GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,
   2346	[GCC_GPU_GPLL0_CLK] = &gcc_gpu_gpll0_clk.clkr,
   2347	[GCC_GPU_GPLL0_DIV_CLK] = &gcc_gpu_gpll0_div_clk.clkr,
   2348	[GCC_HMSS_DVM_BUS_CLK] = &gcc_hmss_dvm_bus_clk.clkr,
   2349	[GCC_HMSS_RBCPR_CLK] = &gcc_hmss_rbcpr_clk.clkr,
   2350	[GCC_MMSS_GPLL0_CLK] = &gcc_mmss_gpll0_clk.clkr,
   2351	[GCC_MMSS_GPLL0_DIV_CLK] = &gcc_mmss_gpll0_div_clk.clkr,
   2352	[GCC_MMSS_NOC_CFG_AHB_CLK] = &gcc_mmss_noc_cfg_ahb_clk.clkr,
   2353	[GCC_MMSS_SYS_NOC_AXI_CLK] = &gcc_mmss_sys_noc_axi_clk.clkr,
   2354	[GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
   2355	[GCC_MSS_MNOC_BIMC_AXI_CLK] = &gcc_mss_mnoc_bimc_axi_clk.clkr,
   2356	[GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
   2357	[GCC_MSS_SNOC_AXI_CLK] = &gcc_mss_snoc_axi_clk.clkr,
   2358	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
   2359	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
   2360	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
   2361	[GCC_QSPI_AHB_CLK] = &gcc_qspi_ahb_clk.clkr,
   2362	[GCC_QSPI_SER_CLK] = &gcc_qspi_ser_clk.clkr,
   2363	[GCC_RX0_USB2_CLKREF_CLK] = &gcc_rx0_usb2_clkref_clk.clkr,
   2364	[GCC_RX1_USB2_CLKREF_CLK] = &gcc_rx1_usb2_clkref_clk.clkr,
   2365	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
   2366	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
   2367	[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
   2368	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
   2369	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
   2370	[GCC_UFS_AHB_CLK] = &gcc_ufs_ahb_clk.clkr,
   2371	[GCC_UFS_AXI_CLK] = &gcc_ufs_axi_clk.clkr,
   2372	[GCC_UFS_CLKREF_CLK] = &gcc_ufs_clkref_clk.clkr,
   2373	[GCC_UFS_ICE_CORE_CLK] = &gcc_ufs_ice_core_clk.clkr,
   2374	[GCC_UFS_PHY_AUX_CLK] = &gcc_ufs_phy_aux_clk.clkr,
   2375	[GCC_UFS_RX_SYMBOL_0_CLK] = &gcc_ufs_rx_symbol_0_clk.clkr,
   2376	[GCC_UFS_RX_SYMBOL_1_CLK] = &gcc_ufs_rx_symbol_1_clk.clkr,
   2377	[GCC_UFS_TX_SYMBOL_0_CLK] = &gcc_ufs_tx_symbol_0_clk.clkr,
   2378	[GCC_UFS_UNIPRO_CORE_CLK] = &gcc_ufs_unipro_core_clk.clkr,
   2379	[GCC_USB20_MASTER_CLK] = &gcc_usb20_master_clk.clkr,
   2380	[GCC_USB20_MOCK_UTMI_CLK] = &gcc_usb20_mock_utmi_clk.clkr,
   2381	[GCC_USB20_SLEEP_CLK] = &gcc_usb20_sleep_clk.clkr,
   2382	[GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
   2383	[GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
   2384	[GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,
   2385	[GCC_USB3_CLKREF_CLK] = &gcc_usb3_clkref_clk.clkr,
   2386	[GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr,
   2387	[GCC_USB3_PHY_PIPE_CLK] = &gcc_usb3_phy_pipe_clk.clkr,
   2388	[GCC_USB_PHY_CFG_AHB2PHY_CLK] = &gcc_usb_phy_cfg_ahb2phy_clk.clkr,
   2389	[GP1_CLK_SRC] = &gp1_clk_src.clkr,
   2390	[GP2_CLK_SRC] = &gp2_clk_src.clkr,
   2391	[GP3_CLK_SRC] = &gp3_clk_src.clkr,
   2392	[GPLL0] = &gpll0.clkr,
   2393	[GPLL0_EARLY] = &gpll0_early.clkr,
   2394	[GPLL1] = &gpll1.clkr,
   2395	[GPLL1_EARLY] = &gpll1_early.clkr,
   2396	[GPLL4] = &gpll4.clkr,
   2397	[GPLL4_EARLY] = &gpll4_early.clkr,
   2398	[HMSS_GPLL0_CLK_SRC] = &hmss_gpll0_clk_src.clkr,
   2399	[HMSS_GPLL4_CLK_SRC] = &hmss_gpll4_clk_src.clkr,
   2400	[HMSS_RBCPR_CLK_SRC] = &hmss_rbcpr_clk_src.clkr,
   2401	[PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
   2402	[QSPI_SER_CLK_SRC] = &qspi_ser_clk_src.clkr,
   2403	[SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
   2404	[SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
   2405	[SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
   2406	[UFS_AXI_CLK_SRC] = &ufs_axi_clk_src.clkr,
   2407	[UFS_ICE_CORE_CLK_SRC] = &ufs_ice_core_clk_src.clkr,
   2408	[UFS_PHY_AUX_CLK_SRC] = &ufs_phy_aux_clk_src.clkr,
   2409	[UFS_UNIPRO_CORE_CLK_SRC] = &ufs_unipro_core_clk_src.clkr,
   2410	[USB20_MASTER_CLK_SRC] = &usb20_master_clk_src.clkr,
   2411	[USB20_MOCK_UTMI_CLK_SRC] = &usb20_mock_utmi_clk_src.clkr,
   2412	[USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
   2413	[USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
   2414	[USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr,
   2415};
   2416
   2417static struct gdsc *gcc_sdm660_gdscs[] = {
   2418	[UFS_GDSC] = &ufs_gdsc,
   2419	[USB_30_GDSC] = &usb_30_gdsc,
   2420	[PCIE_0_GDSC] = &pcie_0_gdsc,
   2421};
   2422
   2423static const struct qcom_reset_map gcc_sdm660_resets[] = {
   2424	[GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 },
   2425	[GCC_QUSB2PHY_SEC_BCR] = { 0x12004 },
   2426	[GCC_UFS_BCR] = { 0x75000 },
   2427	[GCC_USB3_DP_PHY_BCR] = { 0x50028 },
   2428	[GCC_USB3_PHY_BCR] = { 0x50020 },
   2429	[GCC_USB3PHY_PHY_BCR] = { 0x50024 },
   2430	[GCC_USB_20_BCR] = { 0x2f000 },
   2431	[GCC_USB_30_BCR] = { 0xf000 },
   2432	[GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 },
   2433	[GCC_MSS_RESTART] = { 0x79000 },
   2434};
   2435
   2436static const struct regmap_config gcc_sdm660_regmap_config = {
   2437	.reg_bits	= 32,
   2438	.reg_stride	= 4,
   2439	.val_bits	= 32,
   2440	.max_register	= 0x94000,
   2441	.fast_io	= true,
   2442};
   2443
   2444static const struct qcom_cc_desc gcc_sdm660_desc = {
   2445	.config = &gcc_sdm660_regmap_config,
   2446	.clks = gcc_sdm660_clocks,
   2447	.num_clks = ARRAY_SIZE(gcc_sdm660_clocks),
   2448	.resets = gcc_sdm660_resets,
   2449	.num_resets = ARRAY_SIZE(gcc_sdm660_resets),
   2450	.gdscs = gcc_sdm660_gdscs,
   2451	.num_gdscs = ARRAY_SIZE(gcc_sdm660_gdscs),
   2452	.clk_hws = gcc_sdm660_hws,
   2453	.num_clk_hws = ARRAY_SIZE(gcc_sdm660_hws),
   2454};
   2455
   2456static const struct of_device_id gcc_sdm660_match_table[] = {
   2457	{ .compatible = "qcom,gcc-sdm630" },
   2458	{ .compatible = "qcom,gcc-sdm660" },
   2459	{ }
   2460};
   2461MODULE_DEVICE_TABLE(of, gcc_sdm660_match_table);
   2462
   2463static int gcc_sdm660_probe(struct platform_device *pdev)
   2464{
   2465	int ret;
   2466	struct regmap *regmap;
   2467
   2468	regmap = qcom_cc_map(pdev, &gcc_sdm660_desc);
   2469	if (IS_ERR(regmap))
   2470		return PTR_ERR(regmap);
   2471
   2472	/*
   2473	 * Set the HMSS_AHB_CLK_SLEEP_ENA bit to allow the hmss_ahb_clk to be
   2474	 * turned off by hardware during certain apps low power modes.
   2475	 */
   2476	ret = regmap_update_bits(regmap, 0x52008, BIT(21), BIT(21));
   2477	if (ret)
   2478		return ret;
   2479
   2480	return qcom_cc_really_probe(pdev, &gcc_sdm660_desc, regmap);
   2481}
   2482
   2483static struct platform_driver gcc_sdm660_driver = {
   2484	.probe		= gcc_sdm660_probe,
   2485	.driver		= {
   2486		.name	= "gcc-sdm660",
   2487		.of_match_table = gcc_sdm660_match_table,
   2488	},
   2489};
   2490
   2491static int __init gcc_sdm660_init(void)
   2492{
   2493	return platform_driver_register(&gcc_sdm660_driver);
   2494}
   2495core_initcall_sync(gcc_sdm660_init);
   2496
   2497static void __exit gcc_sdm660_exit(void)
   2498{
   2499	platform_driver_unregister(&gcc_sdm660_driver);
   2500}
   2501module_exit(gcc_sdm660_exit);
   2502
   2503MODULE_LICENSE("GPL v2");
   2504MODULE_DESCRIPTION("QCOM GCC sdm660 Driver");