File Index
Files and directories
Sign in
FILE

gcc-msm8994.c

File preview with syntax highlighting.

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