Linux Audio

Check our new training course

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