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