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) 2018, The Linux Foundation. All rights reserved.
   4 */
   5
   6#include <linux/kernel.h>
   7#include <linux/platform_device.h>
   8#include <linux/module.h>
   9#include <linux/of.h>
  10#include <linux/clk-provider.h>
  11#include <linux/regmap.h>
  12#include <linux/reset-controller.h>
  13
  14#include <dt-bindings/clock/qcom,gcc-qcs404.h>
  15
  16#include "clk-alpha-pll.h"
  17#include "clk-branch.h"
  18#include "clk-pll.h"
  19#include "clk-rcg.h"
  20#include "clk-regmap.h"
  21#include "common.h"
  22#include "gdsc.h"
  23#include "reset.h"
  24
  25enum {
  26	DT_XO,
  27	DT_SLEEP_CLK,
  28	DT_PCIE_0_PIPE_CLK,
  29	DT_DSI0_PHY_PLL_OUT_DSICLK,
  30	DT_DSI0_PHY_PLL_OUT_BYTECLK,
  31	DT_HDMI_PHY_PLL_CLK,
  32};
  33
  34enum {
  35	P_DSI0_PHY_PLL_OUT_BYTECLK,
  36	P_DSI0_PHY_PLL_OUT_DSICLK,
  37	P_GPLL0_OUT_MAIN,
  38	P_GPLL1_OUT_MAIN,
  39	P_GPLL3_OUT_MAIN,
  40	P_GPLL4_OUT_MAIN,
  41	P_GPLL6_OUT_AUX,
  42	P_HDMI_PHY_PLL_CLK,
  43	P_PCIE_0_PIPE_CLK,
  44	P_SLEEP_CLK,
  45	P_XO,
  46};
  47
  48static const struct parent_map gcc_parent_map_1[] = {
  49	{ P_XO, 0 },
  50};
  51
  52static const struct clk_parent_data gcc_parent_data_1[] = {
  53	{ .index = DT_XO, .name = "xo-board" },
  54};
  55
  56static struct clk_fixed_factor cxo = {
  57	.mult = 1,
  58	.div = 1,
  59	.hw.init = &(struct clk_init_data){
  60		.name = "cxo",
  61		.parent_data = gcc_parent_data_1,
  62		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
  63		.ops = &clk_fixed_factor_ops,
  64	},
  65};
  66
  67static struct clk_alpha_pll gpll0_sleep_clk_src = {
  68	.offset = 0x21000,
  69	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  70	.clkr = {
  71		.enable_reg = 0x45008,
  72		.enable_mask = BIT(23),
  73		.enable_is_inverted = true,
  74		.hw.init = &(struct clk_init_data){
  75			.name = "gpll0_sleep_clk_src",
  76			.parent_data = gcc_parent_data_1,
  77			.num_parents = ARRAY_SIZE(gcc_parent_data_1),
  78			.ops = &clk_alpha_pll_ops,
  79		},
  80	},
  81};
  82
  83static struct clk_alpha_pll gpll0_out_main = {
  84	.offset = 0x21000,
  85	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  86	.flags = SUPPORTS_FSM_MODE,
  87	.clkr = {
  88		.enable_reg = 0x45000,
  89		.enable_mask = BIT(0),
  90		.hw.init = &(struct clk_init_data){
  91			.name = "gpll0_out_main",
  92			.parent_data = gcc_parent_data_1,
  93			.num_parents = ARRAY_SIZE(gcc_parent_data_1),
  94			.ops = &clk_alpha_pll_ops,
  95		},
  96	},
  97};
  98
  99static struct clk_alpha_pll gpll0_ao_out_main = {
 100	.offset = 0x21000,
 101	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 102	.flags = SUPPORTS_FSM_MODE,
 103	.clkr = {
 104		.enable_reg = 0x45000,
 105		.enable_mask = BIT(0),
 106		.hw.init = &(struct clk_init_data){
 107			.name = "gpll0_ao_out_main",
 108			.parent_data = gcc_parent_data_1,
 109			.num_parents = ARRAY_SIZE(gcc_parent_data_1),
 110			.flags = CLK_IS_CRITICAL,
 111			.ops = &clk_alpha_pll_fixed_ops,
 112		},
 113	},
 114};
 115
 116static struct clk_alpha_pll gpll1_out_main = {
 117	.offset = 0x20000,
 118	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 119	.clkr = {
 120		.enable_reg = 0x45000,
 121		.enable_mask = BIT(1),
 122		.hw.init = &(struct clk_init_data){
 123			.name = "gpll1_out_main",
 124			.parent_data = gcc_parent_data_1,
 125			.num_parents = ARRAY_SIZE(gcc_parent_data_1),
 126			.ops = &clk_alpha_pll_ops,
 127		},
 128	},
 129};
 130
 131/* 930MHz configuration */
 132static const struct alpha_pll_config gpll3_config = {
 133	.l = 48,
 134	.alpha = 0x0,
 135	.alpha_en_mask = BIT(24),
 136	.post_div_mask = 0xf << 8,
 137	.post_div_val = 0x1 << 8,
 138	.vco_mask = 0x3 << 20,
 139	.main_output_mask = 0x1,
 140	.config_ctl_val = 0x4001055b,
 141};
 142
 143static const struct pll_vco gpll3_vco[] = {
 144	{ 700000000, 1400000000, 0 },
 145};
 146
 147static struct clk_alpha_pll gpll3_out_main = {
 148	.offset = 0x22000,
 149	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 150	.vco_table = gpll3_vco,
 151	.num_vco = ARRAY_SIZE(gpll3_vco),
 152	.clkr = {
 153		.hw.init = &(struct clk_init_data){
 154			.name = "gpll3_out_main",
 155			.parent_data = gcc_parent_data_1,
 156			.num_parents = ARRAY_SIZE(gcc_parent_data_1),
 157			.ops = &clk_alpha_pll_ops,
 158		},
 159	},
 160};
 161
 162static struct clk_alpha_pll gpll4_out_main = {
 163	.offset = 0x24000,
 164	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 165	.clkr = {
 166		.enable_reg = 0x45000,
 167		.enable_mask = BIT(5),
 168		.hw.init = &(struct clk_init_data){
 169			.name = "gpll4_out_main",
 170			.parent_data = gcc_parent_data_1,
 171			.num_parents = ARRAY_SIZE(gcc_parent_data_1),
 172			.ops = &clk_alpha_pll_ops,
 173		},
 174	},
 175};
 176
 177static struct clk_pll gpll6 = {
 178	.l_reg = 0x37004,
 179	.m_reg = 0x37008,
 180	.n_reg = 0x3700C,
 181	.config_reg = 0x37014,
 182	.mode_reg = 0x37000,
 183	.status_reg = 0x3701C,
 184	.status_bit = 17,
 185	.clkr.hw.init = &(struct clk_init_data){
 186		.name = "gpll6",
 187		.parent_data = gcc_parent_data_1,
 188		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
 189		.ops = &clk_pll_ops,
 190	},
 191};
 192
 193static struct clk_regmap gpll6_out_aux = {
 194	.enable_reg = 0x45000,
 195	.enable_mask = BIT(7),
 196	.hw.init = &(struct clk_init_data){
 197		.name = "gpll6_out_aux",
 198		.parent_hws = (const struct clk_hw*[]) {
 199			&gpll6.clkr.hw,
 200		},
 201		.num_parents = 1,
 202		.ops = &clk_pll_vote_ops,
 203	},
 204};
 205
 206static const struct parent_map gcc_parent_map_0[] = {
 207	{ P_XO, 0 },
 208	{ P_GPLL0_OUT_MAIN, 1 },
 209};
 210
 211static const struct clk_parent_data gcc_parent_data_0[] = {
 212	{ .index = DT_XO, .name = "xo-board" },
 213	{ .hw = &gpll0_out_main.clkr.hw },
 214};
 215
 216static const struct clk_parent_data gcc_parent_data_ao_0[] = {
 217	{ .index = DT_XO, .name = "xo-board" },
 218	{ .hw = &gpll0_ao_out_main.clkr.hw },
 219};
 220
 221static const struct parent_map gcc_parent_map_2[] = {
 222	{ P_XO, 0 },
 223	{ P_GPLL0_OUT_MAIN, 1 },
 224	{ P_GPLL6_OUT_AUX, 2 },
 225	{ P_SLEEP_CLK, 6 },
 226};
 227
 228static const struct clk_parent_data gcc_parent_data_2[] = {
 229	{ .index = DT_XO, .name = "xo-board" },
 230	{ .hw = &gpll0_out_main.clkr.hw },
 231	{ .hw = &gpll6_out_aux.hw },
 232	{ .index = DT_SLEEP_CLK, .name = "sleep_clk" },
 233};
 234
 235static const struct parent_map gcc_parent_map_3[] = {
 236	{ P_XO, 0 },
 237	{ P_GPLL0_OUT_MAIN, 1 },
 238	{ P_GPLL6_OUT_AUX, 2 },
 239};
 240
 241static const struct clk_parent_data gcc_parent_data_3[] = {
 242	{ .index = DT_XO, .name = "xo-board" },
 243	{ .hw = &gpll0_out_main.clkr.hw },
 244	{ .hw = &gpll6_out_aux.hw },
 245};
 246
 247static const struct parent_map gcc_parent_map_4[] = {
 248	{ P_XO, 0 },
 249	{ P_GPLL1_OUT_MAIN, 1 },
 250};
 251
 252static const struct clk_parent_data gcc_parent_data_4[] = {
 253	{ .index = DT_XO, .name = "xo-board" },
 254	{ .hw = &gpll1_out_main.clkr.hw },
 255};
 256
 257static const struct parent_map gcc_parent_map_5[] = {
 258	{ P_XO, 0 },
 259	{ P_DSI0_PHY_PLL_OUT_BYTECLK, 1 },
 260};
 261
 262static const struct clk_parent_data gcc_parent_data_5[] = {
 263	{ .index = DT_XO, .name = "xo-board" },
 264	{ .index = DT_DSI0_PHY_PLL_OUT_BYTECLK, .name = "dsi0pllbyte" },
 265};
 266
 267static const struct parent_map gcc_parent_map_6[] = {
 268	{ P_XO, 0 },
 269	{ P_DSI0_PHY_PLL_OUT_BYTECLK, 2 },
 270};
 271
 272static const struct clk_parent_data gcc_parent_data_6[] = {
 273	{ .index = DT_XO, .name = "xo-board" },
 274	{ .index = DT_DSI0_PHY_PLL_OUT_BYTECLK, .name = "dsi0pllbyte" },
 275};
 276
 277static const struct parent_map gcc_parent_map_7[] = {
 278	{ P_XO, 0 },
 279	{ P_GPLL0_OUT_MAIN, 1 },
 280	{ P_GPLL3_OUT_MAIN, 2 },
 281	{ P_GPLL6_OUT_AUX, 3 },
 282};
 283
 284static const struct clk_parent_data gcc_parent_data_7[] = {
 285	{ .index = DT_XO, .name = "xo-board" },
 286	{ .hw = &gpll0_out_main.clkr.hw },
 287	{ .hw = &gpll3_out_main.clkr.hw },
 288	{ .hw = &gpll6_out_aux.hw },
 289};
 290
 291static const struct parent_map gcc_parent_map_8[] = {
 292	{ P_XO, 0 },
 293	{ P_HDMI_PHY_PLL_CLK, 1 },
 294};
 295
 296static const struct clk_parent_data gcc_parent_data_8[] = {
 297	{ .index = DT_XO, .name = "xo-board" },
 298	{ .index = DT_HDMI_PHY_PLL_CLK, .name = "hdmi_pll" },
 299};
 300
 301static const struct parent_map gcc_parent_map_9[] = {
 302	{ P_XO, 0 },
 303	{ P_GPLL0_OUT_MAIN, 1 },
 304	{ P_DSI0_PHY_PLL_OUT_DSICLK, 2 },
 305	{ P_GPLL6_OUT_AUX, 3 },
 306};
 307
 308static const struct clk_parent_data gcc_parent_data_9[] = {
 309	{ .index = DT_XO, .name = "xo-board" },
 310	{ .hw = &gpll0_out_main.clkr.hw },
 311	{ .index = DT_DSI0_PHY_PLL_OUT_DSICLK, .name = "dsi0pll" },
 312	{ .hw = &gpll6_out_aux.hw },
 313};
 314
 315static const struct parent_map gcc_parent_map_10[] = {
 316	{ P_XO, 0 },
 317	{ P_SLEEP_CLK, 1 },
 318};
 319
 320static const struct clk_parent_data gcc_parent_data_10[] = {
 321	{ .index = DT_XO, .name = "xo-board" },
 322	{ .index = DT_SLEEP_CLK, .name = "sleep_clk" },
 323};
 324
 325static const struct parent_map gcc_parent_map_11[] = {
 326	{ P_XO, 0 },
 327	{ P_PCIE_0_PIPE_CLK, 1 },
 328};
 329
 330static const struct clk_parent_data gcc_parent_data_11[] = {
 331	{ .index = DT_XO, .name = "xo-board" },
 332	{ .fw_name = "pcie_0_pipe_clk", .name = "pcie_0_pipe_clk" },
 333};
 334
 335static const struct parent_map gcc_parent_map_12[] = {
 336	{ P_XO, 0 },
 337	{ P_DSI0_PHY_PLL_OUT_DSICLK, 1 },
 338};
 339
 340static const struct clk_parent_data gcc_parent_data_12[] = {
 341	{ .index = DT_XO, .name = "xo-board" },
 342	{ .index = DT_DSI0_PHY_PLL_OUT_DSICLK, .name = "dsi0pll" },
 343};
 344
 345static const struct parent_map gcc_parent_map_13[] = {
 346	{ P_XO, 0 },
 347	{ P_GPLL0_OUT_MAIN, 1 },
 348	{ P_GPLL4_OUT_MAIN, 2 },
 349	{ P_GPLL6_OUT_AUX, 3 },
 350};
 351
 352static const struct clk_parent_data gcc_parent_data_13[] = {
 353	{ .index = DT_XO, .name = "xo-board" },
 354	{ .hw = &gpll0_out_main.clkr.hw },
 355	{ .hw = &gpll4_out_main.clkr.hw },
 356	{ .hw = &gpll6_out_aux.hw },
 357};
 358
 359static const struct parent_map gcc_parent_map_14[] = {
 360	{ P_XO, 0 },
 361	{ P_GPLL0_OUT_MAIN, 1 },
 362};
 363
 364static const struct clk_parent_data gcc_parent_data_14[] = {
 365	{ .index = DT_XO, .name = "xo-board" },
 366	{ .hw = &gpll0_out_main.clkr.hw },
 367};
 368
 369static const struct parent_map gcc_parent_map_15[] = {
 370	{ P_XO, 0 },
 371};
 372
 373static const struct clk_parent_data gcc_parent_data_15[] = {
 374	{ .index = DT_XO, .name = "xo-board" },
 375};
 376
 377static const struct parent_map gcc_parent_map_16[] = {
 378	{ P_XO, 0 },
 379	{ P_GPLL0_OUT_MAIN, 1 },
 380};
 381
 382static const struct clk_parent_data gcc_parent_data_16[] = {
 383	{ .index = DT_XO, .name = "xo-board" },
 384	{ .hw = &gpll0_out_main.clkr.hw },
 385};
 386
 387static const struct freq_tbl ftbl_apss_ahb_clk_src[] = {
 388	F(19200000, P_XO, 1, 0, 0),
 389	F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
 390	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
 391	F(133333333, P_GPLL0_OUT_MAIN, 6, 0, 0),
 392	{ }
 393};
 394
 395static struct clk_rcg2 apss_ahb_clk_src = {
 396	.cmd_rcgr = 0x46000,
 397	.mnd_width = 0,
 398	.hid_width = 5,
 399	.parent_map = gcc_parent_map_0,
 400	.freq_tbl = ftbl_apss_ahb_clk_src,
 401	.clkr.hw.init = &(struct clk_init_data){
 402		.name = "apss_ahb_clk_src",
 403		.parent_data = gcc_parent_data_ao_0,
 404		.num_parents = ARRAY_SIZE(gcc_parent_data_ao_0),
 405		.flags = CLK_IS_CRITICAL,
 406		.ops = &clk_rcg2_ops,
 407	},
 408};
 409
 410static const struct freq_tbl ftbl_blsp1_qup0_i2c_apps_clk_src[] = {
 411	F(19200000, P_XO, 1, 0, 0),
 412	F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
 413	{ }
 414};
 415
 416static struct clk_rcg2 blsp1_qup0_i2c_apps_clk_src = {
 417	.cmd_rcgr = 0x602c,
 418	.mnd_width = 0,
 419	.hid_width = 5,
 420	.parent_map = gcc_parent_map_0,
 421	.freq_tbl = ftbl_blsp1_qup0_i2c_apps_clk_src,
 422	.clkr.hw.init = &(struct clk_init_data){
 423		.name = "blsp1_qup0_i2c_apps_clk_src",
 424		.parent_data = gcc_parent_data_0,
 425		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 426		.ops = &clk_rcg2_ops,
 427	},
 428};
 429
 430static const struct freq_tbl ftbl_blsp1_qup0_spi_apps_clk_src[] = {
 431	F(960000, P_XO, 10, 1, 2),
 432	F(4800000, P_XO, 4, 0, 0),
 433	F(9600000, P_XO, 2, 0, 0),
 434	F(16000000, P_GPLL0_OUT_MAIN, 10, 1, 5),
 435	F(19200000, P_XO, 1, 0, 0),
 436	F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2),
 437	F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
 438	{ }
 439};
 440
 441static struct clk_rcg2 blsp1_qup0_spi_apps_clk_src = {
 442	.cmd_rcgr = 0x6034,
 443	.mnd_width = 8,
 444	.hid_width = 5,
 445	.parent_map = gcc_parent_map_0,
 446	.freq_tbl = ftbl_blsp1_qup0_spi_apps_clk_src,
 447	.clkr.hw.init = &(struct clk_init_data){
 448		.name = "blsp1_qup0_spi_apps_clk_src",
 449		.parent_data = gcc_parent_data_0,
 450		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 451		.ops = &clk_rcg2_ops,
 452	},
 453};
 454
 455static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
 456	.cmd_rcgr = 0x200c,
 457	.mnd_width = 0,
 458	.hid_width = 5,
 459	.parent_map = gcc_parent_map_0,
 460	.freq_tbl = ftbl_blsp1_qup0_i2c_apps_clk_src,
 461	.clkr.hw.init = &(struct clk_init_data){
 462		.name = "blsp1_qup1_i2c_apps_clk_src",
 463		.parent_data = gcc_parent_data_0,
 464		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 465		.ops = &clk_rcg2_ops,
 466	},
 467};
 468
 469static const struct freq_tbl ftbl_blsp1_qup1_spi_apps_clk_src[] = {
 470	F(960000,   P_XO, 10, 1, 2),
 471	F(4800000,  P_XO, 4, 0, 0),
 472	F(9600000,  P_XO, 2, 0, 0),
 473	F(10480000, P_GPLL0_OUT_MAIN, 1, 3, 229),
 474	F(16000000, P_GPLL0_OUT_MAIN, 10, 1, 5),
 475	F(19200000, P_XO, 1, 0, 0),
 476	F(20961000, P_GPLL0_OUT_MAIN, 1, 6, 229),
 477	{ }
 478};
 479
 480static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
 481	.cmd_rcgr = 0x2024,
 482	.mnd_width = 8,
 483	.hid_width = 5,
 484	.parent_map = gcc_parent_map_0,
 485	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
 486	.clkr.hw.init = &(struct clk_init_data){
 487		.name = "blsp1_qup1_spi_apps_clk_src",
 488		.parent_data = gcc_parent_data_0,
 489		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 490		.ops = &clk_rcg2_ops,
 491	},
 492};
 493
 494static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
 495	.cmd_rcgr = 0x3000,
 496	.mnd_width = 0,
 497	.hid_width = 5,
 498	.parent_map = gcc_parent_map_0,
 499	.freq_tbl = ftbl_blsp1_qup0_i2c_apps_clk_src,
 500	.clkr.hw.init = &(struct clk_init_data){
 501		.name = "blsp1_qup2_i2c_apps_clk_src",
 502		.parent_data = gcc_parent_data_0,
 503		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 504		.ops = &clk_rcg2_ops,
 505	},
 506};
 507
 508static const struct freq_tbl ftbl_blsp1_qup2_spi_apps_clk_src[] = {
 509	F(960000,   P_XO, 10, 1, 2),
 510	F(4800000,  P_XO, 4, 0, 0),
 511	F(9600000,  P_XO, 2, 0, 0),
 512	F(15000000, P_GPLL0_OUT_MAIN, 1,  3, 160),
 513	F(16000000, P_GPLL0_OUT_MAIN, 10, 1, 5),
 514	F(19200000, P_XO, 1, 0, 0),
 515	F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2),
 516	F(30000000, P_GPLL0_OUT_MAIN, 1,  3, 80),
 517	{ }
 518};
 519
 520static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
 521	.cmd_rcgr = 0x3014,
 522	.mnd_width = 8,
 523	.hid_width = 5,
 524	.parent_map = gcc_parent_map_0,
 525	.freq_tbl = ftbl_blsp1_qup2_spi_apps_clk_src,
 526	.clkr.hw.init = &(struct clk_init_data){
 527		.name = "blsp1_qup2_spi_apps_clk_src",
 528		.parent_data = gcc_parent_data_0,
 529		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 530		.ops = &clk_rcg2_ops,
 531	},
 532};
 533
 534static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
 535	.cmd_rcgr = 0x4000,
 536	.mnd_width = 0,
 537	.hid_width = 5,
 538	.parent_map = gcc_parent_map_0,
 539	.freq_tbl = ftbl_blsp1_qup0_i2c_apps_clk_src,
 540	.clkr.hw.init = &(struct clk_init_data){
 541		.name = "blsp1_qup3_i2c_apps_clk_src",
 542		.parent_data = gcc_parent_data_0,
 543		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 544		.ops = &clk_rcg2_ops,
 545	},
 546};
 547
 548static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
 549	.cmd_rcgr = 0x4024,
 550	.mnd_width = 8,
 551	.hid_width = 5,
 552	.parent_map = gcc_parent_map_0,
 553	.freq_tbl = ftbl_blsp1_qup0_spi_apps_clk_src,
 554	.clkr.hw.init = &(struct clk_init_data){
 555		.name = "blsp1_qup3_spi_apps_clk_src",
 556		.parent_data = gcc_parent_data_0,
 557		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 558		.ops = &clk_rcg2_ops,
 559	},
 560};
 561
 562static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
 563	.cmd_rcgr = 0x5000,
 564	.mnd_width = 0,
 565	.hid_width = 5,
 566	.parent_map = gcc_parent_map_0,
 567	.freq_tbl = ftbl_blsp1_qup0_i2c_apps_clk_src,
 568	.clkr.hw.init = &(struct clk_init_data){
 569		.name = "blsp1_qup4_i2c_apps_clk_src",
 570		.parent_data = gcc_parent_data_0,
 571		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 572		.ops = &clk_rcg2_ops,
 573	},
 574};
 575
 576static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
 577	.cmd_rcgr = 0x5024,
 578	.mnd_width = 8,
 579	.hid_width = 5,
 580	.parent_map = gcc_parent_map_0,
 581	.freq_tbl = ftbl_blsp1_qup0_spi_apps_clk_src,
 582	.clkr.hw.init = &(struct clk_init_data){
 583		.name = "blsp1_qup4_spi_apps_clk_src",
 584		.parent_data = gcc_parent_data_0,
 585		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 586		.ops = &clk_rcg2_ops,
 587	},
 588};
 589
 590static const struct freq_tbl ftbl_blsp1_uart0_apps_clk_src[] = {
 591	F(3686400, P_GPLL0_OUT_MAIN, 1, 72, 15625),
 592	F(7372800, P_GPLL0_OUT_MAIN, 1, 144, 15625),
 593	F(14745600, P_GPLL0_OUT_MAIN, 1, 288, 15625),
 594	F(16000000, P_GPLL0_OUT_MAIN, 10, 1, 5),
 595	F(19200000, P_XO, 1, 0, 0),
 596	F(24000000, P_GPLL0_OUT_MAIN, 1, 3, 100),
 597	F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2),
 598	F(32000000, P_GPLL0_OUT_MAIN, 1, 1, 25),
 599	F(40000000, P_GPLL0_OUT_MAIN, 1, 1, 20),
 600	F(46400000, P_GPLL0_OUT_MAIN, 1, 29, 500),
 601	F(48000000, P_GPLL0_OUT_MAIN, 1, 3, 50),
 602	F(51200000, P_GPLL0_OUT_MAIN, 1, 8, 125),
 603	F(56000000, P_GPLL0_OUT_MAIN, 1, 7, 100),
 604	F(58982400, P_GPLL0_OUT_MAIN, 1, 1152, 15625),
 605	F(60000000, P_GPLL0_OUT_MAIN, 1, 3, 40),
 606	F(64000000, P_GPLL0_OUT_MAIN, 1, 2, 25),
 607	{ }
 608};
 609
 610static struct clk_rcg2 blsp1_uart0_apps_clk_src = {
 611	.cmd_rcgr = 0x600c,
 612	.mnd_width = 16,
 613	.hid_width = 5,
 614	.parent_map = gcc_parent_map_0,
 615	.freq_tbl = ftbl_blsp1_uart0_apps_clk_src,
 616	.clkr.hw.init = &(struct clk_init_data){
 617		.name = "blsp1_uart0_apps_clk_src",
 618		.parent_data = gcc_parent_data_0,
 619		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 620		.ops = &clk_rcg2_ops,
 621	},
 622};
 623
 624static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
 625	.cmd_rcgr = 0x2044,
 626	.mnd_width = 16,
 627	.hid_width = 5,
 628	.parent_map = gcc_parent_map_0,
 629	.freq_tbl = ftbl_blsp1_uart0_apps_clk_src,
 630	.clkr.hw.init = &(struct clk_init_data){
 631		.name = "blsp1_uart1_apps_clk_src",
 632		.parent_data = gcc_parent_data_0,
 633		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 634		.ops = &clk_rcg2_ops,
 635	},
 636};
 637
 638static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
 639	.cmd_rcgr = 0x3034,
 640	.mnd_width = 16,
 641	.hid_width = 5,
 642	.parent_map = gcc_parent_map_0,
 643	.freq_tbl = ftbl_blsp1_uart0_apps_clk_src,
 644	.clkr.hw.init = &(struct clk_init_data){
 645		.name = "blsp1_uart2_apps_clk_src",
 646		.parent_data = gcc_parent_data_0,
 647		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 648		.ops = &clk_rcg2_ops,
 649	},
 650};
 651
 652static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
 653	.cmd_rcgr = 0x4014,
 654	.mnd_width = 16,
 655	.hid_width = 5,
 656	.cfg_off = 0x20,
 657	.parent_map = gcc_parent_map_0,
 658	.freq_tbl = ftbl_blsp1_uart0_apps_clk_src,
 659	.clkr.hw.init = &(struct clk_init_data){
 660		.name = "blsp1_uart3_apps_clk_src",
 661		.parent_data = gcc_parent_data_0,
 662		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 663		.ops = &clk_rcg2_ops,
 664	},
 665};
 666
 667static struct clk_rcg2 blsp2_qup0_i2c_apps_clk_src = {
 668	.cmd_rcgr = 0xc00c,
 669	.mnd_width = 0,
 670	.hid_width = 5,
 671	.parent_map = gcc_parent_map_0,
 672	.freq_tbl = ftbl_blsp1_qup0_i2c_apps_clk_src,
 673	.clkr.hw.init = &(struct clk_init_data){
 674		.name = "blsp2_qup0_i2c_apps_clk_src",
 675		.parent_data = gcc_parent_data_0,
 676		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 677		.ops = &clk_rcg2_ops,
 678	},
 679};
 680
 681static struct clk_rcg2 blsp2_qup0_spi_apps_clk_src = {
 682	.cmd_rcgr = 0xc024,
 683	.mnd_width = 8,
 684	.hid_width = 5,
 685	.parent_map = gcc_parent_map_0,
 686	.freq_tbl = ftbl_blsp1_qup0_spi_apps_clk_src,
 687	.clkr.hw.init = &(struct clk_init_data){
 688		.name = "blsp2_qup0_spi_apps_clk_src",
 689		.parent_data = gcc_parent_data_0,
 690		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 691		.ops = &clk_rcg2_ops,
 692	},
 693};
 694
 695static struct clk_rcg2 blsp2_uart0_apps_clk_src = {
 696	.cmd_rcgr = 0xc044,
 697	.mnd_width = 16,
 698	.hid_width = 5,
 699	.parent_map = gcc_parent_map_0,
 700	.freq_tbl = ftbl_blsp1_uart0_apps_clk_src,
 701	.clkr.hw.init = &(struct clk_init_data){
 702		.name = "blsp2_uart0_apps_clk_src",
 703		.parent_data = gcc_parent_data_0,
 704		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 705		.ops = &clk_rcg2_ops,
 706	},
 707};
 708
 709static struct clk_rcg2 byte0_clk_src = {
 710	.cmd_rcgr = 0x4d044,
 711	.mnd_width = 0,
 712	.hid_width = 5,
 713	.parent_map = gcc_parent_map_5,
 714	.clkr.hw.init = &(struct clk_init_data){
 715		.name = "byte0_clk_src",
 716		.parent_data = gcc_parent_data_5,
 717		.num_parents = ARRAY_SIZE(gcc_parent_data_5),
 718		.flags = CLK_SET_RATE_PARENT,
 719		.ops = &clk_byte2_ops,
 720	},
 721};
 722
 723static const struct freq_tbl ftbl_emac_clk_src[] = {
 724	F(5000000,   P_GPLL1_OUT_MAIN, 2, 1, 50),
 725	F(50000000,  P_GPLL1_OUT_MAIN, 10, 0, 0),
 726	F(125000000, P_GPLL1_OUT_MAIN, 4, 0, 0),
 727	F(250000000, P_GPLL1_OUT_MAIN, 2, 0, 0),
 728	{ }
 729};
 730
 731static struct clk_rcg2 emac_clk_src = {
 732	.cmd_rcgr = 0x4e01c,
 733	.mnd_width = 8,
 734	.hid_width = 5,
 735	.parent_map = gcc_parent_map_4,
 736	.freq_tbl = ftbl_emac_clk_src,
 737	.clkr.hw.init = &(struct clk_init_data){
 738		.name = "emac_clk_src",
 739		.parent_data = gcc_parent_data_4,
 740		.num_parents = ARRAY_SIZE(gcc_parent_data_4),
 741		.ops = &clk_rcg2_ops,
 742	},
 743};
 744
 745static const struct freq_tbl ftbl_emac_ptp_clk_src[] = {
 746	F(50000000,  P_GPLL1_OUT_MAIN, 10, 0, 0),
 747	F(125000000, P_GPLL1_OUT_MAIN, 4, 0, 0),
 748	F(250000000, P_GPLL1_OUT_MAIN, 2, 0, 0),
 749	{ }
 750};
 751
 752static struct clk_rcg2 emac_ptp_clk_src = {
 753	.cmd_rcgr = 0x4e014,
 754	.mnd_width = 0,
 755	.hid_width = 5,
 756	.parent_map = gcc_parent_map_4,
 757	.freq_tbl = ftbl_emac_ptp_clk_src,
 758	.clkr.hw.init = &(struct clk_init_data){
 759		.name = "emac_ptp_clk_src",
 760		.parent_data = gcc_parent_data_4,
 761		.num_parents = ARRAY_SIZE(gcc_parent_data_4),
 762		.ops = &clk_rcg2_ops,
 763	},
 764};
 765
 766static const struct freq_tbl ftbl_esc0_clk_src[] = {
 767	F(19200000, P_XO, 1, 0, 0),
 768	{ }
 769};
 770
 771static struct clk_rcg2 esc0_clk_src = {
 772	.cmd_rcgr = 0x4d05c,
 773	.mnd_width = 0,
 774	.hid_width = 5,
 775	.parent_map = gcc_parent_map_6,
 776	.freq_tbl = ftbl_esc0_clk_src,
 777	.clkr.hw.init = &(struct clk_init_data){
 778		.name = "esc0_clk_src",
 779		.parent_data = gcc_parent_data_6,
 780		.num_parents = ARRAY_SIZE(gcc_parent_data_6),
 781		.ops = &clk_rcg2_ops,
 782	},
 783};
 784
 785static const struct freq_tbl ftbl_gfx3d_clk_src[] = {
 786	F(19200000,  P_XO, 1, 0, 0),
 787	F(50000000,  P_GPLL0_OUT_MAIN, 16, 0, 0),
 788	F(80000000,  P_GPLL0_OUT_MAIN, 10, 0, 0),
 789	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
 790	F(160000000, P_GPLL0_OUT_MAIN, 5, 0, 0),
 791	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
 792	F(228571429, P_GPLL0_OUT_MAIN, 3.5, 0, 0),
 793	F(240000000, P_GPLL6_OUT_AUX,  4.5, 0, 0),
 794	F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0),
 795	F(270000000, P_GPLL6_OUT_AUX,  4, 0, 0),
 796	F(320000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
 797	F(400000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
 798	F(484800000, P_GPLL3_OUT_MAIN, 1, 0, 0),
 799	F(523200000, P_GPLL3_OUT_MAIN, 1, 0, 0),
 800	F(550000000, P_GPLL3_OUT_MAIN, 1, 0, 0),
 801	F(598000000, P_GPLL3_OUT_MAIN, 1, 0, 0),
 802	{ }
 803};
 804
 805static struct clk_rcg2 gfx3d_clk_src = {
 806	.cmd_rcgr = 0x59000,
 807	.mnd_width = 0,
 808	.hid_width = 5,
 809	.parent_map = gcc_parent_map_7,
 810	.freq_tbl = ftbl_gfx3d_clk_src,
 811	.clkr.hw.init = &(struct clk_init_data){
 812		.name = "gfx3d_clk_src",
 813		.parent_data = gcc_parent_data_7,
 814		.num_parents = ARRAY_SIZE(gcc_parent_data_7),
 815		.ops = &clk_rcg2_ops,
 816	},
 817};
 818
 819static const struct freq_tbl ftbl_gp1_clk_src[] = {
 820	F(19200000, P_XO, 1, 0, 0),
 821	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
 822	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
 823	{ }
 824};
 825
 826static struct clk_rcg2 gp1_clk_src = {
 827	.cmd_rcgr = 0x8004,
 828	.mnd_width = 8,
 829	.hid_width = 5,
 830	.parent_map = gcc_parent_map_2,
 831	.freq_tbl = ftbl_gp1_clk_src,
 832	.clkr.hw.init = &(struct clk_init_data){
 833		.name = "gp1_clk_src",
 834		.parent_data = gcc_parent_data_2,
 835		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
 836		.ops = &clk_rcg2_ops,
 837	},
 838};
 839
 840static struct clk_rcg2 gp2_clk_src = {
 841	.cmd_rcgr = 0x9004,
 842	.mnd_width = 8,
 843	.hid_width = 5,
 844	.parent_map = gcc_parent_map_2,
 845	.freq_tbl = ftbl_gp1_clk_src,
 846	.clkr.hw.init = &(struct clk_init_data){
 847		.name = "gp2_clk_src",
 848		.parent_data = gcc_parent_data_2,
 849		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
 850		.ops = &clk_rcg2_ops,
 851	},
 852};
 853
 854static struct clk_rcg2 gp3_clk_src = {
 855	.cmd_rcgr = 0xa004,
 856	.mnd_width = 8,
 857	.hid_width = 5,
 858	.parent_map = gcc_parent_map_2,
 859	.freq_tbl = ftbl_gp1_clk_src,
 860	.clkr.hw.init = &(struct clk_init_data){
 861		.name = "gp3_clk_src",
 862		.parent_data = gcc_parent_data_2,
 863		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
 864		.ops = &clk_rcg2_ops,
 865	},
 866};
 867
 868static struct clk_rcg2 hdmi_app_clk_src = {
 869	.cmd_rcgr = 0x4d0e4,
 870	.mnd_width = 0,
 871	.hid_width = 5,
 872	.parent_map = gcc_parent_map_1,
 873	.freq_tbl = ftbl_esc0_clk_src,
 874	.clkr.hw.init = &(struct clk_init_data){
 875		.name = "hdmi_app_clk_src",
 876		.parent_data = gcc_parent_data_1,
 877		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
 878		.ops = &clk_rcg2_ops,
 879	},
 880};
 881
 882static struct clk_rcg2 hdmi_pclk_clk_src = {
 883	.cmd_rcgr = 0x4d0dc,
 884	.mnd_width = 0,
 885	.hid_width = 5,
 886	.parent_map = gcc_parent_map_8,
 887	.freq_tbl = ftbl_esc0_clk_src,
 888	.clkr.hw.init = &(struct clk_init_data){
 889		.name = "hdmi_pclk_clk_src",
 890		.parent_data = gcc_parent_data_8,
 891		.num_parents = ARRAY_SIZE(gcc_parent_data_8),
 892		.ops = &clk_rcg2_ops,
 893	},
 894};
 895
 896static const struct freq_tbl ftbl_mdp_clk_src[] = {
 897	F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
 898	F(80000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
 899	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
 900	F(145454545, P_GPLL0_OUT_MAIN, 5.5, 0, 0),
 901	F(160000000, P_GPLL0_OUT_MAIN, 5, 0, 0),
 902	F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
 903	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
 904	F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0),
 905	F(320000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
 906	{ }
 907};
 908
 909static struct clk_rcg2 mdp_clk_src = {
 910	.cmd_rcgr = 0x4d014,
 911	.mnd_width = 0,
 912	.hid_width = 5,
 913	.parent_map = gcc_parent_map_9,
 914	.freq_tbl = ftbl_mdp_clk_src,
 915	.clkr.hw.init = &(struct clk_init_data){
 916		.name = "mdp_clk_src",
 917		.parent_data = gcc_parent_data_9,
 918		.num_parents = ARRAY_SIZE(gcc_parent_data_9),
 919		.ops = &clk_rcg2_ops,
 920	},
 921};
 922
 923static const struct freq_tbl ftbl_pcie_0_aux_clk_src[] = {
 924	F(1200000, P_XO, 16, 0, 0),
 925	{ }
 926};
 927
 928static struct clk_rcg2 pcie_0_aux_clk_src = {
 929	.cmd_rcgr = 0x3e024,
 930	.mnd_width = 16,
 931	.hid_width = 5,
 932	.parent_map = gcc_parent_map_10,
 933	.freq_tbl = ftbl_pcie_0_aux_clk_src,
 934	.clkr.hw.init = &(struct clk_init_data){
 935		.name = "pcie_0_aux_clk_src",
 936		.parent_data = gcc_parent_data_10,
 937		.num_parents = ARRAY_SIZE(gcc_parent_data_10),
 938		.ops = &clk_rcg2_ops,
 939	},
 940};
 941
 942static const struct freq_tbl ftbl_pcie_0_pipe_clk_src[] = {
 943	F(19200000, P_XO, 1, 0, 0),
 944	F(125000000, P_PCIE_0_PIPE_CLK, 2, 0, 0),
 945	F(250000000, P_PCIE_0_PIPE_CLK, 1, 0, 0),
 946	{ }
 947};
 948
 949static struct clk_rcg2 pcie_0_pipe_clk_src = {
 950	.cmd_rcgr = 0x3e01c,
 951	.mnd_width = 0,
 952	.hid_width = 5,
 953	.parent_map = gcc_parent_map_11,
 954	.freq_tbl = ftbl_pcie_0_pipe_clk_src,
 955	.clkr.hw.init = &(struct clk_init_data){
 956		.name = "pcie_0_pipe_clk_src",
 957		.parent_data = gcc_parent_data_11,
 958		.num_parents = ARRAY_SIZE(gcc_parent_data_11),
 959		.ops = &clk_rcg2_ops,
 960	},
 961};
 962
 963static struct clk_rcg2 pclk0_clk_src = {
 964	.cmd_rcgr = 0x4d000,
 965	.mnd_width = 8,
 966	.hid_width = 5,
 967	.parent_map = gcc_parent_map_12,
 968	.clkr.hw.init = &(struct clk_init_data){
 969		.name = "pclk0_clk_src",
 970		.parent_data = gcc_parent_data_12,
 971		.num_parents = ARRAY_SIZE(gcc_parent_data_12),
 972		.flags = CLK_SET_RATE_PARENT,
 973		.ops = &clk_pixel_ops,
 974	},
 975};
 976
 977static const struct freq_tbl ftbl_pdm2_clk_src[] = {
 978	F(19200000, P_XO, 1, 0, 0),
 979	F(64000000, P_GPLL0_OUT_MAIN, 12.5, 0, 0),
 980	{ }
 981};
 982
 983static struct clk_rcg2 pdm2_clk_src = {
 984	.cmd_rcgr = 0x44010,
 985	.mnd_width = 0,
 986	.hid_width = 5,
 987	.parent_map = gcc_parent_map_0,
 988	.freq_tbl = ftbl_pdm2_clk_src,
 989	.clkr.hw.init = &(struct clk_init_data){
 990		.name = "pdm2_clk_src",
 991		.parent_data = gcc_parent_data_0,
 992		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
 993		.ops = &clk_rcg2_ops,
 994	},
 995};
 996
 997static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
 998	F(144000, P_XO, 16, 3, 25),
 999	F(400000, P_XO, 12, 1, 4),
1000	F(20000000, P_GPLL0_OUT_MAIN, 10, 1, 4),
1001	F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2),
1002	F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
1003	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
1004	F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
1005	F(192000000, P_GPLL4_OUT_MAIN, 6, 0, 0),
1006	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
1007	F(384000000, P_GPLL4_OUT_MAIN, 3, 0, 0),
1008	{ }
1009};
1010
1011static struct clk_rcg2 sdcc1_apps_clk_src = {
1012	.cmd_rcgr = 0x42004,
1013	.mnd_width = 8,
1014	.hid_width = 5,
1015	.parent_map = gcc_parent_map_13,
1016	.freq_tbl = ftbl_sdcc1_apps_clk_src,
1017	.clkr.hw.init = &(struct clk_init_data){
1018		.name = "sdcc1_apps_clk_src",
1019		.parent_data = gcc_parent_data_13,
1020		.num_parents = ARRAY_SIZE(gcc_parent_data_13),
1021		.ops = &clk_rcg2_floor_ops,
1022	},
1023};
1024
1025static const struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = {
1026	F(160000000, P_GPLL0_OUT_MAIN, 5, 0, 0),
1027	F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0),
1028	{ }
1029};
1030
1031static struct clk_rcg2 sdcc1_ice_core_clk_src = {
1032	.cmd_rcgr = 0x5d000,
1033	.mnd_width = 8,
1034	.hid_width = 5,
1035	.parent_map = gcc_parent_map_3,
1036	.freq_tbl = ftbl_sdcc1_ice_core_clk_src,
1037	.clkr.hw.init = &(struct clk_init_data){
1038		.name = "sdcc1_ice_core_clk_src",
1039		.parent_data = gcc_parent_data_3,
1040		.num_parents = ARRAY_SIZE(gcc_parent_data_3),
1041		.ops = &clk_rcg2_ops,
1042	},
1043};
1044
1045static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = {
1046	F(144000, P_XO, 16, 3, 25),
1047	F(400000, P_XO, 12, 1, 4),
1048	F(20000000, P_GPLL0_OUT_MAIN, 10, 1, 4),
1049	F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2),
1050	F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
1051	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
1052	F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
1053	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
1054	{ }
1055};
1056
1057static struct clk_rcg2 sdcc2_apps_clk_src = {
1058	.cmd_rcgr = 0x43004,
1059	.mnd_width = 8,
1060	.hid_width = 5,
1061	.parent_map = gcc_parent_map_14,
1062	.freq_tbl = ftbl_sdcc2_apps_clk_src,
1063	.clkr.hw.init = &(struct clk_init_data){
1064		.name = "sdcc2_apps_clk_src",
1065		.parent_data = gcc_parent_data_14,
1066		.num_parents = ARRAY_SIZE(gcc_parent_data_14),
1067		.ops = &clk_rcg2_floor_ops,
1068	},
1069};
1070
1071static struct clk_rcg2 usb20_mock_utmi_clk_src = {
1072	.cmd_rcgr = 0x41048,
1073	.mnd_width = 0,
1074	.hid_width = 5,
1075	.parent_map = gcc_parent_map_1,
1076	.freq_tbl = ftbl_esc0_clk_src,
1077	.clkr.hw.init = &(struct clk_init_data){
1078		.name = "usb20_mock_utmi_clk_src",
1079		.parent_data = gcc_parent_data_1,
1080		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1081		.ops = &clk_rcg2_ops,
1082	},
1083};
1084
1085static const struct freq_tbl ftbl_usb30_master_clk_src[] = {
1086	F(19200000, P_XO, 1, 0, 0),
1087	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
1088	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
1089	F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0),
1090	{ }
1091};
1092
1093static struct clk_rcg2 usb30_master_clk_src = {
1094	.cmd_rcgr = 0x39028,
1095	.mnd_width = 8,
1096	.hid_width = 5,
1097	.parent_map = gcc_parent_map_0,
1098	.freq_tbl = ftbl_usb30_master_clk_src,
1099	.clkr.hw.init = &(struct clk_init_data){
1100		.name = "usb30_master_clk_src",
1101		.parent_data = gcc_parent_data_0,
1102		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
1103		.ops = &clk_rcg2_ops,
1104	},
1105};
1106
1107static struct clk_rcg2 usb30_mock_utmi_clk_src = {
1108	.cmd_rcgr = 0x3901c,
1109	.mnd_width = 0,
1110	.hid_width = 5,
1111	.parent_map = gcc_parent_map_1,
1112	.freq_tbl = ftbl_esc0_clk_src,
1113	.clkr.hw.init = &(struct clk_init_data){
1114		.name = "usb30_mock_utmi_clk_src",
1115		.parent_data = gcc_parent_data_1,
1116		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1117		.ops = &clk_rcg2_ops,
1118	},
1119};
1120
1121static struct clk_rcg2 usb3_phy_aux_clk_src = {
1122	.cmd_rcgr = 0x3903c,
1123	.mnd_width = 0,
1124	.hid_width = 5,
1125	.parent_map = gcc_parent_map_1,
1126	.freq_tbl = ftbl_pcie_0_aux_clk_src,
1127	.clkr.hw.init = &(struct clk_init_data){
1128		.name = "usb3_phy_aux_clk_src",
1129		.parent_data = gcc_parent_data_1,
1130		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1131		.ops = &clk_rcg2_ops,
1132	},
1133};
1134
1135static const struct freq_tbl ftbl_usb_hs_system_clk_src[] = {
1136	F(19200000, P_XO, 1, 0, 0),
1137	F(80000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
1138	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
1139	F(133333333, P_GPLL0_OUT_MAIN, 6, 0, 0),
1140	F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
1141	{ }
1142};
1143
1144static struct clk_rcg2 usb_hs_system_clk_src = {
1145	.cmd_rcgr = 0x41010,
1146	.mnd_width = 0,
1147	.hid_width = 5,
1148	.parent_map = gcc_parent_map_3,
1149	.freq_tbl = ftbl_usb_hs_system_clk_src,
1150	.clkr.hw.init = &(struct clk_init_data){
1151		.name = "usb_hs_system_clk_src",
1152		.parent_data = gcc_parent_data_3,
1153		.num_parents = ARRAY_SIZE(gcc_parent_data_3),
1154		.ops = &clk_rcg2_ops,
1155	},
1156};
1157
1158static struct clk_rcg2 vsync_clk_src = {
1159	.cmd_rcgr = 0x4d02c,
1160	.mnd_width = 0,
1161	.hid_width = 5,
1162	.parent_map = gcc_parent_map_15,
1163	.freq_tbl = ftbl_esc0_clk_src,
1164	.clkr.hw.init = &(struct clk_init_data){
1165		.name = "vsync_clk_src",
1166		.parent_data = gcc_parent_data_15,
1167		.num_parents = ARRAY_SIZE(gcc_parent_data_15),
1168		.ops = &clk_rcg2_ops,
1169	},
1170};
1171
1172static const struct freq_tbl ftbl_cdsp_bimc_clk_src[] = {
1173	F(19200000, P_XO, 1, 0, 0),
1174	F(133333333, P_GPLL0_OUT_MAIN, 6, 0, 0),
1175	F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0),
1176	F(320000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
1177	{ }
1178};
1179
1180static struct clk_rcg2 cdsp_bimc_clk_src = {
1181	.cmd_rcgr = 0x5e010,
1182	.mnd_width = 0,
1183	.hid_width = 5,
1184	.parent_map = gcc_parent_map_16,
1185	.freq_tbl = ftbl_cdsp_bimc_clk_src,
1186	.clkr.hw.init = &(struct clk_init_data) {
1187		.name = "cdsp_bimc_clk_src",
1188		.parent_data = gcc_parent_data_16,
1189		.num_parents = ARRAY_SIZE(gcc_parent_data_16),
1190		.ops = &clk_rcg2_ops,
1191	},
1192};
1193
1194static struct clk_branch gcc_apss_ahb_clk = {
1195	.halt_reg = 0x4601c,
1196	.halt_check = BRANCH_HALT_VOTED,
1197	.clkr = {
1198		.enable_reg = 0x45004,
1199		.enable_mask = BIT(14),
1200		.hw.init = &(struct clk_init_data){
1201			.name = "gcc_apss_ahb_clk",
1202			.parent_hws = (const struct clk_hw*[]) {
1203				&apss_ahb_clk_src.clkr.hw,
1204			},
1205			.num_parents = 1,
1206			.flags = CLK_SET_RATE_PARENT,
1207			.ops = &clk_branch2_ops,
1208		},
1209	},
1210};
1211
1212static struct clk_branch gcc_apss_tcu_clk = {
1213	.halt_reg = 0x5b004,
1214	.halt_check = BRANCH_VOTED,
1215	.clkr = {
1216		.enable_reg = 0x4500c,
1217		.enable_mask = BIT(1),
1218		.hw.init = &(struct clk_init_data){
1219			.name = "gcc_apss_tcu_clk",
1220			.ops = &clk_branch2_ops,
1221		},
1222	},
1223};
1224
1225static struct clk_branch gcc_bimc_gfx_clk = {
1226	.halt_reg = 0x59034,
1227	.halt_check = BRANCH_HALT,
1228	.clkr = {
1229		.enable_reg = 0x59034,
1230		.enable_mask = BIT(0),
1231		.hw.init = &(struct clk_init_data){
1232			.name = "gcc_bimc_gfx_clk",
1233			.ops = &clk_branch2_ops,
1234			.parent_hws = (const struct clk_hw*[]) {
1235				&gcc_apss_tcu_clk.clkr.hw,
1236			},
1237
1238		},
1239	},
1240};
1241
1242static struct clk_branch gcc_bimc_gpu_clk = {
1243	.halt_reg = 0x59030,
1244	.halt_check = BRANCH_HALT,
1245	.clkr = {
1246		.enable_reg = 0x59030,
1247		.enable_mask = BIT(0),
1248		.hw.init = &(struct clk_init_data){
1249			.name = "gcc_bimc_gpu_clk",
1250			.ops = &clk_branch2_ops,
1251		},
1252	},
1253};
1254
1255static struct clk_branch gcc_bimc_cdsp_clk = {
1256	.halt_reg = 0x31030,
1257	.halt_check = BRANCH_HALT,
1258	.clkr = {
1259		.enable_reg = 0x31030,
1260		.enable_mask = BIT(0),
1261		.hw.init = &(struct clk_init_data) {
1262			.name = "gcc_bimc_cdsp_clk",
1263			.parent_hws = (const struct clk_hw*[]) {
1264				&cdsp_bimc_clk_src.clkr.hw
1265			},
1266			.num_parents = 1,
1267			.flags = CLK_SET_RATE_PARENT,
1268			.ops = &clk_branch2_ops,
1269		},
1270	},
1271};
1272
1273static struct clk_branch gcc_bimc_mdss_clk = {
1274	.halt_reg = 0x31038,
1275	.halt_check = BRANCH_HALT,
1276	.clkr = {
1277		.enable_reg = 0x31038,
1278		.enable_mask = BIT(0),
1279		.hw.init = &(struct clk_init_data){
1280			.name = "gcc_bimc_mdss_clk",
1281			.ops = &clk_branch2_ops,
1282		},
1283	},
1284};
1285
1286static struct clk_branch gcc_blsp1_ahb_clk = {
1287	.halt_reg = 0x1008,
1288	.halt_check = BRANCH_HALT_VOTED,
1289	.clkr = {
1290		.enable_reg = 0x45004,
1291		.enable_mask = BIT(10),
1292		.hw.init = &(struct clk_init_data){
1293			.name = "gcc_blsp1_ahb_clk",
1294			.ops = &clk_branch2_ops,
1295		},
1296	},
1297};
1298
1299static struct clk_branch gcc_dcc_clk = {
1300	.halt_reg = 0x77004,
1301	.halt_check = BRANCH_HALT,
1302	.clkr = {
1303		.enable_reg = 0x77004,
1304		.enable_mask = BIT(0),
1305		.hw.init = &(struct clk_init_data){
1306			.name = "gcc_dcc_clk",
1307			.ops = &clk_branch2_ops,
1308		},
1309	},
1310};
1311
1312static struct clk_branch gcc_dcc_xo_clk = {
1313	.halt_reg = 0x77008,
1314	.halt_check = BRANCH_HALT,
1315	.clkr = {
1316		.enable_reg = 0x77008,
1317		.enable_mask = BIT(0),
1318		.hw.init = &(struct clk_init_data){
1319			.name = "gcc_dcc_xo_clk",
1320			.ops = &clk_branch2_ops,
1321		},
1322	},
1323};
1324
1325static struct clk_branch gcc_blsp1_qup0_i2c_apps_clk = {
1326	.halt_reg = 0x6028,
1327	.halt_check = BRANCH_HALT,
1328	.clkr = {
1329		.enable_reg = 0x6028,
1330		.enable_mask = BIT(0),
1331		.hw.init = &(struct clk_init_data){
1332			.name = "gcc_blsp1_qup0_i2c_apps_clk",
1333			.parent_hws = (const struct clk_hw*[]) {
1334				&blsp1_qup0_i2c_apps_clk_src.clkr.hw,
1335			},
1336			.num_parents = 1,
1337			.flags = CLK_SET_RATE_PARENT,
1338			.ops = &clk_branch2_ops,
1339		},
1340	},
1341};
1342
1343static struct clk_branch gcc_blsp1_qup0_spi_apps_clk = {
1344	.halt_reg = 0x6024,
1345	.halt_check = BRANCH_HALT,
1346	.clkr = {
1347		.enable_reg = 0x6024,
1348		.enable_mask = BIT(0),
1349		.hw.init = &(struct clk_init_data){
1350			.name = "gcc_blsp1_qup0_spi_apps_clk",
1351			.parent_hws = (const struct clk_hw*[]) {
1352				&blsp1_qup0_spi_apps_clk_src.clkr.hw,
1353			},
1354			.num_parents = 1,
1355			.flags = CLK_SET_RATE_PARENT,
1356			.ops = &clk_branch2_ops,
1357		},
1358	},
1359};
1360
1361static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1362	.halt_reg = 0x2008,
1363	.halt_check = BRANCH_HALT,
1364	.clkr = {
1365		.enable_reg = 0x2008,
1366		.enable_mask = BIT(0),
1367		.hw.init = &(struct clk_init_data){
1368			.name = "gcc_blsp1_qup1_i2c_apps_clk",
1369			.parent_hws = (const struct clk_hw*[]) {
1370				&blsp1_qup1_i2c_apps_clk_src.clkr.hw,
1371			},
1372			.num_parents = 1,
1373			.flags = CLK_SET_RATE_PARENT,
1374			.ops = &clk_branch2_ops,
1375		},
1376	},
1377};
1378
1379static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1380	.halt_reg = 0x2004,
1381	.halt_check = BRANCH_HALT,
1382	.clkr = {
1383		.enable_reg = 0x2004,
1384		.enable_mask = BIT(0),
1385		.hw.init = &(struct clk_init_data){
1386			.name = "gcc_blsp1_qup1_spi_apps_clk",
1387			.parent_hws = (const struct clk_hw*[]) {
1388				&blsp1_qup1_spi_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_qup2_i2c_apps_clk = {
1398	.halt_reg = 0x3010,
1399	.halt_check = BRANCH_HALT,
1400	.clkr = {
1401		.enable_reg = 0x3010,
1402		.enable_mask = BIT(0),
1403		.hw.init = &(struct clk_init_data){
1404			.name = "gcc_blsp1_qup2_i2c_apps_clk",
1405			.parent_hws = (const struct clk_hw*[]) {
1406				&blsp1_qup2_i2c_apps_clk_src.clkr.hw,
1407			},
1408			.num_parents = 1,
1409			.flags = CLK_SET_RATE_PARENT,
1410			.ops = &clk_branch2_ops,
1411		},
1412	},
1413};
1414
1415static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1416	.halt_reg = 0x300c,
1417	.halt_check = BRANCH_HALT,
1418	.clkr = {
1419		.enable_reg = 0x300c,
1420		.enable_mask = BIT(0),
1421		.hw.init = &(struct clk_init_data){
1422			.name = "gcc_blsp1_qup2_spi_apps_clk",
1423			.parent_hws = (const struct clk_hw*[]) {
1424				&blsp1_qup2_spi_apps_clk_src.clkr.hw,
1425			},
1426			.num_parents = 1,
1427			.flags = CLK_SET_RATE_PARENT,
1428			.ops = &clk_branch2_ops,
1429		},
1430	},
1431};
1432
1433static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1434	.halt_reg = 0x4020,
1435	.halt_check = BRANCH_HALT,
1436	.clkr = {
1437		.enable_reg = 0x4020,
1438		.enable_mask = BIT(0),
1439		.hw.init = &(struct clk_init_data){
1440			.name = "gcc_blsp1_qup3_i2c_apps_clk",
1441			.parent_hws = (const struct clk_hw*[]) {
1442				&blsp1_qup3_i2c_apps_clk_src.clkr.hw,
1443			},
1444			.num_parents = 1,
1445			.flags = CLK_SET_RATE_PARENT,
1446			.ops = &clk_branch2_ops,
1447		},
1448	},
1449};
1450
1451static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1452	.halt_reg = 0x401c,
1453	.halt_check = BRANCH_HALT,
1454	.clkr = {
1455		.enable_reg = 0x401c,
1456		.enable_mask = BIT(0),
1457		.hw.init = &(struct clk_init_data){
1458			.name = "gcc_blsp1_qup3_spi_apps_clk",
1459			.parent_hws = (const struct clk_hw*[]) {
1460				&blsp1_qup3_spi_apps_clk_src.clkr.hw,
1461			},
1462			.num_parents = 1,
1463			.flags = CLK_SET_RATE_PARENT,
1464			.ops = &clk_branch2_ops,
1465		},
1466	},
1467};
1468
1469static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1470	.halt_reg = 0x5020,
1471	.halt_check = BRANCH_HALT,
1472	.clkr = {
1473		.enable_reg = 0x5020,
1474		.enable_mask = BIT(0),
1475		.hw.init = &(struct clk_init_data){
1476			.name = "gcc_blsp1_qup4_i2c_apps_clk",
1477			.parent_hws = (const struct clk_hw*[]) {
1478				&blsp1_qup4_i2c_apps_clk_src.clkr.hw,
1479			},
1480			.num_parents = 1,
1481			.flags = CLK_SET_RATE_PARENT,
1482			.ops = &clk_branch2_ops,
1483		},
1484	},
1485};
1486
1487static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1488	.halt_reg = 0x501c,
1489	.halt_check = BRANCH_HALT,
1490	.clkr = {
1491		.enable_reg = 0x501c,
1492		.enable_mask = BIT(0),
1493		.hw.init = &(struct clk_init_data){
1494			.name = "gcc_blsp1_qup4_spi_apps_clk",
1495			.parent_hws = (const struct clk_hw*[]) {
1496				&blsp1_qup4_spi_apps_clk_src.clkr.hw,
1497			},
1498			.num_parents = 1,
1499			.flags = CLK_SET_RATE_PARENT,
1500			.ops = &clk_branch2_ops,
1501		},
1502	},
1503};
1504
1505static struct clk_branch gcc_blsp1_uart0_apps_clk = {
1506	.halt_reg = 0x6004,
1507	.halt_check = BRANCH_HALT,
1508	.clkr = {
1509		.enable_reg = 0x6004,
1510		.enable_mask = BIT(0),
1511		.hw.init = &(struct clk_init_data){
1512			.name = "gcc_blsp1_uart0_apps_clk",
1513			.parent_hws = (const struct clk_hw*[]) {
1514				&blsp1_uart0_apps_clk_src.clkr.hw,
1515			},
1516			.num_parents = 1,
1517			.flags = CLK_SET_RATE_PARENT,
1518			.ops = &clk_branch2_ops,
1519		},
1520	},
1521};
1522
1523static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1524	.halt_reg = 0x203c,
1525	.halt_check = BRANCH_HALT,
1526	.clkr = {
1527		.enable_reg = 0x203c,
1528		.enable_mask = BIT(0),
1529		.hw.init = &(struct clk_init_data){
1530			.name = "gcc_blsp1_uart1_apps_clk",
1531			.parent_hws = (const struct clk_hw*[]) {
1532				&blsp1_uart1_apps_clk_src.clkr.hw,
1533			},
1534			.num_parents = 1,
1535			.flags = CLK_SET_RATE_PARENT,
1536			.ops = &clk_branch2_ops,
1537		},
1538	},
1539};
1540
1541static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1542	.halt_reg = 0x302c,
1543	.halt_check = BRANCH_HALT,
1544	.clkr = {
1545		.enable_reg = 0x302c,
1546		.enable_mask = BIT(0),
1547		.hw.init = &(struct clk_init_data){
1548			.name = "gcc_blsp1_uart2_apps_clk",
1549			.parent_hws = (const struct clk_hw*[]) {
1550				&blsp1_uart2_apps_clk_src.clkr.hw,
1551			},
1552			.num_parents = 1,
1553			.flags = CLK_SET_RATE_PARENT,
1554			.ops = &clk_branch2_ops,
1555		},
1556	},
1557};
1558
1559static struct clk_branch gcc_blsp1_uart3_apps_clk = {
1560	.halt_reg = 0x400c,
1561	.halt_check = BRANCH_HALT,
1562	.clkr = {
1563		.enable_reg = 0x400c,
1564		.enable_mask = BIT(0),
1565		.hw.init = &(struct clk_init_data){
1566			.name = "gcc_blsp1_uart3_apps_clk",
1567			.parent_hws = (const struct clk_hw*[]) {
1568				&blsp1_uart3_apps_clk_src.clkr.hw,
1569			},
1570			.num_parents = 1,
1571			.flags = CLK_SET_RATE_PARENT,
1572			.ops = &clk_branch2_ops,
1573		},
1574	},
1575};
1576
1577static struct clk_branch gcc_blsp2_ahb_clk = {
1578	.halt_reg = 0xb008,
1579	.halt_check = BRANCH_HALT_VOTED,
1580	.clkr = {
1581		.enable_reg = 0x45004,
1582		.enable_mask = BIT(20),
1583		.hw.init = &(struct clk_init_data){
1584			.name = "gcc_blsp2_ahb_clk",
1585			.ops = &clk_branch2_ops,
1586		},
1587	},
1588};
1589
1590static struct clk_branch gcc_blsp2_qup0_i2c_apps_clk = {
1591	.halt_reg = 0xc008,
1592	.halt_check = BRANCH_HALT,
1593	.clkr = {
1594		.enable_reg = 0xc008,
1595		.enable_mask = BIT(0),
1596		.hw.init = &(struct clk_init_data){
1597			.name = "gcc_blsp2_qup0_i2c_apps_clk",
1598			.parent_hws = (const struct clk_hw*[]) {
1599				&blsp2_qup0_i2c_apps_clk_src.clkr.hw,
1600			},
1601			.num_parents = 1,
1602			.flags = CLK_SET_RATE_PARENT,
1603			.ops = &clk_branch2_ops,
1604		},
1605	},
1606};
1607
1608static struct clk_branch gcc_blsp2_qup0_spi_apps_clk = {
1609	.halt_reg = 0xc004,
1610	.halt_check = BRANCH_HALT,
1611	.clkr = {
1612		.enable_reg = 0xc004,
1613		.enable_mask = BIT(0),
1614		.hw.init = &(struct clk_init_data){
1615			.name = "gcc_blsp2_qup0_spi_apps_clk",
1616			.parent_hws = (const struct clk_hw*[]) {
1617				&blsp2_qup0_spi_apps_clk_src.clkr.hw,
1618			},
1619			.num_parents = 1,
1620			.flags = CLK_SET_RATE_PARENT,
1621			.ops = &clk_branch2_ops,
1622		},
1623	},
1624};
1625
1626static struct clk_branch gcc_blsp2_uart0_apps_clk = {
1627	.halt_reg = 0xc03c,
1628	.halt_check = BRANCH_HALT,
1629	.clkr = {
1630		.enable_reg = 0xc03c,
1631		.enable_mask = BIT(0),
1632		.hw.init = &(struct clk_init_data){
1633			.name = "gcc_blsp2_uart0_apps_clk",
1634			.parent_hws = (const struct clk_hw*[]) {
1635				&blsp2_uart0_apps_clk_src.clkr.hw,
1636			},
1637			.num_parents = 1,
1638			.flags = CLK_SET_RATE_PARENT,
1639			.ops = &clk_branch2_ops,
1640		},
1641	},
1642};
1643
1644static struct clk_branch gcc_boot_rom_ahb_clk = {
1645	.halt_reg = 0x1300c,
1646	.halt_check = BRANCH_HALT_VOTED,
1647	.clkr = {
1648		.enable_reg = 0x45004,
1649		.enable_mask = BIT(7),
1650		.hw.init = &(struct clk_init_data){
1651			.name = "gcc_boot_rom_ahb_clk",
1652			.ops = &clk_branch2_ops,
1653		},
1654	},
1655};
1656
1657static struct clk_branch gcc_crypto_ahb_clk = {
1658	.halt_reg = 0x16024,
1659	.halt_check = BRANCH_VOTED,
1660	.clkr = {
1661		.enable_reg = 0x45004,
1662		.enable_mask = BIT(0),
1663		.hw.init = &(struct clk_init_data){
1664			.name = "gcc_crypto_ahb_clk",
1665			.ops = &clk_branch2_ops,
1666		},
1667	},
1668};
1669
1670static struct clk_branch gcc_crypto_axi_clk = {
1671	.halt_reg = 0x16020,
1672	.halt_check = BRANCH_VOTED,
1673	.clkr = {
1674		.enable_reg = 0x45004,
1675		.enable_mask = BIT(1),
1676		.hw.init = &(struct clk_init_data){
1677			.name = "gcc_crypto_axi_clk",
1678			.ops = &clk_branch2_ops,
1679		},
1680	},
1681};
1682
1683static struct clk_branch gcc_crypto_clk = {
1684	.halt_reg = 0x1601c,
1685	.halt_check = BRANCH_VOTED,
1686	.clkr = {
1687		.enable_reg = 0x45004,
1688		.enable_mask = BIT(2),
1689		.hw.init = &(struct clk_init_data){
1690			.name = "gcc_crypto_clk",
1691			.ops = &clk_branch2_ops,
1692		},
1693	},
1694};
1695
1696static struct clk_branch gcc_eth_axi_clk = {
1697	.halt_reg = 0x4e010,
1698	.halt_check = BRANCH_HALT,
1699	.clkr = {
1700		.enable_reg = 0x4e010,
1701		.enable_mask = BIT(0),
1702		.hw.init = &(struct clk_init_data){
1703			.name = "gcc_eth_axi_clk",
1704			.ops = &clk_branch2_ops,
1705		},
1706	},
1707};
1708
1709static struct clk_branch gcc_eth_ptp_clk = {
1710	.halt_reg = 0x4e004,
1711	.halt_check = BRANCH_HALT,
1712	.clkr = {
1713		.enable_reg = 0x4e004,
1714		.enable_mask = BIT(0),
1715		.hw.init = &(struct clk_init_data){
1716			.name = "gcc_eth_ptp_clk",
1717			.parent_hws = (const struct clk_hw*[]) {
1718				&emac_ptp_clk_src.clkr.hw,
1719			},
1720			.num_parents = 1,
1721			.flags = CLK_SET_RATE_PARENT,
1722			.ops = &clk_branch2_ops,
1723		},
1724	},
1725};
1726
1727static struct clk_branch gcc_eth_rgmii_clk = {
1728	.halt_reg = 0x4e008,
1729	.halt_check = BRANCH_HALT,
1730	.clkr = {
1731		.enable_reg = 0x4e008,
1732		.enable_mask = BIT(0),
1733		.hw.init = &(struct clk_init_data){
1734			.name = "gcc_eth_rgmii_clk",
1735			.parent_hws = (const struct clk_hw*[]) {
1736				&emac_clk_src.clkr.hw,
1737			},
1738			.num_parents = 1,
1739			.flags = CLK_SET_RATE_PARENT,
1740			.ops = &clk_branch2_ops,
1741		},
1742	},
1743};
1744
1745static struct clk_branch gcc_eth_slave_ahb_clk = {
1746	.halt_reg = 0x4e00c,
1747	.halt_check = BRANCH_HALT,
1748	.clkr = {
1749		.enable_reg = 0x4e00c,
1750		.enable_mask = BIT(0),
1751		.hw.init = &(struct clk_init_data){
1752			.name = "gcc_eth_slave_ahb_clk",
1753			.ops = &clk_branch2_ops,
1754		},
1755	},
1756};
1757
1758static struct clk_branch gcc_geni_ir_s_clk = {
1759	.halt_reg = 0xf008,
1760	.halt_check = BRANCH_HALT,
1761	.clkr = {
1762		.enable_reg = 0xf008,
1763		.enable_mask = BIT(0),
1764		.hw.init = &(struct clk_init_data){
1765			.name = "gcc_geni_ir_s_clk",
1766			.ops = &clk_branch2_ops,
1767		},
1768	},
1769};
1770
1771static struct clk_branch gcc_geni_ir_h_clk = {
1772	.halt_reg = 0xf004,
1773	.halt_check = BRANCH_HALT,
1774	.clkr = {
1775		.enable_reg = 0xf004,
1776		.enable_mask = BIT(0),
1777		.hw.init = &(struct clk_init_data){
1778			.name = "gcc_geni_ir_h_clk",
1779			.ops = &clk_branch2_ops,
1780		},
1781	},
1782};
1783
1784static struct clk_branch gcc_gfx_tcu_clk = {
1785	.halt_reg = 0x12020,
1786	.halt_check = BRANCH_VOTED,
1787	.clkr = {
1788		.enable_reg = 0x4500C,
1789		.enable_mask = BIT(2),
1790		.hw.init = &(struct clk_init_data){
1791			.name = "gcc_gfx_tcu_clk",
1792			.ops = &clk_branch2_ops,
1793		},
1794	},
1795};
1796
1797static struct clk_branch gcc_gfx_tbu_clk = {
1798	.halt_reg = 0x12010,
1799	.halt_check = BRANCH_VOTED,
1800	.clkr = {
1801		.enable_reg = 0x4500C,
1802		.enable_mask = BIT(3),
1803		.hw.init = &(struct clk_init_data){
1804			.name = "gcc_gfx_tbu_clk",
1805			.ops = &clk_branch2_ops,
1806		},
1807	},
1808};
1809
1810static struct clk_branch gcc_cdsp_tbu_clk = {
1811	.halt_reg = 0x1203c,
1812	.halt_check = BRANCH_VOTED,
1813	.clkr = {
1814		.enable_reg = 0x13020,
1815		.enable_mask = BIT(9),
1816		.hw.init = &(struct clk_init_data) {
1817			.name = "gcc_cdsp_tbu_clk",
1818			.parent_hws = (const struct clk_hw*[]) {
1819				&cdsp_bimc_clk_src.clkr.hw
1820			},
1821			.num_parents = 1,
1822			.flags = CLK_SET_RATE_PARENT,
1823			.ops = &clk_branch2_ops,
1824		},
1825	},
1826};
1827
1828static struct clk_branch gcc_gp1_clk = {
1829	.halt_reg = 0x8000,
1830	.halt_check = BRANCH_HALT,
1831	.clkr = {
1832		.enable_reg = 0x8000,
1833		.enable_mask = BIT(0),
1834		.hw.init = &(struct clk_init_data){
1835			.name = "gcc_gp1_clk",
1836			.parent_hws = (const struct clk_hw*[]) {
1837				&gp1_clk_src.clkr.hw,
1838			},
1839			.num_parents = 1,
1840			.flags = CLK_SET_RATE_PARENT,
1841			.ops = &clk_branch2_ops,
1842		},
1843	},
1844};
1845
1846static struct clk_branch gcc_gp2_clk = {
1847	.halt_reg = 0x9000,
1848	.halt_check = BRANCH_HALT,
1849	.clkr = {
1850		.enable_reg = 0x9000,
1851		.enable_mask = BIT(0),
1852		.hw.init = &(struct clk_init_data){
1853			.name = "gcc_gp2_clk",
1854			.parent_hws = (const struct clk_hw*[]) {
1855				&gp2_clk_src.clkr.hw,
1856			},
1857			.num_parents = 1,
1858			.flags = CLK_SET_RATE_PARENT,
1859			.ops = &clk_branch2_ops,
1860		},
1861	},
1862};
1863
1864static struct clk_branch gcc_gp3_clk = {
1865	.halt_reg = 0xa000,
1866	.halt_check = BRANCH_HALT,
1867	.clkr = {
1868		.enable_reg = 0xa000,
1869		.enable_mask = BIT(0),
1870		.hw.init = &(struct clk_init_data){
1871			.name = "gcc_gp3_clk",
1872			.parent_hws = (const struct clk_hw*[]) {
1873				&gp3_clk_src.clkr.hw,
1874			},
1875			.num_parents = 1,
1876			.flags = CLK_SET_RATE_PARENT,
1877			.ops = &clk_branch2_ops,
1878		},
1879	},
1880};
1881
1882static struct clk_branch gcc_gtcu_ahb_clk = {
1883	.halt_reg = 0x12044,
1884	.halt_check = BRANCH_VOTED,
1885	.clkr = {
1886		.enable_reg = 0x4500c,
1887		.enable_mask = BIT(13),
1888		.hw.init = &(struct clk_init_data){
1889			.name = "gcc_gtcu_ahb_clk",
1890			.ops = &clk_branch2_ops,
1891		},
1892	},
1893};
1894
1895static struct clk_branch gcc_mdp_tbu_clk = {
1896	.halt_reg = 0x1201c,
1897	.halt_check = BRANCH_VOTED,
1898	.clkr = {
1899		.enable_reg = 0x4500c,
1900		.enable_mask = BIT(4),
1901		.hw.init = &(struct clk_init_data){
1902			.name = "gcc_mdp_tbu_clk",
1903			.ops = &clk_branch2_ops,
1904		},
1905	},
1906};
1907
1908static struct clk_branch gcc_mdss_ahb_clk = {
1909	.halt_reg = 0x4d07c,
1910	.halt_check = BRANCH_HALT,
1911	.clkr = {
1912		.enable_reg = 0x4d07c,
1913		.enable_mask = BIT(0),
1914		.hw.init = &(struct clk_init_data){
1915			.name = "gcc_mdss_ahb_clk",
1916			.ops = &clk_branch2_ops,
1917		},
1918	},
1919};
1920
1921static struct clk_branch gcc_mdss_axi_clk = {
1922	.halt_reg = 0x4d080,
1923	.halt_check = BRANCH_HALT,
1924	.clkr = {
1925		.enable_reg = 0x4d080,
1926		.enable_mask = BIT(0),
1927		.hw.init = &(struct clk_init_data){
1928			.name = "gcc_mdss_axi_clk",
1929			.ops = &clk_branch2_ops,
1930		},
1931	},
1932};
1933
1934static struct clk_branch gcc_mdss_byte0_clk = {
1935	.halt_reg = 0x4d094,
1936	.halt_check = BRANCH_HALT,
1937	.clkr = {
1938		.enable_reg = 0x4d094,
1939		.enable_mask = BIT(0),
1940		.hw.init = &(struct clk_init_data){
1941			.name = "gcc_mdss_byte0_clk",
1942			.parent_hws = (const struct clk_hw*[]) {
1943				&byte0_clk_src.clkr.hw,
1944			},
1945			.num_parents = 1,
1946			.flags = CLK_SET_RATE_PARENT,
1947			.ops = &clk_branch2_ops,
1948		},
1949	},
1950};
1951
1952static struct clk_branch gcc_mdss_esc0_clk = {
1953	.halt_reg = 0x4d098,
1954	.halt_check = BRANCH_HALT,
1955	.clkr = {
1956		.enable_reg = 0x4d098,
1957		.enable_mask = BIT(0),
1958		.hw.init = &(struct clk_init_data){
1959			.name = "gcc_mdss_esc0_clk",
1960			.parent_hws = (const struct clk_hw*[]) {
1961				&esc0_clk_src.clkr.hw,
1962			},
1963			.num_parents = 1,
1964			.flags = CLK_SET_RATE_PARENT,
1965			.ops = &clk_branch2_ops,
1966		},
1967	},
1968};
1969
1970static struct clk_branch gcc_mdss_hdmi_app_clk = {
1971	.halt_reg = 0x4d0d8,
1972	.halt_check = BRANCH_HALT,
1973	.clkr = {
1974		.enable_reg = 0x4d0d8,
1975		.enable_mask = BIT(0),
1976		.hw.init = &(struct clk_init_data){
1977			.name = "gcc_mdss_hdmi_app_clk",
1978			.parent_hws = (const struct clk_hw*[]) {
1979				&hdmi_app_clk_src.clkr.hw,
1980			},
1981			.num_parents = 1,
1982			.flags = CLK_SET_RATE_PARENT,
1983			.ops = &clk_branch2_ops,
1984		},
1985	},
1986};
1987
1988static struct clk_branch gcc_mdss_hdmi_pclk_clk = {
1989	.halt_reg = 0x4d0d4,
1990	.halt_check = BRANCH_HALT,
1991	.clkr = {
1992		.enable_reg = 0x4d0d4,
1993		.enable_mask = BIT(0),
1994		.hw.init = &(struct clk_init_data){
1995			.name = "gcc_mdss_hdmi_pclk_clk",
1996			.parent_hws = (const struct clk_hw*[]) {
1997				&hdmi_pclk_clk_src.clkr.hw,
1998			},
1999			.num_parents = 1,
2000			.flags = CLK_SET_RATE_PARENT,
2001			.ops = &clk_branch2_ops,
2002		},
2003	},
2004};
2005
2006static struct clk_branch gcc_mdss_mdp_clk = {
2007	.halt_reg = 0x4d088,
2008	.halt_check = BRANCH_HALT,
2009	.clkr = {
2010		.enable_reg = 0x4d088,
2011		.enable_mask = BIT(0),
2012		.hw.init = &(struct clk_init_data){
2013			.name = "gcc_mdss_mdp_clk",
2014			.parent_hws = (const struct clk_hw*[]) {
2015				&mdp_clk_src.clkr.hw,
2016			},
2017			.num_parents = 1,
2018			.flags = CLK_SET_RATE_PARENT,
2019			.ops = &clk_branch2_ops,
2020		},
2021	},
2022};
2023
2024static struct clk_branch gcc_mdss_pclk0_clk = {
2025	.halt_reg = 0x4d084,
2026	.halt_check = BRANCH_HALT,
2027	.clkr = {
2028		.enable_reg = 0x4d084,
2029		.enable_mask = BIT(0),
2030		.hw.init = &(struct clk_init_data){
2031			.name = "gcc_mdss_pclk0_clk",
2032			.parent_hws = (const struct clk_hw*[]) {
2033				&pclk0_clk_src.clkr.hw,
2034			},
2035			.num_parents = 1,
2036			.flags = CLK_SET_RATE_PARENT,
2037			.ops = &clk_branch2_ops,
2038		},
2039	},
2040};
2041
2042static struct clk_branch gcc_mdss_vsync_clk = {
2043	.halt_reg = 0x4d090,
2044	.halt_check = BRANCH_HALT,
2045	.clkr = {
2046		.enable_reg = 0x4d090,
2047		.enable_mask = BIT(0),
2048		.hw.init = &(struct clk_init_data){
2049			.name = "gcc_mdss_vsync_clk",
2050			.parent_hws = (const struct clk_hw*[]) {
2051				&vsync_clk_src.clkr.hw,
2052			},
2053			.num_parents = 1,
2054			.flags = CLK_SET_RATE_PARENT,
2055			.ops = &clk_branch2_ops,
2056		},
2057	},
2058};
2059
2060static struct clk_branch gcc_oxili_ahb_clk = {
2061	.halt_reg = 0x59028,
2062	.halt_check = BRANCH_HALT,
2063	.clkr = {
2064		.enable_reg = 0x59028,
2065		.enable_mask = BIT(0),
2066		.hw.init = &(struct clk_init_data){
2067			.name = "gcc_oxili_ahb_clk",
2068			.ops = &clk_branch2_ops,
2069		},
2070	},
2071};
2072
2073static struct clk_branch gcc_oxili_gfx3d_clk = {
2074	.halt_reg = 0x59020,
2075	.halt_check = BRANCH_HALT,
2076	.clkr = {
2077		.enable_reg = 0x59020,
2078		.enable_mask = BIT(0),
2079		.hw.init = &(struct clk_init_data){
2080			.name = "gcc_oxili_gfx3d_clk",
2081			.parent_hws = (const struct clk_hw*[]) {
2082				&gfx3d_clk_src.clkr.hw,
2083			},
2084			.num_parents = 1,
2085			.flags = CLK_SET_RATE_PARENT,
2086			.ops = &clk_branch2_ops,
2087		},
2088	},
2089};
2090
2091static struct clk_branch gcc_pcie_0_aux_clk = {
2092	.halt_reg = 0x3e014,
2093	.halt_check = BRANCH_HALT_VOTED,
2094	.clkr = {
2095		.enable_reg = 0x45004,
2096		.enable_mask = BIT(27),
2097		.hw.init = &(struct clk_init_data){
2098			.name = "gcc_pcie_0_aux_clk",
2099			.parent_hws = (const struct clk_hw*[]) {
2100				&pcie_0_aux_clk_src.clkr.hw,
2101			},
2102			.num_parents = 1,
2103			.flags = CLK_SET_RATE_PARENT,
2104			.ops = &clk_branch2_ops,
2105		},
2106	},
2107};
2108
2109static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
2110	.halt_reg = 0x3e008,
2111	.halt_check = BRANCH_HALT_VOTED,
2112	.clkr = {
2113		.enable_reg = 0x45004,
2114		.enable_mask = BIT(11),
2115		.hw.init = &(struct clk_init_data){
2116			.name = "gcc_pcie_0_cfg_ahb_clk",
2117			.ops = &clk_branch2_ops,
2118		},
2119	},
2120};
2121
2122static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
2123	.halt_reg = 0x3e018,
2124	.halt_check = BRANCH_HALT_VOTED,
2125	.clkr = {
2126		.enable_reg = 0x45004,
2127		.enable_mask = BIT(18),
2128		.hw.init = &(struct clk_init_data){
2129			.name = "gcc_pcie_0_mstr_axi_clk",
2130			.ops = &clk_branch2_ops,
2131		},
2132	},
2133};
2134
2135static struct clk_branch gcc_pcie_0_pipe_clk = {
2136	.halt_reg = 0x3e00c,
2137	.halt_check = BRANCH_HALT_VOTED,
2138	.clkr = {
2139		.enable_reg = 0x45004,
2140		.enable_mask = BIT(28),
2141		.hw.init = &(struct clk_init_data){
2142			.name = "gcc_pcie_0_pipe_clk",
2143			.parent_hws = (const struct clk_hw*[]) {
2144				&pcie_0_pipe_clk_src.clkr.hw,
2145			},
2146			.num_parents = 1,
2147			.flags = CLK_SET_RATE_PARENT,
2148			.ops = &clk_branch2_ops,
2149		},
2150	},
2151};
2152
2153static struct clk_branch gcc_pcie_0_slv_axi_clk = {
2154	.halt_reg = 0x3e010,
2155	.halt_check = BRANCH_HALT_VOTED,
2156	.clkr = {
2157		.enable_reg = 0x45004,
2158		.enable_mask = BIT(22),
2159		.hw.init = &(struct clk_init_data){
2160			.name = "gcc_pcie_0_slv_axi_clk",
2161			.ops = &clk_branch2_ops,
2162		},
2163	},
2164};
2165
2166static struct clk_branch gcc_pcnoc_usb2_clk = {
2167	.halt_reg = 0x27008,
2168	.halt_check = BRANCH_HALT,
2169	.clkr = {
2170		.enable_reg = 0x27008,
2171		.enable_mask = BIT(0),
2172		.hw.init = &(struct clk_init_data){
2173			.name = "gcc_pcnoc_usb2_clk",
2174			.flags = CLK_IS_CRITICAL,
2175			.ops = &clk_branch2_ops,
2176		},
2177	},
2178};
2179
2180static struct clk_branch gcc_pcnoc_usb3_clk = {
2181	.halt_reg = 0x2700c,
2182	.halt_check = BRANCH_HALT,
2183	.clkr = {
2184		.enable_reg = 0x2700c,
2185		.enable_mask = BIT(0),
2186		.hw.init = &(struct clk_init_data){
2187			.name = "gcc_pcnoc_usb3_clk",
2188			.flags = CLK_IS_CRITICAL,
2189			.ops = &clk_branch2_ops,
2190		},
2191	},
2192};
2193
2194static struct clk_branch gcc_pdm2_clk = {
2195	.halt_reg = 0x4400c,
2196	.halt_check = BRANCH_HALT,
2197	.clkr = {
2198		.enable_reg = 0x4400c,
2199		.enable_mask = BIT(0),
2200		.hw.init = &(struct clk_init_data){
2201			.name = "gcc_pdm2_clk",
2202			.parent_hws = (const struct clk_hw*[]) {
2203				&pdm2_clk_src.clkr.hw,
2204			},
2205			.num_parents = 1,
2206			.flags = CLK_SET_RATE_PARENT,
2207			.ops = &clk_branch2_ops,
2208		},
2209	},
2210};
2211
2212static struct clk_branch gcc_pdm_ahb_clk = {
2213	.halt_reg = 0x44004,
2214	.halt_check = BRANCH_HALT,
2215	.clkr = {
2216		.enable_reg = 0x44004,
2217		.enable_mask = BIT(0),
2218		.hw.init = &(struct clk_init_data){
2219			.name = "gcc_pdm_ahb_clk",
2220			.ops = &clk_branch2_ops,
2221		},
2222	},
2223};
2224
2225static struct clk_branch gcc_prng_ahb_clk = {
2226	.halt_reg = 0x13004,
2227	.halt_check = BRANCH_HALT_VOTED,
2228	.clkr = {
2229		.enable_reg = 0x45004,
2230		.enable_mask = BIT(8),
2231		.hw.init = &(struct clk_init_data){
2232			.name = "gcc_prng_ahb_clk",
2233			.ops = &clk_branch2_ops,
2234		},
2235	},
2236};
2237
2238/* PWM clks do not have XO as parent as src clk is a balance root */
2239static struct clk_branch gcc_pwm0_xo512_clk = {
2240	.halt_reg = 0x44018,
2241	.halt_check = BRANCH_HALT,
2242	.clkr = {
2243		.enable_reg = 0x44018,
2244		.enable_mask = BIT(0),
2245		.hw.init = &(struct clk_init_data){
2246			.name = "gcc_pwm0_xo512_clk",
2247			.ops = &clk_branch2_ops,
2248		},
2249	},
2250};
2251
2252static struct clk_branch gcc_pwm1_xo512_clk = {
2253	.halt_reg = 0x49004,
2254	.halt_check = BRANCH_HALT,
2255	.clkr = {
2256		.enable_reg = 0x49004,
2257		.enable_mask = BIT(0),
2258		.hw.init = &(struct clk_init_data){
2259			.name = "gcc_pwm1_xo512_clk",
2260			.ops = &clk_branch2_ops,
2261		},
2262	},
2263};
2264
2265static struct clk_branch gcc_pwm2_xo512_clk = {
2266	.halt_reg = 0x4a004,
2267	.halt_check = BRANCH_HALT,
2268	.clkr = {
2269		.enable_reg = 0x4a004,
2270		.enable_mask = BIT(0),
2271		.hw.init = &(struct clk_init_data){
2272			.name = "gcc_pwm2_xo512_clk",
2273			.ops = &clk_branch2_ops,
2274		},
2275	},
2276};
2277
2278static struct clk_branch gcc_qdss_dap_clk = {
2279	.halt_reg = 0x29084,
2280	.halt_check = BRANCH_VOTED,
2281	.clkr = {
2282		.enable_reg = 0x45004,
2283		.enable_mask = BIT(21),
2284		.hw.init = &(struct clk_init_data){
2285			.name = "gcc_qdss_dap_clk",
2286			.ops = &clk_branch2_ops,
2287		},
2288	},
2289};
2290
2291static struct clk_branch gcc_sdcc1_ahb_clk = {
2292	.halt_reg = 0x4201c,
2293	.halt_check = BRANCH_HALT,
2294	.clkr = {
2295		.enable_reg = 0x4201c,
2296		.enable_mask = BIT(0),
2297		.hw.init = &(struct clk_init_data){
2298			.name = "gcc_sdcc1_ahb_clk",
2299			.ops = &clk_branch2_ops,
2300		},
2301	},
2302};
2303
2304static struct clk_branch gcc_sdcc1_apps_clk = {
2305	.halt_reg = 0x42018,
2306	.halt_check = BRANCH_HALT,
2307	.clkr = {
2308		.enable_reg = 0x42018,
2309		.enable_mask = BIT(0),
2310		.hw.init = &(struct clk_init_data){
2311			.name = "gcc_sdcc1_apps_clk",
2312			.parent_hws = (const struct clk_hw*[]) {
2313				&sdcc1_apps_clk_src.clkr.hw,
2314			},
2315			.num_parents = 1,
2316			.flags = CLK_SET_RATE_PARENT,
2317			.ops = &clk_branch2_ops,
2318		},
2319	},
2320};
2321
2322static struct clk_branch gcc_sdcc1_ice_core_clk = {
2323	.halt_reg = 0x5d014,
2324	.halt_check = BRANCH_HALT,
2325	.clkr = {
2326		.enable_reg = 0x5d014,
2327		.enable_mask = BIT(0),
2328		.hw.init = &(struct clk_init_data){
2329			.name = "gcc_sdcc1_ice_core_clk",
2330			.parent_hws = (const struct clk_hw*[]) {
2331				&sdcc1_ice_core_clk_src.clkr.hw,
2332			},
2333			.num_parents = 1,
2334			.flags = CLK_SET_RATE_PARENT,
2335			.ops = &clk_branch2_ops,
2336		},
2337	},
2338};
2339
2340static struct clk_branch gcc_cdsp_cfg_ahb_clk = {
2341	.halt_reg = 0x5e004,
2342	.halt_check = BRANCH_HALT,
2343	.clkr = {
2344		.enable_reg = 0x5e004,
2345		.enable_mask = BIT(0),
2346		.hw.init = &(struct clk_init_data) {
2347			.name = "gcc_cdsp_cfg_ahb_cbcr",
2348			.ops = &clk_branch2_ops,
2349		},
2350	},
2351};
2352
2353static struct clk_branch gcc_sdcc2_ahb_clk = {
2354	.halt_reg = 0x4301c,
2355	.halt_check = BRANCH_HALT,
2356	.clkr = {
2357		.enable_reg = 0x4301c,
2358		.enable_mask = BIT(0),
2359		.hw.init = &(struct clk_init_data){
2360			.name = "gcc_sdcc2_ahb_clk",
2361			.ops = &clk_branch2_ops,
2362		},
2363	},
2364};
2365
2366static struct clk_branch gcc_sdcc2_apps_clk = {
2367	.halt_reg = 0x43018,
2368	.halt_check = BRANCH_HALT,
2369	.clkr = {
2370		.enable_reg = 0x43018,
2371		.enable_mask = BIT(0),
2372		.hw.init = &(struct clk_init_data){
2373			.name = "gcc_sdcc2_apps_clk",
2374			.parent_hws = (const struct clk_hw*[]) {
2375				&sdcc2_apps_clk_src.clkr.hw,
2376			},
2377			.num_parents = 1,
2378			.flags = CLK_SET_RATE_PARENT,
2379			.ops = &clk_branch2_ops,
2380		},
2381	},
2382};
2383
2384static struct clk_branch gcc_smmu_cfg_clk = {
2385	.halt_reg = 0x12038,
2386	.halt_check = BRANCH_VOTED,
2387	.clkr = {
2388		.enable_reg = 0x3600C,
2389		.enable_mask = BIT(12),
2390		.hw.init = &(struct clk_init_data){
2391			.name = "gcc_smmu_cfg_clk",
2392			.ops = &clk_branch2_ops,
2393		},
2394	},
2395};
2396
2397static struct clk_branch gcc_sys_noc_usb3_clk = {
2398	.halt_reg = 0x26014,
2399	.halt_check = BRANCH_HALT,
2400	.clkr = {
2401		.enable_reg = 0x26014,
2402		.enable_mask = BIT(0),
2403		.hw.init = &(struct clk_init_data){
2404			.name = "gcc_sys_noc_usb3_clk",
2405			.parent_hws = (const struct clk_hw*[]) {
2406				&usb30_master_clk_src.clkr.hw,
2407			},
2408			.num_parents = 1,
2409			.ops = &clk_branch2_ops,
2410		},
2411	},
2412};
2413
2414static struct clk_branch gcc_usb_hs_inactivity_timers_clk = {
2415	.halt_reg = 0x4100C,
2416	.halt_check = BRANCH_HALT,
2417	.clkr = {
2418		.enable_reg = 0x4100C,
2419		.enable_mask = BIT(0),
2420		.hw.init = &(struct clk_init_data){
2421			.name = "gcc_usb_hs_inactivity_timers_clk",
2422			.ops = &clk_branch2_ops,
2423		},
2424	},
2425};
2426
2427static struct clk_branch gcc_usb20_mock_utmi_clk = {
2428	.halt_reg = 0x41044,
2429	.halt_check = BRANCH_HALT,
2430	.clkr = {
2431		.enable_reg = 0x41044,
2432		.enable_mask = BIT(0),
2433		.hw.init = &(struct clk_init_data){
2434			.name = "gcc_usb20_mock_utmi_clk",
2435			.parent_hws = (const struct clk_hw*[]) {
2436				&usb20_mock_utmi_clk_src.clkr.hw,
2437			},
2438			.num_parents = 1,
2439			.flags = CLK_SET_RATE_PARENT,
2440			.ops = &clk_branch2_ops,
2441		},
2442	},
2443};
2444
2445static struct clk_branch gcc_usb2a_phy_sleep_clk = {
2446	.halt_reg = 0x4102c,
2447	.halt_check = BRANCH_HALT,
2448	.clkr = {
2449		.enable_reg = 0x4102c,
2450		.enable_mask = BIT(0),
2451		.hw.init = &(struct clk_init_data){
2452			.name = "gcc_usb2a_phy_sleep_clk",
2453			.ops = &clk_branch2_ops,
2454		},
2455	},
2456};
2457
2458static struct clk_branch gcc_usb30_master_clk = {
2459	.halt_reg = 0x3900c,
2460	.halt_check = BRANCH_HALT,
2461	.clkr = {
2462		.enable_reg = 0x3900c,
2463		.enable_mask = BIT(0),
2464		.hw.init = &(struct clk_init_data){
2465			.name = "gcc_usb30_master_clk",
2466			.parent_hws = (const struct clk_hw*[]) {
2467				&usb30_master_clk_src.clkr.hw,
2468			},
2469			.num_parents = 1,
2470			.flags = CLK_SET_RATE_PARENT,
2471			.ops = &clk_branch2_ops,
2472		},
2473	},
2474};
2475
2476static struct clk_branch gcc_usb30_mock_utmi_clk = {
2477	.halt_reg = 0x39014,
2478	.halt_check = BRANCH_HALT,
2479	.clkr = {
2480		.enable_reg = 0x39014,
2481		.enable_mask = BIT(0),
2482		.hw.init = &(struct clk_init_data){
2483			.name = "gcc_usb30_mock_utmi_clk",
2484			.parent_hws = (const struct clk_hw*[]) {
2485				&usb30_mock_utmi_clk_src.clkr.hw,
2486			},
2487			.num_parents = 1,
2488			.flags = CLK_SET_RATE_PARENT,
2489			.ops = &clk_branch2_ops,
2490		},
2491	},
2492};
2493
2494static struct clk_branch gcc_usb30_sleep_clk = {
2495	.halt_reg = 0x39010,
2496	.halt_check = BRANCH_HALT,
2497	.clkr = {
2498		.enable_reg = 0x39010,
2499		.enable_mask = BIT(0),
2500		.hw.init = &(struct clk_init_data){
2501			.name = "gcc_usb30_sleep_clk",
2502			.ops = &clk_branch2_ops,
2503		},
2504	},
2505};
2506
2507static struct clk_branch gcc_usb3_phy_aux_clk = {
2508	.halt_reg = 0x39044,
2509	.halt_check = BRANCH_HALT,
2510	.clkr = {
2511		.enable_reg = 0x39044,
2512		.enable_mask = BIT(0),
2513		.hw.init = &(struct clk_init_data){
2514			.name = "gcc_usb3_phy_aux_clk",
2515			.parent_hws = (const struct clk_hw*[]) {
2516				&usb3_phy_aux_clk_src.clkr.hw,
2517			},
2518			.num_parents = 1,
2519			.flags = CLK_SET_RATE_PARENT,
2520			.ops = &clk_branch2_ops,
2521		},
2522	},
2523};
2524
2525static struct clk_branch gcc_usb3_phy_pipe_clk = {
2526	.halt_check = BRANCH_HALT_SKIP,
2527	.clkr = {
2528		.enable_reg = 0x39018,
2529		.enable_mask = BIT(0),
2530		.hw.init = &(struct clk_init_data){
2531			.name = "gcc_usb3_phy_pipe_clk",
2532			.ops = &clk_branch2_ops,
2533		},
2534	},
2535};
2536
2537static struct clk_branch gcc_usb_hs_phy_cfg_ahb_clk = {
2538	.halt_reg = 0x41030,
2539	.halt_check = BRANCH_HALT,
2540	.clkr = {
2541		.enable_reg = 0x41030,
2542		.enable_mask = BIT(0),
2543		.hw.init = &(struct clk_init_data){
2544			.name = "gcc_usb_hs_phy_cfg_ahb_clk",
2545			.ops = &clk_branch2_ops,
2546		},
2547	},
2548};
2549
2550static struct clk_branch gcc_usb_hs_system_clk = {
2551	.halt_reg = 0x41004,
2552	.halt_check = BRANCH_HALT,
2553	.clkr = {
2554		.enable_reg = 0x41004,
2555		.enable_mask = BIT(0),
2556		.hw.init = &(struct clk_init_data){
2557			.name = "gcc_usb_hs_system_clk",
2558			.parent_hws = (const struct clk_hw*[]) {
2559				&usb_hs_system_clk_src.clkr.hw,
2560			},
2561			.num_parents = 1,
2562			.flags = CLK_SET_RATE_PARENT,
2563			.ops = &clk_branch2_ops,
2564		},
2565	},
2566};
2567
2568static struct clk_branch gcc_wdsp_q6ss_ahbs_clk = {
2569	.halt_reg = 0x1e004,
2570	.halt_check = BRANCH_HALT,
2571	.clkr = {
2572		.enable_reg = 0x1e004,
2573		.enable_mask = BIT(0),
2574		.hw.init = &(struct clk_init_data){
2575			.name = "gcc_wdsp_q6ss_ahbs_clk",
2576			.ops = &clk_branch2_ops,
2577		},
2578	},
2579};
2580
2581static struct clk_branch gcc_wdsp_q6ss_axim_clk = {
2582	.halt_reg = 0x1e008,
2583	.halt_check = BRANCH_HALT,
2584	.clkr = {
2585		.enable_reg = 0x1e008,
2586		.enable_mask = BIT(0),
2587		.hw.init = &(struct clk_init_data){
2588			.name = "gcc_wdsp_q6ss_axim_clk",
2589			.ops = &clk_branch2_ops,
2590		},
2591	},
2592};
2593
2594static struct gdsc mdss_gdsc = {
2595	.gdscr = 0x4d078,
2596	.pd = {
2597		.name = "mdss",
2598	},
2599	.pwrsts = PWRSTS_OFF_ON,
2600};
2601
2602static struct gdsc oxili_gdsc = {
2603	.gdscr = 0x5901c,
2604	.pd = {
2605		.name = "oxili",
2606	},
2607	.pwrsts = PWRSTS_OFF_ON,
2608};
2609
2610static struct clk_hw *gcc_qcs404_hws[] = {
2611	&cxo.hw,
2612};
2613
2614static struct clk_regmap *gcc_qcs404_clocks[] = {
2615	[GCC_APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
2616	[GCC_BLSP1_QUP0_I2C_APPS_CLK_SRC] = &blsp1_qup0_i2c_apps_clk_src.clkr,
2617	[GCC_BLSP1_QUP0_SPI_APPS_CLK_SRC] = &blsp1_qup0_spi_apps_clk_src.clkr,
2618	[GCC_BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
2619	[GCC_BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
2620	[GCC_BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
2621	[GCC_BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
2622	[GCC_BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
2623	[GCC_BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
2624	[GCC_BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
2625	[GCC_BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
2626	[GCC_BLSP1_UART0_APPS_CLK_SRC] = &blsp1_uart0_apps_clk_src.clkr,
2627	[GCC_BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
2628	[GCC_BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
2629	[GCC_BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
2630	[GCC_BLSP2_QUP0_I2C_APPS_CLK_SRC] = &blsp2_qup0_i2c_apps_clk_src.clkr,
2631	[GCC_BLSP2_QUP0_SPI_APPS_CLK_SRC] = &blsp2_qup0_spi_apps_clk_src.clkr,
2632	[GCC_BLSP2_UART0_APPS_CLK_SRC] = &blsp2_uart0_apps_clk_src.clkr,
2633	[GCC_BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
2634	[GCC_EMAC_CLK_SRC] = &emac_clk_src.clkr,
2635	[GCC_EMAC_PTP_CLK_SRC] = &emac_ptp_clk_src.clkr,
2636	[GCC_ESC0_CLK_SRC] = &esc0_clk_src.clkr,
2637	[GCC_APSS_AHB_CLK] = &gcc_apss_ahb_clk.clkr,
2638	[GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
2639	[GCC_BIMC_CDSP_CLK] = &gcc_bimc_cdsp_clk.clkr,
2640	[GCC_BIMC_MDSS_CLK] = &gcc_bimc_mdss_clk.clkr,
2641	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
2642	[GCC_BLSP1_QUP0_I2C_APPS_CLK] = &gcc_blsp1_qup0_i2c_apps_clk.clkr,
2643	[GCC_BLSP1_QUP0_SPI_APPS_CLK] = &gcc_blsp1_qup0_spi_apps_clk.clkr,
2644	[GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
2645	[GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
2646	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
2647	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
2648	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
2649	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
2650	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
2651	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
2652	[GCC_BLSP1_UART0_APPS_CLK] = &gcc_blsp1_uart0_apps_clk.clkr,
2653	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
2654	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
2655	[GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
2656	[GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
2657	[GCC_BLSP2_QUP0_I2C_APPS_CLK] = &gcc_blsp2_qup0_i2c_apps_clk.clkr,
2658	[GCC_BLSP2_QUP0_SPI_APPS_CLK] = &gcc_blsp2_qup0_spi_apps_clk.clkr,
2659	[GCC_BLSP2_UART0_APPS_CLK] = &gcc_blsp2_uart0_apps_clk.clkr,
2660	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2661	[GCC_ETH_AXI_CLK] = &gcc_eth_axi_clk.clkr,
2662	[GCC_ETH_PTP_CLK] = &gcc_eth_ptp_clk.clkr,
2663	[GCC_ETH_RGMII_CLK] = &gcc_eth_rgmii_clk.clkr,
2664	[GCC_ETH_SLAVE_AHB_CLK] = &gcc_eth_slave_ahb_clk.clkr,
2665	[GCC_GENI_IR_S_CLK] = &gcc_geni_ir_s_clk.clkr,
2666	[GCC_GENI_IR_H_CLK] = &gcc_geni_ir_h_clk.clkr,
2667	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2668	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2669	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2670	[GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr,
2671	[GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr,
2672	[GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr,
2673	[GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr,
2674	[GCC_MDSS_HDMI_APP_CLK] = &gcc_mdss_hdmi_app_clk.clkr,
2675	[GCC_MDSS_HDMI_PCLK_CLK] = &gcc_mdss_hdmi_pclk_clk.clkr,
2676	[GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr,
2677	[GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr,
2678	[GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr,
2679	[GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr,
2680	[GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr,
2681	[GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
2682	[GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
2683	[GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
2684	[GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
2685	[GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
2686	[GCC_PCNOC_USB2_CLK] = &gcc_pcnoc_usb2_clk.clkr,
2687	[GCC_PCNOC_USB3_CLK] = &gcc_pcnoc_usb3_clk.clkr,
2688	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2689	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2690	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
2691	[GCC_PWM0_XO512_CLK] = &gcc_pwm0_xo512_clk.clkr,
2692	[GCC_PWM1_XO512_CLK] = &gcc_pwm1_xo512_clk.clkr,
2693	[GCC_PWM2_XO512_CLK] = &gcc_pwm2_xo512_clk.clkr,
2694	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2695	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2696	[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
2697	[GCC_CDSP_CFG_AHB_CLK] = &gcc_cdsp_cfg_ahb_clk.clkr,
2698	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2699	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2700	[GCC_SYS_NOC_USB3_CLK] = &gcc_sys_noc_usb3_clk.clkr,
2701	[GCC_USB20_MOCK_UTMI_CLK] = &gcc_usb20_mock_utmi_clk.clkr,
2702	[GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
2703	[GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
2704	[GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
2705	[GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,
2706	[GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr,
2707	[GCC_USB3_PHY_PIPE_CLK] = &gcc_usb3_phy_pipe_clk.clkr,
2708	[GCC_USB_HS_PHY_CFG_AHB_CLK] = &gcc_usb_hs_phy_cfg_ahb_clk.clkr,
2709	[GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
2710	[GCC_GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
2711	[GCC_GP1_CLK_SRC] = &gp1_clk_src.clkr,
2712	[GCC_GP2_CLK_SRC] = &gp2_clk_src.clkr,
2713	[GCC_GP3_CLK_SRC] = &gp3_clk_src.clkr,
2714	[GCC_GPLL0_OUT_MAIN] = &gpll0_out_main.clkr,
2715	[GCC_GPLL0_AO_OUT_MAIN] = &gpll0_ao_out_main.clkr,
2716	[GCC_GPLL0_SLEEP_CLK_SRC] = &gpll0_sleep_clk_src.clkr,
2717	[GCC_GPLL1_OUT_MAIN] = &gpll1_out_main.clkr,
2718	[GCC_GPLL3_OUT_MAIN] = &gpll3_out_main.clkr,
2719	[GCC_GPLL4_OUT_MAIN] = &gpll4_out_main.clkr,
2720	[GCC_GPLL6] = &gpll6.clkr,
2721	[GCC_GPLL6_OUT_AUX] = &gpll6_out_aux,
2722	[GCC_HDMI_APP_CLK_SRC] = &hdmi_app_clk_src.clkr,
2723	[GCC_HDMI_PCLK_CLK_SRC] = &hdmi_pclk_clk_src.clkr,
2724	[GCC_MDP_CLK_SRC] = &mdp_clk_src.clkr,
2725	[GCC_PCIE_0_AUX_CLK_SRC] = &pcie_0_aux_clk_src.clkr,
2726	[GCC_PCIE_0_PIPE_CLK_SRC] = &pcie_0_pipe_clk_src.clkr,
2727	[GCC_PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
2728	[GCC_PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
2729	[GCC_SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
2730	[GCC_SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
2731	[GCC_SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
2732	[GCC_USB20_MOCK_UTMI_CLK_SRC] = &usb20_mock_utmi_clk_src.clkr,
2733	[GCC_USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
2734	[GCC_USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
2735	[GCC_USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr,
2736	[GCC_USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
2737	[GCC_VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
2738	[GCC_CDSP_BIMC_CLK_SRC] = &cdsp_bimc_clk_src.clkr,
2739	[GCC_USB_HS_INACTIVITY_TIMERS_CLK] =
2740			&gcc_usb_hs_inactivity_timers_clk.clkr,
2741	[GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr,
2742	[GCC_GTCU_AHB_CLK] = &gcc_gtcu_ahb_clk.clkr,
2743	[GCC_GFX_TCU_CLK] = &gcc_gfx_tcu_clk.clkr,
2744	[GCC_GFX_TBU_CLK] = &gcc_gfx_tbu_clk.clkr,
2745	[GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,
2746	[GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr,
2747	[GCC_CDSP_TBU_CLK] = &gcc_cdsp_tbu_clk.clkr,
2748	[GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
2749	[GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
2750	[GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
2751	[GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr,
2752	[GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr,
2753	[GCC_DCC_CLK] = &gcc_dcc_clk.clkr,
2754	[GCC_DCC_XO_CLK] = &gcc_dcc_xo_clk.clkr,
2755	[GCC_WCSS_Q6_AHB_CLK] = &gcc_wdsp_q6ss_ahbs_clk.clkr,
2756	[GCC_WCSS_Q6_AXIM_CLK] =  &gcc_wdsp_q6ss_axim_clk.clkr,
2757
2758};
2759
2760static struct gdsc *gcc_qcs404_gdscs[] = {
2761	[MDSS_GDSC] = &mdss_gdsc,
2762	[OXILI_GDSC] = &oxili_gdsc,
2763};
2764
2765static const struct qcom_reset_map gcc_qcs404_resets[] = {
2766	[GCC_GENI_IR_BCR] = { 0x0F000 },
2767	[GCC_CDSP_RESTART] = { 0x18000 },
2768	[GCC_USB_HS_BCR] = { 0x41000 },
2769	[GCC_USB2_HS_PHY_ONLY_BCR] = { 0x41034 },
2770	[GCC_QUSB2_PHY_BCR] = { 0x4103c },
2771	[GCC_USB_HS_PHY_CFG_AHB_BCR] = { 0x0000c, 1 },
2772	[GCC_USB2A_PHY_BCR] = { 0x0000c, 0 },
2773	[GCC_USB3_PHY_BCR] = { 0x39004 },
2774	[GCC_USB_30_BCR] = { 0x39000 },
2775	[GCC_USB3PHY_PHY_BCR] = { 0x39008 },
2776	[GCC_PCIE_0_BCR] = { 0x3e000 },
2777	[GCC_PCIE_0_PHY_BCR] = { 0x3e004 },
2778	[GCC_PCIE_0_LINK_DOWN_BCR] = { 0x3e038 },
2779	[GCC_PCIEPHY_0_PHY_BCR] = { 0x3e03c },
2780	[GCC_PCIE_0_AXI_MASTER_STICKY_ARES] = { 0x3e040, 6},
2781	[GCC_PCIE_0_AHB_ARES] = { 0x3e040, 5 },
2782	[GCC_PCIE_0_AXI_SLAVE_ARES] = { 0x3e040, 4 },
2783	[GCC_PCIE_0_AXI_MASTER_ARES] = { 0x3e040, 3 },
2784	[GCC_PCIE_0_CORE_STICKY_ARES] = { 0x3e040, 2 },
2785	[GCC_PCIE_0_SLEEP_ARES] = { 0x3e040, 1 },
2786	[GCC_PCIE_0_PIPE_ARES] = { 0x3e040, 0 },
2787	[GCC_EMAC_BCR] = { 0x4e000 },
2788	[GCC_WDSP_RESTART] = {0x19000},
2789};
2790
2791static const struct regmap_config gcc_qcs404_regmap_config = {
2792	.reg_bits	= 32,
2793	.reg_stride	= 4,
2794	.val_bits	= 32,
2795	.max_register	= 0x7f000,
2796	.fast_io	= true,
2797};
2798
2799static const struct qcom_cc_desc gcc_qcs404_desc = {
2800	.config = &gcc_qcs404_regmap_config,
2801	.clks = gcc_qcs404_clocks,
2802	.num_clks = ARRAY_SIZE(gcc_qcs404_clocks),
2803	.resets = gcc_qcs404_resets,
2804	.num_resets = ARRAY_SIZE(gcc_qcs404_resets),
2805	.clk_hws = gcc_qcs404_hws,
2806	.num_clk_hws = ARRAY_SIZE(gcc_qcs404_hws),
2807	.gdscs = gcc_qcs404_gdscs,
2808	.num_gdscs = ARRAY_SIZE(gcc_qcs404_gdscs),
2809};
2810
2811static const struct of_device_id gcc_qcs404_match_table[] = {
2812	{ .compatible = "qcom,gcc-qcs404" },
2813	{ }
2814};
2815MODULE_DEVICE_TABLE(of, gcc_qcs404_match_table);
2816
2817static int gcc_qcs404_probe(struct platform_device *pdev)
2818{
2819	struct regmap *regmap;
2820
2821	regmap = qcom_cc_map(pdev, &gcc_qcs404_desc);
2822	if (IS_ERR(regmap))
2823		return PTR_ERR(regmap);
2824
2825	clk_alpha_pll_configure(&gpll3_out_main, regmap, &gpll3_config);
2826
2827	return qcom_cc_really_probe(pdev, &gcc_qcs404_desc, regmap);
2828}
2829
2830static struct platform_driver gcc_qcs404_driver = {
2831	.probe = gcc_qcs404_probe,
2832	.driver = {
2833		.name = "gcc-qcs404",
2834		.of_match_table = gcc_qcs404_match_table,
2835	},
2836};
2837
2838static int __init gcc_qcs404_init(void)
2839{
2840	return platform_driver_register(&gcc_qcs404_driver);
2841}
2842core_initcall(gcc_qcs404_init);
2843
2844static void __exit gcc_qcs404_exit(void)
2845{
2846	platform_driver_unregister(&gcc_qcs404_driver);
2847}
2848module_exit(gcc_qcs404_exit);
2849
2850MODULE_DESCRIPTION("Qualcomm GCC QCS404 Driver");
2851MODULE_LICENSE("GPL v2");