Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.5.6.
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Copyright (c) 2013, The Linux Foundation. All rights reserved.
   4 */
   5
   6#include <linux/kernel.h>
   7#include <linux/bitops.h>
   8#include <linux/err.h>
   9#include <linux/platform_device.h>
  10#include <linux/property.h>
  11#include <linux/module.h>
  12#include <linux/of.h>
  13#include <linux/clk-provider.h>
  14#include <linux/regmap.h>
  15#include <linux/reset-controller.h>
  16
  17#include <dt-bindings/clock/qcom,gcc-msm8974.h>
  18#include <dt-bindings/reset/qcom,gcc-msm8974.h>
  19
  20#include "common.h"
  21#include "clk-regmap.h"
  22#include "clk-pll.h"
  23#include "clk-rcg.h"
  24#include "clk-branch.h"
  25#include "reset.h"
  26#include "gdsc.h"
  27
  28enum {
  29	P_XO,
  30	P_GPLL0,
  31	P_GPLL1,
  32	P_GPLL4,
  33};
  34
  35static struct clk_pll gpll0 = {
  36	.l_reg = 0x0004,
  37	.m_reg = 0x0008,
  38	.n_reg = 0x000c,
  39	.config_reg = 0x0014,
  40	.mode_reg = 0x0000,
  41	.status_reg = 0x001c,
  42	.status_bit = 17,
  43	.clkr.hw.init = &(struct clk_init_data){
  44		.name = "gpll0",
  45		.parent_data = &(const struct clk_parent_data){
  46			.fw_name = "xo", .name = "xo_board",
  47		},
  48		.num_parents = 1,
  49		.ops = &clk_pll_ops,
  50	},
  51};
  52
  53static struct clk_regmap gpll0_vote = {
  54	.enable_reg = 0x1480,
  55	.enable_mask = BIT(0),
  56	.hw.init = &(struct clk_init_data){
  57		.name = "gpll0_vote",
  58		.parent_hws = (const struct clk_hw*[]){
  59			&gpll0.clkr.hw,
  60		},
  61		.num_parents = 1,
  62		.ops = &clk_pll_vote_ops,
  63	},
  64};
  65
  66static struct clk_pll gpll4 = {
  67	.l_reg = 0x1dc4,
  68	.m_reg = 0x1dc8,
  69	.n_reg = 0x1dcc,
  70	.config_reg = 0x1dd4,
  71	.mode_reg = 0x1dc0,
  72	.status_reg = 0x1ddc,
  73	.status_bit = 17,
  74	.clkr.hw.init = &(struct clk_init_data){
  75		.name = "gpll4",
  76		.parent_data = &(const struct clk_parent_data){
  77			.fw_name = "xo", .name = "xo_board",
  78		},
  79		.num_parents = 1,
  80		.ops = &clk_pll_ops,
  81	},
  82};
  83
  84static struct clk_regmap gpll4_vote = {
  85	.enable_reg = 0x1480,
  86	.enable_mask = BIT(4),
  87	.hw.init = &(struct clk_init_data){
  88		.name = "gpll4_vote",
  89		.parent_hws = (const struct clk_hw*[]){
  90			&gpll4.clkr.hw,
  91		},
  92		.num_parents = 1,
  93		.ops = &clk_pll_vote_ops,
  94	},
  95};
  96
  97static const struct parent_map gcc_xo_gpll0_map[] = {
  98	{ P_XO, 0 },
  99	{ P_GPLL0, 1 }
 100};
 101
 102static const struct clk_parent_data gcc_xo_gpll0[] = {
 103	{ .fw_name = "xo", .name = "xo_board" },
 104	{ .hw = &gpll0_vote.hw },
 105};
 106
 107static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {
 108	{ P_XO, 0 },
 109	{ P_GPLL0, 1 },
 110	{ P_GPLL4, 5 }
 111};
 112
 113static const struct clk_parent_data gcc_xo_gpll0_gpll4[] = {
 114	{ .fw_name = "xo", .name = "xo_board" },
 115	{ .hw = &gpll0_vote.hw },
 116	{ .hw = &gpll4_vote.hw },
 117};
 118
 119static struct clk_rcg2 config_noc_clk_src = {
 120	.cmd_rcgr = 0x0150,
 121	.hid_width = 5,
 122	.parent_map = gcc_xo_gpll0_map,
 123	.clkr.hw.init = &(struct clk_init_data){
 124		.name = "config_noc_clk_src",
 125		.parent_data = gcc_xo_gpll0,
 126		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 127		.ops = &clk_rcg2_ops,
 128	},
 129};
 130
 131static struct clk_rcg2 periph_noc_clk_src = {
 132	.cmd_rcgr = 0x0190,
 133	.hid_width = 5,
 134	.parent_map = gcc_xo_gpll0_map,
 135	.clkr.hw.init = &(struct clk_init_data){
 136		.name = "periph_noc_clk_src",
 137		.parent_data = gcc_xo_gpll0,
 138		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 139		.ops = &clk_rcg2_ops,
 140	},
 141};
 142
 143static struct clk_rcg2 system_noc_clk_src = {
 144	.cmd_rcgr = 0x0120,
 145	.hid_width = 5,
 146	.parent_map = gcc_xo_gpll0_map,
 147	.clkr.hw.init = &(struct clk_init_data){
 148		.name = "system_noc_clk_src",
 149		.parent_data = gcc_xo_gpll0,
 150		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 151		.ops = &clk_rcg2_ops,
 152	},
 153};
 154
 155static struct clk_pll gpll1 = {
 156	.l_reg = 0x0044,
 157	.m_reg = 0x0048,
 158	.n_reg = 0x004c,
 159	.config_reg = 0x0054,
 160	.mode_reg = 0x0040,
 161	.status_reg = 0x005c,
 162	.status_bit = 17,
 163	.clkr.hw.init = &(struct clk_init_data){
 164		.name = "gpll1",
 165		.parent_data = &(const struct clk_parent_data){
 166			.fw_name = "xo", .name = "xo_board",
 167		},
 168		.num_parents = 1,
 169		.ops = &clk_pll_ops,
 170	},
 171};
 172
 173static struct clk_regmap gpll1_vote = {
 174	.enable_reg = 0x1480,
 175	.enable_mask = BIT(1),
 176	.hw.init = &(struct clk_init_data){
 177		.name = "gpll1_vote",
 178		.parent_hws = (const struct clk_hw*[]){
 179			&gpll1.clkr.hw,
 180		},
 181		.num_parents = 1,
 182		.ops = &clk_pll_vote_ops,
 183	},
 184};
 185
 186static const struct freq_tbl ftbl_gcc_usb30_master_clk[] = {
 187	F(125000000, P_GPLL0, 1, 5, 24),
 188	{ }
 189};
 190
 191static struct clk_rcg2 usb30_master_clk_src = {
 192	.cmd_rcgr = 0x03d4,
 193	.mnd_width = 8,
 194	.hid_width = 5,
 195	.parent_map = gcc_xo_gpll0_map,
 196	.freq_tbl = ftbl_gcc_usb30_master_clk,
 197	.clkr.hw.init = &(struct clk_init_data){
 198		.name = "usb30_master_clk_src",
 199		.parent_data = gcc_xo_gpll0,
 200		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 201		.ops = &clk_rcg2_ops,
 202	},
 203};
 204
 205static const struct freq_tbl ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk[] = {
 206	F(19200000, P_XO, 1, 0, 0),
 207	F(37500000, P_GPLL0, 16, 0, 0),
 208	F(50000000, P_GPLL0, 12, 0, 0),
 209	{ }
 210};
 211
 212static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
 213	.cmd_rcgr = 0x0660,
 214	.hid_width = 5,
 215	.parent_map = gcc_xo_gpll0_map,
 216	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
 217	.clkr.hw.init = &(struct clk_init_data){
 218		.name = "blsp1_qup1_i2c_apps_clk_src",
 219		.parent_data = gcc_xo_gpll0,
 220		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 221		.ops = &clk_rcg2_ops,
 222	},
 223};
 224
 225static const struct freq_tbl ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk[] = {
 226	F(960000, P_XO, 10, 1, 2),
 227	F(4800000, P_XO, 4, 0, 0),
 228	F(9600000, P_XO, 2, 0, 0),
 229	F(15000000, P_GPLL0, 10, 1, 4),
 230	F(19200000, P_XO, 1, 0, 0),
 231	F(25000000, P_GPLL0, 12, 1, 2),
 232	F(50000000, P_GPLL0, 12, 0, 0),
 233	{ }
 234};
 235
 236static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
 237	.cmd_rcgr = 0x064c,
 238	.mnd_width = 8,
 239	.hid_width = 5,
 240	.parent_map = gcc_xo_gpll0_map,
 241	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
 242	.clkr.hw.init = &(struct clk_init_data){
 243		.name = "blsp1_qup1_spi_apps_clk_src",
 244		.parent_data = gcc_xo_gpll0,
 245		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 246		.ops = &clk_rcg2_ops,
 247	},
 248};
 249
 250static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
 251	.cmd_rcgr = 0x06e0,
 252	.hid_width = 5,
 253	.parent_map = gcc_xo_gpll0_map,
 254	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
 255	.clkr.hw.init = &(struct clk_init_data){
 256		.name = "blsp1_qup2_i2c_apps_clk_src",
 257		.parent_data = gcc_xo_gpll0,
 258		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 259		.ops = &clk_rcg2_ops,
 260	},
 261};
 262
 263static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
 264	.cmd_rcgr = 0x06cc,
 265	.mnd_width = 8,
 266	.hid_width = 5,
 267	.parent_map = gcc_xo_gpll0_map,
 268	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
 269	.clkr.hw.init = &(struct clk_init_data){
 270		.name = "blsp1_qup2_spi_apps_clk_src",
 271		.parent_data = gcc_xo_gpll0,
 272		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 273		.ops = &clk_rcg2_ops,
 274	},
 275};
 276
 277static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
 278	.cmd_rcgr = 0x0760,
 279	.hid_width = 5,
 280	.parent_map = gcc_xo_gpll0_map,
 281	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
 282	.clkr.hw.init = &(struct clk_init_data){
 283		.name = "blsp1_qup3_i2c_apps_clk_src",
 284		.parent_data = gcc_xo_gpll0,
 285		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 286		.ops = &clk_rcg2_ops,
 287	},
 288};
 289
 290static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
 291	.cmd_rcgr = 0x074c,
 292	.mnd_width = 8,
 293	.hid_width = 5,
 294	.parent_map = gcc_xo_gpll0_map,
 295	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
 296	.clkr.hw.init = &(struct clk_init_data){
 297		.name = "blsp1_qup3_spi_apps_clk_src",
 298		.parent_data = gcc_xo_gpll0,
 299		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 300		.ops = &clk_rcg2_ops,
 301	},
 302};
 303
 304static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
 305	.cmd_rcgr = 0x07e0,
 306	.hid_width = 5,
 307	.parent_map = gcc_xo_gpll0_map,
 308	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
 309	.clkr.hw.init = &(struct clk_init_data){
 310		.name = "blsp1_qup4_i2c_apps_clk_src",
 311		.parent_data = gcc_xo_gpll0,
 312		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 313		.ops = &clk_rcg2_ops,
 314	},
 315};
 316
 317static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
 318	.cmd_rcgr = 0x07cc,
 319	.mnd_width = 8,
 320	.hid_width = 5,
 321	.parent_map = gcc_xo_gpll0_map,
 322	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
 323	.clkr.hw.init = &(struct clk_init_data){
 324		.name = "blsp1_qup4_spi_apps_clk_src",
 325		.parent_data = gcc_xo_gpll0,
 326		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 327		.ops = &clk_rcg2_ops,
 328	},
 329};
 330
 331static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
 332	.cmd_rcgr = 0x0860,
 333	.hid_width = 5,
 334	.parent_map = gcc_xo_gpll0_map,
 335	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
 336	.clkr.hw.init = &(struct clk_init_data){
 337		.name = "blsp1_qup5_i2c_apps_clk_src",
 338		.parent_data = gcc_xo_gpll0,
 339		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 340		.ops = &clk_rcg2_ops,
 341	},
 342};
 343
 344static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
 345	.cmd_rcgr = 0x084c,
 346	.mnd_width = 8,
 347	.hid_width = 5,
 348	.parent_map = gcc_xo_gpll0_map,
 349	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
 350	.clkr.hw.init = &(struct clk_init_data){
 351		.name = "blsp1_qup5_spi_apps_clk_src",
 352		.parent_data = gcc_xo_gpll0,
 353		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 354		.ops = &clk_rcg2_ops,
 355	},
 356};
 357
 358static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
 359	.cmd_rcgr = 0x08e0,
 360	.hid_width = 5,
 361	.parent_map = gcc_xo_gpll0_map,
 362	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
 363	.clkr.hw.init = &(struct clk_init_data){
 364		.name = "blsp1_qup6_i2c_apps_clk_src",
 365		.parent_data = gcc_xo_gpll0,
 366		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 367		.ops = &clk_rcg2_ops,
 368	},
 369};
 370
 371static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
 372	.cmd_rcgr = 0x08cc,
 373	.mnd_width = 8,
 374	.hid_width = 5,
 375	.parent_map = gcc_xo_gpll0_map,
 376	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
 377	.clkr.hw.init = &(struct clk_init_data){
 378		.name = "blsp1_qup6_spi_apps_clk_src",
 379		.parent_data = gcc_xo_gpll0,
 380		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 381		.ops = &clk_rcg2_ops,
 382	},
 383};
 384
 385static const struct freq_tbl ftbl_gcc_blsp1_2_uart1_6_apps_clk[] = {
 386	F(3686400, P_GPLL0, 1, 96, 15625),
 387	F(7372800, P_GPLL0, 1, 192, 15625),
 388	F(14745600, P_GPLL0, 1, 384, 15625),
 389	F(16000000, P_GPLL0, 5, 2, 15),
 390	F(19200000, P_XO, 1, 0, 0),
 391	F(24000000, P_GPLL0, 5, 1, 5),
 392	F(32000000, P_GPLL0, 1, 4, 75),
 393	F(40000000, P_GPLL0, 15, 0, 0),
 394	F(46400000, P_GPLL0, 1, 29, 375),
 395	F(48000000, P_GPLL0, 12.5, 0, 0),
 396	F(51200000, P_GPLL0, 1, 32, 375),
 397	F(56000000, P_GPLL0, 1, 7, 75),
 398	F(58982400, P_GPLL0, 1, 1536, 15625),
 399	F(60000000, P_GPLL0, 10, 0, 0),
 400	F(63160000, P_GPLL0, 9.5, 0, 0),
 401	{ }
 402};
 403
 404static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
 405	.cmd_rcgr = 0x068c,
 406	.mnd_width = 16,
 407	.hid_width = 5,
 408	.parent_map = gcc_xo_gpll0_map,
 409	.freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
 410	.clkr.hw.init = &(struct clk_init_data){
 411		.name = "blsp1_uart1_apps_clk_src",
 412		.parent_data = gcc_xo_gpll0,
 413		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 414		.ops = &clk_rcg2_ops,
 415	},
 416};
 417
 418static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
 419	.cmd_rcgr = 0x070c,
 420	.mnd_width = 16,
 421	.hid_width = 5,
 422	.parent_map = gcc_xo_gpll0_map,
 423	.freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
 424	.clkr.hw.init = &(struct clk_init_data){
 425		.name = "blsp1_uart2_apps_clk_src",
 426		.parent_data = gcc_xo_gpll0,
 427		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 428		.ops = &clk_rcg2_ops,
 429	},
 430};
 431
 432static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
 433	.cmd_rcgr = 0x078c,
 434	.mnd_width = 16,
 435	.hid_width = 5,
 436	.parent_map = gcc_xo_gpll0_map,
 437	.freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
 438	.clkr.hw.init = &(struct clk_init_data){
 439		.name = "blsp1_uart3_apps_clk_src",
 440		.parent_data = gcc_xo_gpll0,
 441		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 442		.ops = &clk_rcg2_ops,
 443	},
 444};
 445
 446static struct clk_rcg2 blsp1_uart4_apps_clk_src = {
 447	.cmd_rcgr = 0x080c,
 448	.mnd_width = 16,
 449	.hid_width = 5,
 450	.parent_map = gcc_xo_gpll0_map,
 451	.freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
 452	.clkr.hw.init = &(struct clk_init_data){
 453		.name = "blsp1_uart4_apps_clk_src",
 454		.parent_data = gcc_xo_gpll0,
 455		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 456		.ops = &clk_rcg2_ops,
 457	},
 458};
 459
 460static struct clk_rcg2 blsp1_uart5_apps_clk_src = {
 461	.cmd_rcgr = 0x088c,
 462	.mnd_width = 16,
 463	.hid_width = 5,
 464	.parent_map = gcc_xo_gpll0_map,
 465	.freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
 466	.clkr.hw.init = &(struct clk_init_data){
 467		.name = "blsp1_uart5_apps_clk_src",
 468		.parent_data = gcc_xo_gpll0,
 469		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 470		.ops = &clk_rcg2_ops,
 471	},
 472};
 473
 474static struct clk_rcg2 blsp1_uart6_apps_clk_src = {
 475	.cmd_rcgr = 0x090c,
 476	.mnd_width = 16,
 477	.hid_width = 5,
 478	.parent_map = gcc_xo_gpll0_map,
 479	.freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
 480	.clkr.hw.init = &(struct clk_init_data){
 481		.name = "blsp1_uart6_apps_clk_src",
 482		.parent_data = gcc_xo_gpll0,
 483		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 484		.ops = &clk_rcg2_ops,
 485	},
 486};
 487
 488static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
 489	.cmd_rcgr = 0x09a0,
 490	.hid_width = 5,
 491	.parent_map = gcc_xo_gpll0_map,
 492	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
 493	.clkr.hw.init = &(struct clk_init_data){
 494		.name = "blsp2_qup1_i2c_apps_clk_src",
 495		.parent_data = gcc_xo_gpll0,
 496		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 497		.ops = &clk_rcg2_ops,
 498	},
 499};
 500
 501static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
 502	.cmd_rcgr = 0x098c,
 503	.mnd_width = 8,
 504	.hid_width = 5,
 505	.parent_map = gcc_xo_gpll0_map,
 506	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
 507	.clkr.hw.init = &(struct clk_init_data){
 508		.name = "blsp2_qup1_spi_apps_clk_src",
 509		.parent_data = gcc_xo_gpll0,
 510		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 511		.ops = &clk_rcg2_ops,
 512	},
 513};
 514
 515static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
 516	.cmd_rcgr = 0x0a20,
 517	.hid_width = 5,
 518	.parent_map = gcc_xo_gpll0_map,
 519	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
 520	.clkr.hw.init = &(struct clk_init_data){
 521		.name = "blsp2_qup2_i2c_apps_clk_src",
 522		.parent_data = gcc_xo_gpll0,
 523		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 524		.ops = &clk_rcg2_ops,
 525	},
 526};
 527
 528static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
 529	.cmd_rcgr = 0x0a0c,
 530	.mnd_width = 8,
 531	.hid_width = 5,
 532	.parent_map = gcc_xo_gpll0_map,
 533	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
 534	.clkr.hw.init = &(struct clk_init_data){
 535		.name = "blsp2_qup2_spi_apps_clk_src",
 536		.parent_data = gcc_xo_gpll0,
 537		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 538		.ops = &clk_rcg2_ops,
 539	},
 540};
 541
 542static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
 543	.cmd_rcgr = 0x0aa0,
 544	.hid_width = 5,
 545	.parent_map = gcc_xo_gpll0_map,
 546	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
 547	.clkr.hw.init = &(struct clk_init_data){
 548		.name = "blsp2_qup3_i2c_apps_clk_src",
 549		.parent_data = gcc_xo_gpll0,
 550		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 551		.ops = &clk_rcg2_ops,
 552	},
 553};
 554
 555static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
 556	.cmd_rcgr = 0x0a8c,
 557	.mnd_width = 8,
 558	.hid_width = 5,
 559	.parent_map = gcc_xo_gpll0_map,
 560	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
 561	.clkr.hw.init = &(struct clk_init_data){
 562		.name = "blsp2_qup3_spi_apps_clk_src",
 563		.parent_data = gcc_xo_gpll0,
 564		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 565		.ops = &clk_rcg2_ops,
 566	},
 567};
 568
 569static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
 570	.cmd_rcgr = 0x0b20,
 571	.hid_width = 5,
 572	.parent_map = gcc_xo_gpll0_map,
 573	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
 574	.clkr.hw.init = &(struct clk_init_data){
 575		.name = "blsp2_qup4_i2c_apps_clk_src",
 576		.parent_data = gcc_xo_gpll0,
 577		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 578		.ops = &clk_rcg2_ops,
 579	},
 580};
 581
 582static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
 583	.cmd_rcgr = 0x0b0c,
 584	.mnd_width = 8,
 585	.hid_width = 5,
 586	.parent_map = gcc_xo_gpll0_map,
 587	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
 588	.clkr.hw.init = &(struct clk_init_data){
 589		.name = "blsp2_qup4_spi_apps_clk_src",
 590		.parent_data = gcc_xo_gpll0,
 591		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 592		.ops = &clk_rcg2_ops,
 593	},
 594};
 595
 596static struct clk_rcg2 blsp2_qup5_i2c_apps_clk_src = {
 597	.cmd_rcgr = 0x0ba0,
 598	.hid_width = 5,
 599	.parent_map = gcc_xo_gpll0_map,
 600	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
 601	.clkr.hw.init = &(struct clk_init_data){
 602		.name = "blsp2_qup5_i2c_apps_clk_src",
 603		.parent_data = gcc_xo_gpll0,
 604		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 605		.ops = &clk_rcg2_ops,
 606	},
 607};
 608
 609static struct clk_rcg2 blsp2_qup5_spi_apps_clk_src = {
 610	.cmd_rcgr = 0x0b8c,
 611	.mnd_width = 8,
 612	.hid_width = 5,
 613	.parent_map = gcc_xo_gpll0_map,
 614	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
 615	.clkr.hw.init = &(struct clk_init_data){
 616		.name = "blsp2_qup5_spi_apps_clk_src",
 617		.parent_data = gcc_xo_gpll0,
 618		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 619		.ops = &clk_rcg2_ops,
 620	},
 621};
 622
 623static struct clk_rcg2 blsp2_qup6_i2c_apps_clk_src = {
 624	.cmd_rcgr = 0x0c20,
 625	.hid_width = 5,
 626	.parent_map = gcc_xo_gpll0_map,
 627	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
 628	.clkr.hw.init = &(struct clk_init_data){
 629		.name = "blsp2_qup6_i2c_apps_clk_src",
 630		.parent_data = gcc_xo_gpll0,
 631		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 632		.ops = &clk_rcg2_ops,
 633	},
 634};
 635
 636static struct clk_rcg2 blsp2_qup6_spi_apps_clk_src = {
 637	.cmd_rcgr = 0x0c0c,
 638	.mnd_width = 8,
 639	.hid_width = 5,
 640	.parent_map = gcc_xo_gpll0_map,
 641	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
 642	.clkr.hw.init = &(struct clk_init_data){
 643		.name = "blsp2_qup6_spi_apps_clk_src",
 644		.parent_data = gcc_xo_gpll0,
 645		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 646		.ops = &clk_rcg2_ops,
 647	},
 648};
 649
 650static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
 651	.cmd_rcgr = 0x09cc,
 652	.mnd_width = 16,
 653	.hid_width = 5,
 654	.parent_map = gcc_xo_gpll0_map,
 655	.freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
 656	.clkr.hw.init = &(struct clk_init_data){
 657		.name = "blsp2_uart1_apps_clk_src",
 658		.parent_data = gcc_xo_gpll0,
 659		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 660		.ops = &clk_rcg2_ops,
 661	},
 662};
 663
 664static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
 665	.cmd_rcgr = 0x0a4c,
 666	.mnd_width = 16,
 667	.hid_width = 5,
 668	.parent_map = gcc_xo_gpll0_map,
 669	.freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
 670	.clkr.hw.init = &(struct clk_init_data){
 671		.name = "blsp2_uart2_apps_clk_src",
 672		.parent_data = gcc_xo_gpll0,
 673		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 674		.ops = &clk_rcg2_ops,
 675	},
 676};
 677
 678static struct clk_rcg2 blsp2_uart3_apps_clk_src = {
 679	.cmd_rcgr = 0x0acc,
 680	.mnd_width = 16,
 681	.hid_width = 5,
 682	.parent_map = gcc_xo_gpll0_map,
 683	.freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
 684	.clkr.hw.init = &(struct clk_init_data){
 685		.name = "blsp2_uart3_apps_clk_src",
 686		.parent_data = gcc_xo_gpll0,
 687		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 688		.ops = &clk_rcg2_ops,
 689	},
 690};
 691
 692static struct clk_rcg2 blsp2_uart4_apps_clk_src = {
 693	.cmd_rcgr = 0x0b4c,
 694	.mnd_width = 16,
 695	.hid_width = 5,
 696	.parent_map = gcc_xo_gpll0_map,
 697	.freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
 698	.clkr.hw.init = &(struct clk_init_data){
 699		.name = "blsp2_uart4_apps_clk_src",
 700		.parent_data = gcc_xo_gpll0,
 701		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 702		.ops = &clk_rcg2_ops,
 703	},
 704};
 705
 706static struct clk_rcg2 blsp2_uart5_apps_clk_src = {
 707	.cmd_rcgr = 0x0bcc,
 708	.mnd_width = 16,
 709	.hid_width = 5,
 710	.parent_map = gcc_xo_gpll0_map,
 711	.freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
 712	.clkr.hw.init = &(struct clk_init_data){
 713		.name = "blsp2_uart5_apps_clk_src",
 714		.parent_data = gcc_xo_gpll0,
 715		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 716		.ops = &clk_rcg2_ops,
 717	},
 718};
 719
 720static struct clk_rcg2 blsp2_uart6_apps_clk_src = {
 721	.cmd_rcgr = 0x0c4c,
 722	.mnd_width = 16,
 723	.hid_width = 5,
 724	.parent_map = gcc_xo_gpll0_map,
 725	.freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
 726	.clkr.hw.init = &(struct clk_init_data){
 727		.name = "blsp2_uart6_apps_clk_src",
 728		.parent_data = gcc_xo_gpll0,
 729		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 730		.ops = &clk_rcg2_ops,
 731	},
 732};
 733
 734static const struct freq_tbl ftbl_gcc_ce1_clk_msm8226[] = {
 735	F(50000000, P_GPLL0, 12, 0, 0),
 736	F(100000000, P_GPLL0, 6, 0, 0),
 737	{ }
 738};
 739
 740static const struct freq_tbl ftbl_gcc_ce1_clk[] = {
 741	F(50000000, P_GPLL0, 12, 0, 0),
 742	F(75000000, P_GPLL0, 8, 0, 0),
 743	F(100000000, P_GPLL0, 6, 0, 0),
 744	F(150000000, P_GPLL0, 4, 0, 0),
 745	{ }
 746};
 747
 748static struct clk_rcg2 ce1_clk_src = {
 749	.cmd_rcgr = 0x1050,
 750	.hid_width = 5,
 751	.parent_map = gcc_xo_gpll0_map,
 752	.freq_tbl = ftbl_gcc_ce1_clk,
 753	.clkr.hw.init = &(struct clk_init_data){
 754		.name = "ce1_clk_src",
 755		.parent_data = gcc_xo_gpll0,
 756		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 757		.ops = &clk_rcg2_ops,
 758	},
 759};
 760
 761static const struct freq_tbl ftbl_gcc_ce2_clk[] = {
 762	F(50000000, P_GPLL0, 12, 0, 0),
 763	F(75000000, P_GPLL0, 8, 0, 0),
 764	F(100000000, P_GPLL0, 6, 0, 0),
 765	F(150000000, P_GPLL0, 4, 0, 0),
 766	{ }
 767};
 768
 769static struct clk_rcg2 ce2_clk_src = {
 770	.cmd_rcgr = 0x1090,
 771	.hid_width = 5,
 772	.parent_map = gcc_xo_gpll0_map,
 773	.freq_tbl = ftbl_gcc_ce2_clk,
 774	.clkr.hw.init = &(struct clk_init_data){
 775		.name = "ce2_clk_src",
 776		.parent_data = gcc_xo_gpll0,
 777		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 778		.ops = &clk_rcg2_ops,
 779	},
 780};
 781
 782static const struct freq_tbl ftbl_gcc_gp_clk_msm8226[] = {
 783	F(19200000, P_XO, 1, 0, 0),
 784	{ }
 785};
 786
 787static const struct freq_tbl ftbl_gcc_gp_clk[] = {
 788	F(4800000, P_XO, 4, 0, 0),
 789	F(6000000, P_GPLL0, 10, 1, 10),
 790	F(6750000, P_GPLL0, 1, 1, 89),
 791	F(8000000, P_GPLL0, 15, 1, 5),
 792	F(9600000, P_XO, 2, 0, 0),
 793	F(16000000, P_GPLL0, 1, 2, 75),
 794	F(19200000, P_XO, 1, 0, 0),
 795	F(24000000, P_GPLL0, 5, 1, 5),
 796	{ }
 797};
 798
 799
 800static struct clk_rcg2 gp1_clk_src = {
 801	.cmd_rcgr = 0x1904,
 802	.mnd_width = 8,
 803	.hid_width = 5,
 804	.parent_map = gcc_xo_gpll0_map,
 805	.freq_tbl = ftbl_gcc_gp_clk,
 806	.clkr.hw.init = &(struct clk_init_data){
 807		.name = "gp1_clk_src",
 808		.parent_data = gcc_xo_gpll0,
 809		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 810		.ops = &clk_rcg2_ops,
 811	},
 812};
 813
 814static struct clk_rcg2 gp2_clk_src = {
 815	.cmd_rcgr = 0x1944,
 816	.mnd_width = 8,
 817	.hid_width = 5,
 818	.parent_map = gcc_xo_gpll0_map,
 819	.freq_tbl = ftbl_gcc_gp_clk,
 820	.clkr.hw.init = &(struct clk_init_data){
 821		.name = "gp2_clk_src",
 822		.parent_data = gcc_xo_gpll0,
 823		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 824		.ops = &clk_rcg2_ops,
 825	},
 826};
 827
 828static struct clk_rcg2 gp3_clk_src = {
 829	.cmd_rcgr = 0x1984,
 830	.mnd_width = 8,
 831	.hid_width = 5,
 832	.parent_map = gcc_xo_gpll0_map,
 833	.freq_tbl = ftbl_gcc_gp_clk,
 834	.clkr.hw.init = &(struct clk_init_data){
 835		.name = "gp3_clk_src",
 836		.parent_data = gcc_xo_gpll0,
 837		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 838		.ops = &clk_rcg2_ops,
 839	},
 840};
 841
 842static const struct freq_tbl ftbl_gcc_pdm2_clk[] = {
 843	F(60000000, P_GPLL0, 10, 0, 0),
 844	{ }
 845};
 846
 847static struct clk_rcg2 pdm2_clk_src = {
 848	.cmd_rcgr = 0x0cd0,
 849	.hid_width = 5,
 850	.parent_map = gcc_xo_gpll0_map,
 851	.freq_tbl = ftbl_gcc_pdm2_clk,
 852	.clkr.hw.init = &(struct clk_init_data){
 853		.name = "pdm2_clk_src",
 854		.parent_data = gcc_xo_gpll0,
 855		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 856		.ops = &clk_rcg2_ops,
 857	},
 858};
 859
 860static const struct freq_tbl ftbl_gcc_sdcc1_4_apps_clk[] = {
 861	F(144000, P_XO, 16, 3, 25),
 862	F(400000, P_XO, 12, 1, 4),
 863	F(20000000, P_GPLL0, 15, 1, 2),
 864	F(25000000, P_GPLL0, 12, 1, 2),
 865	F(50000000, P_GPLL0, 12, 0, 0),
 866	F(100000000, P_GPLL0, 6, 0, 0),
 867	F(200000000, P_GPLL0, 3, 0, 0),
 868	{ }
 869};
 870
 871static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_pro[] = {
 872	F(144000, P_XO, 16, 3, 25),
 873	F(400000, P_XO, 12, 1, 4),
 874	F(20000000, P_GPLL0, 15, 1, 2),
 875	F(25000000, P_GPLL0, 12, 1, 2),
 876	F(50000000, P_GPLL0, 12, 0, 0),
 877	F(100000000, P_GPLL0, 6, 0, 0),
 878	F(192000000, P_GPLL4, 4, 0, 0),
 879	F(200000000, P_GPLL0, 3, 0, 0),
 880	F(384000000, P_GPLL4, 2, 0, 0),
 881	{ }
 882};
 883
 884static struct clk_init_data sdcc1_apps_clk_src_init = {
 885	.name = "sdcc1_apps_clk_src",
 886	.parent_data = gcc_xo_gpll0,
 887	.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 888	.ops = &clk_rcg2_floor_ops,
 889};
 890
 891static struct clk_rcg2 sdcc1_apps_clk_src = {
 892	.cmd_rcgr = 0x04d0,
 893	.mnd_width = 8,
 894	.hid_width = 5,
 895	.parent_map = gcc_xo_gpll0_map,
 896	.freq_tbl = ftbl_gcc_sdcc1_4_apps_clk,
 897	.clkr.hw.init = &sdcc1_apps_clk_src_init,
 898};
 899
 900static struct clk_rcg2 sdcc2_apps_clk_src = {
 901	.cmd_rcgr = 0x0510,
 902	.mnd_width = 8,
 903	.hid_width = 5,
 904	.parent_map = gcc_xo_gpll0_map,
 905	.freq_tbl = ftbl_gcc_sdcc1_4_apps_clk,
 906	.clkr.hw.init = &(struct clk_init_data){
 907		.name = "sdcc2_apps_clk_src",
 908		.parent_data = gcc_xo_gpll0,
 909		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 910		.ops = &clk_rcg2_floor_ops,
 911	},
 912};
 913
 914static struct clk_rcg2 sdcc3_apps_clk_src = {
 915	.cmd_rcgr = 0x0550,
 916	.mnd_width = 8,
 917	.hid_width = 5,
 918	.parent_map = gcc_xo_gpll0_map,
 919	.freq_tbl = ftbl_gcc_sdcc1_4_apps_clk,
 920	.clkr.hw.init = &(struct clk_init_data){
 921		.name = "sdcc3_apps_clk_src",
 922		.parent_data = gcc_xo_gpll0,
 923		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 924		.ops = &clk_rcg2_floor_ops,
 925	},
 926};
 927
 928static struct clk_rcg2 sdcc4_apps_clk_src = {
 929	.cmd_rcgr = 0x0590,
 930	.mnd_width = 8,
 931	.hid_width = 5,
 932	.parent_map = gcc_xo_gpll0_map,
 933	.freq_tbl = ftbl_gcc_sdcc1_4_apps_clk,
 934	.clkr.hw.init = &(struct clk_init_data){
 935		.name = "sdcc4_apps_clk_src",
 936		.parent_data = gcc_xo_gpll0,
 937		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 938		.ops = &clk_rcg2_floor_ops,
 939	},
 940};
 941
 942static const struct freq_tbl ftbl_gcc_tsif_ref_clk[] = {
 943	F(105000, P_XO, 2, 1, 91),
 944	{ }
 945};
 946
 947static struct clk_rcg2 tsif_ref_clk_src = {
 948	.cmd_rcgr = 0x0d90,
 949	.mnd_width = 8,
 950	.hid_width = 5,
 951	.parent_map = gcc_xo_gpll0_map,
 952	.freq_tbl = ftbl_gcc_tsif_ref_clk,
 953	.clkr.hw.init = &(struct clk_init_data){
 954		.name = "tsif_ref_clk_src",
 955		.parent_data = gcc_xo_gpll0,
 956		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 957		.ops = &clk_rcg2_ops,
 958	},
 959};
 960
 961static const struct freq_tbl ftbl_gcc_usb30_mock_utmi_clk[] = {
 962	F(60000000, P_GPLL0, 10, 0, 0),
 963	{ }
 964};
 965
 966static struct clk_rcg2 usb30_mock_utmi_clk_src = {
 967	.cmd_rcgr = 0x03e8,
 968	.hid_width = 5,
 969	.parent_map = gcc_xo_gpll0_map,
 970	.freq_tbl = ftbl_gcc_usb30_mock_utmi_clk,
 971	.clkr.hw.init = &(struct clk_init_data){
 972		.name = "usb30_mock_utmi_clk_src",
 973		.parent_data = gcc_xo_gpll0,
 974		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 975		.ops = &clk_rcg2_ops,
 976	},
 977};
 978
 979static const struct freq_tbl ftbl_gcc_usb_hs_system_clk[] = {
 980	F(60000000, P_GPLL0, 10, 0, 0),
 981	F(75000000, P_GPLL0, 8, 0, 0),
 982	{ }
 983};
 984
 985static struct clk_rcg2 usb_hs_system_clk_src = {
 986	.cmd_rcgr = 0x0490,
 987	.hid_width = 5,
 988	.parent_map = gcc_xo_gpll0_map,
 989	.freq_tbl = ftbl_gcc_usb_hs_system_clk,
 990	.clkr.hw.init = &(struct clk_init_data){
 991		.name = "usb_hs_system_clk_src",
 992		.parent_data = gcc_xo_gpll0,
 993		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
 994		.ops = &clk_rcg2_ops,
 995	},
 996};
 997
 998static const struct freq_tbl ftbl_gcc_usb_hsic_clk[] = {
 999	F(480000000, P_GPLL1, 1, 0, 0),
1000	{ }
1001};
1002
1003static const struct parent_map usb_hsic_clk_src_map[] = {
1004	{ P_XO, 0 },
1005	{ P_GPLL1, 4 }
1006};
1007
1008static struct clk_rcg2 usb_hsic_clk_src = {
1009	.cmd_rcgr = 0x0440,
1010	.hid_width = 5,
1011	.parent_map = usb_hsic_clk_src_map,
1012	.freq_tbl = ftbl_gcc_usb_hsic_clk,
1013	.clkr.hw.init = &(struct clk_init_data){
1014		.name = "usb_hsic_clk_src",
1015		.parent_data = (const struct clk_parent_data[]){
1016			{ .fw_name = "xo", .name = "xo_board" },
1017			{ .hw = &gpll1_vote.hw },
1018		},
1019		.num_parents = 2,
1020		.ops = &clk_rcg2_ops,
1021	},
1022};
1023
1024static const struct freq_tbl ftbl_gcc_usb_hsic_io_cal_clk[] = {
1025	F(9600000, P_XO, 2, 0, 0),
1026	{ }
1027};
1028
1029static struct clk_rcg2 usb_hsic_io_cal_clk_src = {
1030	.cmd_rcgr = 0x0458,
1031	.hid_width = 5,
1032	.parent_map = gcc_xo_gpll0_map,
1033	.freq_tbl = ftbl_gcc_usb_hsic_io_cal_clk,
1034	.clkr.hw.init = &(struct clk_init_data){
1035		.name = "usb_hsic_io_cal_clk_src",
1036		.parent_data = gcc_xo_gpll0,
1037		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
1038		.ops = &clk_rcg2_ops,
1039	},
1040};
1041
1042static const struct freq_tbl ftbl_gcc_usb_hsic_system_clk[] = {
1043	F(60000000, P_GPLL0, 10, 0, 0),
1044	F(75000000, P_GPLL0, 8, 0, 0),
1045	{ }
1046};
1047
1048static struct clk_rcg2 usb_hsic_system_clk_src = {
1049	.cmd_rcgr = 0x041c,
1050	.hid_width = 5,
1051	.parent_map = gcc_xo_gpll0_map,
1052	.freq_tbl = ftbl_gcc_usb_hsic_system_clk,
1053	.clkr.hw.init = &(struct clk_init_data){
1054		.name = "usb_hsic_system_clk_src",
1055		.parent_data = gcc_xo_gpll0,
1056		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
1057		.ops = &clk_rcg2_ops,
1058	},
1059};
1060
1061static struct clk_regmap gcc_mmss_gpll0_clk_src = {
1062	.enable_reg = 0x1484,
1063	.enable_mask = BIT(26),
1064	.hw.init = &(struct clk_init_data){
1065		.name = "mmss_gpll0_vote",
1066		.parent_hws = (const struct clk_hw*[]){
1067			&gpll0_vote.hw,
1068		},
1069		.num_parents = 1,
1070		.ops = &clk_branch_simple_ops,
1071	},
1072};
1073
1074static struct clk_branch gcc_bam_dma_ahb_clk = {
1075	.halt_reg = 0x0d44,
1076	.halt_check = BRANCH_HALT_VOTED,
1077	.clkr = {
1078		.enable_reg = 0x1484,
1079		.enable_mask = BIT(12),
1080		.hw.init = &(struct clk_init_data){
1081			.name = "gcc_bam_dma_ahb_clk",
1082			.parent_hws = (const struct clk_hw*[]){
1083				&periph_noc_clk_src.clkr.hw,
1084			},
1085			.num_parents = 1,
1086			.ops = &clk_branch2_ops,
1087		},
1088	},
1089};
1090
1091static struct clk_branch gcc_blsp1_ahb_clk = {
1092	.halt_reg = 0x05c4,
1093	.halt_check = BRANCH_HALT_VOTED,
1094	.clkr = {
1095		.enable_reg = 0x1484,
1096		.enable_mask = BIT(17),
1097		.hw.init = &(struct clk_init_data){
1098			.name = "gcc_blsp1_ahb_clk",
1099			.parent_hws = (const struct clk_hw*[]){
1100				&periph_noc_clk_src.clkr.hw,
1101			},
1102			.num_parents = 1,
1103			.ops = &clk_branch2_ops,
1104		},
1105	},
1106};
1107
1108static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1109	.halt_reg = 0x0648,
1110	.clkr = {
1111		.enable_reg = 0x0648,
1112		.enable_mask = BIT(0),
1113		.hw.init = &(struct clk_init_data){
1114			.name = "gcc_blsp1_qup1_i2c_apps_clk",
1115			.parent_hws = (const struct clk_hw*[]){
1116				&blsp1_qup1_i2c_apps_clk_src.clkr.hw,
1117			},
1118			.num_parents = 1,
1119			.flags = CLK_SET_RATE_PARENT,
1120			.ops = &clk_branch2_ops,
1121		},
1122	},
1123};
1124
1125static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1126	.halt_reg = 0x0644,
1127	.clkr = {
1128		.enable_reg = 0x0644,
1129		.enable_mask = BIT(0),
1130		.hw.init = &(struct clk_init_data){
1131			.name = "gcc_blsp1_qup1_spi_apps_clk",
1132			.parent_hws = (const struct clk_hw*[]){
1133				&blsp1_qup1_spi_apps_clk_src.clkr.hw,
1134			},
1135			.num_parents = 1,
1136			.flags = CLK_SET_RATE_PARENT,
1137			.ops = &clk_branch2_ops,
1138		},
1139	},
1140};
1141
1142static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1143	.halt_reg = 0x06c8,
1144	.clkr = {
1145		.enable_reg = 0x06c8,
1146		.enable_mask = BIT(0),
1147		.hw.init = &(struct clk_init_data){
1148			.name = "gcc_blsp1_qup2_i2c_apps_clk",
1149			.parent_hws = (const struct clk_hw*[]){
1150				&blsp1_qup2_i2c_apps_clk_src.clkr.hw,
1151			},
1152			.num_parents = 1,
1153			.flags = CLK_SET_RATE_PARENT,
1154			.ops = &clk_branch2_ops,
1155		},
1156	},
1157};
1158
1159static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1160	.halt_reg = 0x06c4,
1161	.clkr = {
1162		.enable_reg = 0x06c4,
1163		.enable_mask = BIT(0),
1164		.hw.init = &(struct clk_init_data){
1165			.name = "gcc_blsp1_qup2_spi_apps_clk",
1166			.parent_hws = (const struct clk_hw*[]){
1167				&blsp1_qup2_spi_apps_clk_src.clkr.hw,
1168			},
1169			.num_parents = 1,
1170			.flags = CLK_SET_RATE_PARENT,
1171			.ops = &clk_branch2_ops,
1172		},
1173	},
1174};
1175
1176static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1177	.halt_reg = 0x0748,
1178	.clkr = {
1179		.enable_reg = 0x0748,
1180		.enable_mask = BIT(0),
1181		.hw.init = &(struct clk_init_data){
1182			.name = "gcc_blsp1_qup3_i2c_apps_clk",
1183			.parent_hws = (const struct clk_hw*[]){
1184				&blsp1_qup3_i2c_apps_clk_src.clkr.hw,
1185			},
1186			.num_parents = 1,
1187			.flags = CLK_SET_RATE_PARENT,
1188			.ops = &clk_branch2_ops,
1189		},
1190	},
1191};
1192
1193static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1194	.halt_reg = 0x0744,
1195	.clkr = {
1196		.enable_reg = 0x0744,
1197		.enable_mask = BIT(0),
1198		.hw.init = &(struct clk_init_data){
1199			.name = "gcc_blsp1_qup3_spi_apps_clk",
1200			.parent_hws = (const struct clk_hw*[]){
1201				&blsp1_qup3_spi_apps_clk_src.clkr.hw,
1202			},
1203			.num_parents = 1,
1204			.flags = CLK_SET_RATE_PARENT,
1205			.ops = &clk_branch2_ops,
1206		},
1207	},
1208};
1209
1210static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1211	.halt_reg = 0x07c8,
1212	.clkr = {
1213		.enable_reg = 0x07c8,
1214		.enable_mask = BIT(0),
1215		.hw.init = &(struct clk_init_data){
1216			.name = "gcc_blsp1_qup4_i2c_apps_clk",
1217			.parent_hws = (const struct clk_hw*[]){
1218				&blsp1_qup4_i2c_apps_clk_src.clkr.hw,
1219			},
1220			.num_parents = 1,
1221			.flags = CLK_SET_RATE_PARENT,
1222			.ops = &clk_branch2_ops,
1223		},
1224	},
1225};
1226
1227static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1228	.halt_reg = 0x07c4,
1229	.clkr = {
1230		.enable_reg = 0x07c4,
1231		.enable_mask = BIT(0),
1232		.hw.init = &(struct clk_init_data){
1233			.name = "gcc_blsp1_qup4_spi_apps_clk",
1234			.parent_hws = (const struct clk_hw*[]){
1235				&blsp1_qup4_spi_apps_clk_src.clkr.hw,
1236			},
1237			.num_parents = 1,
1238			.flags = CLK_SET_RATE_PARENT,
1239			.ops = &clk_branch2_ops,
1240		},
1241	},
1242};
1243
1244static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
1245	.halt_reg = 0x0848,
1246	.clkr = {
1247		.enable_reg = 0x0848,
1248		.enable_mask = BIT(0),
1249		.hw.init = &(struct clk_init_data){
1250			.name = "gcc_blsp1_qup5_i2c_apps_clk",
1251			.parent_hws = (const struct clk_hw*[]){
1252				&blsp1_qup5_i2c_apps_clk_src.clkr.hw,
1253			},
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*[]){
1269				&blsp1_qup5_spi_apps_clk_src.clkr.hw,
1270			},
1271			.num_parents = 1,
1272			.flags = CLK_SET_RATE_PARENT,
1273			.ops = &clk_branch2_ops,
1274		},
1275	},
1276};
1277
1278static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
1279	.halt_reg = 0x08c8,
1280	.clkr = {
1281		.enable_reg = 0x08c8,
1282		.enable_mask = BIT(0),
1283		.hw.init = &(struct clk_init_data){
1284			.name = "gcc_blsp1_qup6_i2c_apps_clk",
1285			.parent_hws = (const struct clk_hw*[]){
1286				&blsp1_qup6_i2c_apps_clk_src.clkr.hw,
1287			},
1288			.num_parents = 1,
1289			.flags = CLK_SET_RATE_PARENT,
1290			.ops = &clk_branch2_ops,
1291		},
1292	},
1293};
1294
1295static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
1296	.halt_reg = 0x08c4,
1297	.clkr = {
1298		.enable_reg = 0x08c4,
1299		.enable_mask = BIT(0),
1300		.hw.init = &(struct clk_init_data){
1301			.name = "gcc_blsp1_qup6_spi_apps_clk",
1302			.parent_hws = (const struct clk_hw*[]){
1303				&blsp1_qup6_spi_apps_clk_src.clkr.hw,
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_uart1_apps_clk = {
1313	.halt_reg = 0x0684,
1314	.clkr = {
1315		.enable_reg = 0x0684,
1316		.enable_mask = BIT(0),
1317		.hw.init = &(struct clk_init_data){
1318			.name = "gcc_blsp1_uart1_apps_clk",
1319			.parent_hws = (const struct clk_hw*[]){
1320				&blsp1_uart1_apps_clk_src.clkr.hw,
1321			},
1322			.num_parents = 1,
1323			.flags = CLK_SET_RATE_PARENT,
1324			.ops = &clk_branch2_ops,
1325		},
1326	},
1327};
1328
1329static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1330	.halt_reg = 0x0704,
1331	.clkr = {
1332		.enable_reg = 0x0704,
1333		.enable_mask = BIT(0),
1334		.hw.init = &(struct clk_init_data){
1335			.name = "gcc_blsp1_uart2_apps_clk",
1336			.parent_hws = (const struct clk_hw*[]){
1337				&blsp1_uart2_apps_clk_src.clkr.hw,
1338			},
1339			.num_parents = 1,
1340			.flags = CLK_SET_RATE_PARENT,
1341			.ops = &clk_branch2_ops,
1342		},
1343	},
1344};
1345
1346static struct clk_branch gcc_blsp1_uart3_apps_clk = {
1347	.halt_reg = 0x0784,
1348	.clkr = {
1349		.enable_reg = 0x0784,
1350		.enable_mask = BIT(0),
1351		.hw.init = &(struct clk_init_data){
1352			.name = "gcc_blsp1_uart3_apps_clk",
1353			.parent_hws = (const struct clk_hw*[]){
1354				&blsp1_uart3_apps_clk_src.clkr.hw,
1355			},
1356			.num_parents = 1,
1357			.flags = CLK_SET_RATE_PARENT,
1358			.ops = &clk_branch2_ops,
1359		},
1360	},
1361};
1362
1363static struct clk_branch gcc_blsp1_uart4_apps_clk = {
1364	.halt_reg = 0x0804,
1365	.clkr = {
1366		.enable_reg = 0x0804,
1367		.enable_mask = BIT(0),
1368		.hw.init = &(struct clk_init_data){
1369			.name = "gcc_blsp1_uart4_apps_clk",
1370			.parent_hws = (const struct clk_hw*[]){
1371				&blsp1_uart4_apps_clk_src.clkr.hw,
1372			},
1373			.num_parents = 1,
1374			.flags = CLK_SET_RATE_PARENT,
1375			.ops = &clk_branch2_ops,
1376		},
1377	},
1378};
1379
1380static struct clk_branch gcc_blsp1_uart5_apps_clk = {
1381	.halt_reg = 0x0884,
1382	.clkr = {
1383		.enable_reg = 0x0884,
1384		.enable_mask = BIT(0),
1385		.hw.init = &(struct clk_init_data){
1386			.name = "gcc_blsp1_uart5_apps_clk",
1387			.parent_hws = (const struct clk_hw*[]){
1388				&blsp1_uart5_apps_clk_src.clkr.hw,
1389			},
1390			.num_parents = 1,
1391			.flags = CLK_SET_RATE_PARENT,
1392			.ops = &clk_branch2_ops,
1393		},
1394	},
1395};
1396
1397static struct clk_branch gcc_blsp1_uart6_apps_clk = {
1398	.halt_reg = 0x0904,
1399	.clkr = {
1400		.enable_reg = 0x0904,
1401		.enable_mask = BIT(0),
1402		.hw.init = &(struct clk_init_data){
1403			.name = "gcc_blsp1_uart6_apps_clk",
1404			.parent_hws = (const struct clk_hw*[]){
1405				&blsp1_uart6_apps_clk_src.clkr.hw,
1406			},
1407			.num_parents = 1,
1408			.flags = CLK_SET_RATE_PARENT,
1409			.ops = &clk_branch2_ops,
1410		},
1411	},
1412};
1413
1414static struct clk_branch gcc_blsp2_ahb_clk = {
1415	.halt_reg = 0x0944,
1416	.halt_check = BRANCH_HALT_VOTED,
1417	.clkr = {
1418		.enable_reg = 0x1484,
1419		.enable_mask = BIT(15),
1420		.hw.init = &(struct clk_init_data){
1421			.name = "gcc_blsp2_ahb_clk",
1422			.parent_hws = (const struct clk_hw*[]){
1423				&periph_noc_clk_src.clkr.hw,
1424			},
1425			.num_parents = 1,
1426			.ops = &clk_branch2_ops,
1427		},
1428	},
1429};
1430
1431static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
1432	.halt_reg = 0x0988,
1433	.clkr = {
1434		.enable_reg = 0x0988,
1435		.enable_mask = BIT(0),
1436		.hw.init = &(struct clk_init_data){
1437			.name = "gcc_blsp2_qup1_i2c_apps_clk",
1438			.parent_hws = (const struct clk_hw*[]){
1439				&blsp2_qup1_i2c_apps_clk_src.clkr.hw,
1440			},
1441			.num_parents = 1,
1442			.flags = CLK_SET_RATE_PARENT,
1443			.ops = &clk_branch2_ops,
1444		},
1445	},
1446};
1447
1448static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
1449	.halt_reg = 0x0984,
1450	.clkr = {
1451		.enable_reg = 0x0984,
1452		.enable_mask = BIT(0),
1453		.hw.init = &(struct clk_init_data){
1454			.name = "gcc_blsp2_qup1_spi_apps_clk",
1455			.parent_hws = (const struct clk_hw*[]){
1456				&blsp2_qup1_spi_apps_clk_src.clkr.hw,
1457			},
1458			.num_parents = 1,
1459			.flags = CLK_SET_RATE_PARENT,
1460			.ops = &clk_branch2_ops,
1461		},
1462	},
1463};
1464
1465static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
1466	.halt_reg = 0x0a08,
1467	.clkr = {
1468		.enable_reg = 0x0a08,
1469		.enable_mask = BIT(0),
1470		.hw.init = &(struct clk_init_data){
1471			.name = "gcc_blsp2_qup2_i2c_apps_clk",
1472			.parent_hws = (const struct clk_hw*[]){
1473				&blsp2_qup2_i2c_apps_clk_src.clkr.hw,
1474			},
1475			.num_parents = 1,
1476			.flags = CLK_SET_RATE_PARENT,
1477			.ops = &clk_branch2_ops,
1478		},
1479	},
1480};
1481
1482static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
1483	.halt_reg = 0x0a04,
1484	.clkr = {
1485		.enable_reg = 0x0a04,
1486		.enable_mask = BIT(0),
1487		.hw.init = &(struct clk_init_data){
1488			.name = "gcc_blsp2_qup2_spi_apps_clk",
1489			.parent_hws = (const struct clk_hw*[]){
1490				&blsp2_qup2_spi_apps_clk_src.clkr.hw,
1491			},
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_qup3_i2c_apps_clk = {
1500	.halt_reg = 0x0a88,
1501	.clkr = {
1502		.enable_reg = 0x0a88,
1503		.enable_mask = BIT(0),
1504		.hw.init = &(struct clk_init_data){
1505			.name = "gcc_blsp2_qup3_i2c_apps_clk",
1506			.parent_hws = (const struct clk_hw*[]){
1507				&blsp2_qup3_i2c_apps_clk_src.clkr.hw,
1508			},
1509			.num_parents = 1,
1510			.flags = CLK_SET_RATE_PARENT,
1511			.ops = &clk_branch2_ops,
1512		},
1513	},
1514};
1515
1516static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
1517	.halt_reg = 0x0a84,
1518	.clkr = {
1519		.enable_reg = 0x0a84,
1520		.enable_mask = BIT(0),
1521		.hw.init = &(struct clk_init_data){
1522			.name = "gcc_blsp2_qup3_spi_apps_clk",
1523			.parent_hws = (const struct clk_hw*[]){
1524				&blsp2_qup3_spi_apps_clk_src.clkr.hw,
1525			},
1526			.num_parents = 1,
1527			.flags = CLK_SET_RATE_PARENT,
1528			.ops = &clk_branch2_ops,
1529		},
1530	},
1531};
1532
1533static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
1534	.halt_reg = 0x0b08,
1535	.clkr = {
1536		.enable_reg = 0x0b08,
1537		.enable_mask = BIT(0),
1538		.hw.init = &(struct clk_init_data){
1539			.name = "gcc_blsp2_qup4_i2c_apps_clk",
1540			.parent_hws = (const struct clk_hw*[]){
1541				&blsp2_qup4_i2c_apps_clk_src.clkr.hw,
1542			},
1543			.num_parents = 1,
1544			.flags = CLK_SET_RATE_PARENT,
1545			.ops = &clk_branch2_ops,
1546		},
1547	},
1548};
1549
1550static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
1551	.halt_reg = 0x0b04,
1552	.clkr = {
1553		.enable_reg = 0x0b04,
1554		.enable_mask = BIT(0),
1555		.hw.init = &(struct clk_init_data){
1556			.name = "gcc_blsp2_qup4_spi_apps_clk",
1557			.parent_hws = (const struct clk_hw*[]){
1558				&blsp2_qup4_spi_apps_clk_src.clkr.hw,
1559			},
1560			.num_parents = 1,
1561			.flags = CLK_SET_RATE_PARENT,
1562			.ops = &clk_branch2_ops,
1563		},
1564	},
1565};
1566
1567static struct clk_branch gcc_blsp2_qup5_i2c_apps_clk = {
1568	.halt_reg = 0x0b88,
1569	.clkr = {
1570		.enable_reg = 0x0b88,
1571		.enable_mask = BIT(0),
1572		.hw.init = &(struct clk_init_data){
1573			.name = "gcc_blsp2_qup5_i2c_apps_clk",
1574			.parent_hws = (const struct clk_hw*[]){
1575				&blsp2_qup5_i2c_apps_clk_src.clkr.hw,
1576			},
1577			.num_parents = 1,
1578			.flags = CLK_SET_RATE_PARENT,
1579			.ops = &clk_branch2_ops,
1580		},
1581	},
1582};
1583
1584static struct clk_branch gcc_blsp2_qup5_spi_apps_clk = {
1585	.halt_reg = 0x0b84,
1586	.clkr = {
1587		.enable_reg = 0x0b84,
1588		.enable_mask = BIT(0),
1589		.hw.init = &(struct clk_init_data){
1590			.name = "gcc_blsp2_qup5_spi_apps_clk",
1591			.parent_hws = (const struct clk_hw*[]){
1592				&blsp2_qup5_spi_apps_clk_src.clkr.hw,
1593			},
1594			.num_parents = 1,
1595			.flags = CLK_SET_RATE_PARENT,
1596			.ops = &clk_branch2_ops,
1597		},
1598	},
1599};
1600
1601static struct clk_branch gcc_blsp2_qup6_i2c_apps_clk = {
1602	.halt_reg = 0x0c08,
1603	.clkr = {
1604		.enable_reg = 0x0c08,
1605		.enable_mask = BIT(0),
1606		.hw.init = &(struct clk_init_data){
1607			.name = "gcc_blsp2_qup6_i2c_apps_clk",
1608			.parent_hws = (const struct clk_hw*[]){
1609				&blsp2_qup6_i2c_apps_clk_src.clkr.hw,
1610			},
1611			.num_parents = 1,
1612			.flags = CLK_SET_RATE_PARENT,
1613			.ops = &clk_branch2_ops,
1614		},
1615	},
1616};
1617
1618static struct clk_branch gcc_blsp2_qup6_spi_apps_clk = {
1619	.halt_reg = 0x0c04,
1620	.clkr = {
1621		.enable_reg = 0x0c04,
1622		.enable_mask = BIT(0),
1623		.hw.init = &(struct clk_init_data){
1624			.name = "gcc_blsp2_qup6_spi_apps_clk",
1625			.parent_hws = (const struct clk_hw*[]){
1626				&blsp2_qup6_spi_apps_clk_src.clkr.hw,
1627			},
1628			.num_parents = 1,
1629			.flags = CLK_SET_RATE_PARENT,
1630			.ops = &clk_branch2_ops,
1631		},
1632	},
1633};
1634
1635static struct clk_branch gcc_blsp2_uart1_apps_clk = {
1636	.halt_reg = 0x09c4,
1637	.clkr = {
1638		.enable_reg = 0x09c4,
1639		.enable_mask = BIT(0),
1640		.hw.init = &(struct clk_init_data){
1641			.name = "gcc_blsp2_uart1_apps_clk",
1642			.parent_hws = (const struct clk_hw*[]){
1643				&blsp2_uart1_apps_clk_src.clkr.hw,
1644			},
1645			.num_parents = 1,
1646			.flags = CLK_SET_RATE_PARENT,
1647			.ops = &clk_branch2_ops,
1648		},
1649	},
1650};
1651
1652static struct clk_branch gcc_blsp2_uart2_apps_clk = {
1653	.halt_reg = 0x0a44,
1654	.clkr = {
1655		.enable_reg = 0x0a44,
1656		.enable_mask = BIT(0),
1657		.hw.init = &(struct clk_init_data){
1658			.name = "gcc_blsp2_uart2_apps_clk",
1659			.parent_hws = (const struct clk_hw*[]){
1660				&blsp2_uart2_apps_clk_src.clkr.hw,
1661			},
1662			.num_parents = 1,
1663			.flags = CLK_SET_RATE_PARENT,
1664			.ops = &clk_branch2_ops,
1665		},
1666	},
1667};
1668
1669static struct clk_branch gcc_blsp2_uart3_apps_clk = {
1670	.halt_reg = 0x0ac4,
1671	.clkr = {
1672		.enable_reg = 0x0ac4,
1673		.enable_mask = BIT(0),
1674		.hw.init = &(struct clk_init_data){
1675			.name = "gcc_blsp2_uart3_apps_clk",
1676			.parent_hws = (const struct clk_hw*[]){
1677				&blsp2_uart3_apps_clk_src.clkr.hw,
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_uart4_apps_clk = {
1687	.halt_reg = 0x0b44,
1688	.clkr = {
1689		.enable_reg = 0x0b44,
1690		.enable_mask = BIT(0),
1691		.hw.init = &(struct clk_init_data){
1692			.name = "gcc_blsp2_uart4_apps_clk",
1693			.parent_hws = (const struct clk_hw*[]){
1694				&blsp2_uart4_apps_clk_src.clkr.hw,
1695			},
1696			.num_parents = 1,
1697			.flags = CLK_SET_RATE_PARENT,
1698			.ops = &clk_branch2_ops,
1699		},
1700	},
1701};
1702
1703static struct clk_branch gcc_blsp2_uart5_apps_clk = {
1704	.halt_reg = 0x0bc4,
1705	.clkr = {
1706		.enable_reg = 0x0bc4,
1707		.enable_mask = BIT(0),
1708		.hw.init = &(struct clk_init_data){
1709			.name = "gcc_blsp2_uart5_apps_clk",
1710			.parent_hws = (const struct clk_hw*[]){
1711				&blsp2_uart5_apps_clk_src.clkr.hw,
1712			},
1713			.num_parents = 1,
1714			.flags = CLK_SET_RATE_PARENT,
1715			.ops = &clk_branch2_ops,
1716		},
1717	},
1718};
1719
1720static struct clk_branch gcc_blsp2_uart6_apps_clk = {
1721	.halt_reg = 0x0c44,
1722	.clkr = {
1723		.enable_reg = 0x0c44,
1724		.enable_mask = BIT(0),
1725		.hw.init = &(struct clk_init_data){
1726			.name = "gcc_blsp2_uart6_apps_clk",
1727			.parent_hws = (const struct clk_hw*[]){
1728				&blsp2_uart6_apps_clk_src.clkr.hw,
1729			},
1730			.num_parents = 1,
1731			.flags = CLK_SET_RATE_PARENT,
1732			.ops = &clk_branch2_ops,
1733		},
1734	},
1735};
1736
1737static struct clk_branch gcc_boot_rom_ahb_clk = {
1738	.halt_reg = 0x0e04,
1739	.halt_check = BRANCH_HALT_VOTED,
1740	.clkr = {
1741		.enable_reg = 0x1484,
1742		.enable_mask = BIT(10),
1743		.hw.init = &(struct clk_init_data){
1744			.name = "gcc_boot_rom_ahb_clk",
1745			.parent_hws = (const struct clk_hw*[]){
1746				&config_noc_clk_src.clkr.hw,
1747			},
1748			.num_parents = 1,
1749			.ops = &clk_branch2_ops,
1750		},
1751	},
1752};
1753
1754static struct clk_branch gcc_ce1_ahb_clk = {
1755	.halt_reg = 0x104c,
1756	.halt_check = BRANCH_HALT_VOTED,
1757	.clkr = {
1758		.enable_reg = 0x1484,
1759		.enable_mask = BIT(3),
1760		.hw.init = &(struct clk_init_data){
1761			.name = "gcc_ce1_ahb_clk",
1762			.parent_hws = (const struct clk_hw*[]){
1763				&config_noc_clk_src.clkr.hw,
1764			},
1765			.num_parents = 1,
1766			.ops = &clk_branch2_ops,
1767		},
1768	},
1769};
1770
1771static struct clk_branch gcc_ce1_axi_clk = {
1772	.halt_reg = 0x1048,
1773	.halt_check = BRANCH_HALT_VOTED,
1774	.clkr = {
1775		.enable_reg = 0x1484,
1776		.enable_mask = BIT(4),
1777		.hw.init = &(struct clk_init_data){
1778			.name = "gcc_ce1_axi_clk",
1779			.parent_hws = (const struct clk_hw*[]){
1780				&system_noc_clk_src.clkr.hw,
1781			},
1782			.num_parents = 1,
1783			.ops = &clk_branch2_ops,
1784		},
1785	},
1786};
1787
1788static struct clk_branch gcc_ce1_clk = {
1789	.halt_reg = 0x1050,
1790	.halt_check = BRANCH_HALT_VOTED,
1791	.clkr = {
1792		.enable_reg = 0x1484,
1793		.enable_mask = BIT(5),
1794		.hw.init = &(struct clk_init_data){
1795			.name = "gcc_ce1_clk",
1796			.parent_hws = (const struct clk_hw*[]){
1797				&ce1_clk_src.clkr.hw,
1798			},
1799			.num_parents = 1,
1800			.flags = CLK_SET_RATE_PARENT,
1801			.ops = &clk_branch2_ops,
1802		},
1803	},
1804};
1805
1806static struct clk_branch gcc_ce2_ahb_clk = {
1807	.halt_reg = 0x108c,
1808	.halt_check = BRANCH_HALT_VOTED,
1809	.clkr = {
1810		.enable_reg = 0x1484,
1811		.enable_mask = BIT(0),
1812		.hw.init = &(struct clk_init_data){
1813			.name = "gcc_ce2_ahb_clk",
1814			.parent_hws = (const struct clk_hw*[]){
1815				&config_noc_clk_src.clkr.hw,
1816			},
1817			.num_parents = 1,
1818			.ops = &clk_branch2_ops,
1819		},
1820	},
1821};
1822
1823static struct clk_branch gcc_ce2_axi_clk = {
1824	.halt_reg = 0x1088,
1825	.halt_check = BRANCH_HALT_VOTED,
1826	.clkr = {
1827		.enable_reg = 0x1484,
1828		.enable_mask = BIT(1),
1829		.hw.init = &(struct clk_init_data){
1830			.name = "gcc_ce2_axi_clk",
1831			.parent_hws = (const struct clk_hw*[]){
1832				&system_noc_clk_src.clkr.hw,
1833			},
1834			.num_parents = 1,
1835			.ops = &clk_branch2_ops,
1836		},
1837	},
1838};
1839
1840static struct clk_branch gcc_ce2_clk = {
1841	.halt_reg = 0x1090,
1842	.halt_check = BRANCH_HALT_VOTED,
1843	.clkr = {
1844		.enable_reg = 0x1484,
1845		.enable_mask = BIT(2),
1846		.hw.init = &(struct clk_init_data){
1847			.name = "gcc_ce2_clk",
1848			.parent_hws = (const struct clk_hw*[]){
1849				&ce2_clk_src.clkr.hw,
1850			},
1851			.num_parents = 1,
1852			.flags = CLK_SET_RATE_PARENT,
1853			.ops = &clk_branch2_ops,
1854		},
1855	},
1856};
1857
1858static struct clk_branch gcc_gp1_clk = {
1859	.halt_reg = 0x1900,
1860	.clkr = {
1861		.enable_reg = 0x1900,
1862		.enable_mask = BIT(0),
1863		.hw.init = &(struct clk_init_data){
1864			.name = "gcc_gp1_clk",
1865			.parent_hws = (const struct clk_hw*[]){
1866				&gp1_clk_src.clkr.hw,
1867			},
1868			.num_parents = 1,
1869			.flags = CLK_SET_RATE_PARENT,
1870			.ops = &clk_branch2_ops,
1871		},
1872	},
1873};
1874
1875static struct clk_branch gcc_gp2_clk = {
1876	.halt_reg = 0x1940,
1877	.clkr = {
1878		.enable_reg = 0x1940,
1879		.enable_mask = BIT(0),
1880		.hw.init = &(struct clk_init_data){
1881			.name = "gcc_gp2_clk",
1882			.parent_hws = (const struct clk_hw*[]){
1883				&gp2_clk_src.clkr.hw,
1884			},
1885			.num_parents = 1,
1886			.flags = CLK_SET_RATE_PARENT,
1887			.ops = &clk_branch2_ops,
1888		},
1889	},
1890};
1891
1892static struct clk_branch gcc_gp3_clk = {
1893	.halt_reg = 0x1980,
1894	.clkr = {
1895		.enable_reg = 0x1980,
1896		.enable_mask = BIT(0),
1897		.hw.init = &(struct clk_init_data){
1898			.name = "gcc_gp3_clk",
1899			.parent_hws = (const struct clk_hw*[]){
1900				&gp3_clk_src.clkr.hw,
1901			},
1902			.num_parents = 1,
1903			.flags = CLK_SET_RATE_PARENT,
1904			.ops = &clk_branch2_ops,
1905		},
1906	},
1907};
1908
1909static struct clk_branch gcc_lpass_q6_axi_clk = {
1910	.halt_reg = 0x11c0,
1911	.clkr = {
1912		.enable_reg = 0x11c0,
1913		.enable_mask = BIT(0),
1914		.hw.init = &(struct clk_init_data){
1915			.name = "gcc_lpass_q6_axi_clk",
1916			.parent_hws = (const struct clk_hw*[]){
1917				&system_noc_clk_src.clkr.hw,
1918			},
1919			.num_parents = 1,
1920			.ops = &clk_branch2_ops,
1921		},
1922	},
1923};
1924
1925static struct clk_branch gcc_mmss_noc_cfg_ahb_clk = {
1926	.halt_reg = 0x024c,
1927	.clkr = {
1928		.enable_reg = 0x024c,
1929		.enable_mask = BIT(0),
1930		.hw.init = &(struct clk_init_data){
1931			.name = "gcc_mmss_noc_cfg_ahb_clk",
1932			.parent_hws = (const struct clk_hw*[]){
1933				&config_noc_clk_src.clkr.hw,
1934			},
1935			.num_parents = 1,
1936			.ops = &clk_branch2_ops,
1937			.flags = CLK_IGNORE_UNUSED,
1938		},
1939	},
1940};
1941
1942static struct clk_branch gcc_ocmem_noc_cfg_ahb_clk = {
1943	.halt_reg = 0x0248,
1944	.clkr = {
1945		.enable_reg = 0x0248,
1946		.enable_mask = BIT(0),
1947		.hw.init = &(struct clk_init_data){
1948			.name = "gcc_ocmem_noc_cfg_ahb_clk",
1949			.parent_hws = (const struct clk_hw*[]){
1950				&config_noc_clk_src.clkr.hw,
1951			},
1952			.num_parents = 1,
1953			.ops = &clk_branch2_ops,
1954		},
1955	},
1956};
1957
1958static struct clk_branch gcc_mss_cfg_ahb_clk = {
1959	.halt_reg = 0x0280,
1960	.clkr = {
1961		.enable_reg = 0x0280,
1962		.enable_mask = BIT(0),
1963		.hw.init = &(struct clk_init_data){
1964			.name = "gcc_mss_cfg_ahb_clk",
1965			.parent_hws = (const struct clk_hw*[]){
1966				&config_noc_clk_src.clkr.hw,
1967			},
1968			.num_parents = 1,
1969			.ops = &clk_branch2_ops,
1970		},
1971	},
1972};
1973
1974static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
1975	.halt_reg = 0x0284,
1976	.clkr = {
1977		.enable_reg = 0x0284,
1978		.enable_mask = BIT(0),
1979		.hw.init = &(struct clk_init_data){
1980			.name = "gcc_mss_q6_bimc_axi_clk",
1981			.parent_hws = (const struct clk_hw*[]){
1982				&system_noc_clk_src.clkr.hw,
1983			},
1984			.num_parents = 1,
1985			.ops = &clk_branch2_ops,
1986		},
1987	},
1988};
1989
1990static struct clk_branch gcc_pdm2_clk = {
1991	.halt_reg = 0x0ccc,
1992	.clkr = {
1993		.enable_reg = 0x0ccc,
1994		.enable_mask = BIT(0),
1995		.hw.init = &(struct clk_init_data){
1996			.name = "gcc_pdm2_clk",
1997			.parent_hws = (const struct clk_hw*[]){
1998				&pdm2_clk_src.clkr.hw,
1999			},
2000			.num_parents = 1,
2001			.flags = CLK_SET_RATE_PARENT,
2002			.ops = &clk_branch2_ops,
2003		},
2004	},
2005};
2006
2007static struct clk_branch gcc_pdm_ahb_clk = {
2008	.halt_reg = 0x0cc4,
2009	.clkr = {
2010		.enable_reg = 0x0cc4,
2011		.enable_mask = BIT(0),
2012		.hw.init = &(struct clk_init_data){
2013			.name = "gcc_pdm_ahb_clk",
2014			.parent_hws = (const struct clk_hw*[]){
2015				&periph_noc_clk_src.clkr.hw,
2016			},
2017			.num_parents = 1,
2018			.ops = &clk_branch2_ops,
2019		},
2020	},
2021};
2022
2023static struct clk_branch gcc_pdm_xo4_clk = {
2024	.halt_reg = 0x0cc8,
2025	.clkr = {
2026		.enable_reg = 0x0cc8,
2027		.enable_mask = BIT(0),
2028		.hw.init = &(struct clk_init_data){
2029			.name = "gcc_pdm_xo4_clk",
2030			.parent_data = &(const struct clk_parent_data){
2031				.fw_name = "xo", .name = "xo_board",
2032			},
2033			.num_parents = 1,
2034			.ops = &clk_branch2_ops,
2035		},
2036	},
2037};
2038
2039static struct clk_branch gcc_prng_ahb_clk = {
2040	.halt_reg = 0x0d04,
2041	.halt_check = BRANCH_HALT_VOTED,
2042	.clkr = {
2043		.enable_reg = 0x1484,
2044		.enable_mask = BIT(13),
2045		.hw.init = &(struct clk_init_data){
2046			.name = "gcc_prng_ahb_clk",
2047			.parent_hws = (const struct clk_hw*[]){
2048				&periph_noc_clk_src.clkr.hw,
2049			},
2050			.num_parents = 1,
2051			.ops = &clk_branch2_ops,
2052		},
2053	},
2054};
2055
2056static struct clk_branch gcc_sdcc1_ahb_clk = {
2057	.halt_reg = 0x04c8,
2058	.clkr = {
2059		.enable_reg = 0x04c8,
2060		.enable_mask = BIT(0),
2061		.hw.init = &(struct clk_init_data){
2062			.name = "gcc_sdcc1_ahb_clk",
2063			.parent_hws = (const struct clk_hw*[]){
2064				&periph_noc_clk_src.clkr.hw,
2065			},
2066			.num_parents = 1,
2067			.ops = &clk_branch2_ops,
2068		},
2069	},
2070};
2071
2072static struct clk_branch gcc_sdcc1_apps_clk = {
2073	.halt_reg = 0x04c4,
2074	.clkr = {
2075		.enable_reg = 0x04c4,
2076		.enable_mask = BIT(0),
2077		.hw.init = &(struct clk_init_data){
2078			.name = "gcc_sdcc1_apps_clk",
2079			.parent_hws = (const struct clk_hw*[]){
2080				&sdcc1_apps_clk_src.clkr.hw,
2081			},
2082			.num_parents = 1,
2083			.flags = CLK_SET_RATE_PARENT,
2084			.ops = &clk_branch2_ops,
2085		},
2086	},
2087};
2088
2089static struct clk_branch gcc_sdcc1_cdccal_ff_clk = {
2090	.halt_reg = 0x04e8,
2091	.clkr = {
2092		.enable_reg = 0x04e8,
2093		.enable_mask = BIT(0),
2094		.hw.init = &(struct clk_init_data){
2095			.name = "gcc_sdcc1_cdccal_ff_clk",
2096			.parent_data = (const struct clk_parent_data[]){
2097				{ .fw_name = "xo", .name = "xo_board" }
2098			},
2099			.num_parents = 1,
2100			.ops = &clk_branch2_ops,
2101		},
2102	},
2103};
2104
2105static struct clk_branch gcc_sdcc1_cdccal_sleep_clk = {
2106	.halt_reg = 0x04e4,
2107	.clkr = {
2108		.enable_reg = 0x04e4,
2109		.enable_mask = BIT(0),
2110		.hw.init = &(struct clk_init_data){
2111			.name = "gcc_sdcc1_cdccal_sleep_clk",
2112			.parent_data = (const struct clk_parent_data[]){
2113				{ .fw_name = "sleep_clk", .name = "sleep_clk" }
2114			},
2115			.num_parents = 1,
2116			.ops = &clk_branch2_ops,
2117		},
2118	},
2119};
2120
2121static struct clk_branch gcc_sdcc2_ahb_clk = {
2122	.halt_reg = 0x0508,
2123	.clkr = {
2124		.enable_reg = 0x0508,
2125		.enable_mask = BIT(0),
2126		.hw.init = &(struct clk_init_data){
2127			.name = "gcc_sdcc2_ahb_clk",
2128			.parent_hws = (const struct clk_hw*[]){
2129				&periph_noc_clk_src.clkr.hw,
2130			},
2131			.num_parents = 1,
2132			.ops = &clk_branch2_ops,
2133		},
2134	},
2135};
2136
2137static struct clk_branch gcc_sdcc2_apps_clk = {
2138	.halt_reg = 0x0504,
2139	.clkr = {
2140		.enable_reg = 0x0504,
2141		.enable_mask = BIT(0),
2142		.hw.init = &(struct clk_init_data){
2143			.name = "gcc_sdcc2_apps_clk",
2144			.parent_hws = (const struct clk_hw*[]){
2145				&sdcc2_apps_clk_src.clkr.hw,
2146			},
2147			.num_parents = 1,
2148			.flags = CLK_SET_RATE_PARENT,
2149			.ops = &clk_branch2_ops,
2150		},
2151	},
2152};
2153
2154static struct clk_branch gcc_sdcc3_ahb_clk = {
2155	.halt_reg = 0x0548,
2156	.clkr = {
2157		.enable_reg = 0x0548,
2158		.enable_mask = BIT(0),
2159		.hw.init = &(struct clk_init_data){
2160			.name = "gcc_sdcc3_ahb_clk",
2161			.parent_hws = (const struct clk_hw*[]){
2162				&periph_noc_clk_src.clkr.hw,
2163			},
2164			.num_parents = 1,
2165			.ops = &clk_branch2_ops,
2166		},
2167	},
2168};
2169
2170static struct clk_branch gcc_sdcc3_apps_clk = {
2171	.halt_reg = 0x0544,
2172	.clkr = {
2173		.enable_reg = 0x0544,
2174		.enable_mask = BIT(0),
2175		.hw.init = &(struct clk_init_data){
2176			.name = "gcc_sdcc3_apps_clk",
2177			.parent_hws = (const struct clk_hw*[]){
2178				&sdcc3_apps_clk_src.clkr.hw,
2179			},
2180			.num_parents = 1,
2181			.flags = CLK_SET_RATE_PARENT,
2182			.ops = &clk_branch2_ops,
2183		},
2184	},
2185};
2186
2187static struct clk_branch gcc_sdcc4_ahb_clk = {
2188	.halt_reg = 0x0588,
2189	.clkr = {
2190		.enable_reg = 0x0588,
2191		.enable_mask = BIT(0),
2192		.hw.init = &(struct clk_init_data){
2193			.name = "gcc_sdcc4_ahb_clk",
2194			.parent_hws = (const struct clk_hw*[]){
2195				&periph_noc_clk_src.clkr.hw,
2196			},
2197			.num_parents = 1,
2198			.ops = &clk_branch2_ops,
2199		},
2200	},
2201};
2202
2203static struct clk_branch gcc_sdcc4_apps_clk = {
2204	.halt_reg = 0x0584,
2205	.clkr = {
2206		.enable_reg = 0x0584,
2207		.enable_mask = BIT(0),
2208		.hw.init = &(struct clk_init_data){
2209			.name = "gcc_sdcc4_apps_clk",
2210			.parent_hws = (const struct clk_hw*[]){
2211				&sdcc4_apps_clk_src.clkr.hw,
2212			},
2213			.num_parents = 1,
2214			.flags = CLK_SET_RATE_PARENT,
2215			.ops = &clk_branch2_ops,
2216		},
2217	},
2218};
2219
2220static struct clk_branch gcc_sys_noc_usb3_axi_clk = {
2221	.halt_reg = 0x0108,
2222	.clkr = {
2223		.enable_reg = 0x0108,
2224		.enable_mask = BIT(0),
2225		.hw.init = &(struct clk_init_data){
2226			.name = "gcc_sys_noc_usb3_axi_clk",
2227			.parent_hws = (const struct clk_hw*[]){
2228				&usb30_master_clk_src.clkr.hw,
2229			},
2230			.num_parents = 1,
2231			.flags = CLK_SET_RATE_PARENT,
2232			.ops = &clk_branch2_ops,
2233		},
2234	},
2235};
2236
2237static struct clk_branch gcc_tsif_ahb_clk = {
2238	.halt_reg = 0x0d84,
2239	.clkr = {
2240		.enable_reg = 0x0d84,
2241		.enable_mask = BIT(0),
2242		.hw.init = &(struct clk_init_data){
2243			.name = "gcc_tsif_ahb_clk",
2244			.parent_hws = (const struct clk_hw*[]){
2245				&periph_noc_clk_src.clkr.hw,
2246			},
2247			.num_parents = 1,
2248			.ops = &clk_branch2_ops,
2249		},
2250	},
2251};
2252
2253static struct clk_branch gcc_tsif_ref_clk = {
2254	.halt_reg = 0x0d88,
2255	.clkr = {
2256		.enable_reg = 0x0d88,
2257		.enable_mask = BIT(0),
2258		.hw.init = &(struct clk_init_data){
2259			.name = "gcc_tsif_ref_clk",
2260			.parent_hws = (const struct clk_hw*[]){
2261				&tsif_ref_clk_src.clkr.hw,
2262			},
2263			.num_parents = 1,
2264			.flags = CLK_SET_RATE_PARENT,
2265			.ops = &clk_branch2_ops,
2266		},
2267	},
2268};
2269
2270static struct clk_branch gcc_usb2a_phy_sleep_clk = {
2271	.halt_reg = 0x04ac,
2272	.clkr = {
2273		.enable_reg = 0x04ac,
2274		.enable_mask = BIT(0),
2275		.hw.init = &(struct clk_init_data){
2276			.name = "gcc_usb2a_phy_sleep_clk",
2277			.parent_data = &(const struct clk_parent_data){
2278				.fw_name = "sleep_clk", .name = "sleep_clk",
2279			},
2280			.num_parents = 1,
2281			.ops = &clk_branch2_ops,
2282		},
2283	},
2284};
2285
2286static struct clk_branch gcc_usb2b_phy_sleep_clk = {
2287	.halt_reg = 0x04b4,
2288	.clkr = {
2289		.enable_reg = 0x04b4,
2290		.enable_mask = BIT(0),
2291		.hw.init = &(struct clk_init_data){
2292			.name = "gcc_usb2b_phy_sleep_clk",
2293			.parent_data = &(const struct clk_parent_data){
2294				.fw_name = "sleep_clk", .name = "sleep_clk",
2295			},
2296			.num_parents = 1,
2297			.ops = &clk_branch2_ops,
2298		},
2299	},
2300};
2301
2302static struct clk_branch gcc_usb30_master_clk = {
2303	.halt_reg = 0x03c8,
2304	.clkr = {
2305		.enable_reg = 0x03c8,
2306		.enable_mask = BIT(0),
2307		.hw.init = &(struct clk_init_data){
2308			.name = "gcc_usb30_master_clk",
2309			.parent_hws = (const struct clk_hw*[]){
2310				&usb30_master_clk_src.clkr.hw,
2311			},
2312			.num_parents = 1,
2313			.flags = CLK_SET_RATE_PARENT,
2314			.ops = &clk_branch2_ops,
2315		},
2316	},
2317};
2318
2319static struct clk_branch gcc_usb30_mock_utmi_clk = {
2320	.halt_reg = 0x03d0,
2321	.clkr = {
2322		.enable_reg = 0x03d0,
2323		.enable_mask = BIT(0),
2324		.hw.init = &(struct clk_init_data){
2325			.name = "gcc_usb30_mock_utmi_clk",
2326			.parent_hws = (const struct clk_hw*[]){
2327				&usb30_mock_utmi_clk_src.clkr.hw,
2328			},
2329			.num_parents = 1,
2330			.flags = CLK_SET_RATE_PARENT,
2331			.ops = &clk_branch2_ops,
2332		},
2333	},
2334};
2335
2336static struct clk_branch gcc_usb30_sleep_clk = {
2337	.halt_reg = 0x03cc,
2338	.clkr = {
2339		.enable_reg = 0x03cc,
2340		.enable_mask = BIT(0),
2341		.hw.init = &(struct clk_init_data){
2342			.name = "gcc_usb30_sleep_clk",
2343			.parent_data = &(const struct clk_parent_data){
2344				.fw_name = "sleep_clk", .name = "sleep_clk",
2345			},
2346			.num_parents = 1,
2347			.ops = &clk_branch2_ops,
2348		},
2349	},
2350};
2351
2352static struct clk_branch gcc_usb_hs_ahb_clk = {
2353	.halt_reg = 0x0488,
2354	.clkr = {
2355		.enable_reg = 0x0488,
2356		.enable_mask = BIT(0),
2357		.hw.init = &(struct clk_init_data){
2358			.name = "gcc_usb_hs_ahb_clk",
2359			.parent_hws = (const struct clk_hw*[]){
2360				&periph_noc_clk_src.clkr.hw,
2361			},
2362			.num_parents = 1,
2363			.ops = &clk_branch2_ops,
2364		},
2365	},
2366};
2367
2368static struct clk_branch gcc_usb_hs_system_clk = {
2369	.halt_reg = 0x0484,
2370	.clkr = {
2371		.enable_reg = 0x0484,
2372		.enable_mask = BIT(0),
2373		.hw.init = &(struct clk_init_data){
2374			.name = "gcc_usb_hs_system_clk",
2375			.parent_hws = (const struct clk_hw*[]){
2376				&usb_hs_system_clk_src.clkr.hw,
2377			},
2378			.num_parents = 1,
2379			.flags = CLK_SET_RATE_PARENT,
2380			.ops = &clk_branch2_ops,
2381		},
2382	},
2383};
2384
2385static struct clk_branch gcc_usb_hsic_ahb_clk = {
2386	.halt_reg = 0x0408,
2387	.clkr = {
2388		.enable_reg = 0x0408,
2389		.enable_mask = BIT(0),
2390		.hw.init = &(struct clk_init_data){
2391			.name = "gcc_usb_hsic_ahb_clk",
2392			.parent_hws = (const struct clk_hw*[]){
2393				&periph_noc_clk_src.clkr.hw,
2394			},
2395			.num_parents = 1,
2396			.ops = &clk_branch2_ops,
2397		},
2398	},
2399};
2400
2401static struct clk_branch gcc_usb_hsic_clk = {
2402	.halt_reg = 0x0410,
2403	.clkr = {
2404		.enable_reg = 0x0410,
2405		.enable_mask = BIT(0),
2406		.hw.init = &(struct clk_init_data){
2407			.name = "gcc_usb_hsic_clk",
2408			.parent_hws = (const struct clk_hw*[]){
2409				&usb_hsic_clk_src.clkr.hw,
2410			},
2411			.num_parents = 1,
2412			.flags = CLK_SET_RATE_PARENT,
2413			.ops = &clk_branch2_ops,
2414		},
2415	},
2416};
2417
2418static struct clk_branch gcc_usb_hsic_io_cal_clk = {
2419	.halt_reg = 0x0414,
2420	.clkr = {
2421		.enable_reg = 0x0414,
2422		.enable_mask = BIT(0),
2423		.hw.init = &(struct clk_init_data){
2424			.name = "gcc_usb_hsic_io_cal_clk",
2425			.parent_hws = (const struct clk_hw*[]){
2426				&usb_hsic_io_cal_clk_src.clkr.hw,
2427			},
2428			.num_parents = 1,
2429			.flags = CLK_SET_RATE_PARENT,
2430			.ops = &clk_branch2_ops,
2431		},
2432	},
2433};
2434
2435static struct clk_branch gcc_usb_hsic_io_cal_sleep_clk = {
2436	.halt_reg = 0x0418,
2437	.clkr = {
2438		.enable_reg = 0x0418,
2439		.enable_mask = BIT(0),
2440		.hw.init = &(struct clk_init_data){
2441			.name = "gcc_usb_hsic_io_cal_sleep_clk",
2442			.parent_data = &(const struct clk_parent_data){
2443				.fw_name = "sleep_clk", .name = "sleep_clk",
2444			},
2445			.num_parents = 1,
2446			.ops = &clk_branch2_ops,
2447		},
2448	},
2449};
2450
2451static struct clk_branch gcc_usb_hsic_system_clk = {
2452	.halt_reg = 0x040c,
2453	.clkr = {
2454		.enable_reg = 0x040c,
2455		.enable_mask = BIT(0),
2456		.hw.init = &(struct clk_init_data){
2457			.name = "gcc_usb_hsic_system_clk",
2458			.parent_hws = (const struct clk_hw*[]){
2459				&usb_hsic_system_clk_src.clkr.hw,
2460			},
2461			.num_parents = 1,
2462			.flags = CLK_SET_RATE_PARENT,
2463			.ops = &clk_branch2_ops,
2464		},
2465	},
2466};
2467
2468static struct gdsc usb_hs_hsic_gdsc = {
2469	.gdscr = 0x404,
2470	.pd = {
2471		.name = "usb_hs_hsic",
2472	},
2473	.pwrsts = PWRSTS_OFF_ON,
2474};
2475
2476static struct clk_regmap *gcc_msm8226_clocks[] = {
2477	[GPLL0] = &gpll0.clkr,
2478	[GPLL0_VOTE] = &gpll0_vote,
2479	[GPLL1] = &gpll1.clkr,
2480	[GPLL1_VOTE] = &gpll1_vote,
2481	[CONFIG_NOC_CLK_SRC] = &config_noc_clk_src.clkr,
2482	[PERIPH_NOC_CLK_SRC] = &periph_noc_clk_src.clkr,
2483	[SYSTEM_NOC_CLK_SRC] = &system_noc_clk_src.clkr,
2484	[BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
2485	[BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
2486	[BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
2487	[BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
2488	[BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
2489	[BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
2490	[BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
2491	[BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
2492	[BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
2493	[BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
2494	[BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
2495	[BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
2496	[BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
2497	[BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
2498	[BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
2499	[BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
2500	[BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
2501	[BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
2502	[CE1_CLK_SRC] = &ce1_clk_src.clkr,
2503	[GP1_CLK_SRC] = &gp1_clk_src.clkr,
2504	[GP2_CLK_SRC] = &gp2_clk_src.clkr,
2505	[GP3_CLK_SRC] = &gp3_clk_src.clkr,
2506	[PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
2507	[SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
2508	[SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
2509	[SDCC3_APPS_CLK_SRC] = &sdcc3_apps_clk_src.clkr,
2510	[USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
2511	[USB_HSIC_CLK_SRC] = &usb_hsic_clk_src.clkr,
2512	[USB_HSIC_IO_CAL_CLK_SRC] = &usb_hsic_io_cal_clk_src.clkr,
2513	[USB_HSIC_SYSTEM_CLK_SRC] = &usb_hsic_system_clk_src.clkr,
2514	[GCC_BAM_DMA_AHB_CLK] = &gcc_bam_dma_ahb_clk.clkr,
2515	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
2516	[GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
2517	[GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
2518	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
2519	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
2520	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
2521	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
2522	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
2523	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
2524	[GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
2525	[GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
2526	[GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
2527	[GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
2528	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
2529	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
2530	[GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
2531	[GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
2532	[GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
2533	[GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
2534	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2535	[GCC_CE1_AHB_CLK] = &gcc_ce1_ahb_clk.clkr,
2536	[GCC_CE1_AXI_CLK] = &gcc_ce1_axi_clk.clkr,
2537	[GCC_CE1_CLK] = &gcc_ce1_clk.clkr,
2538	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2539	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2540	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2541	[GCC_LPASS_Q6_AXI_CLK] = &gcc_lpass_q6_axi_clk.clkr,
2542	[GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
2543	[GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
2544	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2545	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2546	[GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
2547	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
2548	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2549	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2550	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2551	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2552	[GCC_SDCC3_AHB_CLK] = &gcc_sdcc3_ahb_clk.clkr,
2553	[GCC_SDCC3_APPS_CLK] = &gcc_sdcc3_apps_clk.clkr,
2554	[GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
2555	[GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
2556	[GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
2557	[GCC_USB_HSIC_AHB_CLK] = &gcc_usb_hsic_ahb_clk.clkr,
2558	[GCC_USB_HSIC_CLK] = &gcc_usb_hsic_clk.clkr,
2559	[GCC_USB_HSIC_IO_CAL_CLK] = &gcc_usb_hsic_io_cal_clk.clkr,
2560	[GCC_USB_HSIC_SYSTEM_CLK] = &gcc_usb_hsic_system_clk.clkr,
2561};
2562
2563static const struct qcom_reset_map gcc_msm8226_resets[] = {
2564	[GCC_USB_HS_HSIC_BCR] = { 0x0400 },
2565	[GCC_USB_HS_BCR] = { 0x0480 },
2566	[GCC_USB2A_PHY_BCR] = { 0x04a8 },
2567};
2568
2569static struct gdsc *gcc_msm8226_gdscs[] = {
2570	[USB_HS_HSIC_GDSC] = &usb_hs_hsic_gdsc,
2571};
2572
2573static const struct regmap_config gcc_msm8226_regmap_config = {
2574	.reg_bits	= 32,
2575	.reg_stride	= 4,
2576	.val_bits	= 32,
2577	.max_register	= 0x1a80,
2578	.fast_io	= true,
2579};
2580
2581static const struct qcom_cc_desc gcc_msm8226_desc = {
2582	.config = &gcc_msm8226_regmap_config,
2583	.clks = gcc_msm8226_clocks,
2584	.num_clks = ARRAY_SIZE(gcc_msm8226_clocks),
2585	.resets = gcc_msm8226_resets,
2586	.num_resets = ARRAY_SIZE(gcc_msm8226_resets),
2587	.gdscs = gcc_msm8226_gdscs,
2588	.num_gdscs = ARRAY_SIZE(gcc_msm8226_gdscs),
2589};
2590
2591static struct clk_regmap *gcc_msm8974_clocks[] = {
2592	[GPLL0] = &gpll0.clkr,
2593	[GPLL0_VOTE] = &gpll0_vote,
2594	[CONFIG_NOC_CLK_SRC] = &config_noc_clk_src.clkr,
2595	[PERIPH_NOC_CLK_SRC] = &periph_noc_clk_src.clkr,
2596	[SYSTEM_NOC_CLK_SRC] = &system_noc_clk_src.clkr,
2597	[GPLL1] = &gpll1.clkr,
2598	[GPLL1_VOTE] = &gpll1_vote,
2599	[USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
2600	[BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
2601	[BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
2602	[BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
2603	[BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
2604	[BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
2605	[BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
2606	[BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
2607	[BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
2608	[BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
2609	[BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
2610	[BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
2611	[BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
2612	[BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
2613	[BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
2614	[BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
2615	[BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
2616	[BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
2617	[BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
2618	[BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
2619	[BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
2620	[BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
2621	[BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
2622	[BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
2623	[BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
2624	[BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
2625	[BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
2626	[BLSP2_QUP5_I2C_APPS_CLK_SRC] = &blsp2_qup5_i2c_apps_clk_src.clkr,
2627	[BLSP2_QUP5_SPI_APPS_CLK_SRC] = &blsp2_qup5_spi_apps_clk_src.clkr,
2628	[BLSP2_QUP6_I2C_APPS_CLK_SRC] = &blsp2_qup6_i2c_apps_clk_src.clkr,
2629	[BLSP2_QUP6_SPI_APPS_CLK_SRC] = &blsp2_qup6_spi_apps_clk_src.clkr,
2630	[BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
2631	[BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
2632	[BLSP2_UART3_APPS_CLK_SRC] = &blsp2_uart3_apps_clk_src.clkr,
2633	[BLSP2_UART4_APPS_CLK_SRC] = &blsp2_uart4_apps_clk_src.clkr,
2634	[BLSP2_UART5_APPS_CLK_SRC] = &blsp2_uart5_apps_clk_src.clkr,
2635	[BLSP2_UART6_APPS_CLK_SRC] = &blsp2_uart6_apps_clk_src.clkr,
2636	[CE1_CLK_SRC] = &ce1_clk_src.clkr,
2637	[CE2_CLK_SRC] = &ce2_clk_src.clkr,
2638	[GP1_CLK_SRC] = &gp1_clk_src.clkr,
2639	[GP2_CLK_SRC] = &gp2_clk_src.clkr,
2640	[GP3_CLK_SRC] = &gp3_clk_src.clkr,
2641	[PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
2642	[SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
2643	[SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
2644	[SDCC3_APPS_CLK_SRC] = &sdcc3_apps_clk_src.clkr,
2645	[SDCC4_APPS_CLK_SRC] = &sdcc4_apps_clk_src.clkr,
2646	[TSIF_REF_CLK_SRC] = &tsif_ref_clk_src.clkr,
2647	[USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
2648	[USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
2649	[USB_HSIC_CLK_SRC] = &usb_hsic_clk_src.clkr,
2650	[USB_HSIC_IO_CAL_CLK_SRC] = &usb_hsic_io_cal_clk_src.clkr,
2651	[USB_HSIC_SYSTEM_CLK_SRC] = &usb_hsic_system_clk_src.clkr,
2652	[GCC_BAM_DMA_AHB_CLK] = &gcc_bam_dma_ahb_clk.clkr,
2653	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
2654	[GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
2655	[GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
2656	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
2657	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
2658	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
2659	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
2660	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
2661	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
2662	[GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
2663	[GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
2664	[GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
2665	[GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
2666	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
2667	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
2668	[GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
2669	[GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
2670	[GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
2671	[GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
2672	[GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
2673	[GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
2674	[GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
2675	[GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
2676	[GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
2677	[GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
2678	[GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
2679	[GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
2680	[GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
2681	[GCC_BLSP2_QUP5_I2C_APPS_CLK] = &gcc_blsp2_qup5_i2c_apps_clk.clkr,
2682	[GCC_BLSP2_QUP5_SPI_APPS_CLK] = &gcc_blsp2_qup5_spi_apps_clk.clkr,
2683	[GCC_BLSP2_QUP6_I2C_APPS_CLK] = &gcc_blsp2_qup6_i2c_apps_clk.clkr,
2684	[GCC_BLSP2_QUP6_SPI_APPS_CLK] = &gcc_blsp2_qup6_spi_apps_clk.clkr,
2685	[GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
2686	[GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
2687	[GCC_BLSP2_UART3_APPS_CLK] = &gcc_blsp2_uart3_apps_clk.clkr,
2688	[GCC_BLSP2_UART4_APPS_CLK] = &gcc_blsp2_uart4_apps_clk.clkr,
2689	[GCC_BLSP2_UART5_APPS_CLK] = &gcc_blsp2_uart5_apps_clk.clkr,
2690	[GCC_BLSP2_UART6_APPS_CLK] = &gcc_blsp2_uart6_apps_clk.clkr,
2691	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2692	[GCC_CE1_AHB_CLK] = &gcc_ce1_ahb_clk.clkr,
2693	[GCC_CE1_AXI_CLK] = &gcc_ce1_axi_clk.clkr,
2694	[GCC_CE1_CLK] = &gcc_ce1_clk.clkr,
2695	[GCC_CE2_AHB_CLK] = &gcc_ce2_ahb_clk.clkr,
2696	[GCC_CE2_AXI_CLK] = &gcc_ce2_axi_clk.clkr,
2697	[GCC_CE2_CLK] = &gcc_ce2_clk.clkr,
2698	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2699	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2700	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2701	[GCC_LPASS_Q6_AXI_CLK] = &gcc_lpass_q6_axi_clk.clkr,
2702	[GCC_MMSS_NOC_CFG_AHB_CLK] = &gcc_mmss_noc_cfg_ahb_clk.clkr,
2703	[GCC_OCMEM_NOC_CFG_AHB_CLK] = &gcc_ocmem_noc_cfg_ahb_clk.clkr,
2704	[GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
2705	[GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
2706	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2707	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2708	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
2709	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2710	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2711	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2712	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2713	[GCC_SDCC3_AHB_CLK] = &gcc_sdcc3_ahb_clk.clkr,
2714	[GCC_SDCC3_APPS_CLK] = &gcc_sdcc3_apps_clk.clkr,
2715	[GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
2716	[GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
2717	[GCC_SYS_NOC_USB3_AXI_CLK] = &gcc_sys_noc_usb3_axi_clk.clkr,
2718	[GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr,
2719	[GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
2720	[GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
2721	[GCC_USB2B_PHY_SLEEP_CLK] = &gcc_usb2b_phy_sleep_clk.clkr,
2722	[GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
2723	[GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
2724	[GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,
2725	[GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
2726	[GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
2727	[GCC_USB_HSIC_AHB_CLK] = &gcc_usb_hsic_ahb_clk.clkr,
2728	[GCC_USB_HSIC_CLK] = &gcc_usb_hsic_clk.clkr,
2729	[GCC_USB_HSIC_IO_CAL_CLK] = &gcc_usb_hsic_io_cal_clk.clkr,
2730	[GCC_USB_HSIC_IO_CAL_SLEEP_CLK] = &gcc_usb_hsic_io_cal_sleep_clk.clkr,
2731	[GCC_USB_HSIC_SYSTEM_CLK] = &gcc_usb_hsic_system_clk.clkr,
2732	[GCC_MMSS_GPLL0_CLK_SRC] = &gcc_mmss_gpll0_clk_src,
2733	[GPLL4] = NULL,
2734	[GPLL4_VOTE] = NULL,
2735	[GCC_SDCC1_CDCCAL_SLEEP_CLK] = NULL,
2736	[GCC_SDCC1_CDCCAL_FF_CLK] = NULL,
2737};
2738
2739static const struct qcom_reset_map gcc_msm8974_resets[] = {
2740	[GCC_SYSTEM_NOC_BCR] = { 0x0100 },
2741	[GCC_CONFIG_NOC_BCR] = { 0x0140 },
2742	[GCC_PERIPH_NOC_BCR] = { 0x0180 },
2743	[GCC_IMEM_BCR] = { 0x0200 },
2744	[GCC_MMSS_BCR] = { 0x0240 },
2745	[GCC_QDSS_BCR] = { 0x0300 },
2746	[GCC_USB_30_BCR] = { 0x03c0 },
2747	[GCC_USB3_PHY_BCR] = { 0x03fc },
2748	[GCC_USB_HS_HSIC_BCR] = { 0x0400 },
2749	[GCC_USB_HS_BCR] = { 0x0480 },
2750	[GCC_USB2A_PHY_BCR] = { 0x04a8 },
2751	[GCC_USB2B_PHY_BCR] = { 0x04b0 },
2752	[GCC_SDCC1_BCR] = { 0x04c0 },
2753	[GCC_SDCC2_BCR] = { 0x0500 },
2754	[GCC_SDCC3_BCR] = { 0x0540 },
2755	[GCC_SDCC4_BCR] = { 0x0580 },
2756	[GCC_BLSP1_BCR] = { 0x05c0 },
2757	[GCC_BLSP1_QUP1_BCR] = { 0x0640 },
2758	[GCC_BLSP1_UART1_BCR] = { 0x0680 },
2759	[GCC_BLSP1_QUP2_BCR] = { 0x06c0 },
2760	[GCC_BLSP1_UART2_BCR] = { 0x0700 },
2761	[GCC_BLSP1_QUP3_BCR] = { 0x0740 },
2762	[GCC_BLSP1_UART3_BCR] = { 0x0780 },
2763	[GCC_BLSP1_QUP4_BCR] = { 0x07c0 },
2764	[GCC_BLSP1_UART4_BCR] = { 0x0800 },
2765	[GCC_BLSP1_QUP5_BCR] = { 0x0840 },
2766	[GCC_BLSP1_UART5_BCR] = { 0x0880 },
2767	[GCC_BLSP1_QUP6_BCR] = { 0x08c0 },
2768	[GCC_BLSP1_UART6_BCR] = { 0x0900 },
2769	[GCC_BLSP2_BCR] = { 0x0940 },
2770	[GCC_BLSP2_QUP1_BCR] = { 0x0980 },
2771	[GCC_BLSP2_UART1_BCR] = { 0x09c0 },
2772	[GCC_BLSP2_QUP2_BCR] = { 0x0a00 },
2773	[GCC_BLSP2_UART2_BCR] = { 0x0a40 },
2774	[GCC_BLSP2_QUP3_BCR] = { 0x0a80 },
2775	[GCC_BLSP2_UART3_BCR] = { 0x0ac0 },
2776	[GCC_BLSP2_QUP4_BCR] = { 0x0b00 },
2777	[GCC_BLSP2_UART4_BCR] = { 0x0b40 },
2778	[GCC_BLSP2_QUP5_BCR] = { 0x0b80 },
2779	[GCC_BLSP2_UART5_BCR] = { 0x0bc0 },
2780	[GCC_BLSP2_QUP6_BCR] = { 0x0c00 },
2781	[GCC_BLSP2_UART6_BCR] = { 0x0c40 },
2782	[GCC_PDM_BCR] = { 0x0cc0 },
2783	[GCC_BAM_DMA_BCR] = { 0x0d40 },
2784	[GCC_TSIF_BCR] = { 0x0d80 },
2785	[GCC_TCSR_BCR] = { 0x0dc0 },
2786	[GCC_BOOT_ROM_BCR] = { 0x0e00 },
2787	[GCC_MSG_RAM_BCR] = { 0x0e40 },
2788	[GCC_TLMM_BCR] = { 0x0e80 },
2789	[GCC_MPM_BCR] = { 0x0ec0 },
2790	[GCC_SEC_CTRL_BCR] = { 0x0f40 },
2791	[GCC_SPMI_BCR] = { 0x0fc0 },
2792	[GCC_SPDM_BCR] = { 0x1000 },
2793	[GCC_CE1_BCR] = { 0x1040 },
2794	[GCC_CE2_BCR] = { 0x1080 },
2795	[GCC_BIMC_BCR] = { 0x1100 },
2796	[GCC_MPM_NON_AHB_RESET] = { 0x0ec4, 2 },
2797	[GCC_MPM_AHB_RESET] = {	0x0ec4, 1 },
2798	[GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x1240 },
2799	[GCC_SNOC_BUS_TIMEOUT2_BCR] = { 0x1248 },
2800	[GCC_PNOC_BUS_TIMEOUT0_BCR] = { 0x1280 },
2801	[GCC_PNOC_BUS_TIMEOUT1_BCR] = { 0x1288 },
2802	[GCC_PNOC_BUS_TIMEOUT2_BCR] = { 0x1290 },
2803	[GCC_PNOC_BUS_TIMEOUT3_BCR] = { 0x1298 },
2804	[GCC_PNOC_BUS_TIMEOUT4_BCR] = { 0x12a0 },
2805	[GCC_CNOC_BUS_TIMEOUT0_BCR] = { 0x12c0 },
2806	[GCC_CNOC_BUS_TIMEOUT1_BCR] = { 0x12c8 },
2807	[GCC_CNOC_BUS_TIMEOUT2_BCR] = { 0x12d0 },
2808	[GCC_CNOC_BUS_TIMEOUT3_BCR] = { 0x12d8 },
2809	[GCC_CNOC_BUS_TIMEOUT4_BCR] = { 0x12e0 },
2810	[GCC_CNOC_BUS_TIMEOUT5_BCR] = { 0x12e8 },
2811	[GCC_CNOC_BUS_TIMEOUT6_BCR] = { 0x12f0 },
2812	[GCC_DEHR_BCR] = { 0x1300 },
2813	[GCC_RBCPR_BCR] = { 0x1380 },
2814	[GCC_MSS_RESTART] = { 0x1680 },
2815	[GCC_LPASS_RESTART] = { 0x16c0 },
2816	[GCC_WCSS_RESTART] = { 0x1700 },
2817	[GCC_VENUS_RESTART] = { 0x1740 },
2818};
2819
2820static struct gdsc *gcc_msm8974_gdscs[] = {
2821	[USB_HS_HSIC_GDSC] = &usb_hs_hsic_gdsc,
2822};
2823
2824static const struct regmap_config gcc_msm8974_regmap_config = {
2825	.reg_bits	= 32,
2826	.reg_stride	= 4,
2827	.val_bits	= 32,
2828	.max_register	= 0x1fc0,
2829	.fast_io	= true,
2830};
2831
2832static const struct qcom_cc_desc gcc_msm8974_desc = {
2833	.config = &gcc_msm8974_regmap_config,
2834	.clks = gcc_msm8974_clocks,
2835	.num_clks = ARRAY_SIZE(gcc_msm8974_clocks),
2836	.resets = gcc_msm8974_resets,
2837	.num_resets = ARRAY_SIZE(gcc_msm8974_resets),
2838	.gdscs = gcc_msm8974_gdscs,
2839	.num_gdscs = ARRAY_SIZE(gcc_msm8974_gdscs),
2840};
2841
2842static const struct of_device_id gcc_msm8974_match_table[] = {
2843	{ .compatible = "qcom,gcc-msm8226", .data = &gcc_msm8226_desc },
2844	{ .compatible = "qcom,gcc-msm8974", .data = &gcc_msm8974_desc },
2845	{ .compatible = "qcom,gcc-msm8974pro", .data = &gcc_msm8974_desc },
2846	{ .compatible = "qcom,gcc-msm8974pro-ac", .data = &gcc_msm8974_desc },
2847	{ }
2848};
2849MODULE_DEVICE_TABLE(of, gcc_msm8974_match_table);
2850
2851static void msm8226_clock_override(void)
2852{
2853	ce1_clk_src.freq_tbl = ftbl_gcc_ce1_clk_msm8226;
2854	gp1_clk_src.freq_tbl = ftbl_gcc_gp_clk_msm8226;
2855	gp2_clk_src.freq_tbl = ftbl_gcc_gp_clk_msm8226;
2856	gp3_clk_src.freq_tbl = ftbl_gcc_gp_clk_msm8226;
2857}
2858
2859static void msm8974_pro_clock_override(void)
2860{
2861	sdcc1_apps_clk_src_init.parent_data = gcc_xo_gpll0_gpll4;
2862	sdcc1_apps_clk_src_init.num_parents = 3;
2863	sdcc1_apps_clk_src.freq_tbl = ftbl_gcc_sdcc1_apps_clk_pro;
2864	sdcc1_apps_clk_src.parent_map = gcc_xo_gpll0_gpll4_map;
2865
2866	gcc_msm8974_clocks[GPLL4] = &gpll4.clkr;
2867	gcc_msm8974_clocks[GPLL4_VOTE] = &gpll4_vote;
2868	gcc_msm8974_clocks[GCC_SDCC1_CDCCAL_SLEEP_CLK] =
2869		&gcc_sdcc1_cdccal_sleep_clk.clkr;
2870	gcc_msm8974_clocks[GCC_SDCC1_CDCCAL_FF_CLK] =
2871		&gcc_sdcc1_cdccal_ff_clk.clkr;
2872}
2873
2874static int gcc_msm8974_probe(struct platform_device *pdev)
2875{
2876	int ret;
2877	struct device *dev = &pdev->dev;
2878	const void *data = device_get_match_data(dev);
2879
2880	if (!of_device_is_compatible(dev->of_node, "qcom,gcc-msm8974")) {
2881		if (data == &gcc_msm8226_desc)
2882			msm8226_clock_override();
2883		else
2884			msm8974_pro_clock_override();
2885	}
2886
2887	ret = qcom_cc_register_board_clk(dev, "xo_board", "xo", 19200000);
2888	if (ret)
2889		return ret;
2890
2891	ret = qcom_cc_register_sleep_clk(dev);
2892	if (ret)
2893		return ret;
2894
2895	return qcom_cc_probe(pdev, &gcc_msm8974_desc);
2896}
2897
2898static struct platform_driver gcc_msm8974_driver = {
2899	.probe		= gcc_msm8974_probe,
2900	.driver		= {
2901		.name	= "gcc-msm8974",
2902		.of_match_table = gcc_msm8974_match_table,
2903	},
2904};
2905
2906static int __init gcc_msm8974_init(void)
2907{
2908	return platform_driver_register(&gcc_msm8974_driver);
2909}
2910core_initcall(gcc_msm8974_init);
2911
2912static void __exit gcc_msm8974_exit(void)
2913{
2914	platform_driver_unregister(&gcc_msm8974_driver);
2915}
2916module_exit(gcc_msm8974_exit);
2917
2918MODULE_DESCRIPTION("QCOM GCC MSM8974 Driver");
2919MODULE_LICENSE("GPL v2");
2920MODULE_ALIAS("platform:gcc-msm8974");