Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.5.6.
   1// SPDX-License-Identifier: GPL-2.0-only
   2// Copyright (c) 2021, The Linux Foundation. All rights reserved.
   3
   4#include <linux/kernel.h>
   5#include <linux/bitops.h>
   6#include <linux/err.h>
   7#include <linux/module.h>
   8#include <linux/platform_device.h>
   9#include <linux/of.h>
  10#include <linux/clk-provider.h>
  11#include <linux/regmap.h>
  12#include <linux/reset-controller.h>
  13
  14#include <dt-bindings/clock/qcom,gcc-msm8953.h>
  15
  16#include "clk-alpha-pll.h"
  17#include "clk-branch.h"
  18#include "clk-rcg.h"
  19#include "common.h"
  20#include "gdsc.h"
  21#include "reset.h"
  22
  23enum {
  24	P_XO,
  25	P_SLEEP_CLK,
  26	P_GPLL0,
  27	P_GPLL0_DIV2,
  28	P_GPLL2,
  29	P_GPLL3,
  30	P_GPLL4,
  31	P_GPLL6,
  32	P_GPLL6_DIV2,
  33	P_DSI0PLL,
  34	P_DSI0PLL_BYTE,
  35	P_DSI1PLL,
  36	P_DSI1PLL_BYTE,
  37};
  38
  39static struct clk_alpha_pll gpll0_early = {
  40	.offset = 0x21000,
  41	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  42	.clkr = {
  43		.enable_reg = 0x45000,
  44		.enable_mask = BIT(0),
  45		.hw.init = &(struct clk_init_data) {
  46			.name = "gpll0_early",
  47			.parent_data = &(const struct clk_parent_data) {
  48				.fw_name = "xo",
  49			},
  50			.num_parents = 1,
  51			.ops = &clk_alpha_pll_fixed_ops,
  52		},
  53	},
  54};
  55
  56static struct clk_fixed_factor gpll0_early_div = {
  57	.mult = 1,
  58	.div = 2,
  59	.hw.init = &(struct clk_init_data){
  60		.name = "gpll0_early_div",
  61		.parent_hws = (const struct clk_hw*[]){
  62			&gpll0_early.clkr.hw,
  63		},
  64		.num_parents = 1,
  65		.ops = &clk_fixed_factor_ops,
  66	},
  67};
  68
  69static struct clk_alpha_pll_postdiv gpll0 = {
  70	.offset = 0x21000,
  71	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  72	.clkr.hw.init = &(struct clk_init_data){
  73		.name = "gpll0",
  74		.parent_hws = (const struct clk_hw*[]){
  75			&gpll0_early.clkr.hw,
  76		},
  77		.num_parents = 1,
  78		.ops = &clk_alpha_pll_postdiv_ro_ops,
  79	},
  80};
  81
  82static struct clk_alpha_pll gpll2_early = {
  83	.offset = 0x4a000,
  84	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  85	.clkr = {
  86		.enable_reg = 0x45000,
  87		.enable_mask = BIT(2),
  88		.hw.init = &(struct clk_init_data){
  89			.name = "gpll2_early",
  90			.parent_data = &(const struct clk_parent_data) {
  91				.fw_name = "xo",
  92			},
  93			.num_parents = 1,
  94			.ops = &clk_alpha_pll_fixed_ops,
  95		},
  96	},
  97};
  98
  99static struct clk_alpha_pll_postdiv gpll2 = {
 100	.offset = 0x4a000,
 101	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 102	.clkr.hw.init = &(struct clk_init_data){
 103		.name = "gpll2",
 104		.parent_hws = (const struct clk_hw*[]){
 105			&gpll2_early.clkr.hw,
 106		},
 107		.num_parents = 1,
 108		.ops = &clk_alpha_pll_postdiv_ro_ops,
 109	},
 110};
 111
 112static const struct pll_vco gpll3_p_vco[] = {
 113	{ 1000000000, 2000000000, 0 },
 114};
 115
 116static const struct alpha_pll_config gpll3_early_config = {
 117	.l = 63,
 118	.config_ctl_val = 0x4001055b,
 119	.early_output_mask = 0,
 120	.post_div_mask = GENMASK(11, 8),
 121	.post_div_val = BIT(8),
 122};
 123
 124static struct clk_alpha_pll gpll3_early = {
 125	.offset = 0x22000,
 126	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 127	.vco_table = gpll3_p_vco,
 128	.num_vco = ARRAY_SIZE(gpll3_p_vco),
 129	.flags = SUPPORTS_DYNAMIC_UPDATE,
 130	.clkr = {
 131		.hw.init = &(struct clk_init_data){
 132			.name = "gpll3_early",
 133			.parent_data = &(const struct clk_parent_data) {
 134				.fw_name = "xo",
 135			},
 136			.num_parents = 1,
 137			.ops = &clk_alpha_pll_ops,
 138		},
 139	},
 140};
 141
 142static struct clk_alpha_pll_postdiv gpll3 = {
 143	.offset = 0x22000,
 144	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 145	.clkr.hw.init = &(struct clk_init_data){
 146		.name = "gpll3",
 147		.parent_hws = (const struct clk_hw*[]){
 148			&gpll3_early.clkr.hw,
 149		},
 150		.num_parents = 1,
 151		.ops = &clk_alpha_pll_postdiv_ops,
 152		.flags = CLK_SET_RATE_PARENT,
 153	},
 154};
 155
 156static struct clk_alpha_pll gpll4_early = {
 157	.offset = 0x24000,
 158	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 159	.clkr = {
 160		.enable_reg = 0x45000,
 161		.enable_mask = BIT(5),
 162		.hw.init = &(struct clk_init_data){
 163			.name = "gpll4_early",
 164			.parent_data = &(const struct clk_parent_data) {
 165				.fw_name = "xo",
 166			},
 167			.num_parents = 1,
 168			.ops = &clk_alpha_pll_fixed_ops,
 169		},
 170	},
 171};
 172
 173static struct clk_alpha_pll_postdiv gpll4 = {
 174	.offset = 0x24000,
 175	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 176	.clkr.hw.init = &(struct clk_init_data){
 177		.name = "gpll4",
 178		.parent_hws = (const struct clk_hw*[]){
 179			&gpll4_early.clkr.hw,
 180		},
 181		.num_parents = 1,
 182		.ops = &clk_alpha_pll_postdiv_ro_ops,
 183	},
 184};
 185
 186static struct clk_alpha_pll gpll6_early = {
 187	.offset = 0x37000,
 188	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 189	.clkr = {
 190		.enable_reg = 0x45000,
 191		.enable_mask = BIT(7),
 192		.hw.init = &(struct clk_init_data){
 193			.name = "gpll6_early",
 194			.parent_data = &(const struct clk_parent_data) {
 195				.fw_name = "xo",
 196			},
 197			.num_parents = 1,
 198			.ops = &clk_alpha_pll_fixed_ops,
 199		},
 200	},
 201};
 202
 203static struct clk_fixed_factor gpll6_early_div = {
 204	.mult = 1,
 205	.div = 2,
 206	.hw.init = &(struct clk_init_data){
 207		.name = "gpll6_early_div",
 208		.parent_hws = (const struct clk_hw*[]){
 209			&gpll6_early.clkr.hw,
 210		},
 211		.num_parents = 1,
 212		.ops = &clk_fixed_factor_ops,
 213	},
 214};
 215
 216static struct clk_alpha_pll_postdiv gpll6 = {
 217	.offset = 0x37000,
 218	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 219	.clkr.hw.init = &(struct clk_init_data){
 220		.name = "gpll6",
 221		.parent_hws = (const struct clk_hw*[]){
 222			&gpll6_early.clkr.hw,
 223		},
 224		.num_parents = 1,
 225		.ops = &clk_alpha_pll_postdiv_ro_ops,
 226	},
 227};
 228
 229static const struct parent_map gcc_xo_gpll0_gpll0div2_2_map[] = {
 230	{ P_XO, 0 },
 231	{ P_GPLL0, 1 },
 232	{ P_GPLL0_DIV2, 2 },
 233};
 234
 235static const struct parent_map gcc_xo_gpll0_gpll0div2_4_map[] = {
 236	{ P_XO, 0 },
 237	{ P_GPLL0, 1 },
 238	{ P_GPLL0_DIV2, 4 },
 239};
 240
 241static const struct clk_parent_data gcc_xo_gpll0_gpll0div2_data[] = {
 242	{ .fw_name = "xo" },
 243	{ .hw = &gpll0.clkr.hw },
 244	{ .hw = &gpll0_early_div.hw },
 245};
 246
 247static const struct parent_map gcc_apc_droop_detector_map[] = {
 248	{ P_XO, 0 },
 249	{ P_GPLL0, 1 },
 250	{ P_GPLL4, 2 },
 251};
 252
 253static const struct clk_parent_data gcc_apc_droop_detector_data[] = {
 254	{ .fw_name = "xo" },
 255	{ .hw = &gpll0.clkr.hw },
 256	{ .hw = &gpll4.clkr.hw },
 257};
 258
 259static const struct freq_tbl ftbl_apc_droop_detector_clk_src[] = {
 260	F(19200000, P_XO, 1, 0, 0),
 261	F(400000000, P_GPLL0, 2, 0, 0),
 262	F(576000000, P_GPLL4, 2, 0, 0),
 263	{ }
 264};
 265
 266static struct clk_rcg2 apc0_droop_detector_clk_src = {
 267	.cmd_rcgr = 0x78008,
 268	.hid_width = 5,
 269	.freq_tbl = ftbl_apc_droop_detector_clk_src,
 270	.parent_map = gcc_apc_droop_detector_map,
 271	.clkr.hw.init = &(struct clk_init_data) {
 272		.name = "apc0_droop_detector_clk_src",
 273		.parent_data = gcc_apc_droop_detector_data,
 274		.num_parents = ARRAY_SIZE(gcc_apc_droop_detector_data),
 275		.ops = &clk_rcg2_ops,
 276	}
 277};
 278static struct clk_rcg2 apc1_droop_detector_clk_src = {
 279	.cmd_rcgr = 0x79008,
 280	.hid_width = 5,
 281	.freq_tbl = ftbl_apc_droop_detector_clk_src,
 282	.parent_map = gcc_apc_droop_detector_map,
 283	.clkr.hw.init = &(struct clk_init_data) {
 284		.name = "apc1_droop_detector_clk_src",
 285		.parent_data = gcc_apc_droop_detector_data,
 286		.num_parents = ARRAY_SIZE(gcc_apc_droop_detector_data),
 287		.ops = &clk_rcg2_ops,
 288	}
 289};
 290
 291static const struct freq_tbl ftbl_apss_ahb_clk_src[] = {
 292	F(19200000, P_XO, 1, 0, 0),
 293	F(25000000, P_GPLL0_DIV2, 16, 0, 0),
 294	F(50000000, P_GPLL0, 16, 0, 0),
 295	F(100000000, P_GPLL0, 8, 0, 0),
 296	F(133330000, P_GPLL0, 6, 0, 0),
 297	{ }
 298};
 299
 300static struct clk_rcg2 apss_ahb_clk_src = {
 301	.cmd_rcgr = 0x46000,
 302	.hid_width = 5,
 303	.freq_tbl = ftbl_apss_ahb_clk_src,
 304	.parent_map = gcc_xo_gpll0_gpll0div2_4_map,
 305	.clkr.hw.init = &(struct clk_init_data) {
 306		.name = "apss_ahb_clk_src",
 307		.parent_data = gcc_xo_gpll0_gpll0div2_data,
 308		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
 309		.ops = &clk_rcg2_ops,
 310	}
 311};
 312
 313static const struct freq_tbl ftbl_blsp_i2c_apps_clk_src[] = {
 314	F(19200000, P_XO, 1, 0, 0),
 315	F(25000000, P_GPLL0_DIV2, 16, 0, 0),
 316	F(50000000, P_GPLL0, 16, 0, 0),
 317	{ }
 318};
 319
 320static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
 321	.cmd_rcgr = 0x0200c,
 322	.hid_width = 5,
 323	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 324	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,
 325	.clkr.hw.init = &(struct clk_init_data) {
 326		.name = "blsp1_qup1_i2c_apps_clk_src",
 327		.parent_data = gcc_xo_gpll0_gpll0div2_data,
 328		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
 329		.ops = &clk_rcg2_ops,
 330	}
 331};
 332
 333static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
 334	.cmd_rcgr = 0x03000,
 335	.hid_width = 5,
 336	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 337	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,
 338	.clkr.hw.init = &(struct clk_init_data) {
 339		.name = "blsp1_qup2_i2c_apps_clk_src",
 340		.parent_data = gcc_xo_gpll0_gpll0div2_data,
 341		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
 342		.ops = &clk_rcg2_ops,
 343	}
 344};
 345
 346static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
 347	.cmd_rcgr = 0x04000,
 348	.hid_width = 5,
 349	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 350	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,
 351	.clkr.hw.init = &(struct clk_init_data) {
 352		.name = "blsp1_qup3_i2c_apps_clk_src",
 353		.parent_data = gcc_xo_gpll0_gpll0div2_data,
 354		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
 355		.ops = &clk_rcg2_ops,
 356	}
 357};
 358
 359static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
 360	.cmd_rcgr = 0x05000,
 361	.hid_width = 5,
 362	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 363	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,
 364	.clkr.hw.init = &(struct clk_init_data) {
 365		.name = "blsp1_qup4_i2c_apps_clk_src",
 366		.parent_data = gcc_xo_gpll0_gpll0div2_data,
 367		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
 368		.ops = &clk_rcg2_ops,
 369	}
 370};
 371
 372static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
 373	.cmd_rcgr = 0x0c00c,
 374	.hid_width = 5,
 375	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 376	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,
 377	.clkr.hw.init = &(struct clk_init_data) {
 378		.name = "blsp2_qup1_i2c_apps_clk_src",
 379		.parent_data = gcc_xo_gpll0_gpll0div2_data,
 380		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
 381		.ops = &clk_rcg2_ops,
 382	}
 383};
 384
 385static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
 386	.cmd_rcgr = 0x0d000,
 387	.hid_width = 5,
 388	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 389	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,
 390	.clkr.hw.init = &(struct clk_init_data) {
 391		.name = "blsp2_qup2_i2c_apps_clk_src",
 392		.parent_data = gcc_xo_gpll0_gpll0div2_data,
 393		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
 394		.ops = &clk_rcg2_ops,
 395	}
 396};
 397
 398static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
 399	.cmd_rcgr = 0x0f000,
 400	.hid_width = 5,
 401	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 402	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,
 403	.clkr.hw.init = &(struct clk_init_data) {
 404		.name = "blsp2_qup3_i2c_apps_clk_src",
 405		.parent_data = gcc_xo_gpll0_gpll0div2_data,
 406		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
 407		.ops = &clk_rcg2_ops,
 408	}
 409};
 410
 411static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
 412	.cmd_rcgr = 0x18000,
 413	.hid_width = 5,
 414	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 415	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,
 416	.clkr.hw.init = &(struct clk_init_data) {
 417		.name = "blsp2_qup4_i2c_apps_clk_src",
 418		.parent_data = gcc_xo_gpll0_gpll0div2_data,
 419		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
 420		.ops = &clk_rcg2_ops,
 421	}
 422};
 423
 424static const struct freq_tbl ftbl_blsp_spi_apps_clk_src[] = {
 425	F(960000, P_XO, 10, 1, 2),
 426	F(4800000, P_XO, 4, 0, 0),
 427	F(9600000, P_XO, 2, 0, 0),
 428	F(12500000, P_GPLL0_DIV2, 16, 1, 2),
 429	F(16000000, P_GPLL0, 10, 1, 5),
 430	F(19200000, P_XO, 1, 0, 0),
 431	F(25000000, P_GPLL0, 16, 1, 2),
 432	F(50000000, P_GPLL0, 16, 0, 0),
 433	{ }
 434};
 435
 436static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
 437	.cmd_rcgr = 0x02024,
 438	.hid_width = 5,
 439	.mnd_width = 8,
 440	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
 441	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,
 442	.clkr.hw.init = &(struct clk_init_data) {
 443		.name = "blsp1_qup1_spi_apps_clk_src",
 444		.parent_data = gcc_xo_gpll0_gpll0div2_data,
 445		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
 446		.ops = &clk_rcg2_ops,
 447	}
 448};
 449
 450static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
 451	.cmd_rcgr = 0x03014,
 452	.hid_width = 5,
 453	.mnd_width = 8,
 454	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
 455	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,
 456	.clkr.hw.init = &(struct clk_init_data) {
 457		.name = "blsp1_qup2_spi_apps_clk_src",
 458		.parent_data = gcc_xo_gpll0_gpll0div2_data,
 459		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
 460		.ops = &clk_rcg2_ops,
 461	}
 462};
 463
 464static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
 465	.cmd_rcgr = 0x04024,
 466	.hid_width = 5,
 467	.mnd_width = 8,
 468	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
 469	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,
 470	.clkr.hw.init = &(struct clk_init_data) {
 471		.name = "blsp1_qup3_spi_apps_clk_src",
 472		.parent_data = gcc_xo_gpll0_gpll0div2_data,
 473		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
 474		.ops = &clk_rcg2_ops,
 475	}
 476};
 477
 478static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
 479	.cmd_rcgr = 0x05024,
 480	.hid_width = 5,
 481	.mnd_width = 8,
 482	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
 483	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,
 484	.clkr.hw.init = &(struct clk_init_data) {
 485		.name = "blsp1_qup4_spi_apps_clk_src",
 486		.parent_data = gcc_xo_gpll0_gpll0div2_data,
 487		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
 488		.ops = &clk_rcg2_ops,
 489	}
 490};
 491
 492static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
 493	.cmd_rcgr = 0x0c024,
 494	.hid_width = 5,
 495	.mnd_width = 8,
 496	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
 497	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,
 498	.clkr.hw.init = &(struct clk_init_data) {
 499		.name = "blsp2_qup1_spi_apps_clk_src",
 500		.parent_data = gcc_xo_gpll0_gpll0div2_data,
 501		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
 502		.ops = &clk_rcg2_ops,
 503	}
 504};
 505
 506static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
 507	.cmd_rcgr = 0x0d014,
 508	.hid_width = 5,
 509	.mnd_width = 8,
 510	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
 511	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,
 512	.clkr.hw.init = &(struct clk_init_data) {
 513		.name = "blsp2_qup2_spi_apps_clk_src",
 514		.parent_data = gcc_xo_gpll0_gpll0div2_data,
 515		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
 516		.ops = &clk_rcg2_ops,
 517	}
 518};
 519
 520static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
 521	.cmd_rcgr = 0x0f024,
 522	.hid_width = 5,
 523	.mnd_width = 8,
 524	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
 525	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,
 526	.clkr.hw.init = &(struct clk_init_data) {
 527		.name = "blsp2_qup3_spi_apps_clk_src",
 528		.parent_data = gcc_xo_gpll0_gpll0div2_data,
 529		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
 530		.ops = &clk_rcg2_ops,
 531	}
 532};
 533
 534static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
 535	.cmd_rcgr = 0x18024,
 536	.hid_width = 5,
 537	.mnd_width = 8,
 538	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
 539	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,
 540	.clkr.hw.init = &(struct clk_init_data) {
 541		.name = "blsp2_qup4_spi_apps_clk_src",
 542		.parent_data = gcc_xo_gpll0_gpll0div2_data,
 543		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
 544		.ops = &clk_rcg2_ops,
 545	}
 546};
 547
 548static const struct freq_tbl ftbl_blsp_uart_apps_clk_src[] = {
 549	F(3686400, P_GPLL0_DIV2, 1, 144, 15625),
 550	F(7372800, P_GPLL0_DIV2, 1, 288, 15625),
 551	F(14745600, P_GPLL0_DIV2, 1, 576, 15625),
 552	F(16000000, P_GPLL0_DIV2, 5, 1, 5),
 553	F(19200000, P_XO, 1, 0, 0),
 554	F(24000000, P_GPLL0, 1, 3, 100),
 555	F(25000000, P_GPLL0, 16, 1, 2),
 556	F(32000000, P_GPLL0, 1, 1, 25),
 557	F(40000000, P_GPLL0, 1, 1, 20),
 558	F(46400000, P_GPLL0, 1, 29, 500),
 559	F(48000000, P_GPLL0, 1, 3, 50),
 560	F(51200000, P_GPLL0, 1, 8, 125),
 561	F(56000000, P_GPLL0, 1, 7, 100),
 562	F(58982400, P_GPLL0, 1, 1152, 15625),
 563	F(60000000, P_GPLL0, 1, 3, 40),
 564	F(64000000, P_GPLL0, 1, 2, 25),
 565	{ }
 566};
 567
 568static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
 569	.cmd_rcgr = 0x02044,
 570	.hid_width = 5,
 571	.mnd_width = 16,
 572	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
 573	.parent_map = gcc_xo_gpll0_gpll0div2_4_map,
 574	.clkr.hw.init = &(struct clk_init_data) {
 575		.name = "blsp1_uart1_apps_clk_src",
 576		.parent_data = gcc_xo_gpll0_gpll0div2_data,
 577		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
 578		.ops = &clk_rcg2_ops,
 579	}
 580};
 581
 582static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
 583	.cmd_rcgr = 0x03034,
 584	.hid_width = 5,
 585	.mnd_width = 16,
 586	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
 587	.parent_map = gcc_xo_gpll0_gpll0div2_4_map,
 588	.clkr.hw.init = &(struct clk_init_data) {
 589		.name = "blsp1_uart2_apps_clk_src",
 590		.parent_data = gcc_xo_gpll0_gpll0div2_data,
 591		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
 592		.ops = &clk_rcg2_ops,
 593	}
 594};
 595
 596static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
 597	.cmd_rcgr = 0x0c044,
 598	.hid_width = 5,
 599	.mnd_width = 16,
 600	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
 601	.parent_map = gcc_xo_gpll0_gpll0div2_4_map,
 602	.clkr.hw.init = &(struct clk_init_data) {
 603		.name = "blsp2_uart1_apps_clk_src",
 604		.parent_data = gcc_xo_gpll0_gpll0div2_data,
 605		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
 606		.ops = &clk_rcg2_ops,
 607	}
 608};
 609
 610static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
 611	.cmd_rcgr = 0x0d034,
 612	.hid_width = 5,
 613	.mnd_width = 16,
 614	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
 615	.parent_map = gcc_xo_gpll0_gpll0div2_4_map,
 616	.clkr.hw.init = &(struct clk_init_data) {
 617		.name = "blsp2_uart2_apps_clk_src",
 618		.parent_data = gcc_xo_gpll0_gpll0div2_data,
 619		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
 620		.ops = &clk_rcg2_ops,
 621	}
 622};
 623
 624static const struct parent_map gcc_byte0_map[] = {
 625	{ P_XO, 0 },
 626	{ P_DSI0PLL_BYTE, 1 },
 627	{ P_DSI1PLL_BYTE, 3 },
 628};
 629
 630static const struct parent_map gcc_byte1_map[] = {
 631	{ P_XO, 0 },
 632	{ P_DSI0PLL_BYTE, 3 },
 633	{ P_DSI1PLL_BYTE, 1 },
 634};
 635
 636static const struct clk_parent_data gcc_byte_data[] = {
 637	{ .fw_name = "xo" },
 638	{ .fw_name = "dsi0pllbyte", .name = "dsi0pllbyte" },
 639	{ .fw_name = "dsi1pllbyte", .name = "dsi1pllbyte" },
 640};
 641
 642static struct clk_rcg2 byte0_clk_src = {
 643	.cmd_rcgr = 0x4d044,
 644	.hid_width = 5,
 645	.parent_map = gcc_byte0_map,
 646	.clkr.hw.init = &(struct clk_init_data) {
 647		.name = "byte0_clk_src",
 648		.parent_data = gcc_byte_data,
 649		.num_parents = ARRAY_SIZE(gcc_byte_data),
 650		.ops = &clk_byte2_ops,
 651		.flags = CLK_SET_RATE_PARENT,
 652	}
 653};
 654
 655static struct clk_rcg2 byte1_clk_src = {
 656	.cmd_rcgr = 0x4d0b0,
 657	.hid_width = 5,
 658	.parent_map = gcc_byte1_map,
 659	.clkr.hw.init = &(struct clk_init_data) {
 660		.name = "byte1_clk_src",
 661		.parent_data = gcc_byte_data,
 662		.num_parents = ARRAY_SIZE(gcc_byte_data),
 663		.ops = &clk_byte2_ops,
 664		.flags = CLK_SET_RATE_PARENT,
 665	}
 666};
 667
 668static const struct parent_map gcc_gp_map[] = {
 669	{ P_XO, 0 },
 670	{ P_GPLL0, 1 },
 671	{ P_GPLL6, 2 },
 672	{ P_GPLL0_DIV2, 4 },
 673	{ P_SLEEP_CLK, 6 },
 674};
 675
 676static const struct clk_parent_data gcc_gp_data[] = {
 677	{ .fw_name = "xo" },
 678	{ .hw = &gpll0.clkr.hw },
 679	{ .hw = &gpll6.clkr.hw },
 680	{ .hw = &gpll0_early_div.hw },
 681	{ .fw_name = "sleep", .name = "sleep" },
 682};
 683
 684static const struct freq_tbl ftbl_camss_gp_clk_src[] = {
 685	F(50000000, P_GPLL0_DIV2, 8, 0, 0),
 686	F(100000000, P_GPLL0, 8, 0, 0),
 687	F(200000000, P_GPLL0, 4, 0, 0),
 688	F(266670000, P_GPLL0, 3, 0, 0),
 689	{ }
 690};
 691
 692static struct clk_rcg2 camss_gp0_clk_src = {
 693	.cmd_rcgr = 0x54000,
 694	.hid_width = 5,
 695	.mnd_width = 8,
 696	.freq_tbl = ftbl_camss_gp_clk_src,
 697	.parent_map = gcc_gp_map,
 698	.clkr.hw.init = &(struct clk_init_data) {
 699		.name = "camss_gp0_clk_src",
 700		.parent_data = gcc_gp_data,
 701		.num_parents = ARRAY_SIZE(gcc_gp_data),
 702		.ops = &clk_rcg2_ops,
 703	}
 704};
 705
 706static struct clk_rcg2 camss_gp1_clk_src = {
 707	.cmd_rcgr = 0x55000,
 708	.hid_width = 5,
 709	.mnd_width = 8,
 710	.freq_tbl = ftbl_camss_gp_clk_src,
 711	.parent_map = gcc_gp_map,
 712	.clkr.hw.init = &(struct clk_init_data) {
 713		.name = "camss_gp1_clk_src",
 714		.parent_data = gcc_gp_data,
 715		.num_parents = ARRAY_SIZE(gcc_gp_data),
 716		.ops = &clk_rcg2_ops,
 717	}
 718};
 719
 720static const struct freq_tbl ftbl_camss_top_ahb_clk_src[] = {
 721	F(40000000, P_GPLL0_DIV2, 10, 0, 0),
 722	F(80000000, P_GPLL0, 10, 0, 0),
 723	{ }
 724};
 725
 726static struct clk_rcg2 camss_top_ahb_clk_src = {
 727	.cmd_rcgr = 0x5a000,
 728	.hid_width = 5,
 729	.freq_tbl = ftbl_camss_top_ahb_clk_src,
 730	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,
 731	.clkr.hw.init = &(struct clk_init_data) {
 732		.name = "camss_top_ahb_clk_src",
 733		.parent_data = gcc_xo_gpll0_gpll0div2_data,
 734		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
 735		.ops = &clk_rcg2_ops,
 736	}
 737};
 738
 739static const struct parent_map gcc_cci_map[] = {
 740	{ P_XO, 0 },
 741	{ P_GPLL0, 2 },
 742	{ P_GPLL0_DIV2, 3 },
 743	{ P_SLEEP_CLK, 6 },
 744};
 745
 746static const struct clk_parent_data gcc_cci_data[] = {
 747	{ .fw_name = "xo" },
 748	{ .hw = &gpll0.clkr.hw },
 749	{ .hw = &gpll0_early_div.hw },
 750	{ .fw_name = "sleep", .name = "sleep" },
 751};
 752
 753static const struct freq_tbl ftbl_cci_clk_src[] = {
 754	F(19200000, P_XO, 1, 0, 0),
 755	F(37500000, P_GPLL0_DIV2, 1, 3, 32),
 756	{ }
 757};
 758
 759static struct clk_rcg2 cci_clk_src = {
 760	.cmd_rcgr = 0x51000,
 761	.hid_width = 5,
 762	.mnd_width = 8,
 763	.freq_tbl = ftbl_cci_clk_src,
 764	.parent_map = gcc_cci_map,
 765	.clkr.hw.init = &(struct clk_init_data) {
 766		.name = "cci_clk_src",
 767		.parent_data = gcc_cci_data,
 768		.num_parents = ARRAY_SIZE(gcc_cci_data),
 769		.ops = &clk_rcg2_ops,
 770	}
 771};
 772
 773static const struct parent_map gcc_cpp_map[] = {
 774	{ P_XO, 0 },
 775	{ P_GPLL0, 1 },
 776	{ P_GPLL6, 3 },
 777	{ P_GPLL2, 4 },
 778	{ P_GPLL0_DIV2, 5 },
 779};
 780
 781static const struct clk_parent_data gcc_cpp_data[] = {
 782	{ .fw_name = "xo" },
 783	{ .hw = &gpll0.clkr.hw },
 784	{ .hw = &gpll6.clkr.hw },
 785	{ .hw = &gpll2.clkr.hw },
 786	{ .hw = &gpll0_early_div.hw },
 787};
 788
 789static const struct freq_tbl ftbl_cpp_clk_src[] = {
 790	F(100000000, P_GPLL0_DIV2, 4, 0, 0),
 791	F(200000000, P_GPLL0, 4, 0, 0),
 792	F(266670000, P_GPLL0, 3, 0, 0),
 793	F(320000000, P_GPLL0, 2.5, 0, 0),
 794	F(400000000, P_GPLL0, 2, 0, 0),
 795	F(465000000, P_GPLL2, 2, 0, 0),
 796	{ }
 797};
 798
 799static struct clk_rcg2 cpp_clk_src = {
 800	.cmd_rcgr = 0x58018,
 801	.hid_width = 5,
 802	.freq_tbl = ftbl_cpp_clk_src,
 803	.parent_map = gcc_cpp_map,
 804	.clkr.hw.init = &(struct clk_init_data) {
 805		.name = "cpp_clk_src",
 806		.parent_data = gcc_cpp_data,
 807		.num_parents = ARRAY_SIZE(gcc_cpp_data),
 808		.ops = &clk_rcg2_ops,
 809	}
 810};
 811
 812static const struct freq_tbl ftbl_crypto_clk_src[] = {
 813	F(40000000, P_GPLL0_DIV2, 10, 0, 0),
 814	F(80000000, P_GPLL0, 10, 0, 0),
 815	F(100000000, P_GPLL0, 8, 0, 0),
 816	F(160000000, P_GPLL0, 5, 0, 0),
 817	{ }
 818};
 819
 820static struct clk_rcg2 crypto_clk_src = {
 821	.cmd_rcgr = 0x16004,
 822	.hid_width = 5,
 823	.freq_tbl = ftbl_crypto_clk_src,
 824	.parent_map = gcc_xo_gpll0_gpll0div2_4_map,
 825	.clkr.hw.init = &(struct clk_init_data) {
 826		.name = "crypto_clk_src",
 827		.parent_data = gcc_xo_gpll0_gpll0div2_data,
 828		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
 829		.ops = &clk_rcg2_ops,
 830	}
 831};
 832
 833static const struct parent_map gcc_csi0_map[] = {
 834	{ P_XO, 0 },
 835	{ P_GPLL0, 1 },
 836	{ P_GPLL2, 4 },
 837	{ P_GPLL0_DIV2, 5 },
 838};
 839
 840static const struct parent_map gcc_csi12_map[] = {
 841	{ P_XO, 0 },
 842	{ P_GPLL0, 1 },
 843	{ P_GPLL2, 5 },
 844	{ P_GPLL0_DIV2, 4 },
 845};
 846
 847static const struct clk_parent_data gcc_csi_data[] = {
 848	{ .fw_name = "xo" },
 849	{ .hw = &gpll0.clkr.hw },
 850	{ .hw = &gpll2.clkr.hw },
 851	{ .hw = &gpll0_early_div.hw },
 852};
 853
 854static const struct freq_tbl ftbl_csi_clk_src[] = {
 855	F(100000000, P_GPLL0_DIV2, 4, 0, 0),
 856	F(200000000, P_GPLL0, 4, 0, 0),
 857	F(310000000, P_GPLL2, 3, 0, 0),
 858	F(400000000, P_GPLL0, 2, 0, 0),
 859	F(465000000, P_GPLL2, 2, 0, 0),
 860	{ }
 861};
 862
 863static struct clk_rcg2 csi0_clk_src = {
 864	.cmd_rcgr = 0x4e020,
 865	.hid_width = 5,
 866	.freq_tbl = ftbl_csi_clk_src,
 867	.parent_map = gcc_csi0_map,
 868	.clkr.hw.init = &(struct clk_init_data) {
 869		.name = "csi0_clk_src",
 870		.parent_data = gcc_csi_data,
 871		.num_parents = ARRAY_SIZE(gcc_csi_data),
 872		.ops = &clk_rcg2_ops,
 873	}
 874};
 875
 876static struct clk_rcg2 csi1_clk_src = {
 877	.cmd_rcgr = 0x4f020,
 878	.hid_width = 5,
 879	.freq_tbl = ftbl_csi_clk_src,
 880	.parent_map = gcc_csi12_map,
 881	.clkr.hw.init = &(struct clk_init_data) {
 882		.name = "csi1_clk_src",
 883		.parent_data = gcc_csi_data,
 884		.num_parents = ARRAY_SIZE(gcc_csi_data),
 885		.ops = &clk_rcg2_ops,
 886	}
 887};
 888
 889static struct clk_rcg2 csi2_clk_src = {
 890	.cmd_rcgr = 0x3c020,
 891	.hid_width = 5,
 892	.freq_tbl = ftbl_csi_clk_src,
 893	.parent_map = gcc_csi12_map,
 894	.clkr.hw.init = &(struct clk_init_data) {
 895		.name = "csi2_clk_src",
 896		.parent_data = gcc_csi_data,
 897		.num_parents = ARRAY_SIZE(gcc_csi_data),
 898		.ops = &clk_rcg2_ops,
 899	}
 900};
 901
 902static const struct parent_map gcc_csip_map[] = {
 903	{ P_XO, 0 },
 904	{ P_GPLL0, 1 },
 905	{ P_GPLL4, 3 },
 906	{ P_GPLL2, 4 },
 907	{ P_GPLL0_DIV2, 5 },
 908};
 909
 910static const struct clk_parent_data gcc_csip_data[] = {
 911	{ .fw_name = "xo" },
 912	{ .hw = &gpll0.clkr.hw },
 913	{ .hw = &gpll4.clkr.hw },
 914	{ .hw = &gpll2.clkr.hw },
 915	{ .hw = &gpll0_early_div.hw },
 916};
 917
 918static const struct freq_tbl ftbl_csi_p_clk_src[] = {
 919	F(66670000, P_GPLL0_DIV2, 6, 0, 0),
 920	F(133330000, P_GPLL0, 6, 0, 0),
 921	F(200000000, P_GPLL0, 4, 0, 0),
 922	F(266670000, P_GPLL0, 3, 0, 0),
 923	F(310000000, P_GPLL2, 3, 0, 0),
 924	{ }
 925};
 926
 927static struct clk_rcg2 csi0p_clk_src = {
 928	.cmd_rcgr = 0x58084,
 929	.hid_width = 5,
 930	.freq_tbl = ftbl_csi_p_clk_src,
 931	.parent_map = gcc_csip_map,
 932	.clkr.hw.init = &(struct clk_init_data) {
 933		.name = "csi0p_clk_src",
 934		.parent_data = gcc_csip_data,
 935		.num_parents = ARRAY_SIZE(gcc_csip_data),
 936		.ops = &clk_rcg2_ops,
 937	}
 938};
 939
 940static struct clk_rcg2 csi1p_clk_src = {
 941	.cmd_rcgr = 0x58094,
 942	.hid_width = 5,
 943	.freq_tbl = ftbl_csi_p_clk_src,
 944	.parent_map = gcc_csip_map,
 945	.clkr.hw.init = &(struct clk_init_data) {
 946		.name = "csi1p_clk_src",
 947		.parent_data = gcc_csip_data,
 948		.num_parents = ARRAY_SIZE(gcc_csip_data),
 949		.ops = &clk_rcg2_ops,
 950	}
 951};
 952
 953static struct clk_rcg2 csi2p_clk_src = {
 954	.cmd_rcgr = 0x580a4,
 955	.hid_width = 5,
 956	.freq_tbl = ftbl_csi_p_clk_src,
 957	.parent_map = gcc_csip_map,
 958	.clkr.hw.init = &(struct clk_init_data) {
 959		.name = "csi2p_clk_src",
 960		.parent_data = gcc_csip_data,
 961		.num_parents = ARRAY_SIZE(gcc_csip_data),
 962		.ops = &clk_rcg2_ops,
 963	}
 964};
 965
 966static const struct freq_tbl ftbl_csi_phytimer_clk_src[] = {
 967	F(100000000, P_GPLL0_DIV2, 4, 0, 0),
 968	F(200000000, P_GPLL0, 4, 0, 0),
 969	F(266670000, P_GPLL0, 3, 0, 0),
 970	{ }
 971};
 972
 973static struct clk_rcg2 csi0phytimer_clk_src = {
 974	.cmd_rcgr = 0x4e000,
 975	.hid_width = 5,
 976	.freq_tbl = ftbl_csi_phytimer_clk_src,
 977	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,
 978	.clkr.hw.init = &(struct clk_init_data) {
 979		.name = "csi0phytimer_clk_src",
 980		.parent_data = gcc_xo_gpll0_gpll0div2_data,
 981		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
 982		.ops = &clk_rcg2_ops,
 983	}
 984};
 985
 986static struct clk_rcg2 csi1phytimer_clk_src = {
 987	.cmd_rcgr = 0x4f000,
 988	.hid_width = 5,
 989	.freq_tbl = ftbl_csi_phytimer_clk_src,
 990	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,
 991	.clkr.hw.init = &(struct clk_init_data) {
 992		.name = "csi1phytimer_clk_src",
 993		.parent_data = gcc_xo_gpll0_gpll0div2_data,
 994		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
 995		.ops = &clk_rcg2_ops,
 996	}
 997};
 998
 999static struct clk_rcg2 csi2phytimer_clk_src = {
1000	.cmd_rcgr = 0x4f05c,
1001	.hid_width = 5,
1002	.freq_tbl = ftbl_csi_phytimer_clk_src,
1003	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,
1004	.clkr.hw.init = &(struct clk_init_data) {
1005		.name = "csi2phytimer_clk_src",
1006		.parent_data = gcc_xo_gpll0_gpll0div2_data,
1007		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
1008		.ops = &clk_rcg2_ops,
1009	}
1010};
1011
1012static const struct parent_map gcc_esc_map[] = {
1013	{ P_XO, 0 },
1014	{ P_GPLL0, 3 },
1015};
1016
1017static const struct clk_parent_data gcc_esc_vsync_data[] = {
1018	{ .fw_name = "xo" },
1019	{ .hw = &gpll0.clkr.hw },
1020};
1021
1022static const struct freq_tbl ftbl_esc0_1_clk_src[] = {
1023	F(19200000, P_XO, 1, 0, 0),
1024	{ }
1025};
1026
1027static struct clk_rcg2 esc0_clk_src = {
1028	.cmd_rcgr = 0x4d05c,
1029	.hid_width = 5,
1030	.freq_tbl = ftbl_esc0_1_clk_src,
1031	.parent_map = gcc_esc_map,
1032	.clkr.hw.init = &(struct clk_init_data) {
1033		.name = "esc0_clk_src",
1034		.parent_data = gcc_esc_vsync_data,
1035		.num_parents = ARRAY_SIZE(gcc_esc_vsync_data),
1036		.ops = &clk_rcg2_ops,
1037	}
1038};
1039
1040static struct clk_rcg2 esc1_clk_src = {
1041	.cmd_rcgr = 0x4d0a8,
1042	.hid_width = 5,
1043	.freq_tbl = ftbl_esc0_1_clk_src,
1044	.parent_map = gcc_esc_map,
1045	.clkr.hw.init = &(struct clk_init_data) {
1046		.name = "esc1_clk_src",
1047		.parent_data = gcc_esc_vsync_data,
1048		.num_parents = ARRAY_SIZE(gcc_esc_vsync_data),
1049		.ops = &clk_rcg2_ops,
1050	}
1051};
1052
1053static const struct parent_map gcc_gfx3d_map[] = {
1054	{ P_XO, 0 },
1055	{ P_GPLL0, 1 },
1056	{ P_GPLL3, 2 },
1057	{ P_GPLL6, 3 },
1058	{ P_GPLL4, 4 },
1059	{ P_GPLL0_DIV2, 5 },
1060	{ P_GPLL6_DIV2, 6 },
1061};
1062
1063static const struct clk_parent_data gcc_gfx3d_data[] = {
1064	{ .fw_name = "xo" },
1065	{ .hw = &gpll0.clkr.hw },
1066	{ .hw = &gpll3.clkr.hw },
1067	{ .hw = &gpll6.clkr.hw },
1068	{ .hw = &gpll4.clkr.hw },
1069	{ .hw = &gpll0_early_div.hw },
1070	{ .hw = &gpll6_early_div.hw },
1071};
1072
1073static const struct freq_tbl ftbl_gfx3d_clk_src[] = {
1074	F(19200000, P_XO, 1, 0, 0),
1075	F(50000000, P_GPLL0_DIV2, 8, 0, 0),
1076	F(80000000, P_GPLL0_DIV2, 5, 0, 0),
1077	F(100000000, P_GPLL0_DIV2, 4, 0, 0),
1078	F(133330000, P_GPLL0_DIV2, 3, 0, 0),
1079	F(160000000, P_GPLL0_DIV2, 2.5, 0, 0),
1080	F(200000000, P_GPLL0_DIV2, 2, 0, 0),
1081	F(266670000, P_GPLL0, 3.0, 0, 0),
1082	F(320000000, P_GPLL0, 2.5, 0, 0),
1083	F(400000000, P_GPLL0, 2, 0, 0),
1084	F(460800000, P_GPLL4, 2.5, 0, 0),
1085	F(510000000, P_GPLL3, 2, 0, 0),
1086	F(560000000, P_GPLL3, 2, 0, 0),
1087	F(600000000, P_GPLL3, 2, 0, 0),
1088	F(650000000, P_GPLL3, 2, 0, 0),
1089	F(685000000, P_GPLL3, 2, 0, 0),
1090	F(725000000, P_GPLL3, 2, 0, 0),
1091	{ }
1092};
1093
1094static struct clk_rcg2 gfx3d_clk_src = {
1095	.cmd_rcgr = 0x59000,
1096	.hid_width = 5,
1097	.freq_tbl = ftbl_gfx3d_clk_src,
1098	.parent_map = gcc_gfx3d_map,
1099	.clkr.hw.init = &(struct clk_init_data) {
1100		.name = "gfx3d_clk_src",
1101		.parent_data = gcc_gfx3d_data,
1102		.num_parents = ARRAY_SIZE(gcc_gfx3d_data),
1103		.ops = &clk_rcg2_floor_ops,
1104		.flags = CLK_SET_RATE_PARENT,
1105	}
1106};
1107
1108static const struct freq_tbl ftbl_gp_clk_src[] = {
1109	F(19200000, P_XO, 1, 0, 0),
1110	{ }
1111};
1112
1113static struct clk_rcg2 gp1_clk_src = {
1114	.cmd_rcgr = 0x08004,
1115	.hid_width = 5,
1116	.mnd_width = 8,
1117	.freq_tbl = ftbl_gp_clk_src,
1118	.parent_map = gcc_gp_map,
1119	.clkr.hw.init = &(struct clk_init_data) {
1120		.name = "gp1_clk_src",
1121		.parent_data = gcc_gp_data,
1122		.num_parents = ARRAY_SIZE(gcc_gp_data),
1123		.ops = &clk_rcg2_ops,
1124	}
1125};
1126
1127static struct clk_rcg2 gp2_clk_src = {
1128	.cmd_rcgr = 0x09004,
1129	.hid_width = 5,
1130	.mnd_width = 8,
1131	.freq_tbl = ftbl_gp_clk_src,
1132	.parent_map = gcc_gp_map,
1133	.clkr.hw.init = &(struct clk_init_data) {
1134		.name = "gp2_clk_src",
1135		.parent_data = gcc_gp_data,
1136		.num_parents = ARRAY_SIZE(gcc_gp_data),
1137		.ops = &clk_rcg2_ops,
1138	}
1139};
1140
1141static struct clk_rcg2 gp3_clk_src = {
1142	.cmd_rcgr = 0x0a004,
1143	.hid_width = 5,
1144	.mnd_width = 8,
1145	.freq_tbl = ftbl_gp_clk_src,
1146	.parent_map = gcc_gp_map,
1147	.clkr.hw.init = &(struct clk_init_data) {
1148		.name = "gp3_clk_src",
1149		.parent_data = gcc_gp_data,
1150		.num_parents = ARRAY_SIZE(gcc_gp_data),
1151		.ops = &clk_rcg2_ops,
1152	}
1153};
1154
1155static const struct parent_map gcc_jpeg0_map[] = {
1156	{ P_XO, 0 },
1157	{ P_GPLL0, 1 },
1158	{ P_GPLL6, 2 },
1159	{ P_GPLL0_DIV2, 4 },
1160	{ P_GPLL2, 5 },
1161};
1162
1163static const struct clk_parent_data gcc_jpeg0_data[] = {
1164	{ .fw_name = "xo" },
1165	{ .hw = &gpll0.clkr.hw },
1166	{ .hw = &gpll6.clkr.hw },
1167	{ .hw = &gpll0_early_div.hw },
1168	{ .hw = &gpll2.clkr.hw },
1169};
1170
1171static const struct freq_tbl ftbl_jpeg0_clk_src[] = {
1172	F(66670000, P_GPLL0_DIV2, 6, 0, 0),
1173	F(133330000, P_GPLL0, 6, 0, 0),
1174	F(200000000, P_GPLL0, 4, 0, 0),
1175	F(266670000, P_GPLL0, 3, 0, 0),
1176	F(310000000, P_GPLL2, 3, 0, 0),
1177	F(320000000, P_GPLL0, 2.5, 0, 0),
1178	{ }
1179};
1180
1181static struct clk_rcg2 jpeg0_clk_src = {
1182	.cmd_rcgr = 0x57000,
1183	.hid_width = 5,
1184	.freq_tbl = ftbl_jpeg0_clk_src,
1185	.parent_map = gcc_jpeg0_map,
1186	.clkr.hw.init = &(struct clk_init_data) {
1187		.name = "jpeg0_clk_src",
1188		.parent_data = gcc_jpeg0_data,
1189		.num_parents = ARRAY_SIZE(gcc_jpeg0_data),
1190		.ops = &clk_rcg2_ops,
1191	}
1192};
1193
1194static const struct parent_map gcc_mclk_map[] = {
1195	{ P_XO, 0 },
1196	{ P_GPLL0, 1 },
1197	{ P_GPLL6, 2 },
1198	{ P_GPLL0_DIV2, 4 },
1199	{ P_GPLL6_DIV2, 5 },
1200	{ P_SLEEP_CLK, 6 },
1201};
1202
1203static const struct clk_parent_data gcc_mclk_data[] = {
1204	{ .fw_name = "xo" },
1205	{ .hw = &gpll0.clkr.hw },
1206	{ .hw = &gpll6.clkr.hw },
1207	{ .hw = &gpll0_early_div.hw },
1208	{ .hw = &gpll6_early_div.hw },
1209	{ .fw_name = "sleep", .name = "sleep" },
1210};
1211
1212static const struct freq_tbl ftbl_mclk_clk_src[] = {
1213	F(19200000, P_GPLL6, 5, 4, 45),
1214	F(24000000, P_GPLL6_DIV2, 1, 2, 45),
1215	F(26000000, P_GPLL0, 1, 4, 123),
1216	F(33330000, P_GPLL0_DIV2, 12, 0, 0),
1217	F(36610000, P_GPLL6, 1, 2, 59),
1218	F(66667000, P_GPLL0, 12, 0, 0),
1219	{ }
1220};
1221
1222static struct clk_rcg2 mclk0_clk_src = {
1223	.cmd_rcgr = 0x52000,
1224	.hid_width = 5,
1225	.mnd_width = 8,
1226	.freq_tbl = ftbl_mclk_clk_src,
1227	.parent_map = gcc_mclk_map,
1228	.clkr.hw.init = &(struct clk_init_data) {
1229		.name = "mclk0_clk_src",
1230		.parent_data = gcc_mclk_data,
1231		.num_parents = ARRAY_SIZE(gcc_mclk_data),
1232		.ops = &clk_rcg2_ops,
1233	}
1234};
1235
1236static struct clk_rcg2 mclk1_clk_src = {
1237	.cmd_rcgr = 0x53000,
1238	.hid_width = 5,
1239	.mnd_width = 8,
1240	.freq_tbl = ftbl_mclk_clk_src,
1241	.parent_map = gcc_mclk_map,
1242	.clkr.hw.init = &(struct clk_init_data) {
1243		.name = "mclk1_clk_src",
1244		.parent_data = gcc_mclk_data,
1245		.num_parents = ARRAY_SIZE(gcc_mclk_data),
1246		.ops = &clk_rcg2_ops,
1247	}
1248};
1249
1250static struct clk_rcg2 mclk2_clk_src = {
1251	.cmd_rcgr = 0x5c000,
1252	.hid_width = 5,
1253	.mnd_width = 8,
1254	.freq_tbl = ftbl_mclk_clk_src,
1255	.parent_map = gcc_mclk_map,
1256	.clkr.hw.init = &(struct clk_init_data) {
1257		.name = "mclk2_clk_src",
1258		.parent_data = gcc_mclk_data,
1259		.num_parents = ARRAY_SIZE(gcc_mclk_data),
1260		.ops = &clk_rcg2_ops,
1261	}
1262};
1263
1264static struct clk_rcg2 mclk3_clk_src = {
1265	.cmd_rcgr = 0x5e000,
1266	.hid_width = 5,
1267	.mnd_width = 8,
1268	.freq_tbl = ftbl_mclk_clk_src,
1269	.parent_map = gcc_mclk_map,
1270	.clkr.hw.init = &(struct clk_init_data) {
1271		.name = "mclk3_clk_src",
1272		.parent_data = gcc_mclk_data,
1273		.num_parents = ARRAY_SIZE(gcc_mclk_data),
1274		.ops = &clk_rcg2_ops,
1275	}
1276};
1277
1278static const struct parent_map gcc_mdp_map[] = {
1279	{ P_XO, 0 },
1280	{ P_GPLL0, 1 },
1281	{ P_GPLL6, 3 },
1282	{ P_GPLL0_DIV2, 4 },
1283};
1284
1285static const struct clk_parent_data gcc_mdp_data[] = {
1286	{ .fw_name = "xo" },
1287	{ .hw = &gpll0.clkr.hw },
1288	{ .hw = &gpll6.clkr.hw },
1289	{ .hw = &gpll0_early_div.hw },
1290};
1291
1292static const struct freq_tbl ftbl_mdp_clk_src[] = {
1293	F(50000000, P_GPLL0_DIV2, 8, 0, 0),
1294	F(80000000, P_GPLL0_DIV2, 5, 0, 0),
1295	F(160000000, P_GPLL0_DIV2, 2.5, 0, 0),
1296	F(200000000, P_GPLL0, 4, 0, 0),
1297	F(266670000, P_GPLL0, 3, 0, 0),
1298	F(320000000, P_GPLL0, 2.5, 0, 0),
1299	F(400000000, P_GPLL0, 2, 0, 0),
1300	{ }
1301};
1302
1303static struct clk_rcg2 mdp_clk_src = {
1304	.cmd_rcgr = 0x4d014,
1305	.hid_width = 5,
1306	.freq_tbl = ftbl_mdp_clk_src,
1307	.parent_map = gcc_mdp_map,
1308	.clkr.hw.init = &(struct clk_init_data) {
1309		.name = "mdp_clk_src",
1310		.parent_data = gcc_mdp_data,
1311		.num_parents = ARRAY_SIZE(gcc_mdp_data),
1312		.ops = &clk_rcg2_ops,
1313	}
1314};
1315
1316static const struct parent_map gcc_pclk0_map[] = {
1317	{ P_XO, 0 },
1318	{ P_DSI0PLL, 1 },
1319	{ P_DSI1PLL, 3 },
1320};
1321
1322static const struct parent_map gcc_pclk1_map[] = {
1323	{ P_XO, 0 },
1324	{ P_DSI0PLL, 3 },
1325	{ P_DSI1PLL, 1 },
1326};
1327
1328static const struct clk_parent_data gcc_pclk_data[] = {
1329	{ .fw_name = "xo" },
1330	{ .fw_name = "dsi0pll", .name = "dsi0pll" },
1331	{ .fw_name = "dsi1pll", .name = "dsi1pll" },
1332};
1333
1334static struct clk_rcg2 pclk0_clk_src = {
1335	.cmd_rcgr = 0x4d000,
1336	.hid_width = 5,
1337	.mnd_width = 8,
1338	.parent_map = gcc_pclk0_map,
1339	.clkr.hw.init = &(struct clk_init_data) {
1340		.name = "pclk0_clk_src",
1341		.parent_data = gcc_pclk_data,
1342		.num_parents = ARRAY_SIZE(gcc_pclk_data),
1343		.ops = &clk_pixel_ops,
1344		.flags = CLK_SET_RATE_PARENT,
1345	}
1346};
1347
1348static struct clk_rcg2 pclk1_clk_src = {
1349	.cmd_rcgr = 0x4d0b8,
1350	.hid_width = 5,
1351	.mnd_width = 8,
1352	.parent_map = gcc_pclk1_map,
1353	.clkr.hw.init = &(struct clk_init_data) {
1354		.name = "pclk1_clk_src",
1355		.parent_data = gcc_pclk_data,
1356		.num_parents = ARRAY_SIZE(gcc_pclk_data),
1357		.ops = &clk_pixel_ops,
1358		.flags = CLK_SET_RATE_PARENT,
1359	}
1360};
1361
1362static const struct freq_tbl ftbl_pdm2_clk_src[] = {
1363	F(32000000, P_GPLL0_DIV2, 12.5, 0, 0),
1364	F(64000000, P_GPLL0, 12.5, 0, 0),
1365	{ }
1366};
1367
1368static struct clk_rcg2 pdm2_clk_src = {
1369	.cmd_rcgr = 0x44010,
1370	.hid_width = 5,
1371	.freq_tbl = ftbl_pdm2_clk_src,
1372	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,
1373	.clkr.hw.init = &(struct clk_init_data) {
1374		.name = "pdm2_clk_src",
1375		.parent_data = gcc_xo_gpll0_gpll0div2_data,
1376		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
1377		.ops = &clk_rcg2_ops,
1378	}
1379};
1380
1381static const struct freq_tbl ftbl_rbcpr_gfx_clk_src[] = {
1382	F(19200000, P_XO, 1, 0, 0),
1383	F(50000000, P_GPLL0, 16, 0, 0),
1384	{ }
1385};
1386
1387static struct clk_rcg2 rbcpr_gfx_clk_src = {
1388	.cmd_rcgr = 0x3a00c,
1389	.hid_width = 5,
1390	.freq_tbl = ftbl_rbcpr_gfx_clk_src,
1391	.parent_map = gcc_xo_gpll0_gpll0div2_4_map,
1392	.clkr.hw.init = &(struct clk_init_data) {
1393		.name = "rbcpr_gfx_clk_src",
1394		.parent_data = gcc_xo_gpll0_gpll0div2_data,
1395		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
1396		.ops = &clk_rcg2_ops,
1397	}
1398};
1399
1400static const struct parent_map gcc_sdcc1_ice_core_map[] = {
1401	{ P_XO, 0 },
1402	{ P_GPLL0, 1 },
1403	{ P_GPLL6, 2 },
1404	{ P_GPLL0_DIV2, 4 },
1405};
1406
1407static const struct clk_parent_data gcc_sdcc1_ice_core_data[] = {
1408	{ .fw_name = "xo" },
1409	{ .hw = &gpll0.clkr.hw },
1410	{ .hw = &gpll6.clkr.hw },
1411	{ .hw = &gpll0_early_div.hw },
1412};
1413
1414static const struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = {
1415	F(80000000, P_GPLL0_DIV2, 5, 0, 0),
1416	F(160000000, P_GPLL0, 5, 0, 0),
1417	F(270000000, P_GPLL6, 4, 0, 0),
1418	{ }
1419};
1420
1421static struct clk_rcg2 sdcc1_ice_core_clk_src = {
1422	.cmd_rcgr = 0x5d000,
1423	.hid_width = 5,
1424	.freq_tbl = ftbl_sdcc1_ice_core_clk_src,
1425	.parent_map = gcc_sdcc1_ice_core_map,
1426	.clkr.hw.init = &(struct clk_init_data) {
1427		.name = "sdcc1_ice_core_clk_src",
1428		.parent_data = gcc_sdcc1_ice_core_data,
1429		.num_parents = ARRAY_SIZE(gcc_sdcc1_ice_core_data),
1430		.ops = &clk_rcg2_ops,
1431	}
1432};
1433
1434static const struct parent_map gcc_sdcc_apps_map[] = {
1435	{ P_XO, 0 },
1436	{ P_GPLL0, 1 },
1437	{ P_GPLL4, 2 },
1438	{ P_GPLL0_DIV2, 4 },
1439};
1440
1441static const struct clk_parent_data gcc_sdcc_apss_data[] = {
1442	{ .fw_name = "xo" },
1443	{ .hw = &gpll0.clkr.hw },
1444	{ .hw = &gpll4.clkr.hw },
1445	{ .hw = &gpll0_early_div.hw },
1446};
1447
1448static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
1449	F(144000, P_XO, 16, 3, 25),
1450	F(400000, P_XO, 12, 1, 4),
1451	F(20000000, P_GPLL0_DIV2, 5, 1, 4),
1452	F(25000000, P_GPLL0_DIV2, 16, 0, 0),
1453	F(50000000, P_GPLL0, 16, 0, 0),
1454	F(100000000, P_GPLL0, 8, 0, 0),
1455	F(177770000, P_GPLL0, 4.5, 0, 0),
1456	F(192000000, P_GPLL4, 6, 0, 0),
1457	F(384000000, P_GPLL4, 3, 0, 0),
1458	{ }
1459};
1460
1461static struct clk_rcg2 sdcc1_apps_clk_src = {
1462	.cmd_rcgr = 0x42004,
1463	.hid_width = 5,
1464	.mnd_width = 8,
1465	.freq_tbl = ftbl_sdcc1_apps_clk_src,
1466	.parent_map = gcc_sdcc_apps_map,
1467	.clkr.hw.init = &(struct clk_init_data) {
1468		.name = "sdcc1_apps_clk_src",
1469		.parent_data = gcc_sdcc_apss_data,
1470		.num_parents = ARRAY_SIZE(gcc_sdcc_apss_data),
1471		.ops = &clk_rcg2_floor_ops,
1472	}
1473};
1474
1475static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = {
1476	F(144000, P_XO, 16, 3, 25),
1477	F(400000, P_XO, 12, 1, 4),
1478	F(20000000, P_GPLL0_DIV2, 5, 1, 4),
1479	F(25000000, P_GPLL0_DIV2, 16, 0, 0),
1480	F(50000000, P_GPLL0, 16, 0, 0),
1481	F(100000000, P_GPLL0, 8, 0, 0),
1482	F(177770000, P_GPLL0, 4.5, 0, 0),
1483	F(192000000, P_GPLL4, 6, 0, 0),
1484	F(200000000, P_GPLL0, 4, 0, 0),
1485	{ }
1486};
1487
1488static struct clk_rcg2 sdcc2_apps_clk_src = {
1489	.cmd_rcgr = 0x43004,
1490	.hid_width = 5,
1491	.mnd_width = 8,
1492	.freq_tbl = ftbl_sdcc2_apps_clk_src,
1493	.parent_map = gcc_sdcc_apps_map,
1494	.clkr.hw.init = &(struct clk_init_data) {
1495		.name = "sdcc2_apps_clk_src",
1496		.parent_data = gcc_sdcc_apss_data,
1497		.num_parents = ARRAY_SIZE(gcc_sdcc_apss_data),
1498		.ops = &clk_rcg2_floor_ops,
1499	}
1500};
1501
1502static const struct freq_tbl ftbl_usb30_master_clk_src[] = {
1503	F(80000000, P_GPLL0_DIV2, 5, 0, 0),
1504	F(100000000, P_GPLL0, 8, 0, 0),
1505	F(133330000, P_GPLL0, 6, 0, 0),
1506	{ }
1507};
1508
1509static struct clk_rcg2 usb30_master_clk_src = {
1510	.cmd_rcgr = 0x3f00c,
1511	.hid_width = 5,
1512	.freq_tbl = ftbl_usb30_master_clk_src,
1513	.parent_map = gcc_xo_gpll0_gpll0div2_2_map,
1514	.clkr.hw.init = &(struct clk_init_data) {
1515		.name = "usb30_master_clk_src",
1516		.parent_data = gcc_xo_gpll0_gpll0div2_data,
1517		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
1518		.ops = &clk_rcg2_ops,
1519	}
1520};
1521
1522static const struct parent_map gcc_usb30_mock_utmi_map[] = {
1523	{ P_XO, 0 },
1524	{ P_GPLL6, 1 },
1525	{ P_GPLL6_DIV2, 2 },
1526	{ P_GPLL0, 3 },
1527	{ P_GPLL0_DIV2, 4 },
1528};
1529
1530static const struct clk_parent_data gcc_usb30_mock_utmi_data[] = {
1531	{ .fw_name = "xo" },
1532	{ .hw = &gpll6.clkr.hw },
1533	{ .hw = &gpll6_early_div.hw },
1534	{ .hw = &gpll0.clkr.hw },
1535	{ .hw = &gpll0_early_div.hw },
1536};
1537
1538static const struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = {
1539	F(19200000, P_XO, 1, 0, 0),
1540	F(60000000, P_GPLL6_DIV2, 9, 1, 1),
1541	{ }
1542};
1543
1544static struct clk_rcg2 usb30_mock_utmi_clk_src = {
1545	.cmd_rcgr = 0x3f020,
1546	.hid_width = 5,
1547	.mnd_width = 8,
1548	.freq_tbl = ftbl_usb30_mock_utmi_clk_src,
1549	.parent_map = gcc_usb30_mock_utmi_map,
1550	.clkr.hw.init = &(struct clk_init_data) {
1551		.name = "usb30_mock_utmi_clk_src",
1552		.parent_data = gcc_usb30_mock_utmi_data,
1553		.num_parents = ARRAY_SIZE(gcc_usb30_mock_utmi_data),
1554		.ops = &clk_rcg2_ops,
1555	}
1556};
1557
1558static const struct parent_map gcc_usb3_aux_map[] = {
1559	{ P_XO, 0 },
1560	{ P_SLEEP_CLK, 6 },
1561};
1562
1563static const struct clk_parent_data gcc_usb3_aux_data[] = {
1564	{ .fw_name = "xo" },
1565	{ .fw_name = "sleep", .name = "sleep" },
1566};
1567
1568static const struct freq_tbl ftbl_usb3_aux_clk_src[] = {
1569	F(19200000, P_XO, 1, 0, 0),
1570	{ }
1571};
1572
1573static struct clk_rcg2 usb3_aux_clk_src = {
1574	.cmd_rcgr = 0x3f05c,
1575	.hid_width = 5,
1576	.mnd_width = 8,
1577	.freq_tbl = ftbl_usb3_aux_clk_src,
1578	.parent_map = gcc_usb3_aux_map,
1579	.clkr.hw.init = &(struct clk_init_data) {
1580		.name = "usb3_aux_clk_src",
1581		.parent_data = gcc_usb3_aux_data,
1582		.num_parents = ARRAY_SIZE(gcc_usb3_aux_data),
1583		.ops = &clk_rcg2_ops,
1584	}
1585};
1586
1587static const struct parent_map gcc_vcodec0_map[] = {
1588	{ P_XO, 0 },
1589	{ P_GPLL0, 1 },
1590	{ P_GPLL6, 2 },
1591	{ P_GPLL2, 3 },
1592	{ P_GPLL0_DIV2, 4 },
1593};
1594
1595static const struct clk_parent_data gcc_vcodec0_data[] = {
1596	{ .fw_name = "xo" },
1597	{ .hw = &gpll0.clkr.hw },
1598	{ .hw = &gpll6.clkr.hw },
1599	{ .hw = &gpll2.clkr.hw },
1600	{ .hw = &gpll0_early_div.hw },
1601};
1602
1603static const struct freq_tbl ftbl_vcodec0_clk_src[] = {
1604	F(114290000, P_GPLL0_DIV2, 3.5, 0, 0),
1605	F(228570000, P_GPLL0, 3.5, 0, 0),
1606	F(310000000, P_GPLL2, 3, 0, 0),
1607	F(360000000, P_GPLL6, 3, 0, 0),
1608	F(400000000, P_GPLL0, 2, 0, 0),
1609	F(465000000, P_GPLL2, 2, 0, 0),
1610	F(540000000, P_GPLL6, 2, 0, 0),
1611	{ }
1612};
1613
1614static struct clk_rcg2 vcodec0_clk_src = {
1615	.cmd_rcgr = 0x4c000,
1616	.hid_width = 5,
1617	.freq_tbl = ftbl_vcodec0_clk_src,
1618	.parent_map = gcc_vcodec0_map,
1619	.clkr.hw.init = &(struct clk_init_data) {
1620		.name = "vcodec0_clk_src",
1621		.parent_data = gcc_vcodec0_data,
1622		.num_parents = ARRAY_SIZE(gcc_vcodec0_data),
1623		.ops = &clk_rcg2_ops,
1624	}
1625};
1626
1627static const struct parent_map gcc_vfe_map[] = {
1628	{ P_XO, 0 },
1629	{ P_GPLL0, 1 },
1630	{ P_GPLL6, 2 },
1631	{ P_GPLL4, 3 },
1632	{ P_GPLL2, 4 },
1633	{ P_GPLL0_DIV2, 5 },
1634};
1635
1636static const struct clk_parent_data gcc_vfe_data[] = {
1637	{ .fw_name = "xo" },
1638	{ .hw = &gpll0.clkr.hw },
1639	{ .hw = &gpll6.clkr.hw },
1640	{ .hw = &gpll4.clkr.hw },
1641	{ .hw = &gpll2.clkr.hw },
1642	{ .hw = &gpll0_early_div.hw },
1643};
1644
1645static const struct freq_tbl ftbl_vfe_clk_src[] = {
1646	F(50000000, P_GPLL0_DIV2, 8, 0, 0),
1647	F(100000000, P_GPLL0_DIV2, 4, 0, 0),
1648	F(133330000, P_GPLL0, 6, 0, 0),
1649	F(160000000, P_GPLL0, 5, 0, 0),
1650	F(200000000, P_GPLL0, 4, 0, 0),
1651	F(266670000, P_GPLL0, 3, 0, 0),
1652	F(310000000, P_GPLL2, 3, 0, 0),
1653	F(400000000, P_GPLL0, 2, 0, 0),
1654	F(465000000, P_GPLL2, 2, 0, 0),
1655	{ }
1656};
1657
1658static struct clk_rcg2 vfe0_clk_src = {
1659	.cmd_rcgr = 0x58000,
1660	.hid_width = 5,
1661	.freq_tbl = ftbl_vfe_clk_src,
1662	.parent_map = gcc_vfe_map,
1663	.clkr.hw.init = &(struct clk_init_data) {
1664		.name = "vfe0_clk_src",
1665		.parent_data = gcc_vfe_data,
1666		.num_parents = ARRAY_SIZE(gcc_vfe_data),
1667		.ops = &clk_rcg2_ops,
1668	}
1669};
1670
1671static struct clk_rcg2 vfe1_clk_src = {
1672	.cmd_rcgr = 0x58054,
1673	.hid_width = 5,
1674	.freq_tbl = ftbl_vfe_clk_src,
1675	.parent_map = gcc_vfe_map,
1676	.clkr.hw.init = &(struct clk_init_data) {
1677		.name = "vfe1_clk_src",
1678		.parent_data = gcc_vfe_data,
1679		.num_parents = ARRAY_SIZE(gcc_vfe_data),
1680		.ops = &clk_rcg2_ops,
1681	}
1682};
1683
1684static const struct parent_map gcc_vsync_map[] = {
1685	{ P_XO, 0 },
1686	{ P_GPLL0, 2 },
1687};
1688
1689static const struct freq_tbl ftbl_vsync_clk_src[] = {
1690	F(19200000, P_XO, 1, 0, 0),
1691	{ }
1692};
1693
1694static struct clk_rcg2 vsync_clk_src = {
1695	.cmd_rcgr = 0x4d02c,
1696	.hid_width = 5,
1697	.freq_tbl = ftbl_vsync_clk_src,
1698	.parent_map = gcc_vsync_map,
1699	.clkr.hw.init = &(struct clk_init_data) {
1700		.name = "vsync_clk_src",
1701		.parent_data = gcc_esc_vsync_data,
1702		.num_parents = ARRAY_SIZE(gcc_esc_vsync_data),
1703		.ops = &clk_rcg2_ops,
1704	}
1705};
1706
1707static struct clk_branch gcc_apc0_droop_detector_gpll0_clk = {
1708	.halt_reg = 0x78004,
1709	.halt_check = BRANCH_HALT,
1710	.clkr = {
1711		.enable_reg = 0x78004,
1712		.enable_mask = BIT(0),
1713		.hw.init = &(struct clk_init_data) {
1714			.name = "gcc_apc0_droop_detector_gpll0_clk",
1715			.parent_hws = (const struct clk_hw*[]){
1716				&apc0_droop_detector_clk_src.clkr.hw,
1717			},
1718			.num_parents = 1,
1719			.ops = &clk_branch2_ops,
1720			.flags = CLK_SET_RATE_PARENT,
1721		}
1722	}
1723};
1724
1725static struct clk_branch gcc_apc1_droop_detector_gpll0_clk = {
1726	.halt_reg = 0x79004,
1727	.halt_check = BRANCH_HALT,
1728	.clkr = {
1729		.enable_reg = 0x79004,
1730		.enable_mask = BIT(0),
1731		.hw.init = &(struct clk_init_data) {
1732			.name = "gcc_apc1_droop_detector_gpll0_clk",
1733			.parent_hws = (const struct clk_hw*[]){
1734				&apc1_droop_detector_clk_src.clkr.hw,
1735			},
1736			.num_parents = 1,
1737			.ops = &clk_branch2_ops,
1738			.flags = CLK_SET_RATE_PARENT,
1739		}
1740	}
1741};
1742
1743static struct clk_branch gcc_apss_ahb_clk = {
1744	.halt_reg = 0x4601c,
1745	.halt_check = BRANCH_HALT_VOTED,
1746	.clkr = {
1747		.enable_reg = 0x45004,
1748		.enable_mask = BIT(14),
1749		.hw.init = &(struct clk_init_data) {
1750			.name = "gcc_apss_ahb_clk",
1751			.parent_hws = (const struct clk_hw*[]){
1752				&apss_ahb_clk_src.clkr.hw,
1753			},
1754			.num_parents = 1,
1755			.ops = &clk_branch2_ops,
1756			.flags = CLK_SET_RATE_PARENT,
1757		}
1758	}
1759};
1760
1761static struct clk_branch gcc_apss_axi_clk = {
1762	.halt_reg = 0x46020,
1763	.halt_check = BRANCH_HALT_VOTED,
1764	.clkr = {
1765		.enable_reg = 0x45004,
1766		.enable_mask = BIT(13),
1767		.hw.init = &(struct clk_init_data) {
1768			.name = "gcc_apss_axi_clk",
1769			.ops = &clk_branch2_ops,
1770		}
1771	}
1772};
1773
1774static struct clk_branch gcc_apss_tcu_async_clk = {
1775	.halt_reg = 0x12018,
1776	.halt_check = BRANCH_HALT_VOTED,
1777	.clkr = {
1778		.enable_reg = 0x4500c,
1779		.enable_mask = BIT(1),
1780		.hw.init = &(struct clk_init_data) {
1781			.name = "gcc_apss_tcu_async_clk",
1782			.ops = &clk_branch2_ops,
1783		}
1784	}
1785};
1786
1787static struct clk_branch gcc_bimc_gfx_clk = {
1788	.halt_reg = 0x59034,
1789	.halt_check = BRANCH_HALT,
1790	.clkr = {
1791		.enable_reg = 0x59034,
1792		.enable_mask = BIT(0),
1793		.hw.init = &(struct clk_init_data) {
1794			.name = "gcc_bimc_gfx_clk",
1795			.ops = &clk_branch2_ops,
1796		}
1797	}
1798};
1799
1800static struct clk_branch gcc_bimc_gpu_clk = {
1801	.halt_reg = 0x59030,
1802	.halt_check = BRANCH_HALT,
1803	.clkr = {
1804		.enable_reg = 0x59030,
1805		.enable_mask = BIT(0),
1806		.hw.init = &(struct clk_init_data) {
1807			.name = "gcc_bimc_gpu_clk",
1808			.ops = &clk_branch2_ops,
1809		}
1810	}
1811};
1812
1813static struct clk_branch gcc_blsp1_ahb_clk = {
1814	.halt_reg = 0x01008,
1815	.halt_check = BRANCH_HALT_VOTED,
1816	.clkr = {
1817		.enable_reg = 0x45004,
1818		.enable_mask = BIT(10),
1819		.hw.init = &(struct clk_init_data) {
1820			.name = "gcc_blsp1_ahb_clk",
1821			.ops = &clk_branch2_ops,
1822		}
1823	}
1824};
1825
1826static struct clk_branch gcc_blsp2_ahb_clk = {
1827	.halt_reg = 0x0b008,
1828	.halt_check = BRANCH_HALT_VOTED,
1829	.clkr = {
1830		.enable_reg = 0x45004,
1831		.enable_mask = BIT(20),
1832		.hw.init = &(struct clk_init_data) {
1833			.name = "gcc_blsp2_ahb_clk",
1834			.ops = &clk_branch2_ops,
1835		}
1836	}
1837};
1838
1839static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1840	.halt_reg = 0x02008,
1841	.halt_check = BRANCH_HALT,
1842	.clkr = {
1843		.enable_reg = 0x02008,
1844		.enable_mask = BIT(0),
1845		.hw.init = &(struct clk_init_data) {
1846			.name = "gcc_blsp1_qup1_i2c_apps_clk",
1847			.parent_hws = (const struct clk_hw*[]){
1848				&blsp1_qup1_i2c_apps_clk_src.clkr.hw,
1849			},
1850			.num_parents = 1,
1851			.ops = &clk_branch2_ops,
1852			.flags = CLK_SET_RATE_PARENT,
1853		}
1854	}
1855};
1856
1857static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1858	.halt_reg = 0x03010,
1859	.halt_check = BRANCH_HALT,
1860	.clkr = {
1861		.enable_reg = 0x03010,
1862		.enable_mask = BIT(0),
1863		.hw.init = &(struct clk_init_data) {
1864			.name = "gcc_blsp1_qup2_i2c_apps_clk",
1865			.parent_hws = (const struct clk_hw*[]){
1866				&blsp1_qup2_i2c_apps_clk_src.clkr.hw,
1867			},
1868			.num_parents = 1,
1869			.ops = &clk_branch2_ops,
1870			.flags = CLK_SET_RATE_PARENT,
1871		}
1872	}
1873};
1874
1875static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1876	.halt_reg = 0x04020,
1877	.halt_check = BRANCH_HALT,
1878	.clkr = {
1879		.enable_reg = 0x04020,
1880		.enable_mask = BIT(0),
1881		.hw.init = &(struct clk_init_data) {
1882			.name = "gcc_blsp1_qup3_i2c_apps_clk",
1883			.parent_hws = (const struct clk_hw*[]){
1884				&blsp1_qup3_i2c_apps_clk_src.clkr.hw,
1885			},
1886			.num_parents = 1,
1887			.ops = &clk_branch2_ops,
1888			.flags = CLK_SET_RATE_PARENT,
1889		}
1890	}
1891};
1892
1893static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1894	.halt_reg = 0x05020,
1895	.halt_check = BRANCH_HALT,
1896	.clkr = {
1897		.enable_reg = 0x05020,
1898		.enable_mask = BIT(0),
1899		.hw.init = &(struct clk_init_data) {
1900			.name = "gcc_blsp1_qup4_i2c_apps_clk",
1901			.parent_hws = (const struct clk_hw*[]){
1902				&blsp1_qup4_i2c_apps_clk_src.clkr.hw,
1903			},
1904			.num_parents = 1,
1905			.ops = &clk_branch2_ops,
1906			.flags = CLK_SET_RATE_PARENT,
1907		}
1908	}
1909};
1910
1911static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
1912	.halt_reg = 0x0c008,
1913	.halt_check = BRANCH_HALT,
1914	.clkr = {
1915		.enable_reg = 0x0c008,
1916		.enable_mask = BIT(0),
1917		.hw.init = &(struct clk_init_data) {
1918			.name = "gcc_blsp2_qup1_i2c_apps_clk",
1919			.parent_hws = (const struct clk_hw*[]){
1920				&blsp2_qup1_i2c_apps_clk_src.clkr.hw,
1921			},
1922			.num_parents = 1,
1923			.ops = &clk_branch2_ops,
1924			.flags = CLK_SET_RATE_PARENT,
1925		}
1926	}
1927};
1928
1929static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
1930	.halt_reg = 0x0d010,
1931	.halt_check = BRANCH_HALT,
1932	.clkr = {
1933		.enable_reg = 0x0d010,
1934		.enable_mask = BIT(0),
1935		.hw.init = &(struct clk_init_data) {
1936			.name = "gcc_blsp2_qup2_i2c_apps_clk",
1937			.parent_hws = (const struct clk_hw*[]){
1938				&blsp2_qup2_i2c_apps_clk_src.clkr.hw,
1939			},
1940			.num_parents = 1,
1941			.ops = &clk_branch2_ops,
1942			.flags = CLK_SET_RATE_PARENT,
1943		}
1944	}
1945};
1946
1947static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
1948	.halt_reg = 0x0f020,
1949	.halt_check = BRANCH_HALT,
1950	.clkr = {
1951		.enable_reg = 0x0f020,
1952		.enable_mask = BIT(0),
1953		.hw.init = &(struct clk_init_data) {
1954			.name = "gcc_blsp2_qup3_i2c_apps_clk",
1955			.parent_hws = (const struct clk_hw*[]){
1956				&blsp2_qup3_i2c_apps_clk_src.clkr.hw,
1957			},
1958			.num_parents = 1,
1959			.ops = &clk_branch2_ops,
1960			.flags = CLK_SET_RATE_PARENT,
1961		}
1962	}
1963};
1964
1965static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
1966	.halt_reg = 0x18020,
1967	.halt_check = BRANCH_HALT,
1968	.clkr = {
1969		.enable_reg = 0x18020,
1970		.enable_mask = BIT(0),
1971		.hw.init = &(struct clk_init_data) {
1972			.name = "gcc_blsp2_qup4_i2c_apps_clk",
1973			.parent_hws = (const struct clk_hw*[]){
1974				&blsp2_qup4_i2c_apps_clk_src.clkr.hw,
1975			},
1976			.num_parents = 1,
1977			.ops = &clk_branch2_ops,
1978			.flags = CLK_SET_RATE_PARENT,
1979		}
1980	}
1981};
1982
1983static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1984	.halt_reg = 0x02004,
1985	.halt_check = BRANCH_HALT,
1986	.clkr = {
1987		.enable_reg = 0x02004,
1988		.enable_mask = BIT(0),
1989		.hw.init = &(struct clk_init_data) {
1990			.name = "gcc_blsp1_qup1_spi_apps_clk",
1991			.parent_hws = (const struct clk_hw*[]){
1992				&blsp1_qup1_spi_apps_clk_src.clkr.hw,
1993			},
1994			.num_parents = 1,
1995			.ops = &clk_branch2_ops,
1996			.flags = CLK_SET_RATE_PARENT,
1997		}
1998	}
1999};
2000
2001static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
2002	.halt_reg = 0x0300c,
2003	.halt_check = BRANCH_HALT,
2004	.clkr = {
2005		.enable_reg = 0x0300c,
2006		.enable_mask = BIT(0),
2007		.hw.init = &(struct clk_init_data) {
2008			.name = "gcc_blsp1_qup2_spi_apps_clk",
2009			.parent_hws = (const struct clk_hw*[]){
2010				&blsp1_qup2_spi_apps_clk_src.clkr.hw,
2011			},
2012			.num_parents = 1,
2013			.ops = &clk_branch2_ops,
2014			.flags = CLK_SET_RATE_PARENT,
2015		}
2016	}
2017};
2018
2019static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
2020	.halt_reg = 0x0401c,
2021	.halt_check = BRANCH_HALT,
2022	.clkr = {
2023		.enable_reg = 0x0401c,
2024		.enable_mask = BIT(0),
2025		.hw.init = &(struct clk_init_data) {
2026			.name = "gcc_blsp1_qup3_spi_apps_clk",
2027			.parent_hws = (const struct clk_hw*[]){
2028				&blsp1_qup3_spi_apps_clk_src.clkr.hw,
2029			},
2030			.num_parents = 1,
2031			.ops = &clk_branch2_ops,
2032			.flags = CLK_SET_RATE_PARENT,
2033		}
2034	}
2035};
2036
2037static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
2038	.halt_reg = 0x0501c,
2039	.halt_check = BRANCH_HALT,
2040	.clkr = {
2041		.enable_reg = 0x0501c,
2042		.enable_mask = BIT(0),
2043		.hw.init = &(struct clk_init_data) {
2044			.name = "gcc_blsp1_qup4_spi_apps_clk",
2045			.parent_hws = (const struct clk_hw*[]){
2046				&blsp1_qup4_spi_apps_clk_src.clkr.hw,
2047			},
2048			.num_parents = 1,
2049			.ops = &clk_branch2_ops,
2050			.flags = CLK_SET_RATE_PARENT,
2051		}
2052	}
2053};
2054
2055static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
2056	.halt_reg = 0x0c004,
2057	.halt_check = BRANCH_HALT,
2058	.clkr = {
2059		.enable_reg = 0x0c004,
2060		.enable_mask = BIT(0),
2061		.hw.init = &(struct clk_init_data) {
2062			.name = "gcc_blsp2_qup1_spi_apps_clk",
2063			.parent_hws = (const struct clk_hw*[]){
2064				&blsp2_qup1_spi_apps_clk_src.clkr.hw,
2065			},
2066			.num_parents = 1,
2067			.ops = &clk_branch2_ops,
2068			.flags = CLK_SET_RATE_PARENT,
2069		}
2070	}
2071};
2072
2073static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
2074	.halt_reg = 0x0d00c,
2075	.halt_check = BRANCH_HALT,
2076	.clkr = {
2077		.enable_reg = 0x0d00c,
2078		.enable_mask = BIT(0),
2079		.hw.init = &(struct clk_init_data) {
2080			.name = "gcc_blsp2_qup2_spi_apps_clk",
2081			.parent_hws = (const struct clk_hw*[]){
2082				&blsp2_qup2_spi_apps_clk_src.clkr.hw,
2083			},
2084			.num_parents = 1,
2085			.ops = &clk_branch2_ops,
2086			.flags = CLK_SET_RATE_PARENT,
2087		}
2088	}
2089};
2090
2091static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
2092	.halt_reg = 0x0f01c,
2093	.halt_check = BRANCH_HALT,
2094	.clkr = {
2095		.enable_reg = 0x0f01c,
2096		.enable_mask = BIT(0),
2097		.hw.init = &(struct clk_init_data) {
2098			.name = "gcc_blsp2_qup3_spi_apps_clk",
2099			.parent_hws = (const struct clk_hw*[]){
2100				&blsp2_qup3_spi_apps_clk_src.clkr.hw,
2101			},
2102			.num_parents = 1,
2103			.ops = &clk_branch2_ops,
2104			.flags = CLK_SET_RATE_PARENT,
2105		}
2106	}
2107};
2108
2109static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
2110	.halt_reg = 0x1801c,
2111	.halt_check = BRANCH_HALT,
2112	.clkr = {
2113		.enable_reg = 0x1801c,
2114		.enable_mask = BIT(0),
2115		.hw.init = &(struct clk_init_data) {
2116			.name = "gcc_blsp2_qup4_spi_apps_clk",
2117			.parent_hws = (const struct clk_hw*[]){
2118				&blsp2_qup4_spi_apps_clk_src.clkr.hw,
2119			},
2120			.num_parents = 1,
2121			.ops = &clk_branch2_ops,
2122			.flags = CLK_SET_RATE_PARENT,
2123		}
2124	}
2125};
2126
2127static struct clk_branch gcc_blsp1_uart1_apps_clk = {
2128	.halt_reg = 0x0203c,
2129	.halt_check = BRANCH_HALT,
2130	.clkr = {
2131		.enable_reg = 0x0203c,
2132		.enable_mask = BIT(0),
2133		.hw.init = &(struct clk_init_data) {
2134			.name = "gcc_blsp1_uart1_apps_clk",
2135			.parent_hws = (const struct clk_hw*[]){
2136				&blsp1_uart1_apps_clk_src.clkr.hw,
2137			},
2138			.num_parents = 1,
2139			.ops = &clk_branch2_ops,
2140			.flags = CLK_SET_RATE_PARENT,
2141		}
2142	}
2143};
2144
2145static struct clk_branch gcc_blsp1_uart2_apps_clk = {
2146	.halt_reg = 0x0302c,
2147	.halt_check = BRANCH_HALT,
2148	.clkr = {
2149		.enable_reg = 0x0302c,
2150		.enable_mask = BIT(0),
2151		.hw.init = &(struct clk_init_data) {
2152			.name = "gcc_blsp1_uart2_apps_clk",
2153			.parent_hws = (const struct clk_hw*[]){
2154				&blsp1_uart2_apps_clk_src.clkr.hw,
2155			},
2156			.num_parents = 1,
2157			.ops = &clk_branch2_ops,
2158			.flags = CLK_SET_RATE_PARENT,
2159		}
2160	}
2161};
2162
2163static struct clk_branch gcc_blsp2_uart1_apps_clk = {
2164	.halt_reg = 0x0c03c,
2165	.halt_check = BRANCH_HALT,
2166	.clkr = {
2167		.enable_reg = 0x0c03c,
2168		.enable_mask = BIT(0),
2169		.hw.init = &(struct clk_init_data) {
2170			.name = "gcc_blsp2_uart1_apps_clk",
2171			.parent_hws = (const struct clk_hw*[]){
2172				&blsp2_uart1_apps_clk_src.clkr.hw,
2173			},
2174			.num_parents = 1,
2175			.ops = &clk_branch2_ops,
2176			.flags = CLK_SET_RATE_PARENT,
2177		}
2178	}
2179};
2180
2181static struct clk_branch gcc_blsp2_uart2_apps_clk = {
2182	.halt_reg = 0x0d02c,
2183	.halt_check = BRANCH_HALT,
2184	.clkr = {
2185		.enable_reg = 0x0d02c,
2186		.enable_mask = BIT(0),
2187		.hw.init = &(struct clk_init_data) {
2188			.name = "gcc_blsp2_uart2_apps_clk",
2189			.parent_hws = (const struct clk_hw*[]){
2190				&blsp2_uart2_apps_clk_src.clkr.hw,
2191			},
2192			.num_parents = 1,
2193			.ops = &clk_branch2_ops,
2194			.flags = CLK_SET_RATE_PARENT,
2195		}
2196	}
2197};
2198
2199static struct clk_branch gcc_boot_rom_ahb_clk = {
2200	.halt_reg = 0x1300c,
2201	.halt_check = BRANCH_HALT_VOTED,
2202	.clkr = {
2203		.enable_reg = 0x45004,
2204		.enable_mask = BIT(7),
2205		.hw.init = &(struct clk_init_data) {
2206			.name = "gcc_boot_rom_ahb_clk",
2207			.ops = &clk_branch2_ops,
2208		}
2209	}
2210};
2211
2212static struct clk_branch gcc_camss_ahb_clk = {
2213	.halt_reg = 0x56004,
2214	.halt_check = BRANCH_HALT,
2215	.clkr = {
2216		.enable_reg = 0x56004,
2217		.enable_mask = BIT(0),
2218		.hw.init = &(struct clk_init_data) {
2219			.name = "gcc_camss_ahb_clk",
2220			.ops = &clk_branch2_ops,
2221		}
2222	}
2223};
2224
2225static struct clk_branch gcc_camss_cci_ahb_clk = {
2226	.halt_reg = 0x5101c,
2227	.halt_check = BRANCH_HALT,
2228	.clkr = {
2229		.enable_reg = 0x5101c,
2230		.enable_mask = BIT(0),
2231		.hw.init = &(struct clk_init_data) {
2232			.name = "gcc_camss_cci_ahb_clk",
2233			.parent_hws = (const struct clk_hw*[]){
2234				&camss_top_ahb_clk_src.clkr.hw,
2235			},
2236			.num_parents = 1,
2237			.ops = &clk_branch2_ops,
2238			.flags = CLK_SET_RATE_PARENT,
2239		}
2240	}
2241};
2242
2243static struct clk_branch gcc_camss_cci_clk = {
2244	.halt_reg = 0x51018,
2245	.halt_check = BRANCH_HALT,
2246	.clkr = {
2247		.enable_reg = 0x51018,
2248		.enable_mask = BIT(0),
2249		.hw.init = &(struct clk_init_data) {
2250			.name = "gcc_camss_cci_clk",
2251			.parent_hws = (const struct clk_hw*[]){
2252				&cci_clk_src.clkr.hw,
2253			},
2254			.num_parents = 1,
2255			.ops = &clk_branch2_ops,
2256			.flags = CLK_SET_RATE_PARENT,
2257		}
2258	}
2259};
2260
2261static struct clk_branch gcc_camss_cpp_ahb_clk = {
2262	.halt_reg = 0x58040,
2263	.halt_check = BRANCH_HALT,
2264	.clkr = {
2265		.enable_reg = 0x58040,
2266		.enable_mask = BIT(0),
2267		.hw.init = &(struct clk_init_data) {
2268			.name = "gcc_camss_cpp_ahb_clk",
2269			.parent_hws = (const struct clk_hw*[]){
2270				&camss_top_ahb_clk_src.clkr.hw,
2271			},
2272			.num_parents = 1,
2273			.ops = &clk_branch2_ops,
2274			.flags = CLK_SET_RATE_PARENT,
2275		}
2276	}
2277};
2278
2279static struct clk_branch gcc_camss_cpp_axi_clk = {
2280	.halt_reg = 0x58064,
2281	.halt_check = BRANCH_HALT,
2282	.clkr = {
2283		.enable_reg = 0x58064,
2284		.enable_mask = BIT(0),
2285		.hw.init = &(struct clk_init_data) {
2286			.name = "gcc_camss_cpp_axi_clk",
2287			.ops = &clk_branch2_ops,
2288		}
2289	}
2290};
2291
2292static struct clk_branch gcc_camss_cpp_clk = {
2293	.halt_reg = 0x5803c,
2294	.halt_check = BRANCH_HALT,
2295	.clkr = {
2296		.enable_reg = 0x5803c,
2297		.enable_mask = BIT(0),
2298		.hw.init = &(struct clk_init_data) {
2299			.name = "gcc_camss_cpp_clk",
2300			.parent_hws = (const struct clk_hw*[]){
2301				&cpp_clk_src.clkr.hw,
2302			},
2303			.num_parents = 1,
2304			.ops = &clk_branch2_ops,
2305			.flags = CLK_SET_RATE_PARENT,
2306		}
2307	}
2308};
2309
2310static struct clk_branch gcc_camss_csi0_ahb_clk = {
2311	.halt_reg = 0x4e040,
2312	.halt_check = BRANCH_HALT,
2313	.clkr = {
2314		.enable_reg = 0x4e040,
2315		.enable_mask = BIT(0),
2316		.hw.init = &(struct clk_init_data) {
2317			.name = "gcc_camss_csi0_ahb_clk",
2318			.parent_hws = (const struct clk_hw*[]){
2319				&camss_top_ahb_clk_src.clkr.hw,
2320			},
2321			.num_parents = 1,
2322			.ops = &clk_branch2_ops,
2323			.flags = CLK_SET_RATE_PARENT,
2324		}
2325	}
2326};
2327
2328static struct clk_branch gcc_camss_csi1_ahb_clk = {
2329	.halt_reg = 0x4f040,
2330	.halt_check = BRANCH_HALT,
2331	.clkr = {
2332		.enable_reg = 0x4f040,
2333		.enable_mask = BIT(0),
2334		.hw.init = &(struct clk_init_data) {
2335			.name = "gcc_camss_csi1_ahb_clk",
2336			.parent_hws = (const struct clk_hw*[]){
2337				&camss_top_ahb_clk_src.clkr.hw,
2338			},
2339			.num_parents = 1,
2340			.ops = &clk_branch2_ops,
2341			.flags = CLK_SET_RATE_PARENT,
2342		}
2343	}
2344};
2345
2346static struct clk_branch gcc_camss_csi2_ahb_clk = {
2347	.halt_reg = 0x3c040,
2348	.halt_check = BRANCH_HALT,
2349	.clkr = {
2350		.enable_reg = 0x3c040,
2351		.enable_mask = BIT(0),
2352		.hw.init = &(struct clk_init_data) {
2353			.name = "gcc_camss_csi2_ahb_clk",
2354			.parent_hws = (const struct clk_hw*[]){
2355				&camss_top_ahb_clk_src.clkr.hw,
2356			},
2357			.num_parents = 1,
2358			.ops = &clk_branch2_ops,
2359			.flags = CLK_SET_RATE_PARENT,
2360		}
2361	}
2362};
2363
2364static struct clk_branch gcc_camss_csi0_clk = {
2365	.halt_reg = 0x4e03c,
2366	.halt_check = BRANCH_HALT,
2367	.clkr = {
2368		.enable_reg = 0x4e03c,
2369		.enable_mask = BIT(0),
2370		.hw.init = &(struct clk_init_data) {
2371			.name = "gcc_camss_csi0_clk",
2372			.parent_hws = (const struct clk_hw*[]){
2373				&csi0_clk_src.clkr.hw,
2374			},
2375			.num_parents = 1,
2376			.ops = &clk_branch2_ops,
2377			.flags = CLK_SET_RATE_PARENT,
2378		}
2379	}
2380};
2381
2382static struct clk_branch gcc_camss_csi1_clk = {
2383	.halt_reg = 0x4f03c,
2384	.halt_check = BRANCH_HALT,
2385	.clkr = {
2386		.enable_reg = 0x4f03c,
2387		.enable_mask = BIT(0),
2388		.hw.init = &(struct clk_init_data) {
2389			.name = "gcc_camss_csi1_clk",
2390			.parent_hws = (const struct clk_hw*[]){
2391				&csi1_clk_src.clkr.hw,
2392			},
2393			.num_parents = 1,
2394			.ops = &clk_branch2_ops,
2395			.flags = CLK_SET_RATE_PARENT,
2396		}
2397	}
2398};
2399
2400static struct clk_branch gcc_camss_csi2_clk = {
2401	.halt_reg = 0x3c03c,
2402	.halt_check = BRANCH_HALT,
2403	.clkr = {
2404		.enable_reg = 0x3c03c,
2405		.enable_mask = BIT(0),
2406		.hw.init = &(struct clk_init_data) {
2407			.name = "gcc_camss_csi2_clk",
2408			.parent_hws = (const struct clk_hw*[]){
2409				&csi2_clk_src.clkr.hw,
2410			},
2411			.num_parents = 1,
2412			.ops = &clk_branch2_ops,
2413			.flags = CLK_SET_RATE_PARENT,
2414		}
2415	}
2416};
2417
2418static struct clk_branch gcc_camss_csi0_csiphy_3p_clk = {
2419	.halt_reg = 0x58090,
2420	.halt_check = BRANCH_HALT,
2421	.clkr = {
2422		.enable_reg = 0x58090,
2423		.enable_mask = BIT(0),
2424		.hw.init = &(struct clk_init_data) {
2425			.name = "gcc_camss_csi0_csiphy_3p_clk",
2426			.parent_hws = (const struct clk_hw*[]){
2427				&csi0p_clk_src.clkr.hw,
2428			},
2429			.num_parents = 1,
2430			.ops = &clk_branch2_ops,
2431			.flags = CLK_SET_RATE_PARENT,
2432		}
2433	}
2434};
2435
2436static struct clk_branch gcc_camss_csi1_csiphy_3p_clk = {
2437	.halt_reg = 0x580a0,
2438	.halt_check = BRANCH_HALT,
2439	.clkr = {
2440		.enable_reg = 0x580a0,
2441		.enable_mask = BIT(0),
2442		.hw.init = &(struct clk_init_data) {
2443			.name = "gcc_camss_csi1_csiphy_3p_clk",
2444			.parent_hws = (const struct clk_hw*[]){
2445				&csi1p_clk_src.clkr.hw,
2446			},
2447			.num_parents = 1,
2448			.ops = &clk_branch2_ops,
2449			.flags = CLK_SET_RATE_PARENT,
2450		}
2451	}
2452};
2453
2454static struct clk_branch gcc_camss_csi2_csiphy_3p_clk = {
2455	.halt_reg = 0x580b0,
2456	.halt_check = BRANCH_HALT,
2457	.clkr = {
2458		.enable_reg = 0x580b0,
2459		.enable_mask = BIT(0),
2460		.hw.init = &(struct clk_init_data) {
2461			.name = "gcc_camss_csi2_csiphy_3p_clk",
2462			.parent_hws = (const struct clk_hw*[]){
2463				&csi2p_clk_src.clkr.hw,
2464			},
2465			.num_parents = 1,
2466			.ops = &clk_branch2_ops,
2467			.flags = CLK_SET_RATE_PARENT,
2468		}
2469	}
2470};
2471
2472static struct clk_branch gcc_camss_csi0phy_clk = {
2473	.halt_reg = 0x4e048,
2474	.halt_check = BRANCH_HALT,
2475	.clkr = {
2476		.enable_reg = 0x4e048,
2477		.enable_mask = BIT(0),
2478		.hw.init = &(struct clk_init_data) {
2479			.name = "gcc_camss_csi0phy_clk",
2480			.parent_hws = (const struct clk_hw*[]){
2481				&csi0_clk_src.clkr.hw,
2482			},
2483			.num_parents = 1,
2484			.ops = &clk_branch2_ops,
2485			.flags = CLK_SET_RATE_PARENT,
2486		}
2487	}
2488};
2489
2490static struct clk_branch gcc_camss_csi1phy_clk = {
2491	.halt_reg = 0x4f048,
2492	.halt_check = BRANCH_HALT,
2493	.clkr = {
2494		.enable_reg = 0x4f048,
2495		.enable_mask = BIT(0),
2496		.hw.init = &(struct clk_init_data) {
2497			.name = "gcc_camss_csi1phy_clk",
2498			.parent_hws = (const struct clk_hw*[]){
2499				&csi1_clk_src.clkr.hw,
2500			},
2501			.num_parents = 1,
2502			.ops = &clk_branch2_ops,
2503			.flags = CLK_SET_RATE_PARENT,
2504		}
2505	}
2506};
2507
2508static struct clk_branch gcc_camss_csi2phy_clk = {
2509	.halt_reg = 0x3c048,
2510	.halt_check = BRANCH_HALT,
2511	.clkr = {
2512		.enable_reg = 0x3c048,
2513		.enable_mask = BIT(0),
2514		.hw.init = &(struct clk_init_data) {
2515			.name = "gcc_camss_csi2phy_clk",
2516			.parent_hws = (const struct clk_hw*[]){
2517				&csi2_clk_src.clkr.hw,
2518			},
2519			.num_parents = 1,
2520			.ops = &clk_branch2_ops,
2521			.flags = CLK_SET_RATE_PARENT,
2522		}
2523	}
2524};
2525
2526static struct clk_branch gcc_camss_csi0phytimer_clk = {
2527	.halt_reg = 0x4e01c,
2528	.halt_check = BRANCH_HALT,
2529	.clkr = {
2530		.enable_reg = 0x4e01c,
2531		.enable_mask = BIT(0),
2532		.hw.init = &(struct clk_init_data) {
2533			.name = "gcc_camss_csi0phytimer_clk",
2534			.parent_hws = (const struct clk_hw*[]){
2535				&csi0phytimer_clk_src.clkr.hw,
2536			},
2537			.num_parents = 1,
2538			.ops = &clk_branch2_ops,
2539			.flags = CLK_SET_RATE_PARENT,
2540		}
2541	}
2542};
2543
2544static struct clk_branch gcc_camss_csi1phytimer_clk = {
2545	.halt_reg = 0x4f01c,
2546	.halt_check = BRANCH_HALT,
2547	.clkr = {
2548		.enable_reg = 0x4f01c,
2549		.enable_mask = BIT(0),
2550		.hw.init = &(struct clk_init_data) {
2551			.name = "gcc_camss_csi1phytimer_clk",
2552			.parent_hws = (const struct clk_hw*[]){
2553				&csi1phytimer_clk_src.clkr.hw,
2554			},
2555			.num_parents = 1,
2556			.ops = &clk_branch2_ops,
2557			.flags = CLK_SET_RATE_PARENT,
2558		}
2559	}
2560};
2561
2562static struct clk_branch gcc_camss_csi2phytimer_clk = {
2563	.halt_reg = 0x4f068,
2564	.halt_check = BRANCH_HALT,
2565	.clkr = {
2566		.enable_reg = 0x4f068,
2567		.enable_mask = BIT(0),
2568		.hw.init = &(struct clk_init_data) {
2569			.name = "gcc_camss_csi2phytimer_clk",
2570			.parent_hws = (const struct clk_hw*[]){
2571				&csi2phytimer_clk_src.clkr.hw,
2572			},
2573			.num_parents = 1,
2574			.ops = &clk_branch2_ops,
2575			.flags = CLK_SET_RATE_PARENT,
2576		}
2577	}
2578};
2579
2580static struct clk_branch gcc_camss_csi0pix_clk = {
2581	.halt_reg = 0x4e058,
2582	.halt_check = BRANCH_HALT,
2583	.clkr = {
2584		.enable_reg = 0x4e058,
2585		.enable_mask = BIT(0),
2586		.hw.init = &(struct clk_init_data) {
2587			.name = "gcc_camss_csi0pix_clk",
2588			.parent_hws = (const struct clk_hw*[]){
2589				&csi0_clk_src.clkr.hw,
2590			},
2591			.num_parents = 1,
2592			.ops = &clk_branch2_ops,
2593			.flags = CLK_SET_RATE_PARENT,
2594		}
2595	}
2596};
2597
2598static struct clk_branch gcc_camss_csi1pix_clk = {
2599	.halt_reg = 0x4f058,
2600	.halt_check = BRANCH_HALT,
2601	.clkr = {
2602		.enable_reg = 0x4f058,
2603		.enable_mask = BIT(0),
2604		.hw.init = &(struct clk_init_data) {
2605			.name = "gcc_camss_csi1pix_clk",
2606			.parent_hws = (const struct clk_hw*[]){
2607				&csi1_clk_src.clkr.hw,
2608			},
2609			.num_parents = 1,
2610			.ops = &clk_branch2_ops,
2611			.flags = CLK_SET_RATE_PARENT,
2612		}
2613	}
2614};
2615
2616static struct clk_branch gcc_camss_csi2pix_clk = {
2617	.halt_reg = 0x3c058,
2618	.halt_check = BRANCH_HALT,
2619	.clkr = {
2620		.enable_reg = 0x3c058,
2621		.enable_mask = BIT(0),
2622		.hw.init = &(struct clk_init_data) {
2623			.name = "gcc_camss_csi2pix_clk",
2624			.parent_hws = (const struct clk_hw*[]){
2625				&csi2_clk_src.clkr.hw,
2626			},
2627			.num_parents = 1,
2628			.ops = &clk_branch2_ops,
2629			.flags = CLK_SET_RATE_PARENT,
2630		}
2631	}
2632};
2633
2634static struct clk_branch gcc_camss_csi0rdi_clk = {
2635	.halt_reg = 0x4e050,
2636	.halt_check = BRANCH_HALT,
2637	.clkr = {
2638		.enable_reg = 0x4e050,
2639		.enable_mask = BIT(0),
2640		.hw.init = &(struct clk_init_data) {
2641			.name = "gcc_camss_csi0rdi_clk",
2642			.parent_hws = (const struct clk_hw*[]){
2643				&csi0_clk_src.clkr.hw,
2644			},
2645			.num_parents = 1,
2646			.ops = &clk_branch2_ops,
2647			.flags = CLK_SET_RATE_PARENT,
2648		}
2649	}
2650};
2651
2652static struct clk_branch gcc_camss_csi1rdi_clk = {
2653	.halt_reg = 0x4f050,
2654	.halt_check = BRANCH_HALT,
2655	.clkr = {
2656		.enable_reg = 0x4f050,
2657		.enable_mask = BIT(0),
2658		.hw.init = &(struct clk_init_data) {
2659			.name = "gcc_camss_csi1rdi_clk",
2660			.parent_hws = (const struct clk_hw*[]){
2661				&csi1_clk_src.clkr.hw,
2662			},
2663			.num_parents = 1,
2664			.ops = &clk_branch2_ops,
2665			.flags = CLK_SET_RATE_PARENT,
2666		}
2667	}
2668};
2669
2670static struct clk_branch gcc_camss_csi2rdi_clk = {
2671	.halt_reg = 0x3c050,
2672	.halt_check = BRANCH_HALT,
2673	.clkr = {
2674		.enable_reg = 0x3c050,
2675		.enable_mask = BIT(0),
2676		.hw.init = &(struct clk_init_data) {
2677			.name = "gcc_camss_csi2rdi_clk",
2678			.parent_hws = (const struct clk_hw*[]){
2679				&csi2_clk_src.clkr.hw,
2680			},
2681			.num_parents = 1,
2682			.ops = &clk_branch2_ops,
2683			.flags = CLK_SET_RATE_PARENT,
2684		}
2685	}
2686};
2687
2688static struct clk_branch gcc_camss_csi_vfe0_clk = {
2689	.halt_reg = 0x58050,
2690	.halt_check = BRANCH_HALT,
2691	.clkr = {
2692		.enable_reg = 0x58050,
2693		.enable_mask = BIT(0),
2694		.hw.init = &(struct clk_init_data) {
2695			.name = "gcc_camss_csi_vfe0_clk",
2696			.parent_hws = (const struct clk_hw*[]){
2697				&vfe0_clk_src.clkr.hw,
2698			},
2699			.num_parents = 1,
2700			.ops = &clk_branch2_ops,
2701			.flags = CLK_SET_RATE_PARENT,
2702		}
2703	}
2704};
2705
2706static struct clk_branch gcc_camss_csi_vfe1_clk = {
2707	.halt_reg = 0x58074,
2708	.halt_check = BRANCH_HALT,
2709	.clkr = {
2710		.enable_reg = 0x58074,
2711		.enable_mask = BIT(0),
2712		.hw.init = &(struct clk_init_data) {
2713			.name = "gcc_camss_csi_vfe1_clk",
2714			.parent_hws = (const struct clk_hw*[]){
2715				&vfe1_clk_src.clkr.hw,
2716			},
2717			.num_parents = 1,
2718			.ops = &clk_branch2_ops,
2719			.flags = CLK_SET_RATE_PARENT,
2720		}
2721	}
2722};
2723
2724static struct clk_branch gcc_camss_gp0_clk = {
2725	.halt_reg = 0x54018,
2726	.halt_check = BRANCH_HALT,
2727	.clkr = {
2728		.enable_reg = 0x54018,
2729		.enable_mask = BIT(0),
2730		.hw.init = &(struct clk_init_data) {
2731			.name = "gcc_camss_gp0_clk",
2732			.parent_hws = (const struct clk_hw*[]){
2733				&camss_gp0_clk_src.clkr.hw,
2734			},
2735			.num_parents = 1,
2736			.ops = &clk_branch2_ops,
2737			.flags = CLK_SET_RATE_PARENT,
2738		}
2739	}
2740};
2741
2742static struct clk_branch gcc_camss_gp1_clk = {
2743	.halt_reg = 0x55018,
2744	.halt_check = BRANCH_HALT,
2745	.clkr = {
2746		.enable_reg = 0x55018,
2747		.enable_mask = BIT(0),
2748		.hw.init = &(struct clk_init_data) {
2749			.name = "gcc_camss_gp1_clk",
2750			.parent_hws = (const struct clk_hw*[]){
2751				&camss_gp1_clk_src.clkr.hw,
2752			},
2753			.num_parents = 1,
2754			.ops = &clk_branch2_ops,
2755			.flags = CLK_SET_RATE_PARENT,
2756		}
2757	}
2758};
2759
2760static struct clk_branch gcc_camss_ispif_ahb_clk = {
2761	.halt_reg = 0x50004,
2762	.halt_check = BRANCH_HALT,
2763	.clkr = {
2764		.enable_reg = 0x50004,
2765		.enable_mask = BIT(0),
2766		.hw.init = &(struct clk_init_data) {
2767			.name = "gcc_camss_ispif_ahb_clk",
2768			.parent_hws = (const struct clk_hw*[]){
2769				&camss_top_ahb_clk_src.clkr.hw,
2770			},
2771			.num_parents = 1,
2772			.ops = &clk_branch2_ops,
2773			.flags = CLK_SET_RATE_PARENT,
2774		}
2775	}
2776};
2777
2778static struct clk_branch gcc_camss_jpeg0_clk = {
2779	.halt_reg = 0x57020,
2780	.halt_check = BRANCH_HALT,
2781	.clkr = {
2782		.enable_reg = 0x57020,
2783		.enable_mask = BIT(0),
2784		.hw.init = &(struct clk_init_data) {
2785			.name = "gcc_camss_jpeg0_clk",
2786			.parent_hws = (const struct clk_hw*[]){
2787				&jpeg0_clk_src.clkr.hw,
2788			},
2789			.num_parents = 1,
2790			.ops = &clk_branch2_ops,
2791			.flags = CLK_SET_RATE_PARENT,
2792		}
2793	}
2794};
2795
2796static struct clk_branch gcc_camss_jpeg_ahb_clk = {
2797	.halt_reg = 0x57024,
2798	.halt_check = BRANCH_HALT,
2799	.clkr = {
2800		.enable_reg = 0x57024,
2801		.enable_mask = BIT(0),
2802		.hw.init = &(struct clk_init_data) {
2803			.name = "gcc_camss_jpeg_ahb_clk",
2804			.parent_hws = (const struct clk_hw*[]){
2805				&camss_top_ahb_clk_src.clkr.hw,
2806			},
2807			.num_parents = 1,
2808			.ops = &clk_branch2_ops,
2809			.flags = CLK_SET_RATE_PARENT,
2810		}
2811	}
2812};
2813
2814static struct clk_branch gcc_camss_jpeg_axi_clk = {
2815	.halt_reg = 0x57028,
2816	.halt_check = BRANCH_HALT,
2817	.clkr = {
2818		.enable_reg = 0x57028,
2819		.enable_mask = BIT(0),
2820		.hw.init = &(struct clk_init_data) {
2821			.name = "gcc_camss_jpeg_axi_clk",
2822			.ops = &clk_branch2_ops,
2823		}
2824	}
2825};
2826
2827static struct clk_branch gcc_camss_mclk0_clk = {
2828	.halt_reg = 0x52018,
2829	.halt_check = BRANCH_HALT,
2830	.clkr = {
2831		.enable_reg = 0x52018,
2832		.enable_mask = BIT(0),
2833		.hw.init = &(struct clk_init_data) {
2834			.name = "gcc_camss_mclk0_clk",
2835			.parent_hws = (const struct clk_hw*[]){
2836				&mclk0_clk_src.clkr.hw,
2837			},
2838			.num_parents = 1,
2839			.ops = &clk_branch2_ops,
2840			.flags = CLK_SET_RATE_PARENT,
2841		}
2842	}
2843};
2844
2845static struct clk_branch gcc_camss_mclk1_clk = {
2846	.halt_reg = 0x53018,
2847	.halt_check = BRANCH_HALT,
2848	.clkr = {
2849		.enable_reg = 0x53018,
2850		.enable_mask = BIT(0),
2851		.hw.init = &(struct clk_init_data) {
2852			.name = "gcc_camss_mclk1_clk",
2853			.parent_hws = (const struct clk_hw*[]){
2854				&mclk1_clk_src.clkr.hw,
2855			},
2856			.num_parents = 1,
2857			.ops = &clk_branch2_ops,
2858			.flags = CLK_SET_RATE_PARENT,
2859		}
2860	}
2861};
2862
2863static struct clk_branch gcc_camss_mclk2_clk = {
2864	.halt_reg = 0x5c018,
2865	.halt_check = BRANCH_HALT,
2866	.clkr = {
2867		.enable_reg = 0x5c018,
2868		.enable_mask = BIT(0),
2869		.hw.init = &(struct clk_init_data) {
2870			.name = "gcc_camss_mclk2_clk",
2871			.parent_hws = (const struct clk_hw*[]){
2872				&mclk2_clk_src.clkr.hw,
2873			},
2874			.num_parents = 1,
2875			.ops = &clk_branch2_ops,
2876			.flags = CLK_SET_RATE_PARENT,
2877		}
2878	}
2879};
2880
2881static struct clk_branch gcc_camss_mclk3_clk = {
2882	.halt_reg = 0x5e018,
2883	.halt_check = BRANCH_HALT,
2884	.clkr = {
2885		.enable_reg = 0x5e018,
2886		.enable_mask = BIT(0),
2887		.hw.init = &(struct clk_init_data) {
2888			.name = "gcc_camss_mclk3_clk",
2889			.parent_hws = (const struct clk_hw*[]){
2890				&mclk3_clk_src.clkr.hw,
2891			},
2892			.num_parents = 1,
2893			.ops = &clk_branch2_ops,
2894			.flags = CLK_SET_RATE_PARENT,
2895		}
2896	}
2897};
2898
2899static struct clk_branch gcc_camss_micro_ahb_clk = {
2900	.halt_reg = 0x5600c,
2901	.halt_check = BRANCH_HALT,
2902	.clkr = {
2903		.enable_reg = 0x5600c,
2904		.enable_mask = BIT(0),
2905		.hw.init = &(struct clk_init_data) {
2906			.name = "gcc_camss_micro_ahb_clk",
2907			.parent_hws = (const struct clk_hw*[]){
2908				&camss_top_ahb_clk_src.clkr.hw,
2909			},
2910			.num_parents = 1,
2911			.ops = &clk_branch2_ops,
2912			.flags = CLK_SET_RATE_PARENT,
2913		}
2914	}
2915};
2916
2917static struct clk_branch gcc_camss_top_ahb_clk = {
2918	.halt_reg = 0x5a014,
2919	.halt_check = BRANCH_HALT,
2920	.clkr = {
2921		.enable_reg = 0x5a014,
2922		.enable_mask = BIT(0),
2923		.hw.init = &(struct clk_init_data) {
2924			.name = "gcc_camss_top_ahb_clk",
2925			.parent_hws = (const struct clk_hw*[]){
2926				&camss_top_ahb_clk_src.clkr.hw,
2927			},
2928			.num_parents = 1,
2929			.ops = &clk_branch2_ops,
2930			.flags = CLK_SET_RATE_PARENT,
2931		}
2932	}
2933};
2934
2935static struct clk_branch gcc_camss_vfe0_ahb_clk = {
2936	.halt_reg = 0x58044,
2937	.halt_check = BRANCH_HALT,
2938	.clkr = {
2939		.enable_reg = 0x58044,
2940		.enable_mask = BIT(0),
2941		.hw.init = &(struct clk_init_data) {
2942			.name = "gcc_camss_vfe0_ahb_clk",
2943			.parent_hws = (const struct clk_hw*[]){
2944				&camss_top_ahb_clk_src.clkr.hw,
2945			},
2946			.num_parents = 1,
2947			.ops = &clk_branch2_ops,
2948			.flags = CLK_SET_RATE_PARENT,
2949		}
2950	}
2951};
2952
2953static struct clk_branch gcc_camss_vfe0_axi_clk = {
2954	.halt_reg = 0x58048,
2955	.halt_check = BRANCH_HALT,
2956	.clkr = {
2957		.enable_reg = 0x58048,
2958		.enable_mask = BIT(0),
2959		.hw.init = &(struct clk_init_data) {
2960			.name = "gcc_camss_vfe0_axi_clk",
2961			.ops = &clk_branch2_ops,
2962		}
2963	}
2964};
2965
2966static struct clk_branch gcc_camss_vfe0_clk = {
2967	.halt_reg = 0x58038,
2968	.halt_check = BRANCH_HALT,
2969	.clkr = {
2970		.enable_reg = 0x58038,
2971		.enable_mask = BIT(0),
2972		.hw.init = &(struct clk_init_data) {
2973			.name = "gcc_camss_vfe0_clk",
2974			.parent_hws = (const struct clk_hw*[]){
2975				&vfe0_clk_src.clkr.hw,
2976			},
2977			.num_parents = 1,
2978			.ops = &clk_branch2_ops,
2979			.flags = CLK_SET_RATE_PARENT,
2980		}
2981	}
2982};
2983
2984static struct clk_branch gcc_camss_vfe1_ahb_clk = {
2985	.halt_reg = 0x58060,
2986	.halt_check = BRANCH_HALT,
2987	.clkr = {
2988		.enable_reg = 0x58060,
2989		.enable_mask = BIT(0),
2990		.hw.init = &(struct clk_init_data) {
2991			.name = "gcc_camss_vfe1_ahb_clk",
2992			.parent_hws = (const struct clk_hw*[]){
2993				&camss_top_ahb_clk_src.clkr.hw,
2994			},
2995			.num_parents = 1,
2996			.ops = &clk_branch2_ops,
2997			.flags = CLK_SET_RATE_PARENT,
2998		}
2999	}
3000};
3001
3002static struct clk_branch gcc_camss_vfe1_axi_clk = {
3003	.halt_reg = 0x58068,
3004	.halt_check = BRANCH_HALT,
3005	.clkr = {
3006		.enable_reg = 0x58068,
3007		.enable_mask = BIT(0),
3008		.hw.init = &(struct clk_init_data) {
3009			.name = "gcc_camss_vfe1_axi_clk",
3010			.ops = &clk_branch2_ops,
3011		}
3012	}
3013};
3014
3015static struct clk_branch gcc_camss_vfe1_clk = {
3016	.halt_reg = 0x5805c,
3017	.halt_check = BRANCH_HALT,
3018	.clkr = {
3019		.enable_reg = 0x5805c,
3020		.enable_mask = BIT(0),
3021		.hw.init = &(struct clk_init_data) {
3022			.name = "gcc_camss_vfe1_clk",
3023			.parent_hws = (const struct clk_hw*[]){
3024				&vfe1_clk_src.clkr.hw,
3025			},
3026			.num_parents = 1,
3027			.ops = &clk_branch2_ops,
3028			.flags = CLK_SET_RATE_PARENT,
3029		}
3030	}
3031};
3032
3033static struct clk_branch gcc_cpp_tbu_clk = {
3034	.halt_reg = 0x12040,
3035	.halt_check = BRANCH_HALT_VOTED,
3036	.clkr = {
3037		.enable_reg = 0x4500c,
3038		.enable_mask = BIT(14),
3039		.hw.init = &(struct clk_init_data) {
3040			.name = "gcc_cpp_tbu_clk",
3041			.ops = &clk_branch2_ops,
3042		}
3043	}
3044};
3045
3046static struct clk_branch gcc_crypto_ahb_clk = {
3047	.halt_reg = 0x16024,
3048	.halt_check = BRANCH_HALT_VOTED,
3049	.clkr = {
3050		.enable_reg = 0x45004,
3051		.enable_mask = BIT(0),
3052		.hw.init = &(struct clk_init_data) {
3053			.name = "gcc_crypto_ahb_clk",
3054			.ops = &clk_branch2_ops,
3055		}
3056	}
3057};
3058
3059static struct clk_branch gcc_crypto_axi_clk = {
3060	.halt_reg = 0x16020,
3061	.halt_check = BRANCH_HALT_VOTED,
3062	.clkr = {
3063		.enable_reg = 0x45004,
3064		.enable_mask = BIT(1),
3065		.hw.init = &(struct clk_init_data) {
3066			.name = "gcc_crypto_axi_clk",
3067			.ops = &clk_branch2_ops,
3068		}
3069	}
3070};
3071
3072static struct clk_branch gcc_crypto_clk = {
3073	.halt_reg = 0x1601c,
3074	.halt_check = BRANCH_HALT_VOTED,
3075	.clkr = {
3076		.enable_reg = 0x45004,
3077		.enable_mask = BIT(2),
3078		.hw.init = &(struct clk_init_data) {
3079			.name = "gcc_crypto_clk",
3080			.parent_hws = (const struct clk_hw*[]){
3081				&crypto_clk_src.clkr.hw,
3082			},
3083			.num_parents = 1,
3084			.ops = &clk_branch2_ops,
3085			.flags = CLK_SET_RATE_PARENT,
3086		}
3087	}
3088};
3089
3090static struct clk_branch gcc_dcc_clk = {
3091	.halt_reg = 0x77004,
3092	.halt_check = BRANCH_HALT,
3093	.clkr = {
3094		.enable_reg = 0x77004,
3095		.enable_mask = BIT(0),
3096		.hw.init = &(struct clk_init_data) {
3097			.name = "gcc_dcc_clk",
3098			.ops = &clk_branch2_ops,
3099		}
3100	}
3101};
3102
3103static struct clk_branch gcc_gp1_clk = {
3104	.halt_reg = 0x08000,
3105	.halt_check = BRANCH_HALT,
3106	.clkr = {
3107		.enable_reg = 0x08000,
3108		.enable_mask = BIT(0),
3109		.hw.init = &(struct clk_init_data) {
3110			.name = "gcc_gp1_clk",
3111			.parent_hws = (const struct clk_hw*[]){
3112				&gp1_clk_src.clkr.hw,
3113			},
3114			.num_parents = 1,
3115			.ops = &clk_branch2_ops,
3116			.flags = CLK_SET_RATE_PARENT,
3117		}
3118	}
3119};
3120
3121static struct clk_branch gcc_gp2_clk = {
3122	.halt_reg = 0x09000,
3123	.halt_check = BRANCH_HALT,
3124	.clkr = {
3125		.enable_reg = 0x09000,
3126		.enable_mask = BIT(0),
3127		.hw.init = &(struct clk_init_data) {
3128			.name = "gcc_gp2_clk",
3129			.parent_hws = (const struct clk_hw*[]){
3130				&gp2_clk_src.clkr.hw,
3131			},
3132			.num_parents = 1,
3133			.ops = &clk_branch2_ops,
3134			.flags = CLK_SET_RATE_PARENT,
3135		}
3136	}
3137};
3138
3139static struct clk_branch gcc_gp3_clk = {
3140	.halt_reg = 0x0a000,
3141	.halt_check = BRANCH_HALT,
3142	.clkr = {
3143		.enable_reg = 0x0a000,
3144		.enable_mask = BIT(0),
3145		.hw.init = &(struct clk_init_data) {
3146			.name = "gcc_gp3_clk",
3147			.parent_hws = (const struct clk_hw*[]){
3148				&gp3_clk_src.clkr.hw,
3149			},
3150			.num_parents = 1,
3151			.ops = &clk_branch2_ops,
3152			.flags = CLK_SET_RATE_PARENT,
3153		}
3154	}
3155};
3156
3157static struct clk_branch gcc_jpeg_tbu_clk = {
3158	.halt_reg = 0x12034,
3159	.halt_check = BRANCH_HALT_VOTED,
3160	.clkr = {
3161		.enable_reg = 0x4500c,
3162		.enable_mask = BIT(10),
3163		.hw.init = &(struct clk_init_data) {
3164			.name = "gcc_jpeg_tbu_clk",
3165			.ops = &clk_branch2_ops,
3166		}
3167	}
3168};
3169
3170static struct clk_branch gcc_mdp_tbu_clk = {
3171	.halt_reg = 0x1201c,
3172	.halt_check = BRANCH_HALT_VOTED,
3173	.clkr = {
3174		.enable_reg = 0x4500c,
3175		.enable_mask = BIT(4),
3176		.hw.init = &(struct clk_init_data) {
3177			.name = "gcc_mdp_tbu_clk",
3178			.ops = &clk_branch2_ops,
3179		}
3180	}
3181};
3182
3183static struct clk_branch gcc_mdss_ahb_clk = {
3184	.halt_reg = 0x4d07c,
3185	.halt_check = BRANCH_HALT,
3186	.clkr = {
3187		.enable_reg = 0x4d07c,
3188		.enable_mask = BIT(0),
3189		.hw.init = &(struct clk_init_data) {
3190			.name = "gcc_mdss_ahb_clk",
3191			.ops = &clk_branch2_ops,
3192		}
3193	}
3194};
3195
3196static struct clk_branch gcc_mdss_axi_clk = {
3197	.halt_reg = 0x4d080,
3198	.halt_check = BRANCH_HALT,
3199	.clkr = {
3200		.enable_reg = 0x4d080,
3201		.enable_mask = BIT(0),
3202		.hw.init = &(struct clk_init_data) {
3203			.name = "gcc_mdss_axi_clk",
3204			.ops = &clk_branch2_ops,
3205		}
3206	}
3207};
3208
3209static struct clk_branch gcc_mdss_byte0_clk = {
3210	.halt_reg = 0x4d094,
3211	.halt_check = BRANCH_HALT,
3212	.clkr = {
3213		.enable_reg = 0x4d094,
3214		.enable_mask = BIT(0),
3215		.hw.init = &(struct clk_init_data) {
3216			.name = "gcc_mdss_byte0_clk",
3217			.parent_hws = (const struct clk_hw*[]){
3218				&byte0_clk_src.clkr.hw,
3219			},
3220			.num_parents = 1,
3221			.ops = &clk_branch2_ops,
3222			.flags = CLK_SET_RATE_PARENT,
3223		}
3224	}
3225};
3226
3227static struct clk_branch gcc_mdss_byte1_clk = {
3228	.halt_reg = 0x4d0a0,
3229	.halt_check = BRANCH_HALT,
3230	.clkr = {
3231		.enable_reg = 0x4d0a0,
3232		.enable_mask = BIT(0),
3233		.hw.init = &(struct clk_init_data) {
3234			.name = "gcc_mdss_byte1_clk",
3235			.parent_hws = (const struct clk_hw*[]){
3236				&byte1_clk_src.clkr.hw,
3237			},
3238			.num_parents = 1,
3239			.ops = &clk_branch2_ops,
3240			.flags = CLK_SET_RATE_PARENT,
3241		}
3242	}
3243};
3244
3245static struct clk_branch gcc_mdss_esc0_clk = {
3246	.halt_reg = 0x4d098,
3247	.halt_check = BRANCH_HALT,
3248	.clkr = {
3249		.enable_reg = 0x4d098,
3250		.enable_mask = BIT(0),
3251		.hw.init = &(struct clk_init_data) {
3252			.name = "gcc_mdss_esc0_clk",
3253			.parent_hws = (const struct clk_hw*[]){
3254				&esc0_clk_src.clkr.hw,
3255			},
3256			.num_parents = 1,
3257			.ops = &clk_branch2_ops,
3258			.flags = CLK_SET_RATE_PARENT,
3259		}
3260	}
3261};
3262
3263static struct clk_branch gcc_mdss_esc1_clk = {
3264	.halt_reg = 0x4d09c,
3265	.halt_check = BRANCH_HALT,
3266	.clkr = {
3267		.enable_reg = 0x4d09c,
3268		.enable_mask = BIT(0),
3269		.hw.init = &(struct clk_init_data) {
3270			.name = "gcc_mdss_esc1_clk",
3271			.parent_hws = (const struct clk_hw*[]){
3272				&esc1_clk_src.clkr.hw,
3273			},
3274			.num_parents = 1,
3275			.ops = &clk_branch2_ops,
3276			.flags = CLK_SET_RATE_PARENT,
3277		}
3278	}
3279};
3280
3281static struct clk_branch gcc_mdss_mdp_clk = {
3282	.halt_reg = 0x4d088,
3283	.halt_check = BRANCH_HALT,
3284	.clkr = {
3285		.enable_reg = 0x4d088,
3286		.enable_mask = BIT(0),
3287		.hw.init = &(struct clk_init_data) {
3288			.name = "gcc_mdss_mdp_clk",
3289			.parent_hws = (const struct clk_hw*[]){
3290				&mdp_clk_src.clkr.hw,
3291			},
3292			.num_parents = 1,
3293			.ops = &clk_branch2_ops,
3294			.flags = CLK_SET_RATE_PARENT,
3295		}
3296	}
3297};
3298
3299static struct clk_branch gcc_mdss_pclk0_clk = {
3300	.halt_reg = 0x4d084,
3301	.halt_check = BRANCH_HALT,
3302	.clkr = {
3303		.enable_reg = 0x4d084,
3304		.enable_mask = BIT(0),
3305		.hw.init = &(struct clk_init_data) {
3306			.name = "gcc_mdss_pclk0_clk",
3307			.parent_hws = (const struct clk_hw*[]){
3308				&pclk0_clk_src.clkr.hw,
3309			},
3310			.num_parents = 1,
3311			.ops = &clk_branch2_ops,
3312			.flags = CLK_SET_RATE_PARENT,
3313		}
3314	}
3315};
3316
3317static struct clk_branch gcc_mdss_pclk1_clk = {
3318	.halt_reg = 0x4d0a4,
3319	.halt_check = BRANCH_HALT,
3320	.clkr = {
3321		.enable_reg = 0x4d0a4,
3322		.enable_mask = BIT(0),
3323		.hw.init = &(struct clk_init_data) {
3324			.name = "gcc_mdss_pclk1_clk",
3325			.parent_hws = (const struct clk_hw*[]){
3326				&pclk1_clk_src.clkr.hw,
3327			},
3328			.num_parents = 1,
3329			.ops = &clk_branch2_ops,
3330			.flags = CLK_SET_RATE_PARENT,
3331		}
3332	}
3333};
3334
3335static struct clk_branch gcc_mdss_vsync_clk = {
3336	.halt_reg = 0x4d090,
3337	.halt_check = BRANCH_HALT,
3338	.clkr = {
3339		.enable_reg = 0x4d090,
3340		.enable_mask = BIT(0),
3341		.hw.init = &(struct clk_init_data) {
3342			.name = "gcc_mdss_vsync_clk",
3343			.parent_hws = (const struct clk_hw*[]){
3344				&vsync_clk_src.clkr.hw,
3345			},
3346			.num_parents = 1,
3347			.ops = &clk_branch2_ops,
3348			.flags = CLK_SET_RATE_PARENT,
3349		}
3350	}
3351};
3352
3353static struct clk_branch gcc_mss_cfg_ahb_clk = {
3354	.halt_reg = 0x49000,
3355	.halt_check = BRANCH_HALT,
3356	.clkr = {
3357		.enable_reg = 0x49000,
3358		.enable_mask = BIT(0),
3359		.hw.init = &(struct clk_init_data) {
3360			.name = "gcc_mss_cfg_ahb_clk",
3361			.ops = &clk_branch2_ops,
3362		}
3363	}
3364};
3365
3366static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
3367	.halt_reg = 0x49004,
3368	.halt_check = BRANCH_HALT,
3369	.clkr = {
3370		.enable_reg = 0x49004,
3371		.enable_mask = BIT(0),
3372		.hw.init = &(struct clk_init_data) {
3373			.name = "gcc_mss_q6_bimc_axi_clk",
3374			.ops = &clk_branch2_ops,
3375		}
3376	}
3377};
3378
3379static struct clk_branch gcc_oxili_ahb_clk = {
3380	.halt_reg = 0x59028,
3381	.halt_check = BRANCH_HALT,
3382	.clkr = {
3383		.enable_reg = 0x59028,
3384		.enable_mask = BIT(0),
3385		.hw.init = &(struct clk_init_data) {
3386			.name = "gcc_oxili_ahb_clk",
3387			.ops = &clk_branch2_ops,
3388		}
3389	}
3390};
3391
3392static struct clk_branch gcc_oxili_aon_clk = {
3393	.halt_reg = 0x59044,
3394	.halt_check = BRANCH_HALT,
3395	.clkr = {
3396		.enable_reg = 0x59044,
3397		.enable_mask = BIT(0),
3398		.hw.init = &(struct clk_init_data) {
3399			.name = "gcc_oxili_aon_clk",
3400			.parent_hws = (const struct clk_hw*[]){
3401				&gfx3d_clk_src.clkr.hw,
3402			},
3403			.num_parents = 1,
3404			.ops = &clk_branch2_ops,
3405		}
3406	}
3407};
3408
3409static struct clk_branch gcc_oxili_gfx3d_clk = {
3410	.halt_reg = 0x59020,
3411	.halt_check = BRANCH_HALT,
3412	.clkr = {
3413		.enable_reg = 0x59020,
3414		.enable_mask = BIT(0),
3415		.hw.init = &(struct clk_init_data) {
3416			.name = "gcc_oxili_gfx3d_clk",
3417			.parent_hws = (const struct clk_hw*[]){
3418				&gfx3d_clk_src.clkr.hw,
3419			},
3420			.num_parents = 1,
3421			.ops = &clk_branch2_ops,
3422			.flags = CLK_SET_RATE_PARENT,
3423		}
3424	}
3425};
3426
3427static struct clk_branch gcc_oxili_timer_clk = {
3428	.halt_reg = 0x59040,
3429	.halt_check = BRANCH_HALT,
3430	.clkr = {
3431		.enable_reg = 0x59040,
3432		.enable_mask = BIT(0),
3433		.hw.init = &(struct clk_init_data) {
3434			.name = "gcc_oxili_timer_clk",
3435			.ops = &clk_branch2_ops,
3436		}
3437	}
3438};
3439
3440static struct clk_branch gcc_pcnoc_usb3_axi_clk = {
3441	.halt_reg = 0x3f038,
3442	.halt_check = BRANCH_HALT,
3443	.clkr = {
3444		.enable_reg = 0x3f038,
3445		.enable_mask = BIT(0),
3446		.hw.init = &(struct clk_init_data) {
3447			.name = "gcc_pcnoc_usb3_axi_clk",
3448			.parent_hws = (const struct clk_hw*[]){
3449				&usb30_master_clk_src.clkr.hw,
3450			},
3451			.num_parents = 1,
3452			.ops = &clk_branch2_ops,
3453			.flags = CLK_SET_RATE_PARENT,
3454		}
3455	}
3456};
3457
3458static struct clk_branch gcc_pdm2_clk = {
3459	.halt_reg = 0x4400c,
3460	.halt_check = BRANCH_HALT,
3461	.clkr = {
3462		.enable_reg = 0x4400c,
3463		.enable_mask = BIT(0),
3464		.hw.init = &(struct clk_init_data) {
3465			.name = "gcc_pdm2_clk",
3466			.parent_hws = (const struct clk_hw*[]){
3467				&pdm2_clk_src.clkr.hw,
3468			},
3469			.num_parents = 1,
3470			.ops = &clk_branch2_ops,
3471			.flags = CLK_SET_RATE_PARENT,
3472		}
3473	}
3474};
3475
3476static struct clk_branch gcc_pdm_ahb_clk = {
3477	.halt_reg = 0x44004,
3478	.halt_check = BRANCH_HALT,
3479	.clkr = {
3480		.enable_reg = 0x44004,
3481		.enable_mask = BIT(0),
3482		.hw.init = &(struct clk_init_data) {
3483			.name = "gcc_pdm_ahb_clk",
3484			.ops = &clk_branch2_ops,
3485		}
3486	}
3487};
3488
3489static struct clk_branch gcc_prng_ahb_clk = {
3490	.halt_reg = 0x13004,
3491	.halt_check = BRANCH_HALT_VOTED,
3492	.clkr = {
3493		.enable_reg = 0x45004,
3494		.enable_mask = BIT(8),
3495		.hw.init = &(struct clk_init_data) {
3496			.name = "gcc_prng_ahb_clk",
3497			.ops = &clk_branch2_ops,
3498		}
3499	}
3500};
3501
3502static struct clk_branch gcc_qdss_dap_clk = {
3503	.halt_reg = 0x29084,
3504	.halt_check = BRANCH_HALT_VOTED,
3505	.clkr = {
3506		.enable_reg = 0x45004,
3507		.enable_mask = BIT(11),
3508		.hw.init = &(struct clk_init_data) {
3509			.name = "gcc_qdss_dap_clk",
3510			.ops = &clk_branch2_ops,
3511		}
3512	}
3513};
3514
3515static struct clk_branch gcc_qusb_ref_clk = {
3516	.halt_reg = 0,
3517	.halt_check = BRANCH_HALT_SKIP,
3518	.clkr = {
3519		.enable_reg = 0x41030,
3520		.enable_mask = BIT(0),
3521		.hw.init = &(struct clk_init_data) {
3522			.name = "gcc_qusb_ref_clk",
3523			.ops = &clk_branch2_ops,
3524		}
3525	}
3526};
3527
3528static struct clk_branch gcc_rbcpr_gfx_clk = {
3529	.halt_reg = 0x3a004,
3530	.halt_check = BRANCH_HALT,
3531	.clkr = {
3532		.enable_reg = 0x3a004,
3533		.enable_mask = BIT(0),
3534		.hw.init = &(struct clk_init_data) {
3535			.name = "gcc_rbcpr_gfx_clk",
3536			.parent_hws = (const struct clk_hw*[]){
3537				&rbcpr_gfx_clk_src.clkr.hw,
3538			},
3539			.num_parents = 1,
3540			.ops = &clk_branch2_ops,
3541			.flags = CLK_SET_RATE_PARENT,
3542		}
3543	}
3544};
3545
3546static struct clk_branch gcc_sdcc1_ice_core_clk = {
3547	.halt_reg = 0x5d014,
3548	.halt_check = BRANCH_HALT,
3549	.clkr = {
3550		.enable_reg = 0x5d014,
3551		.enable_mask = BIT(0),
3552		.hw.init = &(struct clk_init_data) {
3553			.name = "gcc_sdcc1_ice_core_clk",
3554			.parent_hws = (const struct clk_hw*[]){
3555				&sdcc1_ice_core_clk_src.clkr.hw,
3556			},
3557			.num_parents = 1,
3558			.ops = &clk_branch2_ops,
3559			.flags = CLK_SET_RATE_PARENT,
3560		}
3561	}
3562};
3563
3564static struct clk_branch gcc_sdcc1_ahb_clk = {
3565	.halt_reg = 0x4201c,
3566	.halt_check = BRANCH_HALT,
3567	.clkr = {
3568		.enable_reg = 0x4201c,
3569		.enable_mask = BIT(0),
3570		.hw.init = &(struct clk_init_data) {
3571			.name = "gcc_sdcc1_ahb_clk",
3572			.ops = &clk_branch2_ops,
3573		}
3574	}
3575};
3576
3577static struct clk_branch gcc_sdcc2_ahb_clk = {
3578	.halt_reg = 0x4301c,
3579	.halt_check = BRANCH_HALT,
3580	.clkr = {
3581		.enable_reg = 0x4301c,
3582		.enable_mask = BIT(0),
3583		.hw.init = &(struct clk_init_data) {
3584			.name = "gcc_sdcc2_ahb_clk",
3585			.ops = &clk_branch2_ops,
3586		}
3587	}
3588};
3589
3590static struct clk_branch gcc_sdcc1_apps_clk = {
3591	.halt_reg = 0x42018,
3592	.halt_check = BRANCH_HALT,
3593	.clkr = {
3594		.enable_reg = 0x42018,
3595		.enable_mask = BIT(0),
3596		.hw.init = &(struct clk_init_data) {
3597			.name = "gcc_sdcc1_apps_clk",
3598			.parent_hws = (const struct clk_hw*[]){
3599				&sdcc1_apps_clk_src.clkr.hw,
3600			},
3601			.num_parents = 1,
3602			.ops = &clk_branch2_ops,
3603			.flags = CLK_SET_RATE_PARENT,
3604		}
3605	}
3606};
3607
3608static struct clk_branch gcc_sdcc2_apps_clk = {
3609	.halt_reg = 0x43018,
3610	.halt_check = BRANCH_HALT,
3611	.clkr = {
3612		.enable_reg = 0x43018,
3613		.enable_mask = BIT(0),
3614		.hw.init = &(struct clk_init_data) {
3615			.name = "gcc_sdcc2_apps_clk",
3616			.parent_hws = (const struct clk_hw*[]){
3617				&sdcc2_apps_clk_src.clkr.hw,
3618			},
3619			.num_parents = 1,
3620			.ops = &clk_branch2_ops,
3621			.flags = CLK_SET_RATE_PARENT,
3622		}
3623	}
3624};
3625
3626static struct clk_branch gcc_smmu_cfg_clk = {
3627	.halt_reg = 0x12038,
3628	.halt_check = BRANCH_HALT_VOTED,
3629	.clkr = {
3630		.enable_reg = 0x4500c,
3631		.enable_mask = BIT(12),
3632		.hw.init = &(struct clk_init_data) {
3633			.name = "gcc_smmu_cfg_clk",
3634			.ops = &clk_branch2_ops,
3635		}
3636	}
3637};
3638
3639static struct clk_branch gcc_usb30_master_clk = {
3640	.halt_reg = 0x3f000,
3641	.halt_check = BRANCH_HALT,
3642	.clkr = {
3643		.enable_reg = 0x3f000,
3644		.enable_mask = BIT(0),
3645		.hw.init = &(struct clk_init_data) {
3646			.name = "gcc_usb30_master_clk",
3647			.parent_hws = (const struct clk_hw*[]){
3648				&usb30_master_clk_src.clkr.hw,
3649			},
3650			.num_parents = 1,
3651			.ops = &clk_branch2_ops,
3652			.flags = CLK_SET_RATE_PARENT,
3653		}
3654	}
3655};
3656
3657static struct clk_branch gcc_usb30_mock_utmi_clk = {
3658	.halt_reg = 0x3f008,
3659	.halt_check = BRANCH_HALT,
3660	.clkr = {
3661		.enable_reg = 0x3f008,
3662		.enable_mask = BIT(0),
3663		.hw.init = &(struct clk_init_data) {
3664			.name = "gcc_usb30_mock_utmi_clk",
3665			.parent_hws = (const struct clk_hw*[]){
3666				&usb30_mock_utmi_clk_src.clkr.hw,
3667			},
3668			.num_parents = 1,
3669			.ops = &clk_branch2_ops,
3670			.flags = CLK_SET_RATE_PARENT,
3671		}
3672	}
3673};
3674
3675static struct clk_branch gcc_usb30_sleep_clk = {
3676	.halt_reg = 0x3f004,
3677	.halt_check = BRANCH_HALT,
3678	.clkr = {
3679		.enable_reg = 0x3f004,
3680		.enable_mask = BIT(0),
3681		.hw.init = &(struct clk_init_data) {
3682			.name = "gcc_usb30_sleep_clk",
3683			.ops = &clk_branch2_ops,
3684		}
3685	}
3686};
3687
3688static struct clk_branch gcc_usb3_aux_clk = {
3689	.halt_reg = 0x3f044,
3690	.halt_check = BRANCH_HALT,
3691	.clkr = {
3692		.enable_reg = 0x3f044,
3693		.enable_mask = BIT(0),
3694		.hw.init = &(struct clk_init_data) {
3695			.name = "gcc_usb3_aux_clk",
3696			.parent_hws = (const struct clk_hw*[]){
3697				&usb3_aux_clk_src.clkr.hw,
3698			},
3699			.num_parents = 1,
3700			.ops = &clk_branch2_ops,
3701			.flags = CLK_SET_RATE_PARENT,
3702		}
3703	}
3704};
3705
3706static struct clk_branch gcc_usb3_pipe_clk = {
3707	.halt_reg = 0,
3708	.halt_check = BRANCH_HALT_DELAY,
3709	.clkr = {
3710		.enable_reg = 0x3f040,
3711		.enable_mask = BIT(0),
3712		.hw.init = &(struct clk_init_data) {
3713			.name = "gcc_usb3_pipe_clk",
3714			.ops = &clk_branch2_ops,
3715		}
3716	}
3717};
3718
3719static struct clk_branch gcc_usb_phy_cfg_ahb_clk = {
3720	.halt_reg = 0x3f080,
3721	.halt_check = BRANCH_VOTED,
3722	.clkr = {
3723		.enable_reg = 0x3f080,
3724		.enable_mask = BIT(0),
3725		.hw.init = &(struct clk_init_data) {
3726			.name = "gcc_usb_phy_cfg_ahb_clk",
3727			.ops = &clk_branch2_ops,
3728		}
3729	}
3730};
3731
3732static struct clk_branch gcc_usb_ss_ref_clk = {
3733	.halt_reg = 0,
3734	.halt_check = BRANCH_HALT_SKIP,
3735	.clkr = {
3736		.enable_reg = 0x3f07c,
3737		.enable_mask = BIT(0),
3738		.hw.init = &(struct clk_init_data) {
3739			.name = "gcc_usb_ss_ref_clk",
3740			.ops = &clk_branch2_ops,
3741		}
3742	}
3743};
3744
3745static struct clk_branch gcc_venus0_ahb_clk = {
3746	.halt_reg = 0x4c020,
3747	.halt_check = BRANCH_HALT,
3748	.clkr = {
3749		.enable_reg = 0x4c020,
3750		.enable_mask = BIT(0),
3751		.hw.init = &(struct clk_init_data) {
3752			.name = "gcc_venus0_ahb_clk",
3753			.ops = &clk_branch2_ops,
3754		}
3755	}
3756};
3757
3758static struct clk_branch gcc_venus0_axi_clk = {
3759	.halt_reg = 0x4c024,
3760	.halt_check = BRANCH_HALT,
3761	.clkr = {
3762		.enable_reg = 0x4c024,
3763		.enable_mask = BIT(0),
3764		.hw.init = &(struct clk_init_data) {
3765			.name = "gcc_venus0_axi_clk",
3766			.ops = &clk_branch2_ops,
3767		}
3768	}
3769};
3770
3771static struct clk_branch gcc_venus0_core0_vcodec0_clk = {
3772	.halt_reg = 0x4c02c,
3773	.halt_check = BRANCH_HALT,
3774	.clkr = {
3775		.enable_reg = 0x4c02c,
3776		.enable_mask = BIT(0),
3777		.hw.init = &(struct clk_init_data) {
3778			.name = "gcc_venus0_core0_vcodec0_clk",
3779			.parent_hws = (const struct clk_hw*[]){
3780				&vcodec0_clk_src.clkr.hw,
3781			},
3782			.num_parents = 1,
3783			.ops = &clk_branch2_ops,
3784			.flags = CLK_SET_RATE_PARENT,
3785		}
3786	}
3787};
3788
3789static struct clk_branch gcc_venus0_vcodec0_clk = {
3790	.halt_reg = 0x4c01c,
3791	.halt_check = BRANCH_HALT,
3792	.clkr = {
3793		.enable_reg = 0x4c01c,
3794		.enable_mask = BIT(0),
3795		.hw.init = &(struct clk_init_data) {
3796			.name = "gcc_venus0_vcodec0_clk",
3797			.parent_hws = (const struct clk_hw*[]){
3798				&vcodec0_clk_src.clkr.hw,
3799			},
3800			.num_parents = 1,
3801			.ops = &clk_branch2_ops,
3802			.flags = CLK_SET_RATE_PARENT,
3803		}
3804	}
3805};
3806
3807static struct clk_branch gcc_venus_tbu_clk = {
3808	.halt_reg = 0x12014,
3809	.halt_check = BRANCH_HALT_VOTED,
3810	.clkr = {
3811		.enable_reg = 0x4500c,
3812		.enable_mask = BIT(5),
3813		.hw.init = &(struct clk_init_data) {
3814			.name = "gcc_venus_tbu_clk",
3815			.ops = &clk_branch2_ops,
3816		}
3817	}
3818};
3819
3820static struct clk_branch gcc_vfe1_tbu_clk = {
3821	.halt_reg = 0x12090,
3822	.halt_check = BRANCH_HALT_VOTED,
3823	.clkr = {
3824		.enable_reg = 0x4500c,
3825		.enable_mask = BIT(17),
3826		.hw.init = &(struct clk_init_data) {
3827			.name = "gcc_vfe1_tbu_clk",
3828			.ops = &clk_branch2_ops,
3829		}
3830	}
3831};
3832
3833static struct clk_branch gcc_vfe_tbu_clk = {
3834	.halt_reg = 0x1203c,
3835	.halt_check = BRANCH_HALT_VOTED,
3836	.clkr = {
3837		.enable_reg = 0x4500c,
3838		.enable_mask = BIT(9),
3839		.hw.init = &(struct clk_init_data) {
3840			.name = "gcc_vfe_tbu_clk",
3841			.ops = &clk_branch2_ops,
3842		}
3843	}
3844};
3845
3846static struct gdsc usb30_gdsc = {
3847	.gdscr = 0x3f078,
3848	.pd = {
3849		.name = "usb30_gdsc",
3850	},
3851	.pwrsts = PWRSTS_OFF_ON,
3852	/*
3853	 * FIXME: dwc3 usb gadget cannot resume after GDSC power off
3854	 * dwc3 7000000.dwc3: failed to enable ep0out
3855	 */
3856	.flags = ALWAYS_ON,
3857};
3858
3859static struct gdsc venus_gdsc = {
3860	.gdscr = 0x4c018,
3861	.cxcs = (unsigned int []){ 0x4c024, 0x4c01c },
3862	.cxc_count = 2,
3863	.pd = {
3864		.name = "venus_gdsc",
3865	},
3866	.pwrsts = PWRSTS_OFF_ON,
3867};
3868
3869static struct gdsc venus_core0_gdsc = {
3870	.gdscr = 0x4c028,
3871	.cxcs = (unsigned int []){ 0x4c02c },
3872	.cxc_count = 1,
3873	.pd = {
3874		.name = "venus_core0",
3875	},
3876	.flags = HW_CTRL,
3877	.pwrsts = PWRSTS_OFF_ON,
3878};
3879
3880static struct gdsc mdss_gdsc = {
3881	.gdscr = 0x4d078,
3882	.cxcs = (unsigned int []){ 0x4d080, 0x4d088 },
3883	.cxc_count = 2,
3884	.pd = {
3885		.name = "mdss_gdsc",
3886	},
3887	.pwrsts = PWRSTS_OFF_ON,
3888};
3889
3890static struct gdsc jpeg_gdsc = {
3891	.gdscr = 0x5701c,
3892	.cxcs = (unsigned int []){ 0x57020, 0x57028 },
3893	.cxc_count = 2,
3894	.pd = {
3895		.name = "jpeg_gdsc",
3896	},
3897	.pwrsts = PWRSTS_OFF_ON,
3898};
3899
3900static struct gdsc vfe0_gdsc = {
3901	.gdscr = 0x58034,
3902	.cxcs = (unsigned int []){ 0x58038, 0x58048, 0x5600c, 0x58050 },
3903	.cxc_count = 4,
3904	.pd = {
3905		.name = "vfe0_gdsc",
3906	},
3907	.pwrsts = PWRSTS_OFF_ON,
3908};
3909
3910static struct gdsc vfe1_gdsc = {
3911	.gdscr = 0x5806c,
3912	.cxcs = (unsigned int []){ 0x5805c, 0x58068, 0x5600c, 0x58074 },
3913	.cxc_count = 4,
3914	.pd = {
3915		.name = "vfe1_gdsc",
3916	},
3917	.pwrsts = PWRSTS_OFF_ON,
3918};
3919
3920static struct gdsc oxili_gx_gdsc = {
3921	.gdscr = 0x5901c,
3922	.clamp_io_ctrl = 0x5b00c,
3923	.cxcs = (unsigned int []){ 0x59000, 0x59024 },
3924	.cxc_count = 2,
3925	.pd = {
3926		.name = "oxili_gx_gdsc",
3927	},
3928	.pwrsts = PWRSTS_OFF_ON,
3929	.flags = CLAMP_IO,
3930};
3931
3932static struct gdsc oxili_cx_gdsc = {
3933	.gdscr = 0x5904c,
3934	.cxcs = (unsigned int []){ 0x59020 },
3935	.cxc_count = 1,
3936	.pd = {
3937		.name = "oxili_cx_gdsc",
3938	},
3939	.pwrsts = PWRSTS_OFF_ON,
3940};
3941
3942static struct gdsc cpp_gdsc = {
3943	.gdscr = 0x58078,
3944	.cxcs = (unsigned int []){ 0x5803c, 0x58064 },
3945	.cxc_count = 2,
3946	.pd = {
3947		.name = "cpp_gdsc",
3948	},
3949	.flags = ALWAYS_ON,
3950	.pwrsts = PWRSTS_OFF_ON,
3951};
3952
3953static struct clk_hw *gcc_msm8953_hws[] = {
3954	&gpll0_early_div.hw,
3955	&gpll6_early_div.hw,
3956};
3957
3958static struct clk_regmap *gcc_msm8953_clocks[] = {
3959	[GPLL0] = &gpll0.clkr,
3960	[GPLL0_EARLY] = &gpll0_early.clkr,
3961	[GPLL2] = &gpll2.clkr,
3962	[GPLL2_EARLY] = &gpll2_early.clkr,
3963	[GPLL3] = &gpll3.clkr,
3964	[GPLL3_EARLY] = &gpll3_early.clkr,
3965	[GPLL4] = &gpll4.clkr,
3966	[GPLL4_EARLY] = &gpll4_early.clkr,
3967	[GPLL6] = &gpll6.clkr,
3968	[GPLL6_EARLY] = &gpll6_early.clkr,
3969	[GCC_APSS_AHB_CLK] = &gcc_apss_ahb_clk.clkr,
3970	[GCC_APSS_AXI_CLK] = &gcc_apss_axi_clk.clkr,
3971	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
3972	[GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
3973	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3974	[GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
3975	[GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
3976	[GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
3977	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3978	[GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr,
3979	[GCC_APSS_TCU_ASYNC_CLK] = &gcc_apss_tcu_async_clk.clkr,
3980	[GCC_CPP_TBU_CLK] = &gcc_cpp_tbu_clk.clkr,
3981	[GCC_JPEG_TBU_CLK] = &gcc_jpeg_tbu_clk.clkr,
3982	[GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr,
3983	[GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,
3984	[GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr,
3985	[GCC_VFE1_TBU_CLK] = &gcc_vfe1_tbu_clk.clkr,
3986	[GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr,
3987	[CAMSS_TOP_AHB_CLK_SRC] = &camss_top_ahb_clk_src.clkr,
3988	[CSI0_CLK_SRC] = &csi0_clk_src.clkr,
3989	[APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
3990	[CSI1_CLK_SRC] = &csi1_clk_src.clkr,
3991	[CSI2_CLK_SRC] = &csi2_clk_src.clkr,
3992	[VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
3993	[VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
3994	[CPP_CLK_SRC] = &cpp_clk_src.clkr,
3995	[JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
3996	[USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
3997	[VFE1_CLK_SRC] = &vfe1_clk_src.clkr,
3998	[APC0_DROOP_DETECTOR_CLK_SRC] = &apc0_droop_detector_clk_src.clkr,
3999	[APC1_DROOP_DETECTOR_CLK_SRC] = &apc1_droop_detector_clk_src.clkr,
4000	[BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
4001	[BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
4002	[BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
4003	[BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
4004	[BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
4005	[BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
4006	[BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
4007	[BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
4008	[BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
4009	[BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
4010	[BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
4011	[BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
4012	[BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
4013	[BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
4014	[BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
4015	[BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
4016	[BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
4017	[BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
4018	[BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
4019	[BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
4020	[CCI_CLK_SRC] = &cci_clk_src.clkr,
4021	[CSI0P_CLK_SRC] = &csi0p_clk_src.clkr,
4022	[CSI1P_CLK_SRC] = &csi1p_clk_src.clkr,
4023	[CSI2P_CLK_SRC] = &csi2p_clk_src.clkr,
4024	[CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
4025	[CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
4026	[MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
4027	[MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
4028	[MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,
4029	[MCLK3_CLK_SRC] = &mclk3_clk_src.clkr,
4030	[CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
4031	[CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
4032	[CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr,
4033	[CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
4034	[GP1_CLK_SRC] = &gp1_clk_src.clkr,
4035	[GP2_CLK_SRC] = &gp2_clk_src.clkr,
4036	[GP3_CLK_SRC] = &gp3_clk_src.clkr,
4037	[PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
4038	[RBCPR_GFX_CLK_SRC] = &rbcpr_gfx_clk_src.clkr,
4039	[SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
4040	[SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
4041	[SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
4042	[USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
4043	[USB3_AUX_CLK_SRC] = &usb3_aux_clk_src.clkr,
4044	[GCC_APC0_DROOP_DETECTOR_GPLL0_CLK] = &gcc_apc0_droop_detector_gpll0_clk.clkr,
4045	[GCC_APC1_DROOP_DETECTOR_GPLL0_CLK] = &gcc_apc1_droop_detector_gpll0_clk.clkr,
4046	[GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
4047	[GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
4048	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
4049	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
4050	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
4051	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
4052	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
4053	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
4054	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
4055	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
4056	[GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
4057	[GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
4058	[GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
4059	[GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
4060	[GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
4061	[GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
4062	[GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
4063	[GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
4064	[GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
4065	[GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
4066	[GCC_CAMSS_CCI_AHB_CLK] = &gcc_camss_cci_ahb_clk.clkr,
4067	[GCC_CAMSS_CCI_CLK] = &gcc_camss_cci_clk.clkr,
4068	[GCC_CAMSS_CPP_AHB_CLK] = &gcc_camss_cpp_ahb_clk.clkr,
4069	[GCC_CAMSS_CPP_AXI_CLK] = &gcc_camss_cpp_axi_clk.clkr,
4070	[GCC_CAMSS_CPP_CLK] = &gcc_camss_cpp_clk.clkr,
4071	[GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr,
4072	[GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr,
4073	[GCC_CAMSS_CSI0_CSIPHY_3P_CLK] = &gcc_camss_csi0_csiphy_3p_clk.clkr,
4074	[GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr,
4075	[GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr,
4076	[GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr,
4077	[GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr,
4078	[GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr,
4079	[GCC_CAMSS_CSI1_CSIPHY_3P_CLK] = &gcc_camss_csi1_csiphy_3p_clk.clkr,
4080	[GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr,
4081	[GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr,
4082	[GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr,
4083	[GCC_CAMSS_CSI2_AHB_CLK] = &gcc_camss_csi2_ahb_clk.clkr,
4084	[GCC_CAMSS_CSI2_CLK] = &gcc_camss_csi2_clk.clkr,
4085	[GCC_CAMSS_CSI2_CSIPHY_3P_CLK] = &gcc_camss_csi2_csiphy_3p_clk.clkr,
4086	[GCC_CAMSS_CSI2PHY_CLK] = &gcc_camss_csi2phy_clk.clkr,
4087	[GCC_CAMSS_CSI2PIX_CLK] = &gcc_camss_csi2pix_clk.clkr,
4088	[GCC_CAMSS_CSI2RDI_CLK] = &gcc_camss_csi2rdi_clk.clkr,
4089	[GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr,
4090	[GCC_CAMSS_CSI_VFE1_CLK] = &gcc_camss_csi_vfe1_clk.clkr,
4091	[GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr,
4092	[GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr,
4093	[GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr,
4094	[GCC_CAMSS_JPEG0_CLK] = &gcc_camss_jpeg0_clk.clkr,
4095	[GCC_CAMSS_JPEG_AHB_CLK] = &gcc_camss_jpeg_ahb_clk.clkr,
4096	[GCC_CAMSS_JPEG_AXI_CLK] = &gcc_camss_jpeg_axi_clk.clkr,
4097	[GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
4098	[GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
4099	[GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr,
4100	[GCC_CAMSS_MCLK3_CLK] = &gcc_camss_mclk3_clk.clkr,
4101	[GCC_CAMSS_MICRO_AHB_CLK] = &gcc_camss_micro_ahb_clk.clkr,
4102	[GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
4103	[GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
4104	[GCC_CAMSS_CSI2PHYTIMER_CLK] = &gcc_camss_csi2phytimer_clk.clkr,
4105	[GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr,
4106	[GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
4107	[GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr,
4108	[GCC_CAMSS_VFE0_AHB_CLK] = &gcc_camss_vfe0_ahb_clk.clkr,
4109	[GCC_CAMSS_VFE0_AXI_CLK] = &gcc_camss_vfe0_axi_clk.clkr,
4110	[GCC_CAMSS_VFE1_AHB_CLK] = &gcc_camss_vfe1_ahb_clk.clkr,
4111	[GCC_CAMSS_VFE1_AXI_CLK] = &gcc_camss_vfe1_axi_clk.clkr,
4112	[GCC_CAMSS_VFE1_CLK] = &gcc_camss_vfe1_clk.clkr,
4113	[GCC_DCC_CLK] = &gcc_dcc_clk.clkr,
4114	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
4115	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
4116	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
4117	[GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
4118	[GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
4119	[GCC_PCNOC_USB3_AXI_CLK] = &gcc_pcnoc_usb3_axi_clk.clkr,
4120	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
4121	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
4122	[GCC_RBCPR_GFX_CLK] = &gcc_rbcpr_gfx_clk.clkr,
4123	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
4124	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
4125	[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
4126	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
4127	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
4128	[GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
4129	[GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
4130	[GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,
4131	[GCC_USB3_AUX_CLK] = &gcc_usb3_aux_clk.clkr,
4132	[GCC_USB_PHY_CFG_AHB_CLK] = &gcc_usb_phy_cfg_ahb_clk.clkr,
4133	[GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr,
4134	[GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr,
4135	[GCC_VENUS0_CORE0_VCODEC0_CLK] = &gcc_venus0_core0_vcodec0_clk.clkr,
4136	[GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr,
4137	[GCC_QUSB_REF_CLK] = &gcc_qusb_ref_clk.clkr,
4138	[GCC_USB_SS_REF_CLK] = &gcc_usb_ss_ref_clk.clkr,
4139	[GCC_USB3_PIPE_CLK] = &gcc_usb3_pipe_clk.clkr,
4140	[MDP_CLK_SRC] = &mdp_clk_src.clkr,
4141	[PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
4142	[BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
4143	[ESC0_CLK_SRC] = &esc0_clk_src.clkr,
4144	[PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,
4145	[BYTE1_CLK_SRC] = &byte1_clk_src.clkr,
4146	[ESC1_CLK_SRC] = &esc1_clk_src.clkr,
4147	[VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
4148	[GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr,
4149	[GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr,
4150	[GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr,
4151	[GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr,
4152	[GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr,
4153	[GCC_MDSS_PCLK1_CLK] = &gcc_mdss_pclk1_clk.clkr,
4154	[GCC_MDSS_BYTE1_CLK] = &gcc_mdss_byte1_clk.clkr,
4155	[GCC_MDSS_ESC1_CLK] = &gcc_mdss_esc1_clk.clkr,
4156	[GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr,
4157	[GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr,
4158	[GCC_OXILI_TIMER_CLK] = &gcc_oxili_timer_clk.clkr,
4159	[GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr,
4160	[GCC_OXILI_AON_CLK] = &gcc_oxili_aon_clk.clkr,
4161	[GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr,
4162	[GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
4163	[GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr,
4164	[GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
4165};
4166
4167static const struct qcom_reset_map gcc_msm8953_resets[] = {
4168	[GCC_CAMSS_MICRO_BCR]	= { 0x56008 },
4169	[GCC_MSS_BCR]		= { 0x71000 },
4170	[GCC_QUSB2_PHY_BCR]	= { 0x4103c },
4171	[GCC_USB3PHY_PHY_BCR]	= { 0x3f03c },
4172	[GCC_USB3_PHY_BCR]	= { 0x3f034 },
4173	[GCC_USB_30_BCR]	= { 0x3f070 },
4174};
4175
4176static const struct regmap_config gcc_msm8953_regmap_config = {
4177	.reg_bits	= 32,
4178	.reg_stride	= 4,
4179	.val_bits	= 32,
4180	.max_register	= 0x80000,
4181	.fast_io	= true,
4182};
4183
4184static struct gdsc *gcc_msm8953_gdscs[] = {
4185	[CPP_GDSC] = &cpp_gdsc,
4186	[JPEG_GDSC] = &jpeg_gdsc,
4187	[MDSS_GDSC] = &mdss_gdsc,
4188	[OXILI_CX_GDSC] = &oxili_cx_gdsc,
4189	[OXILI_GX_GDSC] = &oxili_gx_gdsc,
4190	[USB30_GDSC] = &usb30_gdsc,
4191	[VENUS_CORE0_GDSC] = &venus_core0_gdsc,
4192	[VENUS_GDSC] = &venus_gdsc,
4193	[VFE0_GDSC] = &vfe0_gdsc,
4194	[VFE1_GDSC] = &vfe1_gdsc,
4195};
4196
4197static const struct qcom_cc_desc gcc_msm8953_desc = {
4198	.config = &gcc_msm8953_regmap_config,
4199	.clks = gcc_msm8953_clocks,
4200	.num_clks = ARRAY_SIZE(gcc_msm8953_clocks),
4201	.resets = gcc_msm8953_resets,
4202	.num_resets = ARRAY_SIZE(gcc_msm8953_resets),
4203	.gdscs = gcc_msm8953_gdscs,
4204	.num_gdscs = ARRAY_SIZE(gcc_msm8953_gdscs),
4205	.clk_hws = gcc_msm8953_hws,
4206	.num_clk_hws = ARRAY_SIZE(gcc_msm8953_hws),
4207};
4208
4209static int gcc_msm8953_probe(struct platform_device *pdev)
4210{
4211	struct regmap *regmap;
4212
4213	regmap  = qcom_cc_map(pdev, &gcc_msm8953_desc);
4214	if (IS_ERR(regmap))
4215		return PTR_ERR(regmap);
4216
4217	clk_alpha_pll_configure(&gpll3_early, regmap, &gpll3_early_config);
4218
4219	return qcom_cc_really_probe(pdev, &gcc_msm8953_desc, regmap);
4220}
4221
4222static const struct of_device_id gcc_msm8953_match_table[] = {
4223	{ .compatible = "qcom,gcc-msm8953" },
4224	{},
4225};
4226
4227static struct platform_driver gcc_msm8953_driver = {
4228	.probe = gcc_msm8953_probe,
4229	.driver = {
4230		.name = "gcc-msm8953",
4231		.of_match_table = gcc_msm8953_match_table,
4232	},
4233};
4234
4235static int __init gcc_msm8953_init(void)
4236{
4237	return platform_driver_register(&gcc_msm8953_driver);
4238}
4239core_initcall(gcc_msm8953_init);
4240
4241static void __exit gcc_msm8953_exit(void)
4242{
4243	platform_driver_unregister(&gcc_msm8953_driver);
4244}
4245module_exit(gcc_msm8953_exit);
4246
4247MODULE_DESCRIPTION("Qualcomm GCC MSM8953 Driver");
4248MODULE_LICENSE("GPL v2");