Linux Audio

Check our new training course

Embedded Linux training

Mar 31-Apr 8, 2025
Register
Loading...
Note: File does not exist in v3.5.6.
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * Copyright (c) 2018, The Linux Foundation. All rights reserved.
   4 */
   5
   6#include <linux/kernel.h>
   7#include <linux/err.h>
   8#include <linux/platform_device.h>
   9#include <linux/module.h>
  10#include <linux/of.h>
  11#include <linux/of_device.h>
  12#include <linux/clk-provider.h>
  13#include <linux/regmap.h>
  14
  15#include <linux/reset-controller.h>
  16#include <dt-bindings/clock/qcom,gcc-ipq6018.h>
  17#include <dt-bindings/reset/qcom,gcc-ipq6018.h>
  18
  19#include "common.h"
  20#include "clk-regmap.h"
  21#include "clk-pll.h"
  22#include "clk-rcg.h"
  23#include "clk-branch.h"
  24#include "clk-alpha-pll.h"
  25#include "clk-regmap-divider.h"
  26#include "clk-regmap-mux.h"
  27#include "reset.h"
  28
  29#define F(f, s, h, m, n) { (f), (s), (2 * (h) - 1), (m), (n) }
  30
  31enum {
  32	P_XO,
  33	P_BIAS_PLL,
  34	P_UNIPHY0_RX,
  35	P_UNIPHY0_TX,
  36	P_UNIPHY1_RX,
  37	P_BIAS_PLL_NSS_NOC,
  38	P_UNIPHY1_TX,
  39	P_PCIE20_PHY0_PIPE,
  40	P_USB3PHY_0_PIPE,
  41	P_GPLL0,
  42	P_GPLL0_DIV2,
  43	P_GPLL2,
  44	P_GPLL4,
  45	P_GPLL6,
  46	P_SLEEP_CLK,
  47	P_UBI32_PLL,
  48	P_NSS_CRYPTO_PLL,
  49	P_PI_SLEEP,
  50};
  51
  52static struct clk_alpha_pll gpll0_main = {
  53	.offset = 0x21000,
  54	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  55	.clkr = {
  56		.enable_reg = 0x0b000,
  57		.enable_mask = BIT(0),
  58		.hw.init = &(struct clk_init_data){
  59			.name = "gpll0_main",
  60			.parent_data = &(const struct clk_parent_data){
  61				.fw_name = "xo",
  62			},
  63			.num_parents = 1,
  64			.ops = &clk_alpha_pll_ops,
  65		},
  66	},
  67};
  68
  69static struct clk_fixed_factor gpll0_out_main_div2 = {
  70	.mult = 1,
  71	.div = 2,
  72	.hw.init = &(struct clk_init_data){
  73		.name = "gpll0_out_main_div2",
  74		.parent_hws = (const struct clk_hw *[]){
  75				&gpll0_main.clkr.hw },
  76		.num_parents = 1,
  77		.ops = &clk_fixed_factor_ops,
  78		.flags = CLK_SET_RATE_PARENT,
  79	},
  80};
  81
  82static struct clk_alpha_pll_postdiv gpll0 = {
  83	.offset = 0x21000,
  84	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  85	.width = 4,
  86	.clkr.hw.init = &(struct clk_init_data){
  87		.name = "gpll0",
  88		.parent_hws = (const struct clk_hw *[]){
  89				&gpll0_main.clkr.hw },
  90		.num_parents = 1,
  91		.ops = &clk_alpha_pll_postdiv_ro_ops,
  92		.flags = CLK_SET_RATE_PARENT,
  93	},
  94};
  95
  96static const struct clk_parent_data gcc_xo_gpll0_gpll0_out_main_div2[] = {
  97	{ .fw_name = "xo" },
  98	{ .hw = &gpll0.clkr.hw},
  99	{ .hw = &gpll0_out_main_div2.hw},
 100};
 101
 102static const struct parent_map gcc_xo_gpll0_gpll0_out_main_div2_map[] = {
 103	{ P_XO, 0 },
 104	{ P_GPLL0, 1 },
 105	{ P_GPLL0_DIV2, 4 },
 106};
 107
 108static struct clk_alpha_pll ubi32_pll_main = {
 109	.offset = 0x25000,
 110	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_HUAYRA],
 111	.flags = SUPPORTS_DYNAMIC_UPDATE,
 112	.clkr = {
 113		.enable_reg = 0x0b000,
 114		.enable_mask = BIT(6),
 115		.hw.init = &(struct clk_init_data){
 116			.name = "ubi32_pll_main",
 117			.parent_data = &(const struct clk_parent_data){
 118				.fw_name = "xo",
 119			},
 120			.num_parents = 1,
 121			.ops = &clk_alpha_pll_huayra_ops,
 122		},
 123	},
 124};
 125
 126static struct clk_alpha_pll_postdiv ubi32_pll = {
 127	.offset = 0x25000,
 128	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_HUAYRA],
 129	.width = 2,
 130	.clkr.hw.init = &(struct clk_init_data){
 131		.name = "ubi32_pll",
 132		.parent_hws = (const struct clk_hw *[]){
 133				&ubi32_pll_main.clkr.hw },
 134		.num_parents = 1,
 135		.ops = &clk_alpha_pll_postdiv_ro_ops,
 136		.flags = CLK_SET_RATE_PARENT,
 137	},
 138};
 139
 140static struct clk_alpha_pll gpll6_main = {
 141	.offset = 0x37000,
 142	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO],
 143	.clkr = {
 144		.enable_reg = 0x0b000,
 145		.enable_mask = BIT(7),
 146		.hw.init = &(struct clk_init_data){
 147			.name = "gpll6_main",
 148			.parent_data = &(const struct clk_parent_data){
 149				.fw_name = "xo",
 150			},
 151			.num_parents = 1,
 152			.ops = &clk_alpha_pll_ops,
 153		},
 154	},
 155};
 156
 157static struct clk_alpha_pll_postdiv gpll6 = {
 158	.offset = 0x37000,
 159	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO],
 160	.width = 2,
 161	.clkr.hw.init = &(struct clk_init_data){
 162		.name = "gpll6",
 163		.parent_hws = (const struct clk_hw *[]){
 164				&gpll6_main.clkr.hw },
 165		.num_parents = 1,
 166		.ops = &clk_alpha_pll_postdiv_ro_ops,
 167		.flags = CLK_SET_RATE_PARENT,
 168	},
 169};
 170
 171static struct clk_alpha_pll gpll4_main = {
 172	.offset = 0x24000,
 173	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 174	.clkr = {
 175		.enable_reg = 0x0b000,
 176		.enable_mask = BIT(5),
 177		.hw.init = &(struct clk_init_data){
 178			.name = "gpll4_main",
 179			.parent_data = &(const struct clk_parent_data){
 180				.fw_name = "xo",
 181			},
 182			.num_parents = 1,
 183			.ops = &clk_alpha_pll_ops,
 184		},
 185	},
 186};
 187
 188static struct clk_alpha_pll_postdiv gpll4 = {
 189	.offset = 0x24000,
 190	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 191	.width = 4,
 192	.clkr.hw.init = &(struct clk_init_data){
 193		.name = "gpll4",
 194		.parent_hws = (const struct clk_hw *[]){
 195				&gpll4_main.clkr.hw },
 196		.num_parents = 1,
 197		.ops = &clk_alpha_pll_postdiv_ro_ops,
 198		.flags = CLK_SET_RATE_PARENT,
 199	},
 200};
 201
 202static const struct freq_tbl ftbl_pcnoc_bfdcd_clk_src[] = {
 203	F(24000000, P_XO, 1, 0, 0),
 204	F(50000000, P_GPLL0, 16, 0, 0),
 205	F(100000000, P_GPLL0, 8, 0, 0),
 206	{ }
 207};
 208
 209static struct clk_rcg2 pcnoc_bfdcd_clk_src = {
 210	.cmd_rcgr = 0x27000,
 211	.freq_tbl = ftbl_pcnoc_bfdcd_clk_src,
 212	.hid_width = 5,
 213	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
 214	.clkr.hw.init = &(struct clk_init_data){
 215		.name = "pcnoc_bfdcd_clk_src",
 216		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
 217		.num_parents = 3,
 218		.ops = &clk_rcg2_ops,
 219	},
 220};
 221
 222static struct clk_alpha_pll gpll2_main = {
 223	.offset = 0x4a000,
 224	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 225	.clkr = {
 226		.enable_reg = 0x0b000,
 227		.enable_mask = BIT(2),
 228		.hw.init = &(struct clk_init_data){
 229			.name = "gpll2_main",
 230			.parent_data = &(const struct clk_parent_data){
 231				.fw_name = "xo",
 232			},
 233			.num_parents = 1,
 234			.ops = &clk_alpha_pll_ops,
 235		},
 236	},
 237};
 238
 239static struct clk_alpha_pll_postdiv gpll2 = {
 240	.offset = 0x4a000,
 241	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 242	.width = 4,
 243	.clkr.hw.init = &(struct clk_init_data){
 244		.name = "gpll2",
 245		.parent_hws = (const struct clk_hw *[]){
 246				&gpll2_main.clkr.hw },
 247		.num_parents = 1,
 248		.ops = &clk_alpha_pll_postdiv_ro_ops,
 249		.flags = CLK_SET_RATE_PARENT,
 250	},
 251};
 252
 253static struct clk_alpha_pll nss_crypto_pll_main = {
 254	.offset = 0x22000,
 255	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 256	.clkr = {
 257		.enable_reg = 0x0b000,
 258		.enable_mask = BIT(4),
 259		.hw.init = &(struct clk_init_data){
 260			.name = "nss_crypto_pll_main",
 261			.parent_data = &(const struct clk_parent_data){
 262				.fw_name = "xo",
 263			},
 264			.num_parents = 1,
 265			.ops = &clk_alpha_pll_ops,
 266		},
 267	},
 268};
 269
 270static struct clk_alpha_pll_postdiv nss_crypto_pll = {
 271	.offset = 0x22000,
 272	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 273	.width = 4,
 274	.clkr.hw.init = &(struct clk_init_data){
 275		.name = "nss_crypto_pll",
 276		.parent_hws = (const struct clk_hw *[]){
 277				&nss_crypto_pll_main.clkr.hw },
 278		.num_parents = 1,
 279		.ops = &clk_alpha_pll_postdiv_ro_ops,
 280		.flags = CLK_SET_RATE_PARENT,
 281	},
 282};
 283
 284static const struct freq_tbl ftbl_qdss_tsctr_clk_src[] = {
 285	F(160000000, P_GPLL0_DIV2, 2.5, 0, 0),
 286	F(320000000, P_GPLL0, 2.5, 0, 0),
 287	F(600000000, P_GPLL4, 2, 0, 0),
 288	{ }
 289};
 290
 291static const struct clk_parent_data gcc_xo_gpll4_gpll0_gpll6_gpll0_div2[] = {
 292	{ .fw_name = "xo" },
 293	{ .hw = &gpll4.clkr.hw },
 294	{ .hw = &gpll0.clkr.hw },
 295	{ .hw = &gpll6.clkr.hw },
 296	{ .hw = &gpll0_out_main_div2.hw },
 297};
 298
 299static const struct parent_map gcc_xo_gpll4_gpll0_gpll6_gpll0_div2_map[] = {
 300	{ P_XO, 0 },
 301	{ P_GPLL4, 1 },
 302	{ P_GPLL0, 2 },
 303	{ P_GPLL6, 3 },
 304	{ P_GPLL0_DIV2, 4 },
 305};
 306
 307static struct clk_rcg2 qdss_tsctr_clk_src = {
 308	.cmd_rcgr = 0x29064,
 309	.freq_tbl = ftbl_qdss_tsctr_clk_src,
 310	.hid_width = 5,
 311	.parent_map = gcc_xo_gpll4_gpll0_gpll6_gpll0_div2_map,
 312	.clkr.hw.init = &(struct clk_init_data){
 313		.name = "qdss_tsctr_clk_src",
 314		.parent_data = gcc_xo_gpll4_gpll0_gpll6_gpll0_div2,
 315		.num_parents = 5,
 316		.ops = &clk_rcg2_ops,
 317	},
 318};
 319
 320static struct clk_fixed_factor qdss_dap_sync_clk_src = {
 321	.mult = 1,
 322	.div = 4,
 323	.hw.init = &(struct clk_init_data){
 324		.name = "qdss_dap_sync_clk_src",
 325		.parent_hws = (const struct clk_hw *[]){
 326				&qdss_tsctr_clk_src.clkr.hw },
 327		.num_parents = 1,
 328		.ops = &clk_fixed_factor_ops,
 329	},
 330};
 331
 332static const struct freq_tbl ftbl_qdss_at_clk_src[] = {
 333	F(66670000, P_GPLL0_DIV2, 6, 0, 0),
 334	F(240000000, P_GPLL4, 5, 0, 0),
 335	{ }
 336};
 337
 338static struct clk_rcg2 qdss_at_clk_src = {
 339	.cmd_rcgr = 0x2900c,
 340	.freq_tbl = ftbl_qdss_at_clk_src,
 341	.hid_width = 5,
 342	.parent_map = gcc_xo_gpll4_gpll0_gpll6_gpll0_div2_map,
 343	.clkr.hw.init = &(struct clk_init_data){
 344		.name = "qdss_at_clk_src",
 345		.parent_data = gcc_xo_gpll4_gpll0_gpll6_gpll0_div2,
 346		.num_parents = 5,
 347		.ops = &clk_rcg2_ops,
 348	},
 349};
 350
 351static struct clk_fixed_factor qdss_tsctr_div2_clk_src = {
 352	.mult = 1,
 353	.div = 2,
 354	.hw.init = &(struct clk_init_data){
 355		.name = "qdss_tsctr_div2_clk_src",
 356		.parent_hws = (const struct clk_hw *[]){
 357				&qdss_tsctr_clk_src.clkr.hw },
 358		.num_parents = 1,
 359		.flags = CLK_SET_RATE_PARENT,
 360		.ops = &clk_fixed_factor_ops,
 361	},
 362};
 363
 364static const struct freq_tbl ftbl_nss_ppe_clk_src[] = {
 365	F(24000000, P_XO, 1, 0, 0),
 366	F(300000000, P_BIAS_PLL, 1, 0, 0),
 367	{ }
 368};
 369
 370static const struct clk_parent_data gcc_xo_bias_gpll0_gpll4_nss_ubi32[] = {
 371	{ .fw_name = "xo" },
 372	{ .fw_name = "bias_pll_cc_clk" },
 373	{ .hw = &gpll0.clkr.hw },
 374	{ .hw = &gpll4.clkr.hw },
 375	{ .hw = &nss_crypto_pll.clkr.hw },
 376	{ .hw = &ubi32_pll.clkr.hw },
 377};
 378
 379static const struct parent_map gcc_xo_bias_gpll0_gpll4_nss_ubi32_map[] = {
 380	{ P_XO, 0 },
 381	{ P_BIAS_PLL, 1 },
 382	{ P_GPLL0, 2 },
 383	{ P_GPLL4, 3 },
 384	{ P_NSS_CRYPTO_PLL, 4 },
 385	{ P_UBI32_PLL, 5 },
 386};
 387
 388static struct clk_rcg2 nss_ppe_clk_src = {
 389	.cmd_rcgr = 0x68080,
 390	.freq_tbl = ftbl_nss_ppe_clk_src,
 391	.hid_width = 5,
 392	.parent_map = gcc_xo_bias_gpll0_gpll4_nss_ubi32_map,
 393	.clkr.hw.init = &(struct clk_init_data){
 394		.name = "nss_ppe_clk_src",
 395		.parent_data = gcc_xo_bias_gpll0_gpll4_nss_ubi32,
 396		.num_parents = 6,
 397		.ops = &clk_rcg2_ops,
 398	},
 399};
 400
 401static struct clk_branch gcc_xo_clk_src = {
 402	.halt_reg = 0x30018,
 403	.clkr = {
 404		.enable_reg = 0x30018,
 405		.enable_mask = BIT(1),
 406		.hw.init = &(struct clk_init_data){
 407			.name = "gcc_xo_clk_src",
 408			.parent_data = &(const struct clk_parent_data){
 409				.fw_name = "xo",
 410			},
 411			.num_parents = 1,
 412			.flags = CLK_SET_RATE_PARENT,
 413			.ops = &clk_branch2_ops,
 414		},
 415	},
 416};
 417
 418static const struct freq_tbl ftbl_nss_ce_clk_src[] = {
 419	F(24000000, P_XO, 1, 0, 0),
 420	F(200000000, P_GPLL0, 4, 0, 0),
 421	{ }
 422};
 423
 424static const struct clk_parent_data gcc_xo_gpll0[] = {
 425	{ .fw_name = "xo" },
 426	{ .hw = &gpll0.clkr.hw },
 427};
 428
 429static const struct parent_map gcc_xo_gpll0_map[] = {
 430	{ P_XO, 0 },
 431	{ P_GPLL0, 1 },
 432};
 433
 434static struct clk_rcg2 nss_ce_clk_src = {
 435	.cmd_rcgr = 0x68098,
 436	.freq_tbl = ftbl_nss_ce_clk_src,
 437	.hid_width = 5,
 438	.parent_map = gcc_xo_gpll0_map,
 439	.clkr.hw.init = &(struct clk_init_data){
 440		.name = "nss_ce_clk_src",
 441		.parent_data = gcc_xo_gpll0,
 442		.num_parents = 2,
 443		.ops = &clk_rcg2_ops,
 444	},
 445};
 446
 447static struct clk_branch gcc_sleep_clk_src = {
 448	.halt_reg = 0x30000,
 449	.clkr = {
 450		.enable_reg = 0x30000,
 451		.enable_mask = BIT(1),
 452		.hw.init = &(struct clk_init_data){
 453			.name = "gcc_sleep_clk_src",
 454			.parent_data = &(const struct clk_parent_data){
 455				.fw_name = "sleep_clk",
 456			},
 457			.num_parents = 1,
 458			.ops = &clk_branch2_ops,
 459		},
 460	},
 461};
 462
 463static const struct freq_tbl ftbl_snoc_nssnoc_bfdcd_clk_src[] = {
 464	F(24000000, P_XO, 1, 0, 0),
 465	F(50000000, P_GPLL0_DIV2, 8, 0, 0),
 466	F(100000000, P_GPLL0, 8, 0, 0),
 467	F(133333333, P_GPLL0, 6, 0, 0),
 468	F(160000000, P_GPLL0, 5, 0, 0),
 469	F(200000000, P_GPLL0, 4, 0, 0),
 470	F(266666667, P_GPLL0, 3, 0, 0),
 471	{ }
 472};
 473
 474static const struct clk_parent_data
 475			gcc_xo_gpll0_gpll6_gpll0_out_main_div2[] = {
 476	{ .fw_name = "xo" },
 477	{ .hw = &gpll0.clkr.hw },
 478	{ .hw = &gpll6.clkr.hw },
 479	{ .hw = &gpll0_out_main_div2.hw },
 480};
 481
 482static const struct parent_map gcc_xo_gpll0_gpll6_gpll0_out_main_div2_map[] = {
 483	{ P_XO, 0 },
 484	{ P_GPLL0, 1 },
 485	{ P_GPLL6, 2 },
 486	{ P_GPLL0_DIV2, 3 },
 487};
 488
 489static struct clk_rcg2 snoc_nssnoc_bfdcd_clk_src = {
 490	.cmd_rcgr = 0x76054,
 491	.freq_tbl = ftbl_snoc_nssnoc_bfdcd_clk_src,
 492	.hid_width = 5,
 493	.parent_map = gcc_xo_gpll0_gpll6_gpll0_out_main_div2_map,
 494	.clkr.hw.init = &(struct clk_init_data){
 495		.name = "snoc_nssnoc_bfdcd_clk_src",
 496		.parent_data = gcc_xo_gpll0_gpll6_gpll0_out_main_div2,
 497		.num_parents = 4,
 498		.ops = &clk_rcg2_ops,
 499	},
 500};
 501
 502static const struct freq_tbl ftbl_apss_ahb_clk_src[] = {
 503	F(24000000, P_XO, 1, 0, 0),
 504	F(25000000, P_GPLL0_DIV2, 16, 0, 0),
 505	F(50000000, P_GPLL0, 16, 0, 0),
 506	F(100000000, P_GPLL0, 8, 0, 0),
 507	{ }
 508};
 509
 510static struct clk_rcg2 apss_ahb_clk_src = {
 511	.cmd_rcgr = 0x46000,
 512	.freq_tbl = ftbl_apss_ahb_clk_src,
 513	.hid_width = 5,
 514	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
 515	.clkr.hw.init = &(struct clk_init_data){
 516		.name = "apss_ahb_clk_src",
 517		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
 518		.num_parents = 3,
 519		.ops = &clk_rcg2_ops,
 520	},
 521};
 522
 523static const struct freq_tbl ftbl_nss_port5_rx_clk_src[] = {
 524	F(24000000, P_XO, 1, 0, 0),
 525	F(25000000, P_UNIPHY1_RX, 12.5, 0, 0),
 526	F(25000000, P_UNIPHY0_RX, 5, 0, 0),
 527	F(78125000, P_UNIPHY1_RX, 4, 0, 0),
 528	F(125000000, P_UNIPHY1_RX, 2.5, 0, 0),
 529	F(125000000, P_UNIPHY0_RX, 1, 0, 0),
 530	F(156250000, P_UNIPHY1_RX, 2, 0, 0),
 531	F(312500000, P_UNIPHY1_RX, 1, 0, 0),
 532	{ }
 533};
 534
 535static const struct clk_parent_data
 536gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias[] = {
 537	{ .fw_name = "xo" },
 538	{ .fw_name = "uniphy0_gcc_rx_clk" },
 539	{ .fw_name = "uniphy0_gcc_tx_clk" },
 540	{ .fw_name = "uniphy1_gcc_rx_clk" },
 541	{ .fw_name = "uniphy1_gcc_tx_clk" },
 542	{ .hw = &ubi32_pll.clkr.hw },
 543	{ .fw_name = "bias_pll_cc_clk" },
 544};
 545
 546static const struct parent_map
 547gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias_map[] = {
 548	{ P_XO, 0 },
 549	{ P_UNIPHY0_RX, 1 },
 550	{ P_UNIPHY0_TX, 2 },
 551	{ P_UNIPHY1_RX, 3 },
 552	{ P_UNIPHY1_TX, 4 },
 553	{ P_UBI32_PLL, 5 },
 554	{ P_BIAS_PLL, 6 },
 555};
 556
 557static struct clk_rcg2 nss_port5_rx_clk_src = {
 558	.cmd_rcgr = 0x68060,
 559	.freq_tbl = ftbl_nss_port5_rx_clk_src,
 560	.hid_width = 5,
 561	.parent_map = gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias_map,
 562	.clkr.hw.init = &(struct clk_init_data){
 563		.name = "nss_port5_rx_clk_src",
 564		.parent_data = gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias,
 565		.num_parents = 7,
 566		.ops = &clk_rcg2_ops,
 567	},
 568};
 569
 570static const struct freq_tbl ftbl_nss_port5_tx_clk_src[] = {
 571	F(24000000, P_XO, 1, 0, 0),
 572	F(25000000, P_UNIPHY1_TX, 12.5, 0, 0),
 573	F(25000000, P_UNIPHY0_TX, 5, 0, 0),
 574	F(78125000, P_UNIPHY1_TX, 4, 0, 0),
 575	F(125000000, P_UNIPHY1_TX, 2.5, 0, 0),
 576	F(125000000, P_UNIPHY0_TX, 1, 0, 0),
 577	F(156250000, P_UNIPHY1_TX, 2, 0, 0),
 578	F(312500000, P_UNIPHY1_TX, 1, 0, 0),
 579	{ }
 580};
 581
 582static const struct clk_parent_data
 583gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias[] = {
 584	{ .fw_name = "xo" },
 585	{ .fw_name = "uniphy0_gcc_tx_clk" },
 586	{ .fw_name = "uniphy0_gcc_rx_clk" },
 587	{ .fw_name = "uniphy1_gcc_tx_clk" },
 588	{ .fw_name = "uniphy1_gcc_rx_clk" },
 589	{ .hw = &ubi32_pll.clkr.hw },
 590	{ .fw_name = "bias_pll_cc_clk" },
 591};
 592
 593static const struct parent_map
 594gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias_map[] = {
 595	{ P_XO, 0 },
 596	{ P_UNIPHY0_TX, 1 },
 597	{ P_UNIPHY0_RX, 2 },
 598	{ P_UNIPHY1_TX, 3 },
 599	{ P_UNIPHY1_RX, 4 },
 600	{ P_UBI32_PLL, 5 },
 601	{ P_BIAS_PLL, 6 },
 602};
 603
 604static struct clk_rcg2 nss_port5_tx_clk_src = {
 605	.cmd_rcgr = 0x68068,
 606	.freq_tbl = ftbl_nss_port5_tx_clk_src,
 607	.hid_width = 5,
 608	.parent_map = gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias_map,
 609	.clkr.hw.init = &(struct clk_init_data){
 610		.name = "nss_port5_tx_clk_src",
 611		.parent_data = gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias,
 612		.num_parents = 7,
 613		.ops = &clk_rcg2_ops,
 614	},
 615};
 616
 617static const struct freq_tbl ftbl_pcie_axi_clk_src[] = {
 618	F(24000000, P_XO, 1, 0, 0),
 619	F(200000000, P_GPLL0, 4, 0, 0),
 620	F(240000000, P_GPLL4, 5, 0, 0),
 621	{ }
 622};
 623
 624static const struct freq_tbl ftbl_pcie_rchng_clk_src[] = {
 625	F(24000000, P_XO, 1, 0, 0),
 626	F(100000000, P_GPLL0, 8, 0, 0),
 627	{ }
 628};
 629
 630static const struct clk_parent_data gcc_xo_gpll0_gpll4[] = {
 631	{ .fw_name = "xo" },
 632	{ .hw = &gpll0.clkr.hw },
 633	{ .hw = &gpll4.clkr.hw },
 634};
 635
 636static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {
 637	{ P_XO, 0 },
 638	{ P_GPLL0, 1 },
 639	{ P_GPLL4, 2 },
 640};
 641
 642static struct clk_rcg2 pcie0_axi_clk_src = {
 643	.cmd_rcgr = 0x75054,
 644	.freq_tbl = ftbl_pcie_axi_clk_src,
 645	.hid_width = 5,
 646	.parent_map = gcc_xo_gpll0_gpll4_map,
 647	.clkr.hw.init = &(struct clk_init_data){
 648		.name = "pcie0_axi_clk_src",
 649		.parent_data = gcc_xo_gpll0_gpll4,
 650		.num_parents = 3,
 651		.ops = &clk_rcg2_ops,
 652	},
 653};
 654
 655static const struct freq_tbl ftbl_usb0_master_clk_src[] = {
 656	F(80000000, P_GPLL0_DIV2, 5, 0, 0),
 657	F(100000000, P_GPLL0, 8, 0, 0),
 658	F(133330000, P_GPLL0, 6, 0, 0),
 659	F(200000000, P_GPLL0, 4, 0, 0),
 660	{ }
 661};
 662
 663static const struct clk_parent_data gcc_xo_gpll0_out_main_div2_gpll0[] = {
 664	{ .fw_name = "xo" },
 665	{ .hw = &gpll0_out_main_div2.hw },
 666	{ .hw = &gpll0.clkr.hw },
 667};
 668
 669static const struct parent_map gcc_xo_gpll0_out_main_div2_gpll0_map[] = {
 670	{ P_XO, 0 },
 671	{ P_GPLL0_DIV2, 2 },
 672	{ P_GPLL0, 1 },
 673};
 674
 675static struct clk_rcg2 usb0_master_clk_src = {
 676	.cmd_rcgr = 0x3e00c,
 677	.freq_tbl = ftbl_usb0_master_clk_src,
 678	.mnd_width = 8,
 679	.hid_width = 5,
 680	.parent_map = gcc_xo_gpll0_out_main_div2_gpll0_map,
 681	.clkr.hw.init = &(struct clk_init_data){
 682		.name = "usb0_master_clk_src",
 683		.parent_data = gcc_xo_gpll0_out_main_div2_gpll0,
 684		.num_parents = 3,
 685		.ops = &clk_rcg2_ops,
 686	},
 687};
 688
 689static struct clk_regmap_div apss_ahb_postdiv_clk_src = {
 690	.reg = 0x46018,
 691	.shift = 4,
 692	.width = 4,
 693	.clkr = {
 694		.hw.init = &(struct clk_init_data){
 695			.name = "apss_ahb_postdiv_clk_src",
 696			.parent_hws = (const struct clk_hw *[]){
 697					&apss_ahb_clk_src.clkr.hw },
 698			.num_parents = 1,
 699			.ops = &clk_regmap_div_ops,
 700		},
 701	},
 702};
 703
 704static struct clk_fixed_factor gcc_xo_div4_clk_src = {
 705	.mult = 1,
 706	.div = 4,
 707	.hw.init = &(struct clk_init_data){
 708		.name = "gcc_xo_div4_clk_src",
 709		.parent_hws = (const struct clk_hw *[]){
 710				&gcc_xo_clk_src.clkr.hw },
 711		.num_parents = 1,
 712		.ops = &clk_fixed_factor_ops,
 713		.flags = CLK_SET_RATE_PARENT,
 714	},
 715};
 716
 717static const struct freq_tbl ftbl_nss_port1_rx_clk_src[] = {
 718	F(24000000, P_XO, 1, 0, 0),
 719	F(25000000, P_UNIPHY0_RX, 5, 0, 0),
 720	F(125000000, P_UNIPHY0_RX, 1, 0, 0),
 721	{ }
 722};
 723
 724static const struct clk_parent_data gcc_xo_uniphy0_rx_tx_ubi32_bias[] = {
 725	{ .fw_name = "xo" },
 726	{ .fw_name = "uniphy0_gcc_rx_clk" },
 727	{ .fw_name = "uniphy0_gcc_tx_clk" },
 728	{ .hw = &ubi32_pll.clkr.hw },
 729	{ .fw_name = "bias_pll_cc_clk" },
 730};
 731
 732static const struct parent_map gcc_xo_uniphy0_rx_tx_ubi32_bias_map[] = {
 733	{ P_XO, 0 },
 734	{ P_UNIPHY0_RX, 1 },
 735	{ P_UNIPHY0_TX, 2 },
 736	{ P_UBI32_PLL, 5 },
 737	{ P_BIAS_PLL, 6 },
 738};
 739
 740static struct clk_rcg2 nss_port1_rx_clk_src = {
 741	.cmd_rcgr = 0x68020,
 742	.freq_tbl = ftbl_nss_port1_rx_clk_src,
 743	.hid_width = 5,
 744	.parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
 745	.clkr.hw.init = &(struct clk_init_data){
 746		.name = "nss_port1_rx_clk_src",
 747		.parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
 748		.num_parents = 5,
 749		.ops = &clk_rcg2_ops,
 750	},
 751};
 752
 753static const struct freq_tbl ftbl_nss_port1_tx_clk_src[] = {
 754	F(24000000, P_XO, 1, 0, 0),
 755	F(25000000, P_UNIPHY0_TX, 5, 0, 0),
 756	F(125000000, P_UNIPHY0_TX, 1, 0, 0),
 757	{ }
 758};
 759
 760static const struct clk_parent_data gcc_xo_uniphy0_tx_rx_ubi32_bias[] = {
 761	{ .fw_name = "xo" },
 762	{ .fw_name = "uniphy0_gcc_tx_clk" },
 763	{ .fw_name = "uniphy0_gcc_rx_clk" },
 764	{ .hw = &ubi32_pll.clkr.hw },
 765	{ .fw_name = "bias_pll_cc_clk" },
 766};
 767
 768static const struct parent_map gcc_xo_uniphy0_tx_rx_ubi32_bias_map[] = {
 769	{ P_XO, 0 },
 770	{ P_UNIPHY0_TX, 1 },
 771	{ P_UNIPHY0_RX, 2 },
 772	{ P_UBI32_PLL, 5 },
 773	{ P_BIAS_PLL, 6 },
 774};
 775
 776static struct clk_rcg2 nss_port1_tx_clk_src = {
 777	.cmd_rcgr = 0x68028,
 778	.freq_tbl = ftbl_nss_port1_tx_clk_src,
 779	.hid_width = 5,
 780	.parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
 781	.clkr.hw.init = &(struct clk_init_data){
 782		.name = "nss_port1_tx_clk_src",
 783		.parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
 784		.num_parents = 5,
 785		.ops = &clk_rcg2_ops,
 786	},
 787};
 788
 789static struct clk_rcg2 nss_port2_rx_clk_src = {
 790	.cmd_rcgr = 0x68030,
 791	.freq_tbl = ftbl_nss_port1_rx_clk_src,
 792	.hid_width = 5,
 793	.parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
 794	.clkr.hw.init = &(struct clk_init_data){
 795		.name = "nss_port2_rx_clk_src",
 796		.parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
 797		.num_parents = 5,
 798		.ops = &clk_rcg2_ops,
 799	},
 800};
 801
 802static struct clk_rcg2 nss_port2_tx_clk_src = {
 803	.cmd_rcgr = 0x68038,
 804	.freq_tbl = ftbl_nss_port1_tx_clk_src,
 805	.hid_width = 5,
 806	.parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
 807	.clkr.hw.init = &(struct clk_init_data){
 808		.name = "nss_port2_tx_clk_src",
 809		.parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
 810		.num_parents = 5,
 811		.ops = &clk_rcg2_ops,
 812	},
 813};
 814
 815static struct clk_rcg2 nss_port3_rx_clk_src = {
 816	.cmd_rcgr = 0x68040,
 817	.freq_tbl = ftbl_nss_port1_rx_clk_src,
 818	.hid_width = 5,
 819	.parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
 820	.clkr.hw.init = &(struct clk_init_data){
 821		.name = "nss_port3_rx_clk_src",
 822		.parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
 823		.num_parents = 5,
 824		.ops = &clk_rcg2_ops,
 825	},
 826};
 827
 828static struct clk_rcg2 nss_port3_tx_clk_src = {
 829	.cmd_rcgr = 0x68048,
 830	.freq_tbl = ftbl_nss_port1_tx_clk_src,
 831	.hid_width = 5,
 832	.parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
 833	.clkr.hw.init = &(struct clk_init_data){
 834		.name = "nss_port3_tx_clk_src",
 835		.parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
 836		.num_parents = 5,
 837		.ops = &clk_rcg2_ops,
 838	},
 839};
 840
 841static struct clk_rcg2 nss_port4_rx_clk_src = {
 842	.cmd_rcgr = 0x68050,
 843	.freq_tbl = ftbl_nss_port1_rx_clk_src,
 844	.hid_width = 5,
 845	.parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
 846	.clkr.hw.init = &(struct clk_init_data){
 847		.name = "nss_port4_rx_clk_src",
 848		.parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
 849		.num_parents = 5,
 850		.ops = &clk_rcg2_ops,
 851	},
 852};
 853
 854static struct clk_rcg2 nss_port4_tx_clk_src = {
 855	.cmd_rcgr = 0x68058,
 856	.freq_tbl = ftbl_nss_port1_tx_clk_src,
 857	.hid_width = 5,
 858	.parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
 859	.clkr.hw.init = &(struct clk_init_data){
 860		.name = "nss_port4_tx_clk_src",
 861		.parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
 862		.num_parents = 5,
 863		.ops = &clk_rcg2_ops,
 864	},
 865};
 866
 867static struct clk_regmap_div nss_port5_rx_div_clk_src = {
 868	.reg = 0x68440,
 869	.shift = 0,
 870	.width = 4,
 871	.clkr = {
 872		.hw.init = &(struct clk_init_data){
 873			.name = "nss_port5_rx_div_clk_src",
 874			.parent_hws = (const struct clk_hw *[]){
 875					&nss_port5_rx_clk_src.clkr.hw },
 876			.num_parents = 1,
 877			.ops = &clk_regmap_div_ops,
 878			.flags = CLK_SET_RATE_PARENT,
 879		},
 880	},
 881};
 882
 883static struct clk_regmap_div nss_port5_tx_div_clk_src = {
 884	.reg = 0x68444,
 885	.shift = 0,
 886	.width = 4,
 887	.clkr = {
 888		.hw.init = &(struct clk_init_data){
 889			.name = "nss_port5_tx_div_clk_src",
 890			.parent_hws = (const struct clk_hw *[]){
 891					&nss_port5_tx_clk_src.clkr.hw },
 892			.num_parents = 1,
 893			.ops = &clk_regmap_div_ops,
 894			.flags = CLK_SET_RATE_PARENT,
 895		},
 896	},
 897};
 898
 899static const struct freq_tbl ftbl_apss_axi_clk_src[] = {
 900	F(24000000, P_XO, 1, 0, 0),
 901	F(100000000, P_GPLL0_DIV2, 4, 0, 0),
 902	F(200000000, P_GPLL0, 4, 0, 0),
 903	F(308570000, P_GPLL6, 3.5, 0, 0),
 904	F(400000000, P_GPLL0, 2, 0, 0),
 905	F(533000000, P_GPLL0, 1.5, 0, 0),
 906	{ }
 907};
 908
 909static const struct clk_parent_data gcc_xo_gpll0_gpll6_ubi32_gpll0_div2[] = {
 910	{ .fw_name = "xo" },
 911	{ .hw = &gpll0.clkr.hw },
 912	{ .hw = &gpll6.clkr.hw },
 913	{ .hw = &ubi32_pll.clkr.hw },
 914	{ .hw = &gpll0_out_main_div2.hw },
 915};
 916
 917static const struct parent_map
 918gcc_xo_gpll0_gpll6_ubi32_gpll0_div2_map[] = {
 919	{ P_XO, 0 },
 920	{ P_GPLL0, 1 },
 921	{ P_GPLL6, 2 },
 922	{ P_UBI32_PLL, 3 },
 923	{ P_GPLL0_DIV2, 6 },
 924};
 925
 926static struct clk_rcg2 apss_axi_clk_src = {
 927	.cmd_rcgr = 0x38048,
 928	.freq_tbl = ftbl_apss_axi_clk_src,
 929	.hid_width = 5,
 930	.parent_map = gcc_xo_gpll0_gpll6_ubi32_gpll0_div2_map,
 931	.clkr.hw.init = &(struct clk_init_data){
 932		.name = "apss_axi_clk_src",
 933		.parent_data = gcc_xo_gpll0_gpll6_ubi32_gpll0_div2,
 934		.num_parents = 5,
 935		.ops = &clk_rcg2_ops,
 936	},
 937};
 938
 939static const struct freq_tbl ftbl_nss_crypto_clk_src[] = {
 940	F(24000000, P_XO, 1, 0, 0),
 941	F(300000000, P_NSS_CRYPTO_PLL, 2, 0, 0),
 942	{ }
 943};
 944
 945static const struct clk_parent_data gcc_xo_nss_crypto_pll_gpll0[] = {
 946	{ .fw_name = "xo" },
 947	{ .hw = &nss_crypto_pll.clkr.hw },
 948	{ .hw = &gpll0.clkr.hw },
 949};
 950
 951static const struct parent_map gcc_xo_nss_crypto_pll_gpll0_map[] = {
 952	{ P_XO, 0 },
 953	{ P_NSS_CRYPTO_PLL, 1 },
 954	{ P_GPLL0, 2 },
 955};
 956
 957static struct clk_rcg2 nss_crypto_clk_src = {
 958	.cmd_rcgr = 0x68144,
 959	.freq_tbl = ftbl_nss_crypto_clk_src,
 960	.mnd_width = 16,
 961	.hid_width = 5,
 962	.parent_map = gcc_xo_nss_crypto_pll_gpll0_map,
 963	.clkr.hw.init = &(struct clk_init_data){
 964		.name = "nss_crypto_clk_src",
 965		.parent_data = gcc_xo_nss_crypto_pll_gpll0,
 966		.num_parents = 3,
 967		.ops = &clk_rcg2_ops,
 968	},
 969};
 970
 971static struct clk_regmap_div nss_port1_rx_div_clk_src = {
 972	.reg = 0x68400,
 973	.shift = 0,
 974	.width = 4,
 975	.clkr = {
 976		.hw.init = &(struct clk_init_data){
 977			.name = "nss_port1_rx_div_clk_src",
 978			.parent_hws = (const struct clk_hw *[]){
 979				&nss_port1_rx_clk_src.clkr.hw },
 980			.num_parents = 1,
 981			.ops = &clk_regmap_div_ops,
 982			.flags = CLK_SET_RATE_PARENT,
 983		},
 984	},
 985};
 986
 987static struct clk_regmap_div nss_port1_tx_div_clk_src = {
 988	.reg = 0x68404,
 989	.shift = 0,
 990	.width = 4,
 991	.clkr = {
 992		.hw.init = &(struct clk_init_data){
 993			.name = "nss_port1_tx_div_clk_src",
 994			.parent_hws = (const struct clk_hw *[]){
 995					&nss_port1_tx_clk_src.clkr.hw },
 996			.num_parents = 1,
 997			.ops = &clk_regmap_div_ops,
 998			.flags = CLK_SET_RATE_PARENT,
 999		},
1000	},
1001};
1002
1003static struct clk_regmap_div nss_port2_rx_div_clk_src = {
1004	.reg = 0x68410,
1005	.shift = 0,
1006	.width = 4,
1007	.clkr = {
1008		.hw.init = &(struct clk_init_data){
1009			.name = "nss_port2_rx_div_clk_src",
1010			.parent_hws = (const struct clk_hw *[]){
1011					&nss_port2_rx_clk_src.clkr.hw },
1012			.num_parents = 1,
1013			.ops = &clk_regmap_div_ops,
1014			.flags = CLK_SET_RATE_PARENT,
1015		},
1016	},
1017};
1018
1019static struct clk_regmap_div nss_port2_tx_div_clk_src = {
1020	.reg = 0x68414,
1021	.shift = 0,
1022	.width = 4,
1023	.clkr = {
1024		.hw.init = &(struct clk_init_data){
1025			.name = "nss_port2_tx_div_clk_src",
1026			.parent_hws = (const struct clk_hw *[]){
1027					&nss_port2_tx_clk_src.clkr.hw },
1028			.num_parents = 1,
1029			.ops = &clk_regmap_div_ops,
1030			.flags = CLK_SET_RATE_PARENT,
1031		},
1032	},
1033};
1034
1035static struct clk_regmap_div nss_port3_rx_div_clk_src = {
1036	.reg = 0x68420,
1037	.shift = 0,
1038	.width = 4,
1039	.clkr = {
1040		.hw.init = &(struct clk_init_data){
1041			.name = "nss_port3_rx_div_clk_src",
1042			.parent_hws = (const struct clk_hw *[]){
1043					&nss_port3_rx_clk_src.clkr.hw },
1044			.num_parents = 1,
1045			.ops = &clk_regmap_div_ops,
1046			.flags = CLK_SET_RATE_PARENT,
1047		},
1048	},
1049};
1050
1051static struct clk_regmap_div nss_port3_tx_div_clk_src = {
1052	.reg = 0x68424,
1053	.shift = 0,
1054	.width = 4,
1055	.clkr = {
1056		.hw.init = &(struct clk_init_data){
1057			.name = "nss_port3_tx_div_clk_src",
1058			.parent_hws = (const struct clk_hw *[]){
1059					&nss_port3_tx_clk_src.clkr.hw },
1060			.num_parents = 1,
1061			.ops = &clk_regmap_div_ops,
1062			.flags = CLK_SET_RATE_PARENT,
1063		},
1064	},
1065};
1066
1067static struct clk_regmap_div nss_port4_rx_div_clk_src = {
1068	.reg = 0x68430,
1069	.shift = 0,
1070	.width = 4,
1071	.clkr = {
1072		.hw.init = &(struct clk_init_data){
1073			.name = "nss_port4_rx_div_clk_src",
1074			.parent_hws = (const struct clk_hw *[]){
1075					&nss_port4_rx_clk_src.clkr.hw },
1076			.num_parents = 1,
1077			.ops = &clk_regmap_div_ops,
1078			.flags = CLK_SET_RATE_PARENT,
1079		},
1080	},
1081};
1082
1083static struct clk_regmap_div nss_port4_tx_div_clk_src = {
1084	.reg = 0x68434,
1085	.shift = 0,
1086	.width = 4,
1087	.clkr = {
1088		.hw.init = &(struct clk_init_data){
1089			.name = "nss_port4_tx_div_clk_src",
1090			.parent_hws = (const struct clk_hw *[]){
1091					&nss_port4_tx_clk_src.clkr.hw },
1092			.num_parents = 1,
1093			.ops = &clk_regmap_div_ops,
1094			.flags = CLK_SET_RATE_PARENT,
1095		},
1096	},
1097};
1098
1099static const struct freq_tbl ftbl_nss_ubi_clk_src[] = {
1100	F(24000000, P_XO, 1, 0, 0),
1101	F(149760000, P_UBI32_PLL, 10, 0, 0),
1102	F(187200000, P_UBI32_PLL, 8, 0, 0),
1103	F(249600000, P_UBI32_PLL, 6, 0, 0),
1104	F(374400000, P_UBI32_PLL, 4, 0, 0),
1105	F(748800000, P_UBI32_PLL, 2, 0, 0),
1106	F(1497600000, P_UBI32_PLL, 1, 0, 0),
1107	{ }
1108};
1109
1110static const struct clk_parent_data
1111			gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6[] = {
1112	{ .fw_name = "xo" },
1113	{ .hw = &ubi32_pll.clkr.hw },
1114	{ .hw = &gpll0.clkr.hw },
1115	{ .hw = &gpll2.clkr.hw },
1116	{ .hw = &gpll4.clkr.hw },
1117	{ .hw = &gpll6.clkr.hw },
1118};
1119
1120static const struct parent_map gcc_xo_ubi32_gpll0_gpll2_gpll4_gpll6_map[] = {
1121	{ P_XO, 0 },
1122	{ P_UBI32_PLL, 1 },
1123	{ P_GPLL0, 2 },
1124	{ P_GPLL2, 3 },
1125	{ P_GPLL4, 4 },
1126	{ P_GPLL6, 5 },
1127};
1128
1129static struct clk_rcg2 nss_ubi0_clk_src = {
1130	.cmd_rcgr = 0x68104,
1131	.freq_tbl = ftbl_nss_ubi_clk_src,
1132	.hid_width = 5,
1133	.parent_map = gcc_xo_ubi32_gpll0_gpll2_gpll4_gpll6_map,
1134	.clkr.hw.init = &(struct clk_init_data){
1135		.name = "nss_ubi0_clk_src",
1136		.parent_data = gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6,
1137		.num_parents = 6,
1138		.ops = &clk_rcg2_ops,
1139		.flags = CLK_SET_RATE_PARENT,
1140	},
1141};
1142
1143static const struct freq_tbl ftbl_adss_pwm_clk_src[] = {
1144	F(24000000, P_XO, 1, 0, 0),
1145	F(100000000, P_GPLL0, 8, 0, 0),
1146	{ }
1147};
1148
1149static struct clk_rcg2 adss_pwm_clk_src = {
1150	.cmd_rcgr = 0x1c008,
1151	.freq_tbl = ftbl_adss_pwm_clk_src,
1152	.hid_width = 5,
1153	.parent_map = gcc_xo_gpll0_map,
1154	.clkr.hw.init = &(struct clk_init_data){
1155		.name = "adss_pwm_clk_src",
1156		.parent_data = gcc_xo_gpll0,
1157		.num_parents = 2,
1158		.ops = &clk_rcg2_ops,
1159	},
1160};
1161
1162static const struct freq_tbl ftbl_blsp1_qup_i2c_apps_clk_src[] = {
1163	F(24000000, P_XO, 1, 0, 0),
1164	F(25000000, P_GPLL0_DIV2, 16, 0, 0),
1165	F(50000000, P_GPLL0, 16, 0, 0),
1166	{ }
1167};
1168
1169static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
1170	.cmd_rcgr = 0x0200c,
1171	.freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
1172	.hid_width = 5,
1173	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1174	.clkr.hw.init = &(struct clk_init_data){
1175		.name = "blsp1_qup1_i2c_apps_clk_src",
1176		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1177		.num_parents = 3,
1178		.ops = &clk_rcg2_ops,
1179	},
1180};
1181
1182static const struct freq_tbl ftbl_blsp1_qup_spi_apps_clk_src[] = {
1183	F(960000, P_XO, 10, 2, 5),
1184	F(4800000, P_XO, 5, 0, 0),
1185	F(9600000, P_XO, 2, 4, 5),
1186	F(12500000, P_GPLL0_DIV2, 16, 1, 2),
1187	F(16000000, P_GPLL0, 10, 1, 5),
1188	F(24000000, P_XO, 1, 0, 0),
1189	F(25000000, P_GPLL0, 16, 1, 2),
1190	F(50000000, P_GPLL0, 16, 0, 0),
1191	{ }
1192};
1193
1194static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
1195	.cmd_rcgr = 0x02024,
1196	.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
1197	.mnd_width = 8,
1198	.hid_width = 5,
1199	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1200	.clkr.hw.init = &(struct clk_init_data){
1201		.name = "blsp1_qup1_spi_apps_clk_src",
1202		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1203		.num_parents = 3,
1204		.ops = &clk_rcg2_ops,
1205	},
1206};
1207
1208static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
1209	.cmd_rcgr = 0x03000,
1210	.freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
1211	.hid_width = 5,
1212	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1213	.clkr.hw.init = &(struct clk_init_data){
1214		.name = "blsp1_qup2_i2c_apps_clk_src",
1215		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1216		.num_parents = 3,
1217		.ops = &clk_rcg2_ops,
1218	},
1219};
1220
1221static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
1222	.cmd_rcgr = 0x03014,
1223	.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
1224	.mnd_width = 8,
1225	.hid_width = 5,
1226	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1227	.clkr.hw.init = &(struct clk_init_data){
1228		.name = "blsp1_qup2_spi_apps_clk_src",
1229		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1230		.num_parents = 3,
1231		.ops = &clk_rcg2_ops,
1232	},
1233};
1234
1235static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
1236	.cmd_rcgr = 0x04000,
1237	.freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
1238	.hid_width = 5,
1239	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1240	.clkr.hw.init = &(struct clk_init_data){
1241		.name = "blsp1_qup3_i2c_apps_clk_src",
1242		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1243		.num_parents = 3,
1244		.ops = &clk_rcg2_ops,
1245	},
1246};
1247
1248static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
1249	.cmd_rcgr = 0x04014,
1250	.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
1251	.mnd_width = 8,
1252	.hid_width = 5,
1253	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1254	.clkr.hw.init = &(struct clk_init_data){
1255		.name = "blsp1_qup3_spi_apps_clk_src",
1256		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1257		.num_parents = 3,
1258		.ops = &clk_rcg2_ops,
1259	},
1260};
1261
1262static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
1263	.cmd_rcgr = 0x05000,
1264	.freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
1265	.hid_width = 5,
1266	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1267	.clkr.hw.init = &(struct clk_init_data){
1268		.name = "blsp1_qup4_i2c_apps_clk_src",
1269		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1270		.num_parents = 3,
1271		.ops = &clk_rcg2_ops,
1272	},
1273};
1274
1275static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
1276	.cmd_rcgr = 0x05014,
1277	.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
1278	.mnd_width = 8,
1279	.hid_width = 5,
1280	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1281	.clkr.hw.init = &(struct clk_init_data){
1282		.name = "blsp1_qup4_spi_apps_clk_src",
1283		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1284		.num_parents = 3,
1285		.ops = &clk_rcg2_ops,
1286	},
1287};
1288
1289static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
1290	.cmd_rcgr = 0x06000,
1291	.freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
1292	.hid_width = 5,
1293	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1294	.clkr.hw.init = &(struct clk_init_data){
1295		.name = "blsp1_qup5_i2c_apps_clk_src",
1296		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1297		.num_parents = 3,
1298		.ops = &clk_rcg2_ops,
1299	},
1300};
1301
1302static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
1303	.cmd_rcgr = 0x06014,
1304	.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
1305	.mnd_width = 8,
1306	.hid_width = 5,
1307	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1308	.clkr.hw.init = &(struct clk_init_data){
1309		.name = "blsp1_qup5_spi_apps_clk_src",
1310		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1311		.num_parents = 3,
1312		.ops = &clk_rcg2_ops,
1313	},
1314};
1315
1316static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
1317	.cmd_rcgr = 0x07000,
1318	.freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
1319	.hid_width = 5,
1320	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1321	.clkr.hw.init = &(struct clk_init_data){
1322		.name = "blsp1_qup6_i2c_apps_clk_src",
1323		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1324		.num_parents = 3,
1325		.ops = &clk_rcg2_ops,
1326	},
1327};
1328
1329static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
1330	.cmd_rcgr = 0x07014,
1331	.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
1332	.mnd_width = 8,
1333	.hid_width = 5,
1334	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1335	.clkr.hw.init = &(struct clk_init_data){
1336		.name = "blsp1_qup6_spi_apps_clk_src",
1337		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1338		.num_parents = 3,
1339		.ops = &clk_rcg2_ops,
1340	},
1341};
1342
1343static const struct freq_tbl ftbl_blsp1_uart_apps_clk_src[] = {
1344	F(3686400, P_GPLL0_DIV2, 1, 144, 15625),
1345	F(7372800, P_GPLL0_DIV2, 1, 288, 15625),
1346	F(14745600, P_GPLL0_DIV2, 1, 576, 15625),
1347	F(16000000, P_GPLL0_DIV2, 5, 1, 5),
1348	F(24000000, P_XO, 1, 0, 0),
1349	F(24000000, P_GPLL0, 1, 3, 100),
1350	F(25000000, P_GPLL0, 16, 1, 2),
1351	F(32000000, P_GPLL0, 1, 1, 25),
1352	F(40000000, P_GPLL0, 1, 1, 20),
1353	F(46400000, P_GPLL0, 1, 29, 500),
1354	F(48000000, P_GPLL0, 1, 3, 50),
1355	F(51200000, P_GPLL0, 1, 8, 125),
1356	F(56000000, P_GPLL0, 1, 7, 100),
1357	F(58982400, P_GPLL0, 1, 1152, 15625),
1358	F(60000000, P_GPLL0, 1, 3, 40),
1359	F(64000000, P_GPLL0, 12.5, 1, 1),
1360	{ }
1361};
1362
1363static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
1364	.cmd_rcgr = 0x02044,
1365	.freq_tbl = ftbl_blsp1_uart_apps_clk_src,
1366	.mnd_width = 16,
1367	.hid_width = 5,
1368	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1369	.clkr.hw.init = &(struct clk_init_data){
1370		.name = "blsp1_uart1_apps_clk_src",
1371		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1372		.num_parents = 3,
1373		.ops = &clk_rcg2_ops,
1374	},
1375};
1376
1377static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
1378	.cmd_rcgr = 0x03034,
1379	.freq_tbl = ftbl_blsp1_uart_apps_clk_src,
1380	.mnd_width = 16,
1381	.hid_width = 5,
1382	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1383	.clkr.hw.init = &(struct clk_init_data){
1384		.name = "blsp1_uart2_apps_clk_src",
1385		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1386		.num_parents = 3,
1387		.ops = &clk_rcg2_ops,
1388	},
1389};
1390
1391static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
1392	.cmd_rcgr = 0x04034,
1393	.freq_tbl = ftbl_blsp1_uart_apps_clk_src,
1394	.mnd_width = 16,
1395	.hid_width = 5,
1396	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1397	.clkr.hw.init = &(struct clk_init_data){
1398		.name = "blsp1_uart3_apps_clk_src",
1399		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1400		.num_parents = 3,
1401		.ops = &clk_rcg2_ops,
1402	},
1403};
1404
1405static struct clk_rcg2 blsp1_uart4_apps_clk_src = {
1406	.cmd_rcgr = 0x05034,
1407	.freq_tbl = ftbl_blsp1_uart_apps_clk_src,
1408	.mnd_width = 16,
1409	.hid_width = 5,
1410	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1411	.clkr.hw.init = &(struct clk_init_data){
1412		.name = "blsp1_uart4_apps_clk_src",
1413		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1414		.num_parents = 3,
1415		.ops = &clk_rcg2_ops,
1416	},
1417};
1418
1419static struct clk_rcg2 blsp1_uart5_apps_clk_src = {
1420	.cmd_rcgr = 0x06034,
1421	.freq_tbl = ftbl_blsp1_uart_apps_clk_src,
1422	.mnd_width = 16,
1423	.hid_width = 5,
1424	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1425	.clkr.hw.init = &(struct clk_init_data){
1426		.name = "blsp1_uart5_apps_clk_src",
1427		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1428		.num_parents = 3,
1429		.ops = &clk_rcg2_ops,
1430	},
1431};
1432
1433static struct clk_rcg2 blsp1_uart6_apps_clk_src = {
1434	.cmd_rcgr = 0x07034,
1435	.freq_tbl = ftbl_blsp1_uart_apps_clk_src,
1436	.mnd_width = 16,
1437	.hid_width = 5,
1438	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1439	.clkr.hw.init = &(struct clk_init_data){
1440		.name = "blsp1_uart6_apps_clk_src",
1441		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1442		.num_parents = 3,
1443		.ops = &clk_rcg2_ops,
1444	},
1445};
1446
1447static const struct freq_tbl ftbl_crypto_clk_src[] = {
1448	F(40000000, P_GPLL0_DIV2, 10, 0, 0),
1449	F(80000000, P_GPLL0, 10, 0, 0),
1450	F(100000000, P_GPLL0, 8, 0, 0),
1451	F(160000000, P_GPLL0, 5, 0, 0),
1452	{ }
1453};
1454
1455static struct clk_rcg2 crypto_clk_src = {
1456	.cmd_rcgr = 0x16004,
1457	.freq_tbl = ftbl_crypto_clk_src,
1458	.hid_width = 5,
1459	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1460	.clkr.hw.init = &(struct clk_init_data){
1461		.name = "crypto_clk_src",
1462		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1463		.num_parents = 3,
1464		.ops = &clk_rcg2_ops,
1465	},
1466};
1467
1468static const struct freq_tbl ftbl_gp_clk_src[] = {
1469	F(24000000, P_XO, 1, 0, 0),
1470	F(50000000, P_GPLL0_DIV2, 8, 0, 0),
1471	F(100000000, P_GPLL0, 8, 0, 0),
1472	F(200000000, P_GPLL0, 4, 0, 0),
1473	F(266666666, P_GPLL0, 3, 0, 0),
1474	{ }
1475};
1476
1477static const struct clk_parent_data gcc_xo_gpll0_gpll6_gpll0_sleep_clk[] = {
1478	{ .fw_name = "xo" },
1479	{ .hw = &gpll0.clkr.hw },
1480	{ .hw = &gpll6.clkr.hw },
1481	{ .hw = &gpll0_out_main_div2.hw },
1482	{ .fw_name = "sleep_clk" },
1483};
1484
1485static const struct parent_map gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map[] = {
1486	{ P_XO, 0 },
1487	{ P_GPLL0, 1 },
1488	{ P_GPLL6, 2 },
1489	{ P_GPLL0_DIV2, 4 },
1490	{ P_SLEEP_CLK, 6 },
1491};
1492
1493static struct clk_rcg2 gp1_clk_src = {
1494	.cmd_rcgr = 0x08004,
1495	.freq_tbl = ftbl_gp_clk_src,
1496	.mnd_width = 8,
1497	.hid_width = 5,
1498	.parent_map = gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map,
1499	.clkr.hw.init = &(struct clk_init_data){
1500		.name = "gp1_clk_src",
1501		.parent_data = gcc_xo_gpll0_gpll6_gpll0_sleep_clk,
1502		.num_parents = 5,
1503		.ops = &clk_rcg2_ops,
1504	},
1505};
1506
1507static struct clk_rcg2 gp2_clk_src = {
1508	.cmd_rcgr = 0x09004,
1509	.freq_tbl = ftbl_gp_clk_src,
1510	.mnd_width = 8,
1511	.hid_width = 5,
1512	.parent_map = gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map,
1513	.clkr.hw.init = &(struct clk_init_data){
1514		.name = "gp2_clk_src",
1515		.parent_data = gcc_xo_gpll0_gpll6_gpll0_sleep_clk,
1516		.num_parents = 5,
1517		.ops = &clk_rcg2_ops,
1518	},
1519};
1520
1521static struct clk_rcg2 gp3_clk_src = {
1522	.cmd_rcgr = 0x0a004,
1523	.freq_tbl = ftbl_gp_clk_src,
1524	.mnd_width = 8,
1525	.hid_width = 5,
1526	.parent_map = gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map,
1527	.clkr.hw.init = &(struct clk_init_data){
1528		.name = "gp3_clk_src",
1529		.parent_data = gcc_xo_gpll0_gpll6_gpll0_sleep_clk,
1530		.num_parents = 5,
1531		.ops = &clk_rcg2_ops,
1532	},
1533};
1534
1535static struct clk_fixed_factor nss_ppe_cdiv_clk_src = {
1536	.mult = 1,
1537	.div = 4,
1538	.hw.init = &(struct clk_init_data){
1539		.name = "nss_ppe_cdiv_clk_src",
1540		.parent_hws = (const struct clk_hw *[]){
1541				&nss_ppe_clk_src.clkr.hw },
1542		.num_parents = 1,
1543		.ops = &clk_fixed_factor_ops,
1544		.flags = CLK_SET_RATE_PARENT,
1545	},
1546};
1547
1548static struct clk_regmap_div nss_ubi0_div_clk_src = {
1549	.reg = 0x68118,
1550	.shift = 0,
1551	.width = 4,
1552	.clkr = {
1553		.hw.init = &(struct clk_init_data){
1554			.name = "nss_ubi0_div_clk_src",
1555			.parent_hws = (const struct clk_hw *[]){
1556				&nss_ubi0_clk_src.clkr.hw },
1557			.num_parents = 1,
1558			.ops = &clk_regmap_div_ro_ops,
1559			.flags = CLK_SET_RATE_PARENT,
1560		},
1561	},
1562};
1563
1564static const struct freq_tbl ftbl_pcie_aux_clk_src[] = {
1565	F(24000000, P_XO, 1, 0, 0),
1566};
1567
1568static const struct clk_parent_data gcc_xo_gpll0_core_pi_sleep_clk[] = {
1569	{ .fw_name = "xo" },
1570	{ .hw = &gpll0.clkr.hw },
1571	{ .fw_name = "sleep_clk" },
1572};
1573
1574static const struct parent_map gcc_xo_gpll0_core_pi_sleep_clk_map[] = {
1575	{ P_XO, 0 },
1576	{ P_GPLL0, 2 },
1577	{ P_PI_SLEEP, 6 },
1578};
1579
1580static struct clk_rcg2 pcie0_aux_clk_src = {
1581	.cmd_rcgr = 0x75024,
1582	.freq_tbl = ftbl_pcie_aux_clk_src,
1583	.mnd_width = 16,
1584	.hid_width = 5,
1585	.parent_map = gcc_xo_gpll0_core_pi_sleep_clk_map,
1586	.clkr.hw.init = &(struct clk_init_data){
1587		.name = "pcie0_aux_clk_src",
1588		.parent_data = gcc_xo_gpll0_core_pi_sleep_clk,
1589		.num_parents = 3,
1590		.ops = &clk_rcg2_ops,
1591	},
1592};
1593
1594static const struct clk_parent_data gcc_pcie20_phy0_pipe_clk_xo[] = {
1595	{ .fw_name = "pcie20_phy0_pipe_clk" },
1596	{ .fw_name = "xo" },
1597};
1598
1599static const struct parent_map gcc_pcie20_phy0_pipe_clk_xo_map[] = {
1600	{ P_PCIE20_PHY0_PIPE, 0 },
1601	{ P_XO, 2 },
1602};
1603
1604static struct clk_regmap_mux pcie0_pipe_clk_src = {
1605	.reg = 0x7501c,
1606	.shift = 8,
1607	.width = 2,
1608	.parent_map = gcc_pcie20_phy0_pipe_clk_xo_map,
1609	.clkr = {
1610		.hw.init = &(struct clk_init_data){
1611			.name = "pcie0_pipe_clk_src",
1612			.parent_data = gcc_pcie20_phy0_pipe_clk_xo,
1613			.num_parents = 2,
1614			.ops = &clk_regmap_mux_closest_ops,
1615			.flags = CLK_SET_RATE_PARENT,
1616		},
1617	},
1618};
1619
1620static const struct freq_tbl ftbl_sdcc_apps_clk_src[] = {
1621	F(144000, P_XO, 16, 12, 125),
1622	F(400000, P_XO, 12, 1, 5),
1623	F(24000000, P_GPLL2, 12, 1, 4),
1624	F(48000000, P_GPLL2, 12, 1, 2),
1625	F(96000000, P_GPLL2, 12, 0, 0),
1626	F(177777778, P_GPLL0, 4.5, 0, 0),
1627	F(192000000, P_GPLL2, 6, 0, 0),
1628	F(384000000, P_GPLL2, 3, 0, 0),
1629	{ }
1630};
1631
1632static const struct clk_parent_data
1633			gcc_xo_gpll0_gpll2_gpll0_out_main_div2[] = {
1634	{ .fw_name = "xo" },
1635	{ .hw = &gpll0.clkr.hw },
1636	{ .hw = &gpll2.clkr.hw },
1637	{ .hw = &gpll0_out_main_div2.hw },
1638};
1639
1640static const struct parent_map gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map[] = {
1641	{ P_XO, 0 },
1642	{ P_GPLL0, 1 },
1643	{ P_GPLL2, 2 },
1644	{ P_GPLL0_DIV2, 4 },
1645};
1646
1647static struct clk_rcg2 sdcc1_apps_clk_src = {
1648	.cmd_rcgr = 0x42004,
1649	.freq_tbl = ftbl_sdcc_apps_clk_src,
1650	.mnd_width = 8,
1651	.hid_width = 5,
1652	.parent_map = gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map,
1653	.clkr.hw.init = &(struct clk_init_data){
1654		.name = "sdcc1_apps_clk_src",
1655		.parent_data = gcc_xo_gpll0_gpll2_gpll0_out_main_div2,
1656		.num_parents = 4,
1657		.ops = &clk_rcg2_ops,
1658	},
1659};
1660
1661static const struct freq_tbl ftbl_usb_aux_clk_src[] = {
1662	F(24000000, P_XO, 1, 0, 0),
1663	{ }
1664};
1665
1666static struct clk_rcg2 usb0_aux_clk_src = {
1667	.cmd_rcgr = 0x3e05c,
1668	.freq_tbl = ftbl_usb_aux_clk_src,
1669	.mnd_width = 16,
1670	.hid_width = 5,
1671	.parent_map = gcc_xo_gpll0_core_pi_sleep_clk_map,
1672	.clkr.hw.init = &(struct clk_init_data){
1673		.name = "usb0_aux_clk_src",
1674		.parent_data = gcc_xo_gpll0_core_pi_sleep_clk,
1675		.num_parents = 3,
1676		.ops = &clk_rcg2_ops,
1677	},
1678};
1679
1680static const struct freq_tbl ftbl_usb_mock_utmi_clk_src[] = {
1681	F(24000000, P_XO, 1, 0, 0),
1682	F(60000000, P_GPLL6, 6, 1, 3),
1683	{ }
1684};
1685
1686static const struct clk_parent_data
1687			gcc_xo_gpll6_gpll0_gpll0_out_main_div2[] = {
1688	{ .fw_name = "xo" },
1689	{ .hw = &gpll6.clkr.hw },
1690	{ .hw = &gpll0.clkr.hw },
1691	{ .hw = &gpll0_out_main_div2.hw },
1692};
1693
1694static const struct parent_map gcc_xo_gpll6_gpll0_gpll0_out_main_div2_map[] = {
1695	{ P_XO, 0 },
1696	{ P_GPLL6, 1 },
1697	{ P_GPLL0, 3 },
1698	{ P_GPLL0_DIV2, 4 },
1699};
1700
1701static struct clk_rcg2 usb0_mock_utmi_clk_src = {
1702	.cmd_rcgr = 0x3e020,
1703	.freq_tbl = ftbl_usb_mock_utmi_clk_src,
1704	.mnd_width = 8,
1705	.hid_width = 5,
1706	.parent_map = gcc_xo_gpll6_gpll0_gpll0_out_main_div2_map,
1707	.clkr.hw.init = &(struct clk_init_data){
1708		.name = "usb0_mock_utmi_clk_src",
1709		.parent_data = gcc_xo_gpll6_gpll0_gpll0_out_main_div2,
1710		.num_parents = 4,
1711		.ops = &clk_rcg2_ops,
1712	},
1713};
1714
1715static const struct clk_parent_data gcc_usb3phy_0_cc_pipe_clk_xo[] = {
1716	{ .fw_name = "usb3phy_0_cc_pipe_clk" },
1717	{ .fw_name = "xo" },
1718};
1719
1720static const struct parent_map gcc_usb3phy_0_cc_pipe_clk_xo_map[] = {
1721	{ P_USB3PHY_0_PIPE, 0 },
1722	{ P_XO, 2 },
1723};
1724
1725static struct clk_regmap_mux usb0_pipe_clk_src = {
1726	.reg = 0x3e048,
1727	.shift = 8,
1728	.width = 2,
1729	.parent_map = gcc_usb3phy_0_cc_pipe_clk_xo_map,
1730	.clkr = {
1731		.hw.init = &(struct clk_init_data){
1732			.name = "usb0_pipe_clk_src",
1733			.parent_data = gcc_usb3phy_0_cc_pipe_clk_xo,
1734			.num_parents = 2,
1735			.ops = &clk_regmap_mux_closest_ops,
1736			.flags = CLK_SET_RATE_PARENT,
1737		},
1738	},
1739};
1740
1741static const struct freq_tbl ftbl_sdcc_ice_core_clk_src[] = {
1742	F(80000000, P_GPLL0_DIV2, 5, 0, 0),
1743	F(160000000, P_GPLL0, 5, 0, 0),
1744	F(216000000, P_GPLL6, 5, 0, 0),
1745	F(308570000, P_GPLL6, 3.5, 0, 0),
1746};
1747
1748static const struct clk_parent_data gcc_xo_gpll0_gpll6_gpll0_div2[] = {
1749	{ .fw_name = "xo"},
1750	{ .hw = &gpll0.clkr.hw },
1751	{ .hw = &gpll6.clkr.hw },
1752	{ .hw = &gpll0_out_main_div2.hw },
1753};
1754
1755static const struct parent_map gcc_xo_gpll0_gpll6_gpll0_div2_map[] = {
1756	{ P_XO, 0 },
1757	{ P_GPLL0, 1 },
1758	{ P_GPLL6, 2 },
1759	{ P_GPLL0_DIV2, 4 },
1760};
1761
1762static struct clk_rcg2 sdcc1_ice_core_clk_src = {
1763	.cmd_rcgr = 0x5d000,
1764	.freq_tbl = ftbl_sdcc_ice_core_clk_src,
1765	.mnd_width = 8,
1766	.hid_width = 5,
1767	.parent_map = gcc_xo_gpll0_gpll6_gpll0_div2_map,
1768	.clkr.hw.init = &(struct clk_init_data){
1769		.name = "sdcc1_ice_core_clk_src",
1770		.parent_data = gcc_xo_gpll0_gpll6_gpll0_div2,
1771		.num_parents = 4,
1772		.ops = &clk_rcg2_ops,
1773	},
1774};
1775
1776static const struct freq_tbl ftbl_qdss_stm_clk_src[] = {
1777	F(24000000, P_XO, 1, 0, 0),
1778	F(50000000, P_GPLL0_DIV2, 8, 0, 0),
1779	F(100000000, P_GPLL0, 8, 0, 0),
1780	F(200000000, P_GPLL0, 4, 0, 0),
1781	{ }
1782};
1783
1784static struct clk_rcg2 qdss_stm_clk_src = {
1785	.cmd_rcgr = 0x2902C,
1786	.freq_tbl = ftbl_qdss_stm_clk_src,
1787	.hid_width = 5,
1788	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1789	.clkr.hw.init = &(struct clk_init_data){
1790		.name = "qdss_stm_clk_src",
1791		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1792		.num_parents = 3,
1793		.ops = &clk_rcg2_ops,
1794	},
1795};
1796
1797static const struct freq_tbl ftbl_qdss_traceclkin_clk_src[] = {
1798	F(80000000, P_GPLL0_DIV2, 5, 0, 0),
1799	F(160000000, P_GPLL0, 5, 0, 0),
1800	F(300000000, P_GPLL4, 4, 0, 0),
1801	{ }
1802};
1803
1804static const struct clk_parent_data gcc_xo_gpll4_gpll0_gpll0_div2[] = {
1805	{ .fw_name = "xo" },
1806	{ .hw = &gpll4.clkr.hw },
1807	{ .hw = &gpll0.clkr.hw },
1808	{ .hw = &gpll0_out_main_div2.hw },
1809};
1810
1811static const struct parent_map gcc_xo_gpll4_gpll0_gpll0_div2_map[] = {
1812	{ P_XO, 0 },
1813	{ P_GPLL4, 1 },
1814	{ P_GPLL0, 2 },
1815	{ P_GPLL0_DIV2, 4 },
1816};
1817
1818static struct clk_rcg2 qdss_traceclkin_clk_src = {
1819	.cmd_rcgr = 0x29048,
1820	.freq_tbl = ftbl_qdss_traceclkin_clk_src,
1821	.hid_width = 5,
1822	.parent_map = gcc_xo_gpll4_gpll0_gpll0_div2_map,
1823	.clkr.hw.init = &(struct clk_init_data){
1824		.name = "qdss_traceclkin_clk_src",
1825		.parent_data = gcc_xo_gpll4_gpll0_gpll0_div2,
1826		.num_parents = 4,
1827		.ops = &clk_rcg2_ops,
1828	},
1829};
1830
1831static struct clk_rcg2 usb1_mock_utmi_clk_src = {
1832	.cmd_rcgr = 0x3f020,
1833	.freq_tbl = ftbl_usb_mock_utmi_clk_src,
1834	.mnd_width = 8,
1835	.hid_width = 5,
1836	.parent_map = gcc_xo_gpll6_gpll0_gpll0_out_main_div2_map,
1837	.clkr.hw.init = &(struct clk_init_data){
1838		.name = "usb1_mock_utmi_clk_src",
1839		.parent_data = gcc_xo_gpll6_gpll0_gpll0_out_main_div2,
1840		.num_parents = 4,
1841		.ops = &clk_rcg2_ops,
1842	},
1843};
1844
1845static struct clk_branch gcc_adss_pwm_clk = {
1846	.halt_reg = 0x1c020,
1847	.clkr = {
1848		.enable_reg = 0x1c020,
1849		.enable_mask = BIT(0),
1850		.hw.init = &(struct clk_init_data){
1851			.name = "gcc_adss_pwm_clk",
1852			.parent_hws = (const struct clk_hw *[]){
1853					&adss_pwm_clk_src.clkr.hw },
1854			.num_parents = 1,
1855			.flags = CLK_SET_RATE_PARENT,
1856			.ops = &clk_branch2_ops,
1857		},
1858	},
1859};
1860
1861static struct clk_branch gcc_apss_ahb_clk = {
1862	.halt_reg = 0x4601c,
1863	.halt_check = BRANCH_HALT_VOTED,
1864	.clkr = {
1865		.enable_reg = 0x0b004,
1866		.enable_mask = BIT(14),
1867		.hw.init = &(struct clk_init_data){
1868			.name = "gcc_apss_ahb_clk",
1869			.parent_hws = (const struct clk_hw *[]){
1870					&apss_ahb_postdiv_clk_src.clkr.hw },
1871			.num_parents = 1,
1872			.flags = CLK_SET_RATE_PARENT,
1873			.ops = &clk_branch2_ops,
1874		},
1875	},
1876};
1877
1878static const struct freq_tbl ftbl_system_noc_bfdcd_clk_src[] = {
1879	F(24000000, P_XO, 1, 0, 0),
1880	F(50000000, P_GPLL0_DIV2, 8, 0, 0),
1881	F(100000000, P_GPLL0, 8, 0, 0),
1882	F(133333333, P_GPLL0, 6, 0, 0),
1883	F(160000000, P_GPLL0, 5, 0, 0),
1884	F(200000000, P_GPLL0, 4, 0, 0),
1885	F(266666667, P_GPLL0, 3, 0, 0),
1886	{ }
1887};
1888
1889static struct clk_rcg2 system_noc_bfdcd_clk_src = {
1890	.cmd_rcgr = 0x26004,
1891	.freq_tbl = ftbl_system_noc_bfdcd_clk_src,
1892	.hid_width = 5,
1893	.parent_map = gcc_xo_gpll0_gpll6_gpll0_out_main_div2_map,
1894	.clkr.hw.init = &(struct clk_init_data){
1895		.name = "system_noc_bfdcd_clk_src",
1896		.parent_data = gcc_xo_gpll0_gpll6_gpll0_out_main_div2,
1897		.num_parents = 4,
1898		.ops = &clk_rcg2_ops,
1899	},
1900};
1901
1902static const struct freq_tbl ftbl_ubi32_mem_noc_bfdcd_clk_src[] = {
1903	F(24000000, P_XO, 1, 0, 0),
1904	F(307670000, P_BIAS_PLL_NSS_NOC, 1.5, 0, 0),
1905	F(533333333, P_GPLL0, 1.5, 0, 0),
1906	{ }
1907};
1908
1909static const struct clk_parent_data
1910			gcc_xo_gpll0_gpll2_bias_pll_nss_noc_clk[] = {
1911	{ .fw_name = "xo" },
1912	{ .hw = &gpll0.clkr.hw },
1913	{ .hw = &gpll2.clkr.hw },
1914	{ .fw_name = "bias_pll_nss_noc_clk" },
1915};
1916
1917static const struct parent_map gcc_xo_gpll0_gpll2_bias_pll_nss_noc_clk_map[] = {
1918	{ P_XO, 0 },
1919	{ P_GPLL0, 1 },
1920	{ P_GPLL2, 3 },
1921	{ P_BIAS_PLL_NSS_NOC, 4 },
1922};
1923
1924static struct clk_rcg2 ubi32_mem_noc_bfdcd_clk_src = {
1925	.cmd_rcgr = 0x68088,
1926	.freq_tbl = ftbl_ubi32_mem_noc_bfdcd_clk_src,
1927	.hid_width = 5,
1928	.parent_map = gcc_xo_gpll0_gpll2_bias_pll_nss_noc_clk_map,
1929	.clkr.hw.init = &(struct clk_init_data){
1930		.name = "ubi32_mem_noc_bfdcd_clk_src",
1931		.parent_data = gcc_xo_gpll0_gpll2_bias_pll_nss_noc_clk,
1932		.num_parents = 4,
1933		.ops = &clk_rcg2_ops,
1934	},
1935};
1936
1937static struct clk_branch gcc_apss_axi_clk = {
1938	.halt_reg = 0x46020,
1939	.halt_check = BRANCH_HALT_VOTED,
1940	.clkr = {
1941		.enable_reg = 0x0b004,
1942		.enable_mask = BIT(13),
1943		.hw.init = &(struct clk_init_data){
1944			.name = "gcc_apss_axi_clk",
1945			.parent_hws = (const struct clk_hw *[]){
1946					&apss_axi_clk_src.clkr.hw },
1947			.num_parents = 1,
1948			.flags = CLK_SET_RATE_PARENT,
1949			.ops = &clk_branch2_ops,
1950		},
1951	},
1952};
1953
1954static struct clk_branch gcc_blsp1_ahb_clk = {
1955	.halt_reg = 0x01008,
1956	.halt_check = BRANCH_HALT_VOTED,
1957	.clkr = {
1958		.enable_reg = 0x0b004,
1959		.enable_mask = BIT(10),
1960		.hw.init = &(struct clk_init_data){
1961			.name = "gcc_blsp1_ahb_clk",
1962			.parent_hws = (const struct clk_hw *[]){
1963					&pcnoc_bfdcd_clk_src.clkr.hw },
1964			.num_parents = 1,
1965			.flags = CLK_SET_RATE_PARENT,
1966			.ops = &clk_branch2_ops,
1967		},
1968	},
1969};
1970
1971static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1972	.halt_reg = 0x02008,
1973	.clkr = {
1974		.enable_reg = 0x02008,
1975		.enable_mask = BIT(0),
1976		.hw.init = &(struct clk_init_data){
1977			.name = "gcc_blsp1_qup1_i2c_apps_clk",
1978			.parent_hws = (const struct clk_hw *[]){
1979					&blsp1_qup1_i2c_apps_clk_src.clkr.hw },
1980			.num_parents = 1,
1981			.flags = CLK_SET_RATE_PARENT,
1982			.ops = &clk_branch2_ops,
1983		},
1984	},
1985};
1986
1987static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1988	.halt_reg = 0x02004,
1989	.clkr = {
1990		.enable_reg = 0x02004,
1991		.enable_mask = BIT(0),
1992		.hw.init = &(struct clk_init_data){
1993			.name = "gcc_blsp1_qup1_spi_apps_clk",
1994			.parent_hws = (const struct clk_hw *[]){
1995					&blsp1_qup1_spi_apps_clk_src.clkr.hw },
1996			.num_parents = 1,
1997			.flags = CLK_SET_RATE_PARENT,
1998			.ops = &clk_branch2_ops,
1999		},
2000	},
2001};
2002
2003static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
2004	.halt_reg = 0x03010,
2005	.clkr = {
2006		.enable_reg = 0x03010,
2007		.enable_mask = BIT(0),
2008		.hw.init = &(struct clk_init_data){
2009			.name = "gcc_blsp1_qup2_i2c_apps_clk",
2010			.parent_hws = (const struct clk_hw *[]){
2011					&blsp1_qup2_i2c_apps_clk_src.clkr.hw },
2012			.num_parents = 1,
2013			.flags = CLK_SET_RATE_PARENT,
2014			.ops = &clk_branch2_ops,
2015		},
2016	},
2017};
2018
2019static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
2020	.halt_reg = 0x0300c,
2021	.clkr = {
2022		.enable_reg = 0x0300c,
2023		.enable_mask = BIT(0),
2024		.hw.init = &(struct clk_init_data){
2025			.name = "gcc_blsp1_qup2_spi_apps_clk",
2026			.parent_hws = (const struct clk_hw *[]){
2027					&blsp1_qup2_spi_apps_clk_src.clkr.hw },
2028			.num_parents = 1,
2029			.flags = CLK_SET_RATE_PARENT,
2030			.ops = &clk_branch2_ops,
2031		},
2032	},
2033};
2034
2035static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
2036	.halt_reg = 0x04010,
2037	.clkr = {
2038		.enable_reg = 0x04010,
2039		.enable_mask = BIT(0),
2040		.hw.init = &(struct clk_init_data){
2041			.name = "gcc_blsp1_qup3_i2c_apps_clk",
2042			.parent_hws = (const struct clk_hw *[]){
2043					&blsp1_qup3_i2c_apps_clk_src.clkr.hw },
2044			.num_parents = 1,
2045			.flags = CLK_SET_RATE_PARENT,
2046			.ops = &clk_branch2_ops,
2047		},
2048	},
2049};
2050
2051static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
2052	.halt_reg = 0x0400c,
2053	.clkr = {
2054		.enable_reg = 0x0400c,
2055		.enable_mask = BIT(0),
2056		.hw.init = &(struct clk_init_data){
2057			.name = "gcc_blsp1_qup3_spi_apps_clk",
2058			.parent_hws = (const struct clk_hw *[]){
2059					&blsp1_qup3_spi_apps_clk_src.clkr.hw },
2060			.num_parents = 1,
2061			.flags = CLK_SET_RATE_PARENT,
2062			.ops = &clk_branch2_ops,
2063		},
2064	},
2065};
2066
2067static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
2068	.halt_reg = 0x05010,
2069	.clkr = {
2070		.enable_reg = 0x05010,
2071		.enable_mask = BIT(0),
2072		.hw.init = &(struct clk_init_data){
2073			.name = "gcc_blsp1_qup4_i2c_apps_clk",
2074			.parent_hws = (const struct clk_hw *[]){
2075					&blsp1_qup4_i2c_apps_clk_src.clkr.hw },
2076			.num_parents = 1,
2077			.flags = CLK_SET_RATE_PARENT,
2078			.ops = &clk_branch2_ops,
2079		},
2080	},
2081};
2082
2083static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
2084	.halt_reg = 0x0500c,
2085	.clkr = {
2086		.enable_reg = 0x0500c,
2087		.enable_mask = BIT(0),
2088		.hw.init = &(struct clk_init_data){
2089			.name = "gcc_blsp1_qup4_spi_apps_clk",
2090			.parent_hws = (const struct clk_hw *[]){
2091					&blsp1_qup4_spi_apps_clk_src.clkr.hw },
2092			.num_parents = 1,
2093			.flags = CLK_SET_RATE_PARENT,
2094			.ops = &clk_branch2_ops,
2095		},
2096	},
2097};
2098
2099static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
2100	.halt_reg = 0x06010,
2101	.clkr = {
2102		.enable_reg = 0x06010,
2103		.enable_mask = BIT(0),
2104		.hw.init = &(struct clk_init_data){
2105			.name = "gcc_blsp1_qup5_i2c_apps_clk",
2106			.parent_hws = (const struct clk_hw *[]){
2107					&blsp1_qup5_i2c_apps_clk_src.clkr.hw },
2108			.num_parents = 1,
2109			.flags = CLK_SET_RATE_PARENT,
2110			.ops = &clk_branch2_ops,
2111		},
2112	},
2113};
2114
2115static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
2116	.halt_reg = 0x0600c,
2117	.clkr = {
2118		.enable_reg = 0x0600c,
2119		.enable_mask = BIT(0),
2120		.hw.init = &(struct clk_init_data){
2121			.name = "gcc_blsp1_qup5_spi_apps_clk",
2122			.parent_hws = (const struct clk_hw *[]){
2123					&blsp1_qup5_spi_apps_clk_src.clkr.hw },
2124			.num_parents = 1,
2125			.flags = CLK_SET_RATE_PARENT,
2126			.ops = &clk_branch2_ops,
2127		},
2128	},
2129};
2130
2131static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
2132	.halt_reg = 0x0700c,
2133	.clkr = {
2134		.enable_reg = 0x0700c,
2135		.enable_mask = BIT(0),
2136		.hw.init = &(struct clk_init_data){
2137			.name = "gcc_blsp1_qup6_spi_apps_clk",
2138			.parent_hws = (const struct clk_hw *[]){
2139					&blsp1_qup6_spi_apps_clk_src.clkr.hw },
2140			.num_parents = 1,
2141			.flags = CLK_SET_RATE_PARENT,
2142			.ops = &clk_branch2_ops,
2143		},
2144	},
2145};
2146
2147static struct clk_branch gcc_blsp1_uart1_apps_clk = {
2148	.halt_reg = 0x0203c,
2149	.clkr = {
2150		.enable_reg = 0x0203c,
2151		.enable_mask = BIT(0),
2152		.hw.init = &(struct clk_init_data){
2153			.name = "gcc_blsp1_uart1_apps_clk",
2154			.parent_hws = (const struct clk_hw *[]){
2155					&blsp1_uart1_apps_clk_src.clkr.hw },
2156			.num_parents = 1,
2157			.flags = CLK_SET_RATE_PARENT,
2158			.ops = &clk_branch2_ops,
2159		},
2160	},
2161};
2162
2163static struct clk_branch gcc_blsp1_uart2_apps_clk = {
2164	.halt_reg = 0x0302c,
2165	.clkr = {
2166		.enable_reg = 0x0302c,
2167		.enable_mask = BIT(0),
2168		.hw.init = &(struct clk_init_data){
2169			.name = "gcc_blsp1_uart2_apps_clk",
2170			.parent_hws = (const struct clk_hw *[]){
2171					&blsp1_uart2_apps_clk_src.clkr.hw },
2172			.num_parents = 1,
2173			.flags = CLK_SET_RATE_PARENT,
2174			.ops = &clk_branch2_ops,
2175		},
2176	},
2177};
2178
2179static struct clk_branch gcc_blsp1_uart3_apps_clk = {
2180	.halt_reg = 0x0402c,
2181	.clkr = {
2182		.enable_reg = 0x0402c,
2183		.enable_mask = BIT(0),
2184		.hw.init = &(struct clk_init_data){
2185			.name = "gcc_blsp1_uart3_apps_clk",
2186			.parent_hws = (const struct clk_hw *[]){
2187					&blsp1_uart3_apps_clk_src.clkr.hw },
2188			.num_parents = 1,
2189			.flags = CLK_SET_RATE_PARENT,
2190			.ops = &clk_branch2_ops,
2191		},
2192	},
2193};
2194
2195static struct clk_branch gcc_blsp1_uart4_apps_clk = {
2196	.halt_reg = 0x0502c,
2197	.clkr = {
2198		.enable_reg = 0x0502c,
2199		.enable_mask = BIT(0),
2200		.hw.init = &(struct clk_init_data){
2201			.name = "gcc_blsp1_uart4_apps_clk",
2202			.parent_hws = (const struct clk_hw *[]){
2203					&blsp1_uart4_apps_clk_src.clkr.hw },
2204			.num_parents = 1,
2205			.flags = CLK_SET_RATE_PARENT,
2206			.ops = &clk_branch2_ops,
2207		},
2208	},
2209};
2210
2211static struct clk_branch gcc_blsp1_uart5_apps_clk = {
2212	.halt_reg = 0x0602c,
2213	.clkr = {
2214		.enable_reg = 0x0602c,
2215		.enable_mask = BIT(0),
2216		.hw.init = &(struct clk_init_data){
2217			.name = "gcc_blsp1_uart5_apps_clk",
2218			.parent_hws = (const struct clk_hw *[]){
2219					&blsp1_uart5_apps_clk_src.clkr.hw },
2220			.num_parents = 1,
2221			.flags = CLK_SET_RATE_PARENT,
2222			.ops = &clk_branch2_ops,
2223		},
2224	},
2225};
2226
2227static struct clk_branch gcc_blsp1_uart6_apps_clk = {
2228	.halt_reg = 0x0702c,
2229	.clkr = {
2230		.enable_reg = 0x0702c,
2231		.enable_mask = BIT(0),
2232		.hw.init = &(struct clk_init_data){
2233			.name = "gcc_blsp1_uart6_apps_clk",
2234			.parent_hws = (const struct clk_hw *[]){
2235					&blsp1_uart6_apps_clk_src.clkr.hw },
2236			.num_parents = 1,
2237			.flags = CLK_SET_RATE_PARENT,
2238			.ops = &clk_branch2_ops,
2239		},
2240	},
2241};
2242
2243static struct clk_branch gcc_crypto_ahb_clk = {
2244	.halt_reg = 0x16024,
2245	.halt_check = BRANCH_HALT_VOTED,
2246	.clkr = {
2247		.enable_reg = 0x0b004,
2248		.enable_mask = BIT(0),
2249		.hw.init = &(struct clk_init_data){
2250			.name = "gcc_crypto_ahb_clk",
2251			.parent_hws = (const struct clk_hw *[]){
2252					&pcnoc_bfdcd_clk_src.clkr.hw },
2253			.num_parents = 1,
2254			.flags = CLK_SET_RATE_PARENT,
2255			.ops = &clk_branch2_ops,
2256		},
2257	},
2258};
2259
2260static struct clk_branch gcc_crypto_axi_clk = {
2261	.halt_reg = 0x16020,
2262	.halt_check = BRANCH_HALT_VOTED,
2263	.clkr = {
2264		.enable_reg = 0x0b004,
2265		.enable_mask = BIT(1),
2266		.hw.init = &(struct clk_init_data){
2267			.name = "gcc_crypto_axi_clk",
2268			.parent_hws = (const struct clk_hw *[]){
2269					&pcnoc_bfdcd_clk_src.clkr.hw },
2270			.num_parents = 1,
2271			.flags = CLK_SET_RATE_PARENT,
2272			.ops = &clk_branch2_ops,
2273		},
2274	},
2275};
2276
2277static struct clk_branch gcc_crypto_clk = {
2278	.halt_reg = 0x1601c,
2279	.halt_check = BRANCH_HALT_VOTED,
2280	.clkr = {
2281		.enable_reg = 0x0b004,
2282		.enable_mask = BIT(2),
2283		.hw.init = &(struct clk_init_data){
2284			.name = "gcc_crypto_clk",
2285			.parent_hws = (const struct clk_hw *[]){
2286					&crypto_clk_src.clkr.hw },
2287			.num_parents = 1,
2288			.flags = CLK_SET_RATE_PARENT,
2289			.ops = &clk_branch2_ops,
2290		},
2291	},
2292};
2293
2294static struct clk_fixed_factor gpll6_out_main_div2 = {
2295	.mult = 1,
2296	.div = 2,
2297	.hw.init = &(struct clk_init_data){
2298		.name = "gpll6_out_main_div2",
2299		.parent_hws = (const struct clk_hw *[]){
2300				&gpll6_main.clkr.hw },
2301		.num_parents = 1,
2302		.ops = &clk_fixed_factor_ops,
2303		.flags = CLK_SET_RATE_PARENT,
2304	},
2305};
2306
2307static struct clk_branch gcc_xo_clk = {
2308	.halt_reg = 0x30030,
2309	.clkr = {
2310		.enable_reg = 0x30030,
2311		.enable_mask = BIT(0),
2312		.hw.init = &(struct clk_init_data){
2313			.name = "gcc_xo_clk",
2314			.parent_hws = (const struct clk_hw *[]){
2315					&gcc_xo_clk_src.clkr.hw },
2316			.num_parents = 1,
2317			.flags = CLK_SET_RATE_PARENT,
2318			.ops = &clk_branch2_ops,
2319		},
2320	},
2321};
2322
2323static struct clk_branch gcc_gp1_clk = {
2324	.halt_reg = 0x08000,
2325	.clkr = {
2326		.enable_reg = 0x08000,
2327		.enable_mask = BIT(0),
2328		.hw.init = &(struct clk_init_data){
2329			.name = "gcc_gp1_clk",
2330			.parent_hws = (const struct clk_hw *[]){
2331					&gp1_clk_src.clkr.hw },
2332			.num_parents = 1,
2333			.flags = CLK_SET_RATE_PARENT,
2334			.ops = &clk_branch2_ops,
2335		},
2336	},
2337};
2338
2339static struct clk_branch gcc_gp2_clk = {
2340	.halt_reg = 0x09000,
2341	.clkr = {
2342		.enable_reg = 0x09000,
2343		.enable_mask = BIT(0),
2344		.hw.init = &(struct clk_init_data){
2345			.name = "gcc_gp2_clk",
2346			.parent_hws = (const struct clk_hw *[]){
2347					&gp2_clk_src.clkr.hw },
2348			.num_parents = 1,
2349			.flags = CLK_SET_RATE_PARENT,
2350			.ops = &clk_branch2_ops,
2351		},
2352	},
2353};
2354
2355static struct clk_branch gcc_gp3_clk = {
2356	.halt_reg = 0x0a000,
2357	.clkr = {
2358		.enable_reg = 0x0a000,
2359		.enable_mask = BIT(0),
2360		.hw.init = &(struct clk_init_data){
2361			.name = "gcc_gp3_clk",
2362			.parent_hws = (const struct clk_hw *[]){
2363					&gp3_clk_src.clkr.hw },
2364			.num_parents = 1,
2365			.flags = CLK_SET_RATE_PARENT,
2366			.ops = &clk_branch2_ops,
2367		},
2368	},
2369};
2370
2371static struct clk_branch gcc_mdio_ahb_clk = {
2372	.halt_reg = 0x58004,
2373	.clkr = {
2374		.enable_reg = 0x58004,
2375		.enable_mask = BIT(0),
2376		.hw.init = &(struct clk_init_data){
2377			.name = "gcc_mdio_ahb_clk",
2378			.parent_hws = (const struct clk_hw *[]){
2379					&pcnoc_bfdcd_clk_src.clkr.hw },
2380			.num_parents = 1,
2381			.flags = CLK_SET_RATE_PARENT,
2382			.ops = &clk_branch2_ops,
2383		},
2384	},
2385};
2386
2387static struct clk_branch gcc_crypto_ppe_clk = {
2388	.halt_reg = 0x68310,
2389	.clkr = {
2390		.enable_reg = 0x68310,
2391		.enable_mask = BIT(0),
2392		.hw.init = &(struct clk_init_data){
2393			.name = "gcc_crypto_ppe_clk",
2394			.parent_hws = (const struct clk_hw *[]){
2395					&nss_ppe_clk_src.clkr.hw },
2396			.num_parents = 1,
2397			.flags = CLK_SET_RATE_PARENT,
2398			.ops = &clk_branch2_ops,
2399		},
2400	},
2401};
2402
2403static struct clk_branch gcc_nss_ce_apb_clk = {
2404	.halt_reg = 0x68174,
2405	.clkr = {
2406		.enable_reg = 0x68174,
2407		.enable_mask = BIT(0),
2408		.hw.init = &(struct clk_init_data){
2409			.name = "gcc_nss_ce_apb_clk",
2410			.parent_hws = (const struct clk_hw *[]){
2411					&nss_ce_clk_src.clkr.hw },
2412			.num_parents = 1,
2413			.flags = CLK_SET_RATE_PARENT,
2414			.ops = &clk_branch2_ops,
2415		},
2416	},
2417};
2418
2419static struct clk_branch gcc_nss_ce_axi_clk = {
2420	.halt_reg = 0x68170,
2421	.clkr = {
2422		.enable_reg = 0x68170,
2423		.enable_mask = BIT(0),
2424		.hw.init = &(struct clk_init_data){
2425			.name = "gcc_nss_ce_axi_clk",
2426			.parent_hws = (const struct clk_hw *[]){
2427					&nss_ce_clk_src.clkr.hw },
2428			.num_parents = 1,
2429			.flags = CLK_SET_RATE_PARENT,
2430			.ops = &clk_branch2_ops,
2431		},
2432	},
2433};
2434
2435static struct clk_branch gcc_nss_cfg_clk = {
2436	.halt_reg = 0x68160,
2437	.clkr = {
2438		.enable_reg = 0x68160,
2439		.enable_mask = BIT(0),
2440		.hw.init = &(struct clk_init_data){
2441			.name = "gcc_nss_cfg_clk",
2442			.parent_hws = (const struct clk_hw *[]){
2443					&pcnoc_bfdcd_clk_src.clkr.hw },
2444			.num_parents = 1,
2445			.flags = CLK_SET_RATE_PARENT,
2446			.ops = &clk_branch2_ops,
2447		},
2448	},
2449};
2450
2451static struct clk_branch gcc_nss_crypto_clk = {
2452	.halt_reg = 0x68164,
2453	.clkr = {
2454		.enable_reg = 0x68164,
2455		.enable_mask = BIT(0),
2456		.hw.init = &(struct clk_init_data){
2457			.name = "gcc_nss_crypto_clk",
2458			.parent_hws = (const struct clk_hw *[]){
2459					&nss_crypto_clk_src.clkr.hw },
2460			.num_parents = 1,
2461			.flags = CLK_SET_RATE_PARENT,
2462			.ops = &clk_branch2_ops,
2463		},
2464	},
2465};
2466
2467static struct clk_branch gcc_nss_csr_clk = {
2468	.halt_reg = 0x68318,
2469	.clkr = {
2470		.enable_reg = 0x68318,
2471		.enable_mask = BIT(0),
2472		.hw.init = &(struct clk_init_data){
2473			.name = "gcc_nss_csr_clk",
2474			.parent_hws = (const struct clk_hw *[]){
2475					&nss_ce_clk_src.clkr.hw },
2476			.num_parents = 1,
2477			.flags = CLK_SET_RATE_PARENT,
2478			.ops = &clk_branch2_ops,
2479		},
2480	},
2481};
2482
2483static struct clk_branch gcc_nss_edma_cfg_clk = {
2484	.halt_reg = 0x6819C,
2485	.clkr = {
2486		.enable_reg = 0x6819C,
2487		.enable_mask = BIT(0),
2488		.hw.init = &(struct clk_init_data){
2489			.name = "gcc_nss_edma_cfg_clk",
2490			.parent_hws = (const struct clk_hw *[]){
2491					&nss_ppe_clk_src.clkr.hw },
2492			.num_parents = 1,
2493			.flags = CLK_SET_RATE_PARENT,
2494			.ops = &clk_branch2_ops,
2495		},
2496	},
2497};
2498
2499static struct clk_branch gcc_nss_edma_clk = {
2500	.halt_reg = 0x68198,
2501	.clkr = {
2502		.enable_reg = 0x68198,
2503		.enable_mask = BIT(0),
2504		.hw.init = &(struct clk_init_data){
2505			.name = "gcc_nss_edma_clk",
2506			.parent_hws = (const struct clk_hw *[]){
2507					&nss_ppe_clk_src.clkr.hw },
2508			.num_parents = 1,
2509			.flags = CLK_SET_RATE_PARENT,
2510			.ops = &clk_branch2_ops,
2511		},
2512	},
2513};
2514
2515static struct clk_branch gcc_nss_noc_clk = {
2516	.halt_reg = 0x68168,
2517	.clkr = {
2518		.enable_reg = 0x68168,
2519		.enable_mask = BIT(0),
2520		.hw.init = &(struct clk_init_data){
2521			.name = "gcc_nss_noc_clk",
2522			.parent_hws = (const struct clk_hw *[]){
2523					&snoc_nssnoc_bfdcd_clk_src.clkr.hw },
2524			.num_parents = 1,
2525			.flags = CLK_SET_RATE_PARENT,
2526			.ops = &clk_branch2_ops,
2527		},
2528	},
2529};
2530
2531static struct clk_branch gcc_ubi0_utcm_clk = {
2532	.halt_reg = 0x2606c,
2533	.clkr = {
2534		.enable_reg = 0x2606c,
2535		.enable_mask = BIT(0),
2536		.hw.init = &(struct clk_init_data){
2537			.name = "gcc_ubi0_utcm_clk",
2538			.parent_hws = (const struct clk_hw *[]){
2539					&snoc_nssnoc_bfdcd_clk_src.clkr.hw },
2540			.num_parents = 1,
2541			.flags = CLK_SET_RATE_PARENT,
2542			.ops = &clk_branch2_ops,
2543		},
2544	},
2545};
2546
2547static struct clk_branch gcc_snoc_nssnoc_clk = {
2548	.halt_reg = 0x26070,
2549	.clkr = {
2550		.enable_reg = 0x26070,
2551		.enable_mask = BIT(0),
2552		.hw.init = &(struct clk_init_data){
2553			.name = "gcc_snoc_nssnoc_clk",
2554			.parent_hws = (const struct clk_hw *[]){
2555					&snoc_nssnoc_bfdcd_clk_src.clkr.hw },
2556			.num_parents = 1,
2557			.flags = CLK_SET_RATE_PARENT,
2558			.ops = &clk_branch2_ops,
2559		},
2560	},
2561};
2562
2563static const struct freq_tbl ftbl_wcss_ahb_clk_src[] = {
2564	F(24000000, P_XO, 1, 0, 0),
2565	F(133333333, P_GPLL0, 6, 0, 0),
2566	{ }
2567};
2568
2569static const struct freq_tbl ftbl_q6_axi_clk_src[] = {
2570	F(24000000, P_XO, 1, 0, 0),
2571	F(400000000, P_GPLL0, 2, 0, 0),
2572	{ }
2573};
2574
2575static struct clk_rcg2 wcss_ahb_clk_src = {
2576	.cmd_rcgr = 0x59020,
2577	.freq_tbl = ftbl_wcss_ahb_clk_src,
2578	.hid_width = 5,
2579	.parent_map = gcc_xo_gpll0_map,
2580	.clkr.hw.init = &(struct clk_init_data){
2581		.name = "wcss_ahb_clk_src",
2582		.parent_data = gcc_xo_gpll0,
2583		.num_parents = 2,
2584		.ops = &clk_rcg2_ops,
2585	},
2586};
2587
2588static const struct clk_parent_data gcc_xo_gpll0_gpll2_gpll4_gpll6[] = {
2589	{ .fw_name = "xo" },
2590	{ .hw = &gpll0.clkr.hw },
2591	{ .hw = &gpll2.clkr.hw },
2592	{ .hw = &gpll4.clkr.hw },
2593	{ .hw = &gpll6.clkr.hw },
2594};
2595
2596static const struct parent_map gcc_xo_gpll0_gpll2_gpll4_gpll6_map[] = {
2597	{ P_XO, 0 },
2598	{ P_GPLL0, 1 },
2599	{ P_GPLL2, 2 },
2600	{ P_GPLL4, 3 },
2601	{ P_GPLL6, 4 },
2602};
2603
2604static struct clk_rcg2 q6_axi_clk_src = {
2605	.cmd_rcgr = 0x59120,
2606	.freq_tbl = ftbl_q6_axi_clk_src,
2607	.hid_width = 5,
2608	.parent_map = gcc_xo_gpll0_gpll2_gpll4_gpll6_map,
2609	.clkr.hw.init = &(struct clk_init_data){
2610		.name = "q6_axi_clk_src",
2611		.parent_data = gcc_xo_gpll0_gpll2_gpll4_gpll6,
2612		.num_parents = 5,
2613		.ops = &clk_rcg2_ops,
2614	},
2615};
2616
2617static const struct freq_tbl ftbl_lpass_core_axim_clk_src[] = {
2618	F(24000000, P_XO, 1, 0, 0),
2619	F(100000000, P_GPLL0, 8, 0, 0),
2620	{ }
2621};
2622
2623static struct clk_rcg2 lpass_core_axim_clk_src = {
2624	.cmd_rcgr = 0x1F020,
2625	.freq_tbl = ftbl_lpass_core_axim_clk_src,
2626	.hid_width = 5,
2627	.parent_map = gcc_xo_gpll0_map,
2628	.clkr.hw.init = &(struct clk_init_data){
2629		.name = "lpass_core_axim_clk_src",
2630		.parent_data = gcc_xo_gpll0,
2631		.num_parents = 2,
2632		.ops = &clk_rcg2_ops,
2633	},
2634};
2635
2636static const struct freq_tbl ftbl_lpass_snoc_cfg_clk_src[] = {
2637	F(24000000, P_XO, 1, 0, 0),
2638	F(266666667, P_GPLL0, 3, 0, 0),
2639	{ }
2640};
2641
2642static struct clk_rcg2 lpass_snoc_cfg_clk_src = {
2643	.cmd_rcgr = 0x1F040,
2644	.freq_tbl = ftbl_lpass_snoc_cfg_clk_src,
2645	.hid_width = 5,
2646	.parent_map = gcc_xo_gpll0_map,
2647	.clkr.hw.init = &(struct clk_init_data){
2648		.name = "lpass_snoc_cfg_clk_src",
2649		.parent_data = gcc_xo_gpll0,
2650		.num_parents = 2,
2651		.ops = &clk_rcg2_ops,
2652	},
2653};
2654
2655static const struct freq_tbl ftbl_lpass_q6_axim_clk_src[] = {
2656	F(24000000, P_XO, 1, 0, 0),
2657	F(400000000, P_GPLL0, 2, 0, 0),
2658	{ }
2659};
2660
2661static struct clk_rcg2 lpass_q6_axim_clk_src = {
2662	.cmd_rcgr = 0x1F008,
2663	.freq_tbl = ftbl_lpass_q6_axim_clk_src,
2664	.hid_width = 5,
2665	.parent_map = gcc_xo_gpll0_map,
2666	.clkr.hw.init = &(struct clk_init_data){
2667		.name = "lpass_q6_axim_clk_src",
2668		.parent_data = gcc_xo_gpll0,
2669		.num_parents = 2,
2670		.ops = &clk_rcg2_ops,
2671	},
2672};
2673
2674static struct freq_tbl ftbl_rbcpr_wcss_clk_src[] = {
2675	F(24000000, P_XO, 1, 0, 0),
2676	F(50000000, P_GPLL0, 16, 0, 0),
2677	{ }
2678};
2679
2680static struct clk_rcg2 rbcpr_wcss_clk_src = {
2681	.cmd_rcgr = 0x3a00c,
2682	.freq_tbl = ftbl_rbcpr_wcss_clk_src,
2683	.hid_width = 5,
2684	.parent_map = gcc_xo_gpll0_out_main_div2_gpll0_map,
2685	.clkr.hw.init = &(struct clk_init_data){
2686		.name = "rbcpr_wcss_clk_src",
2687		.parent_data = gcc_xo_gpll0_out_main_div2_gpll0,
2688		.num_parents = 3,
2689		.ops = &clk_rcg2_ops,
2690	},
2691};
2692
2693static struct clk_branch gcc_lpass_core_axim_clk = {
2694	.halt_reg = 0x1F028,
2695	.clkr = {
2696		.enable_reg = 0x1F028,
2697		.enable_mask = BIT(0),
2698		.hw.init = &(struct clk_init_data){
2699			.name = "gcc_lpass_core_axim_clk",
2700			.parent_hws = (const struct clk_hw *[]){
2701					&lpass_core_axim_clk_src.clkr.hw },
2702			.num_parents = 1,
2703			.flags = CLK_SET_RATE_PARENT,
2704			.ops = &clk_branch2_ops,
2705		},
2706	},
2707};
2708
2709static struct clk_branch gcc_lpass_snoc_cfg_clk = {
2710	.halt_reg = 0x1F048,
2711	.clkr = {
2712		.enable_reg = 0x1F048,
2713		.enable_mask = BIT(0),
2714		.hw.init = &(struct clk_init_data){
2715			.name = "gcc_lpass_snoc_cfg_clk",
2716			.parent_hws = (const struct clk_hw *[]){
2717					&lpass_snoc_cfg_clk_src.clkr.hw },
2718			.num_parents = 1,
2719			.flags = CLK_SET_RATE_PARENT,
2720			.ops = &clk_branch2_ops,
2721		},
2722	},
2723};
2724
2725static struct clk_branch gcc_lpass_q6_axim_clk = {
2726	.halt_reg = 0x1F010,
2727	.clkr = {
2728		.enable_reg = 0x1F010,
2729		.enable_mask = BIT(0),
2730		.hw.init = &(struct clk_init_data){
2731			.name = "gcc_lpass_q6_axim_clk",
2732			.parent_hws = (const struct clk_hw *[]){
2733					&lpass_q6_axim_clk_src.clkr.hw },
2734			.num_parents = 1,
2735			.flags = CLK_SET_RATE_PARENT,
2736			.ops = &clk_branch2_ops,
2737		},
2738	},
2739};
2740
2741static struct clk_branch gcc_lpass_q6_atbm_at_clk = {
2742	.halt_reg = 0x1F018,
2743	.clkr = {
2744		.enable_reg = 0x1F018,
2745		.enable_mask = BIT(0),
2746		.hw.init = &(struct clk_init_data){
2747			.name = "gcc_lpass_q6_atbm_at_clk",
2748			.parent_hws = (const struct clk_hw *[]){
2749					&qdss_at_clk_src.clkr.hw },
2750			.num_parents = 1,
2751			.flags = CLK_SET_RATE_PARENT,
2752			.ops = &clk_branch2_ops,
2753		},
2754	},
2755};
2756
2757static struct clk_branch gcc_lpass_q6_pclkdbg_clk = {
2758	.halt_reg = 0x1F01C,
2759	.clkr = {
2760		.enable_reg = 0x1F01C,
2761		.enable_mask = BIT(0),
2762		.hw.init = &(struct clk_init_data){
2763			.name = "gcc_lpass_q6_pclkdbg_clk",
2764			.parent_hws = (const struct clk_hw *[]){
2765					&qdss_dap_sync_clk_src.hw },
2766			.num_parents = 1,
2767			.flags = CLK_SET_RATE_PARENT,
2768			.ops = &clk_branch2_ops,
2769		},
2770	},
2771};
2772
2773static struct clk_branch gcc_lpass_q6ss_tsctr_1to2_clk = {
2774	.halt_reg = 0x1F014,
2775	.clkr = {
2776		.enable_reg = 0x1F014,
2777		.enable_mask = BIT(0),
2778		.hw.init = &(struct clk_init_data){
2779			.name = "gcc_lpass_q6ss_tsctr_1to2_clk",
2780			.parent_hws = (const struct clk_hw *[]){
2781					&qdss_tsctr_div2_clk_src.hw },
2782			.num_parents = 1,
2783			.flags = CLK_SET_RATE_PARENT,
2784			.ops = &clk_branch2_ops,
2785		},
2786	},
2787};
2788
2789static struct clk_branch gcc_lpass_q6ss_trig_clk = {
2790	.halt_reg = 0x1F038,
2791	.clkr = {
2792		.enable_reg = 0x1F038,
2793		.enable_mask = BIT(0),
2794		.hw.init = &(struct clk_init_data){
2795			.name = "gcc_lpass_q6ss_trig_clk",
2796			.parent_hws = (const struct clk_hw *[]){
2797					&qdss_dap_sync_clk_src.hw },
2798			.num_parents = 1,
2799			.flags = CLK_SET_RATE_PARENT,
2800			.ops = &clk_branch2_ops,
2801		},
2802	},
2803};
2804
2805static struct clk_branch gcc_lpass_tbu_clk = {
2806	.halt_reg = 0x12094,
2807	.clkr = {
2808		.enable_reg = 0xb00c,
2809		.enable_mask = BIT(10),
2810		.hw.init = &(struct clk_init_data){
2811			.name = "gcc_lpass_tbu_clk",
2812			.parent_hws = (const struct clk_hw *[]){
2813					&lpass_q6_axim_clk_src.clkr.hw },
2814			.num_parents = 1,
2815			.flags = CLK_SET_RATE_PARENT,
2816			.ops = &clk_branch2_ops,
2817		},
2818	},
2819};
2820
2821static struct clk_branch gcc_pcnoc_lpass_clk = {
2822	.halt_reg = 0x27020,
2823	.clkr = {
2824		.enable_reg = 0x27020,
2825		.enable_mask = BIT(0),
2826		.hw.init = &(struct clk_init_data){
2827			.name = "gcc_pcnoc_lpass_clk",
2828			.parent_hws = (const struct clk_hw *[]){
2829					&lpass_core_axim_clk_src.clkr.hw },
2830			.num_parents = 1,
2831			.flags = CLK_SET_RATE_PARENT,
2832			.ops = &clk_branch2_ops,
2833		},
2834	},
2835};
2836
2837static struct clk_branch gcc_mem_noc_lpass_clk = {
2838	.halt_reg = 0x1D044,
2839	.clkr = {
2840		.enable_reg = 0x1D044,
2841		.enable_mask = BIT(0),
2842		.hw.init = &(struct clk_init_data){
2843			.name = "gcc_mem_noc_lpass_clk",
2844			.parent_hws = (const struct clk_hw *[]){
2845					&lpass_q6_axim_clk_src.clkr.hw },
2846			.num_parents = 1,
2847			.flags = CLK_SET_RATE_PARENT,
2848			.ops = &clk_branch2_ops,
2849		},
2850	},
2851};
2852
2853static struct clk_branch gcc_snoc_lpass_cfg_clk = {
2854	.halt_reg = 0x26074,
2855	.clkr = {
2856		.enable_reg = 0x26074,
2857		.enable_mask = BIT(0),
2858		.hw.init = &(struct clk_init_data){
2859			.name = "gcc_snoc_lpass_cfg_clk",
2860			.parent_hws = (const struct clk_hw *[]){
2861					&lpass_snoc_cfg_clk_src.clkr.hw },
2862			.num_parents = 1,
2863			.flags = CLK_SET_RATE_PARENT,
2864			.ops = &clk_branch2_ops,
2865		},
2866	},
2867};
2868
2869static struct clk_branch gcc_mem_noc_ubi32_clk = {
2870	.halt_reg = 0x1D03C,
2871	.clkr = {
2872		.enable_reg = 0x1D03C,
2873		.enable_mask = BIT(0),
2874		.hw.init = &(struct clk_init_data){
2875			.name = "gcc_mem_noc_ubi32_clk",
2876			.parent_hws = (const struct clk_hw *[]){
2877					&ubi32_mem_noc_bfdcd_clk_src.clkr.hw },
2878			.num_parents = 1,
2879			.flags = CLK_SET_RATE_PARENT,
2880			.ops = &clk_branch2_ops,
2881		},
2882	},
2883};
2884
2885static struct clk_branch gcc_nss_port1_rx_clk = {
2886	.halt_reg = 0x68240,
2887	.clkr = {
2888		.enable_reg = 0x68240,
2889		.enable_mask = BIT(0),
2890		.hw.init = &(struct clk_init_data){
2891			.name = "gcc_nss_port1_rx_clk",
2892			.parent_hws = (const struct clk_hw *[]){
2893					&nss_port1_rx_div_clk_src.clkr.hw },
2894			.num_parents = 1,
2895			.flags = CLK_SET_RATE_PARENT,
2896			.ops = &clk_branch2_ops,
2897		},
2898	},
2899};
2900
2901static struct clk_branch gcc_nss_port1_tx_clk = {
2902	.halt_reg = 0x68244,
2903	.clkr = {
2904		.enable_reg = 0x68244,
2905		.enable_mask = BIT(0),
2906		.hw.init = &(struct clk_init_data){
2907			.name = "gcc_nss_port1_tx_clk",
2908			.parent_hws = (const struct clk_hw *[]){
2909					&nss_port1_tx_div_clk_src.clkr.hw },
2910			.num_parents = 1,
2911			.flags = CLK_SET_RATE_PARENT,
2912			.ops = &clk_branch2_ops,
2913		},
2914	},
2915};
2916
2917static struct clk_branch gcc_nss_port2_rx_clk = {
2918	.halt_reg = 0x68248,
2919	.clkr = {
2920		.enable_reg = 0x68248,
2921		.enable_mask = BIT(0),
2922		.hw.init = &(struct clk_init_data){
2923			.name = "gcc_nss_port2_rx_clk",
2924			.parent_hws = (const struct clk_hw *[]){
2925					&nss_port2_rx_div_clk_src.clkr.hw },
2926			.num_parents = 1,
2927			.flags = CLK_SET_RATE_PARENT,
2928			.ops = &clk_branch2_ops,
2929		},
2930	},
2931};
2932
2933static struct clk_branch gcc_nss_port2_tx_clk = {
2934	.halt_reg = 0x6824c,
2935	.clkr = {
2936		.enable_reg = 0x6824c,
2937		.enable_mask = BIT(0),
2938		.hw.init = &(struct clk_init_data){
2939			.name = "gcc_nss_port2_tx_clk",
2940			.parent_hws = (const struct clk_hw *[]){
2941					&nss_port2_tx_div_clk_src.clkr.hw },
2942			.num_parents = 1,
2943			.flags = CLK_SET_RATE_PARENT,
2944			.ops = &clk_branch2_ops,
2945		},
2946	},
2947};
2948
2949static struct clk_branch gcc_nss_port3_rx_clk = {
2950	.halt_reg = 0x68250,
2951	.clkr = {
2952		.enable_reg = 0x68250,
2953		.enable_mask = BIT(0),
2954		.hw.init = &(struct clk_init_data){
2955			.name = "gcc_nss_port3_rx_clk",
2956			.parent_hws = (const struct clk_hw *[]){
2957					&nss_port3_rx_div_clk_src.clkr.hw },
2958			.num_parents = 1,
2959			.flags = CLK_SET_RATE_PARENT,
2960			.ops = &clk_branch2_ops,
2961		},
2962	},
2963};
2964
2965static struct clk_branch gcc_nss_port3_tx_clk = {
2966	.halt_reg = 0x68254,
2967	.clkr = {
2968		.enable_reg = 0x68254,
2969		.enable_mask = BIT(0),
2970		.hw.init = &(struct clk_init_data){
2971			.name = "gcc_nss_port3_tx_clk",
2972			.parent_hws = (const struct clk_hw *[]){
2973					&nss_port3_tx_div_clk_src.clkr.hw },
2974			.num_parents = 1,
2975			.flags = CLK_SET_RATE_PARENT,
2976			.ops = &clk_branch2_ops,
2977		},
2978	},
2979};
2980
2981static struct clk_branch gcc_nss_port4_rx_clk = {
2982	.halt_reg = 0x68258,
2983	.clkr = {
2984		.enable_reg = 0x68258,
2985		.enable_mask = BIT(0),
2986		.hw.init = &(struct clk_init_data){
2987			.name = "gcc_nss_port4_rx_clk",
2988			.parent_hws = (const struct clk_hw *[]){
2989					&nss_port4_rx_div_clk_src.clkr.hw },
2990			.num_parents = 1,
2991			.flags = CLK_SET_RATE_PARENT,
2992			.ops = &clk_branch2_ops,
2993		},
2994	},
2995};
2996
2997static struct clk_branch gcc_nss_port4_tx_clk = {
2998	.halt_reg = 0x6825c,
2999	.clkr = {
3000		.enable_reg = 0x6825c,
3001		.enable_mask = BIT(0),
3002		.hw.init = &(struct clk_init_data){
3003			.name = "gcc_nss_port4_tx_clk",
3004			.parent_hws = (const struct clk_hw *[]){
3005					&nss_port4_tx_div_clk_src.clkr.hw },
3006			.num_parents = 1,
3007			.flags = CLK_SET_RATE_PARENT,
3008			.ops = &clk_branch2_ops,
3009		},
3010	},
3011};
3012
3013static struct clk_branch gcc_nss_port5_rx_clk = {
3014	.halt_reg = 0x68260,
3015	.clkr = {
3016		.enable_reg = 0x68260,
3017		.enable_mask = BIT(0),
3018		.hw.init = &(struct clk_init_data){
3019			.name = "gcc_nss_port5_rx_clk",
3020			.parent_hws = (const struct clk_hw *[]){
3021					&nss_port5_rx_div_clk_src.clkr.hw },
3022			.num_parents = 1,
3023			.flags = CLK_SET_RATE_PARENT,
3024			.ops = &clk_branch2_ops,
3025		},
3026	},
3027};
3028
3029static struct clk_branch gcc_nss_port5_tx_clk = {
3030	.halt_reg = 0x68264,
3031	.clkr = {
3032		.enable_reg = 0x68264,
3033		.enable_mask = BIT(0),
3034		.hw.init = &(struct clk_init_data){
3035			.name = "gcc_nss_port5_tx_clk",
3036			.parent_hws = (const struct clk_hw *[]){
3037					&nss_port5_tx_div_clk_src.clkr.hw },
3038			.num_parents = 1,
3039			.flags = CLK_SET_RATE_PARENT,
3040			.ops = &clk_branch2_ops,
3041		},
3042	},
3043};
3044
3045static struct clk_branch gcc_nss_ppe_cfg_clk = {
3046	.halt_reg = 0x68194,
3047	.clkr = {
3048		.enable_reg = 0x68194,
3049		.enable_mask = BIT(0),
3050		.hw.init = &(struct clk_init_data){
3051			.name = "gcc_nss_ppe_cfg_clk",
3052			.parent_hws = (const struct clk_hw *[]){
3053					&nss_ppe_clk_src.clkr.hw },
3054			.num_parents = 1,
3055			.flags = CLK_SET_RATE_PARENT,
3056			.ops = &clk_branch2_ops,
3057		},
3058	},
3059};
3060
3061static struct clk_branch gcc_nss_ppe_clk = {
3062	.halt_reg = 0x68190,
3063	.clkr = {
3064		.enable_reg = 0x68190,
3065		.enable_mask = BIT(0),
3066		.hw.init = &(struct clk_init_data){
3067			.name = "gcc_nss_ppe_clk",
3068			.parent_hws = (const struct clk_hw *[]){
3069					&nss_ppe_clk_src.clkr.hw },
3070			.num_parents = 1,
3071			.flags = CLK_SET_RATE_PARENT,
3072			.ops = &clk_branch2_ops,
3073		},
3074	},
3075};
3076
3077static struct clk_branch gcc_nss_ppe_ipe_clk = {
3078	.halt_reg = 0x68338,
3079	.clkr = {
3080		.enable_reg = 0x68338,
3081		.enable_mask = BIT(0),
3082		.hw.init = &(struct clk_init_data){
3083			.name = "gcc_nss_ppe_ipe_clk",
3084			.parent_hws = (const struct clk_hw *[]){
3085					&nss_ppe_clk_src.clkr.hw },
3086			.num_parents = 1,
3087			.flags = CLK_SET_RATE_PARENT,
3088			.ops = &clk_branch2_ops,
3089		},
3090	},
3091};
3092
3093static struct clk_branch gcc_nss_ptp_ref_clk = {
3094	.halt_reg = 0x6816C,
3095	.clkr = {
3096		.enable_reg = 0x6816C,
3097		.enable_mask = BIT(0),
3098		.hw.init = &(struct clk_init_data){
3099			.name = "gcc_nss_ptp_ref_clk",
3100			.parent_hws = (const struct clk_hw *[]){
3101					&nss_ppe_cdiv_clk_src.hw },
3102			.num_parents = 1,
3103			.flags = CLK_SET_RATE_PARENT,
3104			.ops = &clk_branch2_ops,
3105		},
3106	},
3107};
3108
3109static struct clk_branch gcc_nssnoc_ce_apb_clk = {
3110	.halt_reg = 0x6830C,
3111	.clkr = {
3112		.enable_reg = 0x6830C,
3113		.enable_mask = BIT(0),
3114		.hw.init = &(struct clk_init_data){
3115			.name = "gcc_nssnoc_ce_apb_clk",
3116			.parent_hws = (const struct clk_hw *[]){
3117					&nss_ce_clk_src.clkr.hw },
3118			.num_parents = 1,
3119			.flags = CLK_SET_RATE_PARENT,
3120			.ops = &clk_branch2_ops,
3121		},
3122	},
3123};
3124
3125static struct clk_branch gcc_nssnoc_ce_axi_clk = {
3126	.halt_reg = 0x68308,
3127	.clkr = {
3128		.enable_reg = 0x68308,
3129		.enable_mask = BIT(0),
3130		.hw.init = &(struct clk_init_data){
3131			.name = "gcc_nssnoc_ce_axi_clk",
3132			.parent_hws = (const struct clk_hw *[]){
3133					&nss_ce_clk_src.clkr.hw },
3134			.num_parents = 1,
3135			.flags = CLK_SET_RATE_PARENT,
3136			.ops = &clk_branch2_ops,
3137		},
3138	},
3139};
3140
3141static struct clk_branch gcc_nssnoc_crypto_clk = {
3142	.halt_reg = 0x68314,
3143	.clkr = {
3144		.enable_reg = 0x68314,
3145		.enable_mask = BIT(0),
3146		.hw.init = &(struct clk_init_data){
3147			.name = "gcc_nssnoc_crypto_clk",
3148			.parent_hws = (const struct clk_hw *[]){
3149					&nss_crypto_clk_src.clkr.hw },
3150			.num_parents = 1,
3151			.flags = CLK_SET_RATE_PARENT,
3152			.ops = &clk_branch2_ops,
3153		},
3154	},
3155};
3156
3157static struct clk_branch gcc_nssnoc_ppe_cfg_clk = {
3158	.halt_reg = 0x68304,
3159	.clkr = {
3160		.enable_reg = 0x68304,
3161		.enable_mask = BIT(0),
3162		.hw.init = &(struct clk_init_data){
3163			.name = "gcc_nssnoc_ppe_cfg_clk",
3164			.parent_hws = (const struct clk_hw *[]){
3165					&nss_ppe_clk_src.clkr.hw },
3166			.flags = CLK_SET_RATE_PARENT,
3167			.ops = &clk_branch2_ops,
3168		},
3169	},
3170};
3171
3172static struct clk_branch gcc_nssnoc_ppe_clk = {
3173	.halt_reg = 0x68300,
3174	.clkr = {
3175		.enable_reg = 0x68300,
3176		.enable_mask = BIT(0),
3177		.hw.init = &(struct clk_init_data){
3178			.name = "gcc_nssnoc_ppe_clk",
3179			.parent_hws = (const struct clk_hw *[]){
3180					&nss_ppe_clk_src.clkr.hw },
3181			.num_parents = 1,
3182			.flags = CLK_SET_RATE_PARENT,
3183			.ops = &clk_branch2_ops,
3184		},
3185	},
3186};
3187
3188static struct clk_branch gcc_nssnoc_qosgen_ref_clk = {
3189	.halt_reg = 0x68180,
3190	.clkr = {
3191		.enable_reg = 0x68180,
3192		.enable_mask = BIT(0),
3193		.hw.init = &(struct clk_init_data){
3194			.name = "gcc_nssnoc_qosgen_ref_clk",
3195			.parent_hws = (const struct clk_hw *[]){
3196					&gcc_xo_clk_src.clkr.hw },
3197			.num_parents = 1,
3198			.flags = CLK_SET_RATE_PARENT,
3199			.ops = &clk_branch2_ops,
3200		},
3201	},
3202};
3203
3204static struct clk_branch gcc_nssnoc_snoc_clk = {
3205	.halt_reg = 0x68188,
3206	.clkr = {
3207		.enable_reg = 0x68188,
3208		.enable_mask = BIT(0),
3209		.hw.init = &(struct clk_init_data){
3210			.name = "gcc_nssnoc_snoc_clk",
3211			.parent_hws = (const struct clk_hw *[]){
3212					&system_noc_bfdcd_clk_src.clkr.hw },
3213			.num_parents = 1,
3214			.flags = CLK_SET_RATE_PARENT,
3215			.ops = &clk_branch2_ops,
3216		},
3217	},
3218};
3219
3220static struct clk_branch gcc_nssnoc_timeout_ref_clk = {
3221	.halt_reg = 0x68184,
3222	.clkr = {
3223		.enable_reg = 0x68184,
3224		.enable_mask = BIT(0),
3225		.hw.init = &(struct clk_init_data){
3226			.name = "gcc_nssnoc_timeout_ref_clk",
3227			.parent_hws = (const struct clk_hw *[]){
3228					&gcc_xo_div4_clk_src.hw },
3229			.num_parents = 1,
3230			.flags = CLK_SET_RATE_PARENT,
3231			.ops = &clk_branch2_ops,
3232		},
3233	},
3234};
3235
3236static struct clk_branch gcc_nssnoc_ubi0_ahb_clk = {
3237	.halt_reg = 0x68270,
3238	.clkr = {
3239		.enable_reg = 0x68270,
3240		.enable_mask = BIT(0),
3241		.hw.init = &(struct clk_init_data){
3242			.name = "gcc_nssnoc_ubi0_ahb_clk",
3243			.parent_hws = (const struct clk_hw *[]){
3244					&nss_ce_clk_src.clkr.hw },
3245			.num_parents = 1,
3246			.flags = CLK_SET_RATE_PARENT,
3247			.ops = &clk_branch2_ops,
3248		},
3249	},
3250};
3251
3252static struct clk_branch gcc_port1_mac_clk = {
3253	.halt_reg = 0x68320,
3254	.clkr = {
3255		.enable_reg = 0x68320,
3256		.enable_mask = BIT(0),
3257		.hw.init = &(struct clk_init_data){
3258			.name = "gcc_port1_mac_clk",
3259			.parent_hws = (const struct clk_hw *[]){
3260					&nss_ppe_clk_src.clkr.hw },
3261			.num_parents = 1,
3262			.flags = CLK_SET_RATE_PARENT,
3263			.ops = &clk_branch2_ops,
3264		},
3265	},
3266};
3267
3268static struct clk_branch gcc_port2_mac_clk = {
3269	.halt_reg = 0x68324,
3270	.clkr = {
3271		.enable_reg = 0x68324,
3272		.enable_mask = BIT(0),
3273		.hw.init = &(struct clk_init_data){
3274			.name = "gcc_port2_mac_clk",
3275			.parent_hws = (const struct clk_hw *[]){
3276					&nss_ppe_clk_src.clkr.hw },
3277			.num_parents = 1,
3278			.flags = CLK_SET_RATE_PARENT,
3279			.ops = &clk_branch2_ops,
3280		},
3281	},
3282};
3283
3284static struct clk_branch gcc_port3_mac_clk = {
3285	.halt_reg = 0x68328,
3286	.clkr = {
3287		.enable_reg = 0x68328,
3288		.enable_mask = BIT(0),
3289		.hw.init = &(struct clk_init_data){
3290			.name = "gcc_port3_mac_clk",
3291			.parent_hws = (const struct clk_hw *[]){
3292					&nss_ppe_clk_src.clkr.hw },
3293			.num_parents = 1,
3294			.flags = CLK_SET_RATE_PARENT,
3295			.ops = &clk_branch2_ops,
3296		},
3297	},
3298};
3299
3300static struct clk_branch gcc_port4_mac_clk = {
3301	.halt_reg = 0x6832c,
3302	.clkr = {
3303		.enable_reg = 0x6832c,
3304		.enable_mask = BIT(0),
3305		.hw.init = &(struct clk_init_data){
3306			.name = "gcc_port4_mac_clk",
3307			.parent_hws = (const struct clk_hw *[]){
3308					&nss_ppe_clk_src.clkr.hw },
3309			.num_parents = 1,
3310			.flags = CLK_SET_RATE_PARENT,
3311			.ops = &clk_branch2_ops,
3312		},
3313	},
3314};
3315
3316static struct clk_branch gcc_port5_mac_clk = {
3317	.halt_reg = 0x68330,
3318	.clkr = {
3319		.enable_reg = 0x68330,
3320		.enable_mask = BIT(0),
3321		.hw.init = &(struct clk_init_data){
3322			.name = "gcc_port5_mac_clk",
3323			.parent_hws = (const struct clk_hw *[]){
3324					&nss_ppe_clk_src.clkr.hw },
3325			.num_parents = 1,
3326			.flags = CLK_SET_RATE_PARENT,
3327			.ops = &clk_branch2_ops,
3328		},
3329	},
3330};
3331
3332static struct clk_branch gcc_ubi0_ahb_clk = {
3333	.halt_reg = 0x6820C,
3334	.halt_check = BRANCH_HALT_DELAY,
3335	.clkr = {
3336		.enable_reg = 0x6820C,
3337		.enable_mask = BIT(0),
3338		.hw.init = &(struct clk_init_data){
3339			.name = "gcc_ubi0_ahb_clk",
3340			.parent_hws = (const struct clk_hw *[]){
3341					&nss_ce_clk_src.clkr.hw },
3342			.num_parents = 1,
3343			.flags = CLK_SET_RATE_PARENT,
3344			.ops = &clk_branch2_ops,
3345		},
3346	},
3347};
3348
3349static struct clk_branch gcc_ubi0_axi_clk = {
3350	.halt_reg = 0x68200,
3351	.halt_check = BRANCH_HALT_DELAY,
3352	.clkr = {
3353		.enable_reg = 0x68200,
3354		.enable_mask = BIT(0),
3355		.hw.init = &(struct clk_init_data){
3356			.name = "gcc_ubi0_axi_clk",
3357			.parent_hws = (const struct clk_hw *[]){
3358					&ubi32_mem_noc_bfdcd_clk_src.clkr.hw },
3359			.num_parents = 1,
3360			.flags = CLK_SET_RATE_PARENT,
3361			.ops = &clk_branch2_ops,
3362		},
3363	},
3364};
3365
3366static struct clk_branch gcc_ubi0_nc_axi_clk = {
3367	.halt_reg = 0x68204,
3368	.halt_check = BRANCH_HALT_DELAY,
3369	.clkr = {
3370		.enable_reg = 0x68204,
3371		.enable_mask = BIT(0),
3372		.hw.init = &(struct clk_init_data){
3373			.name = "gcc_ubi0_nc_axi_clk",
3374			.parent_hws = (const struct clk_hw *[]){
3375					&snoc_nssnoc_bfdcd_clk_src.clkr.hw },
3376			.num_parents = 1,
3377			.flags = CLK_SET_RATE_PARENT,
3378			.ops = &clk_branch2_ops,
3379		},
3380	},
3381};
3382
3383static struct clk_branch gcc_ubi0_core_clk = {
3384	.halt_reg = 0x68210,
3385	.halt_check = BRANCH_HALT_DELAY,
3386	.clkr = {
3387		.enable_reg = 0x68210,
3388		.enable_mask = BIT(0),
3389		.hw.init = &(struct clk_init_data){
3390			.name = "gcc_ubi0_core_clk",
3391			.parent_hws = (const struct clk_hw *[]){
3392					&nss_ubi0_div_clk_src.clkr.hw },
3393			.num_parents = 1,
3394			.flags = CLK_SET_RATE_PARENT,
3395			.ops = &clk_branch2_ops,
3396		},
3397	},
3398};
3399
3400static struct clk_branch gcc_pcie0_ahb_clk = {
3401	.halt_reg = 0x75010,
3402	.clkr = {
3403		.enable_reg = 0x75010,
3404		.enable_mask = BIT(0),
3405		.hw.init = &(struct clk_init_data){
3406			.name = "gcc_pcie0_ahb_clk",
3407			.parent_hws = (const struct clk_hw *[]){
3408					&pcnoc_bfdcd_clk_src.clkr.hw },
3409			.num_parents = 1,
3410			.flags = CLK_SET_RATE_PARENT,
3411			.ops = &clk_branch2_ops,
3412		},
3413	},
3414};
3415
3416static struct clk_branch gcc_pcie0_aux_clk = {
3417	.halt_reg = 0x75014,
3418	.clkr = {
3419		.enable_reg = 0x75014,
3420		.enable_mask = BIT(0),
3421		.hw.init = &(struct clk_init_data){
3422			.name = "gcc_pcie0_aux_clk",
3423			.parent_hws = (const struct clk_hw *[]){
3424					&pcie0_aux_clk_src.clkr.hw },
3425			.num_parents = 1,
3426			.flags = CLK_SET_RATE_PARENT,
3427			.ops = &clk_branch2_ops,
3428		},
3429	},
3430};
3431
3432static struct clk_branch gcc_pcie0_axi_m_clk = {
3433	.halt_reg = 0x75008,
3434	.clkr = {
3435		.enable_reg = 0x75008,
3436		.enable_mask = BIT(0),
3437		.hw.init = &(struct clk_init_data){
3438			.name = "gcc_pcie0_axi_m_clk",
3439			.parent_hws = (const struct clk_hw *[]){
3440					&pcie0_axi_clk_src.clkr.hw },
3441			.num_parents = 1,
3442			.flags = CLK_SET_RATE_PARENT,
3443			.ops = &clk_branch2_ops,
3444		},
3445	},
3446};
3447
3448static struct clk_branch gcc_pcie0_axi_s_clk = {
3449	.halt_reg = 0x7500c,
3450	.clkr = {
3451		.enable_reg = 0x7500c,
3452		.enable_mask = BIT(0),
3453		.hw.init = &(struct clk_init_data){
3454			.name = "gcc_pcie0_axi_s_clk",
3455			.parent_hws = (const struct clk_hw *[]){
3456					&pcie0_axi_clk_src.clkr.hw },
3457			.num_parents = 1,
3458			.flags = CLK_SET_RATE_PARENT,
3459			.ops = &clk_branch2_ops,
3460		},
3461	},
3462};
3463
3464static struct clk_branch gcc_sys_noc_pcie0_axi_clk = {
3465	.halt_reg = 0x26048,
3466	.clkr = {
3467		.enable_reg = 0x26048,
3468		.enable_mask = BIT(0),
3469		.hw.init = &(struct clk_init_data){
3470			.name = "gcc_sys_noc_pcie0_axi_clk",
3471			.parent_hws = (const struct clk_hw *[]){
3472					&pcie0_axi_clk_src.clkr.hw },
3473			.num_parents = 1,
3474			.flags = CLK_SET_RATE_PARENT,
3475			.ops = &clk_branch2_ops,
3476		},
3477	},
3478};
3479
3480static struct clk_branch gcc_pcie0_pipe_clk = {
3481	.halt_reg = 0x75018,
3482	.halt_check = BRANCH_HALT_DELAY,
3483	.clkr = {
3484		.enable_reg = 0x75018,
3485		.enable_mask = BIT(0),
3486		.hw.init = &(struct clk_init_data){
3487			.name = "gcc_pcie0_pipe_clk",
3488			.parent_hws = (const struct clk_hw *[]){
3489					&pcie0_pipe_clk_src.clkr.hw },
3490			.num_parents = 1,
3491			.flags = CLK_SET_RATE_PARENT,
3492			.ops = &clk_branch2_ops,
3493		},
3494	},
3495};
3496
3497static struct clk_branch gcc_prng_ahb_clk = {
3498	.halt_reg = 0x13004,
3499	.halt_check = BRANCH_HALT_VOTED,
3500	.clkr = {
3501		.enable_reg = 0x0b004,
3502		.enable_mask = BIT(8),
3503		.hw.init = &(struct clk_init_data){
3504			.name = "gcc_prng_ahb_clk",
3505			.parent_hws = (const struct clk_hw *[]){
3506					&pcnoc_bfdcd_clk_src.clkr.hw },
3507			.num_parents = 1,
3508			.flags = CLK_SET_RATE_PARENT,
3509			.ops = &clk_branch2_ops,
3510		},
3511	},
3512};
3513
3514static struct clk_branch gcc_qdss_dap_clk = {
3515	.halt_reg = 0x29084,
3516	.clkr = {
3517		.enable_reg = 0x29084,
3518		.enable_mask = BIT(0),
3519		.hw.init = &(struct clk_init_data){
3520			.name = "gcc_qdss_dap_clk",
3521			.parent_hws = (const struct clk_hw *[]){
3522					&qdss_dap_sync_clk_src.hw },
3523			.num_parents = 1,
3524			.flags = CLK_SET_RATE_PARENT,
3525			.ops = &clk_branch2_ops,
3526		},
3527	},
3528};
3529
3530static struct clk_branch gcc_qpic_ahb_clk = {
3531	.halt_reg = 0x57024,
3532	.clkr = {
3533		.enable_reg = 0x57024,
3534		.enable_mask = BIT(0),
3535		.hw.init = &(struct clk_init_data){
3536			.name = "gcc_qpic_ahb_clk",
3537			.parent_hws = (const struct clk_hw *[]){
3538					&pcnoc_bfdcd_clk_src.clkr.hw },
3539			.num_parents = 1,
3540			.flags = CLK_SET_RATE_PARENT,
3541			.ops = &clk_branch2_ops,
3542		},
3543	},
3544};
3545
3546static struct clk_branch gcc_qpic_clk = {
3547	.halt_reg = 0x57020,
3548	.clkr = {
3549		.enable_reg = 0x57020,
3550		.enable_mask = BIT(0),
3551		.hw.init = &(struct clk_init_data){
3552			.name = "gcc_qpic_clk",
3553			.parent_hws = (const struct clk_hw *[]){
3554					&pcnoc_bfdcd_clk_src.clkr.hw },
3555			.num_parents = 1,
3556			.flags = CLK_SET_RATE_PARENT,
3557			.ops = &clk_branch2_ops,
3558		},
3559	},
3560};
3561
3562static struct clk_branch gcc_sdcc1_ahb_clk = {
3563	.halt_reg = 0x4201c,
3564	.clkr = {
3565		.enable_reg = 0x4201c,
3566		.enable_mask = BIT(0),
3567		.hw.init = &(struct clk_init_data){
3568			.name = "gcc_sdcc1_ahb_clk",
3569			.parent_hws = (const struct clk_hw *[]){
3570					&pcnoc_bfdcd_clk_src.clkr.hw },
3571			.num_parents = 1,
3572			.flags = CLK_SET_RATE_PARENT,
3573			.ops = &clk_branch2_ops,
3574		},
3575	},
3576};
3577
3578static struct clk_branch gcc_sdcc1_apps_clk = {
3579	.halt_reg = 0x42018,
3580	.clkr = {
3581		.enable_reg = 0x42018,
3582		.enable_mask = BIT(0),
3583		.hw.init = &(struct clk_init_data){
3584			.name = "gcc_sdcc1_apps_clk",
3585			.parent_hws = (const struct clk_hw *[]){
3586					&sdcc1_apps_clk_src.clkr.hw },
3587			.num_parents = 1,
3588			.flags = CLK_SET_RATE_PARENT,
3589			.ops = &clk_branch2_ops,
3590		},
3591	},
3592};
3593
3594static struct clk_branch gcc_uniphy0_ahb_clk = {
3595	.halt_reg = 0x56008,
3596	.clkr = {
3597		.enable_reg = 0x56008,
3598		.enable_mask = BIT(0),
3599		.hw.init = &(struct clk_init_data){
3600			.name = "gcc_uniphy0_ahb_clk",
3601			.parent_hws = (const struct clk_hw *[]){
3602					&pcnoc_bfdcd_clk_src.clkr.hw },
3603			.num_parents = 1,
3604			.flags = CLK_SET_RATE_PARENT,
3605			.ops = &clk_branch2_ops,
3606		},
3607	},
3608};
3609
3610static struct clk_branch gcc_uniphy0_port1_rx_clk = {
3611	.halt_reg = 0x56010,
3612	.clkr = {
3613		.enable_reg = 0x56010,
3614		.enable_mask = BIT(0),
3615		.hw.init = &(struct clk_init_data){
3616			.name = "gcc_uniphy0_port1_rx_clk",
3617			.parent_hws = (const struct clk_hw *[]){
3618					&nss_port1_rx_div_clk_src.clkr.hw },
3619			.num_parents = 1,
3620			.flags = CLK_SET_RATE_PARENT,
3621			.ops = &clk_branch2_ops,
3622		},
3623	},
3624};
3625
3626static struct clk_branch gcc_uniphy0_port1_tx_clk = {
3627	.halt_reg = 0x56014,
3628	.clkr = {
3629		.enable_reg = 0x56014,
3630		.enable_mask = BIT(0),
3631		.hw.init = &(struct clk_init_data){
3632			.name = "gcc_uniphy0_port1_tx_clk",
3633			.parent_hws = (const struct clk_hw *[]){
3634					&nss_port1_tx_div_clk_src.clkr.hw },
3635			.num_parents = 1,
3636			.flags = CLK_SET_RATE_PARENT,
3637			.ops = &clk_branch2_ops,
3638		},
3639	},
3640};
3641
3642static struct clk_branch gcc_uniphy0_port2_rx_clk = {
3643	.halt_reg = 0x56018,
3644	.clkr = {
3645		.enable_reg = 0x56018,
3646		.enable_mask = BIT(0),
3647		.hw.init = &(struct clk_init_data){
3648			.name = "gcc_uniphy0_port2_rx_clk",
3649			.parent_hws = (const struct clk_hw *[]){
3650					&nss_port2_rx_div_clk_src.clkr.hw },
3651			.num_parents = 1,
3652			.flags = CLK_SET_RATE_PARENT,
3653			.ops = &clk_branch2_ops,
3654		},
3655	},
3656};
3657
3658static struct clk_branch gcc_uniphy0_port2_tx_clk = {
3659	.halt_reg = 0x5601c,
3660	.clkr = {
3661		.enable_reg = 0x5601c,
3662		.enable_mask = BIT(0),
3663		.hw.init = &(struct clk_init_data){
3664			.name = "gcc_uniphy0_port2_tx_clk",
3665			.parent_hws = (const struct clk_hw *[]){
3666					&nss_port2_tx_div_clk_src.clkr.hw },
3667			.num_parents = 1,
3668			.flags = CLK_SET_RATE_PARENT,
3669			.ops = &clk_branch2_ops,
3670		},
3671	},
3672};
3673
3674static struct clk_branch gcc_uniphy0_port3_rx_clk = {
3675	.halt_reg = 0x56020,
3676	.clkr = {
3677		.enable_reg = 0x56020,
3678		.enable_mask = BIT(0),
3679		.hw.init = &(struct clk_init_data){
3680			.name = "gcc_uniphy0_port3_rx_clk",
3681			.parent_hws = (const struct clk_hw *[]){
3682					&nss_port3_rx_div_clk_src.clkr.hw },
3683			.num_parents = 1,
3684			.flags = CLK_SET_RATE_PARENT,
3685			.ops = &clk_branch2_ops,
3686		},
3687	},
3688};
3689
3690static struct clk_branch gcc_uniphy0_port3_tx_clk = {
3691	.halt_reg = 0x56024,
3692	.clkr = {
3693		.enable_reg = 0x56024,
3694		.enable_mask = BIT(0),
3695		.hw.init = &(struct clk_init_data){
3696			.name = "gcc_uniphy0_port3_tx_clk",
3697			.parent_hws = (const struct clk_hw *[]){
3698					&nss_port3_tx_div_clk_src.clkr.hw },
3699			.num_parents = 1,
3700			.flags = CLK_SET_RATE_PARENT,
3701			.ops = &clk_branch2_ops,
3702		},
3703	},
3704};
3705
3706static struct clk_branch gcc_uniphy0_port4_rx_clk = {
3707	.halt_reg = 0x56028,
3708	.clkr = {
3709		.enable_reg = 0x56028,
3710		.enable_mask = BIT(0),
3711		.hw.init = &(struct clk_init_data){
3712			.name = "gcc_uniphy0_port4_rx_clk",
3713			.parent_hws = (const struct clk_hw *[]){
3714					&nss_port4_rx_div_clk_src.clkr.hw },
3715			.num_parents = 1,
3716			.flags = CLK_SET_RATE_PARENT,
3717			.ops = &clk_branch2_ops,
3718		},
3719	},
3720};
3721
3722static struct clk_branch gcc_uniphy0_port4_tx_clk = {
3723	.halt_reg = 0x5602c,
3724	.clkr = {
3725		.enable_reg = 0x5602c,
3726		.enable_mask = BIT(0),
3727		.hw.init = &(struct clk_init_data){
3728			.name = "gcc_uniphy0_port4_tx_clk",
3729			.parent_hws = (const struct clk_hw *[]){
3730					&nss_port4_tx_div_clk_src.clkr.hw },
3731			.num_parents = 1,
3732			.flags = CLK_SET_RATE_PARENT,
3733			.ops = &clk_branch2_ops,
3734		},
3735	},
3736};
3737
3738static struct clk_branch gcc_uniphy0_port5_rx_clk = {
3739	.halt_reg = 0x56030,
3740	.clkr = {
3741		.enable_reg = 0x56030,
3742		.enable_mask = BIT(0),
3743		.hw.init = &(struct clk_init_data){
3744			.name = "gcc_uniphy0_port5_rx_clk",
3745			.parent_hws = (const struct clk_hw *[]){
3746					&nss_port5_rx_div_clk_src.clkr.hw },
3747			.num_parents = 1,
3748			.flags = CLK_SET_RATE_PARENT,
3749			.ops = &clk_branch2_ops,
3750		},
3751	},
3752};
3753
3754static struct clk_branch gcc_uniphy0_port5_tx_clk = {
3755	.halt_reg = 0x56034,
3756	.clkr = {
3757		.enable_reg = 0x56034,
3758		.enable_mask = BIT(0),
3759		.hw.init = &(struct clk_init_data){
3760			.name = "gcc_uniphy0_port5_tx_clk",
3761			.parent_hws = (const struct clk_hw *[]){
3762					&nss_port5_tx_div_clk_src.clkr.hw },
3763			.num_parents = 1,
3764			.flags = CLK_SET_RATE_PARENT,
3765			.ops = &clk_branch2_ops,
3766		},
3767	},
3768};
3769
3770static struct clk_branch gcc_uniphy0_sys_clk = {
3771	.halt_reg = 0x5600C,
3772	.clkr = {
3773		.enable_reg = 0x5600C,
3774		.enable_mask = BIT(0),
3775		.hw.init = &(struct clk_init_data){
3776			.name = "gcc_uniphy0_sys_clk",
3777			.parent_hws = (const struct clk_hw *[]){
3778					&gcc_xo_clk_src.clkr.hw },
3779			.num_parents = 1,
3780			.flags = CLK_SET_RATE_PARENT,
3781			.ops = &clk_branch2_ops,
3782		},
3783	},
3784};
3785
3786static struct clk_branch gcc_uniphy1_ahb_clk = {
3787	.halt_reg = 0x56108,
3788	.clkr = {
3789		.enable_reg = 0x56108,
3790		.enable_mask = BIT(0),
3791		.hw.init = &(struct clk_init_data){
3792			.name = "gcc_uniphy1_ahb_clk",
3793			.parent_hws = (const struct clk_hw *[]){
3794					&pcnoc_bfdcd_clk_src.clkr.hw },
3795			.num_parents = 1,
3796			.flags = CLK_SET_RATE_PARENT,
3797			.ops = &clk_branch2_ops,
3798		},
3799	},
3800};
3801
3802static struct clk_branch gcc_uniphy1_port5_rx_clk = {
3803	.halt_reg = 0x56110,
3804	.clkr = {
3805		.enable_reg = 0x56110,
3806		.enable_mask = BIT(0),
3807		.hw.init = &(struct clk_init_data){
3808			.name = "gcc_uniphy1_port5_rx_clk",
3809			.parent_hws = (const struct clk_hw *[]){
3810					&nss_port5_rx_div_clk_src.clkr.hw },
3811			.num_parents = 1,
3812			.flags = CLK_SET_RATE_PARENT,
3813			.ops = &clk_branch2_ops,
3814		},
3815	},
3816};
3817
3818static struct clk_branch gcc_uniphy1_port5_tx_clk = {
3819	.halt_reg = 0x56114,
3820	.clkr = {
3821		.enable_reg = 0x56114,
3822		.enable_mask = BIT(0),
3823		.hw.init = &(struct clk_init_data){
3824			.name = "gcc_uniphy1_port5_tx_clk",
3825			.parent_hws = (const struct clk_hw *[]){
3826					&nss_port5_tx_div_clk_src.clkr.hw },
3827			.num_parents = 1,
3828			.flags = CLK_SET_RATE_PARENT,
3829			.ops = &clk_branch2_ops,
3830		},
3831	},
3832};
3833
3834static struct clk_branch gcc_uniphy1_sys_clk = {
3835	.halt_reg = 0x5610C,
3836	.clkr = {
3837		.enable_reg = 0x5610C,
3838		.enable_mask = BIT(0),
3839		.hw.init = &(struct clk_init_data){
3840			.name = "gcc_uniphy1_sys_clk",
3841			.parent_hws = (const struct clk_hw *[]){
3842					&gcc_xo_clk_src.clkr.hw },
3843			.num_parents = 1,
3844			.flags = CLK_SET_RATE_PARENT,
3845			.ops = &clk_branch2_ops,
3846		},
3847	},
3848};
3849
3850static struct clk_branch gcc_usb0_aux_clk = {
3851	.halt_reg = 0x3e044,
3852	.clkr = {
3853		.enable_reg = 0x3e044,
3854		.enable_mask = BIT(0),
3855		.hw.init = &(struct clk_init_data){
3856			.name = "gcc_usb0_aux_clk",
3857			.parent_hws = (const struct clk_hw *[]){
3858					&usb0_aux_clk_src.clkr.hw },
3859			.num_parents = 1,
3860			.flags = CLK_SET_RATE_PARENT,
3861			.ops = &clk_branch2_ops,
3862		},
3863	},
3864};
3865
3866static struct clk_branch gcc_usb0_master_clk = {
3867	.halt_reg = 0x3e000,
3868	.clkr = {
3869		.enable_reg = 0x3e000,
3870		.enable_mask = BIT(0),
3871		.hw.init = &(struct clk_init_data){
3872			.name = "gcc_usb0_master_clk",
3873			.parent_hws = (const struct clk_hw *[]){
3874					&usb0_master_clk_src.clkr.hw },
3875			.num_parents = 1,
3876			.flags = CLK_SET_RATE_PARENT,
3877			.ops = &clk_branch2_ops,
3878		},
3879	},
3880};
3881
3882static struct clk_branch gcc_snoc_bus_timeout2_ahb_clk = {
3883	.halt_reg = 0x47014,
3884	.clkr = {
3885		.enable_reg = 0x47014,
3886		.enable_mask = BIT(0),
3887		.hw.init = &(struct clk_init_data){
3888			.name = "gcc_snoc_bus_timeout2_ahb_clk",
3889			.parent_hws = (const struct clk_hw *[]){
3890					&usb0_master_clk_src.clkr.hw },
3891			.num_parents = 1,
3892			.flags = CLK_SET_RATE_PARENT,
3893			.ops = &clk_branch2_ops,
3894		},
3895	},
3896};
3897
3898static struct clk_rcg2 pcie0_rchng_clk_src = {
3899	.cmd_rcgr = 0x75070,
3900	.freq_tbl = ftbl_pcie_rchng_clk_src,
3901	.hid_width = 5,
3902	.parent_map = gcc_xo_gpll0_map,
3903	.clkr.hw.init = &(struct clk_init_data){
3904		.name = "pcie0_rchng_clk_src",
3905		.parent_data = gcc_xo_gpll0,
3906		.num_parents = 2,
3907		.ops = &clk_rcg2_ops,
3908	},
3909};
3910
3911static struct clk_branch gcc_pcie0_rchng_clk = {
3912	.halt_reg = 0x75070,
3913	.clkr = {
3914		.enable_reg = 0x75070,
3915		.enable_mask = BIT(1),
3916		.hw.init = &(struct clk_init_data){
3917			.name = "gcc_pcie0_rchng_clk",
3918			.parent_hws = (const struct clk_hw *[]){
3919					&pcie0_rchng_clk_src.clkr.hw },
3920			.num_parents = 1,
3921			.flags = CLK_SET_RATE_PARENT,
3922			.ops = &clk_branch2_ops,
3923		},
3924	},
3925};
3926
3927static struct clk_branch gcc_pcie0_axi_s_bridge_clk = {
3928	.halt_reg = 0x75048,
3929	.clkr = {
3930		.enable_reg = 0x75048,
3931		.enable_mask = BIT(0),
3932		.hw.init = &(struct clk_init_data){
3933			.name = "gcc_pcie0_axi_s_bridge_clk",
3934			.parent_hws = (const struct clk_hw *[]){
3935					&pcie0_axi_clk_src.clkr.hw },
3936			.num_parents = 1,
3937			.flags = CLK_SET_RATE_PARENT,
3938			.ops = &clk_branch2_ops,
3939		},
3940	},
3941};
3942
3943static struct clk_branch gcc_sys_noc_usb0_axi_clk = {
3944	.halt_reg = 0x26040,
3945	.clkr = {
3946		.enable_reg = 0x26040,
3947		.enable_mask = BIT(0),
3948		.hw.init = &(struct clk_init_data){
3949			.name = "gcc_sys_noc_usb0_axi_clk",
3950			.parent_hws = (const struct clk_hw *[]){
3951					&usb0_master_clk_src.clkr.hw },
3952			.num_parents = 1,
3953			.flags = CLK_SET_RATE_PARENT,
3954			.ops = &clk_branch2_ops,
3955		},
3956	},
3957};
3958
3959static struct clk_branch gcc_usb0_mock_utmi_clk = {
3960	.halt_reg = 0x3e008,
3961	.clkr = {
3962		.enable_reg = 0x3e008,
3963		.enable_mask = BIT(0),
3964		.hw.init = &(struct clk_init_data){
3965			.name = "gcc_usb0_mock_utmi_clk",
3966			.parent_hws = (const struct clk_hw *[]){
3967					&usb0_mock_utmi_clk_src.clkr.hw },
3968			.num_parents = 1,
3969			.flags = CLK_SET_RATE_PARENT,
3970			.ops = &clk_branch2_ops,
3971		},
3972	},
3973};
3974
3975static struct clk_branch gcc_usb0_phy_cfg_ahb_clk = {
3976	.halt_reg = 0x3e080,
3977	.clkr = {
3978		.enable_reg = 0x3e080,
3979		.enable_mask = BIT(0),
3980		.hw.init = &(struct clk_init_data){
3981			.name = "gcc_usb0_phy_cfg_ahb_clk",
3982			.parent_hws = (const struct clk_hw *[]){
3983					&pcnoc_bfdcd_clk_src.clkr.hw },
3984			.num_parents = 1,
3985			.flags = CLK_SET_RATE_PARENT,
3986			.ops = &clk_branch2_ops,
3987		},
3988	},
3989};
3990
3991static struct clk_branch gcc_usb0_pipe_clk = {
3992	.halt_reg = 0x3e040,
3993	.halt_check = BRANCH_HALT_DELAY,
3994	.clkr = {
3995		.enable_reg = 0x3e040,
3996		.enable_mask = BIT(0),
3997		.hw.init = &(struct clk_init_data){
3998			.name = "gcc_usb0_pipe_clk",
3999			.parent_hws = (const struct clk_hw *[]){
4000					&usb0_pipe_clk_src.clkr.hw },
4001			.num_parents = 1,
4002			.flags = CLK_SET_RATE_PARENT,
4003			.ops = &clk_branch2_ops,
4004		},
4005	},
4006};
4007
4008static struct clk_branch gcc_usb0_sleep_clk = {
4009	.halt_reg = 0x3e004,
4010	.clkr = {
4011		.enable_reg = 0x3e004,
4012		.enable_mask = BIT(0),
4013		.hw.init = &(struct clk_init_data){
4014			.name = "gcc_usb0_sleep_clk",
4015			.parent_hws = (const struct clk_hw *[]){
4016					&gcc_sleep_clk_src.clkr.hw },
4017			.num_parents = 1,
4018			.flags = CLK_SET_RATE_PARENT,
4019			.ops = &clk_branch2_ops,
4020		},
4021	},
4022};
4023
4024static struct clk_branch gcc_usb1_master_clk = {
4025	.halt_reg = 0x3f000,
4026	.clkr = {
4027		.enable_reg = 0x3f000,
4028		.enable_mask = BIT(0),
4029		.hw.init = &(struct clk_init_data){
4030			.name = "gcc_usb1_master_clk",
4031			.parent_hws = (const struct clk_hw *[]){
4032					&pcnoc_bfdcd_clk_src.clkr.hw },
4033			.num_parents = 1,
4034			.flags = CLK_SET_RATE_PARENT,
4035			.ops = &clk_branch2_ops,
4036		},
4037	},
4038};
4039
4040static struct clk_branch gcc_usb1_mock_utmi_clk = {
4041	.halt_reg = 0x3f008,
4042	.clkr = {
4043		.enable_reg = 0x3f008,
4044		.enable_mask = BIT(0),
4045		.hw.init = &(struct clk_init_data){
4046			.name = "gcc_usb1_mock_utmi_clk",
4047			.parent_hws = (const struct clk_hw *[]){
4048					&usb1_mock_utmi_clk_src.clkr.hw },
4049			.num_parents = 1,
4050			.flags = CLK_SET_RATE_PARENT,
4051			.ops = &clk_branch2_ops,
4052		},
4053	},
4054};
4055
4056static struct clk_branch gcc_usb1_phy_cfg_ahb_clk = {
4057	.halt_reg = 0x3f080,
4058	.clkr = {
4059		.enable_reg = 0x3f080,
4060		.enable_mask = BIT(0),
4061		.hw.init = &(struct clk_init_data){
4062			.name = "gcc_usb1_phy_cfg_ahb_clk",
4063			.parent_hws = (const struct clk_hw *[]){
4064					&pcnoc_bfdcd_clk_src.clkr.hw },
4065			.num_parents = 1,
4066			.flags = CLK_SET_RATE_PARENT,
4067			.ops = &clk_branch2_ops,
4068		},
4069	},
4070};
4071
4072static struct clk_branch gcc_usb1_sleep_clk = {
4073	.halt_reg = 0x3f004,
4074	.clkr = {
4075		.enable_reg = 0x3f004,
4076		.enable_mask = BIT(0),
4077		.hw.init = &(struct clk_init_data){
4078			.name = "gcc_usb1_sleep_clk",
4079			.parent_hws = (const struct clk_hw *[]){
4080					&gcc_sleep_clk_src.clkr.hw },
4081			.num_parents = 1,
4082			.flags = CLK_SET_RATE_PARENT,
4083			.ops = &clk_branch2_ops,
4084		},
4085	},
4086};
4087
4088static struct clk_branch gcc_cmn_12gpll_ahb_clk = {
4089	.halt_reg = 0x56308,
4090	.clkr = {
4091		.enable_reg = 0x56308,
4092		.enable_mask = BIT(0),
4093		.hw.init = &(struct clk_init_data){
4094			.name = "gcc_cmn_12gpll_ahb_clk",
4095			.parent_hws = (const struct clk_hw *[]){
4096					&pcnoc_bfdcd_clk_src.clkr.hw },
4097			.num_parents = 1,
4098			.flags = CLK_SET_RATE_PARENT,
4099			.ops = &clk_branch2_ops,
4100		},
4101	},
4102};
4103
4104static struct clk_branch gcc_cmn_12gpll_sys_clk = {
4105	.halt_reg = 0x5630c,
4106	.clkr = {
4107		.enable_reg = 0x5630c,
4108		.enable_mask = BIT(0),
4109		.hw.init = &(struct clk_init_data){
4110			.name = "gcc_cmn_12gpll_sys_clk",
4111			.parent_hws = (const struct clk_hw *[]){
4112					&gcc_xo_clk_src.clkr.hw },
4113			.num_parents = 1,
4114			.flags = CLK_SET_RATE_PARENT,
4115			.ops = &clk_branch2_ops,
4116		},
4117	},
4118};
4119
4120static struct clk_branch gcc_sdcc1_ice_core_clk = {
4121	.halt_reg = 0x5d014,
4122	.clkr = {
4123		.enable_reg = 0x5d014,
4124		.enable_mask = BIT(0),
4125		.hw.init = &(struct clk_init_data){
4126			.name = "gcc_sdcc1_ice_core_clk",
4127			.parent_hws = (const struct clk_hw *[]){
4128					&sdcc1_ice_core_clk_src.clkr.hw },
4129			.num_parents = 1,
4130			.flags = CLK_SET_RATE_PARENT,
4131			.ops = &clk_branch2_ops,
4132		},
4133	},
4134};
4135
4136static struct clk_branch gcc_dcc_clk = {
4137	.halt_reg = 0x77004,
4138	.clkr = {
4139		.enable_reg = 0x77004,
4140		.enable_mask = BIT(0),
4141		.hw.init = &(struct clk_init_data){
4142			.name = "gcc_dcc_clk",
4143			.parent_hws = (const struct clk_hw *[]){
4144					&pcnoc_bfdcd_clk_src.clkr.hw },
4145			.num_parents = 1,
4146			.flags = CLK_SET_RATE_PARENT,
4147			.ops = &clk_branch2_ops,
4148		},
4149	},
4150};
4151
4152static const struct alpha_pll_config ubi32_pll_config = {
4153	.l = 0x3e,
4154	.alpha = 0x57,
4155	.config_ctl_val = 0x240d6aa8,
4156	.config_ctl_hi_val = 0x3c2,
4157	.main_output_mask = BIT(0),
4158	.aux_output_mask = BIT(1),
4159	.pre_div_val = 0x0,
4160	.pre_div_mask = BIT(12),
4161	.post_div_val = 0x0,
4162	.post_div_mask = GENMASK(9, 8),
4163};
4164
4165static const struct alpha_pll_config nss_crypto_pll_config = {
4166	.l = 0x32,
4167	.alpha = 0x0,
4168	.alpha_hi = 0x0,
4169	.config_ctl_val = 0x4001055b,
4170	.main_output_mask = BIT(0),
4171	.pre_div_val = 0x0,
4172	.pre_div_mask = GENMASK(14, 12),
4173	.post_div_val = 0x1 << 8,
4174	.post_div_mask = GENMASK(11, 8),
4175	.vco_mask = GENMASK(21, 20),
4176	.vco_val = 0x0,
4177	.alpha_en_mask = BIT(24),
4178};
4179
4180static struct clk_hw *gcc_ipq6018_hws[] = {
4181	&gpll0_out_main_div2.hw,
4182	&gcc_xo_div4_clk_src.hw,
4183	&nss_ppe_cdiv_clk_src.hw,
4184	&gpll6_out_main_div2.hw,
4185	&qdss_dap_sync_clk_src.hw,
4186	&qdss_tsctr_div2_clk_src.hw,
4187};
4188
4189static struct clk_regmap *gcc_ipq6018_clks[] = {
4190	[GPLL0_MAIN] = &gpll0_main.clkr,
4191	[GPLL0] = &gpll0.clkr,
4192	[UBI32_PLL_MAIN] = &ubi32_pll_main.clkr,
4193	[UBI32_PLL] = &ubi32_pll.clkr,
4194	[GPLL6_MAIN] = &gpll6_main.clkr,
4195	[GPLL6] = &gpll6.clkr,
4196	[GPLL4_MAIN] = &gpll4_main.clkr,
4197	[GPLL4] = &gpll4.clkr,
4198	[PCNOC_BFDCD_CLK_SRC] = &pcnoc_bfdcd_clk_src.clkr,
4199	[GPLL2_MAIN] = &gpll2_main.clkr,
4200	[GPLL2] = &gpll2.clkr,
4201	[NSS_CRYPTO_PLL_MAIN] = &nss_crypto_pll_main.clkr,
4202	[NSS_CRYPTO_PLL] = &nss_crypto_pll.clkr,
4203	[QDSS_TSCTR_CLK_SRC] = &qdss_tsctr_clk_src.clkr,
4204	[QDSS_AT_CLK_SRC] = &qdss_at_clk_src.clkr,
4205	[NSS_PPE_CLK_SRC] = &nss_ppe_clk_src.clkr,
4206	[GCC_XO_CLK_SRC] = &gcc_xo_clk_src.clkr,
4207	[SYSTEM_NOC_BFDCD_CLK_SRC] = &system_noc_bfdcd_clk_src.clkr,
4208	[SNOC_NSSNOC_BFDCD_CLK_SRC] = &snoc_nssnoc_bfdcd_clk_src.clkr,
4209	[NSS_CE_CLK_SRC] = &nss_ce_clk_src.clkr,
4210	[GCC_SLEEP_CLK_SRC] = &gcc_sleep_clk_src.clkr,
4211	[APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
4212	[NSS_PORT5_RX_CLK_SRC] = &nss_port5_rx_clk_src.clkr,
4213	[NSS_PORT5_TX_CLK_SRC] = &nss_port5_tx_clk_src.clkr,
4214	[UBI32_MEM_NOC_BFDCD_CLK_SRC] = &ubi32_mem_noc_bfdcd_clk_src.clkr,
4215	[PCIE0_AXI_CLK_SRC] = &pcie0_axi_clk_src.clkr,
4216	[USB0_MASTER_CLK_SRC] = &usb0_master_clk_src.clkr,
4217	[APSS_AHB_POSTDIV_CLK_SRC] = &apss_ahb_postdiv_clk_src.clkr,
4218	[NSS_PORT1_RX_CLK_SRC] = &nss_port1_rx_clk_src.clkr,
4219	[NSS_PORT1_TX_CLK_SRC] = &nss_port1_tx_clk_src.clkr,
4220	[NSS_PORT2_RX_CLK_SRC] = &nss_port2_rx_clk_src.clkr,
4221	[NSS_PORT2_TX_CLK_SRC] = &nss_port2_tx_clk_src.clkr,
4222	[NSS_PORT3_RX_CLK_SRC] = &nss_port3_rx_clk_src.clkr,
4223	[NSS_PORT3_TX_CLK_SRC] = &nss_port3_tx_clk_src.clkr,
4224	[NSS_PORT4_RX_CLK_SRC] = &nss_port4_rx_clk_src.clkr,
4225	[NSS_PORT4_TX_CLK_SRC] = &nss_port4_tx_clk_src.clkr,
4226	[NSS_PORT5_RX_DIV_CLK_SRC] = &nss_port5_rx_div_clk_src.clkr,
4227	[NSS_PORT5_TX_DIV_CLK_SRC] = &nss_port5_tx_div_clk_src.clkr,
4228	[APSS_AXI_CLK_SRC] = &apss_axi_clk_src.clkr,
4229	[NSS_CRYPTO_CLK_SRC] = &nss_crypto_clk_src.clkr,
4230	[NSS_PORT1_RX_DIV_CLK_SRC] = &nss_port1_rx_div_clk_src.clkr,
4231	[NSS_PORT1_TX_DIV_CLK_SRC] = &nss_port1_tx_div_clk_src.clkr,
4232	[NSS_PORT2_RX_DIV_CLK_SRC] = &nss_port2_rx_div_clk_src.clkr,
4233	[NSS_PORT2_TX_DIV_CLK_SRC] = &nss_port2_tx_div_clk_src.clkr,
4234	[NSS_PORT3_RX_DIV_CLK_SRC] = &nss_port3_rx_div_clk_src.clkr,
4235	[NSS_PORT3_TX_DIV_CLK_SRC] = &nss_port3_tx_div_clk_src.clkr,
4236	[NSS_PORT4_RX_DIV_CLK_SRC] = &nss_port4_rx_div_clk_src.clkr,
4237	[NSS_PORT4_TX_DIV_CLK_SRC] = &nss_port4_tx_div_clk_src.clkr,
4238	[NSS_UBI0_CLK_SRC] = &nss_ubi0_clk_src.clkr,
4239	[ADSS_PWM_CLK_SRC] = &adss_pwm_clk_src.clkr,
4240	[BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
4241	[BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
4242	[BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
4243	[BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
4244	[BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
4245	[BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
4246	[BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
4247	[BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
4248	[BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
4249	[BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
4250	[BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
4251	[BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
4252	[BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
4253	[BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
4254	[BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
4255	[BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
4256	[BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
4257	[BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
4258	[CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
4259	[GP1_CLK_SRC] = &gp1_clk_src.clkr,
4260	[GP2_CLK_SRC] = &gp2_clk_src.clkr,
4261	[GP3_CLK_SRC] = &gp3_clk_src.clkr,
4262	[NSS_UBI0_DIV_CLK_SRC] = &nss_ubi0_div_clk_src.clkr,
4263	[PCIE0_AUX_CLK_SRC] = &pcie0_aux_clk_src.clkr,
4264	[PCIE0_PIPE_CLK_SRC] = &pcie0_pipe_clk_src.clkr,
4265	[SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
4266	[USB0_AUX_CLK_SRC] = &usb0_aux_clk_src.clkr,
4267	[USB0_MOCK_UTMI_CLK_SRC] = &usb0_mock_utmi_clk_src.clkr,
4268	[USB0_PIPE_CLK_SRC] = &usb0_pipe_clk_src.clkr,
4269	[USB1_MOCK_UTMI_CLK_SRC] = &usb1_mock_utmi_clk_src.clkr,
4270	[GCC_ADSS_PWM_CLK] = &gcc_adss_pwm_clk.clkr,
4271	[GCC_APSS_AHB_CLK] = &gcc_apss_ahb_clk.clkr,
4272	[GCC_APSS_AXI_CLK] = &gcc_apss_axi_clk.clkr,
4273	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
4274	[GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
4275	[GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
4276	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
4277	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
4278	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
4279	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
4280	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
4281	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
4282	[GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
4283	[GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
4284	[GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
4285	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
4286	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
4287	[GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
4288	[GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
4289	[GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
4290	[GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
4291	[GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
4292	[GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
4293	[GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
4294	[GCC_XO_CLK] = &gcc_xo_clk.clkr,
4295	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
4296	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
4297	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
4298	[GCC_MDIO_AHB_CLK] = &gcc_mdio_ahb_clk.clkr,
4299	[GCC_CRYPTO_PPE_CLK] = &gcc_crypto_ppe_clk.clkr,
4300	[GCC_NSS_CE_APB_CLK] = &gcc_nss_ce_apb_clk.clkr,
4301	[GCC_NSS_CE_AXI_CLK] = &gcc_nss_ce_axi_clk.clkr,
4302	[GCC_NSS_CFG_CLK] = &gcc_nss_cfg_clk.clkr,
4303	[GCC_NSS_CRYPTO_CLK] = &gcc_nss_crypto_clk.clkr,
4304	[GCC_NSS_CSR_CLK] = &gcc_nss_csr_clk.clkr,
4305	[GCC_NSS_EDMA_CFG_CLK] = &gcc_nss_edma_cfg_clk.clkr,
4306	[GCC_NSS_EDMA_CLK] = &gcc_nss_edma_clk.clkr,
4307	[GCC_NSS_NOC_CLK] = &gcc_nss_noc_clk.clkr,
4308	[GCC_UBI0_UTCM_CLK] = &gcc_ubi0_utcm_clk.clkr,
4309	[GCC_SNOC_NSSNOC_CLK] = &gcc_snoc_nssnoc_clk.clkr,
4310	[GCC_NSS_PORT1_RX_CLK] = &gcc_nss_port1_rx_clk.clkr,
4311	[GCC_NSS_PORT1_TX_CLK] = &gcc_nss_port1_tx_clk.clkr,
4312	[GCC_NSS_PORT2_RX_CLK] = &gcc_nss_port2_rx_clk.clkr,
4313	[GCC_NSS_PORT2_TX_CLK] = &gcc_nss_port2_tx_clk.clkr,
4314	[GCC_NSS_PORT3_RX_CLK] = &gcc_nss_port3_rx_clk.clkr,
4315	[GCC_NSS_PORT3_TX_CLK] = &gcc_nss_port3_tx_clk.clkr,
4316	[GCC_NSS_PORT4_RX_CLK] = &gcc_nss_port4_rx_clk.clkr,
4317	[GCC_NSS_PORT4_TX_CLK] = &gcc_nss_port4_tx_clk.clkr,
4318	[GCC_NSS_PORT5_RX_CLK] = &gcc_nss_port5_rx_clk.clkr,
4319	[GCC_NSS_PORT5_TX_CLK] = &gcc_nss_port5_tx_clk.clkr,
4320	[GCC_NSS_PPE_CFG_CLK] = &gcc_nss_ppe_cfg_clk.clkr,
4321	[GCC_NSS_PPE_CLK] = &gcc_nss_ppe_clk.clkr,
4322	[GCC_NSS_PPE_IPE_CLK] = &gcc_nss_ppe_ipe_clk.clkr,
4323	[GCC_NSS_PTP_REF_CLK] = &gcc_nss_ptp_ref_clk.clkr,
4324	[GCC_NSSNOC_CE_APB_CLK] = &gcc_nssnoc_ce_apb_clk.clkr,
4325	[GCC_NSSNOC_CE_AXI_CLK] = &gcc_nssnoc_ce_axi_clk.clkr,
4326	[GCC_NSSNOC_CRYPTO_CLK] = &gcc_nssnoc_crypto_clk.clkr,
4327	[GCC_NSSNOC_PPE_CFG_CLK] = &gcc_nssnoc_ppe_cfg_clk.clkr,
4328	[GCC_NSSNOC_PPE_CLK] = &gcc_nssnoc_ppe_clk.clkr,
4329	[GCC_NSSNOC_QOSGEN_REF_CLK] = &gcc_nssnoc_qosgen_ref_clk.clkr,
4330	[GCC_NSSNOC_SNOC_CLK] = &gcc_nssnoc_snoc_clk.clkr,
4331	[GCC_NSSNOC_TIMEOUT_REF_CLK] = &gcc_nssnoc_timeout_ref_clk.clkr,
4332	[GCC_NSSNOC_UBI0_AHB_CLK] = &gcc_nssnoc_ubi0_ahb_clk.clkr,
4333	[GCC_PORT1_MAC_CLK] = &gcc_port1_mac_clk.clkr,
4334	[GCC_PORT2_MAC_CLK] = &gcc_port2_mac_clk.clkr,
4335	[GCC_PORT3_MAC_CLK] = &gcc_port3_mac_clk.clkr,
4336	[GCC_PORT4_MAC_CLK] = &gcc_port4_mac_clk.clkr,
4337	[GCC_PORT5_MAC_CLK] = &gcc_port5_mac_clk.clkr,
4338	[GCC_UBI0_AHB_CLK] = &gcc_ubi0_ahb_clk.clkr,
4339	[GCC_UBI0_AXI_CLK] = &gcc_ubi0_axi_clk.clkr,
4340	[GCC_UBI0_NC_AXI_CLK] = &gcc_ubi0_nc_axi_clk.clkr,
4341	[GCC_UBI0_CORE_CLK] = &gcc_ubi0_core_clk.clkr,
4342	[GCC_PCIE0_AHB_CLK] = &gcc_pcie0_ahb_clk.clkr,
4343	[GCC_PCIE0_AUX_CLK] = &gcc_pcie0_aux_clk.clkr,
4344	[GCC_PCIE0_AXI_M_CLK] = &gcc_pcie0_axi_m_clk.clkr,
4345	[GCC_PCIE0_AXI_S_CLK] = &gcc_pcie0_axi_s_clk.clkr,
4346	[GCC_SYS_NOC_PCIE0_AXI_CLK] = &gcc_sys_noc_pcie0_axi_clk.clkr,
4347	[GCC_PCIE0_PIPE_CLK] = &gcc_pcie0_pipe_clk.clkr,
4348	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
4349	[GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr,
4350	[GCC_QPIC_AHB_CLK] = &gcc_qpic_ahb_clk.clkr,
4351	[GCC_QPIC_CLK] = &gcc_qpic_clk.clkr,
4352	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
4353	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
4354	[GCC_UNIPHY0_AHB_CLK] = &gcc_uniphy0_ahb_clk.clkr,
4355	[GCC_UNIPHY0_PORT1_RX_CLK] = &gcc_uniphy0_port1_rx_clk.clkr,
4356	[GCC_UNIPHY0_PORT1_TX_CLK] = &gcc_uniphy0_port1_tx_clk.clkr,
4357	[GCC_UNIPHY0_PORT2_RX_CLK] = &gcc_uniphy0_port2_rx_clk.clkr,
4358	[GCC_UNIPHY0_PORT2_TX_CLK] = &gcc_uniphy0_port2_tx_clk.clkr,
4359	[GCC_UNIPHY0_PORT3_RX_CLK] = &gcc_uniphy0_port3_rx_clk.clkr,
4360	[GCC_UNIPHY0_PORT3_TX_CLK] = &gcc_uniphy0_port3_tx_clk.clkr,
4361	[GCC_UNIPHY0_PORT4_RX_CLK] = &gcc_uniphy0_port4_rx_clk.clkr,
4362	[GCC_UNIPHY0_PORT4_TX_CLK] = &gcc_uniphy0_port4_tx_clk.clkr,
4363	[GCC_UNIPHY0_PORT5_RX_CLK] = &gcc_uniphy0_port5_rx_clk.clkr,
4364	[GCC_UNIPHY0_PORT5_TX_CLK] = &gcc_uniphy0_port5_tx_clk.clkr,
4365	[GCC_UNIPHY0_SYS_CLK] = &gcc_uniphy0_sys_clk.clkr,
4366	[GCC_UNIPHY1_AHB_CLK] = &gcc_uniphy1_ahb_clk.clkr,
4367	[GCC_UNIPHY1_PORT5_RX_CLK] = &gcc_uniphy1_port5_rx_clk.clkr,
4368	[GCC_UNIPHY1_PORT5_TX_CLK] = &gcc_uniphy1_port5_tx_clk.clkr,
4369	[GCC_UNIPHY1_SYS_CLK] = &gcc_uniphy1_sys_clk.clkr,
4370	[GCC_USB0_AUX_CLK] = &gcc_usb0_aux_clk.clkr,
4371	[GCC_SYS_NOC_USB0_AXI_CLK] = &gcc_sys_noc_usb0_axi_clk.clkr,
4372	[GCC_SNOC_BUS_TIMEOUT2_AHB_CLK] = &gcc_snoc_bus_timeout2_ahb_clk.clkr,
4373	[GCC_USB0_MASTER_CLK] = &gcc_usb0_master_clk.clkr,
4374	[GCC_USB0_MOCK_UTMI_CLK] = &gcc_usb0_mock_utmi_clk.clkr,
4375	[GCC_USB0_PHY_CFG_AHB_CLK] = &gcc_usb0_phy_cfg_ahb_clk.clkr,
4376	[GCC_USB0_PIPE_CLK] = &gcc_usb0_pipe_clk.clkr,
4377	[GCC_USB0_SLEEP_CLK] = &gcc_usb0_sleep_clk.clkr,
4378	[GCC_USB1_MASTER_CLK] = &gcc_usb1_master_clk.clkr,
4379	[GCC_USB1_MOCK_UTMI_CLK] = &gcc_usb1_mock_utmi_clk.clkr,
4380	[GCC_USB1_PHY_CFG_AHB_CLK] = &gcc_usb1_phy_cfg_ahb_clk.clkr,
4381	[GCC_USB1_SLEEP_CLK] = &gcc_usb1_sleep_clk.clkr,
4382	[GCC_CMN_12GPLL_AHB_CLK] = &gcc_cmn_12gpll_ahb_clk.clkr,
4383	[GCC_CMN_12GPLL_SYS_CLK] = &gcc_cmn_12gpll_sys_clk.clkr,
4384	[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
4385	[SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
4386	[GCC_DCC_CLK] = &gcc_dcc_clk.clkr,
4387	[PCIE0_RCHNG_CLK_SRC] = &pcie0_rchng_clk_src.clkr,
4388	[GCC_PCIE0_AXI_S_BRIDGE_CLK] = &gcc_pcie0_axi_s_bridge_clk.clkr,
4389	[PCIE0_RCHNG_CLK] = &gcc_pcie0_rchng_clk.clkr,
4390	[WCSS_AHB_CLK_SRC] = &wcss_ahb_clk_src.clkr,
4391	[Q6_AXI_CLK_SRC] = &q6_axi_clk_src.clkr,
4392	[RBCPR_WCSS_CLK_SRC] = &rbcpr_wcss_clk_src.clkr,
4393	[GCC_LPASS_CORE_AXIM_CLK] = &gcc_lpass_core_axim_clk.clkr,
4394	[LPASS_CORE_AXIM_CLK_SRC] = &lpass_core_axim_clk_src.clkr,
4395	[GCC_LPASS_SNOC_CFG_CLK] = &gcc_lpass_snoc_cfg_clk.clkr,
4396	[LPASS_SNOC_CFG_CLK_SRC] = &lpass_snoc_cfg_clk_src.clkr,
4397	[GCC_LPASS_Q6_AXIM_CLK] = &gcc_lpass_q6_axim_clk.clkr,
4398	[LPASS_Q6_AXIM_CLK_SRC] = &lpass_q6_axim_clk_src.clkr,
4399	[GCC_LPASS_Q6_ATBM_AT_CLK] = &gcc_lpass_q6_atbm_at_clk.clkr,
4400	[GCC_LPASS_Q6_PCLKDBG_CLK] = &gcc_lpass_q6_pclkdbg_clk.clkr,
4401	[GCC_LPASS_Q6SS_TSCTR_1TO2_CLK] = &gcc_lpass_q6ss_tsctr_1to2_clk.clkr,
4402	[GCC_LPASS_Q6SS_TRIG_CLK] = &gcc_lpass_q6ss_trig_clk.clkr,
4403	[GCC_LPASS_TBU_CLK] = &gcc_lpass_tbu_clk.clkr,
4404	[GCC_PCNOC_LPASS_CLK] = &gcc_pcnoc_lpass_clk.clkr,
4405	[GCC_MEM_NOC_UBI32_CLK] = &gcc_mem_noc_ubi32_clk.clkr,
4406	[GCC_MEM_NOC_LPASS_CLK] = &gcc_mem_noc_lpass_clk.clkr,
4407	[GCC_SNOC_LPASS_CFG_CLK] = &gcc_snoc_lpass_cfg_clk.clkr,
4408	[QDSS_STM_CLK_SRC] = &qdss_stm_clk_src.clkr,
4409	[QDSS_TRACECLKIN_CLK_SRC] = &qdss_traceclkin_clk_src.clkr,
4410};
4411
4412static const struct qcom_reset_map gcc_ipq6018_resets[] = {
4413	[GCC_BLSP1_BCR] = { 0x01000, 0 },
4414	[GCC_BLSP1_QUP1_BCR] = { 0x02000, 0 },
4415	[GCC_BLSP1_UART1_BCR] = { 0x02038, 0 },
4416	[GCC_BLSP1_QUP2_BCR] = { 0x03008, 0 },
4417	[GCC_BLSP1_UART2_BCR] = { 0x03028, 0 },
4418	[GCC_BLSP1_QUP3_BCR] = { 0x04008, 0 },
4419	[GCC_BLSP1_UART3_BCR] = { 0x04028, 0 },
4420	[GCC_BLSP1_QUP4_BCR] = { 0x05008, 0 },
4421	[GCC_BLSP1_UART4_BCR] = { 0x05028, 0 },
4422	[GCC_BLSP1_QUP5_BCR] = { 0x06008, 0 },
4423	[GCC_BLSP1_UART5_BCR] = { 0x06028, 0 },
4424	[GCC_BLSP1_QUP6_BCR] = { 0x07008, 0 },
4425	[GCC_BLSP1_UART6_BCR] = { 0x07028, 0 },
4426	[GCC_IMEM_BCR] = { 0x0e000, 0 },
4427	[GCC_SMMU_BCR] = { 0x12000, 0 },
4428	[GCC_APSS_TCU_BCR] = { 0x12050, 0 },
4429	[GCC_SMMU_XPU_BCR] = { 0x12054, 0 },
4430	[GCC_PCNOC_TBU_BCR] = { 0x12058, 0 },
4431	[GCC_SMMU_CFG_BCR] = { 0x1208c, 0 },
4432	[GCC_PRNG_BCR] = { 0x13000, 0 },
4433	[GCC_BOOT_ROM_BCR] = { 0x13008, 0 },
4434	[GCC_CRYPTO_BCR] = { 0x16000, 0 },
4435	[GCC_WCSS_BCR] = { 0x18000, 0 },
4436	[GCC_WCSS_Q6_BCR] = { 0x18100, 0 },
4437	[GCC_NSS_BCR] = { 0x19000, 0 },
4438	[GCC_SEC_CTRL_BCR] = { 0x1a000, 0 },
4439	[GCC_ADSS_BCR] = { 0x1c000, 0 },
4440	[GCC_DDRSS_BCR] = { 0x1e000, 0 },
4441	[GCC_SYSTEM_NOC_BCR] = { 0x26000, 0 },
4442	[GCC_PCNOC_BCR] = { 0x27018, 0 },
4443	[GCC_TCSR_BCR] = { 0x28000, 0 },
4444	[GCC_QDSS_BCR] = { 0x29000, 0 },
4445	[GCC_DCD_BCR] = { 0x2a000, 0 },
4446	[GCC_MSG_RAM_BCR] = { 0x2b000, 0 },
4447	[GCC_MPM_BCR] = { 0x2c000, 0 },
4448	[GCC_SPDM_BCR] = { 0x2f000, 0 },
4449	[GCC_RBCPR_BCR] = { 0x33000, 0 },
4450	[GCC_RBCPR_MX_BCR] = { 0x33014, 0 },
4451	[GCC_TLMM_BCR] = { 0x34000, 0 },
4452	[GCC_RBCPR_WCSS_BCR] = { 0x3a000, 0 },
4453	[GCC_USB0_PHY_BCR] = { 0x3e034, 0 },
4454	[GCC_USB3PHY_0_PHY_BCR] = { 0x3e03c, 0 },
4455	[GCC_USB0_BCR] = { 0x3e070, 0 },
4456	[GCC_USB1_BCR] = { 0x3f070, 0 },
4457	[GCC_QUSB2_0_PHY_BCR] = { 0x4103c, 0 },
4458	[GCC_QUSB2_1_PHY_BCR] = { 0x41040, 0 },
4459	[GCC_SDCC1_BCR] = { 0x42000, 0 },
4460	[GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x47000, 0 },
4461	[GCC_SNOC_BUS_TIMEOUT1_BCR] = { 0x47008, 0 },
4462	[GCC_SNOC_BUS_TIMEOUT2_BCR] = { 0x47010, 0 },
4463	[GCC_PCNOC_BUS_TIMEOUT0_BCR] = { 0x48000, 0 },
4464	[GCC_PCNOC_BUS_TIMEOUT1_BCR] = { 0x48008, 0 },
4465	[GCC_PCNOC_BUS_TIMEOUT2_BCR] = { 0x48010, 0 },
4466	[GCC_PCNOC_BUS_TIMEOUT3_BCR] = { 0x48018, 0 },
4467	[GCC_PCNOC_BUS_TIMEOUT4_BCR] = { 0x48020, 0 },
4468	[GCC_PCNOC_BUS_TIMEOUT5_BCR] = { 0x48028, 0 },
4469	[GCC_PCNOC_BUS_TIMEOUT6_BCR] = { 0x48030, 0 },
4470	[GCC_PCNOC_BUS_TIMEOUT7_BCR] = { 0x48038, 0 },
4471	[GCC_PCNOC_BUS_TIMEOUT8_BCR] = { 0x48040, 0 },
4472	[GCC_PCNOC_BUS_TIMEOUT9_BCR] = { 0x48048, 0 },
4473	[GCC_UNIPHY0_BCR] = { 0x56000, 0 },
4474	[GCC_UNIPHY1_BCR] = { 0x56100, 0 },
4475	[GCC_CMN_12GPLL_BCR] = { 0x56300, 0 },
4476	[GCC_QPIC_BCR] = { 0x57018, 0 },
4477	[GCC_MDIO_BCR] = { 0x58000, 0 },
4478	[GCC_WCSS_CORE_TBU_BCR] = { 0x66000, 0 },
4479	[GCC_WCSS_Q6_TBU_BCR] = { 0x67000, 0 },
4480	[GCC_USB0_TBU_BCR] = { 0x6a000, 0 },
4481	[GCC_PCIE0_TBU_BCR] = { 0x6b000, 0 },
4482	[GCC_NSS_NOC_TBU_BCR] = { 0x6e000, 0 },
4483	[GCC_PCIE0_BCR] = { 0x75004, 0 },
4484	[GCC_PCIE0_PHY_BCR] = { 0x75038, 0 },
4485	[GCC_PCIE0PHY_PHY_BCR] = { 0x7503c, 0 },
4486	[GCC_PCIE0_LINK_DOWN_BCR] = { 0x75044, 0 },
4487	[GCC_DCC_BCR] = { 0x77000, 0 },
4488	[GCC_APC0_VOLTAGE_DROOP_DETECTOR_BCR] = { 0x78000, 0 },
4489	[GCC_SMMU_CATS_BCR] = { 0x7c000, 0 },
4490	[GCC_UBI0_AXI_ARES] = { 0x68010, 0 },
4491	[GCC_UBI0_AHB_ARES] = { 0x68010, 1 },
4492	[GCC_UBI0_NC_AXI_ARES] = { 0x68010, 2 },
4493	[GCC_UBI0_DBG_ARES] = { 0x68010, 3 },
4494	[GCC_UBI0_CORE_CLAMP_ENABLE] = { 0x68010, 4 },
4495	[GCC_UBI0_CLKRST_CLAMP_ENABLE] = { 0x68010, 5 },
4496	[GCC_UBI0_UTCM_ARES] = { 0x68010, 6 },
4497	[GCC_UBI0_CORE_ARES] = { 0x68010, 7 },
4498	[GCC_NSS_CFG_ARES] = { 0x68010, 16 },
4499	[GCC_NSS_NOC_ARES] = { 0x68010, 18 },
4500	[GCC_NSS_CRYPTO_ARES] = { 0x68010, 19 },
4501	[GCC_NSS_CSR_ARES] = { 0x68010, 20 },
4502	[GCC_NSS_CE_APB_ARES] = { 0x68010, 21 },
4503	[GCC_NSS_CE_AXI_ARES] = { 0x68010, 22 },
4504	[GCC_NSSNOC_CE_APB_ARES] = { 0x68010, 23 },
4505	[GCC_NSSNOC_CE_AXI_ARES] = { 0x68010, 24 },
4506	[GCC_NSSNOC_UBI0_AHB_ARES] = { 0x68010, 25 },
4507	[GCC_NSSNOC_SNOC_ARES] = { 0x68010, 27 },
4508	[GCC_NSSNOC_CRYPTO_ARES] = { 0x68010, 28 },
4509	[GCC_NSSNOC_ATB_ARES] = { 0x68010, 29 },
4510	[GCC_NSSNOC_QOSGEN_REF_ARES] = { 0x68010, 30 },
4511	[GCC_NSSNOC_TIMEOUT_REF_ARES] = { 0x68010, 31 },
4512	[GCC_PCIE0_PIPE_ARES] = { 0x75040, 0 },
4513	[GCC_PCIE0_SLEEP_ARES] = { 0x75040, 1 },
4514	[GCC_PCIE0_CORE_STICKY_ARES] = { 0x75040, 2 },
4515	[GCC_PCIE0_AXI_MASTER_ARES] = { 0x75040, 3 },
4516	[GCC_PCIE0_AXI_SLAVE_ARES] = { 0x75040, 4 },
4517	[GCC_PCIE0_AHB_ARES] = { 0x75040, 5 },
4518	[GCC_PCIE0_AXI_MASTER_STICKY_ARES] = { 0x75040, 6 },
4519	[GCC_PCIE0_AXI_SLAVE_STICKY_ARES] = { 0x75040, 7 },
4520	[GCC_PPE_FULL_RESET] = { 0x68014, 0 },
4521	[GCC_UNIPHY0_SOFT_RESET] = { 0x56004, 0 },
4522	[GCC_UNIPHY0_XPCS_RESET] = { 0x56004, 2 },
4523	[GCC_UNIPHY1_SOFT_RESET] = { 0x56104, 0 },
4524	[GCC_UNIPHY1_XPCS_RESET] = { 0x56104, 2 },
4525	[GCC_EDMA_HW_RESET] = { 0x68014, 0 },
4526	[GCC_NSSPORT1_RESET] = { 0x68014, 0 },
4527	[GCC_NSSPORT2_RESET] = { 0x68014, 0 },
4528	[GCC_NSSPORT3_RESET] = { 0x68014, 0 },
4529	[GCC_NSSPORT4_RESET] = { 0x68014, 0 },
4530	[GCC_NSSPORT5_RESET] = { 0x68014, 0 },
4531	[GCC_UNIPHY0_PORT1_ARES] = { 0x56004, 0 },
4532	[GCC_UNIPHY0_PORT2_ARES] = { 0x56004, 0 },
4533	[GCC_UNIPHY0_PORT3_ARES] = { 0x56004, 0 },
4534	[GCC_UNIPHY0_PORT4_ARES] = { 0x56004, 0 },
4535	[GCC_UNIPHY0_PORT5_ARES] = { 0x56004, 0 },
4536	[GCC_UNIPHY0_PORT_4_5_RESET] = { 0x56004, 0 },
4537	[GCC_UNIPHY0_PORT_4_RESET] = { 0x56004, 0 },
4538	[GCC_LPASS_BCR] = {0x1F000, 0},
4539	[GCC_UBI32_TBU_BCR] = {0x65000, 0},
4540	[GCC_LPASS_TBU_BCR] = {0x6C000, 0},
4541	[GCC_WCSSAON_RESET] = {0x59010, 0},
4542	[GCC_LPASS_Q6_AXIM_ARES] = {0x1F004, 0},
4543	[GCC_LPASS_Q6SS_TSCTR_1TO2_ARES] = {0x1F004, 1},
4544	[GCC_LPASS_Q6SS_TRIG_ARES] = {0x1F004, 2},
4545	[GCC_LPASS_Q6_ATBM_AT_ARES] = {0x1F004, 3},
4546	[GCC_LPASS_Q6_PCLKDBG_ARES] = {0x1F004, 4},
4547	[GCC_LPASS_CORE_AXIM_ARES] = {0x1F004, 5},
4548	[GCC_LPASS_SNOC_CFG_ARES] = {0x1F004, 6},
4549	[GCC_WCSS_DBG_ARES] = {0x59008, 0},
4550	[GCC_WCSS_ECAHB_ARES] = {0x59008, 1},
4551	[GCC_WCSS_ACMT_ARES] = {0x59008, 2},
4552	[GCC_WCSS_DBG_BDG_ARES] = {0x59008, 3},
4553	[GCC_WCSS_AHB_S_ARES] = {0x59008, 4},
4554	[GCC_WCSS_AXI_M_ARES] = {0x59008, 5},
4555	[GCC_Q6SS_DBG_ARES] = {0x59110, 0},
4556	[GCC_Q6_AHB_S_ARES] = {0x59110, 1},
4557	[GCC_Q6_AHB_ARES] = {0x59110, 2},
4558	[GCC_Q6_AXIM2_ARES] = {0x59110, 3},
4559	[GCC_Q6_AXIM_ARES] = {0x59110, 4},
4560};
4561
4562static const struct of_device_id gcc_ipq6018_match_table[] = {
4563	{ .compatible = "qcom,gcc-ipq6018" },
4564	{ }
4565};
4566MODULE_DEVICE_TABLE(of, gcc_ipq6018_match_table);
4567
4568static const struct regmap_config gcc_ipq6018_regmap_config = {
4569	.reg_bits       = 32,
4570	.reg_stride     = 4,
4571	.val_bits       = 32,
4572	.max_register   = 0x7fffc,
4573	.fast_io	= true,
4574};
4575
4576static const struct qcom_cc_desc gcc_ipq6018_desc = {
4577	.config = &gcc_ipq6018_regmap_config,
4578	.clks = gcc_ipq6018_clks,
4579	.num_clks = ARRAY_SIZE(gcc_ipq6018_clks),
4580	.resets = gcc_ipq6018_resets,
4581	.num_resets = ARRAY_SIZE(gcc_ipq6018_resets),
4582	.clk_hws = gcc_ipq6018_hws,
4583	.num_clk_hws = ARRAY_SIZE(gcc_ipq6018_hws),
4584};
4585
4586static int gcc_ipq6018_probe(struct platform_device *pdev)
4587{
4588	struct regmap *regmap;
4589
4590	regmap = qcom_cc_map(pdev, &gcc_ipq6018_desc);
4591	if (IS_ERR(regmap))
4592		return PTR_ERR(regmap);
4593
4594	/* Disable SW_COLLAPSE for USB0 GDSCR */
4595	regmap_update_bits(regmap, 0x3e078, BIT(0), 0x0);
4596	/* Enable SW_OVERRIDE for USB0 GDSCR */
4597	regmap_update_bits(regmap, 0x3e078, BIT(2), BIT(2));
4598	/* Disable SW_COLLAPSE for USB1 GDSCR */
4599	regmap_update_bits(regmap, 0x3f078, BIT(0), 0x0);
4600	/* Enable SW_OVERRIDE for USB1 GDSCR */
4601	regmap_update_bits(regmap, 0x3f078, BIT(2), BIT(2));
4602
4603	/* SW Workaround for UBI Huyara PLL */
4604	regmap_update_bits(regmap, 0x2501c, BIT(26), BIT(26));
4605
4606	clk_alpha_pll_configure(&ubi32_pll_main, regmap, &ubi32_pll_config);
4607
4608	clk_alpha_pll_configure(&nss_crypto_pll_main, regmap,
4609				&nss_crypto_pll_config);
4610
4611	return qcom_cc_really_probe(pdev, &gcc_ipq6018_desc, regmap);
4612}
4613
4614static struct platform_driver gcc_ipq6018_driver = {
4615	.probe = gcc_ipq6018_probe,
4616	.driver = {
4617		.name   = "qcom,gcc-ipq6018",
4618		.of_match_table = gcc_ipq6018_match_table,
4619	},
4620};
4621
4622static int __init gcc_ipq6018_init(void)
4623{
4624	return platform_driver_register(&gcc_ipq6018_driver);
4625}
4626core_initcall(gcc_ipq6018_init);
4627
4628static void __exit gcc_ipq6018_exit(void)
4629{
4630	platform_driver_unregister(&gcc_ipq6018_driver);
4631}
4632module_exit(gcc_ipq6018_exit);
4633
4634MODULE_DESCRIPTION("Qualcomm Technologies, Inc. GCC IPQ6018 Driver");
4635MODULE_LICENSE("GPL v2");