Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.5.6.
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Copyright (c) 2015, The Linux Foundation. All rights reserved.
   4 */
   5
   6#include <linux/kernel.h>
   7#include <linux/bitops.h>
   8#include <linux/err.h>
   9#include <linux/platform_device.h>
  10#include <linux/module.h>
  11#include <linux/of.h>
  12#include <linux/of_device.h>
  13#include <linux/clk-provider.h>
  14#include <linux/regmap.h>
  15#include <linux/reset-controller.h>
  16
  17#include <dt-bindings/clock/qcom,gcc-msm8996.h>
  18
  19#include "common.h"
  20#include "clk-regmap.h"
  21#include "clk-alpha-pll.h"
  22#include "clk-rcg.h"
  23#include "clk-branch.h"
  24#include "reset.h"
  25#include "gdsc.h"
  26
  27enum {
  28	P_XO,
  29	P_GPLL0,
  30	P_GPLL2,
  31	P_GPLL3,
  32	P_GPLL1,
  33	P_GPLL2_EARLY,
  34	P_GPLL0_EARLY_DIV,
  35	P_SLEEP_CLK,
  36	P_GPLL4,
  37	P_AUD_REF_CLK,
  38	P_GPLL1_EARLY_DIV
  39};
  40
  41static const struct parent_map gcc_sleep_clk_map[] = {
  42	{ P_SLEEP_CLK, 5 }
  43};
  44
  45static const char * const gcc_sleep_clk[] = {
  46	"sleep_clk"
  47};
  48
  49static const struct parent_map gcc_xo_gpll0_map[] = {
  50	{ P_XO, 0 },
  51	{ P_GPLL0, 1 }
  52};
  53
  54static const char * const gcc_xo_gpll0[] = {
  55	"xo",
  56	"gpll0"
  57};
  58
  59static const struct parent_map gcc_xo_sleep_clk_map[] = {
  60	{ P_XO, 0 },
  61	{ P_SLEEP_CLK, 5 }
  62};
  63
  64static const char * const gcc_xo_sleep_clk[] = {
  65	"xo",
  66	"sleep_clk"
  67};
  68
  69static const struct parent_map gcc_xo_gpll0_gpll0_early_div_map[] = {
  70	{ P_XO, 0 },
  71	{ P_GPLL0, 1 },
  72	{ P_GPLL0_EARLY_DIV, 6 }
  73};
  74
  75static const char * const gcc_xo_gpll0_gpll0_early_div[] = {
  76	"xo",
  77	"gpll0",
  78	"gpll0_early_div"
  79};
  80
  81static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {
  82	{ P_XO, 0 },
  83	{ P_GPLL0, 1 },
  84	{ P_GPLL4, 5 }
  85};
  86
  87static const char * const gcc_xo_gpll0_gpll4[] = {
  88	"xo",
  89	"gpll0",
  90	"gpll4"
  91};
  92
  93static const struct parent_map gcc_xo_gpll0_aud_ref_clk_map[] = {
  94	{ P_XO, 0 },
  95	{ P_GPLL0, 1 },
  96	{ P_AUD_REF_CLK, 2 }
  97};
  98
  99static const char * const gcc_xo_gpll0_aud_ref_clk[] = {
 100	"xo",
 101	"gpll0",
 102	"aud_ref_clk"
 103};
 104
 105static const struct parent_map gcc_xo_gpll0_sleep_clk_gpll0_early_div_map[] = {
 106	{ P_XO, 0 },
 107	{ P_GPLL0, 1 },
 108	{ P_SLEEP_CLK, 5 },
 109	{ P_GPLL0_EARLY_DIV, 6 }
 110};
 111
 112static const char * const gcc_xo_gpll0_sleep_clk_gpll0_early_div[] = {
 113	"xo",
 114	"gpll0",
 115	"sleep_clk",
 116	"gpll0_early_div"
 117};
 118
 119static const struct parent_map gcc_xo_gpll0_gpll4_gpll0_early_div_map[] = {
 120	{ P_XO, 0 },
 121	{ P_GPLL0, 1 },
 122	{ P_GPLL4, 5 },
 123	{ P_GPLL0_EARLY_DIV, 6 }
 124};
 125
 126static const char * const gcc_xo_gpll0_gpll4_gpll0_early_div[] = {
 127	"xo",
 128	"gpll0",
 129	"gpll4",
 130	"gpll0_early_div"
 131};
 132
 133static const struct parent_map gcc_xo_gpll0_gpll1_early_div_gpll1_gpll4_gpll0_early_div_map[] = {
 134	{ P_XO, 0 },
 135	{ P_GPLL0, 1 },
 136	{ P_GPLL1_EARLY_DIV, 3 },
 137	{ P_GPLL1, 4 },
 138	{ P_GPLL4, 5 },
 139	{ P_GPLL0_EARLY_DIV, 6 }
 140};
 141
 142static const char * const gcc_xo_gpll0_gpll1_early_div_gpll1_gpll4_gpll0_early_div[] = {
 143	"xo",
 144	"gpll0",
 145	"gpll1_early_div",
 146	"gpll1",
 147	"gpll4",
 148	"gpll0_early_div"
 149};
 150
 151static const struct parent_map gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll2_early_gpll0_early_div_map[] = {
 152	{ P_XO, 0 },
 153	{ P_GPLL0, 1 },
 154	{ P_GPLL2, 2 },
 155	{ P_GPLL3, 3 },
 156	{ P_GPLL1, 4 },
 157	{ P_GPLL2_EARLY, 5 },
 158	{ P_GPLL0_EARLY_DIV, 6 }
 159};
 160
 161static const char * const gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll2_early_gpll0_early_div[] = {
 162	"xo",
 163	"gpll0",
 164	"gpll2",
 165	"gpll3",
 166	"gpll1",
 167	"gpll2_early",
 168	"gpll0_early_div"
 169};
 170
 171static struct clk_fixed_factor xo = {
 172	.mult = 1,
 173	.div = 1,
 174	.hw.init = &(struct clk_init_data){
 175		.name = "xo",
 176		.parent_names = (const char *[]){ "xo_board" },
 177		.num_parents = 1,
 178		.ops = &clk_fixed_factor_ops,
 179	},
 180};
 181
 182static struct clk_alpha_pll gpll0_early = {
 183	.offset = 0x00000,
 184	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 185	.clkr = {
 186		.enable_reg = 0x52000,
 187		.enable_mask = BIT(0),
 188		.hw.init = &(struct clk_init_data){
 189			.name = "gpll0_early",
 190			.parent_names = (const char *[]){ "xo" },
 191			.num_parents = 1,
 192			.ops = &clk_alpha_pll_ops,
 193		},
 194	},
 195};
 196
 197static struct clk_fixed_factor gpll0_early_div = {
 198	.mult = 1,
 199	.div = 2,
 200	.hw.init = &(struct clk_init_data){
 201		.name = "gpll0_early_div",
 202		.parent_names = (const char *[]){ "gpll0_early" },
 203		.num_parents = 1,
 204		.ops = &clk_fixed_factor_ops,
 205	},
 206};
 207
 208static struct clk_alpha_pll_postdiv gpll0 = {
 209	.offset = 0x00000,
 210	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 211	.clkr.hw.init = &(struct clk_init_data){
 212		.name = "gpll0",
 213		.parent_names = (const char *[]){ "gpll0_early" },
 214		.num_parents = 1,
 215		.ops = &clk_alpha_pll_postdiv_ops,
 216	},
 217};
 218
 219static struct clk_branch gcc_mmss_gpll0_div_clk = {
 220	.halt_check = BRANCH_HALT_DELAY,
 221	.clkr = {
 222		.enable_reg = 0x5200c,
 223		.enable_mask = BIT(0),
 224		.hw.init = &(struct clk_init_data){
 225			.name = "gcc_mmss_gpll0_div_clk",
 226			.parent_names = (const char *[]){ "gpll0" },
 227			.num_parents = 1,
 228			.flags = CLK_SET_RATE_PARENT,
 229			.ops = &clk_branch2_ops,
 230		},
 231	},
 232};
 233
 234static struct clk_branch gcc_mss_gpll0_div_clk = {
 235	.halt_check = BRANCH_HALT_DELAY,
 236	.clkr = {
 237		.enable_reg = 0x5200c,
 238		.enable_mask = BIT(2),
 239		.hw.init = &(struct clk_init_data){
 240			.name = "gcc_mss_gpll0_div_clk",
 241			.parent_names = (const char *[]){ "gpll0" },
 242			.num_parents = 1,
 243			.flags = CLK_SET_RATE_PARENT,
 244			.ops = &clk_branch2_ops
 245		},
 246	},
 247};
 248
 249static struct clk_alpha_pll gpll4_early = {
 250	.offset = 0x77000,
 251	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 252	.clkr = {
 253		.enable_reg = 0x52000,
 254		.enable_mask = BIT(4),
 255		.hw.init = &(struct clk_init_data){
 256			.name = "gpll4_early",
 257			.parent_names = (const char *[]){ "xo" },
 258			.num_parents = 1,
 259			.ops = &clk_alpha_pll_ops,
 260		},
 261	},
 262};
 263
 264static struct clk_alpha_pll_postdiv gpll4 = {
 265	.offset = 0x77000,
 266	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 267	.clkr.hw.init = &(struct clk_init_data){
 268		.name = "gpll4",
 269		.parent_names = (const char *[]){ "gpll4_early" },
 270		.num_parents = 1,
 271		.ops = &clk_alpha_pll_postdiv_ops,
 272	},
 273};
 274
 275static const struct freq_tbl ftbl_system_noc_clk_src[] = {
 276	F(19200000, P_XO, 1, 0, 0),
 277	F(50000000, P_GPLL0_EARLY_DIV, 6, 0, 0),
 278	F(100000000, P_GPLL0, 6, 0, 0),
 279	F(150000000, P_GPLL0, 4, 0, 0),
 280	F(200000000, P_GPLL0, 3, 0, 0),
 281	F(240000000, P_GPLL0, 2.5, 0, 0),
 282	{ }
 283};
 284
 285static struct clk_rcg2 system_noc_clk_src = {
 286	.cmd_rcgr = 0x0401c,
 287	.hid_width = 5,
 288	.parent_map = gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll2_early_gpll0_early_div_map,
 289	.freq_tbl = ftbl_system_noc_clk_src,
 290	.clkr.hw.init = &(struct clk_init_data){
 291		.name = "system_noc_clk_src",
 292		.parent_names = gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll2_early_gpll0_early_div,
 293		.num_parents = 7,
 294		.ops = &clk_rcg2_ops,
 295	},
 296};
 297
 298static const struct freq_tbl ftbl_config_noc_clk_src[] = {
 299	F(19200000, P_XO, 1, 0, 0),
 300	F(37500000, P_GPLL0, 16, 0, 0),
 301	F(75000000, P_GPLL0, 8, 0, 0),
 302	{ }
 303};
 304
 305static struct clk_rcg2 config_noc_clk_src = {
 306	.cmd_rcgr = 0x0500c,
 307	.hid_width = 5,
 308	.parent_map = gcc_xo_gpll0_map,
 309	.freq_tbl = ftbl_config_noc_clk_src,
 310	.clkr.hw.init = &(struct clk_init_data){
 311		.name = "config_noc_clk_src",
 312		.parent_names = gcc_xo_gpll0,
 313		.num_parents = 2,
 314		.ops = &clk_rcg2_ops,
 315	},
 316};
 317
 318static const struct freq_tbl ftbl_periph_noc_clk_src[] = {
 319	F(19200000, P_XO, 1, 0, 0),
 320	F(37500000, P_GPLL0, 16, 0, 0),
 321	F(50000000, P_GPLL0, 12, 0, 0),
 322	F(75000000, P_GPLL0, 8, 0, 0),
 323	F(100000000, P_GPLL0, 6, 0, 0),
 324	{ }
 325};
 326
 327static struct clk_rcg2 periph_noc_clk_src = {
 328	.cmd_rcgr = 0x06014,
 329	.hid_width = 5,
 330	.parent_map = gcc_xo_gpll0_map,
 331	.freq_tbl = ftbl_periph_noc_clk_src,
 332	.clkr.hw.init = &(struct clk_init_data){
 333		.name = "periph_noc_clk_src",
 334		.parent_names = gcc_xo_gpll0,
 335		.num_parents = 2,
 336		.ops = &clk_rcg2_ops,
 337	},
 338};
 339
 340static const struct freq_tbl ftbl_usb30_master_clk_src[] = {
 341	F(19200000, P_XO, 1, 0, 0),
 342	F(120000000, P_GPLL0, 5, 0, 0),
 343	F(150000000, P_GPLL0, 4, 0, 0),
 344	{ }
 345};
 346
 347static struct clk_rcg2 usb30_master_clk_src = {
 348	.cmd_rcgr = 0x0f014,
 349	.mnd_width = 8,
 350	.hid_width = 5,
 351	.parent_map = gcc_xo_gpll0_gpll0_early_div_map,
 352	.freq_tbl = ftbl_usb30_master_clk_src,
 353	.clkr.hw.init = &(struct clk_init_data){
 354		.name = "usb30_master_clk_src",
 355		.parent_names = gcc_xo_gpll0_gpll0_early_div,
 356		.num_parents = 3,
 357		.ops = &clk_rcg2_ops,
 358	},
 359};
 360
 361static const struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = {
 362	F(19200000, P_XO, 1, 0, 0),
 363	{ }
 364};
 365
 366static struct clk_rcg2 usb30_mock_utmi_clk_src = {
 367	.cmd_rcgr = 0x0f028,
 368	.hid_width = 5,
 369	.parent_map = gcc_xo_gpll0_gpll0_early_div_map,
 370	.freq_tbl = ftbl_usb30_mock_utmi_clk_src,
 371	.clkr.hw.init = &(struct clk_init_data){
 372		.name = "usb30_mock_utmi_clk_src",
 373		.parent_names = gcc_xo_gpll0_gpll0_early_div,
 374		.num_parents = 3,
 375		.ops = &clk_rcg2_ops,
 376	},
 377};
 378
 379static const struct freq_tbl ftbl_usb3_phy_aux_clk_src[] = {
 380	F(1200000, P_XO, 16, 0, 0),
 381	{ }
 382};
 383
 384static struct clk_rcg2 usb3_phy_aux_clk_src = {
 385	.cmd_rcgr = 0x5000c,
 386	.hid_width = 5,
 387	.parent_map = gcc_xo_sleep_clk_map,
 388	.freq_tbl = ftbl_usb3_phy_aux_clk_src,
 389	.clkr.hw.init = &(struct clk_init_data){
 390		.name = "usb3_phy_aux_clk_src",
 391		.parent_names = gcc_xo_sleep_clk,
 392		.num_parents = 2,
 393		.ops = &clk_rcg2_ops,
 394	},
 395};
 396
 397static const struct freq_tbl ftbl_usb20_master_clk_src[] = {
 398	F(120000000, P_GPLL0, 5, 0, 0),
 399	{ }
 400};
 401
 402static struct clk_rcg2 usb20_master_clk_src = {
 403	.cmd_rcgr = 0x12010,
 404	.mnd_width = 8,
 405	.hid_width = 5,
 406	.parent_map = gcc_xo_gpll0_gpll0_early_div_map,
 407	.freq_tbl = ftbl_usb20_master_clk_src,
 408	.clkr.hw.init = &(struct clk_init_data){
 409		.name = "usb20_master_clk_src",
 410		.parent_names = gcc_xo_gpll0_gpll0_early_div,
 411		.num_parents = 3,
 412		.ops = &clk_rcg2_ops,
 413	},
 414};
 415
 416static struct clk_rcg2 usb20_mock_utmi_clk_src = {
 417	.cmd_rcgr = 0x12024,
 418	.hid_width = 5,
 419	.parent_map = gcc_xo_gpll0_gpll0_early_div_map,
 420	.freq_tbl = ftbl_usb30_mock_utmi_clk_src,
 421	.clkr.hw.init = &(struct clk_init_data){
 422		.name = "usb20_mock_utmi_clk_src",
 423		.parent_names = gcc_xo_gpll0_gpll0_early_div,
 424		.num_parents = 3,
 425		.ops = &clk_rcg2_ops,
 426	},
 427};
 428
 429static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
 430	F(144000, P_XO, 16, 3, 25),
 431	F(400000, P_XO, 12, 1, 4),
 432	F(20000000, P_GPLL0, 15, 1, 2),
 433	F(25000000, P_GPLL0, 12, 1, 2),
 434	F(50000000, P_GPLL0, 12, 0, 0),
 435	F(96000000, P_GPLL4, 4, 0, 0),
 436	F(192000000, P_GPLL4, 2, 0, 0),
 437	F(384000000, P_GPLL4, 1, 0, 0),
 438	{ }
 439};
 440
 441static struct clk_rcg2 sdcc1_apps_clk_src = {
 442	.cmd_rcgr = 0x13010,
 443	.mnd_width = 8,
 444	.hid_width = 5,
 445	.parent_map = gcc_xo_gpll0_gpll4_gpll0_early_div_map,
 446	.freq_tbl = ftbl_sdcc1_apps_clk_src,
 447	.clkr.hw.init = &(struct clk_init_data){
 448		.name = "sdcc1_apps_clk_src",
 449		.parent_names = gcc_xo_gpll0_gpll4_gpll0_early_div,
 450		.num_parents = 4,
 451		.ops = &clk_rcg2_floor_ops,
 452	},
 453};
 454
 455static struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = {
 456	F(19200000, P_XO, 1, 0, 0),
 457	F(150000000, P_GPLL0, 4, 0, 0),
 458	F(300000000, P_GPLL0, 2, 0, 0),
 459	{ }
 460};
 461
 462static struct clk_rcg2 sdcc1_ice_core_clk_src = {
 463	.cmd_rcgr = 0x13024,
 464	.hid_width = 5,
 465	.parent_map = gcc_xo_gpll0_gpll4_gpll0_early_div_map,
 466	.freq_tbl = ftbl_sdcc1_ice_core_clk_src,
 467	.clkr.hw.init = &(struct clk_init_data){
 468		.name = "sdcc1_ice_core_clk_src",
 469		.parent_names = gcc_xo_gpll0_gpll4_gpll0_early_div,
 470		.num_parents = 4,
 471		.ops = &clk_rcg2_ops,
 472	},
 473};
 474
 475static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = {
 476	F(144000, P_XO, 16, 3, 25),
 477	F(400000, P_XO, 12, 1, 4),
 478	F(20000000, P_GPLL0, 15, 1, 2),
 479	F(25000000, P_GPLL0, 12, 1, 2),
 480	F(50000000, P_GPLL0, 12, 0, 0),
 481	F(100000000, P_GPLL0, 6, 0, 0),
 482	F(200000000, P_GPLL0, 3, 0, 0),
 483	{ }
 484};
 485
 486static struct clk_rcg2 sdcc2_apps_clk_src = {
 487	.cmd_rcgr = 0x14010,
 488	.mnd_width = 8,
 489	.hid_width = 5,
 490	.parent_map = gcc_xo_gpll0_gpll4_map,
 491	.freq_tbl = ftbl_sdcc2_apps_clk_src,
 492	.clkr.hw.init = &(struct clk_init_data){
 493		.name = "sdcc2_apps_clk_src",
 494		.parent_names = gcc_xo_gpll0_gpll4,
 495		.num_parents = 3,
 496		.ops = &clk_rcg2_floor_ops,
 497	},
 498};
 499
 500static struct clk_rcg2 sdcc3_apps_clk_src = {
 501	.cmd_rcgr = 0x15010,
 502	.mnd_width = 8,
 503	.hid_width = 5,
 504	.parent_map = gcc_xo_gpll0_gpll4_map,
 505	.freq_tbl = ftbl_sdcc2_apps_clk_src,
 506	.clkr.hw.init = &(struct clk_init_data){
 507		.name = "sdcc3_apps_clk_src",
 508		.parent_names = gcc_xo_gpll0_gpll4,
 509		.num_parents = 3,
 510		.ops = &clk_rcg2_floor_ops,
 511	},
 512};
 513
 514static const struct freq_tbl ftbl_sdcc4_apps_clk_src[] = {
 515	F(144000, P_XO, 16, 3, 25),
 516	F(400000, P_XO, 12, 1, 4),
 517	F(20000000, P_GPLL0, 15, 1, 2),
 518	F(25000000, P_GPLL0, 12, 1, 2),
 519	F(50000000, P_GPLL0, 12, 0, 0),
 520	F(100000000, P_GPLL0, 6, 0, 0),
 521	{ }
 522};
 523
 524static struct clk_rcg2 sdcc4_apps_clk_src = {
 525	.cmd_rcgr = 0x16010,
 526	.mnd_width = 8,
 527	.hid_width = 5,
 528	.parent_map = gcc_xo_gpll0_map,
 529	.freq_tbl = ftbl_sdcc4_apps_clk_src,
 530	.clkr.hw.init = &(struct clk_init_data){
 531		.name = "sdcc4_apps_clk_src",
 532		.parent_names = gcc_xo_gpll0,
 533		.num_parents = 2,
 534		.ops = &clk_rcg2_floor_ops,
 535	},
 536};
 537
 538static const struct freq_tbl ftbl_blsp1_qup1_spi_apps_clk_src[] = {
 539	F(960000, P_XO, 10, 1, 2),
 540	F(4800000, P_XO, 4, 0, 0),
 541	F(9600000, P_XO, 2, 0, 0),
 542	F(15000000, P_GPLL0, 10, 1, 4),
 543	F(19200000, P_XO, 1, 0, 0),
 544	F(25000000, P_GPLL0, 12, 1, 2),
 545	F(50000000, P_GPLL0, 12, 0, 0),
 546	{ }
 547};
 548
 549static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
 550	.cmd_rcgr = 0x1900c,
 551	.mnd_width = 8,
 552	.hid_width = 5,
 553	.parent_map = gcc_xo_gpll0_map,
 554	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
 555	.clkr.hw.init = &(struct clk_init_data){
 556		.name = "blsp1_qup1_spi_apps_clk_src",
 557		.parent_names = gcc_xo_gpll0,
 558		.num_parents = 2,
 559		.ops = &clk_rcg2_ops,
 560	},
 561};
 562
 563static const struct freq_tbl ftbl_blsp1_qup1_i2c_apps_clk_src[] = {
 564	F(19200000, P_XO, 1, 0, 0),
 565	F(50000000, P_GPLL0, 12, 0, 0),
 566	{ }
 567};
 568
 569static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
 570	.cmd_rcgr = 0x19020,
 571	.hid_width = 5,
 572	.parent_map = gcc_xo_gpll0_map,
 573	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
 574	.clkr.hw.init = &(struct clk_init_data){
 575		.name = "blsp1_qup1_i2c_apps_clk_src",
 576		.parent_names = gcc_xo_gpll0,
 577		.num_parents = 2,
 578		.ops = &clk_rcg2_ops,
 579	},
 580};
 581
 582static const struct freq_tbl ftbl_blsp1_uart1_apps_clk_src[] = {
 583	F(3686400, P_GPLL0, 1, 96, 15625),
 584	F(7372800, P_GPLL0, 1, 192, 15625),
 585	F(14745600, P_GPLL0, 1, 384, 15625),
 586	F(16000000, P_GPLL0, 5, 2, 15),
 587	F(19200000, P_XO, 1, 0, 0),
 588	F(24000000, P_GPLL0, 5, 1, 5),
 589	F(32000000, P_GPLL0, 1, 4, 75),
 590	F(40000000, P_GPLL0, 15, 0, 0),
 591	F(46400000, P_GPLL0, 1, 29, 375),
 592	F(48000000, P_GPLL0, 12.5, 0, 0),
 593	F(51200000, P_GPLL0, 1, 32, 375),
 594	F(56000000, P_GPLL0, 1, 7, 75),
 595	F(58982400, P_GPLL0, 1, 1536, 15625),
 596	F(60000000, P_GPLL0, 10, 0, 0),
 597	F(63157895, P_GPLL0, 9.5, 0, 0),
 598	{ }
 599};
 600
 601static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
 602	.cmd_rcgr = 0x1a00c,
 603	.mnd_width = 16,
 604	.hid_width = 5,
 605	.parent_map = gcc_xo_gpll0_map,
 606	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
 607	.clkr.hw.init = &(struct clk_init_data){
 608		.name = "blsp1_uart1_apps_clk_src",
 609		.parent_names = gcc_xo_gpll0,
 610		.num_parents = 2,
 611		.ops = &clk_rcg2_ops,
 612	},
 613};
 614
 615static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
 616	.cmd_rcgr = 0x1b00c,
 617	.mnd_width = 8,
 618	.hid_width = 5,
 619	.parent_map = gcc_xo_gpll0_map,
 620	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
 621	.clkr.hw.init = &(struct clk_init_data){
 622		.name = "blsp1_qup2_spi_apps_clk_src",
 623		.parent_names = gcc_xo_gpll0,
 624		.num_parents = 2,
 625		.ops = &clk_rcg2_ops,
 626	},
 627};
 628
 629static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
 630	.cmd_rcgr = 0x1b020,
 631	.hid_width = 5,
 632	.parent_map = gcc_xo_gpll0_map,
 633	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
 634	.clkr.hw.init = &(struct clk_init_data){
 635		.name = "blsp1_qup2_i2c_apps_clk_src",
 636		.parent_names = gcc_xo_gpll0,
 637		.num_parents = 2,
 638		.ops = &clk_rcg2_ops,
 639	},
 640};
 641
 642static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
 643	.cmd_rcgr = 0x1c00c,
 644	.mnd_width = 16,
 645	.hid_width = 5,
 646	.parent_map = gcc_xo_gpll0_map,
 647	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
 648	.clkr.hw.init = &(struct clk_init_data){
 649		.name = "blsp1_uart2_apps_clk_src",
 650		.parent_names = gcc_xo_gpll0,
 651		.num_parents = 2,
 652		.ops = &clk_rcg2_ops,
 653	},
 654};
 655
 656static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
 657	.cmd_rcgr = 0x1d00c,
 658	.mnd_width = 8,
 659	.hid_width = 5,
 660	.parent_map = gcc_xo_gpll0_map,
 661	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
 662	.clkr.hw.init = &(struct clk_init_data){
 663		.name = "blsp1_qup3_spi_apps_clk_src",
 664		.parent_names = gcc_xo_gpll0,
 665		.num_parents = 2,
 666		.ops = &clk_rcg2_ops,
 667	},
 668};
 669
 670static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
 671	.cmd_rcgr = 0x1d020,
 672	.hid_width = 5,
 673	.parent_map = gcc_xo_gpll0_map,
 674	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
 675	.clkr.hw.init = &(struct clk_init_data){
 676		.name = "blsp1_qup3_i2c_apps_clk_src",
 677		.parent_names = gcc_xo_gpll0,
 678		.num_parents = 2,
 679		.ops = &clk_rcg2_ops,
 680	},
 681};
 682
 683static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
 684	.cmd_rcgr = 0x1e00c,
 685	.mnd_width = 16,
 686	.hid_width = 5,
 687	.parent_map = gcc_xo_gpll0_map,
 688	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
 689	.clkr.hw.init = &(struct clk_init_data){
 690		.name = "blsp1_uart3_apps_clk_src",
 691		.parent_names = gcc_xo_gpll0,
 692		.num_parents = 2,
 693		.ops = &clk_rcg2_ops,
 694	},
 695};
 696
 697static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
 698	.cmd_rcgr = 0x1f00c,
 699	.mnd_width = 8,
 700	.hid_width = 5,
 701	.parent_map = gcc_xo_gpll0_map,
 702	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
 703	.clkr.hw.init = &(struct clk_init_data){
 704		.name = "blsp1_qup4_spi_apps_clk_src",
 705		.parent_names = gcc_xo_gpll0,
 706		.num_parents = 2,
 707		.ops = &clk_rcg2_ops,
 708	},
 709};
 710
 711static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
 712	.cmd_rcgr = 0x1f020,
 713	.hid_width = 5,
 714	.parent_map = gcc_xo_gpll0_map,
 715	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
 716	.clkr.hw.init = &(struct clk_init_data){
 717		.name = "blsp1_qup4_i2c_apps_clk_src",
 718		.parent_names = gcc_xo_gpll0,
 719		.num_parents = 2,
 720		.ops = &clk_rcg2_ops,
 721	},
 722};
 723
 724static struct clk_rcg2 blsp1_uart4_apps_clk_src = {
 725	.cmd_rcgr = 0x2000c,
 726	.mnd_width = 16,
 727	.hid_width = 5,
 728	.parent_map = gcc_xo_gpll0_map,
 729	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
 730	.clkr.hw.init = &(struct clk_init_data){
 731		.name = "blsp1_uart4_apps_clk_src",
 732		.parent_names = gcc_xo_gpll0,
 733		.num_parents = 2,
 734		.ops = &clk_rcg2_ops,
 735	},
 736};
 737
 738static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
 739	.cmd_rcgr = 0x2100c,
 740	.mnd_width = 8,
 741	.hid_width = 5,
 742	.parent_map = gcc_xo_gpll0_map,
 743	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
 744	.clkr.hw.init = &(struct clk_init_data){
 745		.name = "blsp1_qup5_spi_apps_clk_src",
 746		.parent_names = gcc_xo_gpll0,
 747		.num_parents = 2,
 748		.ops = &clk_rcg2_ops,
 749	},
 750};
 751
 752static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
 753	.cmd_rcgr = 0x21020,
 754	.hid_width = 5,
 755	.parent_map = gcc_xo_gpll0_map,
 756	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
 757	.clkr.hw.init = &(struct clk_init_data){
 758		.name = "blsp1_qup5_i2c_apps_clk_src",
 759		.parent_names = gcc_xo_gpll0,
 760		.num_parents = 2,
 761		.ops = &clk_rcg2_ops,
 762	},
 763};
 764
 765static struct clk_rcg2 blsp1_uart5_apps_clk_src = {
 766	.cmd_rcgr = 0x2200c,
 767	.mnd_width = 16,
 768	.hid_width = 5,
 769	.parent_map = gcc_xo_gpll0_map,
 770	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
 771	.clkr.hw.init = &(struct clk_init_data){
 772		.name = "blsp1_uart5_apps_clk_src",
 773		.parent_names = gcc_xo_gpll0,
 774		.num_parents = 2,
 775		.ops = &clk_rcg2_ops,
 776	},
 777};
 778
 779static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
 780	.cmd_rcgr = 0x2300c,
 781	.mnd_width = 8,
 782	.hid_width = 5,
 783	.parent_map = gcc_xo_gpll0_map,
 784	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
 785	.clkr.hw.init = &(struct clk_init_data){
 786		.name = "blsp1_qup6_spi_apps_clk_src",
 787		.parent_names = gcc_xo_gpll0,
 788		.num_parents = 2,
 789		.ops = &clk_rcg2_ops,
 790	},
 791};
 792
 793static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
 794	.cmd_rcgr = 0x23020,
 795	.hid_width = 5,
 796	.parent_map = gcc_xo_gpll0_map,
 797	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
 798	.clkr.hw.init = &(struct clk_init_data){
 799		.name = "blsp1_qup6_i2c_apps_clk_src",
 800		.parent_names = gcc_xo_gpll0,
 801		.num_parents = 2,
 802		.ops = &clk_rcg2_ops,
 803	},
 804};
 805
 806static struct clk_rcg2 blsp1_uart6_apps_clk_src = {
 807	.cmd_rcgr = 0x2400c,
 808	.mnd_width = 16,
 809	.hid_width = 5,
 810	.parent_map = gcc_xo_gpll0_map,
 811	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
 812	.clkr.hw.init = &(struct clk_init_data){
 813		.name = "blsp1_uart6_apps_clk_src",
 814		.parent_names = gcc_xo_gpll0,
 815		.num_parents = 2,
 816		.ops = &clk_rcg2_ops,
 817	},
 818};
 819
 820static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
 821	.cmd_rcgr = 0x2600c,
 822	.mnd_width = 8,
 823	.hid_width = 5,
 824	.parent_map = gcc_xo_gpll0_map,
 825	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
 826	.clkr.hw.init = &(struct clk_init_data){
 827		.name = "blsp2_qup1_spi_apps_clk_src",
 828		.parent_names = gcc_xo_gpll0,
 829		.num_parents = 2,
 830		.ops = &clk_rcg2_ops,
 831	},
 832};
 833
 834static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
 835	.cmd_rcgr = 0x26020,
 836	.hid_width = 5,
 837	.parent_map = gcc_xo_gpll0_map,
 838	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
 839	.clkr.hw.init = &(struct clk_init_data){
 840		.name = "blsp2_qup1_i2c_apps_clk_src",
 841		.parent_names = gcc_xo_gpll0,
 842		.num_parents = 2,
 843		.ops = &clk_rcg2_ops,
 844	},
 845};
 846
 847static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
 848	.cmd_rcgr = 0x2700c,
 849	.mnd_width = 16,
 850	.hid_width = 5,
 851	.parent_map = gcc_xo_gpll0_map,
 852	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
 853	.clkr.hw.init = &(struct clk_init_data){
 854		.name = "blsp2_uart1_apps_clk_src",
 855		.parent_names = gcc_xo_gpll0,
 856		.num_parents = 2,
 857		.ops = &clk_rcg2_ops,
 858	},
 859};
 860
 861static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
 862	.cmd_rcgr = 0x2800c,
 863	.mnd_width = 8,
 864	.hid_width = 5,
 865	.parent_map = gcc_xo_gpll0_map,
 866	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
 867	.clkr.hw.init = &(struct clk_init_data){
 868		.name = "blsp2_qup2_spi_apps_clk_src",
 869		.parent_names = gcc_xo_gpll0,
 870		.num_parents = 2,
 871		.ops = &clk_rcg2_ops,
 872	},
 873};
 874
 875static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
 876	.cmd_rcgr = 0x28020,
 877	.hid_width = 5,
 878	.parent_map = gcc_xo_gpll0_map,
 879	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
 880	.clkr.hw.init = &(struct clk_init_data){
 881		.name = "blsp2_qup2_i2c_apps_clk_src",
 882		.parent_names = gcc_xo_gpll0,
 883		.num_parents = 2,
 884		.ops = &clk_rcg2_ops,
 885	},
 886};
 887
 888static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
 889	.cmd_rcgr = 0x2900c,
 890	.mnd_width = 16,
 891	.hid_width = 5,
 892	.parent_map = gcc_xo_gpll0_map,
 893	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
 894	.clkr.hw.init = &(struct clk_init_data){
 895		.name = "blsp2_uart2_apps_clk_src",
 896		.parent_names = gcc_xo_gpll0,
 897		.num_parents = 2,
 898		.ops = &clk_rcg2_ops,
 899	},
 900};
 901
 902static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
 903	.cmd_rcgr = 0x2a00c,
 904	.mnd_width = 8,
 905	.hid_width = 5,
 906	.parent_map = gcc_xo_gpll0_map,
 907	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
 908	.clkr.hw.init = &(struct clk_init_data){
 909		.name = "blsp2_qup3_spi_apps_clk_src",
 910		.parent_names = gcc_xo_gpll0,
 911		.num_parents = 2,
 912		.ops = &clk_rcg2_ops,
 913	},
 914};
 915
 916static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
 917	.cmd_rcgr = 0x2a020,
 918	.hid_width = 5,
 919	.parent_map = gcc_xo_gpll0_map,
 920	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
 921	.clkr.hw.init = &(struct clk_init_data){
 922		.name = "blsp2_qup3_i2c_apps_clk_src",
 923		.parent_names = gcc_xo_gpll0,
 924		.num_parents = 2,
 925		.ops = &clk_rcg2_ops,
 926	},
 927};
 928
 929static struct clk_rcg2 blsp2_uart3_apps_clk_src = {
 930	.cmd_rcgr = 0x2b00c,
 931	.mnd_width = 16,
 932	.hid_width = 5,
 933	.parent_map = gcc_xo_gpll0_map,
 934	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
 935	.clkr.hw.init = &(struct clk_init_data){
 936		.name = "blsp2_uart3_apps_clk_src",
 937		.parent_names = gcc_xo_gpll0,
 938		.num_parents = 2,
 939		.ops = &clk_rcg2_ops,
 940	},
 941};
 942
 943static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
 944	.cmd_rcgr = 0x2c00c,
 945	.mnd_width = 8,
 946	.hid_width = 5,
 947	.parent_map = gcc_xo_gpll0_map,
 948	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
 949	.clkr.hw.init = &(struct clk_init_data){
 950		.name = "blsp2_qup4_spi_apps_clk_src",
 951		.parent_names = gcc_xo_gpll0,
 952		.num_parents = 2,
 953		.ops = &clk_rcg2_ops,
 954	},
 955};
 956
 957static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
 958	.cmd_rcgr = 0x2c020,
 959	.hid_width = 5,
 960	.parent_map = gcc_xo_gpll0_map,
 961	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
 962	.clkr.hw.init = &(struct clk_init_data){
 963		.name = "blsp2_qup4_i2c_apps_clk_src",
 964		.parent_names = gcc_xo_gpll0,
 965		.num_parents = 2,
 966		.ops = &clk_rcg2_ops,
 967	},
 968};
 969
 970static struct clk_rcg2 blsp2_uart4_apps_clk_src = {
 971	.cmd_rcgr = 0x2d00c,
 972	.mnd_width = 16,
 973	.hid_width = 5,
 974	.parent_map = gcc_xo_gpll0_map,
 975	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
 976	.clkr.hw.init = &(struct clk_init_data){
 977		.name = "blsp2_uart4_apps_clk_src",
 978		.parent_names = gcc_xo_gpll0,
 979		.num_parents = 2,
 980		.ops = &clk_rcg2_ops,
 981	},
 982};
 983
 984static struct clk_rcg2 blsp2_qup5_spi_apps_clk_src = {
 985	.cmd_rcgr = 0x2e00c,
 986	.mnd_width = 8,
 987	.hid_width = 5,
 988	.parent_map = gcc_xo_gpll0_map,
 989	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
 990	.clkr.hw.init = &(struct clk_init_data){
 991		.name = "blsp2_qup5_spi_apps_clk_src",
 992		.parent_names = gcc_xo_gpll0,
 993		.num_parents = 2,
 994		.ops = &clk_rcg2_ops,
 995	},
 996};
 997
 998static struct clk_rcg2 blsp2_qup5_i2c_apps_clk_src = {
 999	.cmd_rcgr = 0x2e020,
1000	.hid_width = 5,
1001	.parent_map = gcc_xo_gpll0_map,
1002	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
1003	.clkr.hw.init = &(struct clk_init_data){
1004		.name = "blsp2_qup5_i2c_apps_clk_src",
1005		.parent_names = gcc_xo_gpll0,
1006		.num_parents = 2,
1007		.ops = &clk_rcg2_ops,
1008	},
1009};
1010
1011static struct clk_rcg2 blsp2_uart5_apps_clk_src = {
1012	.cmd_rcgr = 0x2f00c,
1013	.mnd_width = 16,
1014	.hid_width = 5,
1015	.parent_map = gcc_xo_gpll0_map,
1016	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
1017	.clkr.hw.init = &(struct clk_init_data){
1018		.name = "blsp2_uart5_apps_clk_src",
1019		.parent_names = gcc_xo_gpll0,
1020		.num_parents = 2,
1021		.ops = &clk_rcg2_ops,
1022	},
1023};
1024
1025static struct clk_rcg2 blsp2_qup6_spi_apps_clk_src = {
1026	.cmd_rcgr = 0x3000c,
1027	.mnd_width = 8,
1028	.hid_width = 5,
1029	.parent_map = gcc_xo_gpll0_map,
1030	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
1031	.clkr.hw.init = &(struct clk_init_data){
1032		.name = "blsp2_qup6_spi_apps_clk_src",
1033		.parent_names = gcc_xo_gpll0,
1034		.num_parents = 2,
1035		.ops = &clk_rcg2_ops,
1036	},
1037};
1038
1039static struct clk_rcg2 blsp2_qup6_i2c_apps_clk_src = {
1040	.cmd_rcgr = 0x30020,
1041	.hid_width = 5,
1042	.parent_map = gcc_xo_gpll0_map,
1043	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
1044	.clkr.hw.init = &(struct clk_init_data){
1045		.name = "blsp2_qup6_i2c_apps_clk_src",
1046		.parent_names = gcc_xo_gpll0,
1047		.num_parents = 2,
1048		.ops = &clk_rcg2_ops,
1049	},
1050};
1051
1052static struct clk_rcg2 blsp2_uart6_apps_clk_src = {
1053	.cmd_rcgr = 0x3100c,
1054	.mnd_width = 16,
1055	.hid_width = 5,
1056	.parent_map = gcc_xo_gpll0_map,
1057	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
1058	.clkr.hw.init = &(struct clk_init_data){
1059		.name = "blsp2_uart6_apps_clk_src",
1060		.parent_names = gcc_xo_gpll0,
1061		.num_parents = 2,
1062		.ops = &clk_rcg2_ops,
1063	},
1064};
1065
1066static const struct freq_tbl ftbl_pdm2_clk_src[] = {
1067	F(60000000, P_GPLL0, 10, 0, 0),
1068	{ }
1069};
1070
1071static struct clk_rcg2 pdm2_clk_src = {
1072	.cmd_rcgr = 0x33010,
1073	.hid_width = 5,
1074	.parent_map = gcc_xo_gpll0_map,
1075	.freq_tbl = ftbl_pdm2_clk_src,
1076	.clkr.hw.init = &(struct clk_init_data){
1077		.name = "pdm2_clk_src",
1078		.parent_names = gcc_xo_gpll0,
1079		.num_parents = 2,
1080		.ops = &clk_rcg2_ops,
1081	},
1082};
1083
1084static const struct freq_tbl ftbl_tsif_ref_clk_src[] = {
1085	F(105495, P_XO, 1, 1, 182),
1086	{ }
1087};
1088
1089static struct clk_rcg2 tsif_ref_clk_src = {
1090	.cmd_rcgr = 0x36010,
1091	.mnd_width = 8,
1092	.hid_width = 5,
1093	.parent_map = gcc_xo_gpll0_aud_ref_clk_map,
1094	.freq_tbl = ftbl_tsif_ref_clk_src,
1095	.clkr.hw.init = &(struct clk_init_data){
1096		.name = "tsif_ref_clk_src",
1097		.parent_names = gcc_xo_gpll0_aud_ref_clk,
1098		.num_parents = 3,
1099		.ops = &clk_rcg2_ops,
1100	},
1101};
1102
1103static struct clk_rcg2 gcc_sleep_clk_src = {
1104	.cmd_rcgr = 0x43014,
1105	.hid_width = 5,
1106	.parent_map = gcc_sleep_clk_map,
1107	.clkr.hw.init = &(struct clk_init_data){
1108		.name = "gcc_sleep_clk_src",
1109		.parent_names = gcc_sleep_clk,
1110		.num_parents = 1,
1111		.ops = &clk_rcg2_ops,
1112	},
1113};
1114
1115static struct clk_rcg2 hmss_rbcpr_clk_src = {
1116	.cmd_rcgr = 0x48040,
1117	.hid_width = 5,
1118	.parent_map = gcc_xo_gpll0_map,
1119	.freq_tbl = ftbl_usb30_mock_utmi_clk_src,
1120	.clkr.hw.init = &(struct clk_init_data){
1121		.name = "hmss_rbcpr_clk_src",
1122		.parent_names = gcc_xo_gpll0,
1123		.num_parents = 2,
1124		.ops = &clk_rcg2_ops,
1125	},
1126};
1127
1128static struct clk_rcg2 hmss_gpll0_clk_src = {
1129	.cmd_rcgr = 0x48058,
1130	.hid_width = 5,
1131	.parent_map = gcc_xo_gpll0_map,
1132	.clkr.hw.init = &(struct clk_init_data){
1133		.name = "hmss_gpll0_clk_src",
1134		.parent_names = gcc_xo_gpll0,
1135		.num_parents = 2,
1136		.ops = &clk_rcg2_ops,
1137	},
1138};
1139
1140static const struct freq_tbl ftbl_gp1_clk_src[] = {
1141	F(19200000, P_XO, 1, 0, 0),
1142	F(100000000, P_GPLL0, 6, 0, 0),
1143	F(200000000, P_GPLL0, 3, 0, 0),
1144	{ }
1145};
1146
1147static struct clk_rcg2 gp1_clk_src = {
1148	.cmd_rcgr = 0x64004,
1149	.mnd_width = 8,
1150	.hid_width = 5,
1151	.parent_map = gcc_xo_gpll0_sleep_clk_gpll0_early_div_map,
1152	.freq_tbl = ftbl_gp1_clk_src,
1153	.clkr.hw.init = &(struct clk_init_data){
1154		.name = "gp1_clk_src",
1155		.parent_names = gcc_xo_gpll0_sleep_clk_gpll0_early_div,
1156		.num_parents = 4,
1157		.ops = &clk_rcg2_ops,
1158	},
1159};
1160
1161static struct clk_rcg2 gp2_clk_src = {
1162	.cmd_rcgr = 0x65004,
1163	.mnd_width = 8,
1164	.hid_width = 5,
1165	.parent_map = gcc_xo_gpll0_sleep_clk_gpll0_early_div_map,
1166	.freq_tbl = ftbl_gp1_clk_src,
1167	.clkr.hw.init = &(struct clk_init_data){
1168		.name = "gp2_clk_src",
1169		.parent_names = gcc_xo_gpll0_sleep_clk_gpll0_early_div,
1170		.num_parents = 4,
1171		.ops = &clk_rcg2_ops,
1172	},
1173};
1174
1175static struct clk_rcg2 gp3_clk_src = {
1176	.cmd_rcgr = 0x66004,
1177	.mnd_width = 8,
1178	.hid_width = 5,
1179	.parent_map = gcc_xo_gpll0_sleep_clk_gpll0_early_div_map,
1180	.freq_tbl = ftbl_gp1_clk_src,
1181	.clkr.hw.init = &(struct clk_init_data){
1182		.name = "gp3_clk_src",
1183		.parent_names = gcc_xo_gpll0_sleep_clk_gpll0_early_div,
1184		.num_parents = 4,
1185		.ops = &clk_rcg2_ops,
1186	},
1187};
1188
1189static const struct freq_tbl ftbl_pcie_aux_clk_src[] = {
1190	F(1010526, P_XO, 1, 1, 19),
1191	{ }
1192};
1193
1194static struct clk_rcg2 pcie_aux_clk_src = {
1195	.cmd_rcgr = 0x6c000,
1196	.mnd_width = 16,
1197	.hid_width = 5,
1198	.parent_map = gcc_xo_sleep_clk_map,
1199	.freq_tbl = ftbl_pcie_aux_clk_src,
1200	.clkr.hw.init = &(struct clk_init_data){
1201		.name = "pcie_aux_clk_src",
1202		.parent_names = gcc_xo_sleep_clk,
1203		.num_parents = 2,
1204		.ops = &clk_rcg2_ops,
1205	},
1206};
1207
1208static const struct freq_tbl ftbl_ufs_axi_clk_src[] = {
1209	F(100000000, P_GPLL0, 6, 0, 0),
1210	F(200000000, P_GPLL0, 3, 0, 0),
1211	F(240000000, P_GPLL0, 2.5, 0, 0),
1212	{ }
1213};
1214
1215static struct clk_rcg2 ufs_axi_clk_src = {
1216	.cmd_rcgr = 0x75024,
1217	.mnd_width = 8,
1218	.hid_width = 5,
1219	.parent_map = gcc_xo_gpll0_map,
1220	.freq_tbl = ftbl_ufs_axi_clk_src,
1221	.clkr.hw.init = &(struct clk_init_data){
1222		.name = "ufs_axi_clk_src",
1223		.parent_names = gcc_xo_gpll0,
1224		.num_parents = 2,
1225		.ops = &clk_rcg2_ops,
1226	},
1227};
1228
1229static const struct freq_tbl ftbl_ufs_ice_core_clk_src[] = {
1230	F(19200000, P_XO, 1, 0, 0),
1231	F(150000000, P_GPLL0, 4, 0, 0),
1232	F(300000000, P_GPLL0, 2, 0, 0),
1233	{ }
1234};
1235
1236static struct clk_rcg2 ufs_ice_core_clk_src = {
1237	.cmd_rcgr = 0x76014,
1238	.hid_width = 5,
1239	.parent_map = gcc_xo_gpll0_map,
1240	.freq_tbl = ftbl_ufs_ice_core_clk_src,
1241	.clkr.hw.init = &(struct clk_init_data){
1242		.name = "ufs_ice_core_clk_src",
1243		.parent_names = gcc_xo_gpll0,
1244		.num_parents = 2,
1245		.ops = &clk_rcg2_ops,
1246	},
1247};
1248
1249static const struct freq_tbl ftbl_qspi_ser_clk_src[] = {
1250	F(75000000, P_GPLL0, 8, 0, 0),
1251	F(150000000, P_GPLL0, 4, 0, 0),
1252	F(256000000, P_GPLL4, 1.5, 0, 0),
1253	F(300000000, P_GPLL0, 2, 0, 0),
1254	{ }
1255};
1256
1257static struct clk_rcg2 qspi_ser_clk_src = {
1258	.cmd_rcgr = 0x8b00c,
1259	.hid_width = 5,
1260	.parent_map = gcc_xo_gpll0_gpll1_early_div_gpll1_gpll4_gpll0_early_div_map,
1261	.freq_tbl = ftbl_qspi_ser_clk_src,
1262	.clkr.hw.init = &(struct clk_init_data){
1263		.name = "qspi_ser_clk_src",
1264		.parent_names = gcc_xo_gpll0_gpll1_early_div_gpll1_gpll4_gpll0_early_div,
1265		.num_parents = 6,
1266		.ops = &clk_rcg2_ops,
1267	},
1268};
1269
1270static struct clk_branch gcc_sys_noc_usb3_axi_clk = {
1271	.halt_reg = 0x0f03c,
1272	.clkr = {
1273		.enable_reg = 0x0f03c,
1274		.enable_mask = BIT(0),
1275		.hw.init = &(struct clk_init_data){
1276			.name = "gcc_sys_noc_usb3_axi_clk",
1277			.parent_names = (const char *[]){ "usb30_master_clk_src" },
1278			.num_parents = 1,
1279			.flags = CLK_SET_RATE_PARENT,
1280			.ops = &clk_branch2_ops,
1281		},
1282	},
1283};
1284
1285static struct clk_branch gcc_sys_noc_ufs_axi_clk = {
1286	.halt_reg = 0x75038,
1287	.clkr = {
1288		.enable_reg = 0x75038,
1289		.enable_mask = BIT(0),
1290		.hw.init = &(struct clk_init_data){
1291			.name = "gcc_sys_noc_ufs_axi_clk",
1292			.parent_names = (const char *[]){ "ufs_axi_clk_src" },
1293			.num_parents = 1,
1294			.flags = CLK_SET_RATE_PARENT,
1295			.ops = &clk_branch2_ops,
1296		},
1297	},
1298};
1299
1300static struct clk_branch gcc_periph_noc_usb20_ahb_clk = {
1301	.halt_reg = 0x6010,
1302	.clkr = {
1303		.enable_reg = 0x6010,
1304		.enable_mask = BIT(0),
1305		.hw.init = &(struct clk_init_data){
1306			.name = "gcc_periph_noc_usb20_ahb_clk",
1307			.parent_names = (const char *[]){ "usb20_master_clk_src" },
1308			.num_parents = 1,
1309			.flags = CLK_SET_RATE_PARENT,
1310			.ops = &clk_branch2_ops,
1311		},
1312	},
1313};
1314
1315static struct clk_branch gcc_mmss_noc_cfg_ahb_clk = {
1316	.halt_reg = 0x9008,
1317	.clkr = {
1318		.enable_reg = 0x9008,
1319		.enable_mask = BIT(0),
1320		.hw.init = &(struct clk_init_data){
1321			.name = "gcc_mmss_noc_cfg_ahb_clk",
1322			.parent_names = (const char *[]){ "config_noc_clk_src" },
1323			.num_parents = 1,
1324			.flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
1325			.ops = &clk_branch2_ops,
1326		},
1327	},
1328};
1329
1330static struct clk_branch gcc_mmss_bimc_gfx_clk = {
1331	.halt_reg = 0x9010,
1332	.clkr = {
1333		.enable_reg = 0x9010,
1334		.enable_mask = BIT(0),
1335		.hw.init = &(struct clk_init_data){
1336			.name = "gcc_mmss_bimc_gfx_clk",
1337			.flags = CLK_SET_RATE_PARENT,
1338			.ops = &clk_branch2_ops,
1339		},
1340	},
1341};
1342
1343static struct clk_branch gcc_usb30_master_clk = {
1344	.halt_reg = 0x0f008,
1345	.clkr = {
1346		.enable_reg = 0x0f008,
1347		.enable_mask = BIT(0),
1348		.hw.init = &(struct clk_init_data){
1349			.name = "gcc_usb30_master_clk",
1350			.parent_names = (const char *[]){ "usb30_master_clk_src" },
1351			.num_parents = 1,
1352			.flags = CLK_SET_RATE_PARENT,
1353			.ops = &clk_branch2_ops,
1354		},
1355	},
1356};
1357
1358static struct clk_branch gcc_usb30_sleep_clk = {
1359	.halt_reg = 0x0f00c,
1360	.clkr = {
1361		.enable_reg = 0x0f00c,
1362		.enable_mask = BIT(0),
1363		.hw.init = &(struct clk_init_data){
1364			.name = "gcc_usb30_sleep_clk",
1365			.parent_names = (const char *[]){ "gcc_sleep_clk_src" },
1366			.num_parents = 1,
1367			.flags = CLK_SET_RATE_PARENT,
1368			.ops = &clk_branch2_ops,
1369		},
1370	},
1371};
1372
1373static struct clk_branch gcc_usb30_mock_utmi_clk = {
1374	.halt_reg = 0x0f010,
1375	.clkr = {
1376		.enable_reg = 0x0f010,
1377		.enable_mask = BIT(0),
1378		.hw.init = &(struct clk_init_data){
1379			.name = "gcc_usb30_mock_utmi_clk",
1380			.parent_names = (const char *[]){ "usb30_mock_utmi_clk_src" },
1381			.num_parents = 1,
1382			.flags = CLK_SET_RATE_PARENT,
1383			.ops = &clk_branch2_ops,
1384		},
1385	},
1386};
1387
1388static struct clk_branch gcc_usb3_phy_aux_clk = {
1389	.halt_reg = 0x50000,
1390	.clkr = {
1391		.enable_reg = 0x50000,
1392		.enable_mask = BIT(0),
1393		.hw.init = &(struct clk_init_data){
1394			.name = "gcc_usb3_phy_aux_clk",
1395			.parent_names = (const char *[]){ "usb3_phy_aux_clk_src" },
1396			.num_parents = 1,
1397			.flags = CLK_SET_RATE_PARENT,
1398			.ops = &clk_branch2_ops,
1399		},
1400	},
1401};
1402
1403static struct clk_branch gcc_usb3_phy_pipe_clk = {
1404	.halt_reg = 0x50004,
1405	.halt_check = BRANCH_HALT_SKIP,
1406	.clkr = {
1407		.enable_reg = 0x50004,
1408		.enable_mask = BIT(0),
1409		.hw.init = &(struct clk_init_data){
1410			.name = "gcc_usb3_phy_pipe_clk",
1411			.parent_names = (const char *[]){ "usb3_phy_pipe_clk_src" },
1412			.num_parents = 1,
1413			.flags = CLK_SET_RATE_PARENT,
1414			.ops = &clk_branch2_ops,
1415		},
1416	},
1417};
1418
1419static struct clk_branch gcc_usb20_master_clk = {
1420	.halt_reg = 0x12004,
1421	.clkr = {
1422		.enable_reg = 0x12004,
1423		.enable_mask = BIT(0),
1424		.hw.init = &(struct clk_init_data){
1425			.name = "gcc_usb20_master_clk",
1426			.parent_names = (const char *[]){ "usb20_master_clk_src" },
1427			.num_parents = 1,
1428			.flags = CLK_SET_RATE_PARENT,
1429			.ops = &clk_branch2_ops,
1430		},
1431	},
1432};
1433
1434static struct clk_branch gcc_usb20_sleep_clk = {
1435	.halt_reg = 0x12008,
1436	.clkr = {
1437		.enable_reg = 0x12008,
1438		.enable_mask = BIT(0),
1439		.hw.init = &(struct clk_init_data){
1440			.name = "gcc_usb20_sleep_clk",
1441			.parent_names = (const char *[]){ "gcc_sleep_clk_src" },
1442			.num_parents = 1,
1443			.flags = CLK_SET_RATE_PARENT,
1444			.ops = &clk_branch2_ops,
1445		},
1446	},
1447};
1448
1449static struct clk_branch gcc_usb20_mock_utmi_clk = {
1450	.halt_reg = 0x1200c,
1451	.clkr = {
1452		.enable_reg = 0x1200c,
1453		.enable_mask = BIT(0),
1454		.hw.init = &(struct clk_init_data){
1455			.name = "gcc_usb20_mock_utmi_clk",
1456			.parent_names = (const char *[]){ "usb20_mock_utmi_clk_src" },
1457			.num_parents = 1,
1458			.flags = CLK_SET_RATE_PARENT,
1459			.ops = &clk_branch2_ops,
1460		},
1461	},
1462};
1463
1464static struct clk_branch gcc_usb_phy_cfg_ahb2phy_clk = {
1465	.halt_reg = 0x6a004,
1466	.clkr = {
1467		.enable_reg = 0x6a004,
1468		.enable_mask = BIT(0),
1469		.hw.init = &(struct clk_init_data){
1470			.name = "gcc_usb_phy_cfg_ahb2phy_clk",
1471			.parent_names = (const char *[]){ "periph_noc_clk_src" },
1472			.num_parents = 1,
1473			.flags = CLK_SET_RATE_PARENT,
1474			.ops = &clk_branch2_ops,
1475		},
1476	},
1477};
1478
1479static struct clk_branch gcc_sdcc1_apps_clk = {
1480	.halt_reg = 0x13004,
1481	.clkr = {
1482		.enable_reg = 0x13004,
1483		.enable_mask = BIT(0),
1484		.hw.init = &(struct clk_init_data){
1485			.name = "gcc_sdcc1_apps_clk",
1486			.parent_names = (const char *[]){ "sdcc1_apps_clk_src" },
1487			.num_parents = 1,
1488			.flags = CLK_SET_RATE_PARENT,
1489			.ops = &clk_branch2_ops,
1490		},
1491	},
1492};
1493
1494static struct clk_branch gcc_sdcc1_ahb_clk = {
1495	.halt_reg = 0x13008,
1496	.clkr = {
1497		.enable_reg = 0x13008,
1498		.enable_mask = BIT(0),
1499		.hw.init = &(struct clk_init_data){
1500			.name = "gcc_sdcc1_ahb_clk",
1501			.parent_names = (const char *[]){ "periph_noc_clk_src" },
1502			.num_parents = 1,
1503			.flags = CLK_SET_RATE_PARENT,
1504			.ops = &clk_branch2_ops,
1505		},
1506	},
1507};
1508
1509static struct clk_branch gcc_sdcc1_ice_core_clk = {
1510	.halt_reg = 0x13038,
1511	.clkr = {
1512		.enable_reg = 0x13038,
1513		.enable_mask = BIT(0),
1514		.hw.init = &(struct clk_init_data){
1515			.name = "gcc_sdcc1_ice_core_clk",
1516			.parent_names = (const char *[]){ "sdcc1_ice_core_clk_src" },
1517			.num_parents = 1,
1518			.flags = CLK_SET_RATE_PARENT,
1519			.ops = &clk_branch2_ops,
1520		},
1521	},
1522};
1523
1524static struct clk_branch gcc_sdcc2_apps_clk = {
1525	.halt_reg = 0x14004,
1526	.clkr = {
1527		.enable_reg = 0x14004,
1528		.enable_mask = BIT(0),
1529		.hw.init = &(struct clk_init_data){
1530			.name = "gcc_sdcc2_apps_clk",
1531			.parent_names = (const char *[]){ "sdcc2_apps_clk_src" },
1532			.num_parents = 1,
1533			.flags = CLK_SET_RATE_PARENT,
1534			.ops = &clk_branch2_ops,
1535		},
1536	},
1537};
1538
1539static struct clk_branch gcc_sdcc2_ahb_clk = {
1540	.halt_reg = 0x14008,
1541	.clkr = {
1542		.enable_reg = 0x14008,
1543		.enable_mask = BIT(0),
1544		.hw.init = &(struct clk_init_data){
1545			.name = "gcc_sdcc2_ahb_clk",
1546			.parent_names = (const char *[]){ "periph_noc_clk_src" },
1547			.num_parents = 1,
1548			.flags = CLK_SET_RATE_PARENT,
1549			.ops = &clk_branch2_ops,
1550		},
1551	},
1552};
1553
1554static struct clk_branch gcc_sdcc3_apps_clk = {
1555	.halt_reg = 0x15004,
1556	.clkr = {
1557		.enable_reg = 0x15004,
1558		.enable_mask = BIT(0),
1559		.hw.init = &(struct clk_init_data){
1560			.name = "gcc_sdcc3_apps_clk",
1561			.parent_names = (const char *[]){ "sdcc3_apps_clk_src" },
1562			.num_parents = 1,
1563			.flags = CLK_SET_RATE_PARENT,
1564			.ops = &clk_branch2_ops,
1565		},
1566	},
1567};
1568
1569static struct clk_branch gcc_sdcc3_ahb_clk = {
1570	.halt_reg = 0x15008,
1571	.clkr = {
1572		.enable_reg = 0x15008,
1573		.enable_mask = BIT(0),
1574		.hw.init = &(struct clk_init_data){
1575			.name = "gcc_sdcc3_ahb_clk",
1576			.parent_names = (const char *[]){ "periph_noc_clk_src" },
1577			.num_parents = 1,
1578			.flags = CLK_SET_RATE_PARENT,
1579			.ops = &clk_branch2_ops,
1580		},
1581	},
1582};
1583
1584static struct clk_branch gcc_sdcc4_apps_clk = {
1585	.halt_reg = 0x16004,
1586	.clkr = {
1587		.enable_reg = 0x16004,
1588		.enable_mask = BIT(0),
1589		.hw.init = &(struct clk_init_data){
1590			.name = "gcc_sdcc4_apps_clk",
1591			.parent_names = (const char *[]){ "sdcc4_apps_clk_src" },
1592			.num_parents = 1,
1593			.flags = CLK_SET_RATE_PARENT,
1594			.ops = &clk_branch2_ops,
1595		},
1596	},
1597};
1598
1599static struct clk_branch gcc_sdcc4_ahb_clk = {
1600	.halt_reg = 0x16008,
1601	.clkr = {
1602		.enable_reg = 0x16008,
1603		.enable_mask = BIT(0),
1604		.hw.init = &(struct clk_init_data){
1605			.name = "gcc_sdcc4_ahb_clk",
1606			.parent_names = (const char *[]){ "periph_noc_clk_src" },
1607			.num_parents = 1,
1608			.flags = CLK_SET_RATE_PARENT,
1609			.ops = &clk_branch2_ops,
1610		},
1611	},
1612};
1613
1614static struct clk_branch gcc_blsp1_ahb_clk = {
1615	.halt_reg = 0x17004,
1616	.halt_check = BRANCH_HALT_VOTED,
1617	.clkr = {
1618		.enable_reg = 0x52004,
1619		.enable_mask = BIT(17),
1620		.hw.init = &(struct clk_init_data){
1621			.name = "gcc_blsp1_ahb_clk",
1622			.parent_names = (const char *[]){ "periph_noc_clk_src" },
1623			.num_parents = 1,
1624			.flags = CLK_SET_RATE_PARENT,
1625			.ops = &clk_branch2_ops,
1626		},
1627	},
1628};
1629
1630static struct clk_branch gcc_blsp1_sleep_clk = {
1631	.halt_reg = 0x17008,
1632	.halt_check = BRANCH_HALT_VOTED,
1633	.clkr = {
1634		.enable_reg = 0x52004,
1635		.enable_mask = BIT(16),
1636		.hw.init = &(struct clk_init_data){
1637			.name = "gcc_blsp1_sleep_clk",
1638			.parent_names = (const char *[]){ "gcc_sleep_clk_src" },
1639			.num_parents = 1,
1640			.flags = CLK_SET_RATE_PARENT,
1641			.ops = &clk_branch2_ops,
1642		},
1643	},
1644};
1645
1646static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1647	.halt_reg = 0x19004,
1648	.clkr = {
1649		.enable_reg = 0x19004,
1650		.enable_mask = BIT(0),
1651		.hw.init = &(struct clk_init_data){
1652			.name = "gcc_blsp1_qup1_spi_apps_clk",
1653			.parent_names = (const char *[]){ "blsp1_qup1_spi_apps_clk_src" },
1654			.num_parents = 1,
1655			.flags = CLK_SET_RATE_PARENT,
1656			.ops = &clk_branch2_ops,
1657		},
1658	},
1659};
1660
1661static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1662	.halt_reg = 0x19008,
1663	.clkr = {
1664		.enable_reg = 0x19008,
1665		.enable_mask = BIT(0),
1666		.hw.init = &(struct clk_init_data){
1667			.name = "gcc_blsp1_qup1_i2c_apps_clk",
1668			.parent_names = (const char *[]){ "blsp1_qup1_i2c_apps_clk_src" },
1669			.num_parents = 1,
1670			.flags = CLK_SET_RATE_PARENT,
1671			.ops = &clk_branch2_ops,
1672		},
1673	},
1674};
1675
1676static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1677	.halt_reg = 0x1a004,
1678	.clkr = {
1679		.enable_reg = 0x1a004,
1680		.enable_mask = BIT(0),
1681		.hw.init = &(struct clk_init_data){
1682			.name = "gcc_blsp1_uart1_apps_clk",
1683			.parent_names = (const char *[]){ "blsp1_uart1_apps_clk_src" },
1684			.num_parents = 1,
1685			.flags = CLK_SET_RATE_PARENT,
1686			.ops = &clk_branch2_ops,
1687		},
1688	},
1689};
1690
1691static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1692	.halt_reg = 0x1b004,
1693	.clkr = {
1694		.enable_reg = 0x1b004,
1695		.enable_mask = BIT(0),
1696		.hw.init = &(struct clk_init_data){
1697			.name = "gcc_blsp1_qup2_spi_apps_clk",
1698			.parent_names = (const char *[]){ "blsp1_qup2_spi_apps_clk_src" },
1699			.num_parents = 1,
1700			.flags = CLK_SET_RATE_PARENT,
1701			.ops = &clk_branch2_ops,
1702		},
1703	},
1704};
1705
1706static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1707	.halt_reg = 0x1b008,
1708	.clkr = {
1709		.enable_reg = 0x1b008,
1710		.enable_mask = BIT(0),
1711		.hw.init = &(struct clk_init_data){
1712			.name = "gcc_blsp1_qup2_i2c_apps_clk",
1713			.parent_names = (const char *[]){ "blsp1_qup2_i2c_apps_clk_src" },
1714			.num_parents = 1,
1715			.flags = CLK_SET_RATE_PARENT,
1716			.ops = &clk_branch2_ops,
1717		},
1718	},
1719};
1720
1721static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1722	.halt_reg = 0x1c004,
1723	.clkr = {
1724		.enable_reg = 0x1c004,
1725		.enable_mask = BIT(0),
1726		.hw.init = &(struct clk_init_data){
1727			.name = "gcc_blsp1_uart2_apps_clk",
1728			.parent_names = (const char *[]){ "blsp1_uart2_apps_clk_src" },
1729			.num_parents = 1,
1730			.flags = CLK_SET_RATE_PARENT,
1731			.ops = &clk_branch2_ops,
1732		},
1733	},
1734};
1735
1736static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1737	.halt_reg = 0x1d004,
1738	.clkr = {
1739		.enable_reg = 0x1d004,
1740		.enable_mask = BIT(0),
1741		.hw.init = &(struct clk_init_data){
1742			.name = "gcc_blsp1_qup3_spi_apps_clk",
1743			.parent_names = (const char *[]){ "blsp1_qup3_spi_apps_clk_src" },
1744			.num_parents = 1,
1745			.flags = CLK_SET_RATE_PARENT,
1746			.ops = &clk_branch2_ops,
1747		},
1748	},
1749};
1750
1751static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1752	.halt_reg = 0x1d008,
1753	.clkr = {
1754		.enable_reg = 0x1d008,
1755		.enable_mask = BIT(0),
1756		.hw.init = &(struct clk_init_data){
1757			.name = "gcc_blsp1_qup3_i2c_apps_clk",
1758			.parent_names = (const char *[]){ "blsp1_qup3_i2c_apps_clk_src" },
1759			.num_parents = 1,
1760			.flags = CLK_SET_RATE_PARENT,
1761			.ops = &clk_branch2_ops,
1762		},
1763	},
1764};
1765
1766static struct clk_branch gcc_blsp1_uart3_apps_clk = {
1767	.halt_reg = 0x1e004,
1768	.clkr = {
1769		.enable_reg = 0x1e004,
1770		.enable_mask = BIT(0),
1771		.hw.init = &(struct clk_init_data){
1772			.name = "gcc_blsp1_uart3_apps_clk",
1773			.parent_names = (const char *[]){ "blsp1_uart3_apps_clk_src" },
1774			.num_parents = 1,
1775			.flags = CLK_SET_RATE_PARENT,
1776			.ops = &clk_branch2_ops,
1777		},
1778	},
1779};
1780
1781static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1782	.halt_reg = 0x1f004,
1783	.clkr = {
1784		.enable_reg = 0x1f004,
1785		.enable_mask = BIT(0),
1786		.hw.init = &(struct clk_init_data){
1787			.name = "gcc_blsp1_qup4_spi_apps_clk",
1788			.parent_names = (const char *[]){ "blsp1_qup4_spi_apps_clk_src" },
1789			.num_parents = 1,
1790			.flags = CLK_SET_RATE_PARENT,
1791			.ops = &clk_branch2_ops,
1792		},
1793	},
1794};
1795
1796static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1797	.halt_reg = 0x1f008,
1798	.clkr = {
1799		.enable_reg = 0x1f008,
1800		.enable_mask = BIT(0),
1801		.hw.init = &(struct clk_init_data){
1802			.name = "gcc_blsp1_qup4_i2c_apps_clk",
1803			.parent_names = (const char *[]){ "blsp1_qup4_i2c_apps_clk_src" },
1804			.num_parents = 1,
1805			.flags = CLK_SET_RATE_PARENT,
1806			.ops = &clk_branch2_ops,
1807		},
1808	},
1809};
1810
1811static struct clk_branch gcc_blsp1_uart4_apps_clk = {
1812	.halt_reg = 0x20004,
1813	.clkr = {
1814		.enable_reg = 0x20004,
1815		.enable_mask = BIT(0),
1816		.hw.init = &(struct clk_init_data){
1817			.name = "gcc_blsp1_uart4_apps_clk",
1818			.parent_names = (const char *[]){ "blsp1_uart4_apps_clk_src" },
1819			.num_parents = 1,
1820			.flags = CLK_SET_RATE_PARENT,
1821			.ops = &clk_branch2_ops,
1822		},
1823	},
1824};
1825
1826static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
1827	.halt_reg = 0x21004,
1828	.clkr = {
1829		.enable_reg = 0x21004,
1830		.enable_mask = BIT(0),
1831		.hw.init = &(struct clk_init_data){
1832			.name = "gcc_blsp1_qup5_spi_apps_clk",
1833			.parent_names = (const char *[]){ "blsp1_qup5_spi_apps_clk_src" },
1834			.num_parents = 1,
1835			.flags = CLK_SET_RATE_PARENT,
1836			.ops = &clk_branch2_ops,
1837		},
1838	},
1839};
1840
1841static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
1842	.halt_reg = 0x21008,
1843	.clkr = {
1844		.enable_reg = 0x21008,
1845		.enable_mask = BIT(0),
1846		.hw.init = &(struct clk_init_data){
1847			.name = "gcc_blsp1_qup5_i2c_apps_clk",
1848			.parent_names = (const char *[]){ "blsp1_qup5_i2c_apps_clk_src" },
1849			.num_parents = 1,
1850			.flags = CLK_SET_RATE_PARENT,
1851			.ops = &clk_branch2_ops,
1852		},
1853	},
1854};
1855
1856static struct clk_branch gcc_blsp1_uart5_apps_clk = {
1857	.halt_reg = 0x22004,
1858	.clkr = {
1859		.enable_reg = 0x22004,
1860		.enable_mask = BIT(0),
1861		.hw.init = &(struct clk_init_data){
1862			.name = "gcc_blsp1_uart5_apps_clk",
1863			.parent_names = (const char *[]){ "blsp1_uart5_apps_clk_src" },
1864			.num_parents = 1,
1865			.flags = CLK_SET_RATE_PARENT,
1866			.ops = &clk_branch2_ops,
1867		},
1868	},
1869};
1870
1871static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
1872	.halt_reg = 0x23004,
1873	.clkr = {
1874		.enable_reg = 0x23004,
1875		.enable_mask = BIT(0),
1876		.hw.init = &(struct clk_init_data){
1877			.name = "gcc_blsp1_qup6_spi_apps_clk",
1878			.parent_names = (const char *[]){ "blsp1_qup6_spi_apps_clk_src" },
1879			.num_parents = 1,
1880			.flags = CLK_SET_RATE_PARENT,
1881			.ops = &clk_branch2_ops,
1882		},
1883	},
1884};
1885
1886static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
1887	.halt_reg = 0x23008,
1888	.clkr = {
1889		.enable_reg = 0x23008,
1890		.enable_mask = BIT(0),
1891		.hw.init = &(struct clk_init_data){
1892			.name = "gcc_blsp1_qup6_i2c_apps_clk",
1893			.parent_names = (const char *[]){ "blsp1_qup6_i2c_apps_clk_src" },
1894			.num_parents = 1,
1895			.flags = CLK_SET_RATE_PARENT,
1896			.ops = &clk_branch2_ops,
1897		},
1898	},
1899};
1900
1901static struct clk_branch gcc_blsp1_uart6_apps_clk = {
1902	.halt_reg = 0x24004,
1903	.clkr = {
1904		.enable_reg = 0x24004,
1905		.enable_mask = BIT(0),
1906		.hw.init = &(struct clk_init_data){
1907			.name = "gcc_blsp1_uart6_apps_clk",
1908			.parent_names = (const char *[]){ "blsp1_uart6_apps_clk_src" },
1909			.num_parents = 1,
1910			.flags = CLK_SET_RATE_PARENT,
1911			.ops = &clk_branch2_ops,
1912		},
1913	},
1914};
1915
1916static struct clk_branch gcc_blsp2_ahb_clk = {
1917	.halt_reg = 0x25004,
1918	.halt_check = BRANCH_HALT_VOTED,
1919	.clkr = {
1920		.enable_reg = 0x52004,
1921		.enable_mask = BIT(15),
1922		.hw.init = &(struct clk_init_data){
1923			.name = "gcc_blsp2_ahb_clk",
1924			.parent_names = (const char *[]){ "periph_noc_clk_src" },
1925			.num_parents = 1,
1926			.flags = CLK_SET_RATE_PARENT,
1927			.ops = &clk_branch2_ops,
1928		},
1929	},
1930};
1931
1932static struct clk_branch gcc_blsp2_sleep_clk = {
1933	.halt_reg = 0x25008,
1934	.halt_check = BRANCH_HALT_VOTED,
1935	.clkr = {
1936		.enable_reg = 0x52004,
1937		.enable_mask = BIT(14),
1938		.hw.init = &(struct clk_init_data){
1939			.name = "gcc_blsp2_sleep_clk",
1940			.parent_names = (const char *[]){ "gcc_sleep_clk_src" },
1941			.num_parents = 1,
1942			.flags = CLK_SET_RATE_PARENT,
1943			.ops = &clk_branch2_ops,
1944		},
1945	},
1946};
1947
1948static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
1949	.halt_reg = 0x26004,
1950	.clkr = {
1951		.enable_reg = 0x26004,
1952		.enable_mask = BIT(0),
1953		.hw.init = &(struct clk_init_data){
1954			.name = "gcc_blsp2_qup1_spi_apps_clk",
1955			.parent_names = (const char *[]){ "blsp2_qup1_spi_apps_clk_src" },
1956			.num_parents = 1,
1957			.flags = CLK_SET_RATE_PARENT,
1958			.ops = &clk_branch2_ops,
1959		},
1960	},
1961};
1962
1963static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
1964	.halt_reg = 0x26008,
1965	.clkr = {
1966		.enable_reg = 0x26008,
1967		.enable_mask = BIT(0),
1968		.hw.init = &(struct clk_init_data){
1969			.name = "gcc_blsp2_qup1_i2c_apps_clk",
1970			.parent_names = (const char *[]){ "blsp2_qup1_i2c_apps_clk_src" },
1971			.num_parents = 1,
1972			.flags = CLK_SET_RATE_PARENT,
1973			.ops = &clk_branch2_ops,
1974		},
1975	},
1976};
1977
1978static struct clk_branch gcc_blsp2_uart1_apps_clk = {
1979	.halt_reg = 0x27004,
1980	.clkr = {
1981		.enable_reg = 0x27004,
1982		.enable_mask = BIT(0),
1983		.hw.init = &(struct clk_init_data){
1984			.name = "gcc_blsp2_uart1_apps_clk",
1985			.parent_names = (const char *[]){ "blsp2_uart1_apps_clk_src" },
1986			.num_parents = 1,
1987			.flags = CLK_SET_RATE_PARENT,
1988			.ops = &clk_branch2_ops,
1989		},
1990	},
1991};
1992
1993static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
1994	.halt_reg = 0x28004,
1995	.clkr = {
1996		.enable_reg = 0x28004,
1997		.enable_mask = BIT(0),
1998		.hw.init = &(struct clk_init_data){
1999			.name = "gcc_blsp2_qup2_spi_apps_clk",
2000			.parent_names = (const char *[]){ "blsp2_qup2_spi_apps_clk_src" },
2001			.num_parents = 1,
2002			.flags = CLK_SET_RATE_PARENT,
2003			.ops = &clk_branch2_ops,
2004		},
2005	},
2006};
2007
2008static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
2009	.halt_reg = 0x28008,
2010	.clkr = {
2011		.enable_reg = 0x28008,
2012		.enable_mask = BIT(0),
2013		.hw.init = &(struct clk_init_data){
2014			.name = "gcc_blsp2_qup2_i2c_apps_clk",
2015			.parent_names = (const char *[]){ "blsp2_qup2_i2c_apps_clk_src" },
2016			.num_parents = 1,
2017			.flags = CLK_SET_RATE_PARENT,
2018			.ops = &clk_branch2_ops,
2019		},
2020	},
2021};
2022
2023static struct clk_branch gcc_blsp2_uart2_apps_clk = {
2024	.halt_reg = 0x29004,
2025	.clkr = {
2026		.enable_reg = 0x29004,
2027		.enable_mask = BIT(0),
2028		.hw.init = &(struct clk_init_data){
2029			.name = "gcc_blsp2_uart2_apps_clk",
2030			.parent_names = (const char *[]){ "blsp2_uart2_apps_clk_src" },
2031			.num_parents = 1,
2032			.flags = CLK_SET_RATE_PARENT,
2033			.ops = &clk_branch2_ops,
2034		},
2035	},
2036};
2037
2038static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
2039	.halt_reg = 0x2a004,
2040	.clkr = {
2041		.enable_reg = 0x2a004,
2042		.enable_mask = BIT(0),
2043		.hw.init = &(struct clk_init_data){
2044			.name = "gcc_blsp2_qup3_spi_apps_clk",
2045			.parent_names = (const char *[]){ "blsp2_qup3_spi_apps_clk_src" },
2046			.num_parents = 1,
2047			.flags = CLK_SET_RATE_PARENT,
2048			.ops = &clk_branch2_ops,
2049		},
2050	},
2051};
2052
2053static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
2054	.halt_reg = 0x2a008,
2055	.clkr = {
2056		.enable_reg = 0x2a008,
2057		.enable_mask = BIT(0),
2058		.hw.init = &(struct clk_init_data){
2059			.name = "gcc_blsp2_qup3_i2c_apps_clk",
2060			.parent_names = (const char *[]){ "blsp2_qup3_i2c_apps_clk_src" },
2061			.num_parents = 1,
2062			.flags = CLK_SET_RATE_PARENT,
2063			.ops = &clk_branch2_ops,
2064		},
2065	},
2066};
2067
2068static struct clk_branch gcc_blsp2_uart3_apps_clk = {
2069	.halt_reg = 0x2b004,
2070	.clkr = {
2071		.enable_reg = 0x2b004,
2072		.enable_mask = BIT(0),
2073		.hw.init = &(struct clk_init_data){
2074			.name = "gcc_blsp2_uart3_apps_clk",
2075			.parent_names = (const char *[]){ "blsp2_uart3_apps_clk_src" },
2076			.num_parents = 1,
2077			.flags = CLK_SET_RATE_PARENT,
2078			.ops = &clk_branch2_ops,
2079		},
2080	},
2081};
2082
2083static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
2084	.halt_reg = 0x2c004,
2085	.clkr = {
2086		.enable_reg = 0x2c004,
2087		.enable_mask = BIT(0),
2088		.hw.init = &(struct clk_init_data){
2089			.name = "gcc_blsp2_qup4_spi_apps_clk",
2090			.parent_names = (const char *[]){ "blsp2_qup4_spi_apps_clk_src" },
2091			.num_parents = 1,
2092			.flags = CLK_SET_RATE_PARENT,
2093			.ops = &clk_branch2_ops,
2094		},
2095	},
2096};
2097
2098static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
2099	.halt_reg = 0x2c008,
2100	.clkr = {
2101		.enable_reg = 0x2c008,
2102		.enable_mask = BIT(0),
2103		.hw.init = &(struct clk_init_data){
2104			.name = "gcc_blsp2_qup4_i2c_apps_clk",
2105			.parent_names = (const char *[]){ "blsp2_qup4_i2c_apps_clk_src" },
2106			.num_parents = 1,
2107			.flags = CLK_SET_RATE_PARENT,
2108			.ops = &clk_branch2_ops,
2109		},
2110	},
2111};
2112
2113static struct clk_branch gcc_blsp2_uart4_apps_clk = {
2114	.halt_reg = 0x2d004,
2115	.clkr = {
2116		.enable_reg = 0x2d004,
2117		.enable_mask = BIT(0),
2118		.hw.init = &(struct clk_init_data){
2119			.name = "gcc_blsp2_uart4_apps_clk",
2120			.parent_names = (const char *[]){ "blsp2_uart4_apps_clk_src" },
2121			.num_parents = 1,
2122			.flags = CLK_SET_RATE_PARENT,
2123			.ops = &clk_branch2_ops,
2124		},
2125	},
2126};
2127
2128static struct clk_branch gcc_blsp2_qup5_spi_apps_clk = {
2129	.halt_reg = 0x2e004,
2130	.clkr = {
2131		.enable_reg = 0x2e004,
2132		.enable_mask = BIT(0),
2133		.hw.init = &(struct clk_init_data){
2134			.name = "gcc_blsp2_qup5_spi_apps_clk",
2135			.parent_names = (const char *[]){ "blsp2_qup5_spi_apps_clk_src" },
2136			.num_parents = 1,
2137			.flags = CLK_SET_RATE_PARENT,
2138			.ops = &clk_branch2_ops,
2139		},
2140	},
2141};
2142
2143static struct clk_branch gcc_blsp2_qup5_i2c_apps_clk = {
2144	.halt_reg = 0x2e008,
2145	.clkr = {
2146		.enable_reg = 0x2e008,
2147		.enable_mask = BIT(0),
2148		.hw.init = &(struct clk_init_data){
2149			.name = "gcc_blsp2_qup5_i2c_apps_clk",
2150			.parent_names = (const char *[]){ "blsp2_qup5_i2c_apps_clk_src" },
2151			.num_parents = 1,
2152			.flags = CLK_SET_RATE_PARENT,
2153			.ops = &clk_branch2_ops,
2154		},
2155	},
2156};
2157
2158static struct clk_branch gcc_blsp2_uart5_apps_clk = {
2159	.halt_reg = 0x2f004,
2160	.clkr = {
2161		.enable_reg = 0x2f004,
2162		.enable_mask = BIT(0),
2163		.hw.init = &(struct clk_init_data){
2164			.name = "gcc_blsp2_uart5_apps_clk",
2165			.parent_names = (const char *[]){ "blsp2_uart5_apps_clk_src" },
2166			.num_parents = 1,
2167			.flags = CLK_SET_RATE_PARENT,
2168			.ops = &clk_branch2_ops,
2169		},
2170	},
2171};
2172
2173static struct clk_branch gcc_blsp2_qup6_spi_apps_clk = {
2174	.halt_reg = 0x30004,
2175	.clkr = {
2176		.enable_reg = 0x30004,
2177		.enable_mask = BIT(0),
2178		.hw.init = &(struct clk_init_data){
2179			.name = "gcc_blsp2_qup6_spi_apps_clk",
2180			.parent_names = (const char *[]){ "blsp2_qup6_spi_apps_clk_src" },
2181			.num_parents = 1,
2182			.flags = CLK_SET_RATE_PARENT,
2183			.ops = &clk_branch2_ops,
2184		},
2185	},
2186};
2187
2188static struct clk_branch gcc_blsp2_qup6_i2c_apps_clk = {
2189	.halt_reg = 0x30008,
2190	.clkr = {
2191		.enable_reg = 0x30008,
2192		.enable_mask = BIT(0),
2193		.hw.init = &(struct clk_init_data){
2194			.name = "gcc_blsp2_qup6_i2c_apps_clk",
2195			.parent_names = (const char *[]){ "blsp2_qup6_i2c_apps_clk_src" },
2196			.num_parents = 1,
2197			.flags = CLK_SET_RATE_PARENT,
2198			.ops = &clk_branch2_ops,
2199		},
2200	},
2201};
2202
2203static struct clk_branch gcc_blsp2_uart6_apps_clk = {
2204	.halt_reg = 0x31004,
2205	.clkr = {
2206		.enable_reg = 0x31004,
2207		.enable_mask = BIT(0),
2208		.hw.init = &(struct clk_init_data){
2209			.name = "gcc_blsp2_uart6_apps_clk",
2210			.parent_names = (const char *[]){ "blsp2_uart6_apps_clk_src" },
2211			.num_parents = 1,
2212			.flags = CLK_SET_RATE_PARENT,
2213			.ops = &clk_branch2_ops,
2214		},
2215	},
2216};
2217
2218static struct clk_branch gcc_pdm_ahb_clk = {
2219	.halt_reg = 0x33004,
2220	.clkr = {
2221		.enable_reg = 0x33004,
2222		.enable_mask = BIT(0),
2223		.hw.init = &(struct clk_init_data){
2224			.name = "gcc_pdm_ahb_clk",
2225			.parent_names = (const char *[]){ "periph_noc_clk_src" },
2226			.num_parents = 1,
2227			.flags = CLK_SET_RATE_PARENT,
2228			.ops = &clk_branch2_ops,
2229		},
2230	},
2231};
2232
2233static struct clk_branch gcc_pdm2_clk = {
2234	.halt_reg = 0x3300c,
2235	.clkr = {
2236		.enable_reg = 0x3300c,
2237		.enable_mask = BIT(0),
2238		.hw.init = &(struct clk_init_data){
2239			.name = "gcc_pdm2_clk",
2240			.parent_names = (const char *[]){ "pdm2_clk_src" },
2241			.num_parents = 1,
2242			.flags = CLK_SET_RATE_PARENT,
2243			.ops = &clk_branch2_ops,
2244		},
2245	},
2246};
2247
2248static struct clk_branch gcc_prng_ahb_clk = {
2249	.halt_reg = 0x34004,
2250	.halt_check = BRANCH_HALT_VOTED,
2251	.clkr = {
2252		.enable_reg = 0x52004,
2253		.enable_mask = BIT(13),
2254		.hw.init = &(struct clk_init_data){
2255			.name = "gcc_prng_ahb_clk",
2256			.parent_names = (const char *[]){ "config_noc_clk_src" },
2257			.num_parents = 1,
2258			.flags = CLK_SET_RATE_PARENT,
2259			.ops = &clk_branch2_ops,
2260		},
2261	},
2262};
2263
2264static struct clk_branch gcc_tsif_ahb_clk = {
2265	.halt_reg = 0x36004,
2266	.clkr = {
2267		.enable_reg = 0x36004,
2268		.enable_mask = BIT(0),
2269		.hw.init = &(struct clk_init_data){
2270			.name = "gcc_tsif_ahb_clk",
2271			.parent_names = (const char *[]){ "periph_noc_clk_src" },
2272			.num_parents = 1,
2273			.flags = CLK_SET_RATE_PARENT,
2274			.ops = &clk_branch2_ops,
2275		},
2276	},
2277};
2278
2279static struct clk_branch gcc_tsif_ref_clk = {
2280	.halt_reg = 0x36008,
2281	.clkr = {
2282		.enable_reg = 0x36008,
2283		.enable_mask = BIT(0),
2284		.hw.init = &(struct clk_init_data){
2285			.name = "gcc_tsif_ref_clk",
2286			.parent_names = (const char *[]){ "tsif_ref_clk_src" },
2287			.num_parents = 1,
2288			.flags = CLK_SET_RATE_PARENT,
2289			.ops = &clk_branch2_ops,
2290		},
2291	},
2292};
2293
2294static struct clk_branch gcc_tsif_inactivity_timers_clk = {
2295	.halt_reg = 0x3600c,
2296	.clkr = {
2297		.enable_reg = 0x3600c,
2298		.enable_mask = BIT(0),
2299		.hw.init = &(struct clk_init_data){
2300			.name = "gcc_tsif_inactivity_timers_clk",
2301			.parent_names = (const char *[]){ "gcc_sleep_clk_src" },
2302			.num_parents = 1,
2303			.flags = CLK_SET_RATE_PARENT,
2304			.ops = &clk_branch2_ops,
2305		},
2306	},
2307};
2308
2309static struct clk_branch gcc_boot_rom_ahb_clk = {
2310	.halt_reg = 0x38004,
2311	.halt_check = BRANCH_HALT_VOTED,
2312	.clkr = {
2313		.enable_reg = 0x52004,
2314		.enable_mask = BIT(10),
2315		.hw.init = &(struct clk_init_data){
2316			.name = "gcc_boot_rom_ahb_clk",
2317			.parent_names = (const char *[]){ "config_noc_clk_src" },
2318			.num_parents = 1,
2319			.flags = CLK_SET_RATE_PARENT,
2320			.ops = &clk_branch2_ops,
2321		},
2322	},
2323};
2324
2325static struct clk_branch gcc_bimc_gfx_clk = {
2326	.halt_reg = 0x46018,
2327	.clkr = {
2328		.enable_reg = 0x46018,
2329		.enable_mask = BIT(0),
2330		.hw.init = &(struct clk_init_data){
2331			.name = "gcc_bimc_gfx_clk",
2332			.flags = CLK_SET_RATE_PARENT,
2333			.ops = &clk_branch2_ops,
2334		},
2335	},
2336};
2337
2338static struct clk_branch gcc_hmss_rbcpr_clk = {
2339	.halt_reg = 0x4800c,
2340	.clkr = {
2341		.enable_reg = 0x4800c,
2342		.enable_mask = BIT(0),
2343		.hw.init = &(struct clk_init_data){
2344			.name = "gcc_hmss_rbcpr_clk",
2345			.parent_names = (const char *[]){ "hmss_rbcpr_clk_src" },
2346			.num_parents = 1,
2347			.flags = CLK_SET_RATE_PARENT,
2348			.ops = &clk_branch2_ops,
2349		},
2350	},
2351};
2352
2353static struct clk_branch gcc_gp1_clk = {
2354	.halt_reg = 0x64000,
2355	.clkr = {
2356		.enable_reg = 0x64000,
2357		.enable_mask = BIT(0),
2358		.hw.init = &(struct clk_init_data){
2359			.name = "gcc_gp1_clk",
2360			.parent_names = (const char *[]){ "gp1_clk_src" },
2361			.num_parents = 1,
2362			.flags = CLK_SET_RATE_PARENT,
2363			.ops = &clk_branch2_ops,
2364		},
2365	},
2366};
2367
2368static struct clk_branch gcc_gp2_clk = {
2369	.halt_reg = 0x65000,
2370	.clkr = {
2371		.enable_reg = 0x65000,
2372		.enable_mask = BIT(0),
2373		.hw.init = &(struct clk_init_data){
2374			.name = "gcc_gp2_clk",
2375			.parent_names = (const char *[]){ "gp2_clk_src" },
2376			.num_parents = 1,
2377			.flags = CLK_SET_RATE_PARENT,
2378			.ops = &clk_branch2_ops,
2379		},
2380	},
2381};
2382
2383static struct clk_branch gcc_gp3_clk = {
2384	.halt_reg = 0x66000,
2385	.clkr = {
2386		.enable_reg = 0x66000,
2387		.enable_mask = BIT(0),
2388		.hw.init = &(struct clk_init_data){
2389			.name = "gcc_gp3_clk",
2390			.parent_names = (const char *[]){ "gp3_clk_src" },
2391			.num_parents = 1,
2392			.flags = CLK_SET_RATE_PARENT,
2393			.ops = &clk_branch2_ops,
2394		},
2395	},
2396};
2397
2398static struct clk_branch gcc_pcie_0_slv_axi_clk = {
2399	.halt_reg = 0x6b008,
2400	.clkr = {
2401		.enable_reg = 0x6b008,
2402		.enable_mask = BIT(0),
2403		.hw.init = &(struct clk_init_data){
2404			.name = "gcc_pcie_0_slv_axi_clk",
2405			.parent_names = (const char *[]){ "system_noc_clk_src" },
2406			.num_parents = 1,
2407			.flags = CLK_SET_RATE_PARENT,
2408			.ops = &clk_branch2_ops,
2409		},
2410	},
2411};
2412
2413static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
2414	.halt_reg = 0x6b00c,
2415	.clkr = {
2416		.enable_reg = 0x6b00c,
2417		.enable_mask = BIT(0),
2418		.hw.init = &(struct clk_init_data){
2419			.name = "gcc_pcie_0_mstr_axi_clk",
2420			.parent_names = (const char *[]){ "system_noc_clk_src" },
2421			.num_parents = 1,
2422			.flags = CLK_SET_RATE_PARENT,
2423			.ops = &clk_branch2_ops,
2424		},
2425	},
2426};
2427
2428static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
2429	.halt_reg = 0x6b010,
2430	.clkr = {
2431		.enable_reg = 0x6b010,
2432		.enable_mask = BIT(0),
2433		.hw.init = &(struct clk_init_data){
2434			.name = "gcc_pcie_0_cfg_ahb_clk",
2435			.parent_names = (const char *[]){ "config_noc_clk_src" },
2436			.num_parents = 1,
2437			.flags = CLK_SET_RATE_PARENT,
2438			.ops = &clk_branch2_ops,
2439		},
2440	},
2441};
2442
2443static struct clk_branch gcc_pcie_0_aux_clk = {
2444	.halt_reg = 0x6b014,
2445	.clkr = {
2446		.enable_reg = 0x6b014,
2447		.enable_mask = BIT(0),
2448		.hw.init = &(struct clk_init_data){
2449			.name = "gcc_pcie_0_aux_clk",
2450			.parent_names = (const char *[]){ "pcie_aux_clk_src" },
2451			.num_parents = 1,
2452			.flags = CLK_SET_RATE_PARENT,
2453			.ops = &clk_branch2_ops,
2454		},
2455	},
2456};
2457
2458static struct clk_branch gcc_pcie_0_pipe_clk = {
2459	.halt_reg = 0x6b018,
2460	.halt_check = BRANCH_HALT_SKIP,
2461	.clkr = {
2462		.enable_reg = 0x6b018,
2463		.enable_mask = BIT(0),
2464		.hw.init = &(struct clk_init_data){
2465			.name = "gcc_pcie_0_pipe_clk",
2466			.parent_names = (const char *[]){ "pcie_0_pipe_clk_src" },
2467			.num_parents = 1,
2468			.flags = CLK_SET_RATE_PARENT,
2469			.ops = &clk_branch2_ops,
2470		},
2471	},
2472};
2473
2474static struct clk_branch gcc_pcie_1_slv_axi_clk = {
2475	.halt_reg = 0x6d008,
2476	.clkr = {
2477		.enable_reg = 0x6d008,
2478		.enable_mask = BIT(0),
2479		.hw.init = &(struct clk_init_data){
2480			.name = "gcc_pcie_1_slv_axi_clk",
2481			.parent_names = (const char *[]){ "system_noc_clk_src" },
2482			.num_parents = 1,
2483			.flags = CLK_SET_RATE_PARENT,
2484			.ops = &clk_branch2_ops,
2485		},
2486	},
2487};
2488
2489static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
2490	.halt_reg = 0x6d00c,
2491	.clkr = {
2492		.enable_reg = 0x6d00c,
2493		.enable_mask = BIT(0),
2494		.hw.init = &(struct clk_init_data){
2495			.name = "gcc_pcie_1_mstr_axi_clk",
2496			.parent_names = (const char *[]){ "system_noc_clk_src" },
2497			.num_parents = 1,
2498			.flags = CLK_SET_RATE_PARENT,
2499			.ops = &clk_branch2_ops,
2500		},
2501	},
2502};
2503
2504static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
2505	.halt_reg = 0x6d010,
2506	.clkr = {
2507		.enable_reg = 0x6d010,
2508		.enable_mask = BIT(0),
2509		.hw.init = &(struct clk_init_data){
2510			.name = "gcc_pcie_1_cfg_ahb_clk",
2511			.parent_names = (const char *[]){ "config_noc_clk_src" },
2512			.num_parents = 1,
2513			.flags = CLK_SET_RATE_PARENT,
2514			.ops = &clk_branch2_ops,
2515		},
2516	},
2517};
2518
2519static struct clk_branch gcc_pcie_1_aux_clk = {
2520	.halt_reg = 0x6d014,
2521	.clkr = {
2522		.enable_reg = 0x6d014,
2523		.enable_mask = BIT(0),
2524		.hw.init = &(struct clk_init_data){
2525			.name = "gcc_pcie_1_aux_clk",
2526			.parent_names = (const char *[]){ "pcie_aux_clk_src" },
2527			.num_parents = 1,
2528			.flags = CLK_SET_RATE_PARENT,
2529			.ops = &clk_branch2_ops,
2530		},
2531	},
2532};
2533
2534static struct clk_branch gcc_pcie_1_pipe_clk = {
2535	.halt_reg = 0x6d018,
2536	.halt_check = BRANCH_HALT_SKIP,
2537	.clkr = {
2538		.enable_reg = 0x6d018,
2539		.enable_mask = BIT(0),
2540		.hw.init = &(struct clk_init_data){
2541			.name = "gcc_pcie_1_pipe_clk",
2542			.parent_names = (const char *[]){ "pcie_1_pipe_clk_src" },
2543			.num_parents = 1,
2544			.flags = CLK_SET_RATE_PARENT,
2545			.ops = &clk_branch2_ops,
2546		},
2547	},
2548};
2549
2550static struct clk_branch gcc_pcie_2_slv_axi_clk = {
2551	.halt_reg = 0x6e008,
2552	.clkr = {
2553		.enable_reg = 0x6e008,
2554		.enable_mask = BIT(0),
2555		.hw.init = &(struct clk_init_data){
2556			.name = "gcc_pcie_2_slv_axi_clk",
2557			.parent_names = (const char *[]){ "system_noc_clk_src" },
2558			.num_parents = 1,
2559			.flags = CLK_SET_RATE_PARENT,
2560			.ops = &clk_branch2_ops,
2561		},
2562	},
2563};
2564
2565static struct clk_branch gcc_pcie_2_mstr_axi_clk = {
2566	.halt_reg = 0x6e00c,
2567	.clkr = {
2568		.enable_reg = 0x6e00c,
2569		.enable_mask = BIT(0),
2570		.hw.init = &(struct clk_init_data){
2571			.name = "gcc_pcie_2_mstr_axi_clk",
2572			.parent_names = (const char *[]){ "system_noc_clk_src" },
2573			.num_parents = 1,
2574			.flags = CLK_SET_RATE_PARENT,
2575			.ops = &clk_branch2_ops,
2576		},
2577	},
2578};
2579
2580static struct clk_branch gcc_pcie_2_cfg_ahb_clk = {
2581	.halt_reg = 0x6e010,
2582	.clkr = {
2583		.enable_reg = 0x6e010,
2584		.enable_mask = BIT(0),
2585		.hw.init = &(struct clk_init_data){
2586			.name = "gcc_pcie_2_cfg_ahb_clk",
2587			.parent_names = (const char *[]){ "config_noc_clk_src" },
2588			.num_parents = 1,
2589			.flags = CLK_SET_RATE_PARENT,
2590			.ops = &clk_branch2_ops,
2591		},
2592	},
2593};
2594
2595static struct clk_branch gcc_pcie_2_aux_clk = {
2596	.halt_reg = 0x6e014,
2597	.clkr = {
2598		.enable_reg = 0x6e014,
2599		.enable_mask = BIT(0),
2600		.hw.init = &(struct clk_init_data){
2601			.name = "gcc_pcie_2_aux_clk",
2602			.parent_names = (const char *[]){ "pcie_aux_clk_src" },
2603			.num_parents = 1,
2604			.flags = CLK_SET_RATE_PARENT,
2605			.ops = &clk_branch2_ops,
2606		},
2607	},
2608};
2609
2610static struct clk_branch gcc_pcie_2_pipe_clk = {
2611	.halt_reg = 0x6e018,
2612	.halt_check = BRANCH_HALT_SKIP,
2613	.clkr = {
2614		.enable_reg = 0x6e018,
2615		.enable_mask = BIT(0),
2616		.hw.init = &(struct clk_init_data){
2617			.name = "gcc_pcie_2_pipe_clk",
2618			.parent_names = (const char *[]){ "pcie_2_pipe_clk_src" },
2619			.num_parents = 1,
2620			.flags = CLK_SET_RATE_PARENT,
2621			.ops = &clk_branch2_ops,
2622		},
2623	},
2624};
2625
2626static struct clk_branch gcc_pcie_phy_cfg_ahb_clk = {
2627	.halt_reg = 0x6f004,
2628	.clkr = {
2629		.enable_reg = 0x6f004,
2630		.enable_mask = BIT(0),
2631		.hw.init = &(struct clk_init_data){
2632			.name = "gcc_pcie_phy_cfg_ahb_clk",
2633			.parent_names = (const char *[]){ "config_noc_clk_src" },
2634			.num_parents = 1,
2635			.flags = CLK_SET_RATE_PARENT,
2636			.ops = &clk_branch2_ops,
2637		},
2638	},
2639};
2640
2641static struct clk_branch gcc_pcie_phy_aux_clk = {
2642	.halt_reg = 0x6f008,
2643	.clkr = {
2644		.enable_reg = 0x6f008,
2645		.enable_mask = BIT(0),
2646		.hw.init = &(struct clk_init_data){
2647			.name = "gcc_pcie_phy_aux_clk",
2648			.parent_names = (const char *[]){ "pcie_aux_clk_src" },
2649			.num_parents = 1,
2650			.flags = CLK_SET_RATE_PARENT,
2651			.ops = &clk_branch2_ops,
2652		},
2653	},
2654};
2655
2656static struct clk_branch gcc_ufs_axi_clk = {
2657	.halt_reg = 0x75008,
2658	.clkr = {
2659		.enable_reg = 0x75008,
2660		.enable_mask = BIT(0),
2661		.hw.init = &(struct clk_init_data){
2662			.name = "gcc_ufs_axi_clk",
2663			.parent_names = (const char *[]){ "ufs_axi_clk_src" },
2664			.num_parents = 1,
2665			.flags = CLK_SET_RATE_PARENT,
2666			.ops = &clk_branch2_ops,
2667		},
2668	},
2669};
2670
2671static struct clk_branch gcc_ufs_ahb_clk = {
2672	.halt_reg = 0x7500c,
2673	.clkr = {
2674		.enable_reg = 0x7500c,
2675		.enable_mask = BIT(0),
2676		.hw.init = &(struct clk_init_data){
2677			.name = "gcc_ufs_ahb_clk",
2678			.parent_names = (const char *[]){ "config_noc_clk_src" },
2679			.num_parents = 1,
2680			.flags = CLK_SET_RATE_PARENT,
2681			.ops = &clk_branch2_ops,
2682		},
2683	},
2684};
2685
2686static struct clk_fixed_factor ufs_tx_cfg_clk_src = {
2687	.mult = 1,
2688	.div = 16,
2689	.hw.init = &(struct clk_init_data){
2690		.name = "ufs_tx_cfg_clk_src",
2691		.parent_names = (const char *[]){ "ufs_axi_clk_src" },
2692		.num_parents = 1,
2693		.flags = CLK_SET_RATE_PARENT,
2694		.ops = &clk_fixed_factor_ops,
2695	},
2696};
2697
2698static struct clk_branch gcc_ufs_tx_cfg_clk = {
2699	.halt_reg = 0x75010,
2700	.clkr = {
2701		.enable_reg = 0x75010,
2702		.enable_mask = BIT(0),
2703		.hw.init = &(struct clk_init_data){
2704			.name = "gcc_ufs_tx_cfg_clk",
2705			.parent_names = (const char *[]){ "ufs_tx_cfg_clk_src" },
2706			.num_parents = 1,
2707			.flags = CLK_SET_RATE_PARENT,
2708			.ops = &clk_branch2_ops,
2709		},
2710	},
2711};
2712
2713static struct clk_fixed_factor ufs_rx_cfg_clk_src = {
2714	.mult = 1,
2715	.div = 16,
2716	.hw.init = &(struct clk_init_data){
2717		.name = "ufs_rx_cfg_clk_src",
2718		.parent_names = (const char *[]){ "ufs_axi_clk_src" },
2719		.num_parents = 1,
2720		.flags = CLK_SET_RATE_PARENT,
2721		.ops = &clk_fixed_factor_ops,
2722	},
2723};
2724
2725static struct clk_branch gcc_hlos1_vote_lpass_core_smmu_clk = {
2726	.halt_reg = 0x7d010,
2727	.halt_check = BRANCH_HALT_VOTED,
2728	.clkr = {
2729		.enable_reg = 0x7d010,
2730		.enable_mask = BIT(0),
2731		.hw.init = &(struct clk_init_data){
2732			.name = "hlos1_vote_lpass_core_smmu_clk",
2733			.ops = &clk_branch2_ops,
2734		},
2735	},
2736};
2737
2738static struct clk_branch gcc_hlos1_vote_lpass_adsp_smmu_clk = {
2739	.halt_reg = 0x7d014,
2740	.halt_check = BRANCH_HALT_VOTED,
2741	.clkr = {
2742		.enable_reg = 0x7d014,
2743		.enable_mask = BIT(0),
2744		.hw.init = &(struct clk_init_data){
2745			.name = "hlos1_vote_lpass_adsp_smmu_clk",
2746			.ops = &clk_branch2_ops,
2747		},
2748	},
2749};
2750
2751static struct clk_branch gcc_ufs_rx_cfg_clk = {
2752	.halt_reg = 0x75014,
2753	.clkr = {
2754		.enable_reg = 0x75014,
2755		.enable_mask = BIT(0),
2756		.hw.init = &(struct clk_init_data){
2757			.name = "gcc_ufs_rx_cfg_clk",
2758			.parent_names = (const char *[]){ "ufs_rx_cfg_clk_src" },
2759			.num_parents = 1,
2760			.flags = CLK_SET_RATE_PARENT,
2761			.ops = &clk_branch2_ops,
2762		},
2763	},
2764};
2765
2766static struct clk_branch gcc_ufs_tx_symbol_0_clk = {
2767	.halt_reg = 0x75018,
2768	.halt_check = BRANCH_HALT_SKIP,
2769	.clkr = {
2770		.enable_reg = 0x75018,
2771		.enable_mask = BIT(0),
2772		.hw.init = &(struct clk_init_data){
2773			.name = "gcc_ufs_tx_symbol_0_clk",
2774			.parent_names = (const char *[]){ "ufs_tx_symbol_0_clk_src" },
2775			.num_parents = 1,
2776			.flags = CLK_SET_RATE_PARENT,
2777			.ops = &clk_branch2_ops,
2778		},
2779	},
2780};
2781
2782static struct clk_branch gcc_ufs_rx_symbol_0_clk = {
2783	.halt_reg = 0x7501c,
2784	.halt_check = BRANCH_HALT_SKIP,
2785	.clkr = {
2786		.enable_reg = 0x7501c,
2787		.enable_mask = BIT(0),
2788		.hw.init = &(struct clk_init_data){
2789			.name = "gcc_ufs_rx_symbol_0_clk",
2790			.parent_names = (const char *[]){ "ufs_rx_symbol_0_clk_src" },
2791			.num_parents = 1,
2792			.flags = CLK_SET_RATE_PARENT,
2793			.ops = &clk_branch2_ops,
2794		},
2795	},
2796};
2797
2798static struct clk_branch gcc_ufs_rx_symbol_1_clk = {
2799	.halt_reg = 0x75020,
2800	.halt_check = BRANCH_HALT_SKIP,
2801	.clkr = {
2802		.enable_reg = 0x75020,
2803		.enable_mask = BIT(0),
2804		.hw.init = &(struct clk_init_data){
2805			.name = "gcc_ufs_rx_symbol_1_clk",
2806			.parent_names = (const char *[]){ "ufs_rx_symbol_1_clk_src" },
2807			.num_parents = 1,
2808			.flags = CLK_SET_RATE_PARENT,
2809			.ops = &clk_branch2_ops,
2810		},
2811	},
2812};
2813
2814static struct clk_fixed_factor ufs_ice_core_postdiv_clk_src = {
2815	.mult = 1,
2816	.div = 2,
2817	.hw.init = &(struct clk_init_data){
2818		.name = "ufs_ice_core_postdiv_clk_src",
2819		.parent_names = (const char *[]){ "ufs_ice_core_clk_src" },
2820		.num_parents = 1,
2821		.flags = CLK_SET_RATE_PARENT,
2822		.ops = &clk_fixed_factor_ops,
2823	},
2824};
2825
2826static struct clk_branch gcc_ufs_unipro_core_clk = {
2827	.halt_reg = 0x7600c,
2828	.clkr = {
2829		.enable_reg = 0x7600c,
2830		.enable_mask = BIT(0),
2831		.hw.init = &(struct clk_init_data){
2832			.name = "gcc_ufs_unipro_core_clk",
2833			.parent_names = (const char *[]){ "ufs_ice_core_postdiv_clk_src" },
2834			.num_parents = 1,
2835			.flags = CLK_SET_RATE_PARENT,
2836			.ops = &clk_branch2_ops,
2837		},
2838	},
2839};
2840
2841static struct clk_branch gcc_ufs_ice_core_clk = {
2842	.halt_reg = 0x76010,
2843	.clkr = {
2844		.enable_reg = 0x76010,
2845		.enable_mask = BIT(0),
2846		.hw.init = &(struct clk_init_data){
2847			.name = "gcc_ufs_ice_core_clk",
2848			.parent_names = (const char *[]){ "ufs_ice_core_clk_src" },
2849			.num_parents = 1,
2850			.flags = CLK_SET_RATE_PARENT,
2851			.ops = &clk_branch2_ops,
2852		},
2853	},
2854};
2855
2856static struct clk_branch gcc_ufs_sys_clk_core_clk = {
2857	.halt_check = BRANCH_HALT_DELAY,
2858	.clkr = {
2859		.enable_reg = 0x76030,
2860		.enable_mask = BIT(0),
2861		.hw.init = &(struct clk_init_data){
2862			.name = "gcc_ufs_sys_clk_core_clk",
2863			.ops = &clk_branch2_ops,
2864		},
2865	},
2866};
2867
2868static struct clk_branch gcc_ufs_tx_symbol_clk_core_clk = {
2869	.halt_check = BRANCH_HALT_DELAY,
2870	.clkr = {
2871		.enable_reg = 0x76034,
2872		.enable_mask = BIT(0),
2873		.hw.init = &(struct clk_init_data){
2874			.name = "gcc_ufs_tx_symbol_clk_core_clk",
2875			.ops = &clk_branch2_ops,
2876		},
2877	},
2878};
2879
2880static struct clk_branch gcc_aggre0_snoc_axi_clk = {
2881	.halt_reg = 0x81008,
2882	.clkr = {
2883		.enable_reg = 0x81008,
2884		.enable_mask = BIT(0),
2885		.hw.init = &(struct clk_init_data){
2886			.name = "gcc_aggre0_snoc_axi_clk",
2887			.parent_names = (const char *[]){ "system_noc_clk_src" },
2888			.num_parents = 1,
2889			.flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
2890			.ops = &clk_branch2_ops,
2891		},
2892	},
2893};
2894
2895static struct clk_branch gcc_aggre0_cnoc_ahb_clk = {
2896	.halt_reg = 0x8100c,
2897	.clkr = {
2898		.enable_reg = 0x8100c,
2899		.enable_mask = BIT(0),
2900		.hw.init = &(struct clk_init_data){
2901			.name = "gcc_aggre0_cnoc_ahb_clk",
2902			.parent_names = (const char *[]){ "config_noc_clk_src" },
2903			.num_parents = 1,
2904			.flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
2905			.ops = &clk_branch2_ops,
2906		},
2907	},
2908};
2909
2910static struct clk_branch gcc_smmu_aggre0_axi_clk = {
2911	.halt_reg = 0x81014,
2912	.clkr = {
2913		.enable_reg = 0x81014,
2914		.enable_mask = BIT(0),
2915		.hw.init = &(struct clk_init_data){
2916			.name = "gcc_smmu_aggre0_axi_clk",
2917			.parent_names = (const char *[]){ "system_noc_clk_src" },
2918			.num_parents = 1,
2919			.flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
2920			.ops = &clk_branch2_ops,
2921		},
2922	},
2923};
2924
2925static struct clk_branch gcc_smmu_aggre0_ahb_clk = {
2926	.halt_reg = 0x81018,
2927	.clkr = {
2928		.enable_reg = 0x81018,
2929		.enable_mask = BIT(0),
2930		.hw.init = &(struct clk_init_data){
2931			.name = "gcc_smmu_aggre0_ahb_clk",
2932			.parent_names = (const char *[]){ "config_noc_clk_src" },
2933			.num_parents = 1,
2934			.flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
2935			.ops = &clk_branch2_ops,
2936		},
2937	},
2938};
2939
2940static struct clk_branch gcc_aggre1_pnoc_ahb_clk = {
2941	.halt_reg = 0x82014,
2942	.clkr = {
2943		.enable_reg = 0x82014,
2944		.enable_mask = BIT(0),
2945		.hw.init = &(struct clk_init_data){
2946			.name = "gcc_aggre1_pnoc_ahb_clk",
2947			.parent_names = (const char *[]){ "periph_noc_clk_src" },
2948			.num_parents = 1,
2949			.ops = &clk_branch2_ops,
2950		},
2951	},
2952};
2953
2954static struct clk_branch gcc_aggre2_ufs_axi_clk = {
2955	.halt_reg = 0x83014,
2956	.clkr = {
2957		.enable_reg = 0x83014,
2958		.enable_mask = BIT(0),
2959		.hw.init = &(struct clk_init_data){
2960			.name = "gcc_aggre2_ufs_axi_clk",
2961			.parent_names = (const char *[]){ "ufs_axi_clk_src" },
2962			.num_parents = 1,
2963			.flags = CLK_SET_RATE_PARENT,
2964			.ops = &clk_branch2_ops,
2965		},
2966	},
2967};
2968
2969static struct clk_branch gcc_aggre2_usb3_axi_clk = {
2970	.halt_reg = 0x83018,
2971	.clkr = {
2972		.enable_reg = 0x83018,
2973		.enable_mask = BIT(0),
2974		.hw.init = &(struct clk_init_data){
2975			.name = "gcc_aggre2_usb3_axi_clk",
2976			.parent_names = (const char *[]){ "usb30_master_clk_src" },
2977			.num_parents = 1,
2978			.flags = CLK_SET_RATE_PARENT,
2979			.ops = &clk_branch2_ops,
2980		},
2981	},
2982};
2983
2984static struct clk_branch gcc_dcc_ahb_clk = {
2985	.halt_reg = 0x84004,
2986	.clkr = {
2987		.enable_reg = 0x84004,
2988		.enable_mask = BIT(0),
2989		.hw.init = &(struct clk_init_data){
2990			.name = "gcc_dcc_ahb_clk",
2991			.parent_names = (const char *[]){ "config_noc_clk_src" },
2992			.num_parents = 1,
2993			.ops = &clk_branch2_ops,
2994		},
2995	},
2996};
2997
2998static struct clk_branch gcc_aggre0_noc_mpu_cfg_ahb_clk = {
2999	.halt_reg = 0x85000,
3000	.clkr = {
3001		.enable_reg = 0x85000,
3002		.enable_mask = BIT(0),
3003		.hw.init = &(struct clk_init_data){
3004			.name = "gcc_aggre0_noc_mpu_cfg_ahb_clk",
3005			.parent_names = (const char *[]){ "config_noc_clk_src" },
3006			.num_parents = 1,
3007			.ops = &clk_branch2_ops,
3008		},
3009	},
3010};
3011
3012static struct clk_branch gcc_qspi_ahb_clk = {
3013	.halt_reg = 0x8b004,
3014	.clkr = {
3015		.enable_reg = 0x8b004,
3016		.enable_mask = BIT(0),
3017		.hw.init = &(struct clk_init_data){
3018			.name = "gcc_qspi_ahb_clk",
3019			.parent_names = (const char *[]){ "periph_noc_clk_src" },
3020			.num_parents = 1,
3021			.flags = CLK_SET_RATE_PARENT,
3022			.ops = &clk_branch2_ops,
3023		},
3024	},
3025};
3026
3027static struct clk_branch gcc_qspi_ser_clk = {
3028	.halt_reg = 0x8b008,
3029	.clkr = {
3030		.enable_reg = 0x8b008,
3031		.enable_mask = BIT(0),
3032		.hw.init = &(struct clk_init_data){
3033			.name = "gcc_qspi_ser_clk",
3034			.parent_names = (const char *[]){ "qspi_ser_clk_src" },
3035			.num_parents = 1,
3036			.flags = CLK_SET_RATE_PARENT,
3037			.ops = &clk_branch2_ops,
3038		},
3039	},
3040};
3041
3042static struct clk_branch gcc_usb3_clkref_clk = {
3043	.halt_reg = 0x8800C,
3044	.clkr = {
3045		.enable_reg = 0x8800C,
3046		.enable_mask = BIT(0),
3047		.hw.init = &(struct clk_init_data){
3048			.name = "gcc_usb3_clkref_clk",
3049			.parent_data = &(const struct clk_parent_data){
3050				.fw_name = "cxo2",
3051				.name = "xo",
3052			},
3053			.num_parents = 1,
3054			.ops = &clk_branch2_ops,
3055		},
3056	},
3057};
3058
3059static struct clk_branch gcc_hdmi_clkref_clk = {
3060	.halt_reg = 0x88000,
3061	.clkr = {
3062		.enable_reg = 0x88000,
3063		.enable_mask = BIT(0),
3064		.hw.init = &(struct clk_init_data){
3065			.name = "gcc_hdmi_clkref_clk",
3066			.parent_data = &(const struct clk_parent_data){
3067				.fw_name = "cxo2",
3068				.name = "xo",
3069			},
3070			.num_parents = 1,
3071			.ops = &clk_branch2_ops,
3072		},
3073	},
3074};
3075
3076static struct clk_branch gcc_edp_clkref_clk = {
3077	.halt_reg = 0x88004,
3078	.clkr = {
3079		.enable_reg = 0x88004,
3080		.enable_mask = BIT(0),
3081		.hw.init = &(struct clk_init_data){
3082			.name = "gcc_edp_clkref_clk",
3083			.parent_data = &(const struct clk_parent_data){
3084				.fw_name = "cxo2",
3085				.name = "xo",
3086			},
3087			.num_parents = 1,
3088			.ops = &clk_branch2_ops,
3089		},
3090	},
3091};
3092
3093static struct clk_branch gcc_ufs_clkref_clk = {
3094	.halt_reg = 0x88008,
3095	.clkr = {
3096		.enable_reg = 0x88008,
3097		.enable_mask = BIT(0),
3098		.hw.init = &(struct clk_init_data){
3099			.name = "gcc_ufs_clkref_clk",
3100			.parent_data = &(const struct clk_parent_data){
3101				.fw_name = "cxo2",
3102				.name = "xo",
3103			},
3104			.num_parents = 1,
3105			.ops = &clk_branch2_ops,
3106		},
3107	},
3108};
3109
3110static struct clk_branch gcc_pcie_clkref_clk = {
3111	.halt_reg = 0x88010,
3112	.clkr = {
3113		.enable_reg = 0x88010,
3114		.enable_mask = BIT(0),
3115		.hw.init = &(struct clk_init_data){
3116			.name = "gcc_pcie_clkref_clk",
3117			.parent_data = &(const struct clk_parent_data){
3118				.fw_name = "cxo2",
3119				.name = "xo",
3120			},
3121			.num_parents = 1,
3122			.ops = &clk_branch2_ops,
3123		},
3124	},
3125};
3126
3127static struct clk_branch gcc_rx2_usb2_clkref_clk = {
3128	.halt_reg = 0x88014,
3129	.clkr = {
3130		.enable_reg = 0x88014,
3131		.enable_mask = BIT(0),
3132		.hw.init = &(struct clk_init_data){
3133			.name = "gcc_rx2_usb2_clkref_clk",
3134			.parent_data = &(const struct clk_parent_data){
3135				.fw_name = "cxo2",
3136				.name = "xo",
3137			},
3138			.num_parents = 1,
3139			.ops = &clk_branch2_ops,
3140		},
3141	},
3142};
3143
3144static struct clk_branch gcc_rx1_usb2_clkref_clk = {
3145	.halt_reg = 0x88018,
3146	.clkr = {
3147		.enable_reg = 0x88018,
3148		.enable_mask = BIT(0),
3149		.hw.init = &(struct clk_init_data){
3150			.name = "gcc_rx1_usb2_clkref_clk",
3151			.parent_data = &(const struct clk_parent_data){
3152				.fw_name = "cxo2",
3153				.name = "xo",
3154			},
3155			.num_parents = 1,
3156			.ops = &clk_branch2_ops,
3157		},
3158	},
3159};
3160
3161static struct clk_branch gcc_mss_cfg_ahb_clk = {
3162	.halt_reg = 0x8a000,
3163	.clkr = {
3164		.enable_reg = 0x8a000,
3165		.enable_mask = BIT(0),
3166		.hw.init = &(struct clk_init_data){
3167			.name = "gcc_mss_cfg_ahb_clk",
3168			.parent_names = (const char *[]){ "config_noc_clk_src" },
3169			.num_parents = 1,
3170			.ops = &clk_branch2_ops,
3171		},
3172	},
3173};
3174
3175static struct clk_branch gcc_mss_mnoc_bimc_axi_clk = {
3176	.halt_reg = 0x8a004,
3177	.clkr = {
3178		.enable_reg = 0x8a004,
3179		.enable_mask = BIT(0),
3180		.hw.init = &(struct clk_init_data){
3181			.name = "gcc_mss_mnoc_bimc_axi_clk",
3182			.parent_names = (const char *[]){ "system_noc_clk_src" },
3183			.num_parents = 1,
3184			.ops = &clk_branch2_ops,
3185		},
3186	},
3187};
3188
3189static struct clk_branch gcc_mss_snoc_axi_clk = {
3190	.halt_reg = 0x8a024,
3191	.clkr = {
3192		.enable_reg = 0x8a024,
3193		.enable_mask = BIT(0),
3194		.hw.init = &(struct clk_init_data){
3195			.name = "gcc_mss_snoc_axi_clk",
3196			.parent_names = (const char *[]){ "system_noc_clk_src" },
3197			.num_parents = 1,
3198			.ops = &clk_branch2_ops,
3199		},
3200	},
3201};
3202
3203static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
3204	.halt_reg = 0x8a028,
3205	.clkr = {
3206		.enable_reg = 0x8a028,
3207		.enable_mask = BIT(0),
3208		.hw.init = &(struct clk_init_data){
3209			.name = "gcc_mss_q6_bimc_axi_clk",
3210			.parent_names = (const char *[]){ "system_noc_clk_src" },
3211			.num_parents = 1,
3212			.ops = &clk_branch2_ops,
3213		},
3214	},
3215};
3216
3217static struct clk_hw *gcc_msm8996_hws[] = {
3218	&xo.hw,
3219	&gpll0_early_div.hw,
3220	&ufs_tx_cfg_clk_src.hw,
3221	&ufs_rx_cfg_clk_src.hw,
3222	&ufs_ice_core_postdiv_clk_src.hw,
3223};
3224
3225static struct gdsc aggre0_noc_gdsc = {
3226	.gdscr = 0x81004,
3227	.gds_hw_ctrl = 0x81028,
3228	.pd = {
3229		.name = "aggre0_noc",
3230	},
3231	.pwrsts = PWRSTS_OFF_ON,
3232	.flags = VOTABLE | ALWAYS_ON,
3233};
3234
3235static struct gdsc hlos1_vote_aggre0_noc_gdsc = {
3236	.gdscr = 0x7d024,
3237	.pd = {
3238		.name = "hlos1_vote_aggre0_noc",
3239	},
3240	.pwrsts = PWRSTS_OFF_ON,
3241	.flags = VOTABLE,
3242};
3243
3244static struct gdsc hlos1_vote_lpass_adsp_gdsc = {
3245	.gdscr = 0x7d034,
3246	.pd = {
3247		.name = "hlos1_vote_lpass_adsp",
3248	},
3249	.pwrsts = PWRSTS_OFF_ON,
3250	.flags = VOTABLE,
3251};
3252
3253static struct gdsc hlos1_vote_lpass_core_gdsc = {
3254	.gdscr = 0x7d038,
3255	.pd = {
3256		.name = "hlos1_vote_lpass_core",
3257	},
3258	.pwrsts = PWRSTS_OFF_ON,
3259	.flags = VOTABLE,
3260};
3261
3262static struct gdsc usb30_gdsc = {
3263	.gdscr = 0xf004,
3264	.pd = {
3265		.name = "usb30",
3266	},
3267	.pwrsts = PWRSTS_OFF_ON,
3268};
3269
3270static struct gdsc pcie0_gdsc = {
3271	.gdscr = 0x6b004,
3272	.pd = {
3273		.name = "pcie0",
3274	},
3275	.pwrsts = PWRSTS_OFF_ON,
3276};
3277
3278static struct gdsc pcie1_gdsc = {
3279	.gdscr = 0x6d004,
3280	.pd = {
3281		.name = "pcie1",
3282	},
3283	.pwrsts = PWRSTS_OFF_ON,
3284};
3285
3286static struct gdsc pcie2_gdsc = {
3287	.gdscr = 0x6e004,
3288	.pd = {
3289		.name = "pcie2",
3290	},
3291	.pwrsts = PWRSTS_OFF_ON,
3292};
3293
3294static struct gdsc ufs_gdsc = {
3295	.gdscr = 0x75004,
3296	.pd = {
3297		.name = "ufs",
3298	},
3299	.pwrsts = PWRSTS_OFF_ON,
3300};
3301
3302static struct clk_regmap *gcc_msm8996_clocks[] = {
3303	[GPLL0_EARLY] = &gpll0_early.clkr,
3304	[GPLL0] = &gpll0.clkr,
3305	[GPLL4_EARLY] = &gpll4_early.clkr,
3306	[GPLL4] = &gpll4.clkr,
3307	[SYSTEM_NOC_CLK_SRC] = &system_noc_clk_src.clkr,
3308	[CONFIG_NOC_CLK_SRC] = &config_noc_clk_src.clkr,
3309	[PERIPH_NOC_CLK_SRC] = &periph_noc_clk_src.clkr,
3310	[USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
3311	[USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
3312	[USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr,
3313	[USB20_MASTER_CLK_SRC] = &usb20_master_clk_src.clkr,
3314	[USB20_MOCK_UTMI_CLK_SRC] = &usb20_mock_utmi_clk_src.clkr,
3315	[SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
3316	[SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
3317	[SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
3318	[SDCC3_APPS_CLK_SRC] = &sdcc3_apps_clk_src.clkr,
3319	[SDCC4_APPS_CLK_SRC] = &sdcc4_apps_clk_src.clkr,
3320	[BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
3321	[BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
3322	[BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
3323	[BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
3324	[BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
3325	[BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
3326	[BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
3327	[BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
3328	[BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
3329	[BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
3330	[BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
3331	[BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
3332	[BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
3333	[BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
3334	[BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
3335	[BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
3336	[BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
3337	[BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
3338	[BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
3339	[BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
3340	[BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
3341	[BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
3342	[BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
3343	[BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
3344	[BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
3345	[BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
3346	[BLSP2_UART3_APPS_CLK_SRC] = &blsp2_uart3_apps_clk_src.clkr,
3347	[BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
3348	[BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
3349	[BLSP2_UART4_APPS_CLK_SRC] = &blsp2_uart4_apps_clk_src.clkr,
3350	[BLSP2_QUP5_SPI_APPS_CLK_SRC] = &blsp2_qup5_spi_apps_clk_src.clkr,
3351	[BLSP2_QUP5_I2C_APPS_CLK_SRC] = &blsp2_qup5_i2c_apps_clk_src.clkr,
3352	[BLSP2_UART5_APPS_CLK_SRC] = &blsp2_uart5_apps_clk_src.clkr,
3353	[BLSP2_QUP6_SPI_APPS_CLK_SRC] = &blsp2_qup6_spi_apps_clk_src.clkr,
3354	[BLSP2_QUP6_I2C_APPS_CLK_SRC] = &blsp2_qup6_i2c_apps_clk_src.clkr,
3355	[BLSP2_UART6_APPS_CLK_SRC] = &blsp2_uart6_apps_clk_src.clkr,
3356	[PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
3357	[TSIF_REF_CLK_SRC] = &tsif_ref_clk_src.clkr,
3358	[GCC_SLEEP_CLK_SRC] = &gcc_sleep_clk_src.clkr,
3359	[HMSS_RBCPR_CLK_SRC] = &hmss_rbcpr_clk_src.clkr,
3360	[HMSS_GPLL0_CLK_SRC] = &hmss_gpll0_clk_src.clkr,
3361	[GP1_CLK_SRC] = &gp1_clk_src.clkr,
3362	[GP2_CLK_SRC] = &gp2_clk_src.clkr,
3363	[GP3_CLK_SRC] = &gp3_clk_src.clkr,
3364	[PCIE_AUX_CLK_SRC] = &pcie_aux_clk_src.clkr,
3365	[UFS_AXI_CLK_SRC] = &ufs_axi_clk_src.clkr,
3366	[UFS_ICE_CORE_CLK_SRC] = &ufs_ice_core_clk_src.clkr,
3367	[QSPI_SER_CLK_SRC] = &qspi_ser_clk_src.clkr,
3368	[GCC_SYS_NOC_USB3_AXI_CLK] = &gcc_sys_noc_usb3_axi_clk.clkr,
3369	[GCC_SYS_NOC_UFS_AXI_CLK] = &gcc_sys_noc_ufs_axi_clk.clkr,
3370	[GCC_PERIPH_NOC_USB20_AHB_CLK] = &gcc_periph_noc_usb20_ahb_clk.clkr,
3371	[GCC_MMSS_NOC_CFG_AHB_CLK] = &gcc_mmss_noc_cfg_ahb_clk.clkr,
3372	[GCC_MMSS_BIMC_GFX_CLK] = &gcc_mmss_bimc_gfx_clk.clkr,
3373	[GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
3374	[GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,
3375	[GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
3376	[GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr,
3377	[GCC_USB3_PHY_PIPE_CLK] = &gcc_usb3_phy_pipe_clk.clkr,
3378	[GCC_USB20_MASTER_CLK] = &gcc_usb20_master_clk.clkr,
3379	[GCC_USB20_SLEEP_CLK] = &gcc_usb20_sleep_clk.clkr,
3380	[GCC_USB20_MOCK_UTMI_CLK] = &gcc_usb20_mock_utmi_clk.clkr,
3381	[GCC_USB_PHY_CFG_AHB2PHY_CLK] = &gcc_usb_phy_cfg_ahb2phy_clk.clkr,
3382	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
3383	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
3384	[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
3385	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3386	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3387	[GCC_SDCC3_APPS_CLK] = &gcc_sdcc3_apps_clk.clkr,
3388	[GCC_SDCC3_AHB_CLK] = &gcc_sdcc3_ahb_clk.clkr,
3389	[GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
3390	[GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
3391	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
3392	[GCC_BLSP1_SLEEP_CLK] = &gcc_blsp1_sleep_clk.clkr,
3393	[GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
3394	[GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
3395	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
3396	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
3397	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
3398	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
3399	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
3400	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
3401	[GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
3402	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
3403	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
3404	[GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
3405	[GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
3406	[GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
3407	[GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
3408	[GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
3409	[GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
3410	[GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
3411	[GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
3412	[GCC_BLSP2_SLEEP_CLK] = &gcc_blsp2_sleep_clk.clkr,
3413	[GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
3414	[GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
3415	[GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
3416	[GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
3417	[GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
3418	[GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
3419	[GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
3420	[GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
3421	[GCC_BLSP2_UART3_APPS_CLK] = &gcc_blsp2_uart3_apps_clk.clkr,
3422	[GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
3423	[GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
3424	[GCC_BLSP2_UART4_APPS_CLK] = &gcc_blsp2_uart4_apps_clk.clkr,
3425	[GCC_BLSP2_QUP5_SPI_APPS_CLK] = &gcc_blsp2_qup5_spi_apps_clk.clkr,
3426	[GCC_BLSP2_QUP5_I2C_APPS_CLK] = &gcc_blsp2_qup5_i2c_apps_clk.clkr,
3427	[GCC_BLSP2_UART5_APPS_CLK] = &gcc_blsp2_uart5_apps_clk.clkr,
3428	[GCC_BLSP2_QUP6_SPI_APPS_CLK] = &gcc_blsp2_qup6_spi_apps_clk.clkr,
3429	[GCC_BLSP2_QUP6_I2C_APPS_CLK] = &gcc_blsp2_qup6_i2c_apps_clk.clkr,
3430	[GCC_BLSP2_UART6_APPS_CLK] = &gcc_blsp2_uart6_apps_clk.clkr,
3431	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3432	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3433	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3434	[GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr,
3435	[GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
3436	[GCC_TSIF_INACTIVITY_TIMERS_CLK] = &gcc_tsif_inactivity_timers_clk.clkr,
3437	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3438	[GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
3439	[GCC_HMSS_RBCPR_CLK] = &gcc_hmss_rbcpr_clk.clkr,
3440	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3441	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3442	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3443	[GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
3444	[GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
3445	[GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
3446	[GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
3447	[GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
3448	[GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
3449	[GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
3450	[GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
3451	[GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
3452	[GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
3453	[GCC_PCIE_2_SLV_AXI_CLK] = &gcc_pcie_2_slv_axi_clk.clkr,
3454	[GCC_PCIE_2_MSTR_AXI_CLK] = &gcc_pcie_2_mstr_axi_clk.clkr,
3455	[GCC_PCIE_2_CFG_AHB_CLK] = &gcc_pcie_2_cfg_ahb_clk.clkr,
3456	[GCC_PCIE_2_AUX_CLK] = &gcc_pcie_2_aux_clk.clkr,
3457	[GCC_PCIE_2_PIPE_CLK] = &gcc_pcie_2_pipe_clk.clkr,
3458	[GCC_PCIE_PHY_CFG_AHB_CLK] = &gcc_pcie_phy_cfg_ahb_clk.clkr,
3459	[GCC_PCIE_PHY_AUX_CLK] = &gcc_pcie_phy_aux_clk.clkr,
3460	[GCC_UFS_AXI_CLK] = &gcc_ufs_axi_clk.clkr,
3461	[GCC_UFS_AHB_CLK] = &gcc_ufs_ahb_clk.clkr,
3462	[GCC_UFS_TX_CFG_CLK] = &gcc_ufs_tx_cfg_clk.clkr,
3463	[GCC_UFS_RX_CFG_CLK] = &gcc_ufs_rx_cfg_clk.clkr,
3464	[GCC_HLOS1_VOTE_LPASS_CORE_SMMU_CLK] = &gcc_hlos1_vote_lpass_core_smmu_clk.clkr,
3465	[GCC_HLOS1_VOTE_LPASS_ADSP_SMMU_CLK] = &gcc_hlos1_vote_lpass_adsp_smmu_clk.clkr,
3466	[GCC_UFS_TX_SYMBOL_0_CLK] = &gcc_ufs_tx_symbol_0_clk.clkr,
3467	[GCC_UFS_RX_SYMBOL_0_CLK] = &gcc_ufs_rx_symbol_0_clk.clkr,
3468	[GCC_UFS_RX_SYMBOL_1_CLK] = &gcc_ufs_rx_symbol_1_clk.clkr,
3469	[GCC_UFS_UNIPRO_CORE_CLK] = &gcc_ufs_unipro_core_clk.clkr,
3470	[GCC_UFS_ICE_CORE_CLK] = &gcc_ufs_ice_core_clk.clkr,
3471	[GCC_UFS_SYS_CLK_CORE_CLK] = &gcc_ufs_sys_clk_core_clk.clkr,
3472	[GCC_UFS_TX_SYMBOL_CLK_CORE_CLK] = &gcc_ufs_tx_symbol_clk_core_clk.clkr,
3473	[GCC_AGGRE0_SNOC_AXI_CLK] = &gcc_aggre0_snoc_axi_clk.clkr,
3474	[GCC_AGGRE0_CNOC_AHB_CLK] = &gcc_aggre0_cnoc_ahb_clk.clkr,
3475	[GCC_SMMU_AGGRE0_AXI_CLK] = &gcc_smmu_aggre0_axi_clk.clkr,
3476	[GCC_SMMU_AGGRE0_AHB_CLK] = &gcc_smmu_aggre0_ahb_clk.clkr,
3477	[GCC_AGGRE1_PNOC_AHB_CLK] = &gcc_aggre1_pnoc_ahb_clk.clkr,
3478	[GCC_AGGRE2_UFS_AXI_CLK] = &gcc_aggre2_ufs_axi_clk.clkr,
3479	[GCC_AGGRE2_USB3_AXI_CLK] = &gcc_aggre2_usb3_axi_clk.clkr,
3480	[GCC_QSPI_AHB_CLK] = &gcc_qspi_ahb_clk.clkr,
3481	[GCC_QSPI_SER_CLK] = &gcc_qspi_ser_clk.clkr,
3482	[GCC_USB3_CLKREF_CLK] = &gcc_usb3_clkref_clk.clkr,
3483	[GCC_HDMI_CLKREF_CLK] = &gcc_hdmi_clkref_clk.clkr,
3484	[GCC_UFS_CLKREF_CLK] = &gcc_ufs_clkref_clk.clkr,
3485	[GCC_PCIE_CLKREF_CLK] = &gcc_pcie_clkref_clk.clkr,
3486	[GCC_RX2_USB2_CLKREF_CLK] = &gcc_rx2_usb2_clkref_clk.clkr,
3487	[GCC_RX1_USB2_CLKREF_CLK] = &gcc_rx1_usb2_clkref_clk.clkr,
3488	[GCC_EDP_CLKREF_CLK] = &gcc_edp_clkref_clk.clkr,
3489	[GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
3490	[GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
3491	[GCC_MSS_SNOC_AXI_CLK] = &gcc_mss_snoc_axi_clk.clkr,
3492	[GCC_MSS_MNOC_BIMC_AXI_CLK] = &gcc_mss_mnoc_bimc_axi_clk.clkr,
3493	[GCC_DCC_AHB_CLK] = &gcc_dcc_ahb_clk.clkr,
3494	[GCC_AGGRE0_NOC_MPU_CFG_AHB_CLK] = &gcc_aggre0_noc_mpu_cfg_ahb_clk.clkr,
3495	[GCC_MMSS_GPLL0_DIV_CLK] = &gcc_mmss_gpll0_div_clk.clkr,
3496	[GCC_MSS_GPLL0_DIV_CLK] = &gcc_mss_gpll0_div_clk.clkr,
3497};
3498
3499static struct gdsc *gcc_msm8996_gdscs[] = {
3500	[AGGRE0_NOC_GDSC] = &aggre0_noc_gdsc,
3501	[HLOS1_VOTE_AGGRE0_NOC_GDSC] = &hlos1_vote_aggre0_noc_gdsc,
3502	[HLOS1_VOTE_LPASS_ADSP_GDSC] = &hlos1_vote_lpass_adsp_gdsc,
3503	[HLOS1_VOTE_LPASS_CORE_GDSC] = &hlos1_vote_lpass_core_gdsc,
3504	[USB30_GDSC] = &usb30_gdsc,
3505	[PCIE0_GDSC] = &pcie0_gdsc,
3506	[PCIE1_GDSC] = &pcie1_gdsc,
3507	[PCIE2_GDSC] = &pcie2_gdsc,
3508	[UFS_GDSC] = &ufs_gdsc,
3509};
3510
3511static const struct qcom_reset_map gcc_msm8996_resets[] = {
3512	[GCC_SYSTEM_NOC_BCR] = { 0x4000 },
3513	[GCC_CONFIG_NOC_BCR] = { 0x5000 },
3514	[GCC_PERIPH_NOC_BCR] = { 0x6000 },
3515	[GCC_IMEM_BCR] = { 0x8000 },
3516	[GCC_MMSS_BCR] = { 0x9000 },
3517	[GCC_PIMEM_BCR] = { 0x0a000 },
3518	[GCC_QDSS_BCR] = { 0x0c000 },
3519	[GCC_USB_30_BCR] = { 0x0f000 },
3520	[GCC_USB_20_BCR] = { 0x12000 },
3521	[GCC_QUSB2PHY_PRIM_BCR] = { 0x12038 },
3522	[GCC_QUSB2PHY_SEC_BCR] = { 0x1203c },
3523	[GCC_USB3_PHY_BCR] = { 0x50020 },
3524	[GCC_USB3PHY_PHY_BCR] = { 0x50024 },
3525	[GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 },
3526	[GCC_SDCC1_BCR] = { 0x13000 },
3527	[GCC_SDCC2_BCR] = { 0x14000 },
3528	[GCC_SDCC3_BCR] = { 0x15000 },
3529	[GCC_SDCC4_BCR] = { 0x16000 },
3530	[GCC_BLSP1_BCR] = { 0x17000 },
3531	[GCC_BLSP1_QUP1_BCR] = { 0x19000 },
3532	[GCC_BLSP1_UART1_BCR] = { 0x1a000 },
3533	[GCC_BLSP1_QUP2_BCR] = { 0x1b000 },
3534	[GCC_BLSP1_UART2_BCR] = { 0x1c000 },
3535	[GCC_BLSP1_QUP3_BCR] = { 0x1d000 },
3536	[GCC_BLSP1_UART3_BCR] = { 0x1e000 },
3537	[GCC_BLSP1_QUP4_BCR] = { 0x1f000 },
3538	[GCC_BLSP1_UART4_BCR] = { 0x20000 },
3539	[GCC_BLSP1_QUP5_BCR] = { 0x21000 },
3540	[GCC_BLSP1_UART5_BCR] = { 0x22000 },
3541	[GCC_BLSP1_QUP6_BCR] = { 0x23000 },
3542	[GCC_BLSP1_UART6_BCR] = { 0x24000 },
3543	[GCC_BLSP2_BCR] = { 0x25000 },
3544	[GCC_BLSP2_QUP1_BCR] = { 0x26000 },
3545	[GCC_BLSP2_UART1_BCR] = { 0x27000 },
3546	[GCC_BLSP2_QUP2_BCR] = { 0x28000 },
3547	[GCC_BLSP2_UART2_BCR] = { 0x29000 },
3548	[GCC_BLSP2_QUP3_BCR] = { 0x2a000 },
3549	[GCC_BLSP2_UART3_BCR] = { 0x2b000 },
3550	[GCC_BLSP2_QUP4_BCR] = { 0x2c000 },
3551	[GCC_BLSP2_UART4_BCR] = { 0x2d000 },
3552	[GCC_BLSP2_QUP5_BCR] = { 0x2e000 },
3553	[GCC_BLSP2_UART5_BCR] = { 0x2f000 },
3554	[GCC_BLSP2_QUP6_BCR] = { 0x30000 },
3555	[GCC_BLSP2_UART6_BCR] = { 0x31000 },
3556	[GCC_PDM_BCR] = { 0x33000 },
3557	[GCC_PRNG_BCR] = { 0x34000 },
3558	[GCC_TSIF_BCR] = { 0x36000 },
3559	[GCC_TCSR_BCR] = { 0x37000 },
3560	[GCC_BOOT_ROM_BCR] = { 0x38000 },
3561	[GCC_MSG_RAM_BCR] = { 0x39000 },
3562	[GCC_TLMM_BCR] = { 0x3a000 },
3563	[GCC_MPM_BCR] = { 0x3b000 },
3564	[GCC_SEC_CTRL_BCR] = { 0x3d000 },
3565	[GCC_SPMI_BCR] = { 0x3f000 },
3566	[GCC_SPDM_BCR] = { 0x40000 },
3567	[GCC_CE1_BCR] = { 0x41000 },
3568	[GCC_BIMC_BCR] = { 0x44000 },
3569	[GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x49000 },
3570	[GCC_SNOC_BUS_TIMEOUT2_BCR] = { 0x49008 },
3571	[GCC_SNOC_BUS_TIMEOUT1_BCR] = { 0x49010 },
3572	[GCC_SNOC_BUS_TIMEOUT3_BCR] = { 0x49018 },
3573	[GCC_SNOC_BUS_TIMEOUT_EXTREF_BCR] = { 0x49020 },
3574	[GCC_PNOC_BUS_TIMEOUT0_BCR] = { 0x4a000 },
3575	[GCC_PNOC_BUS_TIMEOUT1_BCR] = { 0x4a008 },
3576	[GCC_PNOC_BUS_TIMEOUT2_BCR] = { 0x4a010 },
3577	[GCC_PNOC_BUS_TIMEOUT3_BCR] = { 0x4a018 },
3578	[GCC_PNOC_BUS_TIMEOUT4_BCR] = { 0x4a020 },
3579	[GCC_CNOC_BUS_TIMEOUT0_BCR] = { 0x4b000 },
3580	[GCC_CNOC_BUS_TIMEOUT1_BCR] = { 0x4b008 },
3581	[GCC_CNOC_BUS_TIMEOUT2_BCR] = { 0x4b010 },
3582	[GCC_CNOC_BUS_TIMEOUT3_BCR] = { 0x4b018 },
3583	[GCC_CNOC_BUS_TIMEOUT4_BCR] = { 0x4b020 },
3584	[GCC_CNOC_BUS_TIMEOUT5_BCR] = { 0x4b028 },
3585	[GCC_CNOC_BUS_TIMEOUT6_BCR] = { 0x4b030 },
3586	[GCC_CNOC_BUS_TIMEOUT7_BCR] = { 0x4b038 },
3587	[GCC_CNOC_BUS_TIMEOUT8_BCR] = { 0x80000 },
3588	[GCC_CNOC_BUS_TIMEOUT9_BCR] = { 0x80008 },
3589	[GCC_CNOC_BUS_TIMEOUT_EXTREF_BCR] = { 0x80010 },
3590	[GCC_APB2JTAG_BCR] = { 0x4c000 },
3591	[GCC_RBCPR_CX_BCR] = { 0x4e000 },
3592	[GCC_RBCPR_MX_BCR] = { 0x4f000 },
3593	[GCC_PCIE_0_BCR] = { 0x6b000 },
3594	[GCC_PCIE_0_PHY_BCR] = { 0x6c01c },
3595	[GCC_PCIE_1_BCR] = { 0x6d000 },
3596	[GCC_PCIE_1_PHY_BCR] = { 0x6d038 },
3597	[GCC_PCIE_2_BCR] = { 0x6e000 },
3598	[GCC_PCIE_2_PHY_BCR] = { 0x6e038 },
3599	[GCC_PCIE_PHY_BCR] = { 0x6f000 },
3600	[GCC_PCIE_PHY_COM_BCR] = { 0x6f014 },
3601	[GCC_PCIE_PHY_COM_NOCSR_BCR] = { 0x6f00c },
3602	[GCC_DCD_BCR] = { 0x70000 },
3603	[GCC_OBT_ODT_BCR] = { 0x73000 },
3604	[GCC_UFS_BCR] = { 0x75000 },
3605	[GCC_SSC_BCR] = { 0x63000 },
3606	[GCC_VS_BCR] = { 0x7a000 },
3607	[GCC_AGGRE0_NOC_BCR] = { 0x81000 },
3608	[GCC_AGGRE1_NOC_BCR] = { 0x82000 },
3609	[GCC_AGGRE2_NOC_BCR] = { 0x83000 },
3610	[GCC_DCC_BCR] = { 0x84000 },
3611	[GCC_IPA_BCR] = { 0x89000 },
3612	[GCC_QSPI_BCR] = { 0x8b000 },
3613	[GCC_SKL_BCR] = { 0x8c000 },
3614	[GCC_MSMPU_BCR] = { 0x8d000 },
3615	[GCC_MSS_Q6_BCR] = { 0x8e000 },
3616	[GCC_QREFS_VBG_CAL_BCR] = { 0x88020 },
3617	[GCC_MSS_RESTART] = { 0x8f008 },
3618};
3619
3620static const struct regmap_config gcc_msm8996_regmap_config = {
3621	.reg_bits	= 32,
3622	.reg_stride	= 4,
3623	.val_bits	= 32,
3624	.max_register	= 0x8f010,
3625	.fast_io	= true,
3626};
3627
3628static const struct qcom_cc_desc gcc_msm8996_desc = {
3629	.config = &gcc_msm8996_regmap_config,
3630	.clks = gcc_msm8996_clocks,
3631	.num_clks = ARRAY_SIZE(gcc_msm8996_clocks),
3632	.resets = gcc_msm8996_resets,
3633	.num_resets = ARRAY_SIZE(gcc_msm8996_resets),
3634	.gdscs = gcc_msm8996_gdscs,
3635	.num_gdscs = ARRAY_SIZE(gcc_msm8996_gdscs),
3636	.clk_hws = gcc_msm8996_hws,
3637	.num_clk_hws = ARRAY_SIZE(gcc_msm8996_hws),
3638};
3639
3640static const struct of_device_id gcc_msm8996_match_table[] = {
3641	{ .compatible = "qcom,gcc-msm8996" },
3642	{ }
3643};
3644MODULE_DEVICE_TABLE(of, gcc_msm8996_match_table);
3645
3646static int gcc_msm8996_probe(struct platform_device *pdev)
3647{
3648	struct regmap *regmap;
3649
3650	regmap = qcom_cc_map(pdev, &gcc_msm8996_desc);
3651	if (IS_ERR(regmap))
3652		return PTR_ERR(regmap);
3653
3654	/*
3655	 * Set the HMSS_AHB_CLK_SLEEP_ENA bit to allow the hmss_ahb_clk to be
3656	 * turned off by hardware during certain apps low power modes.
3657	 */
3658	regmap_update_bits(regmap, 0x52008, BIT(21), BIT(21));
3659
3660	return qcom_cc_really_probe(pdev, &gcc_msm8996_desc, regmap);
3661}
3662
3663static struct platform_driver gcc_msm8996_driver = {
3664	.probe		= gcc_msm8996_probe,
3665	.driver		= {
3666		.name	= "gcc-msm8996",
3667		.of_match_table = gcc_msm8996_match_table,
3668	},
3669};
3670
3671static int __init gcc_msm8996_init(void)
3672{
3673	return platform_driver_register(&gcc_msm8996_driver);
3674}
3675core_initcall(gcc_msm8996_init);
3676
3677static void __exit gcc_msm8996_exit(void)
3678{
3679	platform_driver_unregister(&gcc_msm8996_driver);
3680}
3681module_exit(gcc_msm8996_exit);
3682
3683MODULE_DESCRIPTION("QCOM GCC MSM8996 Driver");
3684MODULE_LICENSE("GPL v2");
3685MODULE_ALIAS("platform:gcc-msm8996");