root/drivers/clk/qcom/gcc-sdm660.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. gcc_sdm660_probe
  2. gcc_sdm660_init
  3. gcc_sdm660_exit

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

/* [<][>][^][v][top][bottom][index][help] */