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-msm8996.c (101139B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * Copyright (c) 2015, The Linux Foundation. All rights reserved.
      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-msm8996.h>
     18
     19#include "common.h"
     20#include "clk-regmap.h"
     21#include "clk-alpha-pll.h"
     22#include "clk-rcg.h"
     23#include "clk-branch.h"
     24#include "reset.h"
     25#include "gdsc.h"
     26
     27enum {
     28	P_XO,
     29	P_GPLL0,
     30	P_GPLL0_EARLY_DIV,
     31	P_SLEEP_CLK,
     32	P_GPLL4,
     33	P_AUD_REF_CLK,
     34};
     35
     36static struct clk_fixed_factor xo = {
     37	.mult = 1,
     38	.div = 1,
     39	.hw.init = &(struct clk_init_data){
     40		.name = "xo",
     41		.parent_data = &(const struct clk_parent_data){
     42			.fw_name = "cxo", .name = "xo_board",
     43		},
     44		.num_parents = 1,
     45		.ops = &clk_fixed_factor_ops,
     46	},
     47};
     48
     49static struct clk_alpha_pll gpll0_early = {
     50	.offset = 0x00000,
     51	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
     52	.clkr = {
     53		.enable_reg = 0x52000,
     54		.enable_mask = BIT(0),
     55		.hw.init = &(struct clk_init_data){
     56			.name = "gpll0_early",
     57			.parent_data = &(const struct clk_parent_data){
     58				.fw_name = "cxo", .name = "xo_board",
     59			},
     60			.num_parents = 1,
     61			.ops = &clk_alpha_pll_ops,
     62		},
     63	},
     64};
     65
     66static struct clk_fixed_factor gpll0_early_div = {
     67	.mult = 1,
     68	.div = 2,
     69	.hw.init = &(struct clk_init_data){
     70		.name = "gpll0_early_div",
     71		.parent_hws = (const struct clk_hw*[]){
     72			&gpll0_early.clkr.hw,
     73		},
     74		.num_parents = 1,
     75		.ops = &clk_fixed_factor_ops,
     76	},
     77};
     78
     79static struct clk_alpha_pll_postdiv gpll0 = {
     80	.offset = 0x00000,
     81	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
     82	.clkr.hw.init = &(struct clk_init_data){
     83		.name = "gpll0",
     84		.parent_hws = (const struct clk_hw*[]){
     85			&gpll0_early.clkr.hw,
     86		},
     87		.num_parents = 1,
     88		.ops = &clk_alpha_pll_postdiv_ops,
     89	},
     90};
     91
     92static struct clk_branch gcc_mmss_gpll0_div_clk = {
     93	.halt_check = BRANCH_HALT_DELAY,
     94	.clkr = {
     95		.enable_reg = 0x5200c,
     96		.enable_mask = BIT(0),
     97		.hw.init = &(struct clk_init_data){
     98			.name = "gcc_mmss_gpll0_div_clk",
     99			.parent_hws = (const struct clk_hw*[]){
    100				&gpll0.clkr.hw,
    101			},
    102			.num_parents = 1,
    103			.flags = CLK_SET_RATE_PARENT,
    104			.ops = &clk_branch2_ops,
    105		},
    106	},
    107};
    108
    109static struct clk_branch gcc_mss_gpll0_div_clk = {
    110	.halt_check = BRANCH_HALT_DELAY,
    111	.clkr = {
    112		.enable_reg = 0x5200c,
    113		.enable_mask = BIT(2),
    114		.hw.init = &(struct clk_init_data){
    115			.name = "gcc_mss_gpll0_div_clk",
    116			.parent_hws = (const struct clk_hw*[]){
    117				&gpll0.clkr.hw,
    118			},
    119			.num_parents = 1,
    120			.flags = CLK_SET_RATE_PARENT,
    121			.ops = &clk_branch2_ops
    122		},
    123	},
    124};
    125
    126static struct clk_alpha_pll gpll4_early = {
    127	.offset = 0x77000,
    128	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
    129	.clkr = {
    130		.enable_reg = 0x52000,
    131		.enable_mask = BIT(4),
    132		.hw.init = &(struct clk_init_data){
    133			.name = "gpll4_early",
    134			.parent_data = &(const struct clk_parent_data){
    135				.fw_name = "cxo", .name = "xo_board",
    136			},
    137			.num_parents = 1,
    138			.ops = &clk_alpha_pll_ops,
    139		},
    140	},
    141};
    142
    143static struct clk_alpha_pll_postdiv gpll4 = {
    144	.offset = 0x77000,
    145	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
    146	.clkr.hw.init = &(struct clk_init_data){
    147		.name = "gpll4",
    148		.parent_hws = (const struct clk_hw*[]){
    149			&gpll4_early.clkr.hw,
    150		},
    151		.num_parents = 1,
    152		.ops = &clk_alpha_pll_postdiv_ops,
    153	},
    154};
    155
    156static const struct parent_map gcc_sleep_clk_map[] = {
    157	{ P_SLEEP_CLK, 5 }
    158};
    159
    160static const struct clk_parent_data gcc_sleep_clk[] = {
    161	{ .fw_name = "sleep_clk", .name = "sleep_clk" }
    162};
    163
    164static const struct parent_map gcc_xo_gpll0_map[] = {
    165	{ P_XO, 0 },
    166	{ P_GPLL0, 1 }
    167};
    168
    169static const struct clk_parent_data gcc_xo_gpll0[] = {
    170	{ .fw_name = "cxo", .name = "xo_board" },
    171	{ .hw = &gpll0.clkr.hw }
    172};
    173
    174static const struct parent_map gcc_xo_sleep_clk_map[] = {
    175	{ P_XO, 0 },
    176	{ P_SLEEP_CLK, 5 }
    177};
    178
    179static const struct clk_parent_data gcc_xo_sleep_clk[] = {
    180	{ .fw_name = "cxo", .name = "xo_board" },
    181	{ .fw_name = "sleep_clk", .name = "sleep_clk" }
    182};
    183
    184static const struct parent_map gcc_xo_gpll0_gpll0_early_div_map[] = {
    185	{ P_XO, 0 },
    186	{ P_GPLL0, 1 },
    187	{ P_GPLL0_EARLY_DIV, 6 }
    188};
    189
    190static const struct clk_parent_data gcc_xo_gpll0_gpll0_early_div[] = {
    191	{ .fw_name = "cxo", .name = "xo_board" },
    192	{ .hw = &gpll0.clkr.hw },
    193	{ .hw = &gpll0_early_div.hw }
    194};
    195
    196static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {
    197	{ P_XO, 0 },
    198	{ P_GPLL0, 1 },
    199	{ P_GPLL4, 5 }
    200};
    201
    202static const struct clk_parent_data gcc_xo_gpll0_gpll4[] = {
    203	{ .fw_name = "cxo", .name = "xo_board" },
    204	{ .hw = &gpll0.clkr.hw },
    205	{ .hw = &gpll4.clkr.hw }
    206};
    207
    208static const struct parent_map gcc_xo_gpll0_aud_ref_clk_map[] = {
    209	{ P_XO, 0 },
    210	{ P_GPLL0, 1 },
    211	{ P_AUD_REF_CLK, 2 }
    212};
    213
    214static const struct clk_parent_data gcc_xo_gpll0_aud_ref_clk[] = {
    215	{ .fw_name = "cxo", .name = "xo_board" },
    216	{ .hw = &gpll0.clkr.hw },
    217	{ .fw_name = "aud_ref_clk", .name = "aud_ref_clk" }
    218};
    219
    220static const struct parent_map gcc_xo_gpll0_sleep_clk_gpll0_early_div_map[] = {
    221	{ P_XO, 0 },
    222	{ P_GPLL0, 1 },
    223	{ P_SLEEP_CLK, 5 },
    224	{ P_GPLL0_EARLY_DIV, 6 }
    225};
    226
    227static const struct clk_parent_data gcc_xo_gpll0_sleep_clk_gpll0_early_div[] = {
    228	{ .fw_name = "cxo", .name = "xo_board" },
    229	{ .hw = &gpll0.clkr.hw },
    230	{ .fw_name = "sleep_clk", .name = "sleep_clk" },
    231	{ .hw = &gpll0_early_div.hw }
    232};
    233
    234static const struct parent_map gcc_xo_gpll0_gpll4_gpll0_early_div_map[] = {
    235	{ P_XO, 0 },
    236	{ P_GPLL0, 1 },
    237	{ P_GPLL4, 5 },
    238	{ P_GPLL0_EARLY_DIV, 6 }
    239};
    240
    241static const struct clk_parent_data gcc_xo_gpll0_gpll4_gpll0_early_div[] = {
    242	{ .fw_name = "cxo", .name = "xo_board" },
    243	{ .hw = &gpll0.clkr.hw },
    244	{ .hw = &gpll4.clkr.hw },
    245	{ .hw = &gpll0_early_div.hw }
    246};
    247
    248static const struct freq_tbl ftbl_system_noc_clk_src[] = {
    249	F(19200000, P_XO, 1, 0, 0),
    250	F(50000000, P_GPLL0_EARLY_DIV, 6, 0, 0),
    251	F(100000000, P_GPLL0, 6, 0, 0),
    252	F(150000000, P_GPLL0, 4, 0, 0),
    253	F(200000000, P_GPLL0, 3, 0, 0),
    254	F(240000000, P_GPLL0, 2.5, 0, 0),
    255	{ }
    256};
    257
    258static struct clk_rcg2 system_noc_clk_src = {
    259	.cmd_rcgr = 0x0401c,
    260	.hid_width = 5,
    261	.parent_map = gcc_xo_gpll0_gpll0_early_div_map,
    262	.freq_tbl = ftbl_system_noc_clk_src,
    263	.clkr.hw.init = &(struct clk_init_data){
    264		.name = "system_noc_clk_src",
    265		.parent_data = gcc_xo_gpll0_gpll0_early_div,
    266		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_early_div),
    267		.ops = &clk_rcg2_ops,
    268	},
    269};
    270
    271static const struct freq_tbl ftbl_config_noc_clk_src[] = {
    272	F(19200000, P_XO, 1, 0, 0),
    273	F(37500000, P_GPLL0, 16, 0, 0),
    274	F(75000000, P_GPLL0, 8, 0, 0),
    275	{ }
    276};
    277
    278static struct clk_rcg2 config_noc_clk_src = {
    279	.cmd_rcgr = 0x0500c,
    280	.hid_width = 5,
    281	.parent_map = gcc_xo_gpll0_map,
    282	.freq_tbl = ftbl_config_noc_clk_src,
    283	.clkr.hw.init = &(struct clk_init_data){
    284		.name = "config_noc_clk_src",
    285		.parent_data = gcc_xo_gpll0,
    286		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    287		.ops = &clk_rcg2_ops,
    288	},
    289};
    290
    291static const struct freq_tbl ftbl_periph_noc_clk_src[] = {
    292	F(19200000, P_XO, 1, 0, 0),
    293	F(37500000, P_GPLL0, 16, 0, 0),
    294	F(50000000, P_GPLL0, 12, 0, 0),
    295	F(75000000, P_GPLL0, 8, 0, 0),
    296	F(100000000, P_GPLL0, 6, 0, 0),
    297	{ }
    298};
    299
    300static struct clk_rcg2 periph_noc_clk_src = {
    301	.cmd_rcgr = 0x06014,
    302	.hid_width = 5,
    303	.parent_map = gcc_xo_gpll0_map,
    304	.freq_tbl = ftbl_periph_noc_clk_src,
    305	.clkr.hw.init = &(struct clk_init_data){
    306		.name = "periph_noc_clk_src",
    307		.parent_data = gcc_xo_gpll0,
    308		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    309		.ops = &clk_rcg2_ops,
    310	},
    311};
    312
    313static const struct freq_tbl ftbl_usb30_master_clk_src[] = {
    314	F(19200000, P_XO, 1, 0, 0),
    315	F(120000000, P_GPLL0, 5, 0, 0),
    316	F(150000000, P_GPLL0, 4, 0, 0),
    317	{ }
    318};
    319
    320static struct clk_rcg2 usb30_master_clk_src = {
    321	.cmd_rcgr = 0x0f014,
    322	.mnd_width = 8,
    323	.hid_width = 5,
    324	.parent_map = gcc_xo_gpll0_gpll0_early_div_map,
    325	.freq_tbl = ftbl_usb30_master_clk_src,
    326	.clkr.hw.init = &(struct clk_init_data){
    327		.name = "usb30_master_clk_src",
    328		.parent_data = gcc_xo_gpll0_gpll0_early_div,
    329		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_early_div),
    330		.ops = &clk_rcg2_ops,
    331	},
    332};
    333
    334static const struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = {
    335	F(19200000, P_XO, 1, 0, 0),
    336	{ }
    337};
    338
    339static struct clk_rcg2 usb30_mock_utmi_clk_src = {
    340	.cmd_rcgr = 0x0f028,
    341	.hid_width = 5,
    342	.parent_map = gcc_xo_gpll0_gpll0_early_div_map,
    343	.freq_tbl = ftbl_usb30_mock_utmi_clk_src,
    344	.clkr.hw.init = &(struct clk_init_data){
    345		.name = "usb30_mock_utmi_clk_src",
    346		.parent_data = gcc_xo_gpll0_gpll0_early_div,
    347		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_early_div),
    348		.ops = &clk_rcg2_ops,
    349	},
    350};
    351
    352static const struct freq_tbl ftbl_usb3_phy_aux_clk_src[] = {
    353	F(1200000, P_XO, 16, 0, 0),
    354	{ }
    355};
    356
    357static struct clk_rcg2 usb3_phy_aux_clk_src = {
    358	.cmd_rcgr = 0x5000c,
    359	.hid_width = 5,
    360	.parent_map = gcc_xo_sleep_clk_map,
    361	.freq_tbl = ftbl_usb3_phy_aux_clk_src,
    362	.clkr.hw.init = &(struct clk_init_data){
    363		.name = "usb3_phy_aux_clk_src",
    364		.parent_data = gcc_xo_sleep_clk,
    365		.num_parents = ARRAY_SIZE(gcc_xo_sleep_clk),
    366		.ops = &clk_rcg2_ops,
    367	},
    368};
    369
    370static const struct freq_tbl ftbl_usb20_master_clk_src[] = {
    371	F(120000000, P_GPLL0, 5, 0, 0),
    372	{ }
    373};
    374
    375static struct clk_rcg2 usb20_master_clk_src = {
    376	.cmd_rcgr = 0x12010,
    377	.mnd_width = 8,
    378	.hid_width = 5,
    379	.parent_map = gcc_xo_gpll0_gpll0_early_div_map,
    380	.freq_tbl = ftbl_usb20_master_clk_src,
    381	.clkr.hw.init = &(struct clk_init_data){
    382		.name = "usb20_master_clk_src",
    383		.parent_data = gcc_xo_gpll0_gpll0_early_div,
    384		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_early_div),
    385		.ops = &clk_rcg2_ops,
    386	},
    387};
    388
    389static struct clk_rcg2 usb20_mock_utmi_clk_src = {
    390	.cmd_rcgr = 0x12024,
    391	.hid_width = 5,
    392	.parent_map = gcc_xo_gpll0_gpll0_early_div_map,
    393	.freq_tbl = ftbl_usb30_mock_utmi_clk_src,
    394	.clkr.hw.init = &(struct clk_init_data){
    395		.name = "usb20_mock_utmi_clk_src",
    396		.parent_data = gcc_xo_gpll0_gpll0_early_div,
    397		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_early_div),
    398		.ops = &clk_rcg2_ops,
    399	},
    400};
    401
    402static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
    403	F(144000, P_XO, 16, 3, 25),
    404	F(400000, P_XO, 12, 1, 4),
    405	F(20000000, P_GPLL0, 15, 1, 2),
    406	F(25000000, P_GPLL0, 12, 1, 2),
    407	F(50000000, P_GPLL0, 12, 0, 0),
    408	F(96000000, P_GPLL4, 4, 0, 0),
    409	F(192000000, P_GPLL4, 2, 0, 0),
    410	F(384000000, P_GPLL4, 1, 0, 0),
    411	{ }
    412};
    413
    414static struct clk_rcg2 sdcc1_apps_clk_src = {
    415	.cmd_rcgr = 0x13010,
    416	.mnd_width = 8,
    417	.hid_width = 5,
    418	.parent_map = gcc_xo_gpll0_gpll4_gpll0_early_div_map,
    419	.freq_tbl = ftbl_sdcc1_apps_clk_src,
    420	.clkr.hw.init = &(struct clk_init_data){
    421		.name = "sdcc1_apps_clk_src",
    422		.parent_data = gcc_xo_gpll0_gpll4_gpll0_early_div,
    423		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4_gpll0_early_div),
    424		.ops = &clk_rcg2_floor_ops,
    425	},
    426};
    427
    428static struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = {
    429	F(19200000, P_XO, 1, 0, 0),
    430	F(150000000, P_GPLL0, 4, 0, 0),
    431	F(300000000, P_GPLL0, 2, 0, 0),
    432	{ }
    433};
    434
    435static struct clk_rcg2 sdcc1_ice_core_clk_src = {
    436	.cmd_rcgr = 0x13024,
    437	.hid_width = 5,
    438	.parent_map = gcc_xo_gpll0_gpll4_gpll0_early_div_map,
    439	.freq_tbl = ftbl_sdcc1_ice_core_clk_src,
    440	.clkr.hw.init = &(struct clk_init_data){
    441		.name = "sdcc1_ice_core_clk_src",
    442		.parent_data = gcc_xo_gpll0_gpll4_gpll0_early_div,
    443		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4_gpll0_early_div),
    444		.ops = &clk_rcg2_ops,
    445	},
    446};
    447
    448static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = {
    449	F(144000, P_XO, 16, 3, 25),
    450	F(400000, P_XO, 12, 1, 4),
    451	F(20000000, P_GPLL0, 15, 1, 2),
    452	F(25000000, P_GPLL0, 12, 1, 2),
    453	F(50000000, P_GPLL0, 12, 0, 0),
    454	F(100000000, P_GPLL0, 6, 0, 0),
    455	F(200000000, P_GPLL0, 3, 0, 0),
    456	{ }
    457};
    458
    459static struct clk_rcg2 sdcc2_apps_clk_src = {
    460	.cmd_rcgr = 0x14010,
    461	.mnd_width = 8,
    462	.hid_width = 5,
    463	.parent_map = gcc_xo_gpll0_gpll4_map,
    464	.freq_tbl = ftbl_sdcc2_apps_clk_src,
    465	.clkr.hw.init = &(struct clk_init_data){
    466		.name = "sdcc2_apps_clk_src",
    467		.parent_data = gcc_xo_gpll0_gpll4,
    468		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4),
    469		.ops = &clk_rcg2_floor_ops,
    470	},
    471};
    472
    473static struct clk_rcg2 sdcc3_apps_clk_src = {
    474	.cmd_rcgr = 0x15010,
    475	.mnd_width = 8,
    476	.hid_width = 5,
    477	.parent_map = gcc_xo_gpll0_gpll4_map,
    478	.freq_tbl = ftbl_sdcc2_apps_clk_src,
    479	.clkr.hw.init = &(struct clk_init_data){
    480		.name = "sdcc3_apps_clk_src",
    481		.parent_data = gcc_xo_gpll0_gpll4,
    482		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4),
    483		.ops = &clk_rcg2_floor_ops,
    484	},
    485};
    486
    487static const struct freq_tbl ftbl_sdcc4_apps_clk_src[] = {
    488	F(144000, P_XO, 16, 3, 25),
    489	F(400000, P_XO, 12, 1, 4),
    490	F(20000000, P_GPLL0, 15, 1, 2),
    491	F(25000000, P_GPLL0, 12, 1, 2),
    492	F(50000000, P_GPLL0, 12, 0, 0),
    493	F(100000000, P_GPLL0, 6, 0, 0),
    494	{ }
    495};
    496
    497static struct clk_rcg2 sdcc4_apps_clk_src = {
    498	.cmd_rcgr = 0x16010,
    499	.mnd_width = 8,
    500	.hid_width = 5,
    501	.parent_map = gcc_xo_gpll0_map,
    502	.freq_tbl = ftbl_sdcc4_apps_clk_src,
    503	.clkr.hw.init = &(struct clk_init_data){
    504		.name = "sdcc4_apps_clk_src",
    505		.parent_data = gcc_xo_gpll0,
    506		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    507		.ops = &clk_rcg2_floor_ops,
    508	},
    509};
    510
    511static const struct freq_tbl ftbl_blsp1_qup1_spi_apps_clk_src[] = {
    512	F(960000, P_XO, 10, 1, 2),
    513	F(4800000, P_XO, 4, 0, 0),
    514	F(9600000, P_XO, 2, 0, 0),
    515	F(15000000, P_GPLL0, 10, 1, 4),
    516	F(19200000, P_XO, 1, 0, 0),
    517	F(25000000, P_GPLL0, 12, 1, 2),
    518	F(50000000, P_GPLL0, 12, 0, 0),
    519	{ }
    520};
    521
    522static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
    523	.cmd_rcgr = 0x1900c,
    524	.mnd_width = 8,
    525	.hid_width = 5,
    526	.parent_map = gcc_xo_gpll0_map,
    527	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
    528	.clkr.hw.init = &(struct clk_init_data){
    529		.name = "blsp1_qup1_spi_apps_clk_src",
    530		.parent_data = gcc_xo_gpll0,
    531		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    532		.ops = &clk_rcg2_ops,
    533	},
    534};
    535
    536static const struct freq_tbl ftbl_blsp1_qup1_i2c_apps_clk_src[] = {
    537	F(19200000, P_XO, 1, 0, 0),
    538	F(50000000, P_GPLL0, 12, 0, 0),
    539	{ }
    540};
    541
    542static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
    543	.cmd_rcgr = 0x19020,
    544	.hid_width = 5,
    545	.parent_map = gcc_xo_gpll0_map,
    546	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
    547	.clkr.hw.init = &(struct clk_init_data){
    548		.name = "blsp1_qup1_i2c_apps_clk_src",
    549		.parent_data = gcc_xo_gpll0,
    550		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    551		.ops = &clk_rcg2_ops,
    552	},
    553};
    554
    555static const struct freq_tbl ftbl_blsp1_uart1_apps_clk_src[] = {
    556	F(3686400, P_GPLL0, 1, 96, 15625),
    557	F(7372800, P_GPLL0, 1, 192, 15625),
    558	F(14745600, P_GPLL0, 1, 384, 15625),
    559	F(16000000, P_GPLL0, 5, 2, 15),
    560	F(19200000, P_XO, 1, 0, 0),
    561	F(24000000, P_GPLL0, 5, 1, 5),
    562	F(32000000, P_GPLL0, 1, 4, 75),
    563	F(40000000, P_GPLL0, 15, 0, 0),
    564	F(46400000, P_GPLL0, 1, 29, 375),
    565	F(48000000, P_GPLL0, 12.5, 0, 0),
    566	F(51200000, P_GPLL0, 1, 32, 375),
    567	F(56000000, P_GPLL0, 1, 7, 75),
    568	F(58982400, P_GPLL0, 1, 1536, 15625),
    569	F(60000000, P_GPLL0, 10, 0, 0),
    570	F(63157895, P_GPLL0, 9.5, 0, 0),
    571	{ }
    572};
    573
    574static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
    575	.cmd_rcgr = 0x1a00c,
    576	.mnd_width = 16,
    577	.hid_width = 5,
    578	.parent_map = gcc_xo_gpll0_map,
    579	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
    580	.clkr.hw.init = &(struct clk_init_data){
    581		.name = "blsp1_uart1_apps_clk_src",
    582		.parent_data = gcc_xo_gpll0,
    583		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    584		.ops = &clk_rcg2_ops,
    585	},
    586};
    587
    588static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
    589	.cmd_rcgr = 0x1b00c,
    590	.mnd_width = 8,
    591	.hid_width = 5,
    592	.parent_map = gcc_xo_gpll0_map,
    593	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
    594	.clkr.hw.init = &(struct clk_init_data){
    595		.name = "blsp1_qup2_spi_apps_clk_src",
    596		.parent_data = gcc_xo_gpll0,
    597		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    598		.ops = &clk_rcg2_ops,
    599	},
    600};
    601
    602static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
    603	.cmd_rcgr = 0x1b020,
    604	.hid_width = 5,
    605	.parent_map = gcc_xo_gpll0_map,
    606	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
    607	.clkr.hw.init = &(struct clk_init_data){
    608		.name = "blsp1_qup2_i2c_apps_clk_src",
    609		.parent_data = gcc_xo_gpll0,
    610		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    611		.ops = &clk_rcg2_ops,
    612	},
    613};
    614
    615static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
    616	.cmd_rcgr = 0x1c00c,
    617	.mnd_width = 16,
    618	.hid_width = 5,
    619	.parent_map = gcc_xo_gpll0_map,
    620	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
    621	.clkr.hw.init = &(struct clk_init_data){
    622		.name = "blsp1_uart2_apps_clk_src",
    623		.parent_data = gcc_xo_gpll0,
    624		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    625		.ops = &clk_rcg2_ops,
    626	},
    627};
    628
    629static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
    630	.cmd_rcgr = 0x1d00c,
    631	.mnd_width = 8,
    632	.hid_width = 5,
    633	.parent_map = gcc_xo_gpll0_map,
    634	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
    635	.clkr.hw.init = &(struct clk_init_data){
    636		.name = "blsp1_qup3_spi_apps_clk_src",
    637		.parent_data = gcc_xo_gpll0,
    638		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    639		.ops = &clk_rcg2_ops,
    640	},
    641};
    642
    643static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
    644	.cmd_rcgr = 0x1d020,
    645	.hid_width = 5,
    646	.parent_map = gcc_xo_gpll0_map,
    647	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
    648	.clkr.hw.init = &(struct clk_init_data){
    649		.name = "blsp1_qup3_i2c_apps_clk_src",
    650		.parent_data = gcc_xo_gpll0,
    651		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    652		.ops = &clk_rcg2_ops,
    653	},
    654};
    655
    656static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
    657	.cmd_rcgr = 0x1e00c,
    658	.mnd_width = 16,
    659	.hid_width = 5,
    660	.parent_map = gcc_xo_gpll0_map,
    661	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
    662	.clkr.hw.init = &(struct clk_init_data){
    663		.name = "blsp1_uart3_apps_clk_src",
    664		.parent_data = gcc_xo_gpll0,
    665		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    666		.ops = &clk_rcg2_ops,
    667	},
    668};
    669
    670static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
    671	.cmd_rcgr = 0x1f00c,
    672	.mnd_width = 8,
    673	.hid_width = 5,
    674	.parent_map = gcc_xo_gpll0_map,
    675	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
    676	.clkr.hw.init = &(struct clk_init_data){
    677		.name = "blsp1_qup4_spi_apps_clk_src",
    678		.parent_data = gcc_xo_gpll0,
    679		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    680		.ops = &clk_rcg2_ops,
    681	},
    682};
    683
    684static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
    685	.cmd_rcgr = 0x1f020,
    686	.hid_width = 5,
    687	.parent_map = gcc_xo_gpll0_map,
    688	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
    689	.clkr.hw.init = &(struct clk_init_data){
    690		.name = "blsp1_qup4_i2c_apps_clk_src",
    691		.parent_data = gcc_xo_gpll0,
    692		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    693		.ops = &clk_rcg2_ops,
    694	},
    695};
    696
    697static struct clk_rcg2 blsp1_uart4_apps_clk_src = {
    698	.cmd_rcgr = 0x2000c,
    699	.mnd_width = 16,
    700	.hid_width = 5,
    701	.parent_map = gcc_xo_gpll0_map,
    702	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
    703	.clkr.hw.init = &(struct clk_init_data){
    704		.name = "blsp1_uart4_apps_clk_src",
    705		.parent_data = gcc_xo_gpll0,
    706		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    707		.ops = &clk_rcg2_ops,
    708	},
    709};
    710
    711static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
    712	.cmd_rcgr = 0x2100c,
    713	.mnd_width = 8,
    714	.hid_width = 5,
    715	.parent_map = gcc_xo_gpll0_map,
    716	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
    717	.clkr.hw.init = &(struct clk_init_data){
    718		.name = "blsp1_qup5_spi_apps_clk_src",
    719		.parent_data = gcc_xo_gpll0,
    720		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    721		.ops = &clk_rcg2_ops,
    722	},
    723};
    724
    725static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
    726	.cmd_rcgr = 0x21020,
    727	.hid_width = 5,
    728	.parent_map = gcc_xo_gpll0_map,
    729	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
    730	.clkr.hw.init = &(struct clk_init_data){
    731		.name = "blsp1_qup5_i2c_apps_clk_src",
    732		.parent_data = gcc_xo_gpll0,
    733		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    734		.ops = &clk_rcg2_ops,
    735	},
    736};
    737
    738static struct clk_rcg2 blsp1_uart5_apps_clk_src = {
    739	.cmd_rcgr = 0x2200c,
    740	.mnd_width = 16,
    741	.hid_width = 5,
    742	.parent_map = gcc_xo_gpll0_map,
    743	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
    744	.clkr.hw.init = &(struct clk_init_data){
    745		.name = "blsp1_uart5_apps_clk_src",
    746		.parent_data = gcc_xo_gpll0,
    747		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    748		.ops = &clk_rcg2_ops,
    749	},
    750};
    751
    752static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
    753	.cmd_rcgr = 0x2300c,
    754	.mnd_width = 8,
    755	.hid_width = 5,
    756	.parent_map = gcc_xo_gpll0_map,
    757	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
    758	.clkr.hw.init = &(struct clk_init_data){
    759		.name = "blsp1_qup6_spi_apps_clk_src",
    760		.parent_data = gcc_xo_gpll0,
    761		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    762		.ops = &clk_rcg2_ops,
    763	},
    764};
    765
    766static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
    767	.cmd_rcgr = 0x23020,
    768	.hid_width = 5,
    769	.parent_map = gcc_xo_gpll0_map,
    770	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
    771	.clkr.hw.init = &(struct clk_init_data){
    772		.name = "blsp1_qup6_i2c_apps_clk_src",
    773		.parent_data = gcc_xo_gpll0,
    774		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    775		.ops = &clk_rcg2_ops,
    776	},
    777};
    778
    779static struct clk_rcg2 blsp1_uart6_apps_clk_src = {
    780	.cmd_rcgr = 0x2400c,
    781	.mnd_width = 16,
    782	.hid_width = 5,
    783	.parent_map = gcc_xo_gpll0_map,
    784	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
    785	.clkr.hw.init = &(struct clk_init_data){
    786		.name = "blsp1_uart6_apps_clk_src",
    787		.parent_data = gcc_xo_gpll0,
    788		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    789		.ops = &clk_rcg2_ops,
    790	},
    791};
    792
    793static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
    794	.cmd_rcgr = 0x2600c,
    795	.mnd_width = 8,
    796	.hid_width = 5,
    797	.parent_map = gcc_xo_gpll0_map,
    798	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
    799	.clkr.hw.init = &(struct clk_init_data){
    800		.name = "blsp2_qup1_spi_apps_clk_src",
    801		.parent_data = gcc_xo_gpll0,
    802		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    803		.ops = &clk_rcg2_ops,
    804	},
    805};
    806
    807static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
    808	.cmd_rcgr = 0x26020,
    809	.hid_width = 5,
    810	.parent_map = gcc_xo_gpll0_map,
    811	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
    812	.clkr.hw.init = &(struct clk_init_data){
    813		.name = "blsp2_qup1_i2c_apps_clk_src",
    814		.parent_data = gcc_xo_gpll0,
    815		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    816		.ops = &clk_rcg2_ops,
    817	},
    818};
    819
    820static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
    821	.cmd_rcgr = 0x2700c,
    822	.mnd_width = 16,
    823	.hid_width = 5,
    824	.parent_map = gcc_xo_gpll0_map,
    825	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
    826	.clkr.hw.init = &(struct clk_init_data){
    827		.name = "blsp2_uart1_apps_clk_src",
    828		.parent_data = gcc_xo_gpll0,
    829		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    830		.ops = &clk_rcg2_ops,
    831	},
    832};
    833
    834static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
    835	.cmd_rcgr = 0x2800c,
    836	.mnd_width = 8,
    837	.hid_width = 5,
    838	.parent_map = gcc_xo_gpll0_map,
    839	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
    840	.clkr.hw.init = &(struct clk_init_data){
    841		.name = "blsp2_qup2_spi_apps_clk_src",
    842		.parent_data = gcc_xo_gpll0,
    843		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    844		.ops = &clk_rcg2_ops,
    845	},
    846};
    847
    848static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
    849	.cmd_rcgr = 0x28020,
    850	.hid_width = 5,
    851	.parent_map = gcc_xo_gpll0_map,
    852	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
    853	.clkr.hw.init = &(struct clk_init_data){
    854		.name = "blsp2_qup2_i2c_apps_clk_src",
    855		.parent_data = gcc_xo_gpll0,
    856		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    857		.ops = &clk_rcg2_ops,
    858	},
    859};
    860
    861static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
    862	.cmd_rcgr = 0x2900c,
    863	.mnd_width = 16,
    864	.hid_width = 5,
    865	.parent_map = gcc_xo_gpll0_map,
    866	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
    867	.clkr.hw.init = &(struct clk_init_data){
    868		.name = "blsp2_uart2_apps_clk_src",
    869		.parent_data = gcc_xo_gpll0,
    870		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    871		.ops = &clk_rcg2_ops,
    872	},
    873};
    874
    875static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
    876	.cmd_rcgr = 0x2a00c,
    877	.mnd_width = 8,
    878	.hid_width = 5,
    879	.parent_map = gcc_xo_gpll0_map,
    880	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
    881	.clkr.hw.init = &(struct clk_init_data){
    882		.name = "blsp2_qup3_spi_apps_clk_src",
    883		.parent_data = gcc_xo_gpll0,
    884		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    885		.ops = &clk_rcg2_ops,
    886	},
    887};
    888
    889static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
    890	.cmd_rcgr = 0x2a020,
    891	.hid_width = 5,
    892	.parent_map = gcc_xo_gpll0_map,
    893	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
    894	.clkr.hw.init = &(struct clk_init_data){
    895		.name = "blsp2_qup3_i2c_apps_clk_src",
    896		.parent_data = gcc_xo_gpll0,
    897		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    898		.ops = &clk_rcg2_ops,
    899	},
    900};
    901
    902static struct clk_rcg2 blsp2_uart3_apps_clk_src = {
    903	.cmd_rcgr = 0x2b00c,
    904	.mnd_width = 16,
    905	.hid_width = 5,
    906	.parent_map = gcc_xo_gpll0_map,
    907	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
    908	.clkr.hw.init = &(struct clk_init_data){
    909		.name = "blsp2_uart3_apps_clk_src",
    910		.parent_data = gcc_xo_gpll0,
    911		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    912		.ops = &clk_rcg2_ops,
    913	},
    914};
    915
    916static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
    917	.cmd_rcgr = 0x2c00c,
    918	.mnd_width = 8,
    919	.hid_width = 5,
    920	.parent_map = gcc_xo_gpll0_map,
    921	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
    922	.clkr.hw.init = &(struct clk_init_data){
    923		.name = "blsp2_qup4_spi_apps_clk_src",
    924		.parent_data = gcc_xo_gpll0,
    925		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    926		.ops = &clk_rcg2_ops,
    927	},
    928};
    929
    930static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
    931	.cmd_rcgr = 0x2c020,
    932	.hid_width = 5,
    933	.parent_map = gcc_xo_gpll0_map,
    934	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
    935	.clkr.hw.init = &(struct clk_init_data){
    936		.name = "blsp2_qup4_i2c_apps_clk_src",
    937		.parent_data = gcc_xo_gpll0,
    938		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    939		.ops = &clk_rcg2_ops,
    940	},
    941};
    942
    943static struct clk_rcg2 blsp2_uart4_apps_clk_src = {
    944	.cmd_rcgr = 0x2d00c,
    945	.mnd_width = 16,
    946	.hid_width = 5,
    947	.parent_map = gcc_xo_gpll0_map,
    948	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
    949	.clkr.hw.init = &(struct clk_init_data){
    950		.name = "blsp2_uart4_apps_clk_src",
    951		.parent_data = gcc_xo_gpll0,
    952		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    953		.ops = &clk_rcg2_ops,
    954	},
    955};
    956
    957static struct clk_rcg2 blsp2_qup5_spi_apps_clk_src = {
    958	.cmd_rcgr = 0x2e00c,
    959	.mnd_width = 8,
    960	.hid_width = 5,
    961	.parent_map = gcc_xo_gpll0_map,
    962	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
    963	.clkr.hw.init = &(struct clk_init_data){
    964		.name = "blsp2_qup5_spi_apps_clk_src",
    965		.parent_data = gcc_xo_gpll0,
    966		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    967		.ops = &clk_rcg2_ops,
    968	},
    969};
    970
    971static struct clk_rcg2 blsp2_qup5_i2c_apps_clk_src = {
    972	.cmd_rcgr = 0x2e020,
    973	.hid_width = 5,
    974	.parent_map = gcc_xo_gpll0_map,
    975	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
    976	.clkr.hw.init = &(struct clk_init_data){
    977		.name = "blsp2_qup5_i2c_apps_clk_src",
    978		.parent_data = gcc_xo_gpll0,
    979		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    980		.ops = &clk_rcg2_ops,
    981	},
    982};
    983
    984static struct clk_rcg2 blsp2_uart5_apps_clk_src = {
    985	.cmd_rcgr = 0x2f00c,
    986	.mnd_width = 16,
    987	.hid_width = 5,
    988	.parent_map = gcc_xo_gpll0_map,
    989	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
    990	.clkr.hw.init = &(struct clk_init_data){
    991		.name = "blsp2_uart5_apps_clk_src",
    992		.parent_data = gcc_xo_gpll0,
    993		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
    994		.ops = &clk_rcg2_ops,
    995	},
    996};
    997
    998static struct clk_rcg2 blsp2_qup6_spi_apps_clk_src = {
    999	.cmd_rcgr = 0x3000c,
   1000	.mnd_width = 8,
   1001	.hid_width = 5,
   1002	.parent_map = gcc_xo_gpll0_map,
   1003	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
   1004	.clkr.hw.init = &(struct clk_init_data){
   1005		.name = "blsp2_qup6_spi_apps_clk_src",
   1006		.parent_data = gcc_xo_gpll0,
   1007		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
   1008		.ops = &clk_rcg2_ops,
   1009	},
   1010};
   1011
   1012static struct clk_rcg2 blsp2_qup6_i2c_apps_clk_src = {
   1013	.cmd_rcgr = 0x30020,
   1014	.hid_width = 5,
   1015	.parent_map = gcc_xo_gpll0_map,
   1016	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
   1017	.clkr.hw.init = &(struct clk_init_data){
   1018		.name = "blsp2_qup6_i2c_apps_clk_src",
   1019		.parent_data = gcc_xo_gpll0,
   1020		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
   1021		.ops = &clk_rcg2_ops,
   1022	},
   1023};
   1024
   1025static struct clk_rcg2 blsp2_uart6_apps_clk_src = {
   1026	.cmd_rcgr = 0x3100c,
   1027	.mnd_width = 16,
   1028	.hid_width = 5,
   1029	.parent_map = gcc_xo_gpll0_map,
   1030	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
   1031	.clkr.hw.init = &(struct clk_init_data){
   1032		.name = "blsp2_uart6_apps_clk_src",
   1033		.parent_data = gcc_xo_gpll0,
   1034		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
   1035		.ops = &clk_rcg2_ops,
   1036	},
   1037};
   1038
   1039static const struct freq_tbl ftbl_pdm2_clk_src[] = {
   1040	F(60000000, P_GPLL0, 10, 0, 0),
   1041	{ }
   1042};
   1043
   1044static struct clk_rcg2 pdm2_clk_src = {
   1045	.cmd_rcgr = 0x33010,
   1046	.hid_width = 5,
   1047	.parent_map = gcc_xo_gpll0_map,
   1048	.freq_tbl = ftbl_pdm2_clk_src,
   1049	.clkr.hw.init = &(struct clk_init_data){
   1050		.name = "pdm2_clk_src",
   1051		.parent_data = gcc_xo_gpll0,
   1052		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
   1053		.ops = &clk_rcg2_ops,
   1054	},
   1055};
   1056
   1057static const struct freq_tbl ftbl_tsif_ref_clk_src[] = {
   1058	F(105495, P_XO, 1, 1, 182),
   1059	{ }
   1060};
   1061
   1062static struct clk_rcg2 tsif_ref_clk_src = {
   1063	.cmd_rcgr = 0x36010,
   1064	.mnd_width = 8,
   1065	.hid_width = 5,
   1066	.parent_map = gcc_xo_gpll0_aud_ref_clk_map,
   1067	.freq_tbl = ftbl_tsif_ref_clk_src,
   1068	.clkr.hw.init = &(struct clk_init_data){
   1069		.name = "tsif_ref_clk_src",
   1070		.parent_data = gcc_xo_gpll0_aud_ref_clk,
   1071		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_aud_ref_clk),
   1072		.ops = &clk_rcg2_ops,
   1073	},
   1074};
   1075
   1076static struct clk_rcg2 gcc_sleep_clk_src = {
   1077	.cmd_rcgr = 0x43014,
   1078	.hid_width = 5,
   1079	.parent_map = gcc_sleep_clk_map,
   1080	.clkr.hw.init = &(struct clk_init_data){
   1081		.name = "gcc_sleep_clk_src",
   1082		.parent_data = gcc_sleep_clk,
   1083		.num_parents = ARRAY_SIZE(gcc_sleep_clk),
   1084		.ops = &clk_rcg2_ops,
   1085	},
   1086};
   1087
   1088static struct clk_rcg2 hmss_rbcpr_clk_src = {
   1089	.cmd_rcgr = 0x48040,
   1090	.hid_width = 5,
   1091	.parent_map = gcc_xo_gpll0_map,
   1092	.freq_tbl = ftbl_usb30_mock_utmi_clk_src,
   1093	.clkr.hw.init = &(struct clk_init_data){
   1094		.name = "hmss_rbcpr_clk_src",
   1095		.parent_data = gcc_xo_gpll0,
   1096		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
   1097		.ops = &clk_rcg2_ops,
   1098	},
   1099};
   1100
   1101static struct clk_rcg2 hmss_gpll0_clk_src = {
   1102	.cmd_rcgr = 0x48058,
   1103	.hid_width = 5,
   1104	.parent_map = gcc_xo_gpll0_map,
   1105	.clkr.hw.init = &(struct clk_init_data){
   1106		.name = "hmss_gpll0_clk_src",
   1107		.parent_data = gcc_xo_gpll0,
   1108		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
   1109		.ops = &clk_rcg2_ops,
   1110	},
   1111};
   1112
   1113static const struct freq_tbl ftbl_gp1_clk_src[] = {
   1114	F(19200000, P_XO, 1, 0, 0),
   1115	F(100000000, P_GPLL0, 6, 0, 0),
   1116	F(200000000, P_GPLL0, 3, 0, 0),
   1117	{ }
   1118};
   1119
   1120static struct clk_rcg2 gp1_clk_src = {
   1121	.cmd_rcgr = 0x64004,
   1122	.mnd_width = 8,
   1123	.hid_width = 5,
   1124	.parent_map = gcc_xo_gpll0_sleep_clk_gpll0_early_div_map,
   1125	.freq_tbl = ftbl_gp1_clk_src,
   1126	.clkr.hw.init = &(struct clk_init_data){
   1127		.name = "gp1_clk_src",
   1128		.parent_data = gcc_xo_gpll0_sleep_clk_gpll0_early_div,
   1129		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_sleep_clk_gpll0_early_div),
   1130		.ops = &clk_rcg2_ops,
   1131	},
   1132};
   1133
   1134static struct clk_rcg2 gp2_clk_src = {
   1135	.cmd_rcgr = 0x65004,
   1136	.mnd_width = 8,
   1137	.hid_width = 5,
   1138	.parent_map = gcc_xo_gpll0_sleep_clk_gpll0_early_div_map,
   1139	.freq_tbl = ftbl_gp1_clk_src,
   1140	.clkr.hw.init = &(struct clk_init_data){
   1141		.name = "gp2_clk_src",
   1142		.parent_data = gcc_xo_gpll0_sleep_clk_gpll0_early_div,
   1143		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_sleep_clk_gpll0_early_div),
   1144		.ops = &clk_rcg2_ops,
   1145	},
   1146};
   1147
   1148static struct clk_rcg2 gp3_clk_src = {
   1149	.cmd_rcgr = 0x66004,
   1150	.mnd_width = 8,
   1151	.hid_width = 5,
   1152	.parent_map = gcc_xo_gpll0_sleep_clk_gpll0_early_div_map,
   1153	.freq_tbl = ftbl_gp1_clk_src,
   1154	.clkr.hw.init = &(struct clk_init_data){
   1155		.name = "gp3_clk_src",
   1156		.parent_data = gcc_xo_gpll0_sleep_clk_gpll0_early_div,
   1157		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_sleep_clk_gpll0_early_div),
   1158		.ops = &clk_rcg2_ops,
   1159	},
   1160};
   1161
   1162static const struct freq_tbl ftbl_pcie_aux_clk_src[] = {
   1163	F(1010526, P_XO, 1, 1, 19),
   1164	{ }
   1165};
   1166
   1167static struct clk_rcg2 pcie_aux_clk_src = {
   1168	.cmd_rcgr = 0x6c000,
   1169	.mnd_width = 16,
   1170	.hid_width = 5,
   1171	.parent_map = gcc_xo_sleep_clk_map,
   1172	.freq_tbl = ftbl_pcie_aux_clk_src,
   1173	.clkr.hw.init = &(struct clk_init_data){
   1174		.name = "pcie_aux_clk_src",
   1175		.parent_data = gcc_xo_sleep_clk,
   1176		.num_parents = ARRAY_SIZE(gcc_xo_sleep_clk),
   1177		.ops = &clk_rcg2_ops,
   1178	},
   1179};
   1180
   1181static const struct freq_tbl ftbl_ufs_axi_clk_src[] = {
   1182	F(100000000, P_GPLL0, 6, 0, 0),
   1183	F(200000000, P_GPLL0, 3, 0, 0),
   1184	F(240000000, P_GPLL0, 2.5, 0, 0),
   1185	{ }
   1186};
   1187
   1188static struct clk_rcg2 ufs_axi_clk_src = {
   1189	.cmd_rcgr = 0x75024,
   1190	.mnd_width = 8,
   1191	.hid_width = 5,
   1192	.parent_map = gcc_xo_gpll0_map,
   1193	.freq_tbl = ftbl_ufs_axi_clk_src,
   1194	.clkr.hw.init = &(struct clk_init_data){
   1195		.name = "ufs_axi_clk_src",
   1196		.parent_data = gcc_xo_gpll0,
   1197		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
   1198		.ops = &clk_rcg2_ops,
   1199	},
   1200};
   1201
   1202static const struct freq_tbl ftbl_ufs_ice_core_clk_src[] = {
   1203	F(19200000, P_XO, 1, 0, 0),
   1204	F(150000000, P_GPLL0, 4, 0, 0),
   1205	F(300000000, P_GPLL0, 2, 0, 0),
   1206	{ }
   1207};
   1208
   1209static struct clk_rcg2 ufs_ice_core_clk_src = {
   1210	.cmd_rcgr = 0x76014,
   1211	.hid_width = 5,
   1212	.parent_map = gcc_xo_gpll0_map,
   1213	.freq_tbl = ftbl_ufs_ice_core_clk_src,
   1214	.clkr.hw.init = &(struct clk_init_data){
   1215		.name = "ufs_ice_core_clk_src",
   1216		.parent_data = gcc_xo_gpll0,
   1217		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
   1218		.ops = &clk_rcg2_ops,
   1219	},
   1220};
   1221
   1222static const struct freq_tbl ftbl_qspi_ser_clk_src[] = {
   1223	F(75000000, P_GPLL0, 8, 0, 0),
   1224	F(150000000, P_GPLL0, 4, 0, 0),
   1225	F(256000000, P_GPLL4, 1.5, 0, 0),
   1226	F(300000000, P_GPLL0, 2, 0, 0),
   1227	{ }
   1228};
   1229
   1230static struct clk_rcg2 qspi_ser_clk_src = {
   1231	.cmd_rcgr = 0x8b00c,
   1232	.hid_width = 5,
   1233	.parent_map = gcc_xo_gpll0_gpll4_gpll0_early_div_map,
   1234	.freq_tbl = ftbl_qspi_ser_clk_src,
   1235	.clkr.hw.init = &(struct clk_init_data){
   1236		.name = "qspi_ser_clk_src",
   1237		.parent_data = gcc_xo_gpll0_gpll4_gpll0_early_div,
   1238		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4_gpll0_early_div),
   1239		.ops = &clk_rcg2_ops,
   1240	},
   1241};
   1242
   1243static struct clk_branch gcc_sys_noc_usb3_axi_clk = {
   1244	.halt_reg = 0x0f03c,
   1245	.clkr = {
   1246		.enable_reg = 0x0f03c,
   1247		.enable_mask = BIT(0),
   1248		.hw.init = &(struct clk_init_data){
   1249			.name = "gcc_sys_noc_usb3_axi_clk",
   1250			.parent_hws = (const struct clk_hw*[]){
   1251				&usb30_master_clk_src.clkr.hw,
   1252			},
   1253			.num_parents = 1,
   1254			.flags = CLK_SET_RATE_PARENT,
   1255			.ops = &clk_branch2_ops,
   1256		},
   1257	},
   1258};
   1259
   1260static struct clk_branch gcc_sys_noc_ufs_axi_clk = {
   1261	.halt_reg = 0x75038,
   1262	.clkr = {
   1263		.enable_reg = 0x75038,
   1264		.enable_mask = BIT(0),
   1265		.hw.init = &(struct clk_init_data){
   1266			.name = "gcc_sys_noc_ufs_axi_clk",
   1267			.parent_hws = (const struct clk_hw*[]){
   1268				&ufs_axi_clk_src.clkr.hw,
   1269			},
   1270			.num_parents = 1,
   1271			.flags = CLK_SET_RATE_PARENT,
   1272			.ops = &clk_branch2_ops,
   1273		},
   1274	},
   1275};
   1276
   1277static struct clk_branch gcc_periph_noc_usb20_ahb_clk = {
   1278	.halt_reg = 0x6010,
   1279	.clkr = {
   1280		.enable_reg = 0x6010,
   1281		.enable_mask = BIT(0),
   1282		.hw.init = &(struct clk_init_data){
   1283			.name = "gcc_periph_noc_usb20_ahb_clk",
   1284			.parent_hws = (const struct clk_hw*[]){
   1285				&usb20_master_clk_src.clkr.hw,
   1286			},
   1287			.num_parents = 1,
   1288			.flags = CLK_SET_RATE_PARENT,
   1289			.ops = &clk_branch2_ops,
   1290		},
   1291	},
   1292};
   1293
   1294static struct clk_branch gcc_mmss_noc_cfg_ahb_clk = {
   1295	.halt_reg = 0x9008,
   1296	.clkr = {
   1297		.enable_reg = 0x9008,
   1298		.enable_mask = BIT(0),
   1299		.hw.init = &(struct clk_init_data){
   1300			.name = "gcc_mmss_noc_cfg_ahb_clk",
   1301			.parent_hws = (const struct clk_hw*[]){
   1302				&config_noc_clk_src.clkr.hw,
   1303			},
   1304			.num_parents = 1,
   1305			.flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
   1306			.ops = &clk_branch2_ops,
   1307		},
   1308	},
   1309};
   1310
   1311static struct clk_branch gcc_mmss_bimc_gfx_clk = {
   1312	.halt_reg = 0x9010,
   1313	.clkr = {
   1314		.enable_reg = 0x9010,
   1315		.enable_mask = BIT(0),
   1316		.hw.init = &(struct clk_init_data){
   1317			.name = "gcc_mmss_bimc_gfx_clk",
   1318			.flags = CLK_SET_RATE_PARENT,
   1319			.ops = &clk_branch2_ops,
   1320		},
   1321	},
   1322};
   1323
   1324static struct clk_branch gcc_usb30_master_clk = {
   1325	.halt_reg = 0x0f008,
   1326	.clkr = {
   1327		.enable_reg = 0x0f008,
   1328		.enable_mask = BIT(0),
   1329		.hw.init = &(struct clk_init_data){
   1330			.name = "gcc_usb30_master_clk",
   1331			.parent_hws = (const struct clk_hw*[]){
   1332				&usb30_master_clk_src.clkr.hw,
   1333			},
   1334			.num_parents = 1,
   1335			.flags = CLK_SET_RATE_PARENT,
   1336			.ops = &clk_branch2_ops,
   1337		},
   1338	},
   1339};
   1340
   1341static struct clk_branch gcc_usb30_sleep_clk = {
   1342	.halt_reg = 0x0f00c,
   1343	.clkr = {
   1344		.enable_reg = 0x0f00c,
   1345		.enable_mask = BIT(0),
   1346		.hw.init = &(struct clk_init_data){
   1347			.name = "gcc_usb30_sleep_clk",
   1348			.parent_hws = (const struct clk_hw*[]){
   1349				&gcc_sleep_clk_src.clkr.hw,
   1350			},
   1351			.num_parents = 1,
   1352			.flags = CLK_SET_RATE_PARENT,
   1353			.ops = &clk_branch2_ops,
   1354		},
   1355	},
   1356};
   1357
   1358static struct clk_branch gcc_usb30_mock_utmi_clk = {
   1359	.halt_reg = 0x0f010,
   1360	.clkr = {
   1361		.enable_reg = 0x0f010,
   1362		.enable_mask = BIT(0),
   1363		.hw.init = &(struct clk_init_data){
   1364			.name = "gcc_usb30_mock_utmi_clk",
   1365			.parent_hws = (const struct clk_hw*[]){
   1366				&usb30_mock_utmi_clk_src.clkr.hw,
   1367			},
   1368			.num_parents = 1,
   1369			.flags = CLK_SET_RATE_PARENT,
   1370			.ops = &clk_branch2_ops,
   1371		},
   1372	},
   1373};
   1374
   1375static struct clk_branch gcc_usb3_phy_aux_clk = {
   1376	.halt_reg = 0x50000,
   1377	.clkr = {
   1378		.enable_reg = 0x50000,
   1379		.enable_mask = BIT(0),
   1380		.hw.init = &(struct clk_init_data){
   1381			.name = "gcc_usb3_phy_aux_clk",
   1382			.parent_hws = (const struct clk_hw*[]){
   1383				&usb3_phy_aux_clk_src.clkr.hw,
   1384			},
   1385			.num_parents = 1,
   1386			.flags = CLK_SET_RATE_PARENT,
   1387			.ops = &clk_branch2_ops,
   1388		},
   1389	},
   1390};
   1391
   1392static struct clk_branch gcc_usb3_phy_pipe_clk = {
   1393	.halt_reg = 0x50004,
   1394	.halt_check = BRANCH_HALT_SKIP,
   1395	.clkr = {
   1396		.enable_reg = 0x50004,
   1397		.enable_mask = BIT(0),
   1398		.hw.init = &(struct clk_init_data){
   1399			.name = "gcc_usb3_phy_pipe_clk",
   1400			.parent_data = &(const struct clk_parent_data){
   1401				.fw_name = "usb3_phy_pipe_clk_src", .name = "usb3_phy_pipe_clk_src",
   1402			},
   1403			.num_parents = 1,
   1404			.flags = CLK_SET_RATE_PARENT,
   1405			.ops = &clk_branch2_ops,
   1406		},
   1407	},
   1408};
   1409
   1410static struct clk_branch gcc_usb20_master_clk = {
   1411	.halt_reg = 0x12004,
   1412	.clkr = {
   1413		.enable_reg = 0x12004,
   1414		.enable_mask = BIT(0),
   1415		.hw.init = &(struct clk_init_data){
   1416			.name = "gcc_usb20_master_clk",
   1417			.parent_hws = (const struct clk_hw*[]){
   1418				&usb20_master_clk_src.clkr.hw,
   1419			},
   1420			.num_parents = 1,
   1421			.flags = CLK_SET_RATE_PARENT,
   1422			.ops = &clk_branch2_ops,
   1423		},
   1424	},
   1425};
   1426
   1427static struct clk_branch gcc_usb20_sleep_clk = {
   1428	.halt_reg = 0x12008,
   1429	.clkr = {
   1430		.enable_reg = 0x12008,
   1431		.enable_mask = BIT(0),
   1432		.hw.init = &(struct clk_init_data){
   1433			.name = "gcc_usb20_sleep_clk",
   1434			.parent_hws = (const struct clk_hw*[]){
   1435				&gcc_sleep_clk_src.clkr.hw,
   1436			},
   1437			.num_parents = 1,
   1438			.flags = CLK_SET_RATE_PARENT,
   1439			.ops = &clk_branch2_ops,
   1440		},
   1441	},
   1442};
   1443
   1444static struct clk_branch gcc_usb20_mock_utmi_clk = {
   1445	.halt_reg = 0x1200c,
   1446	.clkr = {
   1447		.enable_reg = 0x1200c,
   1448		.enable_mask = BIT(0),
   1449		.hw.init = &(struct clk_init_data){
   1450			.name = "gcc_usb20_mock_utmi_clk",
   1451			.parent_hws = (const struct clk_hw*[]){
   1452				&usb20_mock_utmi_clk_src.clkr.hw,
   1453			},
   1454			.num_parents = 1,
   1455			.flags = CLK_SET_RATE_PARENT,
   1456			.ops = &clk_branch2_ops,
   1457		},
   1458	},
   1459};
   1460
   1461static struct clk_branch gcc_usb_phy_cfg_ahb2phy_clk = {
   1462	.halt_reg = 0x6a004,
   1463	.clkr = {
   1464		.enable_reg = 0x6a004,
   1465		.enable_mask = BIT(0),
   1466		.hw.init = &(struct clk_init_data){
   1467			.name = "gcc_usb_phy_cfg_ahb2phy_clk",
   1468			.parent_hws = (const struct clk_hw*[]){
   1469				&periph_noc_clk_src.clkr.hw,
   1470			},
   1471			.num_parents = 1,
   1472			.flags = CLK_SET_RATE_PARENT,
   1473			.ops = &clk_branch2_ops,
   1474		},
   1475	},
   1476};
   1477
   1478static struct clk_branch gcc_sdcc1_apps_clk = {
   1479	.halt_reg = 0x13004,
   1480	.clkr = {
   1481		.enable_reg = 0x13004,
   1482		.enable_mask = BIT(0),
   1483		.hw.init = &(struct clk_init_data){
   1484			.name = "gcc_sdcc1_apps_clk",
   1485			.parent_hws = (const struct clk_hw*[]){
   1486				&sdcc1_apps_clk_src.clkr.hw,
   1487			},
   1488			.num_parents = 1,
   1489			.flags = CLK_SET_RATE_PARENT,
   1490			.ops = &clk_branch2_ops,
   1491		},
   1492	},
   1493};
   1494
   1495static struct clk_branch gcc_sdcc1_ahb_clk = {
   1496	.halt_reg = 0x13008,
   1497	.clkr = {
   1498		.enable_reg = 0x13008,
   1499		.enable_mask = BIT(0),
   1500		.hw.init = &(struct clk_init_data){
   1501			.name = "gcc_sdcc1_ahb_clk",
   1502			.parent_hws = (const struct clk_hw*[]){
   1503				&periph_noc_clk_src.clkr.hw,
   1504			},
   1505			.num_parents = 1,
   1506			.flags = CLK_SET_RATE_PARENT,
   1507			.ops = &clk_branch2_ops,
   1508		},
   1509	},
   1510};
   1511
   1512static struct clk_branch gcc_sdcc1_ice_core_clk = {
   1513	.halt_reg = 0x13038,
   1514	.clkr = {
   1515		.enable_reg = 0x13038,
   1516		.enable_mask = BIT(0),
   1517		.hw.init = &(struct clk_init_data){
   1518			.name = "gcc_sdcc1_ice_core_clk",
   1519			.parent_hws = (const struct clk_hw*[]){
   1520				&sdcc1_ice_core_clk_src.clkr.hw,
   1521			},
   1522			.num_parents = 1,
   1523			.flags = CLK_SET_RATE_PARENT,
   1524			.ops = &clk_branch2_ops,
   1525		},
   1526	},
   1527};
   1528
   1529static struct clk_branch gcc_sdcc2_apps_clk = {
   1530	.halt_reg = 0x14004,
   1531	.clkr = {
   1532		.enable_reg = 0x14004,
   1533		.enable_mask = BIT(0),
   1534		.hw.init = &(struct clk_init_data){
   1535			.name = "gcc_sdcc2_apps_clk",
   1536			.parent_hws = (const struct clk_hw*[]){
   1537				&sdcc2_apps_clk_src.clkr.hw,
   1538			},
   1539			.num_parents = 1,
   1540			.flags = CLK_SET_RATE_PARENT,
   1541			.ops = &clk_branch2_ops,
   1542		},
   1543	},
   1544};
   1545
   1546static struct clk_branch gcc_sdcc2_ahb_clk = {
   1547	.halt_reg = 0x14008,
   1548	.clkr = {
   1549		.enable_reg = 0x14008,
   1550		.enable_mask = BIT(0),
   1551		.hw.init = &(struct clk_init_data){
   1552			.name = "gcc_sdcc2_ahb_clk",
   1553			.parent_hws = (const struct clk_hw*[]){
   1554				&periph_noc_clk_src.clkr.hw,
   1555			},
   1556			.num_parents = 1,
   1557			.flags = CLK_SET_RATE_PARENT,
   1558			.ops = &clk_branch2_ops,
   1559		},
   1560	},
   1561};
   1562
   1563static struct clk_branch gcc_sdcc3_apps_clk = {
   1564	.halt_reg = 0x15004,
   1565	.clkr = {
   1566		.enable_reg = 0x15004,
   1567		.enable_mask = BIT(0),
   1568		.hw.init = &(struct clk_init_data){
   1569			.name = "gcc_sdcc3_apps_clk",
   1570			.parent_hws = (const struct clk_hw*[]){
   1571				&sdcc3_apps_clk_src.clkr.hw,
   1572			},
   1573			.num_parents = 1,
   1574			.flags = CLK_SET_RATE_PARENT,
   1575			.ops = &clk_branch2_ops,
   1576		},
   1577	},
   1578};
   1579
   1580static struct clk_branch gcc_sdcc3_ahb_clk = {
   1581	.halt_reg = 0x15008,
   1582	.clkr = {
   1583		.enable_reg = 0x15008,
   1584		.enable_mask = BIT(0),
   1585		.hw.init = &(struct clk_init_data){
   1586			.name = "gcc_sdcc3_ahb_clk",
   1587			.parent_hws = (const struct clk_hw*[]){
   1588				&periph_noc_clk_src.clkr.hw,
   1589			},
   1590			.num_parents = 1,
   1591			.flags = CLK_SET_RATE_PARENT,
   1592			.ops = &clk_branch2_ops,
   1593		},
   1594	},
   1595};
   1596
   1597static struct clk_branch gcc_sdcc4_apps_clk = {
   1598	.halt_reg = 0x16004,
   1599	.clkr = {
   1600		.enable_reg = 0x16004,
   1601		.enable_mask = BIT(0),
   1602		.hw.init = &(struct clk_init_data){
   1603			.name = "gcc_sdcc4_apps_clk",
   1604			.parent_hws = (const struct clk_hw*[]){
   1605				&sdcc4_apps_clk_src.clkr.hw,
   1606			},
   1607			.num_parents = 1,
   1608			.flags = CLK_SET_RATE_PARENT,
   1609			.ops = &clk_branch2_ops,
   1610		},
   1611	},
   1612};
   1613
   1614static struct clk_branch gcc_sdcc4_ahb_clk = {
   1615	.halt_reg = 0x16008,
   1616	.clkr = {
   1617		.enable_reg = 0x16008,
   1618		.enable_mask = BIT(0),
   1619		.hw.init = &(struct clk_init_data){
   1620			.name = "gcc_sdcc4_ahb_clk",
   1621			.parent_hws = (const struct clk_hw*[]){
   1622				&periph_noc_clk_src.clkr.hw,
   1623			},
   1624			.num_parents = 1,
   1625			.flags = CLK_SET_RATE_PARENT,
   1626			.ops = &clk_branch2_ops,
   1627		},
   1628	},
   1629};
   1630
   1631static struct clk_branch gcc_blsp1_ahb_clk = {
   1632	.halt_reg = 0x17004,
   1633	.halt_check = BRANCH_HALT_VOTED,
   1634	.clkr = {
   1635		.enable_reg = 0x52004,
   1636		.enable_mask = BIT(17),
   1637		.hw.init = &(struct clk_init_data){
   1638			.name = "gcc_blsp1_ahb_clk",
   1639			.parent_hws = (const struct clk_hw*[]){
   1640				&periph_noc_clk_src.clkr.hw,
   1641			},
   1642			.num_parents = 1,
   1643			.flags = CLK_SET_RATE_PARENT,
   1644			.ops = &clk_branch2_ops,
   1645		},
   1646	},
   1647};
   1648
   1649static struct clk_branch gcc_blsp1_sleep_clk = {
   1650	.halt_reg = 0x17008,
   1651	.halt_check = BRANCH_HALT_VOTED,
   1652	.clkr = {
   1653		.enable_reg = 0x52004,
   1654		.enable_mask = BIT(16),
   1655		.hw.init = &(struct clk_init_data){
   1656			.name = "gcc_blsp1_sleep_clk",
   1657			.parent_hws = (const struct clk_hw*[]){
   1658				&gcc_sleep_clk_src.clkr.hw,
   1659			},
   1660			.num_parents = 1,
   1661			.flags = CLK_SET_RATE_PARENT,
   1662			.ops = &clk_branch2_ops,
   1663		},
   1664	},
   1665};
   1666
   1667static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
   1668	.halt_reg = 0x19004,
   1669	.clkr = {
   1670		.enable_reg = 0x19004,
   1671		.enable_mask = BIT(0),
   1672		.hw.init = &(struct clk_init_data){
   1673			.name = "gcc_blsp1_qup1_spi_apps_clk",
   1674			.parent_hws = (const struct clk_hw*[]){
   1675				&blsp1_qup1_spi_apps_clk_src.clkr.hw,
   1676			},
   1677			.num_parents = 1,
   1678			.flags = CLK_SET_RATE_PARENT,
   1679			.ops = &clk_branch2_ops,
   1680		},
   1681	},
   1682};
   1683
   1684static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
   1685	.halt_reg = 0x19008,
   1686	.clkr = {
   1687		.enable_reg = 0x19008,
   1688		.enable_mask = BIT(0),
   1689		.hw.init = &(struct clk_init_data){
   1690			.name = "gcc_blsp1_qup1_i2c_apps_clk",
   1691			.parent_hws = (const struct clk_hw*[]){
   1692				&blsp1_qup1_i2c_apps_clk_src.clkr.hw,
   1693			},
   1694			.num_parents = 1,
   1695			.flags = CLK_SET_RATE_PARENT,
   1696			.ops = &clk_branch2_ops,
   1697		},
   1698	},
   1699};
   1700
   1701static struct clk_branch gcc_blsp1_uart1_apps_clk = {
   1702	.halt_reg = 0x1a004,
   1703	.clkr = {
   1704		.enable_reg = 0x1a004,
   1705		.enable_mask = BIT(0),
   1706		.hw.init = &(struct clk_init_data){
   1707			.name = "gcc_blsp1_uart1_apps_clk",
   1708			.parent_hws = (const struct clk_hw*[]){
   1709				&blsp1_uart1_apps_clk_src.clkr.hw,
   1710			},
   1711			.num_parents = 1,
   1712			.flags = CLK_SET_RATE_PARENT,
   1713			.ops = &clk_branch2_ops,
   1714		},
   1715	},
   1716};
   1717
   1718static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
   1719	.halt_reg = 0x1b004,
   1720	.clkr = {
   1721		.enable_reg = 0x1b004,
   1722		.enable_mask = BIT(0),
   1723		.hw.init = &(struct clk_init_data){
   1724			.name = "gcc_blsp1_qup2_spi_apps_clk",
   1725			.parent_hws = (const struct clk_hw*[]){
   1726				&blsp1_qup2_spi_apps_clk_src.clkr.hw,
   1727			},
   1728			.num_parents = 1,
   1729			.flags = CLK_SET_RATE_PARENT,
   1730			.ops = &clk_branch2_ops,
   1731		},
   1732	},
   1733};
   1734
   1735static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
   1736	.halt_reg = 0x1b008,
   1737	.clkr = {
   1738		.enable_reg = 0x1b008,
   1739		.enable_mask = BIT(0),
   1740		.hw.init = &(struct clk_init_data){
   1741			.name = "gcc_blsp1_qup2_i2c_apps_clk",
   1742			.parent_hws = (const struct clk_hw*[]){
   1743				&blsp1_qup2_i2c_apps_clk_src.clkr.hw,
   1744			},
   1745			.num_parents = 1,
   1746			.flags = CLK_SET_RATE_PARENT,
   1747			.ops = &clk_branch2_ops,
   1748		},
   1749	},
   1750};
   1751
   1752static struct clk_branch gcc_blsp1_uart2_apps_clk = {
   1753	.halt_reg = 0x1c004,
   1754	.clkr = {
   1755		.enable_reg = 0x1c004,
   1756		.enable_mask = BIT(0),
   1757		.hw.init = &(struct clk_init_data){
   1758			.name = "gcc_blsp1_uart2_apps_clk",
   1759			.parent_hws = (const struct clk_hw*[]){
   1760				&blsp1_uart2_apps_clk_src.clkr.hw,
   1761			},
   1762			.num_parents = 1,
   1763			.flags = CLK_SET_RATE_PARENT,
   1764			.ops = &clk_branch2_ops,
   1765		},
   1766	},
   1767};
   1768
   1769static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
   1770	.halt_reg = 0x1d004,
   1771	.clkr = {
   1772		.enable_reg = 0x1d004,
   1773		.enable_mask = BIT(0),
   1774		.hw.init = &(struct clk_init_data){
   1775			.name = "gcc_blsp1_qup3_spi_apps_clk",
   1776			.parent_hws = (const struct clk_hw*[]){
   1777				&blsp1_qup3_spi_apps_clk_src.clkr.hw,
   1778			},
   1779			.num_parents = 1,
   1780			.flags = CLK_SET_RATE_PARENT,
   1781			.ops = &clk_branch2_ops,
   1782		},
   1783	},
   1784};
   1785
   1786static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
   1787	.halt_reg = 0x1d008,
   1788	.clkr = {
   1789		.enable_reg = 0x1d008,
   1790		.enable_mask = BIT(0),
   1791		.hw.init = &(struct clk_init_data){
   1792			.name = "gcc_blsp1_qup3_i2c_apps_clk",
   1793			.parent_hws = (const struct clk_hw*[]){
   1794				&blsp1_qup3_i2c_apps_clk_src.clkr.hw,
   1795			},
   1796			.num_parents = 1,
   1797			.flags = CLK_SET_RATE_PARENT,
   1798			.ops = &clk_branch2_ops,
   1799		},
   1800	},
   1801};
   1802
   1803static struct clk_branch gcc_blsp1_uart3_apps_clk = {
   1804	.halt_reg = 0x1e004,
   1805	.clkr = {
   1806		.enable_reg = 0x1e004,
   1807		.enable_mask = BIT(0),
   1808		.hw.init = &(struct clk_init_data){
   1809			.name = "gcc_blsp1_uart3_apps_clk",
   1810			.parent_hws = (const struct clk_hw*[]){
   1811				&blsp1_uart3_apps_clk_src.clkr.hw,
   1812			},
   1813			.num_parents = 1,
   1814			.flags = CLK_SET_RATE_PARENT,
   1815			.ops = &clk_branch2_ops,
   1816		},
   1817	},
   1818};
   1819
   1820static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
   1821	.halt_reg = 0x1f004,
   1822	.clkr = {
   1823		.enable_reg = 0x1f004,
   1824		.enable_mask = BIT(0),
   1825		.hw.init = &(struct clk_init_data){
   1826			.name = "gcc_blsp1_qup4_spi_apps_clk",
   1827			.parent_hws = (const struct clk_hw*[]){
   1828				&blsp1_qup4_spi_apps_clk_src.clkr.hw,
   1829			},
   1830			.num_parents = 1,
   1831			.flags = CLK_SET_RATE_PARENT,
   1832			.ops = &clk_branch2_ops,
   1833		},
   1834	},
   1835};
   1836
   1837static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
   1838	.halt_reg = 0x1f008,
   1839	.clkr = {
   1840		.enable_reg = 0x1f008,
   1841		.enable_mask = BIT(0),
   1842		.hw.init = &(struct clk_init_data){
   1843			.name = "gcc_blsp1_qup4_i2c_apps_clk",
   1844			.parent_hws = (const struct clk_hw*[]){
   1845				&blsp1_qup4_i2c_apps_clk_src.clkr.hw,
   1846			},
   1847			.num_parents = 1,
   1848			.flags = CLK_SET_RATE_PARENT,
   1849			.ops = &clk_branch2_ops,
   1850		},
   1851	},
   1852};
   1853
   1854static struct clk_branch gcc_blsp1_uart4_apps_clk = {
   1855	.halt_reg = 0x20004,
   1856	.clkr = {
   1857		.enable_reg = 0x20004,
   1858		.enable_mask = BIT(0),
   1859		.hw.init = &(struct clk_init_data){
   1860			.name = "gcc_blsp1_uart4_apps_clk",
   1861			.parent_hws = (const struct clk_hw*[]){
   1862				&blsp1_uart4_apps_clk_src.clkr.hw,
   1863			},
   1864			.num_parents = 1,
   1865			.flags = CLK_SET_RATE_PARENT,
   1866			.ops = &clk_branch2_ops,
   1867		},
   1868	},
   1869};
   1870
   1871static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
   1872	.halt_reg = 0x21004,
   1873	.clkr = {
   1874		.enable_reg = 0x21004,
   1875		.enable_mask = BIT(0),
   1876		.hw.init = &(struct clk_init_data){
   1877			.name = "gcc_blsp1_qup5_spi_apps_clk",
   1878			.parent_hws = (const struct clk_hw*[]){
   1879				&blsp1_qup5_spi_apps_clk_src.clkr.hw,
   1880			},
   1881			.num_parents = 1,
   1882			.flags = CLK_SET_RATE_PARENT,
   1883			.ops = &clk_branch2_ops,
   1884		},
   1885	},
   1886};
   1887
   1888static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
   1889	.halt_reg = 0x21008,
   1890	.clkr = {
   1891		.enable_reg = 0x21008,
   1892		.enable_mask = BIT(0),
   1893		.hw.init = &(struct clk_init_data){
   1894			.name = "gcc_blsp1_qup5_i2c_apps_clk",
   1895			.parent_hws = (const struct clk_hw*[]){
   1896				&blsp1_qup5_i2c_apps_clk_src.clkr.hw,
   1897			},
   1898			.num_parents = 1,
   1899			.flags = CLK_SET_RATE_PARENT,
   1900			.ops = &clk_branch2_ops,
   1901		},
   1902	},
   1903};
   1904
   1905static struct clk_branch gcc_blsp1_uart5_apps_clk = {
   1906	.halt_reg = 0x22004,
   1907	.clkr = {
   1908		.enable_reg = 0x22004,
   1909		.enable_mask = BIT(0),
   1910		.hw.init = &(struct clk_init_data){
   1911			.name = "gcc_blsp1_uart5_apps_clk",
   1912			.parent_hws = (const struct clk_hw*[]){
   1913				&blsp1_uart5_apps_clk_src.clkr.hw,
   1914			},
   1915			.num_parents = 1,
   1916			.flags = CLK_SET_RATE_PARENT,
   1917			.ops = &clk_branch2_ops,
   1918		},
   1919	},
   1920};
   1921
   1922static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
   1923	.halt_reg = 0x23004,
   1924	.clkr = {
   1925		.enable_reg = 0x23004,
   1926		.enable_mask = BIT(0),
   1927		.hw.init = &(struct clk_init_data){
   1928			.name = "gcc_blsp1_qup6_spi_apps_clk",
   1929			.parent_hws = (const struct clk_hw*[]){
   1930				&blsp1_qup6_spi_apps_clk_src.clkr.hw,
   1931			},
   1932			.num_parents = 1,
   1933			.flags = CLK_SET_RATE_PARENT,
   1934			.ops = &clk_branch2_ops,
   1935		},
   1936	},
   1937};
   1938
   1939static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
   1940	.halt_reg = 0x23008,
   1941	.clkr = {
   1942		.enable_reg = 0x23008,
   1943		.enable_mask = BIT(0),
   1944		.hw.init = &(struct clk_init_data){
   1945			.name = "gcc_blsp1_qup6_i2c_apps_clk",
   1946			.parent_hws = (const struct clk_hw*[]){
   1947				&blsp1_qup6_i2c_apps_clk_src.clkr.hw,
   1948			},
   1949			.num_parents = 1,
   1950			.flags = CLK_SET_RATE_PARENT,
   1951			.ops = &clk_branch2_ops,
   1952		},
   1953	},
   1954};
   1955
   1956static struct clk_branch gcc_blsp1_uart6_apps_clk = {
   1957	.halt_reg = 0x24004,
   1958	.clkr = {
   1959		.enable_reg = 0x24004,
   1960		.enable_mask = BIT(0),
   1961		.hw.init = &(struct clk_init_data){
   1962			.name = "gcc_blsp1_uart6_apps_clk",
   1963			.parent_hws = (const struct clk_hw*[]){
   1964				&blsp1_uart6_apps_clk_src.clkr.hw,
   1965			},
   1966			.num_parents = 1,
   1967			.flags = CLK_SET_RATE_PARENT,
   1968			.ops = &clk_branch2_ops,
   1969		},
   1970	},
   1971};
   1972
   1973static struct clk_branch gcc_blsp2_ahb_clk = {
   1974	.halt_reg = 0x25004,
   1975	.halt_check = BRANCH_HALT_VOTED,
   1976	.clkr = {
   1977		.enable_reg = 0x52004,
   1978		.enable_mask = BIT(15),
   1979		.hw.init = &(struct clk_init_data){
   1980			.name = "gcc_blsp2_ahb_clk",
   1981			.parent_hws = (const struct clk_hw*[]){
   1982				&periph_noc_clk_src.clkr.hw,
   1983			},
   1984			.num_parents = 1,
   1985			.flags = CLK_SET_RATE_PARENT,
   1986			.ops = &clk_branch2_ops,
   1987		},
   1988	},
   1989};
   1990
   1991static struct clk_branch gcc_blsp2_sleep_clk = {
   1992	.halt_reg = 0x25008,
   1993	.halt_check = BRANCH_HALT_VOTED,
   1994	.clkr = {
   1995		.enable_reg = 0x52004,
   1996		.enable_mask = BIT(14),
   1997		.hw.init = &(struct clk_init_data){
   1998			.name = "gcc_blsp2_sleep_clk",
   1999			.parent_hws = (const struct clk_hw*[]){
   2000				&gcc_sleep_clk_src.clkr.hw,
   2001			},
   2002			.num_parents = 1,
   2003			.flags = CLK_SET_RATE_PARENT,
   2004			.ops = &clk_branch2_ops,
   2005		},
   2006	},
   2007};
   2008
   2009static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
   2010	.halt_reg = 0x26004,
   2011	.clkr = {
   2012		.enable_reg = 0x26004,
   2013		.enable_mask = BIT(0),
   2014		.hw.init = &(struct clk_init_data){
   2015			.name = "gcc_blsp2_qup1_spi_apps_clk",
   2016			.parent_hws = (const struct clk_hw*[]){
   2017				&blsp2_qup1_spi_apps_clk_src.clkr.hw,
   2018			},
   2019			.num_parents = 1,
   2020			.flags = CLK_SET_RATE_PARENT,
   2021			.ops = &clk_branch2_ops,
   2022		},
   2023	},
   2024};
   2025
   2026static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
   2027	.halt_reg = 0x26008,
   2028	.clkr = {
   2029		.enable_reg = 0x26008,
   2030		.enable_mask = BIT(0),
   2031		.hw.init = &(struct clk_init_data){
   2032			.name = "gcc_blsp2_qup1_i2c_apps_clk",
   2033			.parent_hws = (const struct clk_hw*[]){
   2034				&blsp2_qup1_i2c_apps_clk_src.clkr.hw,
   2035			},
   2036			.num_parents = 1,
   2037			.flags = CLK_SET_RATE_PARENT,
   2038			.ops = &clk_branch2_ops,
   2039		},
   2040	},
   2041};
   2042
   2043static struct clk_branch gcc_blsp2_uart1_apps_clk = {
   2044	.halt_reg = 0x27004,
   2045	.clkr = {
   2046		.enable_reg = 0x27004,
   2047		.enable_mask = BIT(0),
   2048		.hw.init = &(struct clk_init_data){
   2049			.name = "gcc_blsp2_uart1_apps_clk",
   2050			.parent_hws = (const struct clk_hw*[]){
   2051				&blsp2_uart1_apps_clk_src.clkr.hw,
   2052			},
   2053			.num_parents = 1,
   2054			.flags = CLK_SET_RATE_PARENT,
   2055			.ops = &clk_branch2_ops,
   2056		},
   2057	},
   2058};
   2059
   2060static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
   2061	.halt_reg = 0x28004,
   2062	.clkr = {
   2063		.enable_reg = 0x28004,
   2064		.enable_mask = BIT(0),
   2065		.hw.init = &(struct clk_init_data){
   2066			.name = "gcc_blsp2_qup2_spi_apps_clk",
   2067			.parent_hws = (const struct clk_hw*[]){
   2068				&blsp2_qup2_spi_apps_clk_src.clkr.hw,
   2069			},
   2070			.num_parents = 1,
   2071			.flags = CLK_SET_RATE_PARENT,
   2072			.ops = &clk_branch2_ops,
   2073		},
   2074	},
   2075};
   2076
   2077static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
   2078	.halt_reg = 0x28008,
   2079	.clkr = {
   2080		.enable_reg = 0x28008,
   2081		.enable_mask = BIT(0),
   2082		.hw.init = &(struct clk_init_data){
   2083			.name = "gcc_blsp2_qup2_i2c_apps_clk",
   2084			.parent_hws = (const struct clk_hw*[]){
   2085				&blsp2_qup2_i2c_apps_clk_src.clkr.hw,
   2086			},
   2087			.num_parents = 1,
   2088			.flags = CLK_SET_RATE_PARENT,
   2089			.ops = &clk_branch2_ops,
   2090		},
   2091	},
   2092};
   2093
   2094static struct clk_branch gcc_blsp2_uart2_apps_clk = {
   2095	.halt_reg = 0x29004,
   2096	.clkr = {
   2097		.enable_reg = 0x29004,
   2098		.enable_mask = BIT(0),
   2099		.hw.init = &(struct clk_init_data){
   2100			.name = "gcc_blsp2_uart2_apps_clk",
   2101			.parent_hws = (const struct clk_hw*[]){
   2102				&blsp2_uart2_apps_clk_src.clkr.hw,
   2103			},
   2104			.num_parents = 1,
   2105			.flags = CLK_SET_RATE_PARENT,
   2106			.ops = &clk_branch2_ops,
   2107		},
   2108	},
   2109};
   2110
   2111static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
   2112	.halt_reg = 0x2a004,
   2113	.clkr = {
   2114		.enable_reg = 0x2a004,
   2115		.enable_mask = BIT(0),
   2116		.hw.init = &(struct clk_init_data){
   2117			.name = "gcc_blsp2_qup3_spi_apps_clk",
   2118			.parent_hws = (const struct clk_hw*[]){
   2119				&blsp2_qup3_spi_apps_clk_src.clkr.hw,
   2120			},
   2121			.num_parents = 1,
   2122			.flags = CLK_SET_RATE_PARENT,
   2123			.ops = &clk_branch2_ops,
   2124		},
   2125	},
   2126};
   2127
   2128static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
   2129	.halt_reg = 0x2a008,
   2130	.clkr = {
   2131		.enable_reg = 0x2a008,
   2132		.enable_mask = BIT(0),
   2133		.hw.init = &(struct clk_init_data){
   2134			.name = "gcc_blsp2_qup3_i2c_apps_clk",
   2135			.parent_hws = (const struct clk_hw*[]){
   2136				&blsp2_qup3_i2c_apps_clk_src.clkr.hw,
   2137			},
   2138			.num_parents = 1,
   2139			.flags = CLK_SET_RATE_PARENT,
   2140			.ops = &clk_branch2_ops,
   2141		},
   2142	},
   2143};
   2144
   2145static struct clk_branch gcc_blsp2_uart3_apps_clk = {
   2146	.halt_reg = 0x2b004,
   2147	.clkr = {
   2148		.enable_reg = 0x2b004,
   2149		.enable_mask = BIT(0),
   2150		.hw.init = &(struct clk_init_data){
   2151			.name = "gcc_blsp2_uart3_apps_clk",
   2152			.parent_hws = (const struct clk_hw*[]){
   2153				&blsp2_uart3_apps_clk_src.clkr.hw,
   2154			},
   2155			.num_parents = 1,
   2156			.flags = CLK_SET_RATE_PARENT,
   2157			.ops = &clk_branch2_ops,
   2158		},
   2159	},
   2160};
   2161
   2162static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
   2163	.halt_reg = 0x2c004,
   2164	.clkr = {
   2165		.enable_reg = 0x2c004,
   2166		.enable_mask = BIT(0),
   2167		.hw.init = &(struct clk_init_data){
   2168			.name = "gcc_blsp2_qup4_spi_apps_clk",
   2169			.parent_hws = (const struct clk_hw*[]){
   2170				&blsp2_qup4_spi_apps_clk_src.clkr.hw,
   2171			},
   2172			.num_parents = 1,
   2173			.flags = CLK_SET_RATE_PARENT,
   2174			.ops = &clk_branch2_ops,
   2175		},
   2176	},
   2177};
   2178
   2179static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
   2180	.halt_reg = 0x2c008,
   2181	.clkr = {
   2182		.enable_reg = 0x2c008,
   2183		.enable_mask = BIT(0),
   2184		.hw.init = &(struct clk_init_data){
   2185			.name = "gcc_blsp2_qup4_i2c_apps_clk",
   2186			.parent_hws = (const struct clk_hw*[]){
   2187				&blsp2_qup4_i2c_apps_clk_src.clkr.hw,
   2188			},
   2189			.num_parents = 1,
   2190			.flags = CLK_SET_RATE_PARENT,
   2191			.ops = &clk_branch2_ops,
   2192		},
   2193	},
   2194};
   2195
   2196static struct clk_branch gcc_blsp2_uart4_apps_clk = {
   2197	.halt_reg = 0x2d004,
   2198	.clkr = {
   2199		.enable_reg = 0x2d004,
   2200		.enable_mask = BIT(0),
   2201		.hw.init = &(struct clk_init_data){
   2202			.name = "gcc_blsp2_uart4_apps_clk",
   2203			.parent_hws = (const struct clk_hw*[]){
   2204				&blsp2_uart4_apps_clk_src.clkr.hw,
   2205			},
   2206			.num_parents = 1,
   2207			.flags = CLK_SET_RATE_PARENT,
   2208			.ops = &clk_branch2_ops,
   2209		},
   2210	},
   2211};
   2212
   2213static struct clk_branch gcc_blsp2_qup5_spi_apps_clk = {
   2214	.halt_reg = 0x2e004,
   2215	.clkr = {
   2216		.enable_reg = 0x2e004,
   2217		.enable_mask = BIT(0),
   2218		.hw.init = &(struct clk_init_data){
   2219			.name = "gcc_blsp2_qup5_spi_apps_clk",
   2220			.parent_hws = (const struct clk_hw*[]){
   2221				&blsp2_qup5_spi_apps_clk_src.clkr.hw,
   2222			},
   2223			.num_parents = 1,
   2224			.flags = CLK_SET_RATE_PARENT,
   2225			.ops = &clk_branch2_ops,
   2226		},
   2227	},
   2228};
   2229
   2230static struct clk_branch gcc_blsp2_qup5_i2c_apps_clk = {
   2231	.halt_reg = 0x2e008,
   2232	.clkr = {
   2233		.enable_reg = 0x2e008,
   2234		.enable_mask = BIT(0),
   2235		.hw.init = &(struct clk_init_data){
   2236			.name = "gcc_blsp2_qup5_i2c_apps_clk",
   2237			.parent_hws = (const struct clk_hw*[]){
   2238				&blsp2_qup5_i2c_apps_clk_src.clkr.hw,
   2239			},
   2240			.num_parents = 1,
   2241			.flags = CLK_SET_RATE_PARENT,
   2242			.ops = &clk_branch2_ops,
   2243		},
   2244	},
   2245};
   2246
   2247static struct clk_branch gcc_blsp2_uart5_apps_clk = {
   2248	.halt_reg = 0x2f004,
   2249	.clkr = {
   2250		.enable_reg = 0x2f004,
   2251		.enable_mask = BIT(0),
   2252		.hw.init = &(struct clk_init_data){
   2253			.name = "gcc_blsp2_uart5_apps_clk",
   2254			.parent_hws = (const struct clk_hw*[]){
   2255				&blsp2_uart5_apps_clk_src.clkr.hw,
   2256			},
   2257			.num_parents = 1,
   2258			.flags = CLK_SET_RATE_PARENT,
   2259			.ops = &clk_branch2_ops,
   2260		},
   2261	},
   2262};
   2263
   2264static struct clk_branch gcc_blsp2_qup6_spi_apps_clk = {
   2265	.halt_reg = 0x30004,
   2266	.clkr = {
   2267		.enable_reg = 0x30004,
   2268		.enable_mask = BIT(0),
   2269		.hw.init = &(struct clk_init_data){
   2270			.name = "gcc_blsp2_qup6_spi_apps_clk",
   2271			.parent_hws = (const struct clk_hw*[]){
   2272				&blsp2_qup6_spi_apps_clk_src.clkr.hw,
   2273			},
   2274			.num_parents = 1,
   2275			.flags = CLK_SET_RATE_PARENT,
   2276			.ops = &clk_branch2_ops,
   2277		},
   2278	},
   2279};
   2280
   2281static struct clk_branch gcc_blsp2_qup6_i2c_apps_clk = {
   2282	.halt_reg = 0x30008,
   2283	.clkr = {
   2284		.enable_reg = 0x30008,
   2285		.enable_mask = BIT(0),
   2286		.hw.init = &(struct clk_init_data){
   2287			.name = "gcc_blsp2_qup6_i2c_apps_clk",
   2288			.parent_hws = (const struct clk_hw*[]){
   2289				&blsp2_qup6_i2c_apps_clk_src.clkr.hw,
   2290			},
   2291			.num_parents = 1,
   2292			.flags = CLK_SET_RATE_PARENT,
   2293			.ops = &clk_branch2_ops,
   2294		},
   2295	},
   2296};
   2297
   2298static struct clk_branch gcc_blsp2_uart6_apps_clk = {
   2299	.halt_reg = 0x31004,
   2300	.clkr = {
   2301		.enable_reg = 0x31004,
   2302		.enable_mask = BIT(0),
   2303		.hw.init = &(struct clk_init_data){
   2304			.name = "gcc_blsp2_uart6_apps_clk",
   2305			.parent_hws = (const struct clk_hw*[]){
   2306				&blsp2_uart6_apps_clk_src.clkr.hw,
   2307			},
   2308			.num_parents = 1,
   2309			.flags = CLK_SET_RATE_PARENT,
   2310			.ops = &clk_branch2_ops,
   2311		},
   2312	},
   2313};
   2314
   2315static struct clk_branch gcc_pdm_ahb_clk = {
   2316	.halt_reg = 0x33004,
   2317	.clkr = {
   2318		.enable_reg = 0x33004,
   2319		.enable_mask = BIT(0),
   2320		.hw.init = &(struct clk_init_data){
   2321			.name = "gcc_pdm_ahb_clk",
   2322			.parent_hws = (const struct clk_hw*[]){
   2323				&periph_noc_clk_src.clkr.hw,
   2324			},
   2325			.num_parents = 1,
   2326			.flags = CLK_SET_RATE_PARENT,
   2327			.ops = &clk_branch2_ops,
   2328		},
   2329	},
   2330};
   2331
   2332static struct clk_branch gcc_pdm2_clk = {
   2333	.halt_reg = 0x3300c,
   2334	.clkr = {
   2335		.enable_reg = 0x3300c,
   2336		.enable_mask = BIT(0),
   2337		.hw.init = &(struct clk_init_data){
   2338			.name = "gcc_pdm2_clk",
   2339			.parent_hws = (const struct clk_hw*[]){
   2340				&pdm2_clk_src.clkr.hw,
   2341			},
   2342			.num_parents = 1,
   2343			.flags = CLK_SET_RATE_PARENT,
   2344			.ops = &clk_branch2_ops,
   2345		},
   2346	},
   2347};
   2348
   2349static struct clk_branch gcc_prng_ahb_clk = {
   2350	.halt_reg = 0x34004,
   2351	.halt_check = BRANCH_HALT_VOTED,
   2352	.clkr = {
   2353		.enable_reg = 0x52004,
   2354		.enable_mask = BIT(13),
   2355		.hw.init = &(struct clk_init_data){
   2356			.name = "gcc_prng_ahb_clk",
   2357			.parent_hws = (const struct clk_hw*[]){
   2358				&config_noc_clk_src.clkr.hw,
   2359			},
   2360			.num_parents = 1,
   2361			.flags = CLK_SET_RATE_PARENT,
   2362			.ops = &clk_branch2_ops,
   2363		},
   2364	},
   2365};
   2366
   2367static struct clk_branch gcc_tsif_ahb_clk = {
   2368	.halt_reg = 0x36004,
   2369	.clkr = {
   2370		.enable_reg = 0x36004,
   2371		.enable_mask = BIT(0),
   2372		.hw.init = &(struct clk_init_data){
   2373			.name = "gcc_tsif_ahb_clk",
   2374			.parent_hws = (const struct clk_hw*[]){
   2375				&periph_noc_clk_src.clkr.hw,
   2376			},
   2377			.num_parents = 1,
   2378			.flags = CLK_SET_RATE_PARENT,
   2379			.ops = &clk_branch2_ops,
   2380		},
   2381	},
   2382};
   2383
   2384static struct clk_branch gcc_tsif_ref_clk = {
   2385	.halt_reg = 0x36008,
   2386	.clkr = {
   2387		.enable_reg = 0x36008,
   2388		.enable_mask = BIT(0),
   2389		.hw.init = &(struct clk_init_data){
   2390			.name = "gcc_tsif_ref_clk",
   2391			.parent_hws = (const struct clk_hw*[]){
   2392				&tsif_ref_clk_src.clkr.hw,
   2393			},
   2394			.num_parents = 1,
   2395			.flags = CLK_SET_RATE_PARENT,
   2396			.ops = &clk_branch2_ops,
   2397		},
   2398	},
   2399};
   2400
   2401static struct clk_branch gcc_tsif_inactivity_timers_clk = {
   2402	.halt_reg = 0x3600c,
   2403	.clkr = {
   2404		.enable_reg = 0x3600c,
   2405		.enable_mask = BIT(0),
   2406		.hw.init = &(struct clk_init_data){
   2407			.name = "gcc_tsif_inactivity_timers_clk",
   2408			.parent_hws = (const struct clk_hw*[]){
   2409				&gcc_sleep_clk_src.clkr.hw,
   2410			},
   2411			.num_parents = 1,
   2412			.flags = CLK_SET_RATE_PARENT,
   2413			.ops = &clk_branch2_ops,
   2414		},
   2415	},
   2416};
   2417
   2418static struct clk_branch gcc_boot_rom_ahb_clk = {
   2419	.halt_reg = 0x38004,
   2420	.halt_check = BRANCH_HALT_VOTED,
   2421	.clkr = {
   2422		.enable_reg = 0x52004,
   2423		.enable_mask = BIT(10),
   2424		.hw.init = &(struct clk_init_data){
   2425			.name = "gcc_boot_rom_ahb_clk",
   2426			.parent_hws = (const struct clk_hw*[]){
   2427				&config_noc_clk_src.clkr.hw,
   2428			},
   2429			.num_parents = 1,
   2430			.flags = CLK_SET_RATE_PARENT,
   2431			.ops = &clk_branch2_ops,
   2432		},
   2433	},
   2434};
   2435
   2436static struct clk_branch gcc_bimc_gfx_clk = {
   2437	.halt_reg = 0x46018,
   2438	.clkr = {
   2439		.enable_reg = 0x46018,
   2440		.enable_mask = BIT(0),
   2441		.hw.init = &(struct clk_init_data){
   2442			.name = "gcc_bimc_gfx_clk",
   2443			.flags = CLK_SET_RATE_PARENT,
   2444			.ops = &clk_branch2_ops,
   2445		},
   2446	},
   2447};
   2448
   2449static struct clk_branch gcc_hmss_rbcpr_clk = {
   2450	.halt_reg = 0x4800c,
   2451	.clkr = {
   2452		.enable_reg = 0x4800c,
   2453		.enable_mask = BIT(0),
   2454		.hw.init = &(struct clk_init_data){
   2455			.name = "gcc_hmss_rbcpr_clk",
   2456			.parent_hws = (const struct clk_hw*[]){
   2457				&hmss_rbcpr_clk_src.clkr.hw,
   2458			},
   2459			.num_parents = 1,
   2460			.flags = CLK_SET_RATE_PARENT,
   2461			.ops = &clk_branch2_ops,
   2462		},
   2463	},
   2464};
   2465
   2466static struct clk_branch gcc_gp1_clk = {
   2467	.halt_reg = 0x64000,
   2468	.clkr = {
   2469		.enable_reg = 0x64000,
   2470		.enable_mask = BIT(0),
   2471		.hw.init = &(struct clk_init_data){
   2472			.name = "gcc_gp1_clk",
   2473			.parent_hws = (const struct clk_hw*[]){
   2474				&gp1_clk_src.clkr.hw,
   2475			},
   2476			.num_parents = 1,
   2477			.flags = CLK_SET_RATE_PARENT,
   2478			.ops = &clk_branch2_ops,
   2479		},
   2480	},
   2481};
   2482
   2483static struct clk_branch gcc_gp2_clk = {
   2484	.halt_reg = 0x65000,
   2485	.clkr = {
   2486		.enable_reg = 0x65000,
   2487		.enable_mask = BIT(0),
   2488		.hw.init = &(struct clk_init_data){
   2489			.name = "gcc_gp2_clk",
   2490			.parent_hws = (const struct clk_hw*[]){
   2491				&gp2_clk_src.clkr.hw,
   2492			},
   2493			.num_parents = 1,
   2494			.flags = CLK_SET_RATE_PARENT,
   2495			.ops = &clk_branch2_ops,
   2496		},
   2497	},
   2498};
   2499
   2500static struct clk_branch gcc_gp3_clk = {
   2501	.halt_reg = 0x66000,
   2502	.clkr = {
   2503		.enable_reg = 0x66000,
   2504		.enable_mask = BIT(0),
   2505		.hw.init = &(struct clk_init_data){
   2506			.name = "gcc_gp3_clk",
   2507			.parent_hws = (const struct clk_hw*[]){
   2508				&gp3_clk_src.clkr.hw,
   2509			},
   2510			.num_parents = 1,
   2511			.flags = CLK_SET_RATE_PARENT,
   2512			.ops = &clk_branch2_ops,
   2513		},
   2514	},
   2515};
   2516
   2517static struct clk_branch gcc_pcie_0_slv_axi_clk = {
   2518	.halt_reg = 0x6b008,
   2519	.clkr = {
   2520		.enable_reg = 0x6b008,
   2521		.enable_mask = BIT(0),
   2522		.hw.init = &(struct clk_init_data){
   2523			.name = "gcc_pcie_0_slv_axi_clk",
   2524			.parent_hws = (const struct clk_hw*[]){
   2525				&system_noc_clk_src.clkr.hw,
   2526			},
   2527			.num_parents = 1,
   2528			.flags = CLK_SET_RATE_PARENT,
   2529			.ops = &clk_branch2_ops,
   2530		},
   2531	},
   2532};
   2533
   2534static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
   2535	.halt_reg = 0x6b00c,
   2536	.clkr = {
   2537		.enable_reg = 0x6b00c,
   2538		.enable_mask = BIT(0),
   2539		.hw.init = &(struct clk_init_data){
   2540			.name = "gcc_pcie_0_mstr_axi_clk",
   2541			.parent_hws = (const struct clk_hw*[]){
   2542				&system_noc_clk_src.clkr.hw,
   2543			},
   2544			.num_parents = 1,
   2545			.flags = CLK_SET_RATE_PARENT,
   2546			.ops = &clk_branch2_ops,
   2547		},
   2548	},
   2549};
   2550
   2551static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
   2552	.halt_reg = 0x6b010,
   2553	.clkr = {
   2554		.enable_reg = 0x6b010,
   2555		.enable_mask = BIT(0),
   2556		.hw.init = &(struct clk_init_data){
   2557			.name = "gcc_pcie_0_cfg_ahb_clk",
   2558			.parent_hws = (const struct clk_hw*[]){
   2559				&config_noc_clk_src.clkr.hw,
   2560			},
   2561			.num_parents = 1,
   2562			.flags = CLK_SET_RATE_PARENT,
   2563			.ops = &clk_branch2_ops,
   2564		},
   2565	},
   2566};
   2567
   2568static struct clk_branch gcc_pcie_0_aux_clk = {
   2569	.halt_reg = 0x6b014,
   2570	.clkr = {
   2571		.enable_reg = 0x6b014,
   2572		.enable_mask = BIT(0),
   2573		.hw.init = &(struct clk_init_data){
   2574			.name = "gcc_pcie_0_aux_clk",
   2575			.parent_hws = (const struct clk_hw*[]){
   2576				&pcie_aux_clk_src.clkr.hw,
   2577			},
   2578			.num_parents = 1,
   2579			.flags = CLK_SET_RATE_PARENT,
   2580			.ops = &clk_branch2_ops,
   2581		},
   2582	},
   2583};
   2584
   2585static struct clk_branch gcc_pcie_0_pipe_clk = {
   2586	.halt_reg = 0x6b018,
   2587	.halt_check = BRANCH_HALT_SKIP,
   2588	.clkr = {
   2589		.enable_reg = 0x6b018,
   2590		.enable_mask = BIT(0),
   2591		.hw.init = &(struct clk_init_data){
   2592			.name = "gcc_pcie_0_pipe_clk",
   2593			.parent_data = &(const struct clk_parent_data){
   2594				.fw_name = "pcie_0_pipe_clk_src", .name = "pcie_0_pipe_clk_src",
   2595			},
   2596			.num_parents = 1,
   2597			.flags = CLK_SET_RATE_PARENT,
   2598			.ops = &clk_branch2_ops,
   2599		},
   2600	},
   2601};
   2602
   2603static struct clk_branch gcc_pcie_1_slv_axi_clk = {
   2604	.halt_reg = 0x6d008,
   2605	.clkr = {
   2606		.enable_reg = 0x6d008,
   2607		.enable_mask = BIT(0),
   2608		.hw.init = &(struct clk_init_data){
   2609			.name = "gcc_pcie_1_slv_axi_clk",
   2610			.parent_hws = (const struct clk_hw*[]){
   2611				&system_noc_clk_src.clkr.hw,
   2612			},
   2613			.num_parents = 1,
   2614			.flags = CLK_SET_RATE_PARENT,
   2615			.ops = &clk_branch2_ops,
   2616		},
   2617	},
   2618};
   2619
   2620static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
   2621	.halt_reg = 0x6d00c,
   2622	.clkr = {
   2623		.enable_reg = 0x6d00c,
   2624		.enable_mask = BIT(0),
   2625		.hw.init = &(struct clk_init_data){
   2626			.name = "gcc_pcie_1_mstr_axi_clk",
   2627			.parent_hws = (const struct clk_hw*[]){
   2628				&system_noc_clk_src.clkr.hw,
   2629			},
   2630			.num_parents = 1,
   2631			.flags = CLK_SET_RATE_PARENT,
   2632			.ops = &clk_branch2_ops,
   2633		},
   2634	},
   2635};
   2636
   2637static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
   2638	.halt_reg = 0x6d010,
   2639	.clkr = {
   2640		.enable_reg = 0x6d010,
   2641		.enable_mask = BIT(0),
   2642		.hw.init = &(struct clk_init_data){
   2643			.name = "gcc_pcie_1_cfg_ahb_clk",
   2644			.parent_hws = (const struct clk_hw*[]){
   2645				&config_noc_clk_src.clkr.hw,
   2646			},
   2647			.num_parents = 1,
   2648			.flags = CLK_SET_RATE_PARENT,
   2649			.ops = &clk_branch2_ops,
   2650		},
   2651	},
   2652};
   2653
   2654static struct clk_branch gcc_pcie_1_aux_clk = {
   2655	.halt_reg = 0x6d014,
   2656	.clkr = {
   2657		.enable_reg = 0x6d014,
   2658		.enable_mask = BIT(0),
   2659		.hw.init = &(struct clk_init_data){
   2660			.name = "gcc_pcie_1_aux_clk",
   2661			.parent_hws = (const struct clk_hw*[]){
   2662				&pcie_aux_clk_src.clkr.hw,
   2663			},
   2664			.num_parents = 1,
   2665			.flags = CLK_SET_RATE_PARENT,
   2666			.ops = &clk_branch2_ops,
   2667		},
   2668	},
   2669};
   2670
   2671static struct clk_branch gcc_pcie_1_pipe_clk = {
   2672	.halt_reg = 0x6d018,
   2673	.halt_check = BRANCH_HALT_SKIP,
   2674	.clkr = {
   2675		.enable_reg = 0x6d018,
   2676		.enable_mask = BIT(0),
   2677		.hw.init = &(struct clk_init_data){
   2678			.name = "gcc_pcie_1_pipe_clk",
   2679			.parent_data = &(const struct clk_parent_data){
   2680				.fw_name = "pcie_1_pipe_clk_src", .name = "pcie_1_pipe_clk_src",
   2681			},
   2682			.num_parents = 1,
   2683			.flags = CLK_SET_RATE_PARENT,
   2684			.ops = &clk_branch2_ops,
   2685		},
   2686	},
   2687};
   2688
   2689static struct clk_branch gcc_pcie_2_slv_axi_clk = {
   2690	.halt_reg = 0x6e008,
   2691	.clkr = {
   2692		.enable_reg = 0x6e008,
   2693		.enable_mask = BIT(0),
   2694		.hw.init = &(struct clk_init_data){
   2695			.name = "gcc_pcie_2_slv_axi_clk",
   2696			.parent_hws = (const struct clk_hw*[]){
   2697				&system_noc_clk_src.clkr.hw,
   2698			},
   2699			.num_parents = 1,
   2700			.flags = CLK_SET_RATE_PARENT,
   2701			.ops = &clk_branch2_ops,
   2702		},
   2703	},
   2704};
   2705
   2706static struct clk_branch gcc_pcie_2_mstr_axi_clk = {
   2707	.halt_reg = 0x6e00c,
   2708	.clkr = {
   2709		.enable_reg = 0x6e00c,
   2710		.enable_mask = BIT(0),
   2711		.hw.init = &(struct clk_init_data){
   2712			.name = "gcc_pcie_2_mstr_axi_clk",
   2713			.parent_hws = (const struct clk_hw*[]){
   2714				&system_noc_clk_src.clkr.hw,
   2715			},
   2716			.num_parents = 1,
   2717			.flags = CLK_SET_RATE_PARENT,
   2718			.ops = &clk_branch2_ops,
   2719		},
   2720	},
   2721};
   2722
   2723static struct clk_branch gcc_pcie_2_cfg_ahb_clk = {
   2724	.halt_reg = 0x6e010,
   2725	.clkr = {
   2726		.enable_reg = 0x6e010,
   2727		.enable_mask = BIT(0),
   2728		.hw.init = &(struct clk_init_data){
   2729			.name = "gcc_pcie_2_cfg_ahb_clk",
   2730			.parent_hws = (const struct clk_hw*[]){
   2731				&config_noc_clk_src.clkr.hw,
   2732			},
   2733			.num_parents = 1,
   2734			.flags = CLK_SET_RATE_PARENT,
   2735			.ops = &clk_branch2_ops,
   2736		},
   2737	},
   2738};
   2739
   2740static struct clk_branch gcc_pcie_2_aux_clk = {
   2741	.halt_reg = 0x6e014,
   2742	.clkr = {
   2743		.enable_reg = 0x6e014,
   2744		.enable_mask = BIT(0),
   2745		.hw.init = &(struct clk_init_data){
   2746			.name = "gcc_pcie_2_aux_clk",
   2747			.parent_hws = (const struct clk_hw*[]){
   2748				&pcie_aux_clk_src.clkr.hw,
   2749			},
   2750			.num_parents = 1,
   2751			.flags = CLK_SET_RATE_PARENT,
   2752			.ops = &clk_branch2_ops,
   2753		},
   2754	},
   2755};
   2756
   2757static struct clk_branch gcc_pcie_2_pipe_clk = {
   2758	.halt_reg = 0x6e018,
   2759	.halt_check = BRANCH_HALT_SKIP,
   2760	.clkr = {
   2761		.enable_reg = 0x6e018,
   2762		.enable_mask = BIT(0),
   2763		.hw.init = &(struct clk_init_data){
   2764			.name = "gcc_pcie_2_pipe_clk",
   2765			.parent_data = &(const struct clk_parent_data){
   2766				.fw_name = "pcie_2_pipe_clk_src", .name = "pcie_2_pipe_clk_src",
   2767			},
   2768			.num_parents = 1,
   2769			.flags = CLK_SET_RATE_PARENT,
   2770			.ops = &clk_branch2_ops,
   2771		},
   2772	},
   2773};
   2774
   2775static struct clk_branch gcc_pcie_phy_cfg_ahb_clk = {
   2776	.halt_reg = 0x6f004,
   2777	.clkr = {
   2778		.enable_reg = 0x6f004,
   2779		.enable_mask = BIT(0),
   2780		.hw.init = &(struct clk_init_data){
   2781			.name = "gcc_pcie_phy_cfg_ahb_clk",
   2782			.parent_hws = (const struct clk_hw*[]){
   2783				&config_noc_clk_src.clkr.hw,
   2784			},
   2785			.num_parents = 1,
   2786			.flags = CLK_SET_RATE_PARENT,
   2787			.ops = &clk_branch2_ops,
   2788		},
   2789	},
   2790};
   2791
   2792static struct clk_branch gcc_pcie_phy_aux_clk = {
   2793	.halt_reg = 0x6f008,
   2794	.clkr = {
   2795		.enable_reg = 0x6f008,
   2796		.enable_mask = BIT(0),
   2797		.hw.init = &(struct clk_init_data){
   2798			.name = "gcc_pcie_phy_aux_clk",
   2799			.parent_hws = (const struct clk_hw*[]){
   2800				&pcie_aux_clk_src.clkr.hw,
   2801			},
   2802			.num_parents = 1,
   2803			.flags = CLK_SET_RATE_PARENT,
   2804			.ops = &clk_branch2_ops,
   2805		},
   2806	},
   2807};
   2808
   2809static struct clk_branch gcc_ufs_axi_clk = {
   2810	.halt_reg = 0x75008,
   2811	.clkr = {
   2812		.enable_reg = 0x75008,
   2813		.enable_mask = BIT(0),
   2814		.hw.init = &(struct clk_init_data){
   2815			.name = "gcc_ufs_axi_clk",
   2816			.parent_hws = (const struct clk_hw*[]){
   2817				&ufs_axi_clk_src.clkr.hw,
   2818			},
   2819			.num_parents = 1,
   2820			.flags = CLK_SET_RATE_PARENT,
   2821			.ops = &clk_branch2_ops,
   2822		},
   2823	},
   2824};
   2825
   2826static struct clk_branch gcc_ufs_ahb_clk = {
   2827	.halt_reg = 0x7500c,
   2828	.clkr = {
   2829		.enable_reg = 0x7500c,
   2830		.enable_mask = BIT(0),
   2831		.hw.init = &(struct clk_init_data){
   2832			.name = "gcc_ufs_ahb_clk",
   2833			.parent_hws = (const struct clk_hw*[]){
   2834				&config_noc_clk_src.clkr.hw,
   2835			},
   2836			.num_parents = 1,
   2837			.flags = CLK_SET_RATE_PARENT,
   2838			.ops = &clk_branch2_ops,
   2839		},
   2840	},
   2841};
   2842
   2843static struct clk_fixed_factor ufs_tx_cfg_clk_src = {
   2844	.mult = 1,
   2845	.div = 16,
   2846	.hw.init = &(struct clk_init_data){
   2847		.name = "ufs_tx_cfg_clk_src",
   2848		.parent_hws = (const struct clk_hw*[]){
   2849			&ufs_axi_clk_src.clkr.hw,
   2850		},
   2851		.num_parents = 1,
   2852		.flags = CLK_SET_RATE_PARENT,
   2853		.ops = &clk_fixed_factor_ops,
   2854	},
   2855};
   2856
   2857static struct clk_branch gcc_ufs_tx_cfg_clk = {
   2858	.halt_reg = 0x75010,
   2859	.clkr = {
   2860		.enable_reg = 0x75010,
   2861		.enable_mask = BIT(0),
   2862		.hw.init = &(struct clk_init_data){
   2863			.name = "gcc_ufs_tx_cfg_clk",
   2864			.parent_hws = (const struct clk_hw*[]){
   2865				&ufs_tx_cfg_clk_src.hw,
   2866			},
   2867			.num_parents = 1,
   2868			.flags = CLK_SET_RATE_PARENT,
   2869			.ops = &clk_branch2_ops,
   2870		},
   2871	},
   2872};
   2873
   2874static struct clk_fixed_factor ufs_rx_cfg_clk_src = {
   2875	.mult = 1,
   2876	.div = 16,
   2877	.hw.init = &(struct clk_init_data){
   2878		.name = "ufs_rx_cfg_clk_src",
   2879		.parent_hws = (const struct clk_hw*[]){
   2880			&ufs_axi_clk_src.clkr.hw,
   2881		},
   2882		.num_parents = 1,
   2883		.flags = CLK_SET_RATE_PARENT,
   2884		.ops = &clk_fixed_factor_ops,
   2885	},
   2886};
   2887
   2888static struct clk_branch gcc_hlos1_vote_lpass_core_smmu_clk = {
   2889	.halt_reg = 0x7d010,
   2890	.halt_check = BRANCH_HALT_VOTED,
   2891	.clkr = {
   2892		.enable_reg = 0x7d010,
   2893		.enable_mask = BIT(0),
   2894		.hw.init = &(struct clk_init_data){
   2895			.name = "hlos1_vote_lpass_core_smmu_clk",
   2896			.ops = &clk_branch2_ops,
   2897		},
   2898	},
   2899};
   2900
   2901static struct clk_branch gcc_hlos1_vote_lpass_adsp_smmu_clk = {
   2902	.halt_reg = 0x7d014,
   2903	.halt_check = BRANCH_HALT_VOTED,
   2904	.clkr = {
   2905		.enable_reg = 0x7d014,
   2906		.enable_mask = BIT(0),
   2907		.hw.init = &(struct clk_init_data){
   2908			.name = "hlos1_vote_lpass_adsp_smmu_clk",
   2909			.ops = &clk_branch2_ops,
   2910		},
   2911	},
   2912};
   2913
   2914static struct clk_branch gcc_ufs_rx_cfg_clk = {
   2915	.halt_reg = 0x75014,
   2916	.clkr = {
   2917		.enable_reg = 0x75014,
   2918		.enable_mask = BIT(0),
   2919		.hw.init = &(struct clk_init_data){
   2920			.name = "gcc_ufs_rx_cfg_clk",
   2921			.parent_hws = (const struct clk_hw*[]){
   2922				&ufs_rx_cfg_clk_src.hw,
   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_ufs_tx_symbol_0_clk = {
   2932	.halt_reg = 0x75018,
   2933	.halt_check = BRANCH_HALT_SKIP,
   2934	.clkr = {
   2935		.enable_reg = 0x75018,
   2936		.enable_mask = BIT(0),
   2937		.hw.init = &(struct clk_init_data){
   2938			.name = "gcc_ufs_tx_symbol_0_clk",
   2939			.parent_data = &(const struct clk_parent_data){
   2940				.fw_name = "ufs_tx_symbol_0_clk_src", .name = "ufs_tx_symbol_0_clk_src",
   2941			},
   2942			.num_parents = 1,
   2943			.flags = CLK_SET_RATE_PARENT,
   2944			.ops = &clk_branch2_ops,
   2945		},
   2946	},
   2947};
   2948
   2949static struct clk_branch gcc_ufs_rx_symbol_0_clk = {
   2950	.halt_reg = 0x7501c,
   2951	.halt_check = BRANCH_HALT_SKIP,
   2952	.clkr = {
   2953		.enable_reg = 0x7501c,
   2954		.enable_mask = BIT(0),
   2955		.hw.init = &(struct clk_init_data){
   2956			.name = "gcc_ufs_rx_symbol_0_clk",
   2957			.parent_data = &(const struct clk_parent_data){
   2958				.fw_name = "ufs_rx_symbol_0_clk_src", .name = "ufs_rx_symbol_0_clk_src",
   2959			},
   2960			.num_parents = 1,
   2961			.flags = CLK_SET_RATE_PARENT,
   2962			.ops = &clk_branch2_ops,
   2963		},
   2964	},
   2965};
   2966
   2967static struct clk_branch gcc_ufs_rx_symbol_1_clk = {
   2968	.halt_reg = 0x75020,
   2969	.halt_check = BRANCH_HALT_SKIP,
   2970	.clkr = {
   2971		.enable_reg = 0x75020,
   2972		.enable_mask = BIT(0),
   2973		.hw.init = &(struct clk_init_data){
   2974			.name = "gcc_ufs_rx_symbol_1_clk",
   2975			.parent_data = &(const struct clk_parent_data){
   2976				.fw_name = "ufs_rx_symbol_1_clk_src", .name = "ufs_rx_symbol_1_clk_src",
   2977			},
   2978			.num_parents = 1,
   2979			.flags = CLK_SET_RATE_PARENT,
   2980			.ops = &clk_branch2_ops,
   2981		},
   2982	},
   2983};
   2984
   2985static struct clk_fixed_factor ufs_ice_core_postdiv_clk_src = {
   2986	.mult = 1,
   2987	.div = 2,
   2988	.hw.init = &(struct clk_init_data){
   2989		.name = "ufs_ice_core_postdiv_clk_src",
   2990		.parent_hws = (const struct clk_hw*[]){
   2991			&ufs_ice_core_clk_src.clkr.hw,
   2992		},
   2993		.num_parents = 1,
   2994		.flags = CLK_SET_RATE_PARENT,
   2995		.ops = &clk_fixed_factor_ops,
   2996	},
   2997};
   2998
   2999static struct clk_branch gcc_ufs_unipro_core_clk = {
   3000	.halt_reg = 0x7600c,
   3001	.clkr = {
   3002		.enable_reg = 0x7600c,
   3003		.enable_mask = BIT(0),
   3004		.hw.init = &(struct clk_init_data){
   3005			.name = "gcc_ufs_unipro_core_clk",
   3006			.parent_hws = (const struct clk_hw*[]){
   3007				&ufs_ice_core_postdiv_clk_src.hw,
   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_ufs_ice_core_clk = {
   3017	.halt_reg = 0x76010,
   3018	.clkr = {
   3019		.enable_reg = 0x76010,
   3020		.enable_mask = BIT(0),
   3021		.hw.init = &(struct clk_init_data){
   3022			.name = "gcc_ufs_ice_core_clk",
   3023			.parent_hws = (const struct clk_hw*[]){
   3024				&ufs_ice_core_clk_src.clkr.hw,
   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_ufs_sys_clk_core_clk = {
   3034	.halt_check = BRANCH_HALT_DELAY,
   3035	.clkr = {
   3036		.enable_reg = 0x76030,
   3037		.enable_mask = BIT(0),
   3038		.hw.init = &(struct clk_init_data){
   3039			.name = "gcc_ufs_sys_clk_core_clk",
   3040			.ops = &clk_branch2_ops,
   3041		},
   3042	},
   3043};
   3044
   3045static struct clk_branch gcc_ufs_tx_symbol_clk_core_clk = {
   3046	.halt_check = BRANCH_HALT_DELAY,
   3047	.clkr = {
   3048		.enable_reg = 0x76034,
   3049		.enable_mask = BIT(0),
   3050		.hw.init = &(struct clk_init_data){
   3051			.name = "gcc_ufs_tx_symbol_clk_core_clk",
   3052			.ops = &clk_branch2_ops,
   3053		},
   3054	},
   3055};
   3056
   3057static struct clk_branch gcc_aggre0_snoc_axi_clk = {
   3058	.halt_reg = 0x81008,
   3059	.clkr = {
   3060		.enable_reg = 0x81008,
   3061		.enable_mask = BIT(0),
   3062		.hw.init = &(struct clk_init_data){
   3063			.name = "gcc_aggre0_snoc_axi_clk",
   3064			.parent_hws = (const struct clk_hw*[]){
   3065				&system_noc_clk_src.clkr.hw,
   3066			},
   3067			.num_parents = 1,
   3068			.flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
   3069			.ops = &clk_branch2_ops,
   3070		},
   3071	},
   3072};
   3073
   3074static struct clk_branch gcc_aggre0_cnoc_ahb_clk = {
   3075	.halt_reg = 0x8100c,
   3076	.clkr = {
   3077		.enable_reg = 0x8100c,
   3078		.enable_mask = BIT(0),
   3079		.hw.init = &(struct clk_init_data){
   3080			.name = "gcc_aggre0_cnoc_ahb_clk",
   3081			.parent_hws = (const struct clk_hw*[]){
   3082				&config_noc_clk_src.clkr.hw,
   3083			},
   3084			.num_parents = 1,
   3085			.flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
   3086			.ops = &clk_branch2_ops,
   3087		},
   3088	},
   3089};
   3090
   3091static struct clk_branch gcc_smmu_aggre0_axi_clk = {
   3092	.halt_reg = 0x81014,
   3093	.clkr = {
   3094		.enable_reg = 0x81014,
   3095		.enable_mask = BIT(0),
   3096		.hw.init = &(struct clk_init_data){
   3097			.name = "gcc_smmu_aggre0_axi_clk",
   3098			.parent_hws = (const struct clk_hw*[]){
   3099				&system_noc_clk_src.clkr.hw,
   3100			},
   3101			.num_parents = 1,
   3102			.flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
   3103			.ops = &clk_branch2_ops,
   3104		},
   3105	},
   3106};
   3107
   3108static struct clk_branch gcc_smmu_aggre0_ahb_clk = {
   3109	.halt_reg = 0x81018,
   3110	.clkr = {
   3111		.enable_reg = 0x81018,
   3112		.enable_mask = BIT(0),
   3113		.hw.init = &(struct clk_init_data){
   3114			.name = "gcc_smmu_aggre0_ahb_clk",
   3115			.parent_hws = (const struct clk_hw*[]){
   3116				&config_noc_clk_src.clkr.hw,
   3117			},
   3118			.num_parents = 1,
   3119			.flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
   3120			.ops = &clk_branch2_ops,
   3121		},
   3122	},
   3123};
   3124
   3125static struct clk_branch gcc_aggre2_ufs_axi_clk = {
   3126	.halt_reg = 0x83014,
   3127	.clkr = {
   3128		.enable_reg = 0x83014,
   3129		.enable_mask = BIT(0),
   3130		.hw.init = &(struct clk_init_data){
   3131			.name = "gcc_aggre2_ufs_axi_clk",
   3132			.parent_hws = (const struct clk_hw*[]){
   3133				&ufs_axi_clk_src.clkr.hw,
   3134			},
   3135			.num_parents = 1,
   3136			.flags = CLK_SET_RATE_PARENT,
   3137			.ops = &clk_branch2_ops,
   3138		},
   3139	},
   3140};
   3141
   3142static struct clk_branch gcc_aggre2_usb3_axi_clk = {
   3143	.halt_reg = 0x83018,
   3144	.clkr = {
   3145		.enable_reg = 0x83018,
   3146		.enable_mask = BIT(0),
   3147		.hw.init = &(struct clk_init_data){
   3148			.name = "gcc_aggre2_usb3_axi_clk",
   3149			.parent_hws = (const struct clk_hw*[]){
   3150				&usb30_master_clk_src.clkr.hw,
   3151			},
   3152			.num_parents = 1,
   3153			.flags = CLK_SET_RATE_PARENT,
   3154			.ops = &clk_branch2_ops,
   3155		},
   3156	},
   3157};
   3158
   3159static struct clk_branch gcc_dcc_ahb_clk = {
   3160	.halt_reg = 0x84004,
   3161	.clkr = {
   3162		.enable_reg = 0x84004,
   3163		.enable_mask = BIT(0),
   3164		.hw.init = &(struct clk_init_data){
   3165			.name = "gcc_dcc_ahb_clk",
   3166			.parent_hws = (const struct clk_hw*[]){
   3167				&config_noc_clk_src.clkr.hw,
   3168			},
   3169			.num_parents = 1,
   3170			.ops = &clk_branch2_ops,
   3171		},
   3172	},
   3173};
   3174
   3175static struct clk_branch gcc_aggre0_noc_mpu_cfg_ahb_clk = {
   3176	.halt_reg = 0x85000,
   3177	.clkr = {
   3178		.enable_reg = 0x85000,
   3179		.enable_mask = BIT(0),
   3180		.hw.init = &(struct clk_init_data){
   3181			.name = "gcc_aggre0_noc_mpu_cfg_ahb_clk",
   3182			.parent_hws = (const struct clk_hw*[]){
   3183				&config_noc_clk_src.clkr.hw,
   3184			},
   3185			.num_parents = 1,
   3186			.ops = &clk_branch2_ops,
   3187		},
   3188	},
   3189};
   3190
   3191static struct clk_branch gcc_qspi_ahb_clk = {
   3192	.halt_reg = 0x8b004,
   3193	.clkr = {
   3194		.enable_reg = 0x8b004,
   3195		.enable_mask = BIT(0),
   3196		.hw.init = &(struct clk_init_data){
   3197			.name = "gcc_qspi_ahb_clk",
   3198			.parent_hws = (const struct clk_hw*[]){
   3199				&periph_noc_clk_src.clkr.hw,
   3200			},
   3201			.num_parents = 1,
   3202			.flags = CLK_SET_RATE_PARENT,
   3203			.ops = &clk_branch2_ops,
   3204		},
   3205	},
   3206};
   3207
   3208static struct clk_branch gcc_qspi_ser_clk = {
   3209	.halt_reg = 0x8b008,
   3210	.clkr = {
   3211		.enable_reg = 0x8b008,
   3212		.enable_mask = BIT(0),
   3213		.hw.init = &(struct clk_init_data){
   3214			.name = "gcc_qspi_ser_clk",
   3215			.parent_hws = (const struct clk_hw*[]){
   3216				&qspi_ser_clk_src.clkr.hw,
   3217			},
   3218			.num_parents = 1,
   3219			.flags = CLK_SET_RATE_PARENT,
   3220			.ops = &clk_branch2_ops,
   3221		},
   3222	},
   3223};
   3224
   3225static struct clk_branch gcc_usb3_clkref_clk = {
   3226	.halt_reg = 0x8800C,
   3227	.clkr = {
   3228		.enable_reg = 0x8800C,
   3229		.enable_mask = BIT(0),
   3230		.hw.init = &(struct clk_init_data){
   3231			.name = "gcc_usb3_clkref_clk",
   3232			.parent_data = &(const struct clk_parent_data){
   3233				.fw_name = "cxo2",
   3234				.name = "xo",
   3235			},
   3236			.num_parents = 1,
   3237			.ops = &clk_branch2_ops,
   3238		},
   3239	},
   3240};
   3241
   3242static struct clk_branch gcc_hdmi_clkref_clk = {
   3243	.halt_reg = 0x88000,
   3244	.clkr = {
   3245		.enable_reg = 0x88000,
   3246		.enable_mask = BIT(0),
   3247		.hw.init = &(struct clk_init_data){
   3248			.name = "gcc_hdmi_clkref_clk",
   3249			.parent_data = &(const struct clk_parent_data){
   3250				.fw_name = "cxo2",
   3251				.name = "xo",
   3252			},
   3253			.num_parents = 1,
   3254			.ops = &clk_branch2_ops,
   3255		},
   3256	},
   3257};
   3258
   3259static struct clk_branch gcc_edp_clkref_clk = {
   3260	.halt_reg = 0x88004,
   3261	.clkr = {
   3262		.enable_reg = 0x88004,
   3263		.enable_mask = BIT(0),
   3264		.hw.init = &(struct clk_init_data){
   3265			.name = "gcc_edp_clkref_clk",
   3266			.parent_data = &(const struct clk_parent_data){
   3267				.fw_name = "cxo2",
   3268				.name = "xo",
   3269			},
   3270			.num_parents = 1,
   3271			.ops = &clk_branch2_ops,
   3272		},
   3273	},
   3274};
   3275
   3276static struct clk_branch gcc_ufs_clkref_clk = {
   3277	.halt_reg = 0x88008,
   3278	.clkr = {
   3279		.enable_reg = 0x88008,
   3280		.enable_mask = BIT(0),
   3281		.hw.init = &(struct clk_init_data){
   3282			.name = "gcc_ufs_clkref_clk",
   3283			.parent_data = &(const struct clk_parent_data){
   3284				.fw_name = "cxo2",
   3285				.name = "xo",
   3286			},
   3287			.num_parents = 1,
   3288			.ops = &clk_branch2_ops,
   3289		},
   3290	},
   3291};
   3292
   3293static struct clk_branch gcc_pcie_clkref_clk = {
   3294	.halt_reg = 0x88010,
   3295	.clkr = {
   3296		.enable_reg = 0x88010,
   3297		.enable_mask = BIT(0),
   3298		.hw.init = &(struct clk_init_data){
   3299			.name = "gcc_pcie_clkref_clk",
   3300			.parent_data = &(const struct clk_parent_data){
   3301				.fw_name = "cxo2",
   3302				.name = "xo",
   3303			},
   3304			.num_parents = 1,
   3305			.ops = &clk_branch2_ops,
   3306		},
   3307	},
   3308};
   3309
   3310static struct clk_branch gcc_rx2_usb2_clkref_clk = {
   3311	.halt_reg = 0x88014,
   3312	.clkr = {
   3313		.enable_reg = 0x88014,
   3314		.enable_mask = BIT(0),
   3315		.hw.init = &(struct clk_init_data){
   3316			.name = "gcc_rx2_usb2_clkref_clk",
   3317			.parent_data = &(const struct clk_parent_data){
   3318				.fw_name = "cxo2",
   3319				.name = "xo",
   3320			},
   3321			.num_parents = 1,
   3322			.ops = &clk_branch2_ops,
   3323		},
   3324	},
   3325};
   3326
   3327static struct clk_branch gcc_rx1_usb2_clkref_clk = {
   3328	.halt_reg = 0x88018,
   3329	.clkr = {
   3330		.enable_reg = 0x88018,
   3331		.enable_mask = BIT(0),
   3332		.hw.init = &(struct clk_init_data){
   3333			.name = "gcc_rx1_usb2_clkref_clk",
   3334			.parent_data = &(const struct clk_parent_data){
   3335				.fw_name = "cxo2",
   3336				.name = "xo",
   3337			},
   3338			.num_parents = 1,
   3339			.ops = &clk_branch2_ops,
   3340		},
   3341	},
   3342};
   3343
   3344static struct clk_branch gcc_mss_cfg_ahb_clk = {
   3345	.halt_reg = 0x8a000,
   3346	.clkr = {
   3347		.enable_reg = 0x8a000,
   3348		.enable_mask = BIT(0),
   3349		.hw.init = &(struct clk_init_data){
   3350			.name = "gcc_mss_cfg_ahb_clk",
   3351			.parent_hws = (const struct clk_hw*[]){
   3352				&config_noc_clk_src.clkr.hw,
   3353			},
   3354			.num_parents = 1,
   3355			.ops = &clk_branch2_ops,
   3356		},
   3357	},
   3358};
   3359
   3360static struct clk_branch gcc_mss_mnoc_bimc_axi_clk = {
   3361	.halt_reg = 0x8a004,
   3362	.clkr = {
   3363		.enable_reg = 0x8a004,
   3364		.enable_mask = BIT(0),
   3365		.hw.init = &(struct clk_init_data){
   3366			.name = "gcc_mss_mnoc_bimc_axi_clk",
   3367			.parent_hws = (const struct clk_hw*[]){
   3368				&system_noc_clk_src.clkr.hw,
   3369			},
   3370			.num_parents = 1,
   3371			.ops = &clk_branch2_ops,
   3372		},
   3373	},
   3374};
   3375
   3376static struct clk_branch gcc_mss_snoc_axi_clk = {
   3377	.halt_reg = 0x8a024,
   3378	.clkr = {
   3379		.enable_reg = 0x8a024,
   3380		.enable_mask = BIT(0),
   3381		.hw.init = &(struct clk_init_data){
   3382			.name = "gcc_mss_snoc_axi_clk",
   3383			.parent_hws = (const struct clk_hw*[]){
   3384				&system_noc_clk_src.clkr.hw,
   3385			},
   3386			.num_parents = 1,
   3387			.ops = &clk_branch2_ops,
   3388		},
   3389	},
   3390};
   3391
   3392static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
   3393	.halt_reg = 0x8a028,
   3394	.clkr = {
   3395		.enable_reg = 0x8a028,
   3396		.enable_mask = BIT(0),
   3397		.hw.init = &(struct clk_init_data){
   3398			.name = "gcc_mss_q6_bimc_axi_clk",
   3399			.parent_hws = (const struct clk_hw*[]){
   3400				&system_noc_clk_src.clkr.hw,
   3401			},
   3402			.num_parents = 1,
   3403			.ops = &clk_branch2_ops,
   3404		},
   3405	},
   3406};
   3407
   3408static struct clk_hw *gcc_msm8996_hws[] = {
   3409	&xo.hw,
   3410	&gpll0_early_div.hw,
   3411	&ufs_tx_cfg_clk_src.hw,
   3412	&ufs_rx_cfg_clk_src.hw,
   3413	&ufs_ice_core_postdiv_clk_src.hw,
   3414};
   3415
   3416static struct gdsc aggre0_noc_gdsc = {
   3417	.gdscr = 0x81004,
   3418	.gds_hw_ctrl = 0x81028,
   3419	.pd = {
   3420		.name = "aggre0_noc",
   3421	},
   3422	.pwrsts = PWRSTS_OFF_ON,
   3423	.flags = VOTABLE | ALWAYS_ON,
   3424};
   3425
   3426static struct gdsc hlos1_vote_aggre0_noc_gdsc = {
   3427	.gdscr = 0x7d024,
   3428	.pd = {
   3429		.name = "hlos1_vote_aggre0_noc",
   3430	},
   3431	.pwrsts = PWRSTS_OFF_ON,
   3432	.flags = VOTABLE,
   3433};
   3434
   3435static struct gdsc hlos1_vote_lpass_adsp_gdsc = {
   3436	.gdscr = 0x7d034,
   3437	.pd = {
   3438		.name = "hlos1_vote_lpass_adsp",
   3439	},
   3440	.pwrsts = PWRSTS_OFF_ON,
   3441	.flags = VOTABLE,
   3442};
   3443
   3444static struct gdsc hlos1_vote_lpass_core_gdsc = {
   3445	.gdscr = 0x7d038,
   3446	.pd = {
   3447		.name = "hlos1_vote_lpass_core",
   3448	},
   3449	.pwrsts = PWRSTS_OFF_ON,
   3450	.flags = VOTABLE,
   3451};
   3452
   3453static struct gdsc usb30_gdsc = {
   3454	.gdscr = 0xf004,
   3455	.pd = {
   3456		.name = "usb30",
   3457	},
   3458	.pwrsts = PWRSTS_OFF_ON,
   3459};
   3460
   3461static struct gdsc pcie0_gdsc = {
   3462	.gdscr = 0x6b004,
   3463	.pd = {
   3464		.name = "pcie0",
   3465	},
   3466	.pwrsts = PWRSTS_OFF_ON,
   3467};
   3468
   3469static struct gdsc pcie1_gdsc = {
   3470	.gdscr = 0x6d004,
   3471	.pd = {
   3472		.name = "pcie1",
   3473	},
   3474	.pwrsts = PWRSTS_OFF_ON,
   3475};
   3476
   3477static struct gdsc pcie2_gdsc = {
   3478	.gdscr = 0x6e004,
   3479	.pd = {
   3480		.name = "pcie2",
   3481	},
   3482	.pwrsts = PWRSTS_OFF_ON,
   3483};
   3484
   3485static struct gdsc ufs_gdsc = {
   3486	.gdscr = 0x75004,
   3487	.pd = {
   3488		.name = "ufs",
   3489	},
   3490	.pwrsts = PWRSTS_OFF_ON,
   3491};
   3492
   3493static struct clk_regmap *gcc_msm8996_clocks[] = {
   3494	[GPLL0_EARLY] = &gpll0_early.clkr,
   3495	[GPLL0] = &gpll0.clkr,
   3496	[GPLL4_EARLY] = &gpll4_early.clkr,
   3497	[GPLL4] = &gpll4.clkr,
   3498	[SYSTEM_NOC_CLK_SRC] = &system_noc_clk_src.clkr,
   3499	[CONFIG_NOC_CLK_SRC] = &config_noc_clk_src.clkr,
   3500	[PERIPH_NOC_CLK_SRC] = &periph_noc_clk_src.clkr,
   3501	[USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
   3502	[USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
   3503	[USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr,
   3504	[USB20_MASTER_CLK_SRC] = &usb20_master_clk_src.clkr,
   3505	[USB20_MOCK_UTMI_CLK_SRC] = &usb20_mock_utmi_clk_src.clkr,
   3506	[SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
   3507	[SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
   3508	[SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
   3509	[SDCC3_APPS_CLK_SRC] = &sdcc3_apps_clk_src.clkr,
   3510	[SDCC4_APPS_CLK_SRC] = &sdcc4_apps_clk_src.clkr,
   3511	[BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
   3512	[BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
   3513	[BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
   3514	[BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
   3515	[BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
   3516	[BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
   3517	[BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
   3518	[BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
   3519	[BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
   3520	[BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
   3521	[BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
   3522	[BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
   3523	[BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
   3524	[BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
   3525	[BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
   3526	[BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
   3527	[BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
   3528	[BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
   3529	[BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
   3530	[BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
   3531	[BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
   3532	[BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
   3533	[BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
   3534	[BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
   3535	[BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
   3536	[BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
   3537	[BLSP2_UART3_APPS_CLK_SRC] = &blsp2_uart3_apps_clk_src.clkr,
   3538	[BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
   3539	[BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
   3540	[BLSP2_UART4_APPS_CLK_SRC] = &blsp2_uart4_apps_clk_src.clkr,
   3541	[BLSP2_QUP5_SPI_APPS_CLK_SRC] = &blsp2_qup5_spi_apps_clk_src.clkr,
   3542	[BLSP2_QUP5_I2C_APPS_CLK_SRC] = &blsp2_qup5_i2c_apps_clk_src.clkr,
   3543	[BLSP2_UART5_APPS_CLK_SRC] = &blsp2_uart5_apps_clk_src.clkr,
   3544	[BLSP2_QUP6_SPI_APPS_CLK_SRC] = &blsp2_qup6_spi_apps_clk_src.clkr,
   3545	[BLSP2_QUP6_I2C_APPS_CLK_SRC] = &blsp2_qup6_i2c_apps_clk_src.clkr,
   3546	[BLSP2_UART6_APPS_CLK_SRC] = &blsp2_uart6_apps_clk_src.clkr,
   3547	[PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
   3548	[TSIF_REF_CLK_SRC] = &tsif_ref_clk_src.clkr,
   3549	[GCC_SLEEP_CLK_SRC] = &gcc_sleep_clk_src.clkr,
   3550	[HMSS_RBCPR_CLK_SRC] = &hmss_rbcpr_clk_src.clkr,
   3551	[HMSS_GPLL0_CLK_SRC] = &hmss_gpll0_clk_src.clkr,
   3552	[GP1_CLK_SRC] = &gp1_clk_src.clkr,
   3553	[GP2_CLK_SRC] = &gp2_clk_src.clkr,
   3554	[GP3_CLK_SRC] = &gp3_clk_src.clkr,
   3555	[PCIE_AUX_CLK_SRC] = &pcie_aux_clk_src.clkr,
   3556	[UFS_AXI_CLK_SRC] = &ufs_axi_clk_src.clkr,
   3557	[UFS_ICE_CORE_CLK_SRC] = &ufs_ice_core_clk_src.clkr,
   3558	[QSPI_SER_CLK_SRC] = &qspi_ser_clk_src.clkr,
   3559	[GCC_SYS_NOC_USB3_AXI_CLK] = &gcc_sys_noc_usb3_axi_clk.clkr,
   3560	[GCC_SYS_NOC_UFS_AXI_CLK] = &gcc_sys_noc_ufs_axi_clk.clkr,
   3561	[GCC_PERIPH_NOC_USB20_AHB_CLK] = &gcc_periph_noc_usb20_ahb_clk.clkr,
   3562	[GCC_MMSS_NOC_CFG_AHB_CLK] = &gcc_mmss_noc_cfg_ahb_clk.clkr,
   3563	[GCC_MMSS_BIMC_GFX_CLK] = &gcc_mmss_bimc_gfx_clk.clkr,
   3564	[GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
   3565	[GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,
   3566	[GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
   3567	[GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr,
   3568	[GCC_USB3_PHY_PIPE_CLK] = &gcc_usb3_phy_pipe_clk.clkr,
   3569	[GCC_USB20_MASTER_CLK] = &gcc_usb20_master_clk.clkr,
   3570	[GCC_USB20_SLEEP_CLK] = &gcc_usb20_sleep_clk.clkr,
   3571	[GCC_USB20_MOCK_UTMI_CLK] = &gcc_usb20_mock_utmi_clk.clkr,
   3572	[GCC_USB_PHY_CFG_AHB2PHY_CLK] = &gcc_usb_phy_cfg_ahb2phy_clk.clkr,
   3573	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
   3574	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
   3575	[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
   3576	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
   3577	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
   3578	[GCC_SDCC3_APPS_CLK] = &gcc_sdcc3_apps_clk.clkr,
   3579	[GCC_SDCC3_AHB_CLK] = &gcc_sdcc3_ahb_clk.clkr,
   3580	[GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
   3581	[GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
   3582	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
   3583	[GCC_BLSP1_SLEEP_CLK] = &gcc_blsp1_sleep_clk.clkr,
   3584	[GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
   3585	[GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
   3586	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
   3587	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
   3588	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
   3589	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
   3590	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
   3591	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
   3592	[GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
   3593	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
   3594	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
   3595	[GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
   3596	[GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
   3597	[GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
   3598	[GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
   3599	[GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
   3600	[GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
   3601	[GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
   3602	[GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
   3603	[GCC_BLSP2_SLEEP_CLK] = &gcc_blsp2_sleep_clk.clkr,
   3604	[GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
   3605	[GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
   3606	[GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
   3607	[GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
   3608	[GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
   3609	[GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
   3610	[GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
   3611	[GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
   3612	[GCC_BLSP2_UART3_APPS_CLK] = &gcc_blsp2_uart3_apps_clk.clkr,
   3613	[GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
   3614	[GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
   3615	[GCC_BLSP2_UART4_APPS_CLK] = &gcc_blsp2_uart4_apps_clk.clkr,
   3616	[GCC_BLSP2_QUP5_SPI_APPS_CLK] = &gcc_blsp2_qup5_spi_apps_clk.clkr,
   3617	[GCC_BLSP2_QUP5_I2C_APPS_CLK] = &gcc_blsp2_qup5_i2c_apps_clk.clkr,
   3618	[GCC_BLSP2_UART5_APPS_CLK] = &gcc_blsp2_uart5_apps_clk.clkr,
   3619	[GCC_BLSP2_QUP6_SPI_APPS_CLK] = &gcc_blsp2_qup6_spi_apps_clk.clkr,
   3620	[GCC_BLSP2_QUP6_I2C_APPS_CLK] = &gcc_blsp2_qup6_i2c_apps_clk.clkr,
   3621	[GCC_BLSP2_UART6_APPS_CLK] = &gcc_blsp2_uart6_apps_clk.clkr,
   3622	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
   3623	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
   3624	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
   3625	[GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr,
   3626	[GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
   3627	[GCC_TSIF_INACTIVITY_TIMERS_CLK] = &gcc_tsif_inactivity_timers_clk.clkr,
   3628	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
   3629	[GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
   3630	[GCC_HMSS_RBCPR_CLK] = &gcc_hmss_rbcpr_clk.clkr,
   3631	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
   3632	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
   3633	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
   3634	[GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
   3635	[GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
   3636	[GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
   3637	[GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
   3638	[GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
   3639	[GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
   3640	[GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
   3641	[GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
   3642	[GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
   3643	[GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
   3644	[GCC_PCIE_2_SLV_AXI_CLK] = &gcc_pcie_2_slv_axi_clk.clkr,
   3645	[GCC_PCIE_2_MSTR_AXI_CLK] = &gcc_pcie_2_mstr_axi_clk.clkr,
   3646	[GCC_PCIE_2_CFG_AHB_CLK] = &gcc_pcie_2_cfg_ahb_clk.clkr,
   3647	[GCC_PCIE_2_AUX_CLK] = &gcc_pcie_2_aux_clk.clkr,
   3648	[GCC_PCIE_2_PIPE_CLK] = &gcc_pcie_2_pipe_clk.clkr,
   3649	[GCC_PCIE_PHY_CFG_AHB_CLK] = &gcc_pcie_phy_cfg_ahb_clk.clkr,
   3650	[GCC_PCIE_PHY_AUX_CLK] = &gcc_pcie_phy_aux_clk.clkr,
   3651	[GCC_UFS_AXI_CLK] = &gcc_ufs_axi_clk.clkr,
   3652	[GCC_UFS_AHB_CLK] = &gcc_ufs_ahb_clk.clkr,
   3653	[GCC_UFS_TX_CFG_CLK] = &gcc_ufs_tx_cfg_clk.clkr,
   3654	[GCC_UFS_RX_CFG_CLK] = &gcc_ufs_rx_cfg_clk.clkr,
   3655	[GCC_HLOS1_VOTE_LPASS_CORE_SMMU_CLK] = &gcc_hlos1_vote_lpass_core_smmu_clk.clkr,
   3656	[GCC_HLOS1_VOTE_LPASS_ADSP_SMMU_CLK] = &gcc_hlos1_vote_lpass_adsp_smmu_clk.clkr,
   3657	[GCC_UFS_TX_SYMBOL_0_CLK] = &gcc_ufs_tx_symbol_0_clk.clkr,
   3658	[GCC_UFS_RX_SYMBOL_0_CLK] = &gcc_ufs_rx_symbol_0_clk.clkr,
   3659	[GCC_UFS_RX_SYMBOL_1_CLK] = &gcc_ufs_rx_symbol_1_clk.clkr,
   3660	[GCC_UFS_UNIPRO_CORE_CLK] = &gcc_ufs_unipro_core_clk.clkr,
   3661	[GCC_UFS_ICE_CORE_CLK] = &gcc_ufs_ice_core_clk.clkr,
   3662	[GCC_UFS_SYS_CLK_CORE_CLK] = &gcc_ufs_sys_clk_core_clk.clkr,
   3663	[GCC_UFS_TX_SYMBOL_CLK_CORE_CLK] = &gcc_ufs_tx_symbol_clk_core_clk.clkr,
   3664	[GCC_AGGRE0_SNOC_AXI_CLK] = &gcc_aggre0_snoc_axi_clk.clkr,
   3665	[GCC_AGGRE0_CNOC_AHB_CLK] = &gcc_aggre0_cnoc_ahb_clk.clkr,
   3666	[GCC_SMMU_AGGRE0_AXI_CLK] = &gcc_smmu_aggre0_axi_clk.clkr,
   3667	[GCC_SMMU_AGGRE0_AHB_CLK] = &gcc_smmu_aggre0_ahb_clk.clkr,
   3668	[GCC_AGGRE2_UFS_AXI_CLK] = &gcc_aggre2_ufs_axi_clk.clkr,
   3669	[GCC_AGGRE2_USB3_AXI_CLK] = &gcc_aggre2_usb3_axi_clk.clkr,
   3670	[GCC_QSPI_AHB_CLK] = &gcc_qspi_ahb_clk.clkr,
   3671	[GCC_QSPI_SER_CLK] = &gcc_qspi_ser_clk.clkr,
   3672	[GCC_USB3_CLKREF_CLK] = &gcc_usb3_clkref_clk.clkr,
   3673	[GCC_HDMI_CLKREF_CLK] = &gcc_hdmi_clkref_clk.clkr,
   3674	[GCC_UFS_CLKREF_CLK] = &gcc_ufs_clkref_clk.clkr,
   3675	[GCC_PCIE_CLKREF_CLK] = &gcc_pcie_clkref_clk.clkr,
   3676	[GCC_RX2_USB2_CLKREF_CLK] = &gcc_rx2_usb2_clkref_clk.clkr,
   3677	[GCC_RX1_USB2_CLKREF_CLK] = &gcc_rx1_usb2_clkref_clk.clkr,
   3678	[GCC_EDP_CLKREF_CLK] = &gcc_edp_clkref_clk.clkr,
   3679	[GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
   3680	[GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
   3681	[GCC_MSS_SNOC_AXI_CLK] = &gcc_mss_snoc_axi_clk.clkr,
   3682	[GCC_MSS_MNOC_BIMC_AXI_CLK] = &gcc_mss_mnoc_bimc_axi_clk.clkr,
   3683	[GCC_DCC_AHB_CLK] = &gcc_dcc_ahb_clk.clkr,
   3684	[GCC_AGGRE0_NOC_MPU_CFG_AHB_CLK] = &gcc_aggre0_noc_mpu_cfg_ahb_clk.clkr,
   3685	[GCC_MMSS_GPLL0_DIV_CLK] = &gcc_mmss_gpll0_div_clk.clkr,
   3686	[GCC_MSS_GPLL0_DIV_CLK] = &gcc_mss_gpll0_div_clk.clkr,
   3687};
   3688
   3689static struct gdsc *gcc_msm8996_gdscs[] = {
   3690	[AGGRE0_NOC_GDSC] = &aggre0_noc_gdsc,
   3691	[HLOS1_VOTE_AGGRE0_NOC_GDSC] = &hlos1_vote_aggre0_noc_gdsc,
   3692	[HLOS1_VOTE_LPASS_ADSP_GDSC] = &hlos1_vote_lpass_adsp_gdsc,
   3693	[HLOS1_VOTE_LPASS_CORE_GDSC] = &hlos1_vote_lpass_core_gdsc,
   3694	[USB30_GDSC] = &usb30_gdsc,
   3695	[PCIE0_GDSC] = &pcie0_gdsc,
   3696	[PCIE1_GDSC] = &pcie1_gdsc,
   3697	[PCIE2_GDSC] = &pcie2_gdsc,
   3698	[UFS_GDSC] = &ufs_gdsc,
   3699};
   3700
   3701static const struct qcom_reset_map gcc_msm8996_resets[] = {
   3702	[GCC_SYSTEM_NOC_BCR] = { 0x4000 },
   3703	[GCC_CONFIG_NOC_BCR] = { 0x5000 },
   3704	[GCC_PERIPH_NOC_BCR] = { 0x6000 },
   3705	[GCC_IMEM_BCR] = { 0x8000 },
   3706	[GCC_MMSS_BCR] = { 0x9000 },
   3707	[GCC_PIMEM_BCR] = { 0x0a000 },
   3708	[GCC_QDSS_BCR] = { 0x0c000 },
   3709	[GCC_USB_30_BCR] = { 0x0f000 },
   3710	[GCC_USB_20_BCR] = { 0x12000 },
   3711	[GCC_QUSB2PHY_PRIM_BCR] = { 0x12038 },
   3712	[GCC_QUSB2PHY_SEC_BCR] = { 0x1203c },
   3713	[GCC_USB3_PHY_BCR] = { 0x50020 },
   3714	[GCC_USB3PHY_PHY_BCR] = { 0x50024 },
   3715	[GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 },
   3716	[GCC_SDCC1_BCR] = { 0x13000 },
   3717	[GCC_SDCC2_BCR] = { 0x14000 },
   3718	[GCC_SDCC3_BCR] = { 0x15000 },
   3719	[GCC_SDCC4_BCR] = { 0x16000 },
   3720	[GCC_BLSP1_BCR] = { 0x17000 },
   3721	[GCC_BLSP1_QUP1_BCR] = { 0x19000 },
   3722	[GCC_BLSP1_UART1_BCR] = { 0x1a000 },
   3723	[GCC_BLSP1_QUP2_BCR] = { 0x1b000 },
   3724	[GCC_BLSP1_UART2_BCR] = { 0x1c000 },
   3725	[GCC_BLSP1_QUP3_BCR] = { 0x1d000 },
   3726	[GCC_BLSP1_UART3_BCR] = { 0x1e000 },
   3727	[GCC_BLSP1_QUP4_BCR] = { 0x1f000 },
   3728	[GCC_BLSP1_UART4_BCR] = { 0x20000 },
   3729	[GCC_BLSP1_QUP5_BCR] = { 0x21000 },
   3730	[GCC_BLSP1_UART5_BCR] = { 0x22000 },
   3731	[GCC_BLSP1_QUP6_BCR] = { 0x23000 },
   3732	[GCC_BLSP1_UART6_BCR] = { 0x24000 },
   3733	[GCC_BLSP2_BCR] = { 0x25000 },
   3734	[GCC_BLSP2_QUP1_BCR] = { 0x26000 },
   3735	[GCC_BLSP2_UART1_BCR] = { 0x27000 },
   3736	[GCC_BLSP2_QUP2_BCR] = { 0x28000 },
   3737	[GCC_BLSP2_UART2_BCR] = { 0x29000 },
   3738	[GCC_BLSP2_QUP3_BCR] = { 0x2a000 },
   3739	[GCC_BLSP2_UART3_BCR] = { 0x2b000 },
   3740	[GCC_BLSP2_QUP4_BCR] = { 0x2c000 },
   3741	[GCC_BLSP2_UART4_BCR] = { 0x2d000 },
   3742	[GCC_BLSP2_QUP5_BCR] = { 0x2e000 },
   3743	[GCC_BLSP2_UART5_BCR] = { 0x2f000 },
   3744	[GCC_BLSP2_QUP6_BCR] = { 0x30000 },
   3745	[GCC_BLSP2_UART6_BCR] = { 0x31000 },
   3746	[GCC_PDM_BCR] = { 0x33000 },
   3747	[GCC_PRNG_BCR] = { 0x34000 },
   3748	[GCC_TSIF_BCR] = { 0x36000 },
   3749	[GCC_TCSR_BCR] = { 0x37000 },
   3750	[GCC_BOOT_ROM_BCR] = { 0x38000 },
   3751	[GCC_MSG_RAM_BCR] = { 0x39000 },
   3752	[GCC_TLMM_BCR] = { 0x3a000 },
   3753	[GCC_MPM_BCR] = { 0x3b000 },
   3754	[GCC_SEC_CTRL_BCR] = { 0x3d000 },
   3755	[GCC_SPMI_BCR] = { 0x3f000 },
   3756	[GCC_SPDM_BCR] = { 0x40000 },
   3757	[GCC_CE1_BCR] = { 0x41000 },
   3758	[GCC_BIMC_BCR] = { 0x44000 },
   3759	[GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x49000 },
   3760	[GCC_SNOC_BUS_TIMEOUT2_BCR] = { 0x49008 },
   3761	[GCC_SNOC_BUS_TIMEOUT1_BCR] = { 0x49010 },
   3762	[GCC_SNOC_BUS_TIMEOUT3_BCR] = { 0x49018 },
   3763	[GCC_SNOC_BUS_TIMEOUT_EXTREF_BCR] = { 0x49020 },
   3764	[GCC_PNOC_BUS_TIMEOUT0_BCR] = { 0x4a000 },
   3765	[GCC_PNOC_BUS_TIMEOUT1_BCR] = { 0x4a008 },
   3766	[GCC_PNOC_BUS_TIMEOUT2_BCR] = { 0x4a010 },
   3767	[GCC_PNOC_BUS_TIMEOUT3_BCR] = { 0x4a018 },
   3768	[GCC_PNOC_BUS_TIMEOUT4_BCR] = { 0x4a020 },
   3769	[GCC_CNOC_BUS_TIMEOUT0_BCR] = { 0x4b000 },
   3770	[GCC_CNOC_BUS_TIMEOUT1_BCR] = { 0x4b008 },
   3771	[GCC_CNOC_BUS_TIMEOUT2_BCR] = { 0x4b010 },
   3772	[GCC_CNOC_BUS_TIMEOUT3_BCR] = { 0x4b018 },
   3773	[GCC_CNOC_BUS_TIMEOUT4_BCR] = { 0x4b020 },
   3774	[GCC_CNOC_BUS_TIMEOUT5_BCR] = { 0x4b028 },
   3775	[GCC_CNOC_BUS_TIMEOUT6_BCR] = { 0x4b030 },
   3776	[GCC_CNOC_BUS_TIMEOUT7_BCR] = { 0x4b038 },
   3777	[GCC_CNOC_BUS_TIMEOUT8_BCR] = { 0x80000 },
   3778	[GCC_CNOC_BUS_TIMEOUT9_BCR] = { 0x80008 },
   3779	[GCC_CNOC_BUS_TIMEOUT_EXTREF_BCR] = { 0x80010 },
   3780	[GCC_APB2JTAG_BCR] = { 0x4c000 },
   3781	[GCC_RBCPR_CX_BCR] = { 0x4e000 },
   3782	[GCC_RBCPR_MX_BCR] = { 0x4f000 },
   3783	[GCC_PCIE_0_BCR] = { 0x6b000 },
   3784	[GCC_PCIE_0_PHY_BCR] = { 0x6c01c },
   3785	[GCC_PCIE_1_BCR] = { 0x6d000 },
   3786	[GCC_PCIE_1_PHY_BCR] = { 0x6d038 },
   3787	[GCC_PCIE_2_BCR] = { 0x6e000 },
   3788	[GCC_PCIE_2_PHY_BCR] = { 0x6e038 },
   3789	[GCC_PCIE_PHY_BCR] = { 0x6f000 },
   3790	[GCC_PCIE_PHY_COM_BCR] = { 0x6f014 },
   3791	[GCC_PCIE_PHY_COM_NOCSR_BCR] = { 0x6f00c },
   3792	[GCC_DCD_BCR] = { 0x70000 },
   3793	[GCC_OBT_ODT_BCR] = { 0x73000 },
   3794	[GCC_UFS_BCR] = { 0x75000 },
   3795	[GCC_SSC_BCR] = { 0x63000 },
   3796	[GCC_VS_BCR] = { 0x7a000 },
   3797	[GCC_AGGRE0_NOC_BCR] = { 0x81000 },
   3798	[GCC_AGGRE1_NOC_BCR] = { 0x82000 },
   3799	[GCC_AGGRE2_NOC_BCR] = { 0x83000 },
   3800	[GCC_DCC_BCR] = { 0x84000 },
   3801	[GCC_IPA_BCR] = { 0x89000 },
   3802	[GCC_QSPI_BCR] = { 0x8b000 },
   3803	[GCC_SKL_BCR] = { 0x8c000 },
   3804	[GCC_MSMPU_BCR] = { 0x8d000 },
   3805	[GCC_MSS_Q6_BCR] = { 0x8e000 },
   3806	[GCC_QREFS_VBG_CAL_BCR] = { 0x88020 },
   3807	[GCC_MSS_RESTART] = { 0x8f008 },
   3808};
   3809
   3810static const struct regmap_config gcc_msm8996_regmap_config = {
   3811	.reg_bits	= 32,
   3812	.reg_stride	= 4,
   3813	.val_bits	= 32,
   3814	.max_register	= 0x8f010,
   3815	.fast_io	= true,
   3816};
   3817
   3818static const struct qcom_cc_desc gcc_msm8996_desc = {
   3819	.config = &gcc_msm8996_regmap_config,
   3820	.clks = gcc_msm8996_clocks,
   3821	.num_clks = ARRAY_SIZE(gcc_msm8996_clocks),
   3822	.resets = gcc_msm8996_resets,
   3823	.num_resets = ARRAY_SIZE(gcc_msm8996_resets),
   3824	.gdscs = gcc_msm8996_gdscs,
   3825	.num_gdscs = ARRAY_SIZE(gcc_msm8996_gdscs),
   3826	.clk_hws = gcc_msm8996_hws,
   3827	.num_clk_hws = ARRAY_SIZE(gcc_msm8996_hws),
   3828};
   3829
   3830static const struct of_device_id gcc_msm8996_match_table[] = {
   3831	{ .compatible = "qcom,gcc-msm8996" },
   3832	{ }
   3833};
   3834MODULE_DEVICE_TABLE(of, gcc_msm8996_match_table);
   3835
   3836static int gcc_msm8996_probe(struct platform_device *pdev)
   3837{
   3838	struct regmap *regmap;
   3839
   3840	regmap = qcom_cc_map(pdev, &gcc_msm8996_desc);
   3841	if (IS_ERR(regmap))
   3842		return PTR_ERR(regmap);
   3843
   3844	/*
   3845	 * Set the HMSS_AHB_CLK_SLEEP_ENA bit to allow the hmss_ahb_clk to be
   3846	 * turned off by hardware during certain apps low power modes.
   3847	 */
   3848	regmap_update_bits(regmap, 0x52008, BIT(21), BIT(21));
   3849
   3850	return qcom_cc_really_probe(pdev, &gcc_msm8996_desc, regmap);
   3851}
   3852
   3853static struct platform_driver gcc_msm8996_driver = {
   3854	.probe		= gcc_msm8996_probe,
   3855	.driver		= {
   3856		.name	= "gcc-msm8996",
   3857		.of_match_table = gcc_msm8996_match_table,
   3858	},
   3859};
   3860
   3861static int __init gcc_msm8996_init(void)
   3862{
   3863	return platform_driver_register(&gcc_msm8996_driver);
   3864}
   3865core_initcall(gcc_msm8996_init);
   3866
   3867static void __exit gcc_msm8996_exit(void)
   3868{
   3869	platform_driver_unregister(&gcc_msm8996_driver);
   3870}
   3871module_exit(gcc_msm8996_exit);
   3872
   3873MODULE_DESCRIPTION("QCOM GCC MSM8996 Driver");
   3874MODULE_LICENSE("GPL v2");
   3875MODULE_ALIAS("platform:gcc-msm8996");