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