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-sdx65.c (42439B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * Copyright (c) 2021, Qualcomm Innovation Center, Inc. All rights reserved.
      4 */
      5
      6#include <linux/clk-provider.h>
      7#include <linux/err.h>
      8#include <linux/kernel.h>
      9#include <linux/module.h>
     10#include <linux/of_device.h>
     11#include <linux/of.h>
     12#include <linux/regmap.h>
     13
     14#include <dt-bindings/clock/qcom,gcc-sdx65.h>
     15
     16#include "clk-alpha-pll.h"
     17#include "clk-branch.h"
     18#include "clk-rcg.h"
     19#include "clk-regmap.h"
     20#include "clk-regmap-divider.h"
     21#include "clk-regmap-mux.h"
     22#include "common.h"
     23#include "gdsc.h"
     24#include "reset.h"
     25
     26enum {
     27	P_BI_TCXO,
     28	P_GPLL0_OUT_EVEN,
     29	P_GPLL0_OUT_MAIN,
     30	P_PCIE_PIPE_CLK,
     31	P_SLEEP_CLK,
     32	P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
     33};
     34
     35static struct clk_alpha_pll gpll0 = {
     36	.offset = 0x0,
     37	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
     38	.clkr = {
     39		.enable_reg = 0x6d000,
     40		.enable_mask = BIT(0),
     41		.hw.init = &(struct clk_init_data){
     42			.name = "gpll0",
     43			.parent_data = &(const struct clk_parent_data){
     44				.fw_name = "bi_tcxo",
     45			},
     46			.num_parents = 1,
     47			.ops = &clk_alpha_pll_fixed_lucid_evo_ops,
     48		},
     49	},
     50};
     51
     52static const struct clk_div_table post_div_table_gpll0_out_even[] = {
     53	{ 0x1, 2 },
     54	{ }
     55};
     56
     57static struct clk_alpha_pll_postdiv gpll0_out_even = {
     58	.offset = 0x0,
     59	.post_div_shift = 10,
     60	.post_div_table = post_div_table_gpll0_out_even,
     61	.num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_even),
     62	.width = 4,
     63	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
     64	.clkr.hw.init = &(struct clk_init_data){
     65		.name = "gpll0_out_even",
     66		.parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
     67		.num_parents = 1,
     68		.ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
     69	},
     70};
     71
     72static const struct parent_map gcc_parent_map_0[] = {
     73	{ P_BI_TCXO, 0 },
     74	{ P_GPLL0_OUT_MAIN, 1 },
     75	{ P_GPLL0_OUT_EVEN, 6 },
     76};
     77
     78static const struct clk_parent_data gcc_parent_data_0[] = {
     79	{ .fw_name = "bi_tcxo" },
     80	{ .hw = &gpll0.clkr.hw },
     81	{ .hw = &gpll0_out_even.clkr.hw },
     82};
     83
     84static const struct clk_parent_data gcc_parent_data_0_ao[] = {
     85	{ .fw_name = "bi_tcxo_ao" },
     86	{ .hw = &gpll0.clkr.hw },
     87	{ .hw = &gpll0_out_even.clkr.hw },
     88};
     89
     90static const struct parent_map gcc_parent_map_2[] = {
     91	{ P_BI_TCXO, 0 },
     92	{ P_GPLL0_OUT_MAIN, 1 },
     93	{ P_SLEEP_CLK, 5 },
     94	{ P_GPLL0_OUT_EVEN, 6 },
     95};
     96
     97static const struct clk_parent_data gcc_parent_data_2[] = {
     98	{ .fw_name = "bi_tcxo" },
     99	{ .hw = &gpll0.clkr.hw },
    100	{ .fw_name = "sleep_clk" },
    101	{ .hw = &gpll0_out_even.clkr.hw },
    102};
    103
    104static const struct parent_map gcc_parent_map_3[] = {
    105	{ P_BI_TCXO, 0 },
    106	{ P_SLEEP_CLK, 5 },
    107};
    108
    109static const struct clk_parent_data gcc_parent_data_3[] = {
    110	{ .fw_name = "bi_tcxo" },
    111	{ .fw_name = "sleep_clk" },
    112};
    113
    114static const struct parent_map gcc_parent_map_4[] = {
    115	{ P_BI_TCXO, 2 },
    116};
    117
    118static const struct parent_map gcc_parent_map_5[] = {
    119	{ P_PCIE_PIPE_CLK, 0 },
    120	{ P_BI_TCXO, 2 },
    121};
    122
    123static const struct clk_parent_data gcc_parent_data_5[] = {
    124	{ .fw_name = "pcie_pipe_clk"},
    125	{ .fw_name = "bi_tcxo"},
    126};
    127
    128static const struct parent_map gcc_parent_map_6[] = {
    129	{ P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 0 },
    130	{ P_BI_TCXO, 2 },
    131};
    132
    133static const struct clk_parent_data gcc_parent_data_6[] = {
    134	{ .fw_name = "usb3_phy_wrapper_gcc_usb30_pipe_clk"},
    135	{ .fw_name = "bi_tcxo"},
    136};
    137
    138static struct clk_regmap_mux gcc_pcie_aux_clk_src = {
    139	.reg = 0x43060,
    140	.shift = 0,
    141	.width = 2,
    142	.parent_map = gcc_parent_map_4,
    143	.clkr = {
    144		.hw.init = &(struct clk_init_data){
    145			.name = "gcc_pcie_aux_clk_src",
    146			.parent_data = &(const struct clk_parent_data){
    147				.fw_name = "bi_tcxo",
    148			},
    149			.num_parents = 1,
    150			.ops = &clk_regmap_mux_closest_ops,
    151		},
    152	},
    153};
    154
    155static struct clk_regmap_mux gcc_pcie_pipe_clk_src = {
    156	.reg = 0x43044,
    157	.shift = 0,
    158	.width = 2,
    159	.parent_map = gcc_parent_map_5,
    160	.clkr = {
    161		.hw.init = &(struct clk_init_data){
    162			.name = "gcc_pcie_pipe_clk_src",
    163			.parent_data = gcc_parent_data_5,
    164			.num_parents = 2,
    165			.ops = &clk_regmap_mux_closest_ops,
    166		},
    167	},
    168};
    169
    170static struct clk_regmap_mux gcc_usb3_phy_pipe_clk_src = {
    171	.reg = 0x1706c,
    172	.shift = 0,
    173	.width = 2,
    174	.parent_map = gcc_parent_map_6,
    175	.clkr = {
    176		.hw.init = &(struct clk_init_data){
    177			.name = "gcc_usb3_phy_pipe_clk_src",
    178			.parent_data = gcc_parent_data_6,
    179			.num_parents = 2,
    180			.ops = &clk_regmap_mux_closest_ops,
    181		},
    182	},
    183};
    184
    185static const struct freq_tbl ftbl_gcc_blsp1_qup1_i2c_apps_clk_src[] = {
    186	F(9600000, P_BI_TCXO, 2, 0, 0),
    187	F(19200000, P_BI_TCXO, 1, 0, 0),
    188	F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
    189	{ }
    190};
    191
    192static struct clk_rcg2 gcc_blsp1_qup1_i2c_apps_clk_src = {
    193	.cmd_rcgr = 0x1c024,
    194	.mnd_width = 8,
    195	.hid_width = 5,
    196	.parent_map = gcc_parent_map_0,
    197	.freq_tbl = ftbl_gcc_blsp1_qup1_i2c_apps_clk_src,
    198	.clkr.hw.init = &(struct clk_init_data){
    199		.name = "gcc_blsp1_qup1_i2c_apps_clk_src",
    200		.parent_data = gcc_parent_data_0,
    201		.num_parents = 3,
    202		.flags = CLK_SET_RATE_PARENT,
    203		.ops = &clk_rcg2_ops,
    204	},
    205};
    206
    207static const struct freq_tbl ftbl_gcc_blsp1_qup1_spi_apps_clk_src[] = {
    208	F(960000, P_BI_TCXO, 10, 1, 2),
    209	F(4800000, P_BI_TCXO, 4, 0, 0),
    210	F(9600000, P_BI_TCXO, 2, 0, 0),
    211	F(15000000, P_GPLL0_OUT_EVEN, 5, 1, 4),
    212	F(19200000, P_BI_TCXO, 1, 0, 0),
    213	F(24000000, P_GPLL0_OUT_MAIN, 12.5, 1, 2),
    214	F(25000000, P_GPLL0_OUT_MAIN, 12, 1, 2),
    215	F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
    216	{ }
    217};
    218
    219static struct clk_rcg2 gcc_blsp1_qup1_spi_apps_clk_src = {
    220	.cmd_rcgr = 0x1c00c,
    221	.mnd_width = 8,
    222	.hid_width = 5,
    223	.parent_map = gcc_parent_map_0,
    224	.freq_tbl = ftbl_gcc_blsp1_qup1_spi_apps_clk_src,
    225	.clkr.hw.init = &(struct clk_init_data){
    226		.name = "gcc_blsp1_qup1_spi_apps_clk_src",
    227		.parent_data = gcc_parent_data_0,
    228		.num_parents = 3,
    229		.flags = CLK_SET_RATE_PARENT,
    230		.ops = &clk_rcg2_ops,
    231	},
    232};
    233
    234static struct clk_rcg2 gcc_blsp1_qup2_i2c_apps_clk_src = {
    235	.cmd_rcgr = 0x1e024,
    236	.mnd_width = 8,
    237	.hid_width = 5,
    238	.parent_map = gcc_parent_map_0,
    239	.freq_tbl = ftbl_gcc_blsp1_qup1_i2c_apps_clk_src,
    240	.clkr.hw.init = &(struct clk_init_data){
    241		.name = "gcc_blsp1_qup2_i2c_apps_clk_src",
    242		.parent_data = gcc_parent_data_0,
    243		.num_parents = 3,
    244		.flags = CLK_SET_RATE_PARENT,
    245		.ops = &clk_rcg2_ops,
    246	},
    247};
    248
    249static struct clk_rcg2 gcc_blsp1_qup2_spi_apps_clk_src = {
    250	.cmd_rcgr = 0x1e00c,
    251	.mnd_width = 8,
    252	.hid_width = 5,
    253	.parent_map = gcc_parent_map_0,
    254	.freq_tbl = ftbl_gcc_blsp1_qup1_spi_apps_clk_src,
    255	.clkr.hw.init = &(struct clk_init_data){
    256		.name = "gcc_blsp1_qup2_spi_apps_clk_src",
    257		.parent_data = gcc_parent_data_0,
    258		.num_parents = 3,
    259		.flags = CLK_SET_RATE_PARENT,
    260		.ops = &clk_rcg2_ops,
    261	},
    262};
    263
    264static struct clk_rcg2 gcc_blsp1_qup3_i2c_apps_clk_src = {
    265	.cmd_rcgr = 0x20024,
    266	.mnd_width = 8,
    267	.hid_width = 5,
    268	.parent_map = gcc_parent_map_0,
    269	.freq_tbl = ftbl_gcc_blsp1_qup1_i2c_apps_clk_src,
    270	.clkr.hw.init = &(struct clk_init_data){
    271		.name = "gcc_blsp1_qup3_i2c_apps_clk_src",
    272		.parent_data = gcc_parent_data_0,
    273		.num_parents = 3,
    274		.flags = CLK_SET_RATE_PARENT,
    275		.ops = &clk_rcg2_ops,
    276	},
    277};
    278
    279static struct clk_rcg2 gcc_blsp1_qup3_spi_apps_clk_src = {
    280	.cmd_rcgr = 0x2000c,
    281	.mnd_width = 8,
    282	.hid_width = 5,
    283	.parent_map = gcc_parent_map_0,
    284	.freq_tbl = ftbl_gcc_blsp1_qup1_spi_apps_clk_src,
    285	.clkr.hw.init = &(struct clk_init_data){
    286		.name = "gcc_blsp1_qup3_spi_apps_clk_src",
    287		.parent_data = gcc_parent_data_0,
    288		.num_parents = 3,
    289		.flags = CLK_SET_RATE_PARENT,
    290		.ops = &clk_rcg2_ops,
    291	},
    292};
    293
    294static struct clk_rcg2 gcc_blsp1_qup4_i2c_apps_clk_src = {
    295	.cmd_rcgr = 0x22024,
    296	.mnd_width = 8,
    297	.hid_width = 5,
    298	.parent_map = gcc_parent_map_0,
    299	.freq_tbl = ftbl_gcc_blsp1_qup1_i2c_apps_clk_src,
    300	.clkr.hw.init = &(struct clk_init_data){
    301		.name = "gcc_blsp1_qup4_i2c_apps_clk_src",
    302		.parent_data = gcc_parent_data_0,
    303		.num_parents = 3,
    304		.flags = CLK_SET_RATE_PARENT,
    305		.ops = &clk_rcg2_ops,
    306	},
    307};
    308
    309static struct clk_rcg2 gcc_blsp1_qup4_spi_apps_clk_src = {
    310	.cmd_rcgr = 0x2200c,
    311	.mnd_width = 8,
    312	.hid_width = 5,
    313	.parent_map = gcc_parent_map_0,
    314	.freq_tbl = ftbl_gcc_blsp1_qup1_spi_apps_clk_src,
    315	.clkr.hw.init = &(struct clk_init_data){
    316		.name = "gcc_blsp1_qup4_spi_apps_clk_src",
    317		.parent_data = gcc_parent_data_0,
    318		.num_parents = 3,
    319		.flags = CLK_SET_RATE_PARENT,
    320		.ops = &clk_rcg2_ops,
    321	},
    322};
    323
    324static const struct freq_tbl ftbl_gcc_blsp1_uart1_apps_clk_src[] = {
    325	F(3686400, P_GPLL0_OUT_EVEN, 1, 192, 15625),
    326	F(7372800, P_GPLL0_OUT_EVEN, 1, 384, 15625),
    327	F(9600000, P_BI_TCXO, 2, 0, 0),
    328	F(14745600, P_GPLL0_OUT_EVEN, 1, 768, 15625),
    329	F(16000000, P_GPLL0_OUT_EVEN, 1, 4, 75),
    330	F(19200000, P_BI_TCXO, 1, 0, 0),
    331	F(19354839, P_GPLL0_OUT_MAIN, 15.5, 1, 2),
    332	F(20000000, P_GPLL0_OUT_MAIN, 15, 1, 2),
    333	F(20689655, P_GPLL0_OUT_MAIN, 14.5, 1, 2),
    334	F(21428571, P_GPLL0_OUT_MAIN, 14, 1, 2),
    335	F(22222222, P_GPLL0_OUT_MAIN, 13.5, 1, 2),
    336	F(23076923, P_GPLL0_OUT_MAIN, 13, 1, 2),
    337	F(24000000, P_GPLL0_OUT_MAIN, 5, 1, 5),
    338	F(25000000, P_GPLL0_OUT_MAIN, 12, 1, 2),
    339	F(26086957, P_GPLL0_OUT_MAIN, 11.5, 1, 2),
    340	F(27272727, P_GPLL0_OUT_MAIN, 11, 1, 2),
    341	F(28571429, P_GPLL0_OUT_MAIN, 10.5, 1, 2),
    342	F(32000000, P_GPLL0_OUT_MAIN, 1, 4, 75),
    343	F(40000000, P_GPLL0_OUT_MAIN, 15, 0, 0),
    344	F(46400000, P_GPLL0_OUT_MAIN, 1, 29, 375),
    345	F(48000000, P_GPLL0_OUT_MAIN, 12.5, 0, 0),
    346	F(51200000, P_GPLL0_OUT_MAIN, 1, 32, 375),
    347	F(56000000, P_GPLL0_OUT_MAIN, 1, 7, 75),
    348	F(58982400, P_GPLL0_OUT_MAIN, 1, 1536, 15625),
    349	F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
    350	F(63157895, P_GPLL0_OUT_MAIN, 9.5, 0, 0),
    351	{ }
    352};
    353
    354static struct clk_rcg2 gcc_blsp1_uart1_apps_clk_src = {
    355	.cmd_rcgr = 0x1d00c,
    356	.mnd_width = 16,
    357	.hid_width = 5,
    358	.parent_map = gcc_parent_map_0,
    359	.freq_tbl = ftbl_gcc_blsp1_uart1_apps_clk_src,
    360	.clkr.hw.init = &(struct clk_init_data){
    361		.name = "gcc_blsp1_uart1_apps_clk_src",
    362		.parent_data = gcc_parent_data_0,
    363		.num_parents = 3,
    364		.flags = CLK_SET_RATE_PARENT,
    365		.ops = &clk_rcg2_ops,
    366	},
    367};
    368
    369static struct clk_rcg2 gcc_blsp1_uart2_apps_clk_src = {
    370	.cmd_rcgr = 0x1f00c,
    371	.mnd_width = 16,
    372	.hid_width = 5,
    373	.parent_map = gcc_parent_map_0,
    374	.freq_tbl = ftbl_gcc_blsp1_uart1_apps_clk_src,
    375	.clkr.hw.init = &(struct clk_init_data){
    376		.name = "gcc_blsp1_uart2_apps_clk_src",
    377		.parent_data = gcc_parent_data_0,
    378		.num_parents = 3,
    379		.flags = CLK_SET_RATE_PARENT,
    380		.ops = &clk_rcg2_ops,
    381	},
    382};
    383
    384static struct clk_rcg2 gcc_blsp1_uart3_apps_clk_src = {
    385	.cmd_rcgr = 0x2100c,
    386	.mnd_width = 16,
    387	.hid_width = 5,
    388	.parent_map = gcc_parent_map_0,
    389	.freq_tbl = ftbl_gcc_blsp1_uart1_apps_clk_src,
    390	.clkr.hw.init = &(struct clk_init_data){
    391		.name = "gcc_blsp1_uart3_apps_clk_src",
    392		.parent_data = gcc_parent_data_0,
    393		.num_parents = 3,
    394		.flags = CLK_SET_RATE_PARENT,
    395		.ops = &clk_rcg2_ops,
    396	},
    397};
    398
    399static struct clk_rcg2 gcc_blsp1_uart4_apps_clk_src = {
    400	.cmd_rcgr = 0x2300c,
    401	.mnd_width = 16,
    402	.hid_width = 5,
    403	.parent_map = gcc_parent_map_0,
    404	.freq_tbl = ftbl_gcc_blsp1_uart1_apps_clk_src,
    405	.clkr.hw.init = &(struct clk_init_data){
    406		.name = "gcc_blsp1_uart4_apps_clk_src",
    407		.parent_data = gcc_parent_data_0,
    408		.num_parents = 3,
    409		.flags = CLK_SET_RATE_PARENT,
    410		.ops = &clk_rcg2_ops,
    411	},
    412};
    413
    414static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src[] = {
    415	F(19200000, P_BI_TCXO, 1, 0, 0),
    416	F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
    417	F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
    418	F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
    419	{ }
    420};
    421
    422static struct clk_rcg2 gcc_cpuss_ahb_clk_src = {
    423	.cmd_rcgr = 0x3000c,
    424	.mnd_width = 0,
    425	.hid_width = 5,
    426	.parent_map = gcc_parent_map_0,
    427	.freq_tbl = ftbl_gcc_cpuss_ahb_clk_src,
    428	.clkr.hw.init = &(struct clk_init_data){
    429		.name = "gcc_cpuss_ahb_clk_src",
    430		.parent_data = gcc_parent_data_0_ao,
    431		.num_parents = 3,
    432		.flags = CLK_SET_RATE_PARENT,
    433		.ops = &clk_rcg2_ops,
    434	},
    435};
    436
    437static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
    438	F(19200000, P_BI_TCXO, 1, 0, 0),
    439	F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
    440	F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
    441	F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
    442	{ }
    443};
    444
    445static struct clk_rcg2 gcc_gp1_clk_src = {
    446	.cmd_rcgr = 0x37004,
    447	.mnd_width = 16,
    448	.hid_width = 5,
    449	.parent_map = gcc_parent_map_2,
    450	.freq_tbl = ftbl_gcc_gp1_clk_src,
    451	.clkr.hw.init = &(struct clk_init_data){
    452		.name = "gcc_gp1_clk_src",
    453		.parent_data = gcc_parent_data_2,
    454		.num_parents = 4,
    455		.flags = CLK_SET_RATE_PARENT,
    456		.ops = &clk_rcg2_ops,
    457	},
    458};
    459
    460static struct clk_rcg2 gcc_gp2_clk_src = {
    461	.cmd_rcgr = 0x38004,
    462	.mnd_width = 16,
    463	.hid_width = 5,
    464	.parent_map = gcc_parent_map_2,
    465	.freq_tbl = ftbl_gcc_gp1_clk_src,
    466	.clkr.hw.init = &(struct clk_init_data){
    467		.name = "gcc_gp2_clk_src",
    468		.parent_data = gcc_parent_data_2,
    469		.num_parents = 4,
    470		.flags = CLK_SET_RATE_PARENT,
    471		.ops = &clk_rcg2_ops,
    472	},
    473};
    474
    475static struct clk_rcg2 gcc_gp3_clk_src = {
    476	.cmd_rcgr = 0x39004,
    477	.mnd_width = 16,
    478	.hid_width = 5,
    479	.parent_map = gcc_parent_map_2,
    480	.freq_tbl = ftbl_gcc_gp1_clk_src,
    481	.clkr.hw.init = &(struct clk_init_data){
    482		.name = "gcc_gp3_clk_src",
    483		.parent_data = gcc_parent_data_2,
    484		.num_parents = 4,
    485		.flags = CLK_SET_RATE_PARENT,
    486		.ops = &clk_rcg2_ops,
    487	},
    488};
    489
    490static const struct freq_tbl ftbl_gcc_pcie_aux_phy_clk_src[] = {
    491	F(19200000, P_BI_TCXO, 1, 0, 0),
    492	{ }
    493};
    494
    495static struct clk_rcg2 gcc_pcie_aux_phy_clk_src = {
    496	.cmd_rcgr = 0x43048,
    497	.mnd_width = 16,
    498	.hid_width = 5,
    499	.parent_map = gcc_parent_map_3,
    500	.freq_tbl = ftbl_gcc_pcie_aux_phy_clk_src,
    501	.clkr.hw.init = &(struct clk_init_data){
    502		.name = "gcc_pcie_aux_phy_clk_src",
    503		.parent_data = gcc_parent_data_3,
    504		.num_parents = 2,
    505		.flags = CLK_SET_RATE_PARENT,
    506		.ops = &clk_rcg2_ops,
    507	},
    508};
    509
    510static const struct freq_tbl ftbl_gcc_pcie_rchng_phy_clk_src[] = {
    511	F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
    512	{ }
    513};
    514
    515static struct clk_rcg2 gcc_pcie_rchng_phy_clk_src = {
    516	.cmd_rcgr = 0x43064,
    517	.mnd_width = 0,
    518	.hid_width = 5,
    519	.parent_map = gcc_parent_map_2,
    520	.freq_tbl = ftbl_gcc_pcie_rchng_phy_clk_src,
    521	.clkr.hw.init = &(struct clk_init_data){
    522		.name = "gcc_pcie_rchng_phy_clk_src",
    523		.parent_data = gcc_parent_data_2,
    524		.num_parents = 4,
    525		.flags = CLK_SET_RATE_PARENT,
    526		.ops = &clk_rcg2_ops,
    527	},
    528};
    529
    530static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
    531	F(19200000, P_BI_TCXO, 1, 0, 0),
    532	F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
    533	{ }
    534};
    535
    536static struct clk_rcg2 gcc_pdm2_clk_src = {
    537	.cmd_rcgr = 0x24010,
    538	.mnd_width = 0,
    539	.hid_width = 5,
    540	.parent_map = gcc_parent_map_0,
    541	.freq_tbl = ftbl_gcc_pdm2_clk_src,
    542	.clkr.hw.init = &(struct clk_init_data){
    543		.name = "gcc_pdm2_clk_src",
    544		.parent_data = gcc_parent_data_0,
    545		.num_parents = 3,
    546		.flags = CLK_SET_RATE_PARENT,
    547		.ops = &clk_rcg2_ops,
    548	},
    549};
    550
    551static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {
    552	F(400000, P_BI_TCXO, 12, 1, 4),
    553	F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
    554	F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
    555	F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
    556	F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
    557	{ }
    558};
    559
    560static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {
    561	.cmd_rcgr = 0x1a010,
    562	.mnd_width = 8,
    563	.hid_width = 5,
    564	.parent_map = gcc_parent_map_0,
    565	.freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,
    566	.clkr.hw.init = &(struct clk_init_data){
    567		.name = "gcc_sdcc1_apps_clk_src",
    568		.parent_data = gcc_parent_data_0,
    569		.num_parents = 3,
    570		.flags = CLK_SET_RATE_PARENT,
    571		.ops = &clk_rcg2_ops,
    572	},
    573};
    574
    575static const struct freq_tbl ftbl_gcc_usb30_master_clk_src[] = {
    576	F(200000000, P_GPLL0_OUT_EVEN, 1.5, 0, 0),
    577	{ }
    578};
    579
    580static struct clk_rcg2 gcc_usb30_master_clk_src = {
    581	.cmd_rcgr = 0x17030,
    582	.mnd_width = 8,
    583	.hid_width = 5,
    584	.parent_map = gcc_parent_map_0,
    585	.freq_tbl = ftbl_gcc_usb30_master_clk_src,
    586	.clkr.hw.init = &(struct clk_init_data){
    587		.name = "gcc_usb30_master_clk_src",
    588		.parent_data = gcc_parent_data_0,
    589		.num_parents = 3,
    590		.flags = CLK_SET_RATE_PARENT,
    591		.ops = &clk_rcg2_ops,
    592	},
    593};
    594
    595static struct clk_rcg2 gcc_usb30_mock_utmi_clk_src = {
    596	.cmd_rcgr = 0x17048,
    597	.mnd_width = 0,
    598	.hid_width = 5,
    599	.parent_map = gcc_parent_map_0,
    600	.freq_tbl = ftbl_gcc_pcie_aux_phy_clk_src,
    601	.clkr.hw.init = &(struct clk_init_data){
    602		.name = "gcc_usb30_mock_utmi_clk_src",
    603		.parent_data = gcc_parent_data_0,
    604		.num_parents = 3,
    605		.flags = CLK_SET_RATE_PARENT,
    606		.ops = &clk_rcg2_ops,
    607	},
    608};
    609
    610static const struct freq_tbl ftbl_gcc_usb3_phy_aux_clk_src[] = {
    611	F(1000000, P_BI_TCXO, 1, 5, 96),
    612	F(19200000, P_BI_TCXO, 1, 0, 0),
    613	{ }
    614};
    615
    616static struct clk_rcg2 gcc_usb3_phy_aux_clk_src = {
    617	.cmd_rcgr = 0x17070,
    618	.mnd_width = 16,
    619	.hid_width = 5,
    620	.parent_map = gcc_parent_map_3,
    621	.freq_tbl = ftbl_gcc_usb3_phy_aux_clk_src,
    622	.clkr.hw.init = &(struct clk_init_data){
    623		.name = "gcc_usb3_phy_aux_clk_src",
    624		.parent_data = gcc_parent_data_3,
    625		.num_parents = 2,
    626		.flags = CLK_SET_RATE_PARENT,
    627		.ops = &clk_rcg2_ops,
    628	},
    629};
    630
    631static struct clk_regmap_div gcc_cpuss_ahb_postdiv_clk_src = {
    632	.reg = 0x30024,
    633	.shift = 0,
    634	.width = 4,
    635	.clkr.hw.init = &(struct clk_init_data) {
    636		.name = "gcc_cpuss_ahb_postdiv_clk_src",
    637		.parent_data = &(const struct clk_parent_data){
    638			.hw = &gcc_cpuss_ahb_clk_src.clkr.hw,
    639		},
    640		.num_parents = 1,
    641		.flags = CLK_SET_RATE_PARENT,
    642		.ops = &clk_regmap_div_ro_ops,
    643	},
    644};
    645
    646static struct clk_regmap_div gcc_usb30_mock_utmi_postdiv_clk_src = {
    647	.reg = 0x17060,
    648	.shift = 0,
    649	.width = 4,
    650	.clkr.hw.init = &(struct clk_init_data) {
    651		.name = "gcc_usb30_mock_utmi_postdiv_clk_src",
    652		.parent_data = &(const struct clk_parent_data){
    653			.hw = &gcc_usb30_mock_utmi_clk_src.clkr.hw,
    654		},
    655		.num_parents = 1,
    656		.flags = CLK_SET_RATE_PARENT,
    657		.ops = &clk_regmap_div_ro_ops,
    658	},
    659};
    660
    661static struct clk_branch gcc_ahb_pcie_link_clk = {
    662	.halt_reg = 0x2e004,
    663	.halt_check = BRANCH_HALT,
    664	.clkr = {
    665		.enable_reg = 0x2e004,
    666		.enable_mask = BIT(0),
    667		.hw.init = &(struct clk_init_data){
    668			.name = "gcc_ahb_pcie_link_clk",
    669			.ops = &clk_branch2_ops,
    670		},
    671	},
    672};
    673
    674static struct clk_branch gcc_blsp1_ahb_clk = {
    675	.halt_reg = 0x1b004,
    676	.halt_check = BRANCH_HALT_VOTED,
    677	.clkr = {
    678		.enable_reg = 0x6d008,
    679		.enable_mask = BIT(14),
    680		.hw.init = &(struct clk_init_data){
    681			.name = "gcc_blsp1_ahb_clk",
    682			.ops = &clk_branch2_ops,
    683		},
    684	},
    685};
    686
    687static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
    688	.halt_reg = 0x1c008,
    689	.halt_check = BRANCH_HALT,
    690	.clkr = {
    691		.enable_reg = 0x1c008,
    692		.enable_mask = BIT(0),
    693		.hw.init = &(struct clk_init_data){
    694			.name = "gcc_blsp1_qup1_i2c_apps_clk",
    695			.parent_data = &(const struct clk_parent_data){
    696				.hw = &gcc_blsp1_qup1_i2c_apps_clk_src.clkr.hw,
    697			},
    698			.num_parents = 1,
    699			.flags = CLK_SET_RATE_PARENT,
    700			.ops = &clk_branch2_ops,
    701		},
    702	},
    703};
    704
    705static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
    706	.halt_reg = 0x1c004,
    707	.halt_check = BRANCH_HALT,
    708	.clkr = {
    709		.enable_reg = 0x1c004,
    710		.enable_mask = BIT(0),
    711		.hw.init = &(struct clk_init_data){
    712			.name = "gcc_blsp1_qup1_spi_apps_clk",
    713			.parent_data = &(const struct clk_parent_data){
    714				.hw = &gcc_blsp1_qup1_spi_apps_clk_src.clkr.hw,
    715			},
    716			.num_parents = 1,
    717			.flags = CLK_SET_RATE_PARENT,
    718			.ops = &clk_branch2_ops,
    719		},
    720	},
    721};
    722
    723static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
    724	.halt_reg = 0x1e008,
    725	.halt_check = BRANCH_HALT,
    726	.clkr = {
    727		.enable_reg = 0x1e008,
    728		.enable_mask = BIT(0),
    729		.hw.init = &(struct clk_init_data){
    730			.name = "gcc_blsp1_qup2_i2c_apps_clk",
    731			.parent_data = &(const struct clk_parent_data){
    732				.hw = &gcc_blsp1_qup2_i2c_apps_clk_src.clkr.hw,
    733			},
    734			.num_parents = 1,
    735			.flags = CLK_SET_RATE_PARENT,
    736			.ops = &clk_branch2_ops,
    737		},
    738	},
    739};
    740
    741static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
    742	.halt_reg = 0x1e004,
    743	.halt_check = BRANCH_HALT,
    744	.clkr = {
    745		.enable_reg = 0x1e004,
    746		.enable_mask = BIT(0),
    747		.hw.init = &(struct clk_init_data){
    748			.name = "gcc_blsp1_qup2_spi_apps_clk",
    749			.parent_data = &(const struct clk_parent_data){
    750				.hw = &gcc_blsp1_qup2_spi_apps_clk_src.clkr.hw,
    751			},
    752			.num_parents = 1,
    753			.flags = CLK_SET_RATE_PARENT,
    754			.ops = &clk_branch2_ops,
    755		},
    756	},
    757};
    758
    759static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
    760	.halt_reg = 0x20008,
    761	.halt_check = BRANCH_HALT,
    762	.clkr = {
    763		.enable_reg = 0x20008,
    764		.enable_mask = BIT(0),
    765		.hw.init = &(struct clk_init_data){
    766			.name = "gcc_blsp1_qup3_i2c_apps_clk",
    767			.parent_data = &(const struct clk_parent_data){
    768				.hw = &gcc_blsp1_qup3_i2c_apps_clk_src.clkr.hw,
    769			},
    770			.num_parents = 1,
    771			.flags = CLK_SET_RATE_PARENT,
    772			.ops = &clk_branch2_ops,
    773		},
    774	},
    775};
    776
    777static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
    778	.halt_reg = 0x20004,
    779	.halt_check = BRANCH_HALT,
    780	.clkr = {
    781		.enable_reg = 0x20004,
    782		.enable_mask = BIT(0),
    783		.hw.init = &(struct clk_init_data){
    784			.name = "gcc_blsp1_qup3_spi_apps_clk",
    785			.parent_data = &(const struct clk_parent_data){
    786				.hw = &gcc_blsp1_qup3_spi_apps_clk_src.clkr.hw,
    787			},
    788			.num_parents = 1,
    789			.flags = CLK_SET_RATE_PARENT,
    790			.ops = &clk_branch2_ops,
    791		},
    792	},
    793};
    794
    795static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
    796	.halt_reg = 0x22008,
    797	.halt_check = BRANCH_HALT,
    798	.clkr = {
    799		.enable_reg = 0x22008,
    800		.enable_mask = BIT(0),
    801		.hw.init = &(struct clk_init_data){
    802			.name = "gcc_blsp1_qup4_i2c_apps_clk",
    803			.parent_data = &(const struct clk_parent_data){
    804				.hw = &gcc_blsp1_qup4_i2c_apps_clk_src.clkr.hw,
    805			},
    806			.num_parents = 1,
    807			.flags = CLK_SET_RATE_PARENT,
    808			.ops = &clk_branch2_ops,
    809		},
    810	},
    811};
    812
    813static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
    814	.halt_reg = 0x22004,
    815	.halt_check = BRANCH_HALT,
    816	.clkr = {
    817		.enable_reg = 0x22004,
    818		.enable_mask = BIT(0),
    819		.hw.init = &(struct clk_init_data){
    820			.name = "gcc_blsp1_qup4_spi_apps_clk",
    821			.parent_data = &(const struct clk_parent_data){
    822				.hw = &gcc_blsp1_qup4_spi_apps_clk_src.clkr.hw,
    823			},
    824			.num_parents = 1,
    825			.flags = CLK_SET_RATE_PARENT,
    826			.ops = &clk_branch2_ops,
    827		},
    828	},
    829};
    830
    831static struct clk_branch gcc_blsp1_sleep_clk = {
    832	.halt_reg = 0x1b00c,
    833	.halt_check = BRANCH_HALT_VOTED,
    834	.clkr = {
    835		.enable_reg = 0x6d008,
    836		.enable_mask = BIT(15),
    837		.hw.init = &(struct clk_init_data){
    838			.name = "gcc_blsp1_sleep_clk",
    839			.ops = &clk_branch2_ops,
    840		},
    841	},
    842};
    843
    844static struct clk_branch gcc_blsp1_uart1_apps_clk = {
    845	.halt_reg = 0x1d004,
    846	.halt_check = BRANCH_HALT,
    847	.clkr = {
    848		.enable_reg = 0x1d004,
    849		.enable_mask = BIT(0),
    850		.hw.init = &(struct clk_init_data){
    851			.name = "gcc_blsp1_uart1_apps_clk",
    852			.parent_data = &(const struct clk_parent_data){
    853				.hw = &gcc_blsp1_uart1_apps_clk_src.clkr.hw,
    854			},
    855			.num_parents = 1,
    856			.flags = CLK_SET_RATE_PARENT,
    857			.ops = &clk_branch2_ops,
    858		},
    859	},
    860};
    861
    862static struct clk_branch gcc_blsp1_uart2_apps_clk = {
    863	.halt_reg = 0x1f004,
    864	.halt_check = BRANCH_HALT,
    865	.clkr = {
    866		.enable_reg = 0x1f004,
    867		.enable_mask = BIT(0),
    868		.hw.init = &(struct clk_init_data){
    869			.name = "gcc_blsp1_uart2_apps_clk",
    870			.parent_data = &(const struct clk_parent_data){
    871				.hw = &gcc_blsp1_uart2_apps_clk_src.clkr.hw,
    872			},
    873			.num_parents = 1,
    874			.flags = CLK_SET_RATE_PARENT,
    875			.ops = &clk_branch2_ops,
    876		},
    877	},
    878};
    879
    880static struct clk_branch gcc_blsp1_uart3_apps_clk = {
    881	.halt_reg = 0x21004,
    882	.halt_check = BRANCH_HALT,
    883	.clkr = {
    884		.enable_reg = 0x21004,
    885		.enable_mask = BIT(0),
    886		.hw.init = &(struct clk_init_data){
    887			.name = "gcc_blsp1_uart3_apps_clk",
    888			.parent_data = &(const struct clk_parent_data){
    889				.hw = &gcc_blsp1_uart3_apps_clk_src.clkr.hw,
    890			},
    891			.num_parents = 1,
    892			.flags = CLK_SET_RATE_PARENT,
    893			.ops = &clk_branch2_ops,
    894		},
    895	},
    896};
    897
    898static struct clk_branch gcc_blsp1_uart4_apps_clk = {
    899	.halt_reg = 0x23004,
    900	.halt_check = BRANCH_HALT,
    901	.clkr = {
    902		.enable_reg = 0x23004,
    903		.enable_mask = BIT(0),
    904		.hw.init = &(struct clk_init_data){
    905			.name = "gcc_blsp1_uart4_apps_clk",
    906			.parent_data = &(const struct clk_parent_data){
    907				.hw = &gcc_blsp1_uart4_apps_clk_src.clkr.hw,
    908			},
    909			.num_parents = 1,
    910			.flags = CLK_SET_RATE_PARENT,
    911			.ops = &clk_branch2_ops,
    912		},
    913	},
    914};
    915
    916static struct clk_branch gcc_boot_rom_ahb_clk = {
    917	.halt_reg = 0x27004,
    918	.halt_check = BRANCH_HALT_VOTED,
    919	.hwcg_reg = 0x27004,
    920	.hwcg_bit = 1,
    921	.clkr = {
    922		.enable_reg = 0x6d008,
    923		.enable_mask = BIT(10),
    924		.hw.init = &(struct clk_init_data){
    925			.name = "gcc_boot_rom_ahb_clk",
    926			.ops = &clk_branch2_ops,
    927		},
    928	},
    929};
    930
    931static struct clk_branch gcc_gp1_clk = {
    932	.halt_reg = 0x37000,
    933	.halt_check = BRANCH_HALT,
    934	.clkr = {
    935		.enable_reg = 0x37000,
    936		.enable_mask = BIT(0),
    937		.hw.init = &(struct clk_init_data){
    938			.name = "gcc_gp1_clk",
    939			.parent_data = &(const struct clk_parent_data){
    940				.hw = &gcc_gp1_clk_src.clkr.hw,
    941			},
    942			.num_parents = 1,
    943			.flags = CLK_SET_RATE_PARENT,
    944			.ops = &clk_branch2_ops,
    945		},
    946	},
    947};
    948
    949static struct clk_branch gcc_gp2_clk = {
    950	.halt_reg = 0x38000,
    951	.halt_check = BRANCH_HALT,
    952	.clkr = {
    953		.enable_reg = 0x38000,
    954		.enable_mask = BIT(0),
    955		.hw.init = &(struct clk_init_data){
    956			.name = "gcc_gp2_clk",
    957			.parent_data = &(const struct clk_parent_data){
    958				.hw = &gcc_gp2_clk_src.clkr.hw,
    959			},
    960			.num_parents = 1,
    961			.flags = CLK_SET_RATE_PARENT,
    962			.ops = &clk_branch2_ops,
    963		},
    964	},
    965};
    966
    967static struct clk_branch gcc_gp3_clk = {
    968	.halt_reg = 0x39000,
    969	.halt_check = BRANCH_HALT,
    970	.clkr = {
    971		.enable_reg = 0x39000,
    972		.enable_mask = BIT(0),
    973		.hw.init = &(struct clk_init_data){
    974			.name = "gcc_gp3_clk",
    975			.parent_data = &(const struct clk_parent_data){
    976				.hw = &gcc_gp3_clk_src.clkr.hw,
    977			},
    978			.num_parents = 1,
    979			.flags = CLK_SET_RATE_PARENT,
    980			.ops = &clk_branch2_ops,
    981		},
    982	},
    983};
    984
    985static struct clk_branch gcc_pcie_0_clkref_en = {
    986	.halt_reg = 0x88004,
    987	/*
    988	 * The clock controller does not handle the status bit for
    989	 * the clocks with gdscs(powerdomains) in hw controlled mode
    990	 * and hence avoid checking for the status bit of those clocks
    991	 * by setting the BRANCH_HALT_DELAY flag
    992	 */
    993	.halt_check = BRANCH_HALT_DELAY,
    994	.clkr = {
    995		.enable_reg = 0x88004,
    996		.enable_mask = BIT(0),
    997		.hw.init = &(struct clk_init_data){
    998			.name = "gcc_pcie_0_clkref_en",
    999			.ops = &clk_branch2_ops,
   1000		},
   1001	},
   1002};
   1003
   1004static struct clk_branch gcc_pcie_aux_clk = {
   1005	.halt_reg = 0x43034,
   1006	/*
   1007	 * The clock controller does not handle the status bit for
   1008	 * the clocks with gdscs(powerdomains) in hw controlled mode
   1009	 * and hence avoid checking for the status bit of those clocks
   1010	 * by setting the BRANCH_HALT_DELAY flag
   1011	 */
   1012	.halt_check = BRANCH_HALT_DELAY,
   1013	.hwcg_reg = 0x43034,
   1014	.hwcg_bit = 1,
   1015	.clkr = {
   1016		.enable_reg = 0x6d010,
   1017		.enable_mask = BIT(3),
   1018		.hw.init = &(struct clk_init_data){
   1019			.name = "gcc_pcie_aux_clk",
   1020			.parent_data = &(const struct clk_parent_data){
   1021				.hw = &gcc_pcie_aux_clk_src.clkr.hw,
   1022			},
   1023			.num_parents = 1,
   1024			.flags = CLK_SET_RATE_PARENT,
   1025			.ops = &clk_branch2_ops,
   1026		},
   1027	},
   1028};
   1029
   1030static struct clk_branch gcc_pcie_cfg_ahb_clk = {
   1031	.halt_reg = 0x4302c,
   1032	.halt_check = BRANCH_HALT_VOTED,
   1033	.hwcg_reg = 0x4302c,
   1034	.hwcg_bit = 1,
   1035	.clkr = {
   1036		.enable_reg = 0x6d010,
   1037		.enable_mask = BIT(2),
   1038		.hw.init = &(struct clk_init_data){
   1039			.name = "gcc_pcie_cfg_ahb_clk",
   1040			.ops = &clk_branch2_ops,
   1041		},
   1042	},
   1043};
   1044
   1045static struct clk_branch gcc_pcie_mstr_axi_clk = {
   1046	.halt_reg = 0x43024,
   1047	.halt_check = BRANCH_HALT_VOTED,
   1048	.hwcg_reg = 0x43024,
   1049	.hwcg_bit = 1,
   1050	.clkr = {
   1051		.enable_reg = 0x6d010,
   1052		.enable_mask = BIT(1),
   1053		.hw.init = &(struct clk_init_data){
   1054			.name = "gcc_pcie_mstr_axi_clk",
   1055			.ops = &clk_branch2_ops,
   1056		},
   1057	},
   1058};
   1059
   1060static struct clk_branch gcc_pcie_pipe_clk = {
   1061	.halt_reg = 0x4303c,
   1062	/*
   1063	 * The clock controller does not handle the status bit for
   1064	 * the clocks with gdscs(powerdomains) in hw controlled mode
   1065	 * and hence avoid checking for the status bit of those clocks
   1066	 * by setting the BRANCH_HALT_DELAY flag
   1067	 */
   1068	.halt_check = BRANCH_HALT_DELAY,
   1069	.hwcg_reg = 0x4303c,
   1070	.hwcg_bit = 1,
   1071	.clkr = {
   1072		.enable_reg = 0x6d010,
   1073		.enable_mask = BIT(4),
   1074		.hw.init = &(struct clk_init_data){
   1075			.name = "gcc_pcie_pipe_clk",
   1076			.parent_data = &(const struct clk_parent_data){
   1077				.hw = &gcc_pcie_pipe_clk_src.clkr.hw,
   1078			},
   1079			.num_parents = 1,
   1080			.flags = CLK_SET_RATE_PARENT,
   1081			.ops = &clk_branch2_ops,
   1082		},
   1083	},
   1084};
   1085
   1086static struct clk_branch gcc_pcie_rchng_phy_clk = {
   1087	.halt_reg = 0x43030,
   1088	.halt_check = BRANCH_HALT_VOTED,
   1089	.hwcg_reg = 0x43030,
   1090	.hwcg_bit = 1,
   1091	.clkr = {
   1092		.enable_reg = 0x6d010,
   1093		.enable_mask = BIT(7),
   1094		.hw.init = &(struct clk_init_data){
   1095			.name = "gcc_pcie_rchng_phy_clk",
   1096			.parent_data = &(const struct clk_parent_data){
   1097				.hw = &gcc_pcie_rchng_phy_clk_src.clkr.hw,
   1098			},
   1099			.num_parents = 1,
   1100			.flags = CLK_SET_RATE_PARENT,
   1101			.ops = &clk_branch2_ops,
   1102		},
   1103	},
   1104};
   1105
   1106static struct clk_branch gcc_pcie_sleep_clk = {
   1107	.halt_reg = 0x43038,
   1108	.halt_check = BRANCH_HALT_VOTED,
   1109	.hwcg_reg = 0x43038,
   1110	.hwcg_bit = 1,
   1111	.clkr = {
   1112		.enable_reg = 0x6d010,
   1113		.enable_mask = BIT(6),
   1114		.hw.init = &(struct clk_init_data){
   1115			.name = "gcc_pcie_sleep_clk",
   1116			.parent_data = &(const struct clk_parent_data){
   1117				.hw = &gcc_pcie_aux_phy_clk_src.clkr.hw,
   1118			},
   1119			.num_parents = 1,
   1120			.flags = CLK_SET_RATE_PARENT,
   1121			.ops = &clk_branch2_ops,
   1122		},
   1123	},
   1124};
   1125
   1126static struct clk_branch gcc_pcie_slv_axi_clk = {
   1127	.halt_reg = 0x4301c,
   1128	.halt_check = BRANCH_HALT_VOTED,
   1129	.hwcg_reg = 0x4301c,
   1130	.hwcg_bit = 1,
   1131	.clkr = {
   1132		.enable_reg = 0x6d010,
   1133		.enable_mask = BIT(0),
   1134		.hw.init = &(struct clk_init_data){
   1135			.name = "gcc_pcie_slv_axi_clk",
   1136			.ops = &clk_branch2_ops,
   1137		},
   1138	},
   1139};
   1140
   1141static struct clk_branch gcc_pcie_slv_q2a_axi_clk = {
   1142	.halt_reg = 0x43018,
   1143	.halt_check = BRANCH_HALT_VOTED,
   1144	.hwcg_reg = 0x43018,
   1145	.hwcg_bit = 1,
   1146	.clkr = {
   1147		.enable_reg = 0x6d010,
   1148		.enable_mask = BIT(5),
   1149		.hw.init = &(struct clk_init_data){
   1150			.name = "gcc_pcie_slv_q2a_axi_clk",
   1151			.ops = &clk_branch2_ops,
   1152		},
   1153	},
   1154};
   1155
   1156static struct clk_branch gcc_pdm2_clk = {
   1157	.halt_reg = 0x2400c,
   1158	.halt_check = BRANCH_HALT,
   1159	.clkr = {
   1160		.enable_reg = 0x2400c,
   1161		.enable_mask = BIT(0),
   1162		.hw.init = &(struct clk_init_data){
   1163			.name = "gcc_pdm2_clk",
   1164			.parent_data = &(const struct clk_parent_data){
   1165				.hw = &gcc_pdm2_clk_src.clkr.hw,
   1166			},
   1167			.num_parents = 1,
   1168			.flags = CLK_SET_RATE_PARENT,
   1169			.ops = &clk_branch2_ops,
   1170		},
   1171	},
   1172};
   1173
   1174static struct clk_branch gcc_pdm_ahb_clk = {
   1175	.halt_reg = 0x24004,
   1176	.halt_check = BRANCH_HALT,
   1177	.hwcg_reg = 0x24004,
   1178	.hwcg_bit = 1,
   1179	.clkr = {
   1180		.enable_reg = 0x24004,
   1181		.enable_mask = BIT(0),
   1182		.hw.init = &(struct clk_init_data){
   1183			.name = "gcc_pdm_ahb_clk",
   1184			.ops = &clk_branch2_ops,
   1185		},
   1186	},
   1187};
   1188
   1189static struct clk_branch gcc_pdm_xo4_clk = {
   1190	.halt_reg = 0x24008,
   1191	.halt_check = BRANCH_HALT,
   1192	.clkr = {
   1193		.enable_reg = 0x24008,
   1194		.enable_mask = BIT(0),
   1195		.hw.init = &(struct clk_init_data){
   1196			.name = "gcc_pdm_xo4_clk",
   1197			.ops = &clk_branch2_ops,
   1198		},
   1199	},
   1200};
   1201
   1202static struct clk_branch gcc_rx1_usb2_clkref_en = {
   1203	.halt_reg = 0x88008,
   1204	.halt_check = BRANCH_HALT,
   1205	.clkr = {
   1206		.enable_reg = 0x88008,
   1207		.enable_mask = BIT(0),
   1208		.hw.init = &(struct clk_init_data){
   1209			.name = "gcc_rx1_usb2_clkref_en",
   1210			.ops = &clk_branch2_ops,
   1211		},
   1212	},
   1213};
   1214
   1215static struct clk_branch gcc_sdcc1_ahb_clk = {
   1216	.halt_reg = 0x1a00c,
   1217	.halt_check = BRANCH_HALT,
   1218	.clkr = {
   1219		.enable_reg = 0x1a00c,
   1220		.enable_mask = BIT(0),
   1221		.hw.init = &(struct clk_init_data){
   1222			.name = "gcc_sdcc1_ahb_clk",
   1223			.ops = &clk_branch2_ops,
   1224		},
   1225	},
   1226};
   1227
   1228static struct clk_branch gcc_sdcc1_apps_clk = {
   1229	.halt_reg = 0x1a004,
   1230	.halt_check = BRANCH_HALT,
   1231	.clkr = {
   1232		.enable_reg = 0x1a004,
   1233		.enable_mask = BIT(0),
   1234		.hw.init = &(struct clk_init_data){
   1235			.name = "gcc_sdcc1_apps_clk",
   1236			.parent_data = &(const struct clk_parent_data){
   1237				.hw = &gcc_sdcc1_apps_clk_src.clkr.hw,
   1238			},
   1239			.num_parents = 1,
   1240			.flags = CLK_SET_RATE_PARENT,
   1241			.ops = &clk_branch2_ops,
   1242		},
   1243	},
   1244};
   1245
   1246static struct clk_branch gcc_usb30_master_clk = {
   1247	.halt_reg = 0x17018,
   1248	.halt_check = BRANCH_HALT,
   1249	.clkr = {
   1250		.enable_reg = 0x17018,
   1251		.enable_mask = BIT(0),
   1252		.hw.init = &(struct clk_init_data){
   1253			.name = "gcc_usb30_master_clk",
   1254			.parent_data = &(const struct clk_parent_data){
   1255				.hw = &gcc_usb30_master_clk_src.clkr.hw,
   1256			},
   1257			.num_parents = 1,
   1258			.flags = CLK_SET_RATE_PARENT,
   1259			.ops = &clk_branch2_ops,
   1260		},
   1261	},
   1262};
   1263
   1264static struct clk_branch gcc_usb30_mock_utmi_clk = {
   1265	.halt_reg = 0x1702c,
   1266	.halt_check = BRANCH_HALT,
   1267	.clkr = {
   1268		.enable_reg = 0x1702c,
   1269		.enable_mask = BIT(0),
   1270		.hw.init = &(struct clk_init_data){
   1271			.name = "gcc_usb30_mock_utmi_clk",
   1272			.parent_data = &(const struct clk_parent_data){
   1273				.hw =
   1274					&gcc_usb30_mock_utmi_postdiv_clk_src.clkr.hw,
   1275			},
   1276			.num_parents = 1,
   1277			.flags = CLK_SET_RATE_PARENT,
   1278			.ops = &clk_branch2_ops,
   1279		},
   1280	},
   1281};
   1282
   1283static struct clk_branch gcc_usb30_mstr_axi_clk = {
   1284	.halt_reg = 0x17020,
   1285	.halt_check = BRANCH_HALT,
   1286	.clkr = {
   1287		.enable_reg = 0x17020,
   1288		.enable_mask = BIT(0),
   1289		.hw.init = &(struct clk_init_data){
   1290			.name = "gcc_usb30_mstr_axi_clk",
   1291			.ops = &clk_branch2_ops,
   1292		},
   1293	},
   1294};
   1295
   1296static struct clk_branch gcc_usb30_sleep_clk = {
   1297	.halt_reg = 0x17028,
   1298	.halt_check = BRANCH_HALT,
   1299	.clkr = {
   1300		.enable_reg = 0x17028,
   1301		.enable_mask = BIT(0),
   1302		.hw.init = &(struct clk_init_data){
   1303			.name = "gcc_usb30_sleep_clk",
   1304			.ops = &clk_branch2_ops,
   1305		},
   1306	},
   1307};
   1308
   1309static struct clk_branch gcc_usb30_slv_ahb_clk = {
   1310	.halt_reg = 0x17024,
   1311	.halt_check = BRANCH_HALT,
   1312	.clkr = {
   1313		.enable_reg = 0x17024,
   1314		.enable_mask = BIT(0),
   1315		.hw.init = &(struct clk_init_data){
   1316			.name = "gcc_usb30_slv_ahb_clk",
   1317			.ops = &clk_branch2_ops,
   1318		},
   1319	},
   1320};
   1321
   1322static struct clk_branch gcc_usb3_phy_aux_clk = {
   1323	.halt_reg = 0x17064,
   1324	.halt_check = BRANCH_HALT,
   1325	.clkr = {
   1326		.enable_reg = 0x17064,
   1327		.enable_mask = BIT(0),
   1328		.hw.init = &(struct clk_init_data){
   1329			.name = "gcc_usb3_phy_aux_clk",
   1330			.parent_data = &(const struct clk_parent_data){
   1331				.hw = &gcc_usb3_phy_aux_clk_src.clkr.hw,
   1332			},
   1333			.num_parents = 1,
   1334			.flags = CLK_SET_RATE_PARENT,
   1335			.ops = &clk_branch2_ops,
   1336		},
   1337	},
   1338};
   1339
   1340static struct gdsc usb30_gdsc = {
   1341	.gdscr = 0x17004,
   1342	.pd = {
   1343		.name = "usb30_gdsc",
   1344	},
   1345	.pwrsts = PWRSTS_OFF_ON,
   1346};
   1347
   1348static struct gdsc pcie_gdsc = {
   1349	.gdscr = 0x43004,
   1350	.pd = {
   1351		.name = "pcie_gdsc",
   1352	},
   1353	.pwrsts = PWRSTS_OFF_ON,
   1354};
   1355
   1356static struct clk_branch gcc_usb3_phy_pipe_clk = {
   1357	.halt_reg = 0x17068,
   1358	/*
   1359	 * The clock controller does not handle the status bit for
   1360	 * the clocks with gdscs(powerdomains) in hw controlled mode
   1361	 * and hence avoid checking for the status bit of those clocks
   1362	 * by setting the BRANCH_HALT_DELAY flag
   1363	 */
   1364	.halt_check = BRANCH_HALT_DELAY,
   1365	.hwcg_reg = 0x17068,
   1366	.hwcg_bit = 1,
   1367	.clkr = {
   1368		.enable_reg = 0x17068,
   1369		.enable_mask = BIT(0),
   1370		.hw.init = &(struct clk_init_data){
   1371			.name = "gcc_usb3_phy_pipe_clk",
   1372			.parent_data = &(const struct clk_parent_data){
   1373				.hw = &gcc_usb3_phy_pipe_clk_src.clkr.hw,
   1374			},
   1375			.num_parents = 1,
   1376			.flags = CLK_SET_RATE_PARENT,
   1377			.ops = &clk_branch2_ops,
   1378		},
   1379	},
   1380};
   1381
   1382static struct clk_branch gcc_usb3_prim_clkref_en = {
   1383	.halt_reg = 0x88000,
   1384	.halt_check = BRANCH_HALT,
   1385	.clkr = {
   1386		.enable_reg = 0x88000,
   1387		.enable_mask = BIT(0),
   1388		.hw.init = &(struct clk_init_data){
   1389			.name = "gcc_usb3_prim_clkref_en",
   1390			.ops = &clk_branch2_ops,
   1391		},
   1392	},
   1393};
   1394
   1395static struct clk_branch gcc_usb_phy_cfg_ahb2phy_clk = {
   1396	.halt_reg = 0x19008,
   1397	.halt_check = BRANCH_HALT,
   1398	.hwcg_reg = 0x19008,
   1399	.hwcg_bit = 1,
   1400	.clkr = {
   1401		.enable_reg = 0x19008,
   1402		.enable_mask = BIT(0),
   1403		.hw.init = &(struct clk_init_data){
   1404			.name = "gcc_usb_phy_cfg_ahb2phy_clk",
   1405			.ops = &clk_branch2_ops,
   1406		},
   1407	},
   1408};
   1409
   1410static struct clk_branch gcc_xo_div4_clk = {
   1411	.halt_reg = 0x2e010,
   1412	.halt_check = BRANCH_HALT,
   1413	.clkr = {
   1414		.enable_reg = 0x2e010,
   1415		.enable_mask = BIT(0),
   1416		.hw.init = &(struct clk_init_data){
   1417			.name = "gcc_xo_div4_clk",
   1418			.ops = &clk_branch2_ops,
   1419		},
   1420	},
   1421};
   1422
   1423static struct clk_branch gcc_xo_pcie_link_clk = {
   1424	.halt_reg = 0x2e008,
   1425	.halt_check = BRANCH_HALT,
   1426	.hwcg_reg = 0x2e008,
   1427	.hwcg_bit = 1,
   1428	.clkr = {
   1429		.enable_reg = 0x2e008,
   1430		.enable_mask = BIT(0),
   1431		.hw.init = &(struct clk_init_data){
   1432			.name = "gcc_xo_pcie_link_clk",
   1433			.ops = &clk_branch2_ops,
   1434		},
   1435	},
   1436};
   1437
   1438static struct clk_regmap *gcc_sdx65_clocks[] = {
   1439	[GCC_AHB_PCIE_LINK_CLK] = &gcc_ahb_pcie_link_clk.clkr,
   1440	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
   1441	[GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
   1442	[GCC_BLSP1_QUP1_I2C_APPS_CLK_SRC] = &gcc_blsp1_qup1_i2c_apps_clk_src.clkr,
   1443	[GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
   1444	[GCC_BLSP1_QUP1_SPI_APPS_CLK_SRC] = &gcc_blsp1_qup1_spi_apps_clk_src.clkr,
   1445	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
   1446	[GCC_BLSP1_QUP2_I2C_APPS_CLK_SRC] = &gcc_blsp1_qup2_i2c_apps_clk_src.clkr,
   1447	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
   1448	[GCC_BLSP1_QUP2_SPI_APPS_CLK_SRC] = &gcc_blsp1_qup2_spi_apps_clk_src.clkr,
   1449	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
   1450	[GCC_BLSP1_QUP3_I2C_APPS_CLK_SRC] = &gcc_blsp1_qup3_i2c_apps_clk_src.clkr,
   1451	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
   1452	[GCC_BLSP1_QUP3_SPI_APPS_CLK_SRC] = &gcc_blsp1_qup3_spi_apps_clk_src.clkr,
   1453	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
   1454	[GCC_BLSP1_QUP4_I2C_APPS_CLK_SRC] = &gcc_blsp1_qup4_i2c_apps_clk_src.clkr,
   1455	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
   1456	[GCC_BLSP1_QUP4_SPI_APPS_CLK_SRC] = &gcc_blsp1_qup4_spi_apps_clk_src.clkr,
   1457	[GCC_BLSP1_SLEEP_CLK] = &gcc_blsp1_sleep_clk.clkr,
   1458	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
   1459	[GCC_BLSP1_UART1_APPS_CLK_SRC] = &gcc_blsp1_uart1_apps_clk_src.clkr,
   1460	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
   1461	[GCC_BLSP1_UART2_APPS_CLK_SRC] = &gcc_blsp1_uart2_apps_clk_src.clkr,
   1462	[GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
   1463	[GCC_BLSP1_UART3_APPS_CLK_SRC] = &gcc_blsp1_uart3_apps_clk_src.clkr,
   1464	[GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
   1465	[GCC_BLSP1_UART4_APPS_CLK_SRC] = &gcc_blsp1_uart4_apps_clk_src.clkr,
   1466	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
   1467	[GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr,
   1468	[GCC_CPUSS_AHB_POSTDIV_CLK_SRC] = &gcc_cpuss_ahb_postdiv_clk_src.clkr,
   1469	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
   1470	[GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
   1471	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
   1472	[GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
   1473	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
   1474	[GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
   1475	[GCC_PCIE_0_CLKREF_EN] = &gcc_pcie_0_clkref_en.clkr,
   1476	[GCC_PCIE_AUX_CLK] = &gcc_pcie_aux_clk.clkr,
   1477	[GCC_PCIE_AUX_CLK_SRC] = &gcc_pcie_aux_clk_src.clkr,
   1478	[GCC_PCIE_AUX_PHY_CLK_SRC] = &gcc_pcie_aux_phy_clk_src.clkr,
   1479	[GCC_PCIE_CFG_AHB_CLK] = &gcc_pcie_cfg_ahb_clk.clkr,
   1480	[GCC_PCIE_MSTR_AXI_CLK] = &gcc_pcie_mstr_axi_clk.clkr,
   1481	[GCC_PCIE_PIPE_CLK] = &gcc_pcie_pipe_clk.clkr,
   1482	[GCC_PCIE_PIPE_CLK_SRC] = &gcc_pcie_pipe_clk_src.clkr,
   1483	[GCC_PCIE_RCHNG_PHY_CLK] = &gcc_pcie_rchng_phy_clk.clkr,
   1484	[GCC_PCIE_RCHNG_PHY_CLK_SRC] = &gcc_pcie_rchng_phy_clk_src.clkr,
   1485	[GCC_PCIE_SLEEP_CLK] = &gcc_pcie_sleep_clk.clkr,
   1486	[GCC_PCIE_SLV_AXI_CLK] = &gcc_pcie_slv_axi_clk.clkr,
   1487	[GCC_PCIE_SLV_Q2A_AXI_CLK] = &gcc_pcie_slv_q2a_axi_clk.clkr,
   1488	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
   1489	[GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
   1490	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
   1491	[GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
   1492	[GCC_RX1_USB2_CLKREF_EN] = &gcc_rx1_usb2_clkref_en.clkr,
   1493	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
   1494	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
   1495	[GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,
   1496	[GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
   1497	[GCC_USB30_MASTER_CLK_SRC] = &gcc_usb30_master_clk_src.clkr,
   1498	[GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
   1499	[GCC_USB30_MOCK_UTMI_CLK_SRC] = &gcc_usb30_mock_utmi_clk_src.clkr,
   1500	[GCC_USB30_MOCK_UTMI_POSTDIV_CLK_SRC] =	&gcc_usb30_mock_utmi_postdiv_clk_src.clkr,
   1501	[GCC_USB30_MSTR_AXI_CLK] = &gcc_usb30_mstr_axi_clk.clkr,
   1502	[GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,
   1503	[GCC_USB30_SLV_AHB_CLK] = &gcc_usb30_slv_ahb_clk.clkr,
   1504	[GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr,
   1505	[GCC_USB3_PHY_AUX_CLK_SRC] = &gcc_usb3_phy_aux_clk_src.clkr,
   1506	[GCC_USB3_PHY_PIPE_CLK] = &gcc_usb3_phy_pipe_clk.clkr,
   1507	[GCC_USB3_PHY_PIPE_CLK_SRC] = &gcc_usb3_phy_pipe_clk_src.clkr,
   1508	[GCC_USB3_PRIM_CLKREF_EN] = &gcc_usb3_prim_clkref_en.clkr,
   1509	[GCC_USB_PHY_CFG_AHB2PHY_CLK] = &gcc_usb_phy_cfg_ahb2phy_clk.clkr,
   1510	[GCC_XO_DIV4_CLK] = &gcc_xo_div4_clk.clkr,
   1511	[GCC_XO_PCIE_LINK_CLK] = &gcc_xo_pcie_link_clk.clkr,
   1512	[GPLL0] = &gpll0.clkr,
   1513	[GPLL0_OUT_EVEN] = &gpll0_out_even.clkr,
   1514};
   1515
   1516static const struct qcom_reset_map gcc_sdx65_resets[] = {
   1517	[GCC_BLSP1_QUP1_BCR] = { 0x1c000 },
   1518	[GCC_BLSP1_QUP2_BCR] = { 0x1e000 },
   1519	[GCC_BLSP1_QUP3_BCR] = { 0x20000 },
   1520	[GCC_BLSP1_QUP4_BCR] = { 0x22000 },
   1521	[GCC_BLSP1_UART1_BCR] = { 0x1d000 },
   1522	[GCC_BLSP1_UART2_BCR] = { 0x1f000 },
   1523	[GCC_BLSP1_UART3_BCR] = { 0x21000 },
   1524	[GCC_BLSP1_UART4_BCR] = { 0x23000 },
   1525	[GCC_PCIE_BCR] = { 0x43000 },
   1526	[GCC_PCIE_LINK_DOWN_BCR] = { 0x77000 },
   1527	[GCC_PCIE_NOCSR_COM_PHY_BCR] = { 0x78008 },
   1528	[GCC_PCIE_PHY_BCR] = { 0x44000 },
   1529	[GCC_PCIE_PHY_CFG_AHB_BCR] = { 0x78000 },
   1530	[GCC_PCIE_PHY_COM_BCR] = { 0x78004 },
   1531	[GCC_PCIE_PHY_NOCSR_COM_PHY_BCR] = { 0x7800c },
   1532	[GCC_PDM_BCR] = { 0x24000 },
   1533	[GCC_QUSB2PHY_BCR] = { 0x19000 },
   1534	[GCC_SDCC1_BCR] = { 0x1a000 },
   1535	[GCC_TCSR_PCIE_BCR] = { 0x57000 },
   1536	[GCC_USB30_BCR] = { 0x17000 },
   1537	[GCC_USB3_PHY_BCR] = { 0x18000 },
   1538	[GCC_USB3PHY_PHY_BCR] = { 0x18004 },
   1539	[GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x19004 },
   1540};
   1541
   1542static struct gdsc *gcc_sdx65_gdscs[] = {
   1543	[USB30_GDSC] = &usb30_gdsc,
   1544	[PCIE_GDSC] = &pcie_gdsc,
   1545};
   1546
   1547static const struct regmap_config gcc_sdx65_regmap_config = {
   1548	.reg_bits = 32,
   1549	.reg_stride = 4,
   1550	.val_bits = 32,
   1551	.max_register = 0x1f101c,
   1552	.fast_io = true,
   1553};
   1554
   1555static const struct qcom_cc_desc gcc_sdx65_desc = {
   1556	.config = &gcc_sdx65_regmap_config,
   1557	.clks = gcc_sdx65_clocks,
   1558	.num_clks = ARRAY_SIZE(gcc_sdx65_clocks),
   1559	.resets = gcc_sdx65_resets,
   1560	.num_resets = ARRAY_SIZE(gcc_sdx65_resets),
   1561	.gdscs = gcc_sdx65_gdscs,
   1562	.num_gdscs = ARRAY_SIZE(gcc_sdx65_gdscs),
   1563};
   1564
   1565static const struct of_device_id gcc_sdx65_match_table[] = {
   1566	{ .compatible = "qcom,gcc-sdx65" },
   1567	{ }
   1568};
   1569MODULE_DEVICE_TABLE(of, gcc_sdx65_match_table);
   1570
   1571static int gcc_sdx65_probe(struct platform_device *pdev)
   1572{
   1573	struct regmap *regmap;
   1574
   1575	regmap = qcom_cc_map(pdev, &gcc_sdx65_desc);
   1576	if (IS_ERR(regmap))
   1577		return PTR_ERR(regmap);
   1578	/*
   1579	 * Keep the clocks always-ON as they are critical to the functioning
   1580	 * of the system:
   1581	 * GCC_SYS_NOC_CPUSS_AHB_CLK, GCC_CPUSS_AHB_CLK, GCC_CPUSS_GNOC_CLK
   1582	 */
   1583	regmap_update_bits(regmap, 0x6d008, BIT(0), BIT(0));
   1584	regmap_update_bits(regmap, 0x6d008, BIT(21), BIT(21));
   1585	regmap_update_bits(regmap, 0x6d008, BIT(22), BIT(22));
   1586
   1587	return qcom_cc_really_probe(pdev, &gcc_sdx65_desc, regmap);
   1588}
   1589
   1590static struct platform_driver gcc_sdx65_driver = {
   1591	.probe = gcc_sdx65_probe,
   1592	.driver = {
   1593		.name = "gcc-sdx65",
   1594		.of_match_table = gcc_sdx65_match_table,
   1595	},
   1596};
   1597
   1598static int __init gcc_sdx65_init(void)
   1599{
   1600	return platform_driver_register(&gcc_sdx65_driver);
   1601}
   1602subsys_initcall(gcc_sdx65_init);
   1603
   1604static void __exit gcc_sdx65_exit(void)
   1605{
   1606	platform_driver_unregister(&gcc_sdx65_driver);
   1607}
   1608module_exit(gcc_sdx65_exit);
   1609
   1610MODULE_DESCRIPTION("QTI GCC SDX65 Driver");
   1611MODULE_LICENSE("GPL v2");