linux/drivers/clk/qcom/gcc-msm8994.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/* Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
   3 */
   4
   5#include <linux/kernel.h>
   6#include <linux/init.h>
   7#include <linux/err.h>
   8#include <linux/ctype.h>
   9#include <linux/io.h>
  10#include <linux/of.h>
  11#include <linux/platform_device.h>
  12#include <linux/module.h>
  13#include <linux/regmap.h>
  14
  15#include <dt-bindings/clock/qcom,gcc-msm8994.h>
  16
  17#include "common.h"
  18#include "clk-regmap.h"
  19#include "clk-alpha-pll.h"
  20#include "clk-rcg.h"
  21#include "clk-branch.h"
  22#include "reset.h"
  23#include "gdsc.h"
  24
  25enum {
  26        P_XO,
  27        P_GPLL0,
  28        P_GPLL4,
  29};
  30
  31static const struct parent_map gcc_xo_gpll0_map[] = {
  32        { P_XO, 0 },
  33        { P_GPLL0, 1 },
  34};
  35
  36static const char * const gcc_xo_gpll0[] = {
  37        "xo",
  38        "gpll0",
  39};
  40
  41static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {
  42        { P_XO, 0 },
  43        { P_GPLL0, 1 },
  44        { P_GPLL4, 5 },
  45};
  46
  47static const char * const gcc_xo_gpll0_gpll4[] = {
  48        "xo",
  49        "gpll0",
  50        "gpll4",
  51};
  52
  53static struct clk_fixed_factor xo = {
  54        .mult = 1,
  55        .div = 1,
  56        .hw.init = &(struct clk_init_data)
  57        {
  58                .name = "xo",
  59                .parent_names = (const char *[]) { "xo_board" },
  60                .num_parents = 1,
  61                .ops = &clk_fixed_factor_ops,
  62        },
  63};
  64
  65static struct clk_alpha_pll gpll0_early = {
  66        .offset = 0x00000,
  67        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  68        .clkr = {
  69                .enable_reg = 0x1480,
  70                .enable_mask = BIT(0),
  71                .hw.init = &(struct clk_init_data)
  72                {
  73                        .name = "gpll0_early",
  74                        .parent_names = (const char *[]) { "xo" },
  75                        .num_parents = 1,
  76                        .ops = &clk_alpha_pll_ops,
  77                },
  78        },
  79};
  80
  81static struct clk_alpha_pll_postdiv gpll0 = {
  82        .offset = 0x00000,
  83        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  84        .clkr.hw.init = &(struct clk_init_data)
  85        {
  86                .name = "gpll0",
  87                .parent_names = (const char *[]) { "gpll0_early" },
  88                .num_parents = 1,
  89                .ops = &clk_alpha_pll_postdiv_ops,
  90        },
  91};
  92
  93static struct clk_alpha_pll gpll4_early = {
  94        .offset = 0x1dc0,
  95        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  96        .clkr = {
  97                .enable_reg = 0x1480,
  98                .enable_mask = BIT(4),
  99                .hw.init = &(struct clk_init_data)
 100                {
 101                        .name = "gpll4_early",
 102                        .parent_names = (const char *[]) { "xo" },
 103                        .num_parents = 1,
 104                        .ops = &clk_alpha_pll_ops,
 105                },
 106        },
 107};
 108
 109static struct clk_alpha_pll_postdiv gpll4 = {
 110        .offset = 0x1dc0,
 111        .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 112        .clkr.hw.init = &(struct clk_init_data)
 113        {
 114                .name = "gpll4",
 115                .parent_names = (const char *[]) { "gpll4_early" },
 116                .num_parents = 1,
 117                .ops = &clk_alpha_pll_postdiv_ops,
 118        },
 119};
 120
 121static struct freq_tbl ftbl_ufs_axi_clk_src[] = {
 122        F(50000000, P_GPLL0, 12, 0, 0),
 123        F(100000000, P_GPLL0, 6, 0, 0),
 124        F(150000000, P_GPLL0, 4, 0, 0),
 125        F(171430000, P_GPLL0, 3.5, 0, 0),
 126        F(200000000, P_GPLL0, 3, 0, 0),
 127        F(240000000, P_GPLL0, 2.5, 0, 0),
 128        { }
 129};
 130
 131static struct clk_rcg2 ufs_axi_clk_src = {
 132        .cmd_rcgr = 0x1d68,
 133        .mnd_width = 8,
 134        .hid_width = 5,
 135        .parent_map = gcc_xo_gpll0_map,
 136        .freq_tbl = ftbl_ufs_axi_clk_src,
 137        .clkr.hw.init = &(struct clk_init_data)
 138        {
 139                .name = "ufs_axi_clk_src",
 140                .parent_names = gcc_xo_gpll0,
 141                .num_parents = 2,
 142                .ops = &clk_rcg2_ops,
 143        },
 144};
 145
 146static struct freq_tbl ftbl_usb30_master_clk_src[] = {
 147        F(19200000, P_XO, 1, 0, 0),
 148        F(125000000, P_GPLL0, 1, 5, 24),
 149        { }
 150};
 151
 152static struct clk_rcg2 usb30_master_clk_src = {
 153        .cmd_rcgr = 0x03d4,
 154        .mnd_width = 8,
 155        .hid_width = 5,
 156        .parent_map = gcc_xo_gpll0_map,
 157        .freq_tbl = ftbl_usb30_master_clk_src,
 158        .clkr.hw.init = &(struct clk_init_data)
 159        {
 160                .name = "usb30_master_clk_src",
 161                .parent_names = gcc_xo_gpll0,
 162                .num_parents = 2,
 163                .ops = &clk_rcg2_ops,
 164        },
 165};
 166
 167static struct freq_tbl ftbl_blsp_i2c_apps_clk_src[] = {
 168        F(19200000, P_XO, 1, 0, 0),
 169        F(50000000, P_GPLL0, 12, 0, 0),
 170        { }
 171};
 172
 173static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
 174        .cmd_rcgr = 0x0660,
 175        .hid_width = 5,
 176        .parent_map = gcc_xo_gpll0_map,
 177        .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 178        .clkr.hw.init = &(struct clk_init_data)
 179        {
 180                .name = "blsp1_qup1_i2c_apps_clk_src",
 181                .parent_names = gcc_xo_gpll0,
 182                .num_parents = 2,
 183                .ops = &clk_rcg2_ops,
 184        },
 185};
 186
 187static struct freq_tbl ftbl_blspqup_spi_apps_clk_src[] = {
 188        F(960000, P_XO, 10, 1, 2),
 189        F(4800000, P_XO, 4, 0, 0),
 190        F(9600000, P_XO, 2, 0, 0),
 191        F(15000000, P_GPLL0, 10, 1, 4),
 192        F(19200000, P_XO, 1, 0, 0),
 193        F(24000000, P_GPLL0, 12.5, 1, 2),
 194        F(25000000, P_GPLL0, 12, 1, 2),
 195        F(48000000, P_GPLL0, 12.5, 0, 0),
 196        F(50000000, P_GPLL0, 12, 0, 0),
 197        { }
 198};
 199
 200static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
 201        .cmd_rcgr = 0x064c,
 202        .mnd_width = 8,
 203        .hid_width = 5,
 204        .parent_map = gcc_xo_gpll0_map,
 205        .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
 206        .clkr.hw.init = &(struct clk_init_data)
 207        {
 208                .name = "blsp1_qup1_spi_apps_clk_src",
 209                .parent_names = gcc_xo_gpll0,
 210                .num_parents = 2,
 211                .ops = &clk_rcg2_ops,
 212        },
 213};
 214
 215static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
 216        .cmd_rcgr = 0x06e0,
 217        .hid_width = 5,
 218        .parent_map = gcc_xo_gpll0_map,
 219        .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 220        .clkr.hw.init = &(struct clk_init_data)
 221        {
 222                .name = "blsp1_qup2_i2c_apps_clk_src",
 223                .parent_names = gcc_xo_gpll0,
 224                .num_parents = 2,
 225                .ops = &clk_rcg2_ops,
 226        },
 227};
 228
 229static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
 230        .cmd_rcgr = 0x06cc,
 231        .mnd_width = 8,
 232        .hid_width = 5,
 233        .parent_map = gcc_xo_gpll0_map,
 234        .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
 235        .clkr.hw.init = &(struct clk_init_data)
 236        {
 237                .name = "blsp1_qup2_spi_apps_clk_src",
 238                .parent_names = gcc_xo_gpll0,
 239                .num_parents = 2,
 240                .ops = &clk_rcg2_ops,
 241        },
 242};
 243
 244static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
 245        .cmd_rcgr = 0x0760,
 246        .hid_width = 5,
 247        .parent_map = gcc_xo_gpll0_map,
 248        .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 249        .clkr.hw.init = &(struct clk_init_data)
 250        {
 251                .name = "blsp1_qup3_i2c_apps_clk_src",
 252                .parent_names = gcc_xo_gpll0,
 253                .num_parents = 2,
 254                .ops = &clk_rcg2_ops,
 255        },
 256};
 257
 258static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
 259        .cmd_rcgr = 0x074c,
 260        .mnd_width = 8,
 261        .hid_width = 5,
 262        .parent_map = gcc_xo_gpll0_map,
 263        .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
 264        .clkr.hw.init = &(struct clk_init_data)
 265        {
 266                .name = "blsp1_qup3_spi_apps_clk_src",
 267                .parent_names = gcc_xo_gpll0,
 268                .num_parents = 2,
 269                .ops = &clk_rcg2_ops,
 270        },
 271};
 272
 273static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
 274        .cmd_rcgr = 0x07e0,
 275        .hid_width = 5,
 276        .parent_map = gcc_xo_gpll0_map,
 277        .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 278        .clkr.hw.init = &(struct clk_init_data)
 279        {
 280                .name = "blsp1_qup4_i2c_apps_clk_src",
 281                .parent_names = gcc_xo_gpll0,
 282                .num_parents = 2,
 283                .ops = &clk_rcg2_ops,
 284        },
 285};
 286
 287static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
 288        .cmd_rcgr = 0x07cc,
 289        .mnd_width = 8,
 290        .hid_width = 5,
 291        .parent_map = gcc_xo_gpll0_map,
 292        .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
 293        .clkr.hw.init = &(struct clk_init_data)
 294        {
 295                .name = "blsp1_qup4_spi_apps_clk_src",
 296                .parent_names = gcc_xo_gpll0,
 297                .num_parents = 2,
 298                .ops = &clk_rcg2_ops,
 299        },
 300};
 301
 302static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
 303        .cmd_rcgr = 0x0860,
 304        .hid_width = 5,
 305        .parent_map = gcc_xo_gpll0_map,
 306        .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 307        .clkr.hw.init = &(struct clk_init_data)
 308        {
 309                .name = "blsp1_qup5_i2c_apps_clk_src",
 310                .parent_names = gcc_xo_gpll0,
 311                .num_parents = 2,
 312                .ops = &clk_rcg2_ops,
 313        },
 314};
 315
 316static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
 317        .cmd_rcgr = 0x084c,
 318        .mnd_width = 8,
 319        .hid_width = 5,
 320        .parent_map = gcc_xo_gpll0_map,
 321        .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
 322        .clkr.hw.init = &(struct clk_init_data)
 323        {
 324                .name = "blsp1_qup5_spi_apps_clk_src",
 325                .parent_names = gcc_xo_gpll0,
 326                .num_parents = 2,
 327                .ops = &clk_rcg2_ops,
 328        },
 329};
 330
 331static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
 332        .cmd_rcgr = 0x08e0,
 333        .hid_width = 5,
 334        .parent_map = gcc_xo_gpll0_map,
 335        .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 336        .clkr.hw.init = &(struct clk_init_data)
 337        {
 338                .name = "blsp1_qup6_i2c_apps_clk_src",
 339                .parent_names = gcc_xo_gpll0,
 340                .num_parents = 2,
 341                .ops = &clk_rcg2_ops,
 342        },
 343};
 344
 345static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
 346        .cmd_rcgr = 0x08cc,
 347        .mnd_width = 8,
 348        .hid_width = 5,
 349        .parent_map = gcc_xo_gpll0_map,
 350        .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
 351        .clkr.hw.init = &(struct clk_init_data)
 352        {
 353                .name = "blsp1_qup6_spi_apps_clk_src",
 354                .parent_names = gcc_xo_gpll0,
 355                .num_parents = 2,
 356                .ops = &clk_rcg2_ops,
 357        },
 358};
 359
 360static struct freq_tbl ftbl_blsp_uart_apps_clk_src[] = {
 361        F(3686400, P_GPLL0, 1, 96, 15625),
 362        F(7372800, P_GPLL0, 1, 192, 15625),
 363        F(14745600, P_GPLL0, 1, 384, 15625),
 364        F(16000000, P_GPLL0, 5, 2, 15),
 365        F(19200000, P_XO, 1, 0, 0),
 366        F(24000000, P_GPLL0, 5, 1, 5),
 367        F(32000000, P_GPLL0, 1, 4, 75),
 368        F(40000000, P_GPLL0, 15, 0, 0),
 369        F(46400000, P_GPLL0, 1, 29, 375),
 370        F(48000000, P_GPLL0, 12.5, 0, 0),
 371        F(51200000, P_GPLL0, 1, 32, 375),
 372        F(56000000, P_GPLL0, 1, 7, 75),
 373        F(58982400, P_GPLL0, 1, 1536, 15625),
 374        F(60000000, P_GPLL0, 10, 0, 0),
 375        F(63160000, P_GPLL0, 9.5, 0, 0),
 376        { }
 377};
 378
 379static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
 380        .cmd_rcgr = 0x068c,
 381        .mnd_width = 16,
 382        .hid_width = 5,
 383        .parent_map = gcc_xo_gpll0_map,
 384        .freq_tbl = ftbl_blsp_uart_apps_clk_src,
 385        .clkr.hw.init = &(struct clk_init_data)
 386        {
 387                .name = "blsp1_uart1_apps_clk_src",
 388                .parent_names = gcc_xo_gpll0,
 389                .num_parents = 2,
 390                .ops = &clk_rcg2_ops,
 391        },
 392};
 393
 394static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
 395        .cmd_rcgr = 0x070c,
 396        .mnd_width = 16,
 397        .hid_width = 5,
 398        .parent_map = gcc_xo_gpll0_map,
 399        .freq_tbl = ftbl_blsp_uart_apps_clk_src,
 400        .clkr.hw.init = &(struct clk_init_data)
 401        {
 402                .name = "blsp1_uart2_apps_clk_src",
 403                .parent_names = gcc_xo_gpll0,
 404                .num_parents = 2,
 405                .ops = &clk_rcg2_ops,
 406        },
 407};
 408
 409static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
 410        .cmd_rcgr = 0x078c,
 411        .mnd_width = 16,
 412        .hid_width = 5,
 413        .parent_map = gcc_xo_gpll0_map,
 414        .freq_tbl = ftbl_blsp_uart_apps_clk_src,
 415        .clkr.hw.init = &(struct clk_init_data)
 416        {
 417                .name = "blsp1_uart3_apps_clk_src",
 418                .parent_names = gcc_xo_gpll0,
 419                .num_parents = 2,
 420                .ops = &clk_rcg2_ops,
 421        },
 422};
 423
 424static struct clk_rcg2 blsp1_uart4_apps_clk_src = {
 425        .cmd_rcgr = 0x080c,
 426        .mnd_width = 16,
 427        .hid_width = 5,
 428        .parent_map = gcc_xo_gpll0_map,
 429        .freq_tbl = ftbl_blsp_uart_apps_clk_src,
 430        .clkr.hw.init = &(struct clk_init_data)
 431        {
 432                .name = "blsp1_uart4_apps_clk_src",
 433                .parent_names = gcc_xo_gpll0,
 434                .num_parents = 2,
 435                .ops = &clk_rcg2_ops,
 436        },
 437};
 438
 439static struct clk_rcg2 blsp1_uart5_apps_clk_src = {
 440        .cmd_rcgr = 0x088c,
 441        .mnd_width = 16,
 442        .hid_width = 5,
 443        .parent_map = gcc_xo_gpll0_map,
 444        .freq_tbl = ftbl_blsp_uart_apps_clk_src,
 445        .clkr.hw.init = &(struct clk_init_data)
 446        {
 447                .name = "blsp1_uart5_apps_clk_src",
 448                .parent_names = gcc_xo_gpll0,
 449                .num_parents = 2,
 450                .ops = &clk_rcg2_ops,
 451        },
 452};
 453
 454static struct clk_rcg2 blsp1_uart6_apps_clk_src = {
 455        .cmd_rcgr = 0x090c,
 456        .mnd_width = 16,
 457        .hid_width = 5,
 458        .parent_map = gcc_xo_gpll0_map,
 459        .freq_tbl = ftbl_blsp_uart_apps_clk_src,
 460        .clkr.hw.init = &(struct clk_init_data)
 461        {
 462                .name = "blsp1_uart6_apps_clk_src",
 463                .parent_names = gcc_xo_gpll0,
 464                .num_parents = 2,
 465                .ops = &clk_rcg2_ops,
 466        },
 467};
 468
 469static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
 470        .cmd_rcgr = 0x09a0,
 471        .hid_width = 5,
 472        .parent_map = gcc_xo_gpll0_map,
 473        .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 474        .clkr.hw.init = &(struct clk_init_data)
 475        {
 476                .name = "blsp2_qup1_i2c_apps_clk_src",
 477                .parent_names = gcc_xo_gpll0,
 478                .num_parents = 2,
 479                .ops = &clk_rcg2_ops,
 480        },
 481};
 482
 483static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
 484        .cmd_rcgr = 0x098c,
 485        .mnd_width = 8,
 486        .hid_width = 5,
 487        .parent_map = gcc_xo_gpll0_map,
 488        .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
 489        .clkr.hw.init = &(struct clk_init_data)
 490        {
 491                .name = "blsp2_qup1_spi_apps_clk_src",
 492                .parent_names = gcc_xo_gpll0,
 493                .num_parents = 2,
 494                .ops = &clk_rcg2_ops,
 495        },
 496};
 497
 498static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
 499        .cmd_rcgr = 0x0a20,
 500        .hid_width = 5,
 501        .parent_map = gcc_xo_gpll0_map,
 502        .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 503        .clkr.hw.init = &(struct clk_init_data)
 504        {
 505                .name = "blsp2_qup2_i2c_apps_clk_src",
 506                .parent_names = gcc_xo_gpll0,
 507                .num_parents = 2,
 508                .ops = &clk_rcg2_ops,
 509        },
 510};
 511
 512static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
 513        .cmd_rcgr = 0x0a0c,
 514        .mnd_width = 8,
 515        .hid_width = 5,
 516        .parent_map = gcc_xo_gpll0_map,
 517        .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
 518        .clkr.hw.init = &(struct clk_init_data)
 519        {
 520                .name = "blsp2_qup2_spi_apps_clk_src",
 521                .parent_names = gcc_xo_gpll0,
 522                .num_parents = 2,
 523                .ops = &clk_rcg2_ops,
 524        },
 525};
 526
 527static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
 528        .cmd_rcgr = 0x0aa0,
 529        .hid_width = 5,
 530        .parent_map = gcc_xo_gpll0_map,
 531        .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 532        .clkr.hw.init = &(struct clk_init_data)
 533        {
 534                .name = "blsp2_qup3_i2c_apps_clk_src",
 535                .parent_names = gcc_xo_gpll0,
 536                .num_parents = 2,
 537                .ops = &clk_rcg2_ops,
 538        },
 539};
 540
 541static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
 542        .cmd_rcgr = 0x0a8c,
 543        .mnd_width = 8,
 544        .hid_width = 5,
 545        .parent_map = gcc_xo_gpll0_map,
 546        .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
 547        .clkr.hw.init = &(struct clk_init_data)
 548        {
 549                .name = "blsp2_qup3_spi_apps_clk_src",
 550                .parent_names = gcc_xo_gpll0,
 551                .num_parents = 2,
 552                .ops = &clk_rcg2_ops,
 553        },
 554};
 555
 556static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
 557        .cmd_rcgr = 0x0b20,
 558        .hid_width = 5,
 559        .parent_map = gcc_xo_gpll0_map,
 560        .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 561        .clkr.hw.init = &(struct clk_init_data)
 562        {
 563                .name = "blsp2_qup4_i2c_apps_clk_src",
 564                .parent_names = gcc_xo_gpll0,
 565                .num_parents = 2,
 566                .ops = &clk_rcg2_ops,
 567        },
 568};
 569
 570static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
 571        .cmd_rcgr = 0x0b0c,
 572        .mnd_width = 8,
 573        .hid_width = 5,
 574        .parent_map = gcc_xo_gpll0_map,
 575        .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
 576        .clkr.hw.init = &(struct clk_init_data)
 577        {
 578                .name = "blsp2_qup4_spi_apps_clk_src",
 579                .parent_names = gcc_xo_gpll0,
 580                .num_parents = 2,
 581                .ops = &clk_rcg2_ops,
 582        },
 583};
 584
 585static struct clk_rcg2 blsp2_qup5_i2c_apps_clk_src = {
 586        .cmd_rcgr = 0x0ba0,
 587        .hid_width = 5,
 588        .parent_map = gcc_xo_gpll0_map,
 589        .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 590        .clkr.hw.init = &(struct clk_init_data)
 591        {
 592                .name = "blsp2_qup5_i2c_apps_clk_src",
 593                .parent_names = gcc_xo_gpll0,
 594                .num_parents = 2,
 595                .ops = &clk_rcg2_ops,
 596        },
 597};
 598
 599static struct clk_rcg2 blsp2_qup5_spi_apps_clk_src = {
 600        .cmd_rcgr = 0x0b8c,
 601        .mnd_width = 8,
 602        .hid_width = 5,
 603        .parent_map = gcc_xo_gpll0_map,
 604        .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
 605        .clkr.hw.init = &(struct clk_init_data)
 606        {
 607                .name = "blsp2_qup5_spi_apps_clk_src",
 608                .parent_names = gcc_xo_gpll0,
 609                .num_parents = 2,
 610                .ops = &clk_rcg2_ops,
 611        },
 612};
 613
 614static struct clk_rcg2 blsp2_qup6_i2c_apps_clk_src = {
 615        .cmd_rcgr = 0x0c20,
 616        .hid_width = 5,
 617        .parent_map = gcc_xo_gpll0_map,
 618        .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 619        .clkr.hw.init = &(struct clk_init_data)
 620        {
 621                .name = "blsp2_qup6_i2c_apps_clk_src",
 622                .parent_names = gcc_xo_gpll0,
 623                .num_parents = 2,
 624                .ops = &clk_rcg2_ops,
 625        },
 626};
 627
 628static struct clk_rcg2 blsp2_qup6_spi_apps_clk_src = {
 629        .cmd_rcgr = 0x0c0c,
 630        .mnd_width = 8,
 631        .hid_width = 5,
 632        .parent_map = gcc_xo_gpll0_map,
 633        .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
 634        .clkr.hw.init = &(struct clk_init_data)
 635        {
 636                .name = "blsp2_qup6_spi_apps_clk_src",
 637                .parent_names = gcc_xo_gpll0,
 638                .num_parents = 2,
 639                .ops = &clk_rcg2_ops,
 640        },
 641};
 642
 643static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
 644        .cmd_rcgr = 0x09cc,
 645        .mnd_width = 16,
 646        .hid_width = 5,
 647        .parent_map = gcc_xo_gpll0_map,
 648        .freq_tbl = ftbl_blsp_uart_apps_clk_src,
 649        .clkr.hw.init = &(struct clk_init_data)
 650        {
 651                .name = "blsp2_uart1_apps_clk_src",
 652                .parent_names = gcc_xo_gpll0,
 653                .num_parents = 2,
 654                .ops = &clk_rcg2_ops,
 655        },
 656};
 657
 658static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
 659        .cmd_rcgr = 0x0a4c,
 660        .mnd_width = 16,
 661        .hid_width = 5,
 662        .parent_map = gcc_xo_gpll0_map,
 663        .freq_tbl = ftbl_blsp_uart_apps_clk_src,
 664        .clkr.hw.init = &(struct clk_init_data)
 665        {
 666                .name = "blsp2_uart2_apps_clk_src",
 667                .parent_names = gcc_xo_gpll0,
 668                .num_parents = 2,
 669                .ops = &clk_rcg2_ops,
 670        },
 671};
 672
 673static struct clk_rcg2 blsp2_uart3_apps_clk_src = {
 674        .cmd_rcgr = 0x0acc,
 675        .mnd_width = 16,
 676        .hid_width = 5,
 677        .parent_map = gcc_xo_gpll0_map,
 678        .freq_tbl = ftbl_blsp_uart_apps_clk_src,
 679        .clkr.hw.init = &(struct clk_init_data)
 680        {
 681                .name = "blsp2_uart3_apps_clk_src",
 682                .parent_names = gcc_xo_gpll0,
 683                .num_parents = 2,
 684                .ops = &clk_rcg2_ops,
 685        },
 686};
 687
 688static struct clk_rcg2 blsp2_uart4_apps_clk_src = {
 689        .cmd_rcgr = 0x0b4c,
 690        .mnd_width = 16,
 691        .hid_width = 5,
 692        .parent_map = gcc_xo_gpll0_map,
 693        .freq_tbl = ftbl_blsp_uart_apps_clk_src,
 694        .clkr.hw.init = &(struct clk_init_data)
 695        {
 696                .name = "blsp2_uart4_apps_clk_src",
 697                .parent_names = gcc_xo_gpll0,
 698                .num_parents = 2,
 699                .ops = &clk_rcg2_ops,
 700        },
 701};
 702
 703static struct clk_rcg2 blsp2_uart5_apps_clk_src = {
 704        .cmd_rcgr = 0x0bcc,
 705        .mnd_width = 16,
 706        .hid_width = 5,
 707        .parent_map = gcc_xo_gpll0_map,
 708        .freq_tbl = ftbl_blsp_uart_apps_clk_src,
 709        .clkr.hw.init = &(struct clk_init_data)
 710        {
 711                .name = "blsp2_uart5_apps_clk_src",
 712                .parent_names = gcc_xo_gpll0,
 713                .num_parents = 2,
 714                .ops = &clk_rcg2_ops,
 715        },
 716};
 717
 718static struct clk_rcg2 blsp2_uart6_apps_clk_src = {
 719        .cmd_rcgr = 0x0c4c,
 720        .mnd_width = 16,
 721        .hid_width = 5,
 722        .parent_map = gcc_xo_gpll0_map,
 723        .freq_tbl = ftbl_blsp_uart_apps_clk_src,
 724        .clkr.hw.init = &(struct clk_init_data)
 725        {
 726                .name = "blsp2_uart6_apps_clk_src",
 727                .parent_names = gcc_xo_gpll0,
 728                .num_parents = 2,
 729                .ops = &clk_rcg2_ops,
 730        },
 731};
 732
 733static struct freq_tbl ftbl_gp1_clk_src[] = {
 734        F(19200000, P_XO, 1, 0, 0),
 735        F(100000000, P_GPLL0, 6, 0, 0),
 736        F(200000000, P_GPLL0, 3, 0, 0),
 737        { }
 738};
 739
 740static struct clk_rcg2 gp1_clk_src = {
 741        .cmd_rcgr = 0x1904,
 742        .mnd_width = 8,
 743        .hid_width = 5,
 744        .parent_map = gcc_xo_gpll0_map,
 745        .freq_tbl = ftbl_gp1_clk_src,
 746        .clkr.hw.init = &(struct clk_init_data)
 747        {
 748                .name = "gp1_clk_src",
 749                .parent_names = gcc_xo_gpll0,
 750                .num_parents = 2,
 751                .ops = &clk_rcg2_ops,
 752        },
 753};
 754
 755static struct freq_tbl ftbl_gp2_clk_src[] = {
 756        F(19200000, P_XO, 1, 0, 0),
 757        F(100000000, P_GPLL0, 6, 0, 0),
 758        F(200000000, P_GPLL0, 3, 0, 0),
 759        { }
 760};
 761
 762static struct clk_rcg2 gp2_clk_src = {
 763        .cmd_rcgr = 0x1944,
 764        .mnd_width = 8,
 765        .hid_width = 5,
 766        .parent_map = gcc_xo_gpll0_map,
 767        .freq_tbl = ftbl_gp2_clk_src,
 768        .clkr.hw.init = &(struct clk_init_data)
 769        {
 770                .name = "gp2_clk_src",
 771                .parent_names = gcc_xo_gpll0,
 772                .num_parents = 2,
 773                .ops = &clk_rcg2_ops,
 774        },
 775};
 776
 777static struct freq_tbl ftbl_gp3_clk_src[] = {
 778        F(19200000, P_XO, 1, 0, 0),
 779        F(100000000, P_GPLL0, 6, 0, 0),
 780        F(200000000, P_GPLL0, 3, 0, 0),
 781        { }
 782};
 783
 784static struct clk_rcg2 gp3_clk_src = {
 785        .cmd_rcgr = 0x1984,
 786        .mnd_width = 8,
 787        .hid_width = 5,
 788        .parent_map = gcc_xo_gpll0_map,
 789        .freq_tbl = ftbl_gp3_clk_src,
 790        .clkr.hw.init = &(struct clk_init_data)
 791        {
 792                .name = "gp3_clk_src",
 793                .parent_names = gcc_xo_gpll0,
 794                .num_parents = 2,
 795                .ops = &clk_rcg2_ops,
 796        },
 797};
 798
 799static struct freq_tbl ftbl_pcie_0_aux_clk_src[] = {
 800        F(1011000, P_XO, 1, 1, 19),
 801        { }
 802};
 803
 804static struct clk_rcg2 pcie_0_aux_clk_src = {
 805        .cmd_rcgr = 0x1b00,
 806        .mnd_width = 8,
 807        .hid_width = 5,
 808        .freq_tbl = ftbl_pcie_0_aux_clk_src,
 809        .clkr.hw.init = &(struct clk_init_data)
 810        {
 811                .name = "pcie_0_aux_clk_src",
 812                .parent_names = (const char *[]) { "xo" },
 813                .num_parents = 1,
 814                .ops = &clk_rcg2_ops,
 815        },
 816};
 817
 818static struct freq_tbl ftbl_pcie_pipe_clk_src[] = {
 819        F(125000000, P_XO, 1, 0, 0),
 820        { }
 821};
 822
 823static struct clk_rcg2 pcie_0_pipe_clk_src = {
 824        .cmd_rcgr = 0x1adc,
 825        .hid_width = 5,
 826        .freq_tbl = ftbl_pcie_pipe_clk_src,
 827        .clkr.hw.init = &(struct clk_init_data)
 828        {
 829                .name = "pcie_0_pipe_clk_src",
 830                .parent_names = (const char *[]) { "xo" },
 831                .num_parents = 1,
 832                .ops = &clk_rcg2_ops,
 833        },
 834};
 835
 836static struct freq_tbl ftbl_pcie_1_aux_clk_src[] = {
 837        F(1011000, P_XO, 1, 1, 19),
 838        { }
 839};
 840
 841static struct clk_rcg2 pcie_1_aux_clk_src = {
 842        .cmd_rcgr = 0x1b80,
 843        .mnd_width = 8,
 844        .hid_width = 5,
 845        .freq_tbl = ftbl_pcie_1_aux_clk_src,
 846        .clkr.hw.init = &(struct clk_init_data)
 847        {
 848                .name = "pcie_1_aux_clk_src",
 849                .parent_names = (const char *[]) { "xo" },
 850                .num_parents = 1,
 851                .ops = &clk_rcg2_ops,
 852        },
 853};
 854
 855static struct clk_rcg2 pcie_1_pipe_clk_src = {
 856        .cmd_rcgr = 0x1b5c,
 857        .hid_width = 5,
 858        .freq_tbl = ftbl_pcie_pipe_clk_src,
 859        .clkr.hw.init = &(struct clk_init_data)
 860        {
 861                .name = "pcie_1_pipe_clk_src",
 862                .parent_names = (const char *[]) { "xo" },
 863                .num_parents = 1,
 864                .ops = &clk_rcg2_ops,
 865        },
 866};
 867
 868static struct freq_tbl ftbl_pdm2_clk_src[] = {
 869        F(60000000, P_GPLL0, 10, 0, 0),
 870        { }
 871};
 872
 873static struct clk_rcg2 pdm2_clk_src = {
 874        .cmd_rcgr = 0x0cd0,
 875        .hid_width = 5,
 876        .parent_map = gcc_xo_gpll0_map,
 877        .freq_tbl = ftbl_pdm2_clk_src,
 878        .clkr.hw.init = &(struct clk_init_data)
 879        {
 880                .name = "pdm2_clk_src",
 881                .parent_names = gcc_xo_gpll0,
 882                .num_parents = 2,
 883                .ops = &clk_rcg2_ops,
 884        },
 885};
 886
 887static struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
 888        F(144000, P_XO, 16, 3, 25),
 889        F(400000, P_XO, 12, 1, 4),
 890        F(20000000, P_GPLL0, 15, 1, 2),
 891        F(25000000, P_GPLL0, 12, 1, 2),
 892        F(50000000, P_GPLL0, 12, 0, 0),
 893        F(100000000, P_GPLL0, 6, 0, 0),
 894        F(192000000, P_GPLL4, 2, 0, 0),
 895        F(384000000, P_GPLL4, 1, 0, 0),
 896        { }
 897};
 898
 899static struct clk_rcg2 sdcc1_apps_clk_src = {
 900        .cmd_rcgr = 0x04d0,
 901        .mnd_width = 8,
 902        .hid_width = 5,
 903        .parent_map = gcc_xo_gpll0_gpll4_map,
 904        .freq_tbl = ftbl_sdcc1_apps_clk_src,
 905        .clkr.hw.init = &(struct clk_init_data)
 906        {
 907                .name = "sdcc1_apps_clk_src",
 908                .parent_names = gcc_xo_gpll0_gpll4,
 909                .num_parents = 3,
 910                .ops = &clk_rcg2_floor_ops,
 911        },
 912};
 913
 914static struct freq_tbl ftbl_sdcc2_4_apps_clk_src[] = {
 915        F(144000, P_XO, 16, 3, 25),
 916        F(400000, P_XO, 12, 1, 4),
 917        F(20000000, P_GPLL0, 15, 1, 2),
 918        F(25000000, P_GPLL0, 12, 1, 2),
 919        F(50000000, P_GPLL0, 12, 0, 0),
 920        F(100000000, P_GPLL0, 6, 0, 0),
 921        F(200000000, P_GPLL0, 3, 0, 0),
 922        { }
 923};
 924
 925static struct clk_rcg2 sdcc2_apps_clk_src = {
 926        .cmd_rcgr = 0x0510,
 927        .mnd_width = 8,
 928        .hid_width = 5,
 929        .parent_map = gcc_xo_gpll0_map,
 930        .freq_tbl = ftbl_sdcc2_4_apps_clk_src,
 931        .clkr.hw.init = &(struct clk_init_data)
 932        {
 933                .name = "sdcc2_apps_clk_src",
 934                .parent_names = gcc_xo_gpll0,
 935                .num_parents = 2,
 936                .ops = &clk_rcg2_floor_ops,
 937        },
 938};
 939
 940static struct clk_rcg2 sdcc3_apps_clk_src = {
 941        .cmd_rcgr = 0x0550,
 942        .mnd_width = 8,
 943        .hid_width = 5,
 944        .parent_map = gcc_xo_gpll0_map,
 945        .freq_tbl = ftbl_sdcc2_4_apps_clk_src,
 946        .clkr.hw.init = &(struct clk_init_data)
 947        {
 948                .name = "sdcc3_apps_clk_src",
 949                .parent_names = gcc_xo_gpll0,
 950                .num_parents = 2,
 951                .ops = &clk_rcg2_floor_ops,
 952        },
 953};
 954
 955static struct clk_rcg2 sdcc4_apps_clk_src = {
 956        .cmd_rcgr = 0x0590,
 957        .mnd_width = 8,
 958        .hid_width = 5,
 959        .parent_map = gcc_xo_gpll0_map,
 960        .freq_tbl = ftbl_sdcc2_4_apps_clk_src,
 961        .clkr.hw.init = &(struct clk_init_data)
 962        {
 963                .name = "sdcc4_apps_clk_src",
 964                .parent_names = gcc_xo_gpll0,
 965                .num_parents = 2,
 966                .ops = &clk_rcg2_floor_ops,
 967        },
 968};
 969
 970static struct freq_tbl ftbl_tsif_ref_clk_src[] = {
 971        F(105500, P_XO, 1, 1, 182),
 972        { }
 973};
 974
 975static struct clk_rcg2 tsif_ref_clk_src = {
 976        .cmd_rcgr = 0x0d90,
 977        .mnd_width = 8,
 978        .hid_width = 5,
 979        .freq_tbl = ftbl_tsif_ref_clk_src,
 980        .clkr.hw.init = &(struct clk_init_data)
 981        {
 982                .name = "tsif_ref_clk_src",
 983                .parent_names = (const char *[]) { "xo" },
 984                .num_parents = 1,
 985                .ops = &clk_rcg2_ops,
 986        },
 987};
 988
 989static struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = {
 990        F(19200000, P_XO, 1, 0, 0),
 991        F(60000000, P_GPLL0, 10, 0, 0),
 992        { }
 993};
 994
 995static struct clk_rcg2 usb30_mock_utmi_clk_src = {
 996        .cmd_rcgr = 0x03e8,
 997        .hid_width = 5,
 998        .parent_map = gcc_xo_gpll0_map,
 999        .freq_tbl = ftbl_usb30_mock_utmi_clk_src,
1000        .clkr.hw.init = &(struct clk_init_data)
1001        {
1002                .name = "usb30_mock_utmi_clk_src",
1003                .parent_names = gcc_xo_gpll0,
1004                .num_parents = 2,
1005                .ops = &clk_rcg2_ops,
1006        },
1007};
1008
1009static struct freq_tbl ftbl_usb3_phy_aux_clk_src[] = {
1010        F(1200000, P_XO, 16, 0, 0),
1011        { }
1012};
1013
1014static struct clk_rcg2 usb3_phy_aux_clk_src = {
1015        .cmd_rcgr = 0x1414,
1016        .hid_width = 5,
1017        .freq_tbl = ftbl_usb3_phy_aux_clk_src,
1018        .clkr.hw.init = &(struct clk_init_data)
1019        {
1020                .name = "usb3_phy_aux_clk_src",
1021                .parent_names = (const char *[]) { "xo" },
1022                .num_parents = 1,
1023                .ops = &clk_rcg2_ops,
1024        },
1025};
1026
1027static struct freq_tbl ftbl_usb_hs_system_clk_src[] = {
1028        F(75000000, P_GPLL0, 8, 0, 0),
1029        { }
1030};
1031
1032static struct clk_rcg2 usb_hs_system_clk_src = {
1033        .cmd_rcgr = 0x0490,
1034        .hid_width = 5,
1035        .parent_map = gcc_xo_gpll0_map,
1036        .freq_tbl = ftbl_usb_hs_system_clk_src,
1037        .clkr.hw.init = &(struct clk_init_data)
1038        {
1039                .name = "usb_hs_system_clk_src",
1040                .parent_names = gcc_xo_gpll0,
1041                .num_parents = 2,
1042                .ops = &clk_rcg2_ops,
1043        },
1044};
1045
1046static struct clk_branch gcc_blsp1_ahb_clk = {
1047        .halt_reg = 0x05c4,
1048        .halt_check = BRANCH_HALT_VOTED,
1049        .clkr = {
1050                .enable_reg = 0x1484,
1051                .enable_mask = BIT(17),
1052                .hw.init = &(struct clk_init_data)
1053                {
1054                        .name = "gcc_blsp1_ahb_clk",
1055                        .ops = &clk_branch2_ops,
1056                },
1057        },
1058};
1059
1060static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1061        .halt_reg = 0x0648,
1062        .clkr = {
1063                .enable_reg = 0x0648,
1064                .enable_mask = BIT(0),
1065                .hw.init = &(struct clk_init_data)
1066                {
1067                        .name = "gcc_blsp1_qup1_i2c_apps_clk",
1068                        .parent_names = (const char *[]) {
1069                                "blsp1_qup1_i2c_apps_clk_src",
1070                        },
1071                        .num_parents = 1,
1072                        .flags = CLK_SET_RATE_PARENT,
1073                        .ops = &clk_branch2_ops,
1074                },
1075        },
1076};
1077
1078static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1079        .halt_reg = 0x0644,
1080        .clkr = {
1081                .enable_reg = 0x0644,
1082                .enable_mask = BIT(0),
1083                .hw.init = &(struct clk_init_data)
1084                {
1085                        .name = "gcc_blsp1_qup1_spi_apps_clk",
1086                        .parent_names = (const char *[]) {
1087                                "blsp1_qup1_spi_apps_clk_src",
1088                        },
1089                        .num_parents = 1,
1090                        .flags = CLK_SET_RATE_PARENT,
1091                        .ops = &clk_branch2_ops,
1092                },
1093        },
1094};
1095
1096static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1097        .halt_reg = 0x06c8,
1098        .clkr = {
1099                .enable_reg = 0x06c8,
1100                .enable_mask = BIT(0),
1101                .hw.init = &(struct clk_init_data)
1102                {
1103                        .name = "gcc_blsp1_qup2_i2c_apps_clk",
1104                        .parent_names = (const char *[]) {
1105                                "blsp1_qup2_i2c_apps_clk_src",
1106                        },
1107                        .num_parents = 1,
1108                        .flags = CLK_SET_RATE_PARENT,
1109                        .ops = &clk_branch2_ops,
1110                },
1111        },
1112};
1113
1114static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1115        .halt_reg = 0x06c4,
1116        .clkr = {
1117                .enable_reg = 0x06c4,
1118                .enable_mask = BIT(0),
1119                .hw.init = &(struct clk_init_data)
1120                {
1121                        .name = "gcc_blsp1_qup2_spi_apps_clk",
1122                        .parent_names = (const char *[]) {
1123                                "blsp1_qup2_spi_apps_clk_src",
1124                        },
1125                        .num_parents = 1,
1126                        .flags = CLK_SET_RATE_PARENT,
1127                        .ops = &clk_branch2_ops,
1128                },
1129        },
1130};
1131
1132static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1133        .halt_reg = 0x0748,
1134        .clkr = {
1135                .enable_reg = 0x0748,
1136                .enable_mask = BIT(0),
1137                .hw.init = &(struct clk_init_data)
1138                {
1139                        .name = "gcc_blsp1_qup3_i2c_apps_clk",
1140                        .parent_names = (const char *[]) {
1141                                "blsp1_qup3_i2c_apps_clk_src",
1142                        },
1143                        .num_parents = 1,
1144                        .flags = CLK_SET_RATE_PARENT,
1145                        .ops = &clk_branch2_ops,
1146                },
1147        },
1148};
1149
1150static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1151        .halt_reg = 0x0744,
1152        .clkr = {
1153                .enable_reg = 0x0744,
1154                .enable_mask = BIT(0),
1155                .hw.init = &(struct clk_init_data)
1156                {
1157                        .name = "gcc_blsp1_qup3_spi_apps_clk",
1158                        .parent_names = (const char *[]) {
1159                                "blsp1_qup3_spi_apps_clk_src",
1160                        },
1161                        .num_parents = 1,
1162                        .flags = CLK_SET_RATE_PARENT,
1163                        .ops = &clk_branch2_ops,
1164                },
1165        },
1166};
1167
1168static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1169        .halt_reg = 0x07c8,
1170        .clkr = {
1171                .enable_reg = 0x07c8,
1172                .enable_mask = BIT(0),
1173                .hw.init = &(struct clk_init_data)
1174                {
1175                        .name = "gcc_blsp1_qup4_i2c_apps_clk",
1176                        .parent_names = (const char *[]) {
1177                                "blsp1_qup4_i2c_apps_clk_src",
1178                        },
1179                        .num_parents = 1,
1180                        .flags = CLK_SET_RATE_PARENT,
1181                        .ops = &clk_branch2_ops,
1182                },
1183        },
1184};
1185
1186static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1187        .halt_reg = 0x07c4,
1188        .clkr = {
1189                .enable_reg = 0x07c4,
1190                .enable_mask = BIT(0),
1191                .hw.init = &(struct clk_init_data)
1192                {
1193                        .name = "gcc_blsp1_qup4_spi_apps_clk",
1194                        .parent_names = (const char *[]) {
1195                                "blsp1_qup4_spi_apps_clk_src",
1196                        },
1197                        .num_parents = 1,
1198                        .flags = CLK_SET_RATE_PARENT,
1199                        .ops = &clk_branch2_ops,
1200                },
1201        },
1202};
1203
1204static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
1205        .halt_reg = 0x0848,
1206        .clkr = {
1207                .enable_reg = 0x0848,
1208                .enable_mask = BIT(0),
1209                .hw.init = &(struct clk_init_data)
1210                {
1211                        .name = "gcc_blsp1_qup5_i2c_apps_clk",
1212                        .parent_names = (const char *[]) {
1213                                "blsp1_qup5_i2c_apps_clk_src",
1214                        },
1215                        .num_parents = 1,
1216                        .flags = CLK_SET_RATE_PARENT,
1217                        .ops = &clk_branch2_ops,
1218                },
1219        },
1220};
1221
1222static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
1223        .halt_reg = 0x0844,
1224        .clkr = {
1225                .enable_reg = 0x0844,
1226                .enable_mask = BIT(0),
1227                .hw.init = &(struct clk_init_data)
1228                {
1229                        .name = "gcc_blsp1_qup5_spi_apps_clk",
1230                        .parent_names = (const char *[]) {
1231                                "blsp1_qup5_spi_apps_clk_src",
1232                        },
1233                        .num_parents = 1,
1234                        .flags = CLK_SET_RATE_PARENT,
1235                        .ops = &clk_branch2_ops,
1236                },
1237        },
1238};
1239
1240static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
1241        .halt_reg = 0x08c8,
1242        .clkr = {
1243                .enable_reg = 0x08c8,
1244                .enable_mask = BIT(0),
1245                .hw.init = &(struct clk_init_data)
1246                {
1247                        .name = "gcc_blsp1_qup6_i2c_apps_clk",
1248                        .parent_names = (const char *[]) {
1249                                "blsp1_qup6_i2c_apps_clk_src",
1250                        },
1251                        .num_parents = 1,
1252                        .flags = CLK_SET_RATE_PARENT,
1253                        .ops = &clk_branch2_ops,
1254                },
1255        },
1256};
1257
1258static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
1259        .halt_reg = 0x08c4,
1260        .clkr = {
1261                .enable_reg = 0x08c4,
1262                .enable_mask = BIT(0),
1263                .hw.init = &(struct clk_init_data)
1264                {
1265                        .name = "gcc_blsp1_qup6_spi_apps_clk",
1266                        .parent_names = (const char *[]) {
1267                                "blsp1_qup6_spi_apps_clk_src",
1268                        },
1269                        .num_parents = 1,
1270                        .flags = CLK_SET_RATE_PARENT,
1271                        .ops = &clk_branch2_ops,
1272                },
1273        },
1274};
1275
1276static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1277        .halt_reg = 0x0684,
1278        .clkr = {
1279                .enable_reg = 0x0684,
1280                .enable_mask = BIT(0),
1281                .hw.init = &(struct clk_init_data)
1282                {
1283                        .name = "gcc_blsp1_uart1_apps_clk",
1284                        .parent_names = (const char *[]) {
1285                                "blsp1_uart1_apps_clk_src",
1286                        },
1287                        .num_parents = 1,
1288                        .flags = CLK_SET_RATE_PARENT,
1289                        .ops = &clk_branch2_ops,
1290                },
1291        },
1292};
1293
1294static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1295        .halt_reg = 0x0704,
1296        .clkr = {
1297                .enable_reg = 0x0704,
1298                .enable_mask = BIT(0),
1299                .hw.init = &(struct clk_init_data)
1300                {
1301                        .name = "gcc_blsp1_uart2_apps_clk",
1302                        .parent_names = (const char *[]) {
1303                                "blsp1_uart2_apps_clk_src",
1304                        },
1305                        .num_parents = 1,
1306                        .flags = CLK_SET_RATE_PARENT,
1307                        .ops = &clk_branch2_ops,
1308                },
1309        },
1310};
1311
1312static struct clk_branch gcc_blsp1_uart3_apps_clk = {
1313        .halt_reg = 0x0784,
1314        .clkr = {
1315                .enable_reg = 0x0784,
1316                .enable_mask = BIT(0),
1317                .hw.init = &(struct clk_init_data)
1318                {
1319                        .name = "gcc_blsp1_uart3_apps_clk",
1320                        .parent_names = (const char *[]) {
1321                                "blsp1_uart3_apps_clk_src",
1322                        },
1323                        .num_parents = 1,
1324                        .flags = CLK_SET_RATE_PARENT,
1325                        .ops = &clk_branch2_ops,
1326                },
1327        },
1328};
1329
1330static struct clk_branch gcc_blsp1_uart4_apps_clk = {
1331        .halt_reg = 0x0804,
1332        .clkr = {
1333                .enable_reg = 0x0804,
1334                .enable_mask = BIT(0),
1335                .hw.init = &(struct clk_init_data)
1336                {
1337                        .name = "gcc_blsp1_uart4_apps_clk",
1338                        .parent_names = (const char *[]) {
1339                                "blsp1_uart4_apps_clk_src",
1340                        },
1341                        .num_parents = 1,
1342                        .flags = CLK_SET_RATE_PARENT,
1343                        .ops = &clk_branch2_ops,
1344                },
1345        },
1346};
1347
1348static struct clk_branch gcc_blsp1_uart5_apps_clk = {
1349        .halt_reg = 0x0884,
1350        .clkr = {
1351                .enable_reg = 0x0884,
1352                .enable_mask = BIT(0),
1353                .hw.init = &(struct clk_init_data)
1354                {
1355                        .name = "gcc_blsp1_uart5_apps_clk",
1356                        .parent_names = (const char *[]) {
1357                                "blsp1_uart5_apps_clk_src",
1358                        },
1359                        .num_parents = 1,
1360                        .flags = CLK_SET_RATE_PARENT,
1361                        .ops = &clk_branch2_ops,
1362                },
1363        },
1364};
1365
1366static struct clk_branch gcc_blsp1_uart6_apps_clk = {
1367        .halt_reg = 0x0904,
1368        .clkr = {
1369                .enable_reg = 0x0904,
1370                .enable_mask = BIT(0),
1371                .hw.init = &(struct clk_init_data)
1372                {
1373                        .name = "gcc_blsp1_uart6_apps_clk",
1374                        .parent_names = (const char *[]) {
1375                                "blsp1_uart6_apps_clk_src",
1376                        },
1377                        .num_parents = 1,
1378                        .flags = CLK_SET_RATE_PARENT,
1379                        .ops = &clk_branch2_ops,
1380                },
1381        },
1382};
1383
1384static struct clk_branch gcc_blsp2_ahb_clk = {
1385        .halt_reg = 0x0944,
1386        .halt_check = BRANCH_HALT_VOTED,
1387        .clkr = {
1388                .enable_reg = 0x1484,
1389                .enable_mask = BIT(15),
1390                .hw.init = &(struct clk_init_data)
1391                {
1392                        .name = "gcc_blsp2_ahb_clk",
1393                        .ops = &clk_branch2_ops,
1394                },
1395        },
1396};
1397
1398static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
1399        .halt_reg = 0x0988,
1400        .clkr = {
1401                .enable_reg = 0x0988,
1402                .enable_mask = BIT(0),
1403                .hw.init = &(struct clk_init_data)
1404                {
1405                        .name = "gcc_blsp2_qup1_i2c_apps_clk",
1406                        .parent_names = (const char *[]) {
1407                                "blsp2_qup1_i2c_apps_clk_src",
1408                        },
1409                        .num_parents = 1,
1410                        .flags = CLK_SET_RATE_PARENT,
1411                        .ops = &clk_branch2_ops,
1412                },
1413        },
1414};
1415
1416static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
1417        .halt_reg = 0x0984,
1418        .clkr = {
1419                .enable_reg = 0x0984,
1420                .enable_mask = BIT(0),
1421                .hw.init = &(struct clk_init_data)
1422                {
1423                        .name = "gcc_blsp2_qup1_spi_apps_clk",
1424                        .parent_names = (const char *[]) {
1425                                "blsp2_qup1_spi_apps_clk_src",
1426                        },
1427                        .num_parents = 1,
1428                        .flags = CLK_SET_RATE_PARENT,
1429                        .ops = &clk_branch2_ops,
1430                },
1431        },
1432};
1433
1434static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
1435        .halt_reg = 0x0a08,
1436        .clkr = {
1437                .enable_reg = 0x0a08,
1438                .enable_mask = BIT(0),
1439                .hw.init = &(struct clk_init_data)
1440                {
1441                        .name = "gcc_blsp2_qup2_i2c_apps_clk",
1442                        .parent_names = (const char *[]) {
1443                                "blsp2_qup2_i2c_apps_clk_src",
1444                        },
1445                        .num_parents = 1,
1446                        .flags = CLK_SET_RATE_PARENT,
1447                        .ops = &clk_branch2_ops,
1448                },
1449        },
1450};
1451
1452static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
1453        .halt_reg = 0x0a04,
1454        .clkr = {
1455                .enable_reg = 0x0a04,
1456                .enable_mask = BIT(0),
1457                .hw.init = &(struct clk_init_data)
1458                {
1459                        .name = "gcc_blsp2_qup2_spi_apps_clk",
1460                        .parent_names = (const char *[]) {
1461                                "blsp2_qup2_spi_apps_clk_src",
1462                        },
1463                        .num_parents = 1,
1464                        .flags = CLK_SET_RATE_PARENT,
1465                        .ops = &clk_branch2_ops,
1466                },
1467        },
1468};
1469
1470static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
1471        .halt_reg = 0x0a88,
1472        .clkr = {
1473                .enable_reg = 0x0a88,
1474                .enable_mask = BIT(0),
1475                .hw.init = &(struct clk_init_data)
1476                {
1477                        .name = "gcc_blsp2_qup3_i2c_apps_clk",
1478                        .parent_names = (const char *[]) {
1479                                "blsp2_qup3_i2c_apps_clk_src",
1480                        },
1481                        .num_parents = 1,
1482                        .flags = CLK_SET_RATE_PARENT,
1483                        .ops = &clk_branch2_ops,
1484                },
1485        },
1486};
1487
1488static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
1489        .halt_reg = 0x0a84,
1490        .clkr = {
1491                .enable_reg = 0x0a84,
1492                .enable_mask = BIT(0),
1493                .hw.init = &(struct clk_init_data)
1494                {
1495                        .name = "gcc_blsp2_qup3_spi_apps_clk",
1496                        .parent_names = (const char *[]) {
1497                                "blsp2_qup3_spi_apps_clk_src",
1498                        },
1499                        .num_parents = 1,
1500                        .flags = CLK_SET_RATE_PARENT,
1501                        .ops = &clk_branch2_ops,
1502                },
1503        },
1504};
1505
1506static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
1507        .halt_reg = 0x0b08,
1508        .clkr = {
1509                .enable_reg = 0x0b08,
1510                .enable_mask = BIT(0),
1511                .hw.init = &(struct clk_init_data)
1512                {
1513                        .name = "gcc_blsp2_qup4_i2c_apps_clk",
1514                        .parent_names = (const char *[]) {
1515                                "blsp2_qup4_i2c_apps_clk_src",
1516                        },
1517                        .num_parents = 1,
1518                        .flags = CLK_SET_RATE_PARENT,
1519                        .ops = &clk_branch2_ops,
1520                },
1521        },
1522};
1523
1524static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
1525        .halt_reg = 0x0b04,
1526        .clkr = {
1527                .enable_reg = 0x0b04,
1528                .enable_mask = BIT(0),
1529                .hw.init = &(struct clk_init_data)
1530                {
1531                        .name = "gcc_blsp2_qup4_spi_apps_clk",
1532                        .parent_names = (const char *[]) {
1533                                "blsp2_qup4_spi_apps_clk_src",
1534                        },
1535                        .num_parents = 1,
1536                        .flags = CLK_SET_RATE_PARENT,
1537                        .ops = &clk_branch2_ops,
1538                },
1539        },
1540};
1541
1542static struct clk_branch gcc_blsp2_qup5_i2c_apps_clk = {
1543        .halt_reg = 0x0b88,
1544        .clkr = {
1545                .enable_reg = 0x0b88,
1546                .enable_mask = BIT(0),
1547                .hw.init = &(struct clk_init_data)
1548                {
1549                        .name = "gcc_blsp2_qup5_i2c_apps_clk",
1550                        .parent_names = (const char *[]) {
1551                                "blsp2_qup5_i2c_apps_clk_src",
1552                        },
1553                        .num_parents = 1,
1554                        .flags = CLK_SET_RATE_PARENT,
1555                        .ops = &clk_branch2_ops,
1556                },
1557        },
1558};
1559
1560static struct clk_branch gcc_blsp2_qup5_spi_apps_clk = {
1561        .halt_reg = 0x0b84,
1562        .clkr = {
1563                .enable_reg = 0x0b84,
1564                .enable_mask = BIT(0),
1565                .hw.init = &(struct clk_init_data)
1566                {
1567                        .name = "gcc_blsp2_qup5_spi_apps_clk",
1568                        .parent_names = (const char *[]) {
1569                                "blsp2_qup5_spi_apps_clk_src",
1570                        },
1571                        .num_parents = 1,
1572                        .flags = CLK_SET_RATE_PARENT,
1573                        .ops = &clk_branch2_ops,
1574                },
1575        },
1576};
1577
1578static struct clk_branch gcc_blsp2_qup6_i2c_apps_clk = {
1579        .halt_reg = 0x0c08,
1580        .clkr = {
1581                .enable_reg = 0x0c08,
1582                .enable_mask = BIT(0),
1583                .hw.init = &(struct clk_init_data)
1584                {
1585                        .name = "gcc_blsp2_qup6_i2c_apps_clk",
1586                        .parent_names = (const char *[]) {
1587                                "blsp2_qup6_i2c_apps_clk_src",
1588                        },
1589                        .num_parents = 1,
1590                        .flags = CLK_SET_RATE_PARENT,
1591                        .ops = &clk_branch2_ops,
1592                },
1593        },
1594};
1595
1596static struct clk_branch gcc_blsp2_qup6_spi_apps_clk = {
1597        .halt_reg = 0x0c04,
1598        .clkr = {
1599                .enable_reg = 0x0c04,
1600                .enable_mask = BIT(0),
1601                .hw.init = &(struct clk_init_data)
1602                {
1603                        .name = "gcc_blsp2_qup6_spi_apps_clk",
1604                        .parent_names = (const char *[]) {
1605                                "blsp2_qup6_spi_apps_clk_src",
1606                        },
1607                        .num_parents = 1,
1608                        .flags = CLK_SET_RATE_PARENT,
1609                        .ops = &clk_branch2_ops,
1610                },
1611        },
1612};
1613
1614static struct clk_branch gcc_blsp2_uart1_apps_clk = {
1615        .halt_reg = 0x09c4,
1616        .clkr = {
1617                .enable_reg = 0x09c4,
1618                .enable_mask = BIT(0),
1619                .hw.init = &(struct clk_init_data)
1620                {
1621                        .name = "gcc_blsp2_uart1_apps_clk",
1622                        .parent_names = (const char *[]) {
1623                                "blsp2_uart1_apps_clk_src",
1624                        },
1625                        .num_parents = 1,
1626                        .flags = CLK_SET_RATE_PARENT,
1627                        .ops = &clk_branch2_ops,
1628                },
1629        },
1630};
1631
1632static struct clk_branch gcc_blsp2_uart2_apps_clk = {
1633        .halt_reg = 0x0a44,
1634        .clkr = {
1635                .enable_reg = 0x0a44,
1636                .enable_mask = BIT(0),
1637                .hw.init = &(struct clk_init_data)
1638                {
1639                        .name = "gcc_blsp2_uart2_apps_clk",
1640                        .parent_names = (const char *[]) {
1641                                "blsp2_uart2_apps_clk_src",
1642                        },
1643                        .num_parents = 1,
1644                        .flags = CLK_SET_RATE_PARENT,
1645                        .ops = &clk_branch2_ops,
1646                },
1647        },
1648};
1649
1650static struct clk_branch gcc_blsp2_uart3_apps_clk = {
1651        .halt_reg = 0x0ac4,
1652        .clkr = {
1653                .enable_reg = 0x0ac4,
1654                .enable_mask = BIT(0),
1655                .hw.init = &(struct clk_init_data)
1656                {
1657                        .name = "gcc_blsp2_uart3_apps_clk",
1658                        .parent_names = (const char *[]) {
1659                                "blsp2_uart3_apps_clk_src",
1660                        },
1661                        .num_parents = 1,
1662                        .flags = CLK_SET_RATE_PARENT,
1663                        .ops = &clk_branch2_ops,
1664                },
1665        },
1666};
1667
1668static struct clk_branch gcc_blsp2_uart4_apps_clk = {
1669        .halt_reg = 0x0b44,
1670        .clkr = {
1671                .enable_reg = 0x0b44,
1672                .enable_mask = BIT(0),
1673                .hw.init = &(struct clk_init_data)
1674                {
1675                        .name = "gcc_blsp2_uart4_apps_clk",
1676                        .parent_names = (const char *[]) {
1677                                "blsp2_uart4_apps_clk_src",
1678                        },
1679                        .num_parents = 1,
1680                        .flags = CLK_SET_RATE_PARENT,
1681                        .ops = &clk_branch2_ops,
1682                },
1683        },
1684};
1685
1686static struct clk_branch gcc_blsp2_uart5_apps_clk = {
1687        .halt_reg = 0x0bc4,
1688        .clkr = {
1689                .enable_reg = 0x0bc4,
1690                .enable_mask = BIT(0),
1691                .hw.init = &(struct clk_init_data)
1692                {
1693                        .name = "gcc_blsp2_uart5_apps_clk",
1694                        .parent_names = (const char *[]) {
1695                                "blsp2_uart5_apps_clk_src",
1696                        },
1697                        .num_parents = 1,
1698                        .flags = CLK_SET_RATE_PARENT,
1699                        .ops = &clk_branch2_ops,
1700                },
1701        },
1702};
1703
1704static struct clk_branch gcc_blsp2_uart6_apps_clk = {
1705        .halt_reg = 0x0c44,
1706        .clkr = {
1707                .enable_reg = 0x0c44,
1708                .enable_mask = BIT(0),
1709                .hw.init = &(struct clk_init_data)
1710                {
1711                        .name = "gcc_blsp2_uart6_apps_clk",
1712                        .parent_names = (const char *[]) {
1713                                "blsp2_uart6_apps_clk_src",
1714                        },
1715                        .num_parents = 1,
1716                        .flags = CLK_SET_RATE_PARENT,
1717                        .ops = &clk_branch2_ops,
1718                },
1719        },
1720};
1721
1722static struct clk_branch gcc_gp1_clk = {
1723        .halt_reg = 0x1900,
1724        .clkr = {
1725                .enable_reg = 0x1900,
1726                .enable_mask = BIT(0),
1727                .hw.init = &(struct clk_init_data)
1728                {
1729                        .name = "gcc_gp1_clk",
1730                        .parent_names = (const char *[]) {
1731                                "gp1_clk_src",
1732                        },
1733                        .num_parents = 1,
1734                        .flags = CLK_SET_RATE_PARENT,
1735                        .ops = &clk_branch2_ops,
1736                },
1737        },
1738};
1739
1740static struct clk_branch gcc_gp2_clk = {
1741        .halt_reg = 0x1940,
1742        .clkr = {
1743                .enable_reg = 0x1940,
1744                .enable_mask = BIT(0),
1745                .hw.init = &(struct clk_init_data)
1746                {
1747                        .name = "gcc_gp2_clk",
1748                        .parent_names = (const char *[]) {
1749                                "gp2_clk_src",
1750                        },
1751                        .num_parents = 1,
1752                        .flags = CLK_SET_RATE_PARENT,
1753                        .ops = &clk_branch2_ops,
1754                },
1755        },
1756};
1757
1758static struct clk_branch gcc_gp3_clk = {
1759        .halt_reg = 0x1980,
1760        .clkr = {
1761                .enable_reg = 0x1980,
1762                .enable_mask = BIT(0),
1763                .hw.init = &(struct clk_init_data)
1764                {
1765                        .name = "gcc_gp3_clk",
1766                        .parent_names = (const char *[]) {
1767                                "gp3_clk_src",
1768                        },
1769                        .num_parents = 1,
1770                        .flags = CLK_SET_RATE_PARENT,
1771                        .ops = &clk_branch2_ops,
1772                },
1773        },
1774};
1775
1776static struct clk_branch gcc_lpass_q6_axi_clk = {
1777        .halt_reg = 0x0280,
1778        .clkr = {
1779                .enable_reg = 0x0280,
1780                .enable_mask = BIT(0),
1781                .hw.init = &(struct clk_init_data)
1782                {
1783                        .name = "gcc_lpass_q6_axi_clk",
1784                        .ops = &clk_branch2_ops,
1785                },
1786        },
1787};
1788
1789static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
1790        .halt_reg = 0x0284,
1791        .clkr = {
1792                .enable_reg = 0x0284,
1793                .enable_mask = BIT(0),
1794                .hw.init = &(struct clk_init_data)
1795                {
1796                        .name = "gcc_mss_q6_bimc_axi_clk",
1797                        .ops = &clk_branch2_ops,
1798                },
1799        },
1800};
1801
1802static struct clk_branch gcc_pcie_0_aux_clk = {
1803        .halt_reg = 0x1ad4,
1804        .clkr = {
1805                .enable_reg = 0x1ad4,
1806                .enable_mask = BIT(0),
1807                .hw.init = &(struct clk_init_data)
1808                {
1809                        .name = "gcc_pcie_0_aux_clk",
1810                        .parent_names = (const char *[]) {
1811                                "pcie_0_aux_clk_src",
1812                        },
1813                        .num_parents = 1,
1814                        .flags = CLK_SET_RATE_PARENT,
1815                        .ops = &clk_branch2_ops,
1816                },
1817        },
1818};
1819
1820static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
1821        .halt_reg = 0x1ad0,
1822        .clkr = {
1823                .enable_reg = 0x1ad0,
1824                .enable_mask = BIT(0),
1825                .hw.init = &(struct clk_init_data)
1826                {
1827                        .name = "gcc_pcie_0_cfg_ahb_clk",
1828                        .ops = &clk_branch2_ops,
1829                },
1830        },
1831};
1832
1833static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
1834        .halt_reg = 0x1acc,
1835        .clkr = {
1836                .enable_reg = 0x1acc,
1837                .enable_mask = BIT(0),
1838                .hw.init = &(struct clk_init_data)
1839                {
1840                        .name = "gcc_pcie_0_mstr_axi_clk",
1841                        .ops = &clk_branch2_ops,
1842                },
1843        },
1844};
1845
1846static struct clk_branch gcc_pcie_0_pipe_clk = {
1847        .halt_reg = 0x1ad8,
1848        .halt_check = BRANCH_HALT_DELAY,
1849        .clkr = {
1850                .enable_reg = 0x1ad8,
1851                .enable_mask = BIT(0),
1852                .hw.init = &(struct clk_init_data)
1853                {
1854                        .name = "gcc_pcie_0_pipe_clk",
1855                        .parent_names = (const char *[]) {
1856                                "pcie_0_pipe_clk_src",
1857                        },
1858                        .num_parents = 1,
1859                        .flags = CLK_SET_RATE_PARENT,
1860                        .ops = &clk_branch2_ops,
1861                },
1862        },
1863};
1864
1865static struct clk_branch gcc_pcie_0_slv_axi_clk = {
1866        .halt_reg = 0x1ac8,
1867        .halt_check = BRANCH_HALT_DELAY,
1868        .clkr = {
1869                .enable_reg = 0x1ac8,
1870                .enable_mask = BIT(0),
1871                .hw.init = &(struct clk_init_data)
1872                {
1873                        .name = "gcc_pcie_0_slv_axi_clk",
1874                        .ops = &clk_branch2_ops,
1875                },
1876        },
1877};
1878
1879static struct clk_branch gcc_pcie_1_aux_clk = {
1880        .halt_reg = 0x1b54,
1881        .clkr = {
1882                .enable_reg = 0x1b54,
1883                .enable_mask = BIT(0),
1884                .hw.init = &(struct clk_init_data)
1885                {
1886                        .name = "gcc_pcie_1_aux_clk",
1887                        .parent_names = (const char *[]) {
1888                                "pcie_1_aux_clk_src",
1889                        },
1890                        .num_parents = 1,
1891                        .flags = CLK_SET_RATE_PARENT,
1892                        .ops = &clk_branch2_ops,
1893                },
1894        },
1895};
1896
1897static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
1898        .halt_reg = 0x1b54,
1899        .clkr = {
1900                .enable_reg = 0x1b54,
1901                .enable_mask = BIT(0),
1902                .hw.init = &(struct clk_init_data)
1903                {
1904                        .name = "gcc_pcie_1_cfg_ahb_clk",
1905                        .ops = &clk_branch2_ops,
1906                },
1907        },
1908};
1909
1910static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
1911        .halt_reg = 0x1b50,
1912        .clkr = {
1913                .enable_reg = 0x1b50,
1914                .enable_mask = BIT(0),
1915                .hw.init = &(struct clk_init_data)
1916                {
1917                        .name = "gcc_pcie_1_mstr_axi_clk",
1918                        .ops = &clk_branch2_ops,
1919                },
1920        },
1921};
1922
1923static struct clk_branch gcc_pcie_1_pipe_clk = {
1924        .halt_reg = 0x1b58,
1925        .halt_check = BRANCH_HALT_DELAY,
1926        .clkr = {
1927                .enable_reg = 0x1b58,
1928                .enable_mask = BIT(0),
1929                .hw.init = &(struct clk_init_data)
1930                {
1931                        .name = "gcc_pcie_1_pipe_clk",
1932                        .parent_names = (const char *[]) {
1933                                "pcie_1_pipe_clk_src",
1934                        },
1935                        .num_parents = 1,
1936                        .flags = CLK_SET_RATE_PARENT,
1937                        .ops = &clk_branch2_ops,
1938                },
1939        },
1940};
1941
1942static struct clk_branch gcc_pcie_1_slv_axi_clk = {
1943        .halt_reg = 0x1b48,
1944        .clkr = {
1945                .enable_reg = 0x1b48,
1946                .enable_mask = BIT(0),
1947                .hw.init = &(struct clk_init_data)
1948                {
1949                        .name = "gcc_pcie_1_slv_axi_clk",
1950                        .ops = &clk_branch2_ops,
1951                },
1952        },
1953};
1954
1955static struct clk_branch gcc_pdm2_clk = {
1956        .halt_reg = 0x0ccc,
1957        .clkr = {
1958                .enable_reg = 0x0ccc,
1959                .enable_mask = BIT(0),
1960                .hw.init = &(struct clk_init_data)
1961                {
1962                        .name = "gcc_pdm2_clk",
1963                        .parent_names = (const char *[]) {
1964                                "pdm2_clk_src",
1965                        },
1966                        .num_parents = 1,
1967                        .flags = CLK_SET_RATE_PARENT,
1968                        .ops = &clk_branch2_ops,
1969                },
1970        },
1971};
1972
1973static struct clk_branch gcc_pdm_ahb_clk = {
1974        .halt_reg = 0x0cc4,
1975        .clkr = {
1976                .enable_reg = 0x0cc4,
1977                .enable_mask = BIT(0),
1978                .hw.init = &(struct clk_init_data)
1979                {
1980                        .name = "gcc_pdm_ahb_clk",
1981                        .ops = &clk_branch2_ops,
1982                },
1983        },
1984};
1985
1986static struct clk_branch gcc_sdcc1_apps_clk = {
1987        .halt_reg = 0x04c4,
1988        .clkr = {
1989                .enable_reg = 0x04c4,
1990                .enable_mask = BIT(0),
1991                .hw.init = &(struct clk_init_data)
1992                {
1993                        .name = "gcc_sdcc1_apps_clk",
1994                        .parent_names = (const char *[]) {
1995                                "sdcc1_apps_clk_src",
1996                        },
1997                        .num_parents = 1,
1998                        .flags = CLK_SET_RATE_PARENT,
1999                        .ops = &clk_branch2_ops,
2000                },
2001        },
2002};
2003
2004static struct clk_branch gcc_sdcc1_ahb_clk = {
2005        .halt_reg = 0x04c8,
2006        .clkr = {
2007                .enable_reg = 0x04c8,
2008                .enable_mask = BIT(0),
2009                .hw.init = &(struct clk_init_data)
2010                {
2011                        .name = "gcc_sdcc1_ahb_clk",
2012                        .parent_names = (const char *[]){
2013                                "periph_noc_clk_src",
2014                        },
2015                        .num_parents = 1,
2016                        .ops = &clk_branch2_ops,
2017                },
2018        },
2019};
2020
2021static struct clk_branch gcc_sdcc2_ahb_clk = {
2022        .halt_reg = 0x0508,
2023        .clkr = {
2024                .enable_reg = 0x0508,
2025                .enable_mask = BIT(0),
2026                .hw.init = &(struct clk_init_data)
2027                {
2028                        .name = "gcc_sdcc2_ahb_clk",
2029                        .parent_names = (const char *[]){
2030                                "periph_noc_clk_src",
2031                        },
2032                        .num_parents = 1,
2033                        .ops = &clk_branch2_ops,
2034                },
2035        },
2036};
2037
2038static struct clk_branch gcc_sdcc2_apps_clk = {
2039        .halt_reg = 0x0504,
2040        .clkr = {
2041                .enable_reg = 0x0504,
2042                .enable_mask = BIT(0),
2043                .hw.init = &(struct clk_init_data)
2044                {
2045                        .name = "gcc_sdcc2_apps_clk",
2046                        .parent_names = (const char *[]) {
2047                                "sdcc2_apps_clk_src",
2048                        },
2049                        .num_parents = 1,
2050                        .flags = CLK_SET_RATE_PARENT,
2051                        .ops = &clk_branch2_ops,
2052                },
2053        },
2054};
2055
2056static struct clk_branch gcc_sdcc3_ahb_clk = {
2057        .halt_reg = 0x0548,
2058        .clkr = {
2059                .enable_reg = 0x0548,
2060                .enable_mask = BIT(0),
2061                .hw.init = &(struct clk_init_data)
2062                {
2063                        .name = "gcc_sdcc3_ahb_clk",
2064                        .parent_names = (const char *[]){
2065                                "periph_noc_clk_src",
2066                        },
2067                        .num_parents = 1,
2068                        .ops = &clk_branch2_ops,
2069                },
2070        },
2071};
2072
2073static struct clk_branch gcc_sdcc3_apps_clk = {
2074        .halt_reg = 0x0544,
2075        .clkr = {
2076                .enable_reg = 0x0544,
2077                .enable_mask = BIT(0),
2078                .hw.init = &(struct clk_init_data)
2079                {
2080                        .name = "gcc_sdcc3_apps_clk",
2081                        .parent_names = (const char *[]) {
2082                                "sdcc3_apps_clk_src",
2083                        },
2084                        .num_parents = 1,
2085                        .flags = CLK_SET_RATE_PARENT,
2086                        .ops = &clk_branch2_ops,
2087                },
2088        },
2089};
2090
2091static struct clk_branch gcc_sdcc4_ahb_clk = {
2092        .halt_reg = 0x0588,
2093        .clkr = {
2094                .enable_reg = 0x0588,
2095                .enable_mask = BIT(0),
2096                .hw.init = &(struct clk_init_data)
2097                {
2098                        .name = "gcc_sdcc4_ahb_clk",
2099                        .parent_names = (const char *[]){
2100                                "periph_noc_clk_src",
2101                        },
2102                        .num_parents = 1,
2103                        .ops = &clk_branch2_ops,
2104                },
2105        },
2106};
2107
2108static struct clk_branch gcc_sdcc4_apps_clk = {
2109        .halt_reg = 0x0584,
2110        .clkr = {
2111                .enable_reg = 0x0584,
2112                .enable_mask = BIT(0),
2113                .hw.init = &(struct clk_init_data)
2114                {
2115                        .name = "gcc_sdcc4_apps_clk",
2116                        .parent_names = (const char *[]) {
2117                                "sdcc4_apps_clk_src",
2118                        },
2119                        .num_parents = 1,
2120                        .flags = CLK_SET_RATE_PARENT,
2121                        .ops = &clk_branch2_ops,
2122                },
2123        },
2124};
2125
2126static struct clk_branch gcc_sys_noc_ufs_axi_clk = {
2127        .halt_reg = 0x1d7c,
2128        .clkr = {
2129                .enable_reg = 0x1d7c,
2130                .enable_mask = BIT(0),
2131                .hw.init = &(struct clk_init_data)
2132                {
2133                        .name = "gcc_sys_noc_ufs_axi_clk",
2134                        .parent_names = (const char *[]) {
2135                                "ufs_axi_clk_src",
2136                        },
2137                        .num_parents = 1,
2138                        .flags = CLK_SET_RATE_PARENT,
2139                        .ops = &clk_branch2_ops,
2140                },
2141        },
2142};
2143
2144static struct clk_branch gcc_sys_noc_usb3_axi_clk = {
2145        .halt_reg = 0x03fc,
2146        .clkr = {
2147                .enable_reg = 0x03fc,
2148                .enable_mask = BIT(0),
2149                .hw.init = &(struct clk_init_data)
2150                {
2151                        .name = "gcc_sys_noc_usb3_axi_clk",
2152                        .parent_names = (const char *[]) {
2153                                "usb30_master_clk_src",
2154                        },
2155                        .num_parents = 1,
2156                        .flags = CLK_SET_RATE_PARENT,
2157                        .ops = &clk_branch2_ops,
2158                },
2159        },
2160};
2161
2162static struct clk_branch gcc_tsif_ahb_clk = {
2163        .halt_reg = 0x0d84,
2164        .clkr = {
2165                .enable_reg = 0x0d84,
2166                .enable_mask = BIT(0),
2167                .hw.init = &(struct clk_init_data)
2168                {
2169                        .name = "gcc_tsif_ahb_clk",
2170                        .ops = &clk_branch2_ops,
2171                },
2172        },
2173};
2174
2175static struct clk_branch gcc_tsif_ref_clk = {
2176        .halt_reg = 0x0d88,
2177        .clkr = {
2178                .enable_reg = 0x0d88,
2179                .enable_mask = BIT(0),
2180                .hw.init = &(struct clk_init_data)
2181                {
2182                        .name = "gcc_tsif_ref_clk",
2183                        .parent_names = (const char *[]) {
2184                                "tsif_ref_clk_src",
2185                        },
2186                        .num_parents = 1,
2187                        .flags = CLK_SET_RATE_PARENT,
2188                        .ops = &clk_branch2_ops,
2189                },
2190        },
2191};
2192
2193static struct clk_branch gcc_ufs_ahb_clk = {
2194        .halt_reg = 0x1d4c,
2195        .clkr = {
2196                .enable_reg = 0x1d4c,
2197                .enable_mask = BIT(0),
2198                .hw.init = &(struct clk_init_data)
2199                {
2200                        .name = "gcc_ufs_ahb_clk",
2201                        .ops = &clk_branch2_ops,
2202                },
2203        },
2204};
2205
2206static struct clk_branch gcc_ufs_axi_clk = {
2207        .halt_reg = 0x1d48,
2208        .clkr = {
2209                .enable_reg = 0x1d48,
2210                .enable_mask = BIT(0),
2211                .hw.init = &(struct clk_init_data)
2212                {
2213                        .name = "gcc_ufs_axi_clk",
2214                        .parent_names = (const char *[]) {
2215                                "ufs_axi_clk_src",
2216                        },
2217                        .num_parents = 1,
2218                        .flags = CLK_SET_RATE_PARENT,
2219                        .ops = &clk_branch2_ops,
2220                },
2221        },
2222};
2223
2224static struct clk_branch gcc_ufs_rx_cfg_clk = {
2225        .halt_reg = 0x1d54,
2226        .clkr = {
2227                .enable_reg = 0x1d54,
2228                .enable_mask = BIT(0),
2229                .hw.init = &(struct clk_init_data)
2230                {
2231                        .name = "gcc_ufs_rx_cfg_clk",
2232                        .parent_names = (const char *[]) {
2233                                "ufs_axi_clk_src",
2234                        },
2235                        .num_parents = 1,
2236                        .flags = CLK_SET_RATE_PARENT,
2237                        .ops = &clk_branch2_ops,
2238                },
2239        },
2240};
2241
2242static struct clk_branch gcc_ufs_rx_symbol_0_clk = {
2243        .halt_reg = 0x1d60,
2244        .halt_check = BRANCH_HALT_DELAY,
2245        .clkr = {
2246                .enable_reg = 0x1d60,
2247                .enable_mask = BIT(0),
2248                .hw.init = &(struct clk_init_data)
2249                {
2250                        .name = "gcc_ufs_rx_symbol_0_clk",
2251                        .ops = &clk_branch2_ops,
2252                },
2253        },
2254};
2255
2256static struct clk_branch gcc_ufs_rx_symbol_1_clk = {
2257        .halt_reg = 0x1d64,
2258        .halt_check = BRANCH_HALT_DELAY,
2259        .clkr = {
2260                .enable_reg = 0x1d64,
2261                .enable_mask = BIT(0),
2262                .hw.init = &(struct clk_init_data)
2263                {
2264                        .name = "gcc_ufs_rx_symbol_1_clk",
2265                        .ops = &clk_branch2_ops,
2266                },
2267        },
2268};
2269
2270static struct clk_branch gcc_ufs_tx_cfg_clk = {
2271        .halt_reg = 0x1d50,
2272        .clkr = {
2273                .enable_reg = 0x1d50,
2274                .enable_mask = BIT(0),
2275                .hw.init = &(struct clk_init_data)
2276                {
2277                        .name = "gcc_ufs_tx_cfg_clk",
2278                        .parent_names = (const char *[]) {
2279                                "ufs_axi_clk_src",
2280                        },
2281                        .num_parents = 1,
2282                        .flags = CLK_SET_RATE_PARENT,
2283                        .ops = &clk_branch2_ops,
2284                },
2285        },
2286};
2287
2288static struct clk_branch gcc_ufs_tx_symbol_0_clk = {
2289        .halt_reg = 0x1d58,
2290        .halt_check = BRANCH_HALT_DELAY,
2291        .clkr = {
2292                .enable_reg = 0x1d58,
2293                .enable_mask = BIT(0),
2294                .hw.init = &(struct clk_init_data)
2295                {
2296                        .name = "gcc_ufs_tx_symbol_0_clk",
2297                        .ops = &clk_branch2_ops,
2298                },
2299        },
2300};
2301
2302static struct clk_branch gcc_ufs_tx_symbol_1_clk = {
2303        .halt_reg = 0x1d5c,
2304        .halt_check = BRANCH_HALT_DELAY,
2305        .clkr = {
2306                .enable_reg = 0x1d5c,
2307                .enable_mask = BIT(0),
2308                .hw.init = &(struct clk_init_data)
2309                {
2310                        .name = "gcc_ufs_tx_symbol_1_clk",
2311                        .ops = &clk_branch2_ops,
2312                },
2313        },
2314};
2315
2316static struct clk_branch gcc_usb2_hs_phy_sleep_clk = {
2317        .halt_reg = 0x04ac,
2318        .clkr = {
2319                .enable_reg = 0x04ac,
2320                .enable_mask = BIT(0),
2321                .hw.init = &(struct clk_init_data)
2322                {
2323                        .name = "gcc_usb2_hs_phy_sleep_clk",
2324                        .ops = &clk_branch2_ops,
2325                },
2326        },
2327};
2328
2329static struct clk_branch gcc_usb30_master_clk = {
2330        .halt_reg = 0x03c8,
2331        .clkr = {
2332                .enable_reg = 0x03c8,
2333                .enable_mask = BIT(0),
2334                .hw.init = &(struct clk_init_data)
2335                {
2336                        .name = "gcc_usb30_master_clk",
2337                        .parent_names = (const char *[]) {
2338                                "usb30_master_clk_src",
2339                        },
2340                        .num_parents = 1,
2341                        .flags = CLK_SET_RATE_PARENT,
2342                        .ops = &clk_branch2_ops,
2343                },
2344        },
2345};
2346
2347static struct clk_branch gcc_usb30_mock_utmi_clk = {
2348        .halt_reg = 0x03d0,
2349        .clkr = {
2350                .enable_reg = 0x03d0,
2351                .enable_mask = BIT(0),
2352                .hw.init = &(struct clk_init_data)
2353                {
2354                        .name = "gcc_usb30_mock_utmi_clk",
2355                        .parent_names = (const char *[]) {
2356                                "usb30_mock_utmi_clk_src",
2357                        },
2358                        .num_parents = 1,
2359                        .flags = CLK_SET_RATE_PARENT,
2360                        .ops = &clk_branch2_ops,
2361                },
2362        },
2363};
2364
2365static struct clk_branch gcc_usb30_sleep_clk = {
2366        .halt_reg = 0x03cc,
2367        .clkr = {
2368                .enable_reg = 0x03cc,
2369                .enable_mask = BIT(0),
2370                .hw.init = &(struct clk_init_data)
2371                {
2372                        .name = "gcc_usb30_sleep_clk",
2373                        .ops = &clk_branch2_ops,
2374                },
2375        },
2376};
2377
2378static struct clk_branch gcc_usb3_phy_aux_clk = {
2379        .halt_reg = 0x1408,
2380        .clkr = {
2381                .enable_reg = 0x1408,
2382                .enable_mask = BIT(0),
2383                .hw.init = &(struct clk_init_data)
2384                {
2385                        .name = "gcc_usb3_phy_aux_clk",
2386                        .parent_names = (const char *[]) {
2387                                "usb3_phy_aux_clk_src",
2388                        },
2389                        .num_parents = 1,
2390                        .flags = CLK_SET_RATE_PARENT,
2391                        .ops = &clk_branch2_ops,
2392                },
2393        },
2394};
2395
2396static struct clk_branch gcc_usb_hs_ahb_clk = {
2397        .halt_reg = 0x0488,
2398        .clkr = {
2399                .enable_reg = 0x0488,
2400                .enable_mask = BIT(0),
2401                .hw.init = &(struct clk_init_data)
2402                {
2403                        .name = "gcc_usb_hs_ahb_clk",
2404                        .ops = &clk_branch2_ops,
2405                },
2406        },
2407};
2408
2409static struct clk_branch gcc_usb_hs_system_clk = {
2410        .halt_reg = 0x0484,
2411        .clkr = {
2412                .enable_reg = 0x0484,
2413                .enable_mask = BIT(0),
2414                .hw.init = &(struct clk_init_data)
2415                {
2416                        .name = "gcc_usb_hs_system_clk",
2417                        .parent_names = (const char *[]) {
2418                                "usb_hs_system_clk_src",
2419                        },
2420                        .num_parents = 1,
2421                        .flags = CLK_SET_RATE_PARENT,
2422                        .ops = &clk_branch2_ops,
2423                },
2424        },
2425};
2426
2427static struct clk_branch gcc_usb_phy_cfg_ahb2phy_clk = {
2428        .halt_reg = 0x1a84,
2429        .clkr = {
2430                .enable_reg = 0x1a84,
2431                .enable_mask = BIT(0),
2432                .hw.init = &(struct clk_init_data)
2433                {
2434                        .name = "gcc_usb_phy_cfg_ahb2phy_clk",
2435                        .ops = &clk_branch2_ops,
2436                },
2437        },
2438};
2439
2440static struct gdsc pcie_gdsc = {
2441                .gdscr = 0x1e18,
2442                .pd = {
2443                        .name = "pcie",
2444                },
2445                .pwrsts = PWRSTS_OFF_ON,
2446};
2447
2448static struct gdsc pcie_0_gdsc = {
2449                .gdscr = 0x1ac4,
2450                .pd = {
2451                        .name = "pcie_0",
2452                },
2453                .pwrsts = PWRSTS_OFF_ON,
2454};
2455
2456static struct gdsc pcie_1_gdsc = {
2457                .gdscr = 0x1b44,
2458                .pd = {
2459                        .name = "pcie_1",
2460                },
2461                .pwrsts = PWRSTS_OFF_ON,
2462};
2463
2464static struct gdsc usb30_gdsc = {
2465                .gdscr = 0x3c4,
2466                .pd = {
2467                        .name = "usb30",
2468                },
2469                .pwrsts = PWRSTS_OFF_ON,
2470};
2471
2472static struct gdsc ufs_gdsc = {
2473                .gdscr = 0x1d44,
2474                .pd = {
2475                        .name = "ufs",
2476                },
2477                .pwrsts = PWRSTS_OFF_ON,
2478};
2479
2480static struct clk_regmap *gcc_msm8994_clocks[] = {
2481        [GPLL0_EARLY] = &gpll0_early.clkr,
2482        [GPLL0] = &gpll0.clkr,
2483        [GPLL4_EARLY] = &gpll4_early.clkr,
2484        [GPLL4] = &gpll4.clkr,
2485        [UFS_AXI_CLK_SRC] = &ufs_axi_clk_src.clkr,
2486        [USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
2487        [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
2488        [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
2489        [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
2490        [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
2491        [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
2492        [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
2493        [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
2494        [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
2495        [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
2496        [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
2497        [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
2498        [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
2499        [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
2500        [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
2501        [BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
2502        [BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
2503        [BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
2504        [BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
2505        [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
2506        [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
2507        [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
2508        [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
2509        [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
2510        [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
2511        [BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
2512        [BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
2513        [BLSP2_QUP5_I2C_APPS_CLK_SRC] = &blsp2_qup5_i2c_apps_clk_src.clkr,
2514        [BLSP2_QUP5_SPI_APPS_CLK_SRC] = &blsp2_qup5_spi_apps_clk_src.clkr,
2515        [BLSP2_QUP6_I2C_APPS_CLK_SRC] = &blsp2_qup6_i2c_apps_clk_src.clkr,
2516        [BLSP2_QUP6_SPI_APPS_CLK_SRC] = &blsp2_qup6_spi_apps_clk_src.clkr,
2517        [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
2518        [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
2519        [BLSP2_UART3_APPS_CLK_SRC] = &blsp2_uart3_apps_clk_src.clkr,
2520        [BLSP2_UART4_APPS_CLK_SRC] = &blsp2_uart4_apps_clk_src.clkr,
2521        [BLSP2_UART5_APPS_CLK_SRC] = &blsp2_uart5_apps_clk_src.clkr,
2522        [BLSP2_UART6_APPS_CLK_SRC] = &blsp2_uart6_apps_clk_src.clkr,
2523        [GP1_CLK_SRC] = &gp1_clk_src.clkr,
2524        [GP2_CLK_SRC] = &gp2_clk_src.clkr,
2525        [GP3_CLK_SRC] = &gp3_clk_src.clkr,
2526        [PCIE_0_AUX_CLK_SRC] = &pcie_0_aux_clk_src.clkr,
2527        [PCIE_0_PIPE_CLK_SRC] = &pcie_0_pipe_clk_src.clkr,
2528        [PCIE_1_AUX_CLK_SRC] = &pcie_1_aux_clk_src.clkr,
2529        [PCIE_1_PIPE_CLK_SRC] = &pcie_1_pipe_clk_src.clkr,
2530        [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
2531        [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
2532        [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
2533        [SDCC3_APPS_CLK_SRC] = &sdcc3_apps_clk_src.clkr,
2534        [SDCC4_APPS_CLK_SRC] = &sdcc4_apps_clk_src.clkr,
2535        [TSIF_REF_CLK_SRC] = &tsif_ref_clk_src.clkr,
2536        [USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
2537        [USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr,
2538        [USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
2539        [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
2540        [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
2541        [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
2542        [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
2543        [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
2544        [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
2545        [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
2546        [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
2547        [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
2548        [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
2549        [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
2550        [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
2551        [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
2552        [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
2553        [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
2554        [GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
2555        [GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
2556        [GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
2557        [GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
2558        [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
2559        [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
2560        [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
2561        [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
2562        [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
2563        [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
2564        [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
2565        [GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
2566        [GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
2567        [GCC_BLSP2_QUP5_I2C_APPS_CLK] = &gcc_blsp2_qup5_i2c_apps_clk.clkr,
2568        [GCC_BLSP2_QUP5_SPI_APPS_CLK] = &gcc_blsp2_qup5_spi_apps_clk.clkr,
2569        [GCC_BLSP2_QUP6_I2C_APPS_CLK] = &gcc_blsp2_qup6_i2c_apps_clk.clkr,
2570        [GCC_BLSP2_QUP6_SPI_APPS_CLK] = &gcc_blsp2_qup6_spi_apps_clk.clkr,
2571        [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
2572        [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
2573        [GCC_BLSP2_UART3_APPS_CLK] = &gcc_blsp2_uart3_apps_clk.clkr,
2574        [GCC_BLSP2_UART4_APPS_CLK] = &gcc_blsp2_uart4_apps_clk.clkr,
2575        [GCC_BLSP2_UART5_APPS_CLK] = &gcc_blsp2_uart5_apps_clk.clkr,
2576        [GCC_BLSP2_UART6_APPS_CLK] = &gcc_blsp2_uart6_apps_clk.clkr,
2577        [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2578        [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2579        [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2580        [GCC_LPASS_Q6_AXI_CLK] = &gcc_lpass_q6_axi_clk.clkr,
2581        [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
2582        [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
2583        [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
2584        [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
2585        [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
2586        [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
2587        [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
2588        [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
2589        [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
2590        [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
2591        [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
2592        [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2593        [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2594        [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2595        [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2596        [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2597        [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2598        [GCC_SDCC3_AHB_CLK] = &gcc_sdcc3_ahb_clk.clkr,
2599        [GCC_SDCC3_APPS_CLK] = &gcc_sdcc3_apps_clk.clkr,
2600        [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
2601        [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
2602        [GCC_SYS_NOC_UFS_AXI_CLK] = &gcc_sys_noc_ufs_axi_clk.clkr,
2603        [GCC_SYS_NOC_USB3_AXI_CLK] = &gcc_sys_noc_usb3_axi_clk.clkr,
2604        [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr,
2605        [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
2606        [GCC_UFS_AHB_CLK] = &gcc_ufs_ahb_clk.clkr,
2607        [GCC_UFS_AXI_CLK] = &gcc_ufs_axi_clk.clkr,
2608        [GCC_UFS_RX_CFG_CLK] = &gcc_ufs_rx_cfg_clk.clkr,
2609        [GCC_UFS_RX_SYMBOL_0_CLK] = &gcc_ufs_rx_symbol_0_clk.clkr,
2610        [GCC_UFS_RX_SYMBOL_1_CLK] = &gcc_ufs_rx_symbol_1_clk.clkr,
2611        [GCC_UFS_TX_CFG_CLK] = &gcc_ufs_tx_cfg_clk.clkr,
2612        [GCC_UFS_TX_SYMBOL_0_CLK] = &gcc_ufs_tx_symbol_0_clk.clkr,
2613        [GCC_UFS_TX_SYMBOL_1_CLK] = &gcc_ufs_tx_symbol_1_clk.clkr,
2614        [GCC_USB2_HS_PHY_SLEEP_CLK] = &gcc_usb2_hs_phy_sleep_clk.clkr,
2615        [GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
2616        [GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
2617        [GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,
2618        [GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr,
2619        [GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
2620        [GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
2621        [GCC_USB_PHY_CFG_AHB2PHY_CLK] = &gcc_usb_phy_cfg_ahb2phy_clk.clkr,
2622};
2623
2624static struct gdsc *gcc_msm8994_gdscs[] = {
2625        [PCIE_GDSC] = &pcie_gdsc,
2626        [PCIE_0_GDSC] = &pcie_0_gdsc,
2627        [PCIE_1_GDSC] = &pcie_1_gdsc,
2628        [USB30_GDSC] = &usb30_gdsc,
2629        [UFS_GDSC] = &ufs_gdsc,
2630};
2631
2632static const struct qcom_reset_map gcc_msm8994_resets[] = {
2633        [USB3_PHY_RESET] = { 0x1400 },
2634        [USB3PHY_PHY_RESET] = { 0x1404 },
2635        [PCIE_PHY_0_RESET] = { 0x1b18 },
2636        [PCIE_PHY_1_RESET] = { 0x1b98 },
2637        [QUSB2_PHY_RESET] = { 0x04b8 },
2638};
2639
2640static const struct regmap_config gcc_msm8994_regmap_config = {
2641        .reg_bits       = 32,
2642        .reg_stride     = 4,
2643        .val_bits       = 32,
2644        .max_register   = 0x2000,
2645        .fast_io        = true,
2646};
2647
2648static const struct qcom_cc_desc gcc_msm8994_desc = {
2649        .config = &gcc_msm8994_regmap_config,
2650        .clks = gcc_msm8994_clocks,
2651        .num_clks = ARRAY_SIZE(gcc_msm8994_clocks),
2652        .resets = gcc_msm8994_resets,
2653        .num_resets = ARRAY_SIZE(gcc_msm8994_resets),
2654        .gdscs = gcc_msm8994_gdscs,
2655        .num_gdscs = ARRAY_SIZE(gcc_msm8994_gdscs),
2656};
2657
2658static const struct of_device_id gcc_msm8994_match_table[] = {
2659        { .compatible = "qcom,gcc-msm8994" },
2660        {}
2661};
2662MODULE_DEVICE_TABLE(of, gcc_msm8994_match_table);
2663
2664static int gcc_msm8994_probe(struct platform_device *pdev)
2665{
2666        struct device *dev = &pdev->dev;
2667        struct clk *clk;
2668
2669        clk = devm_clk_register(dev, &xo.hw);
2670        if (IS_ERR(clk))
2671                return PTR_ERR(clk);
2672
2673        return qcom_cc_probe(pdev, &gcc_msm8994_desc);
2674}
2675
2676static struct platform_driver gcc_msm8994_driver = {
2677        .probe          = gcc_msm8994_probe,
2678        .driver         = {
2679                .name   = "gcc-msm8994",
2680                .of_match_table = gcc_msm8994_match_table,
2681        },
2682};
2683
2684static int __init gcc_msm8994_init(void)
2685{
2686        return platform_driver_register(&gcc_msm8994_driver);
2687}
2688core_initcall(gcc_msm8994_init);
2689
2690static void __exit gcc_msm8994_exit(void)
2691{
2692        platform_driver_unregister(&gcc_msm8994_driver);
2693}
2694module_exit(gcc_msm8994_exit);
2695
2696MODULE_DESCRIPTION("Qualcomm GCC MSM8994 Driver");
2697MODULE_LICENSE("GPL v2");
2698MODULE_ALIAS("platform:gcc-msm8994");
2699