1*a4f780cdSTaniya Das // SPDX-License-Identifier: GPL-2.0-only 2*a4f780cdSTaniya Das /* 3*a4f780cdSTaniya Das * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. 4*a4f780cdSTaniya Das */ 5*a4f780cdSTaniya Das 6*a4f780cdSTaniya Das #include <linux/clk-provider.h> 7*a4f780cdSTaniya Das #include <linux/mod_devicetable.h> 8*a4f780cdSTaniya Das #include <linux/module.h> 9*a4f780cdSTaniya Das #include <linux/platform_device.h> 10*a4f780cdSTaniya Das #include <linux/regmap.h> 11*a4f780cdSTaniya Das 12*a4f780cdSTaniya Das #include <dt-bindings/clock/qcom,nord-nwgcc.h> 13*a4f780cdSTaniya Das 14*a4f780cdSTaniya Das #include "clk-alpha-pll.h" 15*a4f780cdSTaniya Das #include "clk-branch.h" 16*a4f780cdSTaniya Das #include "clk-pll.h" 17*a4f780cdSTaniya Das #include "clk-rcg.h" 18*a4f780cdSTaniya Das #include "clk-regmap.h" 19*a4f780cdSTaniya Das #include "clk-regmap-divider.h" 20*a4f780cdSTaniya Das #include "clk-regmap-mux.h" 21*a4f780cdSTaniya Das #include "common.h" 22*a4f780cdSTaniya Das #include "reset.h" 23*a4f780cdSTaniya Das 24*a4f780cdSTaniya Das enum { 25*a4f780cdSTaniya Das DT_BI_TCXO, 26*a4f780cdSTaniya Das DT_SLEEP_CLK, 27*a4f780cdSTaniya Das }; 28*a4f780cdSTaniya Das 29*a4f780cdSTaniya Das enum { 30*a4f780cdSTaniya Das P_BI_TCXO, 31*a4f780cdSTaniya Das P_NW_GCC_GPLL0_OUT_EVEN, 32*a4f780cdSTaniya Das P_NW_GCC_GPLL0_OUT_MAIN, 33*a4f780cdSTaniya Das P_SLEEP_CLK, 34*a4f780cdSTaniya Das }; 35*a4f780cdSTaniya Das 36*a4f780cdSTaniya Das static struct clk_alpha_pll nw_gcc_gpll0 = { 37*a4f780cdSTaniya Das .offset = 0x0, 38*a4f780cdSTaniya Das .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE], 39*a4f780cdSTaniya Das .clkr = { 40*a4f780cdSTaniya Das .enable_reg = 0x0, 41*a4f780cdSTaniya Das .enable_mask = BIT(0), 42*a4f780cdSTaniya Das .hw.init = &(const struct clk_init_data) { 43*a4f780cdSTaniya Das .name = "nw_gcc_gpll0", 44*a4f780cdSTaniya Das .parent_data = &(const struct clk_parent_data) { 45*a4f780cdSTaniya Das .index = DT_BI_TCXO, 46*a4f780cdSTaniya Das }, 47*a4f780cdSTaniya Das .num_parents = 1, 48*a4f780cdSTaniya Das .ops = &clk_alpha_pll_fixed_lucid_ole_ops, 49*a4f780cdSTaniya Das }, 50*a4f780cdSTaniya Das }, 51*a4f780cdSTaniya Das }; 52*a4f780cdSTaniya Das 53*a4f780cdSTaniya Das static const struct clk_div_table post_div_table_nw_gcc_gpll0_out_even[] = { 54*a4f780cdSTaniya Das { 0x1, 2 }, 55*a4f780cdSTaniya Das { } 56*a4f780cdSTaniya Das }; 57*a4f780cdSTaniya Das 58*a4f780cdSTaniya Das static struct clk_alpha_pll_postdiv nw_gcc_gpll0_out_even = { 59*a4f780cdSTaniya Das .offset = 0x0, 60*a4f780cdSTaniya Das .post_div_shift = 10, 61*a4f780cdSTaniya Das .post_div_table = post_div_table_nw_gcc_gpll0_out_even, 62*a4f780cdSTaniya Das .num_post_div = ARRAY_SIZE(post_div_table_nw_gcc_gpll0_out_even), 63*a4f780cdSTaniya Das .width = 4, 64*a4f780cdSTaniya Das .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE], 65*a4f780cdSTaniya Das .clkr.hw.init = &(const struct clk_init_data) { 66*a4f780cdSTaniya Das .name = "nw_gcc_gpll0_out_even", 67*a4f780cdSTaniya Das .parent_hws = (const struct clk_hw*[]) { 68*a4f780cdSTaniya Das &nw_gcc_gpll0.clkr.hw, 69*a4f780cdSTaniya Das }, 70*a4f780cdSTaniya Das .num_parents = 1, 71*a4f780cdSTaniya Das .ops = &clk_alpha_pll_postdiv_lucid_ole_ops, 72*a4f780cdSTaniya Das }, 73*a4f780cdSTaniya Das }; 74*a4f780cdSTaniya Das 75*a4f780cdSTaniya Das static const struct parent_map nw_gcc_parent_map_0[] = { 76*a4f780cdSTaniya Das { P_BI_TCXO, 0 }, 77*a4f780cdSTaniya Das { P_NW_GCC_GPLL0_OUT_MAIN, 1 }, 78*a4f780cdSTaniya Das { P_SLEEP_CLK, 5 }, 79*a4f780cdSTaniya Das { P_NW_GCC_GPLL0_OUT_EVEN, 6 }, 80*a4f780cdSTaniya Das }; 81*a4f780cdSTaniya Das 82*a4f780cdSTaniya Das static const struct clk_parent_data nw_gcc_parent_data_0[] = { 83*a4f780cdSTaniya Das { .index = DT_BI_TCXO }, 84*a4f780cdSTaniya Das { .hw = &nw_gcc_gpll0.clkr.hw }, 85*a4f780cdSTaniya Das { .index = DT_SLEEP_CLK }, 86*a4f780cdSTaniya Das { .hw = &nw_gcc_gpll0_out_even.clkr.hw }, 87*a4f780cdSTaniya Das }; 88*a4f780cdSTaniya Das 89*a4f780cdSTaniya Das static const struct freq_tbl ftbl_nw_gcc_gp1_clk_src[] = { 90*a4f780cdSTaniya Das F(60000000, P_NW_GCC_GPLL0_OUT_MAIN, 10, 0, 0), 91*a4f780cdSTaniya Das F(100000000, P_NW_GCC_GPLL0_OUT_MAIN, 6, 0, 0), 92*a4f780cdSTaniya Das F(200000000, P_NW_GCC_GPLL0_OUT_MAIN, 3, 0, 0), 93*a4f780cdSTaniya Das { } 94*a4f780cdSTaniya Das }; 95*a4f780cdSTaniya Das 96*a4f780cdSTaniya Das static struct clk_rcg2 nw_gcc_gp1_clk_src = { 97*a4f780cdSTaniya Das .cmd_rcgr = 0x20004, 98*a4f780cdSTaniya Das .mnd_width = 16, 99*a4f780cdSTaniya Das .hid_width = 5, 100*a4f780cdSTaniya Das .parent_map = nw_gcc_parent_map_0, 101*a4f780cdSTaniya Das .freq_tbl = ftbl_nw_gcc_gp1_clk_src, 102*a4f780cdSTaniya Das .hw_clk_ctrl = true, 103*a4f780cdSTaniya Das .clkr.hw.init = &(const struct clk_init_data) { 104*a4f780cdSTaniya Das .name = "nw_gcc_gp1_clk_src", 105*a4f780cdSTaniya Das .parent_data = nw_gcc_parent_data_0, 106*a4f780cdSTaniya Das .num_parents = ARRAY_SIZE(nw_gcc_parent_data_0), 107*a4f780cdSTaniya Das .flags = CLK_SET_RATE_PARENT, 108*a4f780cdSTaniya Das .ops = &clk_rcg2_shared_ops, 109*a4f780cdSTaniya Das }, 110*a4f780cdSTaniya Das }; 111*a4f780cdSTaniya Das 112*a4f780cdSTaniya Das static struct clk_rcg2 nw_gcc_gp2_clk_src = { 113*a4f780cdSTaniya Das .cmd_rcgr = 0x21004, 114*a4f780cdSTaniya Das .mnd_width = 16, 115*a4f780cdSTaniya Das .hid_width = 5, 116*a4f780cdSTaniya Das .parent_map = nw_gcc_parent_map_0, 117*a4f780cdSTaniya Das .freq_tbl = ftbl_nw_gcc_gp1_clk_src, 118*a4f780cdSTaniya Das .hw_clk_ctrl = true, 119*a4f780cdSTaniya Das .clkr.hw.init = &(const struct clk_init_data) { 120*a4f780cdSTaniya Das .name = "nw_gcc_gp2_clk_src", 121*a4f780cdSTaniya Das .parent_data = nw_gcc_parent_data_0, 122*a4f780cdSTaniya Das .num_parents = ARRAY_SIZE(nw_gcc_parent_data_0), 123*a4f780cdSTaniya Das .flags = CLK_SET_RATE_PARENT, 124*a4f780cdSTaniya Das .ops = &clk_rcg2_shared_ops, 125*a4f780cdSTaniya Das }, 126*a4f780cdSTaniya Das }; 127*a4f780cdSTaniya Das 128*a4f780cdSTaniya Das static struct clk_branch nw_gcc_acmu_mux_clk = { 129*a4f780cdSTaniya Das .halt_reg = 0x1f01c, 130*a4f780cdSTaniya Das .halt_check = BRANCH_HALT, 131*a4f780cdSTaniya Das .clkr = { 132*a4f780cdSTaniya Das .enable_reg = 0x1f01c, 133*a4f780cdSTaniya Das .enable_mask = BIT(0), 134*a4f780cdSTaniya Das .hw.init = &(const struct clk_init_data) { 135*a4f780cdSTaniya Das .name = "nw_gcc_acmu_mux_clk", 136*a4f780cdSTaniya Das .ops = &clk_branch2_ops, 137*a4f780cdSTaniya Das }, 138*a4f780cdSTaniya Das }, 139*a4f780cdSTaniya Das }; 140*a4f780cdSTaniya Das 141*a4f780cdSTaniya Das static struct clk_branch nw_gcc_camera_hf_axi_clk = { 142*a4f780cdSTaniya Das .halt_reg = 0x16008, 143*a4f780cdSTaniya Das .halt_check = BRANCH_HALT_SKIP, 144*a4f780cdSTaniya Das .hwcg_reg = 0x16008, 145*a4f780cdSTaniya Das .hwcg_bit = 1, 146*a4f780cdSTaniya Das .clkr = { 147*a4f780cdSTaniya Das .enable_reg = 0x16008, 148*a4f780cdSTaniya Das .enable_mask = BIT(0), 149*a4f780cdSTaniya Das .hw.init = &(const struct clk_init_data) { 150*a4f780cdSTaniya Das .name = "nw_gcc_camera_hf_axi_clk", 151*a4f780cdSTaniya Das .ops = &clk_branch2_ops, 152*a4f780cdSTaniya Das }, 153*a4f780cdSTaniya Das }, 154*a4f780cdSTaniya Das }; 155*a4f780cdSTaniya Das 156*a4f780cdSTaniya Das static struct clk_branch nw_gcc_camera_sf_axi_clk = { 157*a4f780cdSTaniya Das .halt_reg = 0x1601c, 158*a4f780cdSTaniya Das .halt_check = BRANCH_HALT_SKIP, 159*a4f780cdSTaniya Das .hwcg_reg = 0x1601c, 160*a4f780cdSTaniya Das .hwcg_bit = 1, 161*a4f780cdSTaniya Das .clkr = { 162*a4f780cdSTaniya Das .enable_reg = 0x1601c, 163*a4f780cdSTaniya Das .enable_mask = BIT(0), 164*a4f780cdSTaniya Das .hw.init = &(const struct clk_init_data) { 165*a4f780cdSTaniya Das .name = "nw_gcc_camera_sf_axi_clk", 166*a4f780cdSTaniya Das .ops = &clk_branch2_ops, 167*a4f780cdSTaniya Das }, 168*a4f780cdSTaniya Das }, 169*a4f780cdSTaniya Das }; 170*a4f780cdSTaniya Das 171*a4f780cdSTaniya Das static struct clk_branch nw_gcc_camera_trig_clk = { 172*a4f780cdSTaniya Das .halt_reg = 0x16034, 173*a4f780cdSTaniya Das .halt_check = BRANCH_HALT_VOTED, 174*a4f780cdSTaniya Das .hwcg_reg = 0x16034, 175*a4f780cdSTaniya Das .hwcg_bit = 1, 176*a4f780cdSTaniya Das .clkr = { 177*a4f780cdSTaniya Das .enable_reg = 0x16034, 178*a4f780cdSTaniya Das .enable_mask = BIT(0), 179*a4f780cdSTaniya Das .hw.init = &(const struct clk_init_data) { 180*a4f780cdSTaniya Das .name = "nw_gcc_camera_trig_clk", 181*a4f780cdSTaniya Das .ops = &clk_branch2_ops, 182*a4f780cdSTaniya Das }, 183*a4f780cdSTaniya Das }, 184*a4f780cdSTaniya Das }; 185*a4f780cdSTaniya Das 186*a4f780cdSTaniya Das static struct clk_branch nw_gcc_disp_0_hf_axi_clk = { 187*a4f780cdSTaniya Das .halt_reg = 0x18008, 188*a4f780cdSTaniya Das .halt_check = BRANCH_HALT_SKIP, 189*a4f780cdSTaniya Das .hwcg_reg = 0x18008, 190*a4f780cdSTaniya Das .hwcg_bit = 1, 191*a4f780cdSTaniya Das .clkr = { 192*a4f780cdSTaniya Das .enable_reg = 0x18008, 193*a4f780cdSTaniya Das .enable_mask = BIT(0), 194*a4f780cdSTaniya Das .hw.init = &(const struct clk_init_data) { 195*a4f780cdSTaniya Das .name = "nw_gcc_disp_0_hf_axi_clk", 196*a4f780cdSTaniya Das .ops = &clk_branch2_ops, 197*a4f780cdSTaniya Das }, 198*a4f780cdSTaniya Das }, 199*a4f780cdSTaniya Das }; 200*a4f780cdSTaniya Das 201*a4f780cdSTaniya Das static struct clk_branch nw_gcc_disp_0_trig_clk = { 202*a4f780cdSTaniya Das .halt_reg = 0x1801c, 203*a4f780cdSTaniya Das .halt_check = BRANCH_HALT_VOTED, 204*a4f780cdSTaniya Das .hwcg_reg = 0x1801c, 205*a4f780cdSTaniya Das .hwcg_bit = 1, 206*a4f780cdSTaniya Das .clkr = { 207*a4f780cdSTaniya Das .enable_reg = 0x1801c, 208*a4f780cdSTaniya Das .enable_mask = BIT(0), 209*a4f780cdSTaniya Das .hw.init = &(const struct clk_init_data) { 210*a4f780cdSTaniya Das .name = "nw_gcc_disp_0_trig_clk", 211*a4f780cdSTaniya Das .ops = &clk_branch2_ops, 212*a4f780cdSTaniya Das }, 213*a4f780cdSTaniya Das }, 214*a4f780cdSTaniya Das }; 215*a4f780cdSTaniya Das 216*a4f780cdSTaniya Das static struct clk_branch nw_gcc_disp_1_hf_axi_clk = { 217*a4f780cdSTaniya Das .halt_reg = 0x19008, 218*a4f780cdSTaniya Das .halt_check = BRANCH_HALT_SKIP, 219*a4f780cdSTaniya Das .hwcg_reg = 0x19008, 220*a4f780cdSTaniya Das .hwcg_bit = 1, 221*a4f780cdSTaniya Das .clkr = { 222*a4f780cdSTaniya Das .enable_reg = 0x19008, 223*a4f780cdSTaniya Das .enable_mask = BIT(0), 224*a4f780cdSTaniya Das .hw.init = &(const struct clk_init_data) { 225*a4f780cdSTaniya Das .name = "nw_gcc_disp_1_hf_axi_clk", 226*a4f780cdSTaniya Das .ops = &clk_branch2_ops, 227*a4f780cdSTaniya Das }, 228*a4f780cdSTaniya Das }, 229*a4f780cdSTaniya Das }; 230*a4f780cdSTaniya Das 231*a4f780cdSTaniya Das static struct clk_branch nw_gcc_disp_1_trig_clk = { 232*a4f780cdSTaniya Das .halt_reg = 0x1901c, 233*a4f780cdSTaniya Das .halt_check = BRANCH_HALT_VOTED, 234*a4f780cdSTaniya Das .hwcg_reg = 0x1901c, 235*a4f780cdSTaniya Das .hwcg_bit = 1, 236*a4f780cdSTaniya Das .clkr = { 237*a4f780cdSTaniya Das .enable_reg = 0x1901c, 238*a4f780cdSTaniya Das .enable_mask = BIT(0), 239*a4f780cdSTaniya Das .hw.init = &(const struct clk_init_data) { 240*a4f780cdSTaniya Das .name = "nw_gcc_disp_1_trig_clk", 241*a4f780cdSTaniya Das .ops = &clk_branch2_ops, 242*a4f780cdSTaniya Das }, 243*a4f780cdSTaniya Das }, 244*a4f780cdSTaniya Das }; 245*a4f780cdSTaniya Das 246*a4f780cdSTaniya Das static struct clk_branch nw_gcc_dprx0_axi_hf_clk = { 247*a4f780cdSTaniya Das .halt_reg = 0x29004, 248*a4f780cdSTaniya Das .halt_check = BRANCH_HALT_SKIP, 249*a4f780cdSTaniya Das .hwcg_reg = 0x29004, 250*a4f780cdSTaniya Das .hwcg_bit = 1, 251*a4f780cdSTaniya Das .clkr = { 252*a4f780cdSTaniya Das .enable_reg = 0x29004, 253*a4f780cdSTaniya Das .enable_mask = BIT(0), 254*a4f780cdSTaniya Das .hw.init = &(const struct clk_init_data) { 255*a4f780cdSTaniya Das .name = "nw_gcc_dprx0_axi_hf_clk", 256*a4f780cdSTaniya Das .ops = &clk_branch2_ops, 257*a4f780cdSTaniya Das }, 258*a4f780cdSTaniya Das }, 259*a4f780cdSTaniya Das }; 260*a4f780cdSTaniya Das 261*a4f780cdSTaniya Das static struct clk_branch nw_gcc_dprx1_axi_hf_clk = { 262*a4f780cdSTaniya Das .halt_reg = 0x2a004, 263*a4f780cdSTaniya Das .halt_check = BRANCH_HALT_SKIP, 264*a4f780cdSTaniya Das .hwcg_reg = 0x2a004, 265*a4f780cdSTaniya Das .hwcg_bit = 1, 266*a4f780cdSTaniya Das .clkr = { 267*a4f780cdSTaniya Das .enable_reg = 0x2a004, 268*a4f780cdSTaniya Das .enable_mask = BIT(0), 269*a4f780cdSTaniya Das .hw.init = &(const struct clk_init_data) { 270*a4f780cdSTaniya Das .name = "nw_gcc_dprx1_axi_hf_clk", 271*a4f780cdSTaniya Das .ops = &clk_branch2_ops, 272*a4f780cdSTaniya Das }, 273*a4f780cdSTaniya Das }, 274*a4f780cdSTaniya Das }; 275*a4f780cdSTaniya Das 276*a4f780cdSTaniya Das static struct clk_branch nw_gcc_eva_axi0_clk = { 277*a4f780cdSTaniya Das .halt_reg = 0x1b008, 278*a4f780cdSTaniya Das .halt_check = BRANCH_HALT_SKIP, 279*a4f780cdSTaniya Das .hwcg_reg = 0x1b008, 280*a4f780cdSTaniya Das .hwcg_bit = 1, 281*a4f780cdSTaniya Das .clkr = { 282*a4f780cdSTaniya Das .enable_reg = 0x1b008, 283*a4f780cdSTaniya Das .enable_mask = BIT(0), 284*a4f780cdSTaniya Das .hw.init = &(const struct clk_init_data) { 285*a4f780cdSTaniya Das .name = "nw_gcc_eva_axi0_clk", 286*a4f780cdSTaniya Das .ops = &clk_branch2_ops, 287*a4f780cdSTaniya Das }, 288*a4f780cdSTaniya Das }, 289*a4f780cdSTaniya Das }; 290*a4f780cdSTaniya Das 291*a4f780cdSTaniya Das static struct clk_branch nw_gcc_eva_axi0c_clk = { 292*a4f780cdSTaniya Das .halt_reg = 0x1b01c, 293*a4f780cdSTaniya Das .halt_check = BRANCH_HALT_SKIP, 294*a4f780cdSTaniya Das .hwcg_reg = 0x1b01c, 295*a4f780cdSTaniya Das .hwcg_bit = 1, 296*a4f780cdSTaniya Das .clkr = { 297*a4f780cdSTaniya Das .enable_reg = 0x1b01c, 298*a4f780cdSTaniya Das .enable_mask = BIT(0), 299*a4f780cdSTaniya Das .hw.init = &(const struct clk_init_data) { 300*a4f780cdSTaniya Das .name = "nw_gcc_eva_axi0c_clk", 301*a4f780cdSTaniya Das .ops = &clk_branch2_ops, 302*a4f780cdSTaniya Das }, 303*a4f780cdSTaniya Das }, 304*a4f780cdSTaniya Das }; 305*a4f780cdSTaniya Das 306*a4f780cdSTaniya Das static struct clk_branch nw_gcc_eva_trig_clk = { 307*a4f780cdSTaniya Das .halt_reg = 0x1b028, 308*a4f780cdSTaniya Das .halt_check = BRANCH_HALT_VOTED, 309*a4f780cdSTaniya Das .hwcg_reg = 0x1b028, 310*a4f780cdSTaniya Das .hwcg_bit = 1, 311*a4f780cdSTaniya Das .clkr = { 312*a4f780cdSTaniya Das .enable_reg = 0x1b028, 313*a4f780cdSTaniya Das .enable_mask = BIT(0), 314*a4f780cdSTaniya Das .hw.init = &(const struct clk_init_data) { 315*a4f780cdSTaniya Das .name = "nw_gcc_eva_trig_clk", 316*a4f780cdSTaniya Das .ops = &clk_branch2_ops, 317*a4f780cdSTaniya Das }, 318*a4f780cdSTaniya Das }, 319*a4f780cdSTaniya Das }; 320*a4f780cdSTaniya Das 321*a4f780cdSTaniya Das static struct clk_branch nw_gcc_frq_measure_ref_clk = { 322*a4f780cdSTaniya Das .halt_reg = 0x1f008, 323*a4f780cdSTaniya Das .halt_check = BRANCH_HALT, 324*a4f780cdSTaniya Das .clkr = { 325*a4f780cdSTaniya Das .enable_reg = 0x1f008, 326*a4f780cdSTaniya Das .enable_mask = BIT(0), 327*a4f780cdSTaniya Das .hw.init = &(const struct clk_init_data) { 328*a4f780cdSTaniya Das .name = "nw_gcc_frq_measure_ref_clk", 329*a4f780cdSTaniya Das .ops = &clk_branch2_ops, 330*a4f780cdSTaniya Das }, 331*a4f780cdSTaniya Das }, 332*a4f780cdSTaniya Das }; 333*a4f780cdSTaniya Das 334*a4f780cdSTaniya Das static struct clk_branch nw_gcc_gp1_clk = { 335*a4f780cdSTaniya Das .halt_reg = 0x20000, 336*a4f780cdSTaniya Das .halt_check = BRANCH_HALT, 337*a4f780cdSTaniya Das .clkr = { 338*a4f780cdSTaniya Das .enable_reg = 0x20000, 339*a4f780cdSTaniya Das .enable_mask = BIT(0), 340*a4f780cdSTaniya Das .hw.init = &(const struct clk_init_data) { 341*a4f780cdSTaniya Das .name = "nw_gcc_gp1_clk", 342*a4f780cdSTaniya Das .parent_hws = (const struct clk_hw*[]) { 343*a4f780cdSTaniya Das &nw_gcc_gp1_clk_src.clkr.hw, 344*a4f780cdSTaniya Das }, 345*a4f780cdSTaniya Das .num_parents = 1, 346*a4f780cdSTaniya Das .flags = CLK_SET_RATE_PARENT, 347*a4f780cdSTaniya Das .ops = &clk_branch2_ops, 348*a4f780cdSTaniya Das }, 349*a4f780cdSTaniya Das }, 350*a4f780cdSTaniya Das }; 351*a4f780cdSTaniya Das 352*a4f780cdSTaniya Das static struct clk_branch nw_gcc_gp2_clk = { 353*a4f780cdSTaniya Das .halt_reg = 0x21000, 354*a4f780cdSTaniya Das .halt_check = BRANCH_HALT, 355*a4f780cdSTaniya Das .clkr = { 356*a4f780cdSTaniya Das .enable_reg = 0x21000, 357*a4f780cdSTaniya Das .enable_mask = BIT(0), 358*a4f780cdSTaniya Das .hw.init = &(const struct clk_init_data) { 359*a4f780cdSTaniya Das .name = "nw_gcc_gp2_clk", 360*a4f780cdSTaniya Das .parent_hws = (const struct clk_hw*[]) { 361*a4f780cdSTaniya Das &nw_gcc_gp2_clk_src.clkr.hw, 362*a4f780cdSTaniya Das }, 363*a4f780cdSTaniya Das .num_parents = 1, 364*a4f780cdSTaniya Das .flags = CLK_SET_RATE_PARENT, 365*a4f780cdSTaniya Das .ops = &clk_branch2_ops, 366*a4f780cdSTaniya Das }, 367*a4f780cdSTaniya Das }, 368*a4f780cdSTaniya Das }; 369*a4f780cdSTaniya Das 370*a4f780cdSTaniya Das static struct clk_branch nw_gcc_gpu_2_gpll0_clk_src = { 371*a4f780cdSTaniya Das .halt_reg = 0x24150, 372*a4f780cdSTaniya Das .halt_check = BRANCH_HALT_VOTED, 373*a4f780cdSTaniya Das .hwcg_reg = 0x24150, 374*a4f780cdSTaniya Das .hwcg_bit = 1, 375*a4f780cdSTaniya Das .clkr = { 376*a4f780cdSTaniya Das .enable_reg = 0x76000, 377*a4f780cdSTaniya Das .enable_mask = BIT(6), 378*a4f780cdSTaniya Das .hw.init = &(const struct clk_init_data) { 379*a4f780cdSTaniya Das .name = "nw_gcc_gpu_2_gpll0_clk_src", 380*a4f780cdSTaniya Das .parent_hws = (const struct clk_hw*[]) { 381*a4f780cdSTaniya Das &nw_gcc_gpll0.clkr.hw, 382*a4f780cdSTaniya Das }, 383*a4f780cdSTaniya Das .num_parents = 1, 384*a4f780cdSTaniya Das .flags = CLK_SET_RATE_PARENT, 385*a4f780cdSTaniya Das .ops = &clk_branch2_ops, 386*a4f780cdSTaniya Das }, 387*a4f780cdSTaniya Das }, 388*a4f780cdSTaniya Das }; 389*a4f780cdSTaniya Das 390*a4f780cdSTaniya Das static struct clk_branch nw_gcc_gpu_2_gpll0_div_clk_src = { 391*a4f780cdSTaniya Das .halt_reg = 0x24158, 392*a4f780cdSTaniya Das .halt_check = BRANCH_HALT_VOTED, 393*a4f780cdSTaniya Das .hwcg_reg = 0x24158, 394*a4f780cdSTaniya Das .hwcg_bit = 1, 395*a4f780cdSTaniya Das .clkr = { 396*a4f780cdSTaniya Das .enable_reg = 0x76000, 397*a4f780cdSTaniya Das .enable_mask = BIT(7), 398*a4f780cdSTaniya Das .hw.init = &(const struct clk_init_data) { 399*a4f780cdSTaniya Das .name = "nw_gcc_gpu_2_gpll0_div_clk_src", 400*a4f780cdSTaniya Das .parent_hws = (const struct clk_hw*[]) { 401*a4f780cdSTaniya Das &nw_gcc_gpll0_out_even.clkr.hw, 402*a4f780cdSTaniya Das }, 403*a4f780cdSTaniya Das .num_parents = 1, 404*a4f780cdSTaniya Das .flags = CLK_SET_RATE_PARENT, 405*a4f780cdSTaniya Das .ops = &clk_branch2_ops, 406*a4f780cdSTaniya Das }, 407*a4f780cdSTaniya Das }, 408*a4f780cdSTaniya Das }; 409*a4f780cdSTaniya Das 410*a4f780cdSTaniya Das static struct clk_branch nw_gcc_gpu_2_hscnoc_gfx_clk = { 411*a4f780cdSTaniya Das .halt_reg = 0x2400c, 412*a4f780cdSTaniya Das .halt_check = BRANCH_HALT_VOTED, 413*a4f780cdSTaniya Das .hwcg_reg = 0x2400c, 414*a4f780cdSTaniya Das .hwcg_bit = 1, 415*a4f780cdSTaniya Das .clkr = { 416*a4f780cdSTaniya Das .enable_reg = 0x2400c, 417*a4f780cdSTaniya Das .enable_mask = BIT(0), 418*a4f780cdSTaniya Das .hw.init = &(const struct clk_init_data) { 419*a4f780cdSTaniya Das .name = "nw_gcc_gpu_2_hscnoc_gfx_clk", 420*a4f780cdSTaniya Das .ops = &clk_branch2_ops, 421*a4f780cdSTaniya Das }, 422*a4f780cdSTaniya Das }, 423*a4f780cdSTaniya Das }; 424*a4f780cdSTaniya Das 425*a4f780cdSTaniya Das static struct clk_branch nw_gcc_gpu_gpll0_clk_src = { 426*a4f780cdSTaniya Das .halt_reg = 0x23150, 427*a4f780cdSTaniya Das .halt_check = BRANCH_HALT_VOTED, 428*a4f780cdSTaniya Das .hwcg_reg = 0x23150, 429*a4f780cdSTaniya Das .hwcg_bit = 1, 430*a4f780cdSTaniya Das .clkr = { 431*a4f780cdSTaniya Das .enable_reg = 0x76000, 432*a4f780cdSTaniya Das .enable_mask = BIT(4), 433*a4f780cdSTaniya Das .hw.init = &(const struct clk_init_data) { 434*a4f780cdSTaniya Das .name = "nw_gcc_gpu_gpll0_clk_src", 435*a4f780cdSTaniya Das .parent_hws = (const struct clk_hw*[]) { 436*a4f780cdSTaniya Das &nw_gcc_gpll0.clkr.hw, 437*a4f780cdSTaniya Das }, 438*a4f780cdSTaniya Das .num_parents = 1, 439*a4f780cdSTaniya Das .flags = CLK_SET_RATE_PARENT, 440*a4f780cdSTaniya Das .ops = &clk_branch2_ops, 441*a4f780cdSTaniya Das }, 442*a4f780cdSTaniya Das }, 443*a4f780cdSTaniya Das }; 444*a4f780cdSTaniya Das 445*a4f780cdSTaniya Das static struct clk_branch nw_gcc_gpu_gpll0_div_clk_src = { 446*a4f780cdSTaniya Das .halt_reg = 0x23158, 447*a4f780cdSTaniya Das .halt_check = BRANCH_HALT_VOTED, 448*a4f780cdSTaniya Das .hwcg_reg = 0x23158, 449*a4f780cdSTaniya Das .hwcg_bit = 1, 450*a4f780cdSTaniya Das .clkr = { 451*a4f780cdSTaniya Das .enable_reg = 0x76000, 452*a4f780cdSTaniya Das .enable_mask = BIT(5), 453*a4f780cdSTaniya Das .hw.init = &(const struct clk_init_data) { 454*a4f780cdSTaniya Das .name = "nw_gcc_gpu_gpll0_div_clk_src", 455*a4f780cdSTaniya Das .parent_hws = (const struct clk_hw*[]) { 456*a4f780cdSTaniya Das &nw_gcc_gpll0_out_even.clkr.hw, 457*a4f780cdSTaniya Das }, 458*a4f780cdSTaniya Das .num_parents = 1, 459*a4f780cdSTaniya Das .flags = CLK_SET_RATE_PARENT, 460*a4f780cdSTaniya Das .ops = &clk_branch2_ops, 461*a4f780cdSTaniya Das }, 462*a4f780cdSTaniya Das }, 463*a4f780cdSTaniya Das }; 464*a4f780cdSTaniya Das 465*a4f780cdSTaniya Das static struct clk_branch nw_gcc_gpu_hscnoc_gfx_clk = { 466*a4f780cdSTaniya Das .halt_reg = 0x2300c, 467*a4f780cdSTaniya Das .halt_check = BRANCH_HALT_SKIP, 468*a4f780cdSTaniya Das .hwcg_reg = 0x2300c, 469*a4f780cdSTaniya Das .hwcg_bit = 1, 470*a4f780cdSTaniya Das .clkr = { 471*a4f780cdSTaniya Das .enable_reg = 0x2300c, 472*a4f780cdSTaniya Das .enable_mask = BIT(0), 473*a4f780cdSTaniya Das .hw.init = &(const struct clk_init_data) { 474*a4f780cdSTaniya Das .name = "nw_gcc_gpu_hscnoc_gfx_clk", 475*a4f780cdSTaniya Das .ops = &clk_branch2_ops, 476*a4f780cdSTaniya Das }, 477*a4f780cdSTaniya Das }, 478*a4f780cdSTaniya Das }; 479*a4f780cdSTaniya Das 480*a4f780cdSTaniya Das static struct clk_branch nw_gcc_gpu_smmu_vote_clk = { 481*a4f780cdSTaniya Das .halt_reg = 0x86038, 482*a4f780cdSTaniya Das .halt_check = BRANCH_HALT_VOTED, 483*a4f780cdSTaniya Das .clkr = { 484*a4f780cdSTaniya Das .enable_reg = 0x86038, 485*a4f780cdSTaniya Das .enable_mask = BIT(0), 486*a4f780cdSTaniya Das .hw.init = &(const struct clk_init_data) { 487*a4f780cdSTaniya Das .name = "nw_gcc_gpu_smmu_vote_clk", 488*a4f780cdSTaniya Das .ops = &clk_branch2_ops, 489*a4f780cdSTaniya Das }, 490*a4f780cdSTaniya Das }, 491*a4f780cdSTaniya Das }; 492*a4f780cdSTaniya Das 493*a4f780cdSTaniya Das static struct clk_branch nw_gcc_hscnoc_gpu_2_axi_clk = { 494*a4f780cdSTaniya Das .halt_reg = 0x24160, 495*a4f780cdSTaniya Das .halt_check = BRANCH_HALT_SKIP, 496*a4f780cdSTaniya Das .hwcg_reg = 0x24160, 497*a4f780cdSTaniya Das .hwcg_bit = 1, 498*a4f780cdSTaniya Das .clkr = { 499*a4f780cdSTaniya Das .enable_reg = 0x24160, 500*a4f780cdSTaniya Das .enable_mask = BIT(0), 501*a4f780cdSTaniya Das .hw.init = &(const struct clk_init_data) { 502*a4f780cdSTaniya Das .name = "nw_gcc_hscnoc_gpu_2_axi_clk", 503*a4f780cdSTaniya Das .ops = &clk_branch2_ops, 504*a4f780cdSTaniya Das }, 505*a4f780cdSTaniya Das }, 506*a4f780cdSTaniya Das }; 507*a4f780cdSTaniya Das 508*a4f780cdSTaniya Das static struct clk_branch nw_gcc_hscnoc_gpu_axi_clk = { 509*a4f780cdSTaniya Das .halt_reg = 0x23160, 510*a4f780cdSTaniya Das .halt_check = BRANCH_HALT_SKIP, 511*a4f780cdSTaniya Das .hwcg_reg = 0x23160, 512*a4f780cdSTaniya Das .hwcg_bit = 1, 513*a4f780cdSTaniya Das .clkr = { 514*a4f780cdSTaniya Das .enable_reg = 0x23160, 515*a4f780cdSTaniya Das .enable_mask = BIT(0), 516*a4f780cdSTaniya Das .hw.init = &(const struct clk_init_data) { 517*a4f780cdSTaniya Das .name = "nw_gcc_hscnoc_gpu_axi_clk", 518*a4f780cdSTaniya Das .ops = &clk_branch2_ops, 519*a4f780cdSTaniya Das }, 520*a4f780cdSTaniya Das }, 521*a4f780cdSTaniya Das }; 522*a4f780cdSTaniya Das 523*a4f780cdSTaniya Das static struct clk_branch nw_gcc_mmu_1_tcu_vote_clk = { 524*a4f780cdSTaniya Das .halt_reg = 0x86040, 525*a4f780cdSTaniya Das .halt_check = BRANCH_HALT_VOTED, 526*a4f780cdSTaniya Das .clkr = { 527*a4f780cdSTaniya Das .enable_reg = 0x86040, 528*a4f780cdSTaniya Das .enable_mask = BIT(0), 529*a4f780cdSTaniya Das .hw.init = &(const struct clk_init_data) { 530*a4f780cdSTaniya Das .name = "nw_gcc_mmu_1_tcu_vote_clk", 531*a4f780cdSTaniya Das .ops = &clk_branch2_ops, 532*a4f780cdSTaniya Das }, 533*a4f780cdSTaniya Das }, 534*a4f780cdSTaniya Das }; 535*a4f780cdSTaniya Das 536*a4f780cdSTaniya Das static struct clk_branch nw_gcc_video_axi0_clk = { 537*a4f780cdSTaniya Das .halt_reg = 0x1a008, 538*a4f780cdSTaniya Das .halt_check = BRANCH_HALT_SKIP, 539*a4f780cdSTaniya Das .hwcg_reg = 0x1a008, 540*a4f780cdSTaniya Das .hwcg_bit = 1, 541*a4f780cdSTaniya Das .clkr = { 542*a4f780cdSTaniya Das .enable_reg = 0x1a008, 543*a4f780cdSTaniya Das .enable_mask = BIT(0), 544*a4f780cdSTaniya Das .hw.init = &(const struct clk_init_data) { 545*a4f780cdSTaniya Das .name = "nw_gcc_video_axi0_clk", 546*a4f780cdSTaniya Das .ops = &clk_branch2_ops, 547*a4f780cdSTaniya Das }, 548*a4f780cdSTaniya Das }, 549*a4f780cdSTaniya Das }; 550*a4f780cdSTaniya Das 551*a4f780cdSTaniya Das static struct clk_branch nw_gcc_video_axi0c_clk = { 552*a4f780cdSTaniya Das .halt_reg = 0x1a01c, 553*a4f780cdSTaniya Das .halt_check = BRANCH_HALT_SKIP, 554*a4f780cdSTaniya Das .hwcg_reg = 0x1a01c, 555*a4f780cdSTaniya Das .hwcg_bit = 1, 556*a4f780cdSTaniya Das .clkr = { 557*a4f780cdSTaniya Das .enable_reg = 0x1a01c, 558*a4f780cdSTaniya Das .enable_mask = BIT(0), 559*a4f780cdSTaniya Das .hw.init = &(const struct clk_init_data) { 560*a4f780cdSTaniya Das .name = "nw_gcc_video_axi0c_clk", 561*a4f780cdSTaniya Das .ops = &clk_branch2_ops, 562*a4f780cdSTaniya Das }, 563*a4f780cdSTaniya Das }, 564*a4f780cdSTaniya Das }; 565*a4f780cdSTaniya Das 566*a4f780cdSTaniya Das static struct clk_branch nw_gcc_video_axi1_clk = { 567*a4f780cdSTaniya Das .halt_reg = 0x1a030, 568*a4f780cdSTaniya Das .halt_check = BRANCH_HALT_SKIP, 569*a4f780cdSTaniya Das .hwcg_reg = 0x1a030, 570*a4f780cdSTaniya Das .hwcg_bit = 1, 571*a4f780cdSTaniya Das .clkr = { 572*a4f780cdSTaniya Das .enable_reg = 0x1a030, 573*a4f780cdSTaniya Das .enable_mask = BIT(0), 574*a4f780cdSTaniya Das .hw.init = &(const struct clk_init_data) { 575*a4f780cdSTaniya Das .name = "nw_gcc_video_axi1_clk", 576*a4f780cdSTaniya Das .ops = &clk_branch2_ops, 577*a4f780cdSTaniya Das }, 578*a4f780cdSTaniya Das }, 579*a4f780cdSTaniya Das }; 580*a4f780cdSTaniya Das 581*a4f780cdSTaniya Das static struct clk_regmap *nw_gcc_nord_clocks[] = { 582*a4f780cdSTaniya Das [NW_GCC_ACMU_MUX_CLK] = &nw_gcc_acmu_mux_clk.clkr, 583*a4f780cdSTaniya Das [NW_GCC_CAMERA_HF_AXI_CLK] = &nw_gcc_camera_hf_axi_clk.clkr, 584*a4f780cdSTaniya Das [NW_GCC_CAMERA_SF_AXI_CLK] = &nw_gcc_camera_sf_axi_clk.clkr, 585*a4f780cdSTaniya Das [NW_GCC_CAMERA_TRIG_CLK] = &nw_gcc_camera_trig_clk.clkr, 586*a4f780cdSTaniya Das [NW_GCC_DISP_0_HF_AXI_CLK] = &nw_gcc_disp_0_hf_axi_clk.clkr, 587*a4f780cdSTaniya Das [NW_GCC_DISP_0_TRIG_CLK] = &nw_gcc_disp_0_trig_clk.clkr, 588*a4f780cdSTaniya Das [NW_GCC_DISP_1_HF_AXI_CLK] = &nw_gcc_disp_1_hf_axi_clk.clkr, 589*a4f780cdSTaniya Das [NW_GCC_DISP_1_TRIG_CLK] = &nw_gcc_disp_1_trig_clk.clkr, 590*a4f780cdSTaniya Das [NW_GCC_DPRX0_AXI_HF_CLK] = &nw_gcc_dprx0_axi_hf_clk.clkr, 591*a4f780cdSTaniya Das [NW_GCC_DPRX1_AXI_HF_CLK] = &nw_gcc_dprx1_axi_hf_clk.clkr, 592*a4f780cdSTaniya Das [NW_GCC_EVA_AXI0_CLK] = &nw_gcc_eva_axi0_clk.clkr, 593*a4f780cdSTaniya Das [NW_GCC_EVA_AXI0C_CLK] = &nw_gcc_eva_axi0c_clk.clkr, 594*a4f780cdSTaniya Das [NW_GCC_EVA_TRIG_CLK] = &nw_gcc_eva_trig_clk.clkr, 595*a4f780cdSTaniya Das [NW_GCC_FRQ_MEASURE_REF_CLK] = &nw_gcc_frq_measure_ref_clk.clkr, 596*a4f780cdSTaniya Das [NW_GCC_GP1_CLK] = &nw_gcc_gp1_clk.clkr, 597*a4f780cdSTaniya Das [NW_GCC_GP1_CLK_SRC] = &nw_gcc_gp1_clk_src.clkr, 598*a4f780cdSTaniya Das [NW_GCC_GP2_CLK] = &nw_gcc_gp2_clk.clkr, 599*a4f780cdSTaniya Das [NW_GCC_GP2_CLK_SRC] = &nw_gcc_gp2_clk_src.clkr, 600*a4f780cdSTaniya Das [NW_GCC_GPLL0] = &nw_gcc_gpll0.clkr, 601*a4f780cdSTaniya Das [NW_GCC_GPLL0_OUT_EVEN] = &nw_gcc_gpll0_out_even.clkr, 602*a4f780cdSTaniya Das [NW_GCC_GPU_2_GPLL0_CLK_SRC] = &nw_gcc_gpu_2_gpll0_clk_src.clkr, 603*a4f780cdSTaniya Das [NW_GCC_GPU_2_GPLL0_DIV_CLK_SRC] = &nw_gcc_gpu_2_gpll0_div_clk_src.clkr, 604*a4f780cdSTaniya Das [NW_GCC_GPU_2_HSCNOC_GFX_CLK] = &nw_gcc_gpu_2_hscnoc_gfx_clk.clkr, 605*a4f780cdSTaniya Das [NW_GCC_GPU_GPLL0_CLK_SRC] = &nw_gcc_gpu_gpll0_clk_src.clkr, 606*a4f780cdSTaniya Das [NW_GCC_GPU_GPLL0_DIV_CLK_SRC] = &nw_gcc_gpu_gpll0_div_clk_src.clkr, 607*a4f780cdSTaniya Das [NW_GCC_GPU_HSCNOC_GFX_CLK] = &nw_gcc_gpu_hscnoc_gfx_clk.clkr, 608*a4f780cdSTaniya Das [NW_GCC_GPU_SMMU_VOTE_CLK] = &nw_gcc_gpu_smmu_vote_clk.clkr, 609*a4f780cdSTaniya Das [NW_GCC_HSCNOC_GPU_2_AXI_CLK] = &nw_gcc_hscnoc_gpu_2_axi_clk.clkr, 610*a4f780cdSTaniya Das [NW_GCC_HSCNOC_GPU_AXI_CLK] = &nw_gcc_hscnoc_gpu_axi_clk.clkr, 611*a4f780cdSTaniya Das [NW_GCC_MMU_1_TCU_VOTE_CLK] = &nw_gcc_mmu_1_tcu_vote_clk.clkr, 612*a4f780cdSTaniya Das [NW_GCC_VIDEO_AXI0_CLK] = &nw_gcc_video_axi0_clk.clkr, 613*a4f780cdSTaniya Das [NW_GCC_VIDEO_AXI0C_CLK] = &nw_gcc_video_axi0c_clk.clkr, 614*a4f780cdSTaniya Das [NW_GCC_VIDEO_AXI1_CLK] = &nw_gcc_video_axi1_clk.clkr, 615*a4f780cdSTaniya Das }; 616*a4f780cdSTaniya Das 617*a4f780cdSTaniya Das static const struct qcom_reset_map nw_gcc_nord_resets[] = { 618*a4f780cdSTaniya Das [NW_GCC_CAMERA_BCR] = { 0x16000 }, 619*a4f780cdSTaniya Das [NW_GCC_DISPLAY_0_BCR] = { 0x18000 }, 620*a4f780cdSTaniya Das [NW_GCC_DISPLAY_1_BCR] = { 0x19000 }, 621*a4f780cdSTaniya Das [NW_GCC_DPRX0_BCR] = { 0x29000 }, 622*a4f780cdSTaniya Das [NW_GCC_DPRX1_BCR] = { 0x2a000 }, 623*a4f780cdSTaniya Das [NW_GCC_EVA_BCR] = { 0x1b000 }, 624*a4f780cdSTaniya Das [NW_GCC_GPU_2_BCR] = { 0x24000 }, 625*a4f780cdSTaniya Das [NW_GCC_GPU_BCR] = { 0x23000 }, 626*a4f780cdSTaniya Das [NW_GCC_VIDEO_BCR] = { 0x1a000 }, 627*a4f780cdSTaniya Das }; 628*a4f780cdSTaniya Das 629*a4f780cdSTaniya Das static u32 nw_gcc_nord_critical_cbcrs[] = { 630*a4f780cdSTaniya Das 0x16004, /* NW_GCC_CAMERA_AHB_CLK */ 631*a4f780cdSTaniya Das 0x16030, /* NW_GCC_CAMERA_XO_CLK */ 632*a4f780cdSTaniya Das 0x18004, /* NW_GCC_DISP_0_AHB_CLK */ 633*a4f780cdSTaniya Das 0x19004, /* NW_GCC_DISP_1_AHB_CLK */ 634*a4f780cdSTaniya Das 0x29018, /* NW_GCC_DPRX0_CFG_AHB_CLK */ 635*a4f780cdSTaniya Das 0x2a018, /* NW_GCC_DPRX1_CFG_AHB_CLK */ 636*a4f780cdSTaniya Das 0x1b004, /* NW_GCC_EVA_AHB_CLK */ 637*a4f780cdSTaniya Das 0x1b024, /* NW_GCC_EVA_XO_CLK */ 638*a4f780cdSTaniya Das 0x23004, /* NW_GCC_GPU_CFG_AHB_CLK */ 639*a4f780cdSTaniya Das 0x24004, /* NW_GCC_GPU_2_CFG_AHB_CLK */ 640*a4f780cdSTaniya Das 0x1a004, /* NW_GCC_VIDEO_AHB_CLK */ 641*a4f780cdSTaniya Das 0x1a044, /* NW_GCC_VIDEO_XO_CLK */ 642*a4f780cdSTaniya Das }; 643*a4f780cdSTaniya Das 644*a4f780cdSTaniya Das static struct qcom_cc_driver_data nw_gcc_nord_driver_data = { 645*a4f780cdSTaniya Das .clk_cbcrs = nw_gcc_nord_critical_cbcrs, 646*a4f780cdSTaniya Das .num_clk_cbcrs = ARRAY_SIZE(nw_gcc_nord_critical_cbcrs), 647*a4f780cdSTaniya Das }; 648*a4f780cdSTaniya Das 649*a4f780cdSTaniya Das static const struct regmap_config nw_gcc_nord_regmap_config = { 650*a4f780cdSTaniya Das .reg_bits = 32, 651*a4f780cdSTaniya Das .reg_stride = 4, 652*a4f780cdSTaniya Das .val_bits = 32, 653*a4f780cdSTaniya Das .max_register = 0xf41f0, 654*a4f780cdSTaniya Das .fast_io = true, 655*a4f780cdSTaniya Das }; 656*a4f780cdSTaniya Das 657*a4f780cdSTaniya Das static const struct qcom_cc_desc nw_gcc_nord_desc = { 658*a4f780cdSTaniya Das .config = &nw_gcc_nord_regmap_config, 659*a4f780cdSTaniya Das .clks = nw_gcc_nord_clocks, 660*a4f780cdSTaniya Das .num_clks = ARRAY_SIZE(nw_gcc_nord_clocks), 661*a4f780cdSTaniya Das .resets = nw_gcc_nord_resets, 662*a4f780cdSTaniya Das .num_resets = ARRAY_SIZE(nw_gcc_nord_resets), 663*a4f780cdSTaniya Das .driver_data = &nw_gcc_nord_driver_data, 664*a4f780cdSTaniya Das }; 665*a4f780cdSTaniya Das 666*a4f780cdSTaniya Das static const struct of_device_id nw_gcc_nord_match_table[] = { 667*a4f780cdSTaniya Das { .compatible = "qcom,nord-nwgcc" }, 668*a4f780cdSTaniya Das { } 669*a4f780cdSTaniya Das }; 670*a4f780cdSTaniya Das MODULE_DEVICE_TABLE(of, nw_gcc_nord_match_table); 671*a4f780cdSTaniya Das 672*a4f780cdSTaniya Das static int nw_gcc_nord_probe(struct platform_device *pdev) 673*a4f780cdSTaniya Das { 674*a4f780cdSTaniya Das return qcom_cc_probe(pdev, &nw_gcc_nord_desc); 675*a4f780cdSTaniya Das } 676*a4f780cdSTaniya Das 677*a4f780cdSTaniya Das static struct platform_driver nw_gcc_nord_driver = { 678*a4f780cdSTaniya Das .probe = nw_gcc_nord_probe, 679*a4f780cdSTaniya Das .driver = { 680*a4f780cdSTaniya Das .name = "nwgcc-nord", 681*a4f780cdSTaniya Das .of_match_table = nw_gcc_nord_match_table, 682*a4f780cdSTaniya Das }, 683*a4f780cdSTaniya Das }; 684*a4f780cdSTaniya Das 685*a4f780cdSTaniya Das module_platform_driver(nw_gcc_nord_driver); 686*a4f780cdSTaniya Das 687*a4f780cdSTaniya Das MODULE_DESCRIPTION("QTI NWGCC NORD Driver"); 688*a4f780cdSTaniya Das MODULE_LICENSE("GPL"); 689