Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Copyright (C) 2023 Otto Pflüger
   4 *
   5 * Based on gcc-msm8953.c:
   6 *   Copyright 2021, The Linux Foundation. All rights reserved.
   7 * with parts taken from gcc-qcs404.c:
   8 *   Copyright 2018, The Linux Foundation. All rights reserved.
   9 * and gcc-msm8939.c:
  10 *   Copyright 2020 Linaro Limited
  11 * adapted with data from clock-gcc-8952.c in Qualcomm's msm-4.9 release:
  12 *   Copyright (c) 2014-2020, The Linux Foundation. All rights reserved.
  13 */
  14
  15#include <linux/bitops.h>
  16#include <linux/clk-provider.h>
  17#include <linux/err.h>
  18#include <linux/kernel.h>
  19#include <linux/module.h>
  20#include <linux/of.h>
  21#include <linux/platform_device.h>
  22#include <linux/regmap.h>
  23#include <linux/reset-controller.h>
  24
  25#include <dt-bindings/clock/qcom,gcc-msm8917.h>
  26
  27#include "clk-alpha-pll.h"
  28#include "clk-branch.h"
  29#include "clk-pll.h"
  30#include "clk-rcg.h"
  31#include "common.h"
  32#include "gdsc.h"
  33#include "reset.h"
  34
  35enum {
  36	DT_XO,
  37	DT_SLEEP_CLK,
  38	DT_DSI0PLL,
  39	DT_DSI0PLL_BYTE,
  40};
  41
  42enum {
  43	P_XO,
  44	P_SLEEP_CLK,
  45	P_GPLL0,
  46	P_GPLL3,
  47	P_GPLL4,
  48	P_GPLL6,
  49	P_DSI0PLL,
  50	P_DSI0PLL_BYTE,
  51};
  52
  53static struct clk_alpha_pll gpll0_sleep_clk_src = {
  54	.offset = 0x21000,
  55	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  56	.clkr = {
  57		.enable_reg = 0x45008,
  58		.enable_mask = BIT(23),
  59		.enable_is_inverted = true,
  60		.hw.init = &(struct clk_init_data){
  61			.name = "gpll0_sleep_clk_src",
  62			.parent_data = &(const struct clk_parent_data) {
  63				.index = DT_XO,
  64			},
  65			.num_parents = 1,
  66			.ops = &clk_branch_simple_ops,
  67		},
  68	},
  69};
  70
  71static struct clk_alpha_pll gpll0_early = {
  72	.offset = 0x21000,
  73	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  74	.clkr = {
  75		.enable_reg = 0x45000,
  76		.enable_mask = BIT(0),
  77		.hw.init = &(struct clk_init_data) {
  78			.name = "gpll0_early",
  79			.parent_hws = (const struct clk_hw*[]){
  80				&gpll0_sleep_clk_src.clkr.hw,
  81			},
  82			.num_parents = 1,
  83			.ops = &clk_alpha_pll_fixed_ops,
  84		},
  85	},
  86};
  87
  88static struct clk_alpha_pll_postdiv gpll0 = {
  89	.offset = 0x21000,
  90	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
  91	.clkr.hw.init = &(struct clk_init_data){
  92		.name = "gpll0",
  93		.parent_hws = (const struct clk_hw*[]){
  94			&gpll0_early.clkr.hw,
  95		},
  96		.num_parents = 1,
  97		.ops = &clk_alpha_pll_postdiv_ro_ops,
  98	},
  99};
 100
 101static const struct pll_vco gpll3_p_vco[] = {
 102	{ 700000000, 1400000000, 0 },
 103};
 104
 105static const struct alpha_pll_config gpll3_early_config = {
 106	.l = 63,
 107	.config_ctl_val = 0x4001055b,
 108	.early_output_mask = 0,
 109	.post_div_mask = GENMASK(11, 8),
 110	.post_div_val = BIT(8),
 111};
 112
 113static struct clk_alpha_pll gpll3_early = {
 114	.offset = 0x22000,
 115	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 116	.vco_table = gpll3_p_vco,
 117	.num_vco = ARRAY_SIZE(gpll3_p_vco),
 118	.flags = SUPPORTS_DYNAMIC_UPDATE,
 119	.clkr = {
 120		.hw.init = &(struct clk_init_data){
 121			.name = "gpll3_early",
 122			.parent_data = &(const struct clk_parent_data) {
 123				.index = DT_XO,
 124			},
 125			.num_parents = 1,
 126			.ops = &clk_alpha_pll_ops,
 127		},
 128	},
 129};
 130
 131static struct clk_alpha_pll_postdiv gpll3 = {
 132	.offset = 0x22000,
 133	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 134	.clkr.hw.init = &(struct clk_init_data){
 135		.name = "gpll3",
 136		.parent_hws = (const struct clk_hw*[]){
 137			&gpll3_early.clkr.hw,
 138		},
 139		.num_parents = 1,
 140		.ops = &clk_alpha_pll_postdiv_ops,
 141		.flags = CLK_SET_RATE_PARENT,
 142	},
 143};
 144
 145static struct clk_alpha_pll gpll4_early = {
 146	.offset = 0x24000,
 147	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 148	.clkr = {
 149		.enable_reg = 0x45000,
 150		.enable_mask = BIT(5),
 151		.hw.init = &(struct clk_init_data){
 152			.name = "gpll4_early",
 153			.parent_data = &(const struct clk_parent_data) {
 154				.index = DT_XO,
 155			},
 156			.num_parents = 1,
 157			.ops = &clk_alpha_pll_fixed_ops,
 158		},
 159	},
 160};
 161
 162static struct clk_alpha_pll_postdiv gpll4 = {
 163	.offset = 0x24000,
 164	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
 165	.clkr.hw.init = &(struct clk_init_data){
 166		.name = "gpll4",
 167		.parent_hws = (const struct clk_hw*[]){
 168			&gpll4_early.clkr.hw,
 169		},
 170		.num_parents = 1,
 171		.ops = &clk_alpha_pll_postdiv_ro_ops,
 172	},
 173};
 174
 175static struct clk_pll gpll6_early = {
 176	.l_reg = 0x37004,
 177	.m_reg = 0x37008,
 178	.n_reg = 0x3700c,
 179	.config_reg = 0x37014,
 180	.mode_reg = 0x37000,
 181	.status_reg = 0x3701c,
 182	.status_bit = 17,
 183	.clkr.hw.init = &(struct clk_init_data){
 184		.name = "gpll6_early",
 185		.parent_data = &(const struct clk_parent_data) {
 186			.index = DT_XO,
 187		},
 188		.num_parents = 1,
 189		.ops = &clk_pll_ops,
 190	},
 191};
 192
 193static struct clk_regmap gpll6 = {
 194	.enable_reg = 0x45000,
 195	.enable_mask = BIT(7),
 196	.hw.init = &(struct clk_init_data){
 197		.name = "gpll6",
 198		.parent_hws = (const struct clk_hw*[]){
 199			&gpll6_early.clkr.hw,
 200		},
 201		.num_parents = 1,
 202		.ops = &clk_pll_vote_ops,
 203	},
 204};
 205
 206static const struct parent_map gcc_xo_gpll0_map[] = {
 207	{ P_XO, 0 },
 208	{ P_GPLL0, 1 },
 209};
 210
 211static const struct parent_map gcc_xo_gpll0_out_aux_map[] = {
 212	{ P_XO, 0 },
 213	{ P_GPLL0, 2 },
 214};
 215
 216static const struct clk_parent_data gcc_xo_gpll0_data[] = {
 217	{ .index = DT_XO },
 218	{ .hw = &gpll0.clkr.hw },
 219};
 220
 221static const struct parent_map gcc_xo_gpll0_gpll6_sleep_map[] = {
 222	{ P_XO, 0 },
 223	{ P_GPLL0, 1 },
 224	{ P_GPLL6, 2 },
 225	{ P_SLEEP_CLK, 6 },
 226};
 227
 228static const struct clk_parent_data gcc_xo_gpll0_gpll6_sleep_data[] = {
 229	{ .index = DT_XO },
 230	{ .hw = &gpll0.clkr.hw },
 231	{ .hw = &gpll6.hw },
 232	{ .index = DT_SLEEP_CLK },
 233};
 234
 235static const struct parent_map gcc_xo_gpll0_gpll6_gpll4_map[] = {
 236	{ P_XO, 0 },
 237	{ P_GPLL0, 1 },
 238	{ P_GPLL6, 2 },
 239	{ P_GPLL4, 3 },
 240};
 241
 242static const struct clk_parent_data gcc_xo_gpll0_gpll6_gpll4_data[] = {
 243	{ .index = DT_XO },
 244	{ .hw = &gpll0.clkr.hw },
 245	{ .hw = &gpll6.hw },
 246	{ .hw = &gpll4.clkr.hw },
 247};
 248
 249static const struct freq_tbl ftbl_apss_ahb_clk_src[] = {
 250	F(19200000, P_XO, 1, 0, 0),
 251	F(50000000, P_GPLL0, 16, 0, 0),
 252	F(100000000, P_GPLL0, 8, 0, 0),
 253	F(133330000, P_GPLL0, 6, 0, 0),
 254	{ }
 255};
 256
 257static struct clk_rcg2 apss_ahb_clk_src = {
 258	.cmd_rcgr = 0x46000,
 259	.hid_width = 5,
 260	.freq_tbl = ftbl_apss_ahb_clk_src,
 261	.parent_map = gcc_xo_gpll0_map,
 262	.clkr.hw.init = &(struct clk_init_data) {
 263		.name = "apss_ahb_clk_src",
 264		.parent_data = gcc_xo_gpll0_data,
 265		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
 266		.ops = &clk_rcg2_ops,
 267	}
 268};
 269
 270static const struct freq_tbl ftbl_blsp_i2c_apps_clk_src[] = {
 271	F(19200000, P_XO, 1, 0, 0),
 272	F(50000000, P_GPLL0, 16, 0, 0),
 273	{ }
 274};
 275
 276static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
 277	.cmd_rcgr = 0x03000,
 278	.hid_width = 5,
 279	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 280	.parent_map = gcc_xo_gpll0_map,
 281	.clkr.hw.init = &(struct clk_init_data) {
 282		.name = "blsp1_qup2_i2c_apps_clk_src",
 283		.parent_data = gcc_xo_gpll0_data,
 284		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
 285		.ops = &clk_rcg2_ops,
 286	}
 287};
 288
 289static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
 290	.cmd_rcgr = 0x04000,
 291	.hid_width = 5,
 292	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 293	.parent_map = gcc_xo_gpll0_map,
 294	.clkr.hw.init = &(struct clk_init_data) {
 295		.name = "blsp1_qup3_i2c_apps_clk_src",
 296		.parent_data = gcc_xo_gpll0_data,
 297		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
 298		.ops = &clk_rcg2_ops,
 299	}
 300};
 301
 302static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
 303	.cmd_rcgr = 0x05000,
 304	.hid_width = 5,
 305	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 306	.parent_map = gcc_xo_gpll0_map,
 307	.clkr.hw.init = &(struct clk_init_data) {
 308		.name = "blsp1_qup4_i2c_apps_clk_src",
 309		.parent_data = gcc_xo_gpll0_data,
 310		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
 311		.ops = &clk_rcg2_ops,
 312	}
 313};
 314
 315static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
 316	.cmd_rcgr = 0x0c00c,
 317	.hid_width = 5,
 318	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 319	.parent_map = gcc_xo_gpll0_map,
 320	.clkr.hw.init = &(struct clk_init_data) {
 321		.name = "blsp2_qup1_i2c_apps_clk_src",
 322		.parent_data = gcc_xo_gpll0_data,
 323		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
 324		.ops = &clk_rcg2_ops,
 325	}
 326};
 327
 328static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
 329	.cmd_rcgr = 0x0d000,
 330	.hid_width = 5,
 331	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 332	.parent_map = gcc_xo_gpll0_map,
 333	.clkr.hw.init = &(struct clk_init_data) {
 334		.name = "blsp2_qup2_i2c_apps_clk_src",
 335		.parent_data = gcc_xo_gpll0_data,
 336		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
 337		.ops = &clk_rcg2_ops,
 338	}
 339};
 340
 341static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
 342	.cmd_rcgr = 0x0f000,
 343	.hid_width = 5,
 344	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
 345	.parent_map = gcc_xo_gpll0_map,
 346	.clkr.hw.init = &(struct clk_init_data) {
 347		.name = "blsp2_qup3_i2c_apps_clk_src",
 348		.parent_data = gcc_xo_gpll0_data,
 349		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
 350		.ops = &clk_rcg2_ops,
 351	}
 352};
 353
 354static const struct freq_tbl ftbl_blsp_spi_apps_clk_src[] = {
 355	F(960000, P_XO, 10, 1, 2),
 356	F(4800000, P_XO, 4, 0, 0),
 357	F(9600000, P_XO, 2, 0, 0),
 358	F(16000000, P_GPLL0, 10, 1, 5),
 359	F(19200000, P_XO, 1, 0, 0),
 360	F(25000000, P_GPLL0, 16, 1, 2),
 361	F(50000000, P_GPLL0, 16, 0, 0),
 362	{ }
 363};
 364
 365static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
 366	.cmd_rcgr = 0x03014,
 367	.hid_width = 5,
 368	.mnd_width = 8,
 369	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
 370	.parent_map = gcc_xo_gpll0_map,
 371	.clkr.hw.init = &(struct clk_init_data) {
 372		.name = "blsp1_qup2_spi_apps_clk_src",
 373		.parent_data = gcc_xo_gpll0_data,
 374		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
 375		.ops = &clk_rcg2_ops,
 376	}
 377};
 378
 379static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
 380	.cmd_rcgr = 0x04024,
 381	.hid_width = 5,
 382	.mnd_width = 8,
 383	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
 384	.parent_map = gcc_xo_gpll0_map,
 385	.clkr.hw.init = &(struct clk_init_data) {
 386		.name = "blsp1_qup3_spi_apps_clk_src",
 387		.parent_data = gcc_xo_gpll0_data,
 388		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
 389		.ops = &clk_rcg2_ops,
 390	}
 391};
 392
 393static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
 394	.cmd_rcgr = 0x05024,
 395	.hid_width = 5,
 396	.mnd_width = 8,
 397	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
 398	.parent_map = gcc_xo_gpll0_map,
 399	.clkr.hw.init = &(struct clk_init_data) {
 400		.name = "blsp1_qup4_spi_apps_clk_src",
 401		.parent_data = gcc_xo_gpll0_data,
 402		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
 403		.ops = &clk_rcg2_ops,
 404	}
 405};
 406
 407static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
 408	.cmd_rcgr = 0x0c024,
 409	.hid_width = 5,
 410	.mnd_width = 8,
 411	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
 412	.parent_map = gcc_xo_gpll0_map,
 413	.clkr.hw.init = &(struct clk_init_data) {
 414		.name = "blsp2_qup1_spi_apps_clk_src",
 415		.parent_data = gcc_xo_gpll0_data,
 416		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
 417		.ops = &clk_rcg2_ops,
 418	}
 419};
 420
 421static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
 422	.cmd_rcgr = 0x0d014,
 423	.hid_width = 5,
 424	.mnd_width = 8,
 425	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
 426	.parent_map = gcc_xo_gpll0_map,
 427	.clkr.hw.init = &(struct clk_init_data) {
 428		.name = "blsp2_qup2_spi_apps_clk_src",
 429		.parent_data = gcc_xo_gpll0_data,
 430		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
 431		.ops = &clk_rcg2_ops,
 432	}
 433};
 434
 435static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
 436	.cmd_rcgr = 0x0f024,
 437	.hid_width = 5,
 438	.mnd_width = 8,
 439	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
 440	.parent_map = gcc_xo_gpll0_map,
 441	.clkr.hw.init = &(struct clk_init_data) {
 442		.name = "blsp2_qup3_spi_apps_clk_src",
 443		.parent_data = gcc_xo_gpll0_data,
 444		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
 445		.ops = &clk_rcg2_ops,
 446	}
 447};
 448
 449static const struct freq_tbl ftbl_blsp_uart_apps_clk_src[] = {
 450	F(3686400, P_GPLL0, 1, 72, 15625),
 451	F(7372800, P_GPLL0, 1, 144, 15625),
 452	F(14745600, P_GPLL0, 1, 288, 15625),
 453	F(16000000, P_GPLL0, 10, 1, 5),
 454	F(19200000, P_XO, 1, 0, 0),
 455	F(24000000, P_GPLL0, 1, 3, 100),
 456	F(25000000, P_GPLL0, 16, 1, 2),
 457	F(32000000, P_GPLL0, 1, 1, 25),
 458	F(40000000, P_GPLL0, 1, 1, 20),
 459	F(46400000, P_GPLL0, 1, 29, 500),
 460	F(48000000, P_GPLL0, 1, 3, 50),
 461	F(51200000, P_GPLL0, 1, 8, 125),
 462	F(56000000, P_GPLL0, 1, 7, 100),
 463	F(58982400, P_GPLL0, 1, 1152, 15625),
 464	F(60000000, P_GPLL0, 1, 3, 40),
 465	F(64000000, P_GPLL0, 1, 2, 25),
 466	{ }
 467};
 468
 469static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
 470	.cmd_rcgr = 0x02044,
 471	.hid_width = 5,
 472	.mnd_width = 16,
 473	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
 474	.parent_map = gcc_xo_gpll0_map,
 475	.clkr.hw.init = &(struct clk_init_data) {
 476		.name = "blsp1_uart1_apps_clk_src",
 477		.parent_data = gcc_xo_gpll0_data,
 478		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
 479		.ops = &clk_rcg2_ops,
 480	}
 481};
 482
 483static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
 484	.cmd_rcgr = 0x03034,
 485	.hid_width = 5,
 486	.mnd_width = 16,
 487	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
 488	.parent_map = gcc_xo_gpll0_map,
 489	.clkr.hw.init = &(struct clk_init_data) {
 490		.name = "blsp1_uart2_apps_clk_src",
 491		.parent_data = gcc_xo_gpll0_data,
 492		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
 493		.ops = &clk_rcg2_ops,
 494	}
 495};
 496
 497static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
 498	.cmd_rcgr = 0x0c044,
 499	.hid_width = 5,
 500	.mnd_width = 16,
 501	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
 502	.parent_map = gcc_xo_gpll0_map,
 503	.clkr.hw.init = &(struct clk_init_data) {
 504		.name = "blsp2_uart1_apps_clk_src",
 505		.parent_data = gcc_xo_gpll0_data,
 506		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
 507		.ops = &clk_rcg2_ops,
 508	}
 509};
 510
 511static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
 512	.cmd_rcgr = 0x0d034,
 513	.hid_width = 5,
 514	.mnd_width = 16,
 515	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
 516	.parent_map = gcc_xo_gpll0_map,
 517	.clkr.hw.init = &(struct clk_init_data) {
 518		.name = "blsp2_uart2_apps_clk_src",
 519		.parent_data = gcc_xo_gpll0_data,
 520		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
 521		.ops = &clk_rcg2_ops,
 522	}
 523};
 524
 525static const struct parent_map gcc_byte0_map[] = {
 526	{ P_XO, 0 },
 527	{ P_DSI0PLL_BYTE, 1 },
 528};
 529
 530static const struct clk_parent_data gcc_byte_data[] = {
 531	{ .index = DT_XO },
 532	{ .index = DT_DSI0PLL_BYTE },
 533};
 534
 535static struct clk_rcg2 byte0_clk_src = {
 536	.cmd_rcgr = 0x4d044,
 537	.hid_width = 5,
 538	.parent_map = gcc_byte0_map,
 539	.clkr.hw.init = &(struct clk_init_data) {
 540		.name = "byte0_clk_src",
 541		.parent_data = gcc_byte_data,
 542		.num_parents = ARRAY_SIZE(gcc_byte_data),
 543		.ops = &clk_byte2_ops,
 544		.flags = CLK_SET_RATE_PARENT,
 545	}
 546};
 547
 548static const struct freq_tbl ftbl_camss_gp_clk_src[] = {
 549	F(100000000, P_GPLL0, 8, 0, 0),
 550	F(160000000, P_GPLL0, 5, 0, 0),
 551	F(200000000, P_GPLL0, 4, 0, 0),
 552	{ }
 553};
 554
 555static struct clk_rcg2 camss_gp0_clk_src = {
 556	.cmd_rcgr = 0x54000,
 557	.hid_width = 5,
 558	.mnd_width = 8,
 559	.freq_tbl = ftbl_camss_gp_clk_src,
 560	.parent_map = gcc_xo_gpll0_gpll6_sleep_map,
 561	.clkr.hw.init = &(struct clk_init_data) {
 562		.name = "camss_gp0_clk_src",
 563		.parent_data = gcc_xo_gpll0_gpll6_sleep_data,
 564		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
 565		.ops = &clk_rcg2_ops,
 566	}
 567};
 568
 569static struct clk_rcg2 camss_gp1_clk_src = {
 570	.cmd_rcgr = 0x55000,
 571	.hid_width = 5,
 572	.mnd_width = 8,
 573	.freq_tbl = ftbl_camss_gp_clk_src,
 574	.parent_map = gcc_xo_gpll0_gpll6_sleep_map,
 575	.clkr.hw.init = &(struct clk_init_data) {
 576		.name = "camss_gp1_clk_src",
 577		.parent_data = gcc_xo_gpll0_gpll6_sleep_data,
 578		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
 579		.ops = &clk_rcg2_ops,
 580	}
 581};
 582
 583static const struct freq_tbl ftbl_camss_top_ahb_clk_src[] = {
 584	F(40000000, P_GPLL0, 10, 1, 2),
 585	F(61540000, P_GPLL0, 13, 0, 0),
 586	F(80000000, P_GPLL0, 10, 0, 0),
 587	{ }
 588};
 589
 590static struct clk_rcg2 camss_top_ahb_clk_src = {
 591	.cmd_rcgr = 0x5a000,
 592	.hid_width = 5,
 593	.freq_tbl = ftbl_camss_top_ahb_clk_src,
 594	.parent_map = gcc_xo_gpll0_map,
 595	.clkr.hw.init = &(struct clk_init_data) {
 596		.name = "camss_top_ahb_clk_src",
 597		.parent_data = gcc_xo_gpll0_data,
 598		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
 599		.ops = &clk_rcg2_ops,
 600	}
 601};
 602
 603static const struct freq_tbl ftbl_cci_clk_src[] = {
 604	F(19200000, P_XO, 1, 0, 0),
 605	F(37500000, P_GPLL0, 1, 3, 64),
 606	{ }
 607};
 608
 609static struct clk_rcg2 cci_clk_src = {
 610	.cmd_rcgr = 0x51000,
 611	.hid_width = 5,
 612	.mnd_width = 8,
 613	.freq_tbl = ftbl_cci_clk_src,
 614	.parent_map = gcc_xo_gpll0_out_aux_map,
 615	.clkr.hw.init = &(struct clk_init_data) {
 616		.name = "cci_clk_src",
 617		.parent_data = gcc_xo_gpll0_data,
 618		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
 619		.ops = &clk_rcg2_ops,
 620	}
 621};
 622
 623static const struct parent_map gcc_cpp_map[] = {
 624	{ P_XO, 0 },
 625	{ P_GPLL0, 1 },
 626	{ P_GPLL6, 3 },
 627};
 628
 629static const struct clk_parent_data gcc_cpp_data[] = {
 630	{ .index = DT_XO },
 631	{ .hw = &gpll0.clkr.hw },
 632	{ .hw = &gpll6.hw },
 633};
 634
 635static const struct freq_tbl ftbl_cpp_clk_src[] = {
 636	F(133330000, P_GPLL0, 6, 0, 0),
 637	F(160000000, P_GPLL0, 5, 0, 0),
 638	F(266670000, P_GPLL0, 3, 0, 0),
 639	F(308570000, P_GPLL0, 3.5, 0, 0),
 640	F(320000000, P_GPLL0, 2.5, 0, 0),
 641	F(360000000, P_GPLL6, 3, 0, 0),
 642	{ }
 643};
 644
 645static struct clk_rcg2 cpp_clk_src = {
 646	.cmd_rcgr = 0x58018,
 647	.hid_width = 5,
 648	.freq_tbl = ftbl_cpp_clk_src,
 649	.parent_map = gcc_cpp_map,
 650	.clkr.hw.init = &(struct clk_init_data) {
 651		.name = "cpp_clk_src",
 652		.parent_data = gcc_cpp_data,
 653		.num_parents = ARRAY_SIZE(gcc_cpp_data),
 654		.ops = &clk_rcg2_ops,
 655	}
 656};
 657
 658static const struct freq_tbl ftbl_crypto_clk_src[] = {
 659	F(50000000, P_GPLL0, 16, 0, 0),
 660	F(80000000, P_GPLL0, 10, 0, 0),
 661	F(100000000, P_GPLL0, 8, 0, 0),
 662	F(160000000, P_GPLL0, 5, 0, 0),
 663	{ }
 664};
 665
 666static struct clk_rcg2 crypto_clk_src = {
 667	.cmd_rcgr = 0x16004,
 668	.hid_width = 5,
 669	.freq_tbl = ftbl_crypto_clk_src,
 670	.parent_map = gcc_xo_gpll0_map,
 671	.clkr.hw.init = &(struct clk_init_data) {
 672		.name = "crypto_clk_src",
 673		.parent_data = gcc_xo_gpll0_data,
 674		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
 675		.ops = &clk_rcg2_ops,
 676	}
 677};
 678
 679static const struct freq_tbl ftbl_csi_clk_src[] = {
 680	F(100000000, P_GPLL0, 8, 0, 0),
 681	F(160000000, P_GPLL0, 5, 0, 0),
 682	F(200000000, P_GPLL0, 4, 0, 0),
 683	{ }
 684};
 685
 686static struct clk_rcg2 csi0_clk_src = {
 687	.cmd_rcgr = 0x4e020,
 688	.hid_width = 5,
 689	.freq_tbl = ftbl_csi_clk_src,
 690	.parent_map = gcc_xo_gpll0_map,
 691	.clkr.hw.init = &(struct clk_init_data) {
 692		.name = "csi0_clk_src",
 693		.parent_data = gcc_xo_gpll0_data,
 694		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
 695		.ops = &clk_rcg2_ops,
 696	}
 697};
 698
 699static struct clk_rcg2 csi1_clk_src = {
 700	.cmd_rcgr = 0x4f020,
 701	.hid_width = 5,
 702	.freq_tbl = ftbl_csi_clk_src,
 703	.parent_map = gcc_xo_gpll0_map,
 704	.clkr.hw.init = &(struct clk_init_data) {
 705		.name = "csi1_clk_src",
 706		.parent_data = gcc_xo_gpll0_data,
 707		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
 708		.ops = &clk_rcg2_ops,
 709	}
 710};
 711
 712static struct clk_rcg2 csi2_clk_src = {
 713	.cmd_rcgr = 0x3c020,
 714	.hid_width = 5,
 715	.freq_tbl = ftbl_csi_clk_src,
 716	.parent_map = gcc_xo_gpll0_map,
 717	.clkr.hw.init = &(struct clk_init_data) {
 718		.name = "csi2_clk_src",
 719		.parent_data = gcc_xo_gpll0_data,
 720		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
 721		.ops = &clk_rcg2_ops,
 722	}
 723};
 724
 725static const struct freq_tbl ftbl_csi_phytimer_clk_src[] = {
 726	F(100000000, P_GPLL0, 8, 0, 0),
 727	F(160000000, P_GPLL0, 5, 0, 0),
 728	F(200000000, P_GPLL0, 4, 0, 0),
 729	F(266670000, P_GPLL0, 3, 0, 0),
 730	{ }
 731};
 732
 733static struct clk_rcg2 csi0phytimer_clk_src = {
 734	.cmd_rcgr = 0x4e000,
 735	.hid_width = 5,
 736	.freq_tbl = ftbl_csi_phytimer_clk_src,
 737	.parent_map = gcc_xo_gpll0_map,
 738	.clkr.hw.init = &(struct clk_init_data) {
 739		.name = "csi0phytimer_clk_src",
 740		.parent_data = gcc_xo_gpll0_data,
 741		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
 742		.ops = &clk_rcg2_ops,
 743	}
 744};
 745
 746static struct clk_rcg2 csi1phytimer_clk_src = {
 747	.cmd_rcgr = 0x4f000,
 748	.hid_width = 5,
 749	.freq_tbl = ftbl_csi_phytimer_clk_src,
 750	.parent_map = gcc_xo_gpll0_map,
 751	.clkr.hw.init = &(struct clk_init_data) {
 752		.name = "csi1phytimer_clk_src",
 753		.parent_data = gcc_xo_gpll0_data,
 754		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
 755		.ops = &clk_rcg2_ops,
 756	}
 757};
 758
 759static const struct freq_tbl ftbl_esc0_1_clk_src[] = {
 760	F(19200000, P_XO, 1, 0, 0),
 761	{ }
 762};
 763
 764static struct clk_rcg2 esc0_clk_src = {
 765	.cmd_rcgr = 0x4d05c,
 766	.hid_width = 5,
 767	.freq_tbl = ftbl_esc0_1_clk_src,
 768	.parent_map = gcc_xo_gpll0_out_aux_map,
 769	.clkr.hw.init = &(struct clk_init_data) {
 770		.name = "esc0_clk_src",
 771		.parent_data = gcc_xo_gpll0_data,
 772		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
 773		.ops = &clk_rcg2_ops,
 774	}
 775};
 776
 777static const struct parent_map gcc_gfx3d_map[] = {
 778	{ P_XO, 0 },
 779	{ P_GPLL0, 1 },
 780	{ P_GPLL3, 2 },
 781	{ P_GPLL6, 3 },
 782};
 783
 784static const struct parent_map gcc_gfx3d_map_qm215[] = {
 785	{ P_XO, 0 },
 786	{ P_GPLL0, 5 },
 787	{ P_GPLL3, 2 },
 788	{ P_GPLL6, 6 },
 789};
 790
 791static const struct clk_parent_data gcc_gfx3d_data[] = {
 792	{ .index = DT_XO },
 793	{ .hw = &gpll0.clkr.hw },
 794	{ .hw = &gpll3.clkr.hw },
 795	{ .hw = &gpll6.hw },
 796};
 797
 798static const struct freq_tbl ftbl_gfx3d_clk_src[] = {
 799	F(19200000, P_XO, 1, 0, 0),
 800	F(50000000, P_GPLL0, 16, 0, 0),
 801	F(80000000, P_GPLL0, 10, 0, 0),
 802	F(100000000, P_GPLL0, 8, 0, 0),
 803	F(160000000, P_GPLL0, 5, 0, 0),
 804	F(200000000, P_GPLL0, 4, 0, 0),
 805	F(228570000, P_GPLL0, 3.5, 0, 0),
 806	F(240000000, P_GPLL6, 4.5, 0, 0),
 807	F(266670000, P_GPLL0, 3, 0, 0),
 808	F(270000000, P_GPLL6, 4, 0, 0),
 809	F(320000000, P_GPLL0, 2.5, 0, 0),
 810	F(400000000, P_GPLL0, 2, 0, 0),
 811	F(465000000, P_GPLL3, 1, 0, 0),
 812	F(484800000, P_GPLL3, 1, 0, 0),
 813	F(500000000, P_GPLL3, 1, 0, 0),
 814	F(523200000, P_GPLL3, 1, 0, 0),
 815	F(550000000, P_GPLL3, 1, 0, 0),
 816	F(598000000, P_GPLL3, 1, 0, 0),
 817	{ }
 818};
 819
 820static struct clk_rcg2 gfx3d_clk_src = {
 821	.cmd_rcgr = 0x59000,
 822	.hid_width = 5,
 823	.freq_tbl = ftbl_gfx3d_clk_src,
 824	.parent_map = gcc_gfx3d_map,
 825	.clkr.hw.init = &(struct clk_init_data) {
 826		.name = "gfx3d_clk_src",
 827		.parent_data = gcc_gfx3d_data,
 828		.num_parents = ARRAY_SIZE(gcc_gfx3d_data),
 829		.ops = &clk_rcg2_ops,
 830		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
 831	}
 832};
 833
 834static const struct freq_tbl ftbl_gp_clk_src[] = {
 835	F(19200000, P_XO, 1, 0, 0),
 836	{ }
 837};
 838
 839static struct clk_rcg2 gp1_clk_src = {
 840	.cmd_rcgr = 0x08004,
 841	.hid_width = 5,
 842	.mnd_width = 8,
 843	.freq_tbl = ftbl_gp_clk_src,
 844	.parent_map = gcc_xo_gpll0_gpll6_sleep_map,
 845	.clkr.hw.init = &(struct clk_init_data) {
 846		.name = "gp1_clk_src",
 847		.parent_data = gcc_xo_gpll0_gpll6_sleep_data,
 848		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
 849		.ops = &clk_rcg2_ops,
 850	}
 851};
 852
 853static struct clk_rcg2 gp2_clk_src = {
 854	.cmd_rcgr = 0x09004,
 855	.hid_width = 5,
 856	.mnd_width = 8,
 857	.freq_tbl = ftbl_gp_clk_src,
 858	.parent_map = gcc_xo_gpll0_gpll6_sleep_map,
 859	.clkr.hw.init = &(struct clk_init_data) {
 860		.name = "gp2_clk_src",
 861		.parent_data = gcc_xo_gpll0_gpll6_sleep_data,
 862		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
 863		.ops = &clk_rcg2_ops,
 864	}
 865};
 866
 867static struct clk_rcg2 gp3_clk_src = {
 868	.cmd_rcgr = 0x0a004,
 869	.hid_width = 5,
 870	.mnd_width = 8,
 871	.freq_tbl = ftbl_gp_clk_src,
 872	.parent_map = gcc_xo_gpll0_gpll6_sleep_map,
 873	.clkr.hw.init = &(struct clk_init_data) {
 874		.name = "gp3_clk_src",
 875		.parent_data = gcc_xo_gpll0_gpll6_sleep_data,
 876		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
 877		.ops = &clk_rcg2_ops,
 878	}
 879};
 880
 881static const struct freq_tbl ftbl_jpeg0_clk_src[] = {
 882	F(133330000, P_GPLL0, 6, 0, 0),
 883	F(266670000, P_GPLL0, 3, 0, 0),
 884	F(320000000, P_GPLL0, 2.5, 0, 0),
 885	{ }
 886};
 887
 888static struct clk_rcg2 jpeg0_clk_src = {
 889	.cmd_rcgr = 0x57000,
 890	.hid_width = 5,
 891	.freq_tbl = ftbl_jpeg0_clk_src,
 892	.parent_map = gcc_xo_gpll0_map,
 893	.clkr.hw.init = &(struct clk_init_data) {
 894		.name = "jpeg0_clk_src",
 895		.parent_data = gcc_xo_gpll0_data,
 896		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
 897		.ops = &clk_rcg2_ops,
 898	}
 899};
 900
 901static const struct freq_tbl ftbl_mclk_clk_src[] = {
 902	F(19200000, P_XO, 1, 0, 0),
 903	F(24000000, P_GPLL6, 1, 1, 45),
 904	F(66667000, P_GPLL0, 12, 0, 0),
 905	{ }
 906};
 907
 908static struct clk_rcg2 mclk0_clk_src = {
 909	.cmd_rcgr = 0x52000,
 910	.hid_width = 5,
 911	.mnd_width = 8,
 912	.freq_tbl = ftbl_mclk_clk_src,
 913	.parent_map = gcc_xo_gpll0_gpll6_sleep_map,
 914	.clkr.hw.init = &(struct clk_init_data) {
 915		.name = "mclk0_clk_src",
 916		.parent_data = gcc_xo_gpll0_gpll6_sleep_data,
 917		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
 918		.ops = &clk_rcg2_ops,
 919	}
 920};
 921
 922static struct clk_rcg2 mclk1_clk_src = {
 923	.cmd_rcgr = 0x53000,
 924	.hid_width = 5,
 925	.mnd_width = 8,
 926	.freq_tbl = ftbl_mclk_clk_src,
 927	.parent_map = gcc_xo_gpll0_gpll6_sleep_map,
 928	.clkr.hw.init = &(struct clk_init_data) {
 929		.name = "mclk1_clk_src",
 930		.parent_data = gcc_xo_gpll0_gpll6_sleep_data,
 931		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
 932		.ops = &clk_rcg2_ops,
 933	}
 934};
 935
 936static struct clk_rcg2 mclk2_clk_src = {
 937	.cmd_rcgr = 0x5c000,
 938	.hid_width = 5,
 939	.mnd_width = 8,
 940	.freq_tbl = ftbl_mclk_clk_src,
 941	.parent_map = gcc_xo_gpll0_gpll6_sleep_map,
 942	.clkr.hw.init = &(struct clk_init_data) {
 943		.name = "mclk2_clk_src",
 944		.parent_data = gcc_xo_gpll0_gpll6_sleep_data,
 945		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
 946		.ops = &clk_rcg2_ops,
 947	}
 948};
 949
 950static const struct freq_tbl ftbl_mdp_clk_src[] = {
 951	F(50000000, P_GPLL0, 16, 0, 0),
 952	F(80000000, P_GPLL0, 10, 0, 0),
 953	F(100000000, P_GPLL0, 8, 0, 0),
 954	F(145450000, P_GPLL0, 5.5, 0, 0),
 955	F(160000000, P_GPLL0, 5, 0, 0),
 956	F(177780000, P_GPLL0, 4.5, 0, 0),
 957	F(200000000, P_GPLL0, 4, 0, 0),
 958	F(266670000, P_GPLL0, 3, 0, 0),
 959	F(320000000, P_GPLL0, 2.5, 0, 0),
 960	{ }
 961};
 962
 963static struct clk_rcg2 mdp_clk_src = {
 964	.cmd_rcgr = 0x4d014,
 965	.hid_width = 5,
 966	.freq_tbl = ftbl_mdp_clk_src,
 967	.parent_map = gcc_xo_gpll0_map,
 968	.clkr.hw.init = &(struct clk_init_data) {
 969		.name = "mdp_clk_src",
 970		.parent_data = gcc_xo_gpll0_data,
 971		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
 972		.ops = &clk_rcg2_ops,
 973	}
 974};
 975
 976static const struct parent_map gcc_pclk_map[] = {
 977	{ P_XO, 0 },
 978	{ P_DSI0PLL, 1 },
 979};
 980
 981static const struct clk_parent_data gcc_pclk_data[] = {
 982	{ .index = DT_XO },
 983	{ .index = DT_DSI0PLL },
 984};
 985
 986static struct clk_rcg2 pclk0_clk_src = {
 987	.cmd_rcgr = 0x4d000,
 988	.hid_width = 5,
 989	.mnd_width = 8,
 990	.parent_map = gcc_pclk_map,
 991	.clkr.hw.init = &(struct clk_init_data) {
 992		.name = "pclk0_clk_src",
 993		.parent_data = gcc_pclk_data,
 994		.num_parents = ARRAY_SIZE(gcc_pclk_data),
 995		.ops = &clk_pixel_ops,
 996		.flags = CLK_SET_RATE_PARENT,
 997	}
 998};
 999
1000static const struct freq_tbl ftbl_pdm2_clk_src[] = {
1001	F(64000000, P_GPLL0, 12.5, 0, 0),
1002	{ }
1003};
1004
1005static struct clk_rcg2 pdm2_clk_src = {
1006	.cmd_rcgr = 0x44010,
1007	.hid_width = 5,
1008	.freq_tbl = ftbl_pdm2_clk_src,
1009	.parent_map = gcc_xo_gpll0_map,
1010	.clkr.hw.init = &(struct clk_init_data) {
1011		.name = "pdm2_clk_src",
1012		.parent_data = gcc_xo_gpll0_data,
1013		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
1014		.ops = &clk_rcg2_ops,
1015	}
1016};
1017
1018static const struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = {
1019	F(100000000, P_GPLL0, 8, 0, 0),
1020	F(200000000, P_GPLL0, 4, 0, 0),
1021	{ }
1022};
1023
1024static struct clk_rcg2 sdcc1_ice_core_clk_src = {
1025	.cmd_rcgr = 0x5d000,
1026	.hid_width = 5,
1027	.freq_tbl = ftbl_sdcc1_ice_core_clk_src,
1028	.parent_map = gcc_xo_gpll0_map,
1029	.clkr.hw.init = &(struct clk_init_data) {
1030		.name = "sdcc1_ice_core_clk_src",
1031		.parent_data = gcc_xo_gpll0_data,
1032		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
1033		.ops = &clk_rcg2_ops,
1034	}
1035};
1036
1037static const struct parent_map gcc_sdcc1_apps_map[] = {
1038	{ P_XO, 0 },
1039	{ P_GPLL0, 1 },
1040	{ P_GPLL4, 2 },
1041};
1042
1043static const struct clk_parent_data gcc_sdcc1_apss_data[] = {
1044	{ .index = DT_XO },
1045	{ .hw = &gpll0.clkr.hw },
1046	{ .hw = &gpll4.clkr.hw },
1047};
1048
1049static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
1050	F(144000, P_XO, 16, 3, 25),
1051	F(400000, P_XO, 12, 1, 4),
1052	F(20000000, P_GPLL0, 10, 1, 4),
1053	F(25000000, P_GPLL0, 16, 1, 2),
1054	F(50000000, P_GPLL0, 16, 0, 0),
1055	F(100000000, P_GPLL0, 8, 0, 0),
1056	F(177770000, P_GPLL0, 4.5, 0, 0),
1057	F(192000000, P_GPLL4, 6, 0, 0),
1058	F(200000000, P_GPLL0, 4, 0, 0),
1059	F(384000000, P_GPLL4, 3, 0, 0),
1060	{ }
1061};
1062
1063static struct clk_rcg2 sdcc1_apps_clk_src = {
1064	.cmd_rcgr = 0x42004,
1065	.hid_width = 5,
1066	.mnd_width = 8,
1067	.freq_tbl = ftbl_sdcc1_apps_clk_src,
1068	.parent_map = gcc_sdcc1_apps_map,
1069	.clkr.hw.init = &(struct clk_init_data) {
1070		.name = "sdcc1_apps_clk_src",
1071		.parent_data = gcc_sdcc1_apss_data,
1072		.num_parents = ARRAY_SIZE(gcc_sdcc1_apss_data),
1073		.ops = &clk_rcg2_floor_ops,
1074	}
1075};
1076
1077static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = {
1078	F(144000, P_XO, 16, 3, 25),
1079	F(400000, P_XO, 12, 1, 4),
1080	F(20000000, P_GPLL0, 10, 1, 4),
1081	F(25000000, P_GPLL0, 16, 1, 2),
1082	F(50000000, P_GPLL0, 16, 0, 0),
1083	F(100000000, P_GPLL0, 8, 0, 0),
1084	F(177770000, P_GPLL0, 4.5, 0, 0),
1085	F(200000000, P_GPLL0, 4, 0, 0),
1086	{ }
1087};
1088
1089static struct clk_rcg2 sdcc2_apps_clk_src = {
1090	.cmd_rcgr = 0x43004,
1091	.hid_width = 5,
1092	.mnd_width = 8,
1093	.freq_tbl = ftbl_sdcc2_apps_clk_src,
1094	.parent_map = gcc_xo_gpll0_map,
1095	.clkr.hw.init = &(struct clk_init_data) {
1096		.name = "sdcc2_apps_clk_src",
1097		.parent_data = gcc_xo_gpll0_data,
1098		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
1099		.ops = &clk_rcg2_floor_ops,
1100	}
1101};
1102
1103static const struct freq_tbl ftbl_usb_hs_system_clk_src[] = {
1104	F(80000000, P_GPLL0, 10, 0, 0),
1105	F(100000000, P_GPLL0, 8, 0, 0),
1106	F(133330000, P_GPLL0, 6, 0, 0),
1107	F(177780000, P_GPLL0, 4.5, 0, 0),
1108	{ }
1109};
1110
1111static struct clk_rcg2 usb_hs_system_clk_src = {
1112	.cmd_rcgr = 0x41010,
1113	.hid_width = 5,
1114	.parent_map = gcc_xo_gpll0_map,
1115	.freq_tbl = ftbl_usb_hs_system_clk_src,
1116	.clkr.hw.init = &(struct clk_init_data){
1117		.name = "usb_hs_system_clk_src",
1118		.parent_data = gcc_xo_gpll0_data,
1119		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
1120		.ops = &clk_rcg2_ops,
1121	},
1122};
1123
1124static const struct freq_tbl ftbl_vcodec0_clk_src[] = {
1125	F(133330000, P_GPLL0, 6, 0, 0),
1126	F(180000000, P_GPLL6, 6, 0, 0),
1127	F(228570000, P_GPLL0, 3.5, 0, 0),
1128	F(266670000, P_GPLL0, 3, 0, 0),
1129	F(308570000, P_GPLL6, 3.5, 0, 0),
1130	F(329140000, P_GPLL4, 3.5, 0, 0),
1131	F(360000000, P_GPLL6, 3, 0, 0),
1132	{ }
1133};
1134
1135static struct clk_rcg2 vcodec0_clk_src = {
1136	.cmd_rcgr = 0x4c000,
1137	.hid_width = 5,
1138	.freq_tbl = ftbl_vcodec0_clk_src,
1139	.parent_map = gcc_xo_gpll0_gpll6_gpll4_map,
1140	.clkr.hw.init = &(struct clk_init_data) {
1141		.name = "vcodec0_clk_src",
1142		.parent_data = gcc_xo_gpll0_gpll6_gpll4_data,
1143		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_gpll4_data),
1144		.ops = &clk_rcg2_ops,
1145	}
1146};
1147
1148static const struct freq_tbl ftbl_vfe_clk_src[] = {
1149	F(50000000, P_GPLL0, 16, 0, 0),
1150	F(80000000, P_GPLL0, 10, 0, 0),
1151	F(100000000, P_GPLL0, 8, 0, 0),
1152	F(133330000, P_GPLL0, 6, 0, 0),
1153	F(160000000, P_GPLL0, 5, 0, 0),
1154	F(200000000, P_GPLL0, 4, 0, 0),
1155	F(266670000, P_GPLL0, 3, 0, 0),
1156	F(308570000, P_GPLL6, 3.5, 0, 0),
1157	F(320000000, P_GPLL0, 2.5, 0, 0),
1158	F(329140000, P_GPLL4, 3.5, 0, 0),
1159	F(360000000, P_GPLL6, 3, 0, 0),
1160	{ }
1161};
1162
1163static struct clk_rcg2 vfe0_clk_src = {
1164	.cmd_rcgr = 0x58000,
1165	.hid_width = 5,
1166	.freq_tbl = ftbl_vfe_clk_src,
1167	.parent_map = gcc_xo_gpll0_gpll6_gpll4_map,
1168	.clkr.hw.init = &(struct clk_init_data) {
1169		.name = "vfe0_clk_src",
1170		.parent_data = gcc_xo_gpll0_gpll6_gpll4_data,
1171		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_gpll4_data),
1172		.ops = &clk_rcg2_ops,
1173	}
1174};
1175
1176static struct clk_rcg2 vfe1_clk_src = {
1177	.cmd_rcgr = 0x58054,
1178	.hid_width = 5,
1179	.freq_tbl = ftbl_vfe_clk_src,
1180	.parent_map = gcc_xo_gpll0_gpll6_gpll4_map,
1181	.clkr.hw.init = &(struct clk_init_data) {
1182		.name = "vfe1_clk_src",
1183		.parent_data = gcc_xo_gpll0_gpll6_gpll4_data,
1184		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_gpll4_data),
1185		.ops = &clk_rcg2_ops,
1186	}
1187};
1188
1189static const struct freq_tbl ftbl_vsync_clk_src[] = {
1190	F(19200000, P_XO, 1, 0, 0),
1191	{ }
1192};
1193
1194static struct clk_rcg2 vsync_clk_src = {
1195	.cmd_rcgr = 0x4d02c,
1196	.hid_width = 5,
1197	.freq_tbl = ftbl_vsync_clk_src,
1198	.parent_map = gcc_xo_gpll0_out_aux_map,
1199	.clkr.hw.init = &(struct clk_init_data) {
1200		.name = "vsync_clk_src",
1201		.parent_data = gcc_xo_gpll0_data,
1202		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
1203		.ops = &clk_rcg2_ops,
1204	}
1205};
1206
1207static struct clk_branch gcc_apss_tcu_clk = {
1208	.halt_reg = 0x12018,
1209	.halt_check = BRANCH_HALT_VOTED,
1210	.clkr = {
1211		.enable_reg = 0x4500c,
1212		.enable_mask = BIT(1),
1213		.hw.init = &(struct clk_init_data) {
1214			.name = "gcc_apss_tcu_clk",
1215			.ops = &clk_branch2_ops,
1216		}
1217	}
1218};
1219
1220static struct clk_branch gcc_bimc_gfx_clk = {
1221	.halt_reg = 0x59034,
1222	.halt_check = BRANCH_HALT,
1223	.clkr = {
1224		.enable_reg = 0x59034,
1225		.enable_mask = BIT(0),
1226		.hw.init = &(struct clk_init_data) {
1227			.name = "gcc_bimc_gfx_clk",
1228			.ops = &clk_branch2_ops,
1229		}
1230	}
1231};
1232
1233static struct clk_branch gcc_bimc_gpu_clk = {
1234	.halt_reg = 0x59030,
1235	.halt_check = BRANCH_HALT,
1236	.clkr = {
1237		.enable_reg = 0x59030,
1238		.enable_mask = BIT(0),
1239		.hw.init = &(struct clk_init_data) {
1240			.name = "gcc_bimc_gpu_clk",
1241			.ops = &clk_branch2_ops,
1242		}
1243	}
1244};
1245
1246static struct clk_branch gcc_blsp1_ahb_clk = {
1247	.halt_reg = 0x01008,
1248	.halt_check = BRANCH_HALT_VOTED,
1249	.clkr = {
1250		.enable_reg = 0x45004,
1251		.enable_mask = BIT(10),
1252		.hw.init = &(struct clk_init_data) {
1253			.name = "gcc_blsp1_ahb_clk",
1254			.ops = &clk_branch2_ops,
1255		}
1256	}
1257};
1258
1259static struct clk_branch gcc_blsp2_ahb_clk = {
1260	.halt_reg = 0x0b008,
1261	.halt_check = BRANCH_HALT_VOTED,
1262	.clkr = {
1263		.enable_reg = 0x45004,
1264		.enable_mask = BIT(20),
1265		.hw.init = &(struct clk_init_data) {
1266			.name = "gcc_blsp2_ahb_clk",
1267			.ops = &clk_branch2_ops,
1268		}
1269	}
1270};
1271
1272static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1273	.halt_reg = 0x03010,
1274	.halt_check = BRANCH_HALT,
1275	.clkr = {
1276		.enable_reg = 0x03010,
1277		.enable_mask = BIT(0),
1278		.hw.init = &(struct clk_init_data) {
1279			.name = "gcc_blsp1_qup2_i2c_apps_clk",
1280			.parent_hws = (const struct clk_hw*[]){
1281				&blsp1_qup2_i2c_apps_clk_src.clkr.hw,
1282			},
1283			.num_parents = 1,
1284			.ops = &clk_branch2_ops,
1285			.flags = CLK_SET_RATE_PARENT,
1286		}
1287	}
1288};
1289
1290static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1291	.halt_reg = 0x04020,
1292	.halt_check = BRANCH_HALT,
1293	.clkr = {
1294		.enable_reg = 0x04020,
1295		.enable_mask = BIT(0),
1296		.hw.init = &(struct clk_init_data) {
1297			.name = "gcc_blsp1_qup3_i2c_apps_clk",
1298			.parent_hws = (const struct clk_hw*[]){
1299				&blsp1_qup3_i2c_apps_clk_src.clkr.hw,
1300			},
1301			.num_parents = 1,
1302			.ops = &clk_branch2_ops,
1303			.flags = CLK_SET_RATE_PARENT,
1304		}
1305	}
1306};
1307
1308static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1309	.halt_reg = 0x05020,
1310	.halt_check = BRANCH_HALT,
1311	.clkr = {
1312		.enable_reg = 0x05020,
1313		.enable_mask = BIT(0),
1314		.hw.init = &(struct clk_init_data) {
1315			.name = "gcc_blsp1_qup4_i2c_apps_clk",
1316			.parent_hws = (const struct clk_hw*[]){
1317				&blsp1_qup4_i2c_apps_clk_src.clkr.hw,
1318			},
1319			.num_parents = 1,
1320			.ops = &clk_branch2_ops,
1321			.flags = CLK_SET_RATE_PARENT,
1322		}
1323	}
1324};
1325
1326static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
1327	.halt_reg = 0x0c008,
1328	.halt_check = BRANCH_HALT,
1329	.clkr = {
1330		.enable_reg = 0x0c008,
1331		.enable_mask = BIT(0),
1332		.hw.init = &(struct clk_init_data) {
1333			.name = "gcc_blsp2_qup1_i2c_apps_clk",
1334			.parent_hws = (const struct clk_hw*[]){
1335				&blsp2_qup1_i2c_apps_clk_src.clkr.hw,
1336			},
1337			.num_parents = 1,
1338			.ops = &clk_branch2_ops,
1339			.flags = CLK_SET_RATE_PARENT,
1340		}
1341	}
1342};
1343
1344static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
1345	.halt_reg = 0x0d010,
1346	.halt_check = BRANCH_HALT,
1347	.clkr = {
1348		.enable_reg = 0x0d010,
1349		.enable_mask = BIT(0),
1350		.hw.init = &(struct clk_init_data) {
1351			.name = "gcc_blsp2_qup2_i2c_apps_clk",
1352			.parent_hws = (const struct clk_hw*[]){
1353				&blsp2_qup2_i2c_apps_clk_src.clkr.hw,
1354			},
1355			.num_parents = 1,
1356			.ops = &clk_branch2_ops,
1357			.flags = CLK_SET_RATE_PARENT,
1358		}
1359	}
1360};
1361
1362static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
1363	.halt_reg = 0x0f020,
1364	.halt_check = BRANCH_HALT,
1365	.clkr = {
1366		.enable_reg = 0x0f020,
1367		.enable_mask = BIT(0),
1368		.hw.init = &(struct clk_init_data) {
1369			.name = "gcc_blsp2_qup3_i2c_apps_clk",
1370			.parent_hws = (const struct clk_hw*[]){
1371				&blsp2_qup3_i2c_apps_clk_src.clkr.hw,
1372			},
1373			.num_parents = 1,
1374			.ops = &clk_branch2_ops,
1375			.flags = CLK_SET_RATE_PARENT,
1376		}
1377	}
1378};
1379
1380static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1381	.halt_reg = 0x0300c,
1382	.halt_check = BRANCH_HALT,
1383	.clkr = {
1384		.enable_reg = 0x0300c,
1385		.enable_mask = BIT(0),
1386		.hw.init = &(struct clk_init_data) {
1387			.name = "gcc_blsp1_qup2_spi_apps_clk",
1388			.parent_hws = (const struct clk_hw*[]){
1389				&blsp1_qup2_spi_apps_clk_src.clkr.hw,
1390			},
1391			.num_parents = 1,
1392			.ops = &clk_branch2_ops,
1393			.flags = CLK_SET_RATE_PARENT,
1394		}
1395	}
1396};
1397
1398static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1399	.halt_reg = 0x0401c,
1400	.halt_check = BRANCH_HALT,
1401	.clkr = {
1402		.enable_reg = 0x0401c,
1403		.enable_mask = BIT(0),
1404		.hw.init = &(struct clk_init_data) {
1405			.name = "gcc_blsp1_qup3_spi_apps_clk",
1406			.parent_hws = (const struct clk_hw*[]){
1407				&blsp1_qup3_spi_apps_clk_src.clkr.hw,
1408			},
1409			.num_parents = 1,
1410			.ops = &clk_branch2_ops,
1411			.flags = CLK_SET_RATE_PARENT,
1412		}
1413	}
1414};
1415
1416static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1417	.halt_reg = 0x0501c,
1418	.halt_check = BRANCH_HALT,
1419	.clkr = {
1420		.enable_reg = 0x0501c,
1421		.enable_mask = BIT(0),
1422		.hw.init = &(struct clk_init_data) {
1423			.name = "gcc_blsp1_qup4_spi_apps_clk",
1424			.parent_hws = (const struct clk_hw*[]){
1425				&blsp1_qup4_spi_apps_clk_src.clkr.hw,
1426			},
1427			.num_parents = 1,
1428			.ops = &clk_branch2_ops,
1429			.flags = CLK_SET_RATE_PARENT,
1430		}
1431	}
1432};
1433
1434static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
1435	.halt_reg = 0x0c004,
1436	.halt_check = BRANCH_HALT,
1437	.clkr = {
1438		.enable_reg = 0x0c004,
1439		.enable_mask = BIT(0),
1440		.hw.init = &(struct clk_init_data) {
1441			.name = "gcc_blsp2_qup1_spi_apps_clk",
1442			.parent_hws = (const struct clk_hw*[]){
1443				&blsp2_qup1_spi_apps_clk_src.clkr.hw,
1444			},
1445			.num_parents = 1,
1446			.ops = &clk_branch2_ops,
1447			.flags = CLK_SET_RATE_PARENT,
1448		}
1449	}
1450};
1451
1452static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
1453	.halt_reg = 0x0d00c,
1454	.halt_check = BRANCH_HALT,
1455	.clkr = {
1456		.enable_reg = 0x0d00c,
1457		.enable_mask = BIT(0),
1458		.hw.init = &(struct clk_init_data) {
1459			.name = "gcc_blsp2_qup2_spi_apps_clk",
1460			.parent_hws = (const struct clk_hw*[]){
1461				&blsp2_qup2_spi_apps_clk_src.clkr.hw,
1462			},
1463			.num_parents = 1,
1464			.ops = &clk_branch2_ops,
1465			.flags = CLK_SET_RATE_PARENT,
1466		}
1467	}
1468};
1469
1470static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
1471	.halt_reg = 0x0f01c,
1472	.halt_check = BRANCH_HALT,
1473	.clkr = {
1474		.enable_reg = 0x0f01c,
1475		.enable_mask = BIT(0),
1476		.hw.init = &(struct clk_init_data) {
1477			.name = "gcc_blsp2_qup3_spi_apps_clk",
1478			.parent_hws = (const struct clk_hw*[]){
1479				&blsp2_qup3_spi_apps_clk_src.clkr.hw,
1480			},
1481			.num_parents = 1,
1482			.ops = &clk_branch2_ops,
1483			.flags = CLK_SET_RATE_PARENT,
1484		}
1485	}
1486};
1487
1488static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1489	.halt_reg = 0x0203c,
1490	.halt_check = BRANCH_HALT,
1491	.clkr = {
1492		.enable_reg = 0x0203c,
1493		.enable_mask = BIT(0),
1494		.hw.init = &(struct clk_init_data) {
1495			.name = "gcc_blsp1_uart1_apps_clk",
1496			.parent_hws = (const struct clk_hw*[]){
1497				&blsp1_uart1_apps_clk_src.clkr.hw,
1498			},
1499			.num_parents = 1,
1500			.ops = &clk_branch2_ops,
1501			.flags = CLK_SET_RATE_PARENT,
1502		}
1503	}
1504};
1505
1506static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1507	.halt_reg = 0x0302c,
1508	.halt_check = BRANCH_HALT,
1509	.clkr = {
1510		.enable_reg = 0x0302c,
1511		.enable_mask = BIT(0),
1512		.hw.init = &(struct clk_init_data) {
1513			.name = "gcc_blsp1_uart2_apps_clk",
1514			.parent_hws = (const struct clk_hw*[]){
1515				&blsp1_uart2_apps_clk_src.clkr.hw,
1516			},
1517			.num_parents = 1,
1518			.ops = &clk_branch2_ops,
1519			.flags = CLK_SET_RATE_PARENT,
1520		}
1521	}
1522};
1523
1524static struct clk_branch gcc_blsp2_uart1_apps_clk = {
1525	.halt_reg = 0x0c03c,
1526	.halt_check = BRANCH_HALT,
1527	.clkr = {
1528		.enable_reg = 0x0c03c,
1529		.enable_mask = BIT(0),
1530		.hw.init = &(struct clk_init_data) {
1531			.name = "gcc_blsp2_uart1_apps_clk",
1532			.parent_hws = (const struct clk_hw*[]){
1533				&blsp2_uart1_apps_clk_src.clkr.hw,
1534			},
1535			.num_parents = 1,
1536			.ops = &clk_branch2_ops,
1537			.flags = CLK_SET_RATE_PARENT,
1538		}
1539	}
1540};
1541
1542static struct clk_branch gcc_blsp2_uart2_apps_clk = {
1543	.halt_reg = 0x0d02c,
1544	.halt_check = BRANCH_HALT,
1545	.clkr = {
1546		.enable_reg = 0x0d02c,
1547		.enable_mask = BIT(0),
1548		.hw.init = &(struct clk_init_data) {
1549			.name = "gcc_blsp2_uart2_apps_clk",
1550			.parent_hws = (const struct clk_hw*[]){
1551				&blsp2_uart2_apps_clk_src.clkr.hw,
1552			},
1553			.num_parents = 1,
1554			.ops = &clk_branch2_ops,
1555			.flags = CLK_SET_RATE_PARENT,
1556		}
1557	}
1558};
1559
1560static struct clk_branch gcc_boot_rom_ahb_clk = {
1561	.halt_reg = 0x1300c,
1562	.halt_check = BRANCH_HALT_VOTED,
1563	.clkr = {
1564		.enable_reg = 0x45004,
1565		.enable_mask = BIT(7),
1566		.hw.init = &(struct clk_init_data) {
1567			.name = "gcc_boot_rom_ahb_clk",
1568			.ops = &clk_branch2_ops,
1569		}
1570	}
1571};
1572
1573static struct clk_branch gcc_camss_ahb_clk = {
1574	.halt_reg = 0x56004,
1575	.halt_check = BRANCH_HALT,
1576	.clkr = {
1577		.enable_reg = 0x56004,
1578		.enable_mask = BIT(0),
1579		.hw.init = &(struct clk_init_data) {
1580			.name = "gcc_camss_ahb_clk",
1581			.ops = &clk_branch2_ops,
1582		}
1583	}
1584};
1585
1586static struct clk_branch gcc_camss_cci_ahb_clk = {
1587	.halt_reg = 0x5101c,
1588	.halt_check = BRANCH_HALT,
1589	.clkr = {
1590		.enable_reg = 0x5101c,
1591		.enable_mask = BIT(0),
1592		.hw.init = &(struct clk_init_data) {
1593			.name = "gcc_camss_cci_ahb_clk",
1594			.parent_hws = (const struct clk_hw*[]){
1595				&camss_top_ahb_clk_src.clkr.hw,
1596			},
1597			.num_parents = 1,
1598			.ops = &clk_branch2_ops,
1599			.flags = CLK_SET_RATE_PARENT,
1600		}
1601	}
1602};
1603
1604static struct clk_branch gcc_camss_cci_clk = {
1605	.halt_reg = 0x51018,
1606	.halt_check = BRANCH_HALT,
1607	.clkr = {
1608		.enable_reg = 0x51018,
1609		.enable_mask = BIT(0),
1610		.hw.init = &(struct clk_init_data) {
1611			.name = "gcc_camss_cci_clk",
1612			.parent_hws = (const struct clk_hw*[]){
1613				&cci_clk_src.clkr.hw,
1614			},
1615			.num_parents = 1,
1616			.ops = &clk_branch2_ops,
1617			.flags = CLK_SET_RATE_PARENT,
1618		}
1619	}
1620};
1621
1622static struct clk_branch gcc_camss_cpp_ahb_clk = {
1623	.halt_reg = 0x58040,
1624	.halt_check = BRANCH_HALT,
1625	.clkr = {
1626		.enable_reg = 0x58040,
1627		.enable_mask = BIT(0),
1628		.hw.init = &(struct clk_init_data) {
1629			.name = "gcc_camss_cpp_ahb_clk",
1630			.parent_hws = (const struct clk_hw*[]){
1631				&camss_top_ahb_clk_src.clkr.hw,
1632			},
1633			.num_parents = 1,
1634			.ops = &clk_branch2_ops,
1635			.flags = CLK_SET_RATE_PARENT,
1636		}
1637	}
1638};
1639
1640static struct clk_branch gcc_camss_cpp_clk = {
1641	.halt_reg = 0x5803c,
1642	.halt_check = BRANCH_HALT,
1643	.clkr = {
1644		.enable_reg = 0x5803c,
1645		.enable_mask = BIT(0),
1646		.hw.init = &(struct clk_init_data) {
1647			.name = "gcc_camss_cpp_clk",
1648			.parent_hws = (const struct clk_hw*[]){
1649				&cpp_clk_src.clkr.hw,
1650			},
1651			.num_parents = 1,
1652			.ops = &clk_branch2_ops,
1653			.flags = CLK_SET_RATE_PARENT,
1654		}
1655	}
1656};
1657
1658static struct clk_branch gcc_camss_csi0_ahb_clk = {
1659	.halt_reg = 0x4e040,
1660	.halt_check = BRANCH_HALT,
1661	.clkr = {
1662		.enable_reg = 0x4e040,
1663		.enable_mask = BIT(0),
1664		.hw.init = &(struct clk_init_data) {
1665			.name = "gcc_camss_csi0_ahb_clk",
1666			.parent_hws = (const struct clk_hw*[]){
1667				&camss_top_ahb_clk_src.clkr.hw,
1668			},
1669			.num_parents = 1,
1670			.ops = &clk_branch2_ops,
1671			.flags = CLK_SET_RATE_PARENT,
1672		}
1673	}
1674};
1675
1676static struct clk_branch gcc_camss_csi1_ahb_clk = {
1677	.halt_reg = 0x4f040,
1678	.halt_check = BRANCH_HALT,
1679	.clkr = {
1680		.enable_reg = 0x4f040,
1681		.enable_mask = BIT(0),
1682		.hw.init = &(struct clk_init_data) {
1683			.name = "gcc_camss_csi1_ahb_clk",
1684			.parent_hws = (const struct clk_hw*[]){
1685				&camss_top_ahb_clk_src.clkr.hw,
1686			},
1687			.num_parents = 1,
1688			.ops = &clk_branch2_ops,
1689			.flags = CLK_SET_RATE_PARENT,
1690		}
1691	}
1692};
1693
1694static struct clk_branch gcc_camss_csi2_ahb_clk = {
1695	.halt_reg = 0x3c040,
1696	.halt_check = BRANCH_HALT,
1697	.clkr = {
1698		.enable_reg = 0x3c040,
1699		.enable_mask = BIT(0),
1700		.hw.init = &(struct clk_init_data) {
1701			.name = "gcc_camss_csi2_ahb_clk",
1702			.parent_hws = (const struct clk_hw*[]){
1703				&camss_top_ahb_clk_src.clkr.hw,
1704			},
1705			.num_parents = 1,
1706			.ops = &clk_branch2_ops,
1707			.flags = CLK_SET_RATE_PARENT,
1708		}
1709	}
1710};
1711
1712static struct clk_branch gcc_camss_csi0_clk = {
1713	.halt_reg = 0x4e03c,
1714	.halt_check = BRANCH_HALT,
1715	.clkr = {
1716		.enable_reg = 0x4e03c,
1717		.enable_mask = BIT(0),
1718		.hw.init = &(struct clk_init_data) {
1719			.name = "gcc_camss_csi0_clk",
1720			.parent_hws = (const struct clk_hw*[]){
1721				&csi0_clk_src.clkr.hw,
1722			},
1723			.num_parents = 1,
1724			.ops = &clk_branch2_ops,
1725			.flags = CLK_SET_RATE_PARENT,
1726		}
1727	}
1728};
1729
1730static struct clk_branch gcc_camss_csi1_clk = {
1731	.halt_reg = 0x4f03c,
1732	.halt_check = BRANCH_HALT,
1733	.clkr = {
1734		.enable_reg = 0x4f03c,
1735		.enable_mask = BIT(0),
1736		.hw.init = &(struct clk_init_data) {
1737			.name = "gcc_camss_csi1_clk",
1738			.parent_hws = (const struct clk_hw*[]){
1739				&csi1_clk_src.clkr.hw,
1740			},
1741			.num_parents = 1,
1742			.ops = &clk_branch2_ops,
1743			.flags = CLK_SET_RATE_PARENT,
1744		}
1745	}
1746};
1747
1748static struct clk_branch gcc_camss_csi2_clk = {
1749	.halt_reg = 0x3c03c,
1750	.halt_check = BRANCH_HALT,
1751	.clkr = {
1752		.enable_reg = 0x3c03c,
1753		.enable_mask = BIT(0),
1754		.hw.init = &(struct clk_init_data) {
1755			.name = "gcc_camss_csi2_clk",
1756			.parent_hws = (const struct clk_hw*[]){
1757				&csi2_clk_src.clkr.hw,
1758			},
1759			.num_parents = 1,
1760			.ops = &clk_branch2_ops,
1761			.flags = CLK_SET_RATE_PARENT,
1762		}
1763	}
1764};
1765
1766static struct clk_branch gcc_camss_csi0phy_clk = {
1767	.halt_reg = 0x4e048,
1768	.halt_check = BRANCH_HALT,
1769	.clkr = {
1770		.enable_reg = 0x4e048,
1771		.enable_mask = BIT(0),
1772		.hw.init = &(struct clk_init_data) {
1773			.name = "gcc_camss_csi0phy_clk",
1774			.parent_hws = (const struct clk_hw*[]){
1775				&csi0_clk_src.clkr.hw,
1776			},
1777			.num_parents = 1,
1778			.ops = &clk_branch2_ops,
1779			.flags = CLK_SET_RATE_PARENT,
1780		}
1781	}
1782};
1783
1784static struct clk_branch gcc_camss_csi1phy_clk = {
1785	.halt_reg = 0x4f048,
1786	.halt_check = BRANCH_HALT,
1787	.clkr = {
1788		.enable_reg = 0x4f048,
1789		.enable_mask = BIT(0),
1790		.hw.init = &(struct clk_init_data) {
1791			.name = "gcc_camss_csi1phy_clk",
1792			.parent_hws = (const struct clk_hw*[]){
1793				&csi1_clk_src.clkr.hw,
1794			},
1795			.num_parents = 1,
1796			.ops = &clk_branch2_ops,
1797			.flags = CLK_SET_RATE_PARENT,
1798		}
1799	}
1800};
1801
1802static struct clk_branch gcc_camss_csi2phy_clk = {
1803	.halt_reg = 0x3c048,
1804	.halt_check = BRANCH_HALT,
1805	.clkr = {
1806		.enable_reg = 0x3c048,
1807		.enable_mask = BIT(0),
1808		.hw.init = &(struct clk_init_data) {
1809			.name = "gcc_camss_csi2phy_clk",
1810			.parent_hws = (const struct clk_hw*[]){
1811				&csi2_clk_src.clkr.hw,
1812			},
1813			.num_parents = 1,
1814			.ops = &clk_branch2_ops,
1815			.flags = CLK_SET_RATE_PARENT,
1816		}
1817	}
1818};
1819
1820static struct clk_branch gcc_camss_csi0phytimer_clk = {
1821	.halt_reg = 0x4e01c,
1822	.halt_check = BRANCH_HALT,
1823	.clkr = {
1824		.enable_reg = 0x4e01c,
1825		.enable_mask = BIT(0),
1826		.hw.init = &(struct clk_init_data) {
1827			.name = "gcc_camss_csi0phytimer_clk",
1828			.parent_hws = (const struct clk_hw*[]){
1829				&csi0phytimer_clk_src.clkr.hw,
1830			},
1831			.num_parents = 1,
1832			.ops = &clk_branch2_ops,
1833			.flags = CLK_SET_RATE_PARENT,
1834		}
1835	}
1836};
1837
1838static struct clk_branch gcc_camss_csi1phytimer_clk = {
1839	.halt_reg = 0x4f01c,
1840	.halt_check = BRANCH_HALT,
1841	.clkr = {
1842		.enable_reg = 0x4f01c,
1843		.enable_mask = BIT(0),
1844		.hw.init = &(struct clk_init_data) {
1845			.name = "gcc_camss_csi1phytimer_clk",
1846			.parent_hws = (const struct clk_hw*[]){
1847				&csi1phytimer_clk_src.clkr.hw,
1848			},
1849			.num_parents = 1,
1850			.ops = &clk_branch2_ops,
1851			.flags = CLK_SET_RATE_PARENT,
1852		}
1853	}
1854};
1855
1856static struct clk_branch gcc_camss_csi0pix_clk = {
1857	.halt_reg = 0x4e058,
1858	.halt_check = BRANCH_HALT,
1859	.clkr = {
1860		.enable_reg = 0x4e058,
1861		.enable_mask = BIT(0),
1862		.hw.init = &(struct clk_init_data) {
1863			.name = "gcc_camss_csi0pix_clk",
1864			.parent_hws = (const struct clk_hw*[]){
1865				&csi0_clk_src.clkr.hw,
1866			},
1867			.num_parents = 1,
1868			.ops = &clk_branch2_ops,
1869			.flags = CLK_SET_RATE_PARENT,
1870		}
1871	}
1872};
1873
1874static struct clk_branch gcc_camss_csi1pix_clk = {
1875	.halt_reg = 0x4f058,
1876	.halt_check = BRANCH_HALT,
1877	.clkr = {
1878		.enable_reg = 0x4f058,
1879		.enable_mask = BIT(0),
1880		.hw.init = &(struct clk_init_data) {
1881			.name = "gcc_camss_csi1pix_clk",
1882			.parent_hws = (const struct clk_hw*[]){
1883				&csi1_clk_src.clkr.hw,
1884			},
1885			.num_parents = 1,
1886			.ops = &clk_branch2_ops,
1887			.flags = CLK_SET_RATE_PARENT,
1888		}
1889	}
1890};
1891
1892static struct clk_branch gcc_camss_csi2pix_clk = {
1893	.halt_reg = 0x3c058,
1894	.halt_check = BRANCH_HALT,
1895	.clkr = {
1896		.enable_reg = 0x3c058,
1897		.enable_mask = BIT(0),
1898		.hw.init = &(struct clk_init_data) {
1899			.name = "gcc_camss_csi2pix_clk",
1900			.parent_hws = (const struct clk_hw*[]){
1901				&csi2_clk_src.clkr.hw,
1902			},
1903			.num_parents = 1,
1904			.ops = &clk_branch2_ops,
1905			.flags = CLK_SET_RATE_PARENT,
1906		}
1907	}
1908};
1909
1910static struct clk_branch gcc_camss_csi0rdi_clk = {
1911	.halt_reg = 0x4e050,
1912	.halt_check = BRANCH_HALT,
1913	.clkr = {
1914		.enable_reg = 0x4e050,
1915		.enable_mask = BIT(0),
1916		.hw.init = &(struct clk_init_data) {
1917			.name = "gcc_camss_csi0rdi_clk",
1918			.parent_hws = (const struct clk_hw*[]){
1919				&csi0_clk_src.clkr.hw,
1920			},
1921			.num_parents = 1,
1922			.ops = &clk_branch2_ops,
1923			.flags = CLK_SET_RATE_PARENT,
1924		}
1925	}
1926};
1927
1928static struct clk_branch gcc_camss_csi1rdi_clk = {
1929	.halt_reg = 0x4f050,
1930	.halt_check = BRANCH_HALT,
1931	.clkr = {
1932		.enable_reg = 0x4f050,
1933		.enable_mask = BIT(0),
1934		.hw.init = &(struct clk_init_data) {
1935			.name = "gcc_camss_csi1rdi_clk",
1936			.parent_hws = (const struct clk_hw*[]){
1937				&csi1_clk_src.clkr.hw,
1938			},
1939			.num_parents = 1,
1940			.ops = &clk_branch2_ops,
1941			.flags = CLK_SET_RATE_PARENT,
1942		}
1943	}
1944};
1945
1946static struct clk_branch gcc_camss_csi2rdi_clk = {
1947	.halt_reg = 0x3c050,
1948	.halt_check = BRANCH_HALT,
1949	.clkr = {
1950		.enable_reg = 0x3c050,
1951		.enable_mask = BIT(0),
1952		.hw.init = &(struct clk_init_data) {
1953			.name = "gcc_camss_csi2rdi_clk",
1954			.parent_hws = (const struct clk_hw*[]){
1955				&csi2_clk_src.clkr.hw,
1956			},
1957			.num_parents = 1,
1958			.ops = &clk_branch2_ops,
1959			.flags = CLK_SET_RATE_PARENT,
1960		}
1961	}
1962};
1963
1964static struct clk_branch gcc_camss_csi_vfe0_clk = {
1965	.halt_reg = 0x58050,
1966	.halt_check = BRANCH_HALT,
1967	.clkr = {
1968		.enable_reg = 0x58050,
1969		.enable_mask = BIT(0),
1970		.hw.init = &(struct clk_init_data) {
1971			.name = "gcc_camss_csi_vfe0_clk",
1972			.parent_hws = (const struct clk_hw*[]){
1973				&vfe0_clk_src.clkr.hw,
1974			},
1975			.num_parents = 1,
1976			.ops = &clk_branch2_ops,
1977			.flags = CLK_SET_RATE_PARENT,
1978		}
1979	}
1980};
1981
1982static struct clk_branch gcc_camss_csi_vfe1_clk = {
1983	.halt_reg = 0x58074,
1984	.halt_check = BRANCH_HALT,
1985	.clkr = {
1986		.enable_reg = 0x58074,
1987		.enable_mask = BIT(0),
1988		.hw.init = &(struct clk_init_data) {
1989			.name = "gcc_camss_csi_vfe1_clk",
1990			.parent_hws = (const struct clk_hw*[]){
1991				&vfe1_clk_src.clkr.hw,
1992			},
1993			.num_parents = 1,
1994			.ops = &clk_branch2_ops,
1995			.flags = CLK_SET_RATE_PARENT,
1996		}
1997	}
1998};
1999
2000static struct clk_branch gcc_camss_gp0_clk = {
2001	.halt_reg = 0x54018,
2002	.halt_check = BRANCH_HALT,
2003	.clkr = {
2004		.enable_reg = 0x54018,
2005		.enable_mask = BIT(0),
2006		.hw.init = &(struct clk_init_data) {
2007			.name = "gcc_camss_gp0_clk",
2008			.parent_hws = (const struct clk_hw*[]){
2009				&camss_gp0_clk_src.clkr.hw,
2010			},
2011			.num_parents = 1,
2012			.ops = &clk_branch2_ops,
2013			.flags = CLK_SET_RATE_PARENT,
2014		}
2015	}
2016};
2017
2018static struct clk_branch gcc_camss_gp1_clk = {
2019	.halt_reg = 0x55018,
2020	.halt_check = BRANCH_HALT,
2021	.clkr = {
2022		.enable_reg = 0x55018,
2023		.enable_mask = BIT(0),
2024		.hw.init = &(struct clk_init_data) {
2025			.name = "gcc_camss_gp1_clk",
2026			.parent_hws = (const struct clk_hw*[]){
2027				&camss_gp1_clk_src.clkr.hw,
2028			},
2029			.num_parents = 1,
2030			.ops = &clk_branch2_ops,
2031			.flags = CLK_SET_RATE_PARENT,
2032		}
2033	}
2034};
2035
2036static struct clk_branch gcc_camss_ispif_ahb_clk = {
2037	.halt_reg = 0x50004,
2038	.halt_check = BRANCH_HALT,
2039	.clkr = {
2040		.enable_reg = 0x50004,
2041		.enable_mask = BIT(0),
2042		.hw.init = &(struct clk_init_data) {
2043			.name = "gcc_camss_ispif_ahb_clk",
2044			.parent_hws = (const struct clk_hw*[]){
2045				&camss_top_ahb_clk_src.clkr.hw,
2046			},
2047			.num_parents = 1,
2048			.ops = &clk_branch2_ops,
2049			.flags = CLK_SET_RATE_PARENT,
2050		}
2051	}
2052};
2053
2054static struct clk_branch gcc_camss_jpeg0_clk = {
2055	.halt_reg = 0x57020,
2056	.halt_check = BRANCH_HALT,
2057	.clkr = {
2058		.enable_reg = 0x57020,
2059		.enable_mask = BIT(0),
2060		.hw.init = &(struct clk_init_data) {
2061			.name = "gcc_camss_jpeg0_clk",
2062			.parent_hws = (const struct clk_hw*[]){
2063				&jpeg0_clk_src.clkr.hw,
2064			},
2065			.num_parents = 1,
2066			.ops = &clk_branch2_ops,
2067			.flags = CLK_SET_RATE_PARENT,
2068		}
2069	}
2070};
2071
2072static struct clk_branch gcc_camss_jpeg_ahb_clk = {
2073	.halt_reg = 0x57024,
2074	.halt_check = BRANCH_HALT,
2075	.clkr = {
2076		.enable_reg = 0x57024,
2077		.enable_mask = BIT(0),
2078		.hw.init = &(struct clk_init_data) {
2079			.name = "gcc_camss_jpeg_ahb_clk",
2080			.parent_hws = (const struct clk_hw*[]){
2081				&camss_top_ahb_clk_src.clkr.hw,
2082			},
2083			.num_parents = 1,
2084			.ops = &clk_branch2_ops,
2085			.flags = CLK_SET_RATE_PARENT,
2086		}
2087	}
2088};
2089
2090static struct clk_branch gcc_camss_jpeg_axi_clk = {
2091	.halt_reg = 0x57028,
2092	.halt_check = BRANCH_HALT,
2093	.clkr = {
2094		.enable_reg = 0x57028,
2095		.enable_mask = BIT(0),
2096		.hw.init = &(struct clk_init_data) {
2097			.name = "gcc_camss_jpeg_axi_clk",
2098			.ops = &clk_branch2_ops,
2099		}
2100	}
2101};
2102
2103static struct clk_branch gcc_camss_mclk0_clk = {
2104	.halt_reg = 0x52018,
2105	.halt_check = BRANCH_HALT,
2106	.clkr = {
2107		.enable_reg = 0x52018,
2108		.enable_mask = BIT(0),
2109		.hw.init = &(struct clk_init_data) {
2110			.name = "gcc_camss_mclk0_clk",
2111			.parent_hws = (const struct clk_hw*[]){
2112				&mclk0_clk_src.clkr.hw,
2113			},
2114			.num_parents = 1,
2115			.ops = &clk_branch2_ops,
2116			.flags = CLK_SET_RATE_PARENT,
2117		}
2118	}
2119};
2120
2121static struct clk_branch gcc_camss_mclk1_clk = {
2122	.halt_reg = 0x53018,
2123	.halt_check = BRANCH_HALT,
2124	.clkr = {
2125		.enable_reg = 0x53018,
2126		.enable_mask = BIT(0),
2127		.hw.init = &(struct clk_init_data) {
2128			.name = "gcc_camss_mclk1_clk",
2129			.parent_hws = (const struct clk_hw*[]){
2130				&mclk1_clk_src.clkr.hw,
2131			},
2132			.num_parents = 1,
2133			.ops = &clk_branch2_ops,
2134			.flags = CLK_SET_RATE_PARENT,
2135		}
2136	}
2137};
2138
2139static struct clk_branch gcc_camss_mclk2_clk = {
2140	.halt_reg = 0x5c018,
2141	.halt_check = BRANCH_HALT,
2142	.clkr = {
2143		.enable_reg = 0x5c018,
2144		.enable_mask = BIT(0),
2145		.hw.init = &(struct clk_init_data) {
2146			.name = "gcc_camss_mclk2_clk",
2147			.parent_hws = (const struct clk_hw*[]){
2148				&mclk2_clk_src.clkr.hw,
2149			},
2150			.num_parents = 1,
2151			.ops = &clk_branch2_ops,
2152			.flags = CLK_SET_RATE_PARENT,
2153		}
2154	}
2155};
2156
2157static struct clk_branch gcc_camss_micro_ahb_clk = {
2158	.halt_reg = 0x5600c,
2159	.halt_check = BRANCH_HALT,
2160	.clkr = {
2161		.enable_reg = 0x5600c,
2162		.enable_mask = BIT(0),
2163		.hw.init = &(struct clk_init_data) {
2164			.name = "gcc_camss_micro_ahb_clk",
2165			.parent_hws = (const struct clk_hw*[]){
2166				&camss_top_ahb_clk_src.clkr.hw,
2167			},
2168			.num_parents = 1,
2169			.ops = &clk_branch2_ops,
2170			.flags = CLK_SET_RATE_PARENT,
2171		}
2172	}
2173};
2174
2175static struct clk_branch gcc_camss_top_ahb_clk = {
2176	.halt_reg = 0x5a014,
2177	.halt_check = BRANCH_HALT,
2178	.clkr = {
2179		.enable_reg = 0x5a014,
2180		.enable_mask = BIT(0),
2181		.hw.init = &(struct clk_init_data) {
2182			.name = "gcc_camss_top_ahb_clk",
2183			.parent_hws = (const struct clk_hw*[]){
2184				&camss_top_ahb_clk_src.clkr.hw,
2185			},
2186			.num_parents = 1,
2187			.ops = &clk_branch2_ops,
2188			.flags = CLK_SET_RATE_PARENT,
2189		}
2190	}
2191};
2192
2193static struct clk_branch gcc_camss_vfe0_ahb_clk = {
2194	.halt_reg = 0x58044,
2195	.halt_check = BRANCH_HALT,
2196	.clkr = {
2197		.enable_reg = 0x58044,
2198		.enable_mask = BIT(0),
2199		.hw.init = &(struct clk_init_data) {
2200			.name = "gcc_camss_vfe0_ahb_clk",
2201			.parent_hws = (const struct clk_hw*[]){
2202				&camss_top_ahb_clk_src.clkr.hw,
2203			},
2204			.num_parents = 1,
2205			.ops = &clk_branch2_ops,
2206			.flags = CLK_SET_RATE_PARENT,
2207		}
2208	}
2209};
2210
2211static struct clk_branch gcc_camss_vfe0_axi_clk = {
2212	.halt_reg = 0x58048,
2213	.halt_check = BRANCH_HALT,
2214	.clkr = {
2215		.enable_reg = 0x58048,
2216		.enable_mask = BIT(0),
2217		.hw.init = &(struct clk_init_data) {
2218			.name = "gcc_camss_vfe0_axi_clk",
2219			.ops = &clk_branch2_ops,
2220		}
2221	}
2222};
2223
2224static struct clk_branch gcc_camss_vfe0_clk = {
2225	.halt_reg = 0x58038,
2226	.halt_check = BRANCH_HALT,
2227	.clkr = {
2228		.enable_reg = 0x58038,
2229		.enable_mask = BIT(0),
2230		.hw.init = &(struct clk_init_data) {
2231			.name = "gcc_camss_vfe0_clk",
2232			.parent_hws = (const struct clk_hw*[]){
2233				&vfe0_clk_src.clkr.hw,
2234			},
2235			.num_parents = 1,
2236			.ops = &clk_branch2_ops,
2237			.flags = CLK_SET_RATE_PARENT,
2238		}
2239	}
2240};
2241
2242static struct clk_branch gcc_camss_vfe1_ahb_clk = {
2243	.halt_reg = 0x58060,
2244	.halt_check = BRANCH_HALT,
2245	.clkr = {
2246		.enable_reg = 0x58060,
2247		.enable_mask = BIT(0),
2248		.hw.init = &(struct clk_init_data) {
2249			.name = "gcc_camss_vfe1_ahb_clk",
2250			.parent_hws = (const struct clk_hw*[]){
2251				&camss_top_ahb_clk_src.clkr.hw,
2252			},
2253			.num_parents = 1,
2254			.ops = &clk_branch2_ops,
2255			.flags = CLK_SET_RATE_PARENT,
2256		}
2257	}
2258};
2259
2260static struct clk_branch gcc_camss_vfe1_axi_clk = {
2261	.halt_reg = 0x58068,
2262	.halt_check = BRANCH_HALT,
2263	.clkr = {
2264		.enable_reg = 0x58068,
2265		.enable_mask = BIT(0),
2266		.hw.init = &(struct clk_init_data) {
2267			.name = "gcc_camss_vfe1_axi_clk",
2268			.ops = &clk_branch2_ops,
2269		}
2270	}
2271};
2272
2273static struct clk_branch gcc_camss_vfe1_clk = {
2274	.halt_reg = 0x5805c,
2275	.halt_check = BRANCH_HALT,
2276	.clkr = {
2277		.enable_reg = 0x5805c,
2278		.enable_mask = BIT(0),
2279		.hw.init = &(struct clk_init_data) {
2280			.name = "gcc_camss_vfe1_clk",
2281			.parent_hws = (const struct clk_hw*[]){
2282				&vfe1_clk_src.clkr.hw,
2283			},
2284			.num_parents = 1,
2285			.ops = &clk_branch2_ops,
2286			.flags = CLK_SET_RATE_PARENT,
2287		}
2288	}
2289};
2290
2291static struct clk_branch gcc_cpp_tbu_clk = {
2292	.halt_reg = 0x12040,
2293	.halt_check = BRANCH_HALT_VOTED,
2294	.clkr = {
2295		.enable_reg = 0x4500c,
2296		.enable_mask = BIT(14),
2297		.hw.init = &(struct clk_init_data) {
2298			.name = "gcc_cpp_tbu_clk",
2299			.ops = &clk_branch2_ops,
2300		}
2301	}
2302};
2303
2304static struct clk_branch gcc_crypto_ahb_clk = {
2305	.halt_reg = 0x16024,
2306	.halt_check = BRANCH_HALT_VOTED,
2307	.clkr = {
2308		.enable_reg = 0x45004,
2309		.enable_mask = BIT(0),
2310		.hw.init = &(struct clk_init_data) {
2311			.name = "gcc_crypto_ahb_clk",
2312			.ops = &clk_branch2_ops,
2313		}
2314	}
2315};
2316
2317static struct clk_branch gcc_crypto_axi_clk = {
2318	.halt_reg = 0x16020,
2319	.halt_check = BRANCH_HALT_VOTED,
2320	.clkr = {
2321		.enable_reg = 0x45004,
2322		.enable_mask = BIT(1),
2323		.hw.init = &(struct clk_init_data) {
2324			.name = "gcc_crypto_axi_clk",
2325			.ops = &clk_branch2_ops,
2326		}
2327	}
2328};
2329
2330static struct clk_branch gcc_crypto_clk = {
2331	.halt_reg = 0x1601c,
2332	.halt_check = BRANCH_HALT_VOTED,
2333	.clkr = {
2334		.enable_reg = 0x45004,
2335		.enable_mask = BIT(2),
2336		.hw.init = &(struct clk_init_data) {
2337			.name = "gcc_crypto_clk",
2338			.parent_hws = (const struct clk_hw*[]){
2339				&crypto_clk_src.clkr.hw,
2340			},
2341			.num_parents = 1,
2342			.ops = &clk_branch2_ops,
2343			.flags = CLK_SET_RATE_PARENT,
2344		}
2345	}
2346};
2347
2348static struct clk_branch gcc_dcc_clk = {
2349	.halt_reg = 0x77004,
2350	.halt_check = BRANCH_HALT,
2351	.clkr = {
2352		.enable_reg = 0x77004,
2353		.enable_mask = BIT(0),
2354		.hw.init = &(struct clk_init_data) {
2355			.name = "gcc_dcc_clk",
2356			.ops = &clk_branch2_ops,
2357		}
2358	}
2359};
2360
2361static struct clk_branch gcc_gfx_tbu_clk = {
2362	.halt_reg = 0x12010,
2363	.halt_check = BRANCH_HALT_VOTED,
2364	.clkr = {
2365		.enable_reg = 0x4500c,
2366		.enable_mask = BIT(3),
2367		.hw.init = &(struct clk_init_data){
2368			.name = "gcc_gfx_tbu_clk",
2369			.ops = &clk_branch2_ops,
2370		},
2371	},
2372};
2373
2374static struct clk_branch gcc_gfx_tcu_clk = {
2375	.halt_reg = 0x12020,
2376	.halt_check = BRANCH_HALT_VOTED,
2377	.clkr = {
2378		.enable_reg = 0x4500c,
2379		.enable_mask = BIT(2),
2380		.hw.init = &(struct clk_init_data){
2381			.name = "gcc_gfx_tcu_clk",
2382			.ops = &clk_branch2_ops,
2383		},
2384	},
2385};
2386
2387static struct clk_branch gcc_gtcu_ahb_clk = {
2388	.halt_reg = 0x12044,
2389	.halt_check = BRANCH_HALT_VOTED,
2390	.clkr = {
2391		.enable_reg = 0x4500c,
2392		.enable_mask = BIT(13),
2393		.hw.init = &(struct clk_init_data){
2394			.name = "gcc_gtcu_ahb_clk",
2395			.ops = &clk_branch2_ops,
2396		},
2397	},
2398};
2399
2400static struct clk_branch gcc_gp1_clk = {
2401	.halt_reg = 0x08000,
2402	.halt_check = BRANCH_HALT,
2403	.clkr = {
2404		.enable_reg = 0x08000,
2405		.enable_mask = BIT(0),
2406		.hw.init = &(struct clk_init_data) {
2407			.name = "gcc_gp1_clk",
2408			.parent_hws = (const struct clk_hw*[]){
2409				&gp1_clk_src.clkr.hw,
2410			},
2411			.num_parents = 1,
2412			.ops = &clk_branch2_ops,
2413			.flags = CLK_SET_RATE_PARENT,
2414		}
2415	}
2416};
2417
2418static struct clk_branch gcc_gp2_clk = {
2419	.halt_reg = 0x09000,
2420	.halt_check = BRANCH_HALT,
2421	.clkr = {
2422		.enable_reg = 0x09000,
2423		.enable_mask = BIT(0),
2424		.hw.init = &(struct clk_init_data) {
2425			.name = "gcc_gp2_clk",
2426			.parent_hws = (const struct clk_hw*[]){
2427				&gp2_clk_src.clkr.hw,
2428			},
2429			.num_parents = 1,
2430			.ops = &clk_branch2_ops,
2431			.flags = CLK_SET_RATE_PARENT,
2432		}
2433	}
2434};
2435
2436static struct clk_branch gcc_gp3_clk = {
2437	.halt_reg = 0x0a000,
2438	.halt_check = BRANCH_HALT,
2439	.clkr = {
2440		.enable_reg = 0x0a000,
2441		.enable_mask = BIT(0),
2442		.hw.init = &(struct clk_init_data) {
2443			.name = "gcc_gp3_clk",
2444			.parent_hws = (const struct clk_hw*[]){
2445				&gp3_clk_src.clkr.hw,
2446			},
2447			.num_parents = 1,
2448			.ops = &clk_branch2_ops,
2449			.flags = CLK_SET_RATE_PARENT,
2450		}
2451	}
2452};
2453
2454static struct clk_branch gcc_jpeg_tbu_clk = {
2455	.halt_reg = 0x12034,
2456	.halt_check = BRANCH_HALT_VOTED,
2457	.clkr = {
2458		.enable_reg = 0x4500c,
2459		.enable_mask = BIT(10),
2460		.hw.init = &(struct clk_init_data) {
2461			.name = "gcc_jpeg_tbu_clk",
2462			.ops = &clk_branch2_ops,
2463		}
2464	}
2465};
2466
2467static struct clk_branch gcc_mdp_tbu_clk = {
2468	.halt_reg = 0x1201c,
2469	.halt_check = BRANCH_HALT_VOTED,
2470	.clkr = {
2471		.enable_reg = 0x4500c,
2472		.enable_mask = BIT(4),
2473		.hw.init = &(struct clk_init_data) {
2474			.name = "gcc_mdp_tbu_clk",
2475			.ops = &clk_branch2_ops,
2476		}
2477	}
2478};
2479
2480static struct clk_branch gcc_mdss_ahb_clk = {
2481	.halt_reg = 0x4d07c,
2482	.halt_check = BRANCH_HALT,
2483	.clkr = {
2484		.enable_reg = 0x4d07c,
2485		.enable_mask = BIT(0),
2486		.hw.init = &(struct clk_init_data) {
2487			.name = "gcc_mdss_ahb_clk",
2488			.ops = &clk_branch2_ops,
2489		}
2490	}
2491};
2492
2493static struct clk_branch gcc_mdss_axi_clk = {
2494	.halt_reg = 0x4d080,
2495	.halt_check = BRANCH_HALT,
2496	.clkr = {
2497		.enable_reg = 0x4d080,
2498		.enable_mask = BIT(0),
2499		.hw.init = &(struct clk_init_data) {
2500			.name = "gcc_mdss_axi_clk",
2501			.ops = &clk_branch2_ops,
2502		}
2503	}
2504};
2505
2506static struct clk_branch gcc_mdss_byte0_clk = {
2507	.halt_reg = 0x4d094,
2508	.halt_check = BRANCH_HALT,
2509	.clkr = {
2510		.enable_reg = 0x4d094,
2511		.enable_mask = BIT(0),
2512		.hw.init = &(struct clk_init_data) {
2513			.name = "gcc_mdss_byte0_clk",
2514			.parent_hws = (const struct clk_hw*[]){
2515				&byte0_clk_src.clkr.hw,
2516			},
2517			.num_parents = 1,
2518			.ops = &clk_branch2_ops,
2519			.flags = CLK_SET_RATE_PARENT,
2520		}
2521	}
2522};
2523
2524static struct clk_branch gcc_mdss_esc0_clk = {
2525	.halt_reg = 0x4d098,
2526	.halt_check = BRANCH_HALT,
2527	.clkr = {
2528		.enable_reg = 0x4d098,
2529		.enable_mask = BIT(0),
2530		.hw.init = &(struct clk_init_data) {
2531			.name = "gcc_mdss_esc0_clk",
2532			.parent_hws = (const struct clk_hw*[]){
2533				&esc0_clk_src.clkr.hw,
2534			},
2535			.num_parents = 1,
2536			.ops = &clk_branch2_ops,
2537			.flags = CLK_SET_RATE_PARENT,
2538		}
2539	}
2540};
2541
2542static struct clk_branch gcc_mdss_mdp_clk = {
2543	.halt_reg = 0x4d088,
2544	.halt_check = BRANCH_HALT,
2545	.clkr = {
2546		.enable_reg = 0x4d088,
2547		.enable_mask = BIT(0),
2548		.hw.init = &(struct clk_init_data) {
2549			.name = "gcc_mdss_mdp_clk",
2550			.parent_hws = (const struct clk_hw*[]){
2551				&mdp_clk_src.clkr.hw,
2552			},
2553			.num_parents = 1,
2554			.ops = &clk_branch2_ops,
2555			.flags = CLK_SET_RATE_PARENT,
2556		}
2557	}
2558};
2559
2560static struct clk_branch gcc_mdss_pclk0_clk = {
2561	.halt_reg = 0x4d084,
2562	.halt_check = BRANCH_HALT,
2563	.clkr = {
2564		.enable_reg = 0x4d084,
2565		.enable_mask = BIT(0),
2566		.hw.init = &(struct clk_init_data) {
2567			.name = "gcc_mdss_pclk0_clk",
2568			.parent_hws = (const struct clk_hw*[]){
2569				&pclk0_clk_src.clkr.hw,
2570			},
2571			.num_parents = 1,
2572			.ops = &clk_branch2_ops,
2573			.flags = CLK_SET_RATE_PARENT,
2574		}
2575	}
2576};
2577
2578static struct clk_branch gcc_mdss_vsync_clk = {
2579	.halt_reg = 0x4d090,
2580	.halt_check = BRANCH_HALT,
2581	.clkr = {
2582		.enable_reg = 0x4d090,
2583		.enable_mask = BIT(0),
2584		.hw.init = &(struct clk_init_data) {
2585			.name = "gcc_mdss_vsync_clk",
2586			.parent_hws = (const struct clk_hw*[]){
2587				&vsync_clk_src.clkr.hw,
2588			},
2589			.num_parents = 1,
2590			.ops = &clk_branch2_ops,
2591			.flags = CLK_SET_RATE_PARENT,
2592		}
2593	}
2594};
2595
2596static struct clk_branch gcc_mss_cfg_ahb_clk = {
2597	.halt_reg = 0x49000,
2598	.halt_check = BRANCH_HALT,
2599	.clkr = {
2600		.enable_reg = 0x49000,
2601		.enable_mask = BIT(0),
2602		.hw.init = &(struct clk_init_data) {
2603			.name = "gcc_mss_cfg_ahb_clk",
2604			.ops = &clk_branch2_ops,
2605		}
2606	}
2607};
2608
2609static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
2610	.halt_reg = 0x49004,
2611	.halt_check = BRANCH_HALT,
2612	.clkr = {
2613		.enable_reg = 0x49004,
2614		.enable_mask = BIT(0),
2615		.hw.init = &(struct clk_init_data) {
2616			.name = "gcc_mss_q6_bimc_axi_clk",
2617			.ops = &clk_branch2_ops,
2618		}
2619	}
2620};
2621
2622static struct clk_branch gcc_oxili_ahb_clk = {
2623	.halt_reg = 0x59028,
2624	.halt_check = BRANCH_HALT,
2625	.clkr = {
2626		.enable_reg = 0x59028,
2627		.enable_mask = BIT(0),
2628		.hw.init = &(struct clk_init_data) {
2629			.name = "gcc_oxili_ahb_clk",
2630			.ops = &clk_branch2_ops,
2631		}
2632	}
2633};
2634
2635static struct clk_branch gcc_oxili_gfx3d_clk = {
2636	.halt_reg = 0x59020,
2637	.halt_check = BRANCH_HALT,
2638	.clkr = {
2639		.enable_reg = 0x59020,
2640		.enable_mask = BIT(0),
2641		.hw.init = &(struct clk_init_data) {
2642			.name = "gcc_oxili_gfx3d_clk",
2643			.parent_hws = (const struct clk_hw*[]){
2644				&gfx3d_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_pdm2_clk = {
2654	.halt_reg = 0x4400c,
2655	.halt_check = BRANCH_HALT,
2656	.clkr = {
2657		.enable_reg = 0x4400c,
2658		.enable_mask = BIT(0),
2659		.hw.init = &(struct clk_init_data) {
2660			.name = "gcc_pdm2_clk",
2661			.parent_hws = (const struct clk_hw*[]){
2662				&pdm2_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_pdm_ahb_clk = {
2672	.halt_reg = 0x44004,
2673	.halt_check = BRANCH_HALT,
2674	.clkr = {
2675		.enable_reg = 0x44004,
2676		.enable_mask = BIT(0),
2677		.hw.init = &(struct clk_init_data) {
2678			.name = "gcc_pdm_ahb_clk",
2679			.ops = &clk_branch2_ops,
2680		}
2681	}
2682};
2683
2684static struct clk_branch gcc_prng_ahb_clk = {
2685	.halt_reg = 0x13004,
2686	.halt_check = BRANCH_HALT_VOTED,
2687	.clkr = {
2688		.enable_reg = 0x45004,
2689		.enable_mask = BIT(8),
2690		.hw.init = &(struct clk_init_data) {
2691			.name = "gcc_prng_ahb_clk",
2692			.ops = &clk_branch2_ops,
2693		}
2694	}
2695};
2696
2697static struct clk_branch gcc_qdss_dap_clk = {
2698	.halt_reg = 0x29084,
2699	.halt_check = BRANCH_HALT_VOTED,
2700	.clkr = {
2701		.enable_reg = 0x45004,
2702		.enable_mask = BIT(11),
2703		.hw.init = &(struct clk_init_data) {
2704			.name = "gcc_qdss_dap_clk",
2705			.ops = &clk_branch2_ops,
2706		}
2707	}
2708};
2709
2710static struct clk_branch gcc_sdcc1_ice_core_clk = {
2711	.halt_reg = 0x5d014,
2712	.halt_check = BRANCH_HALT,
2713	.clkr = {
2714		.enable_reg = 0x5d014,
2715		.enable_mask = BIT(0),
2716		.hw.init = &(struct clk_init_data) {
2717			.name = "gcc_sdcc1_ice_core_clk",
2718			.parent_hws = (const struct clk_hw*[]){
2719				&sdcc1_ice_core_clk_src.clkr.hw,
2720			},
2721			.num_parents = 1,
2722			.ops = &clk_branch2_ops,
2723			.flags = CLK_SET_RATE_PARENT,
2724		}
2725	}
2726};
2727
2728static struct clk_branch gcc_sdcc1_ahb_clk = {
2729	.halt_reg = 0x4201c,
2730	.halt_check = BRANCH_HALT,
2731	.clkr = {
2732		.enable_reg = 0x4201c,
2733		.enable_mask = BIT(0),
2734		.hw.init = &(struct clk_init_data) {
2735			.name = "gcc_sdcc1_ahb_clk",
2736			.ops = &clk_branch2_ops,
2737		}
2738	}
2739};
2740
2741static struct clk_branch gcc_sdcc2_ahb_clk = {
2742	.halt_reg = 0x4301c,
2743	.halt_check = BRANCH_HALT,
2744	.clkr = {
2745		.enable_reg = 0x4301c,
2746		.enable_mask = BIT(0),
2747		.hw.init = &(struct clk_init_data) {
2748			.name = "gcc_sdcc2_ahb_clk",
2749			.ops = &clk_branch2_ops,
2750		}
2751	}
2752};
2753
2754static struct clk_branch gcc_sdcc1_apps_clk = {
2755	.halt_reg = 0x42018,
2756	.halt_check = BRANCH_HALT,
2757	.clkr = {
2758		.enable_reg = 0x42018,
2759		.enable_mask = BIT(0),
2760		.hw.init = &(struct clk_init_data) {
2761			.name = "gcc_sdcc1_apps_clk",
2762			.parent_hws = (const struct clk_hw*[]){
2763				&sdcc1_apps_clk_src.clkr.hw,
2764			},
2765			.num_parents = 1,
2766			.ops = &clk_branch2_ops,
2767			.flags = CLK_SET_RATE_PARENT,
2768		}
2769	}
2770};
2771
2772static struct clk_branch gcc_sdcc2_apps_clk = {
2773	.halt_reg = 0x43018,
2774	.halt_check = BRANCH_HALT,
2775	.clkr = {
2776		.enable_reg = 0x43018,
2777		.enable_mask = BIT(0),
2778		.hw.init = &(struct clk_init_data) {
2779			.name = "gcc_sdcc2_apps_clk",
2780			.parent_hws = (const struct clk_hw*[]){
2781				&sdcc2_apps_clk_src.clkr.hw,
2782			},
2783			.num_parents = 1,
2784			.ops = &clk_branch2_ops,
2785			.flags = CLK_SET_RATE_PARENT,
2786		}
2787	}
2788};
2789
2790static struct clk_branch gcc_smmu_cfg_clk = {
2791	.halt_reg = 0x12038,
2792	.halt_check = BRANCH_HALT_VOTED,
2793	.clkr = {
2794		.enable_reg = 0x4500c,
2795		.enable_mask = BIT(12),
2796		.hw.init = &(struct clk_init_data) {
2797			.name = "gcc_smmu_cfg_clk",
2798			.ops = &clk_branch2_ops,
2799		}
2800	}
2801};
2802
2803static struct clk_branch gcc_usb2a_phy_sleep_clk = {
2804	.halt_reg = 0x4102c,
2805	.clkr = {
2806		.enable_reg = 0x4102c,
2807		.enable_mask = BIT(0),
2808		.hw.init = &(struct clk_init_data){
2809			.name = "gcc_usb2a_phy_sleep_clk",
2810			.ops = &clk_branch2_ops,
2811		},
2812	},
2813};
2814
2815static struct clk_branch gcc_usb_hs_ahb_clk = {
2816	.halt_reg = 0x41008,
2817	.clkr = {
2818		.enable_reg = 0x41008,
2819		.enable_mask = BIT(0),
2820		.hw.init = &(struct clk_init_data){
2821			.name = "gcc_usb_hs_ahb_clk",
2822			.ops = &clk_branch2_ops,
2823		},
2824	},
2825};
2826
2827static struct clk_branch gcc_usb_hs_phy_cfg_ahb_clk = {
2828	.halt_reg = 0x41030,
2829	.clkr = {
2830		.enable_reg = 0x41030,
2831		.enable_mask = BIT(0),
2832		.hw.init = &(struct clk_init_data){
2833			.name = "gcc_usb_hs_phy_cfg_ahb_clk",
2834			.ops = &clk_branch2_ops,
2835		},
2836	},
2837};
2838
2839static struct clk_branch gcc_usb_hs_system_clk = {
2840	.halt_reg = 0x41004,
2841	.clkr = {
2842		.enable_reg = 0x41004,
2843		.enable_mask = BIT(0),
2844		.hw.init = &(struct clk_init_data){
2845			.name = "gcc_usb_hs_system_clk",
2846			.parent_hws = (const struct clk_hw*[]){
2847				&usb_hs_system_clk_src.clkr.hw,
2848			},
2849			.num_parents = 1,
2850			.flags = CLK_SET_RATE_PARENT,
2851			.ops = &clk_branch2_ops,
2852		},
2853	},
2854};
2855
2856static struct clk_branch gcc_venus0_ahb_clk = {
2857	.halt_reg = 0x4c020,
2858	.halt_check = BRANCH_HALT,
2859	.clkr = {
2860		.enable_reg = 0x4c020,
2861		.enable_mask = BIT(0),
2862		.hw.init = &(struct clk_init_data) {
2863			.name = "gcc_venus0_ahb_clk",
2864			.ops = &clk_branch2_ops,
2865		}
2866	}
2867};
2868
2869static struct clk_branch gcc_venus0_axi_clk = {
2870	.halt_reg = 0x4c024,
2871	.halt_check = BRANCH_HALT,
2872	.clkr = {
2873		.enable_reg = 0x4c024,
2874		.enable_mask = BIT(0),
2875		.hw.init = &(struct clk_init_data) {
2876			.name = "gcc_venus0_axi_clk",
2877			.ops = &clk_branch2_ops,
2878		}
2879	}
2880};
2881
2882static struct clk_branch gcc_venus0_core0_vcodec0_clk = {
2883	.halt_reg = 0x4c02c,
2884	.halt_check = BRANCH_HALT,
2885	.clkr = {
2886		.enable_reg = 0x4c02c,
2887		.enable_mask = BIT(0),
2888		.hw.init = &(struct clk_init_data) {
2889			.name = "gcc_venus0_core0_vcodec0_clk",
2890			.parent_hws = (const struct clk_hw*[]){
2891				&vcodec0_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_venus0_vcodec0_clk = {
2901	.halt_reg = 0x4c01c,
2902	.halt_check = BRANCH_HALT,
2903	.clkr = {
2904		.enable_reg = 0x4c01c,
2905		.enable_mask = BIT(0),
2906		.hw.init = &(struct clk_init_data) {
2907			.name = "gcc_venus0_vcodec0_clk",
2908			.parent_hws = (const struct clk_hw*[]){
2909				&vcodec0_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_venus_tbu_clk = {
2919	.halt_reg = 0x12014,
2920	.halt_check = BRANCH_HALT_VOTED,
2921	.clkr = {
2922		.enable_reg = 0x4500c,
2923		.enable_mask = BIT(5),
2924		.hw.init = &(struct clk_init_data) {
2925			.name = "gcc_venus_tbu_clk",
2926			.ops = &clk_branch2_ops,
2927		}
2928	}
2929};
2930
2931static struct clk_branch gcc_vfe1_tbu_clk = {
2932	.halt_reg = 0x12090,
2933	.halt_check = BRANCH_HALT_VOTED,
2934	.clkr = {
2935		.enable_reg = 0x4500c,
2936		.enable_mask = BIT(17),
2937		.hw.init = &(struct clk_init_data) {
2938			.name = "gcc_vfe1_tbu_clk",
2939			.ops = &clk_branch2_ops,
2940		}
2941	}
2942};
2943
2944static struct clk_branch gcc_vfe_tbu_clk = {
2945	.halt_reg = 0x1203c,
2946	.halt_check = BRANCH_HALT_VOTED,
2947	.clkr = {
2948		.enable_reg = 0x4500c,
2949		.enable_mask = BIT(9),
2950		.hw.init = &(struct clk_init_data) {
2951			.name = "gcc_vfe_tbu_clk",
2952			.ops = &clk_branch2_ops,
2953		}
2954	}
2955};
2956
2957static struct gdsc venus_gdsc = {
2958	.gdscr = 0x4c018,
2959	.cxcs = (unsigned int []){ 0x4c024, 0x4c01c },
2960	.cxc_count = 2,
2961	.pd = {
2962		.name = "venus_gdsc",
2963	},
2964	.pwrsts = PWRSTS_OFF_ON,
2965};
2966
2967static struct gdsc venus_core0_gdsc = {
2968	.gdscr = 0x4c028,
2969	.cxcs = (unsigned int []){ 0x4c02c },
2970	.cxc_count = 1,
2971	.pd = {
2972		.name = "venus_core0",
2973	},
2974	.flags = HW_CTRL,
2975	.pwrsts = PWRSTS_OFF_ON,
2976};
2977
2978static struct gdsc mdss_gdsc = {
2979	.gdscr = 0x4d078,
2980	.cxcs = (unsigned int []){ 0x4d080, 0x4d088 },
2981	.cxc_count = 2,
2982	.pd = {
2983		.name = "mdss_gdsc",
2984	},
2985	.pwrsts = PWRSTS_OFF_ON,
2986};
2987
2988static struct gdsc jpeg_gdsc = {
2989	.gdscr = 0x5701c,
2990	.cxcs = (unsigned int []){ 0x57020, 0x57028 },
2991	.cxc_count = 2,
2992	.pd = {
2993		.name = "jpeg_gdsc",
2994	},
2995	.pwrsts = PWRSTS_OFF_ON,
2996};
2997
2998static struct gdsc vfe0_gdsc = {
2999	.gdscr = 0x58034,
3000	.cxcs = (unsigned int []){ 0x58038, 0x58048, 0x5600c, 0x58050 },
3001	.cxc_count = 4,
3002	.pd = {
3003		.name = "vfe0_gdsc",
3004	},
3005	.pwrsts = PWRSTS_OFF_ON,
3006};
3007
3008static struct gdsc vfe1_gdsc = {
3009	.gdscr = 0x5806c,
3010	.cxcs = (unsigned int []){ 0x5805c, 0x58068, 0x5600c, 0x58074 },
3011	.cxc_count = 4,
3012	.pd = {
3013		.name = "vfe1_gdsc",
3014	},
3015	.pwrsts = PWRSTS_OFF_ON,
3016};
3017
3018static struct gdsc oxili_gx_gdsc = {
3019	.gdscr = 0x5901c,
3020	.clamp_io_ctrl = 0x5b00c,
3021	.cxcs = (unsigned int []){ 0x59000, 0x59020 },
3022	.cxc_count = 2,
3023	.pd = {
3024		.name = "oxili_gx_gdsc",
3025	},
3026	.pwrsts = PWRSTS_OFF_ON,
3027	.flags = CLAMP_IO,
3028};
3029
3030static struct gdsc cpp_gdsc = {
3031	.gdscr = 0x58078,
3032	.cxcs = (unsigned int []){ 0x5803c, 0x58064 },
3033	.cxc_count = 2,
3034	.pd = {
3035		.name = "cpp_gdsc",
3036	},
3037	.flags = ALWAYS_ON,
3038	.pwrsts = PWRSTS_OFF_ON,
3039};
3040
3041static struct clk_regmap *gcc_msm8917_clocks[] = {
3042	[GPLL0] = &gpll0.clkr,
3043	[GPLL0_EARLY] = &gpll0_early.clkr,
3044	[GPLL0_SLEEP_CLK_SRC] = &gpll0_sleep_clk_src.clkr,
3045	[GPLL3] = &gpll3.clkr,
3046	[GPLL3_EARLY] = &gpll3_early.clkr,
3047	[GPLL4] = &gpll4.clkr,
3048	[GPLL4_EARLY] = &gpll4_early.clkr,
3049	[GPLL6] = &gpll6,
3050	[GPLL6_EARLY] = &gpll6_early.clkr,
3051	[APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
3052	[BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
3053	[BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
3054	[BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
3055	[BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
3056	[BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
3057	[BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
3058	[BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
3059	[BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
3060	[BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
3061	[BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
3062	[BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
3063	[BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
3064	[BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
3065	[BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
3066	[BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
3067	[BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
3068	[BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
3069	[CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
3070	[CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
3071	[CAMSS_TOP_AHB_CLK_SRC] = &camss_top_ahb_clk_src.clkr,
3072	[CCI_CLK_SRC] = &cci_clk_src.clkr,
3073	[CPP_CLK_SRC] = &cpp_clk_src.clkr,
3074	[CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
3075	[CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
3076	[CSI0_CLK_SRC] = &csi0_clk_src.clkr,
3077	[CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
3078	[CSI1_CLK_SRC] = &csi1_clk_src.clkr,
3079	[CSI2_CLK_SRC] = &csi2_clk_src.clkr,
3080	[ESC0_CLK_SRC] = &esc0_clk_src.clkr,
3081	[GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
3082	[GP1_CLK_SRC] = &gp1_clk_src.clkr,
3083	[GP2_CLK_SRC] = &gp2_clk_src.clkr,
3084	[GP3_CLK_SRC] = &gp3_clk_src.clkr,
3085	[JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
3086	[MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
3087	[MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
3088	[MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,
3089	[MDP_CLK_SRC] = &mdp_clk_src.clkr,
3090	[PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
3091	[PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
3092	[SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
3093	[SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
3094	[SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
3095	[USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
3096	[VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
3097	[VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
3098	[VFE1_CLK_SRC] = &vfe1_clk_src.clkr,
3099	[VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
3100	[GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr,
3101	[GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
3102	[GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr,
3103	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
3104	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
3105	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
3106	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
3107	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
3108	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
3109	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
3110	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
3111	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
3112	[GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
3113	[GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
3114	[GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
3115	[GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
3116	[GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
3117	[GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
3118	[GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
3119	[GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
3120	[GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
3121	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3122	[GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr,
3123	[GCC_CAMSS_CCI_AHB_CLK] = &gcc_camss_cci_ahb_clk.clkr,
3124	[GCC_CAMSS_CCI_CLK] = &gcc_camss_cci_clk.clkr,
3125	[GCC_CAMSS_CPP_AHB_CLK] = &gcc_camss_cpp_ahb_clk.clkr,
3126	[GCC_CAMSS_CPP_CLK] = &gcc_camss_cpp_clk.clkr,
3127	[GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
3128	[GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr,
3129	[GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr,
3130	[GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr,
3131	[GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr,
3132	[GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr,
3133	[GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
3134	[GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr,
3135	[GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr,
3136	[GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr,
3137	[GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr,
3138	[GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr,
3139	[GCC_CAMSS_CSI2PHY_CLK] = &gcc_camss_csi2phy_clk.clkr,
3140	[GCC_CAMSS_CSI2PIX_CLK] = &gcc_camss_csi2pix_clk.clkr,
3141	[GCC_CAMSS_CSI2RDI_CLK] = &gcc_camss_csi2rdi_clk.clkr,
3142	[GCC_CAMSS_CSI2_AHB_CLK] = &gcc_camss_csi2_ahb_clk.clkr,
3143	[GCC_CAMSS_CSI2_CLK] = &gcc_camss_csi2_clk.clkr,
3144	[GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr,
3145	[GCC_CAMSS_CSI_VFE1_CLK] = &gcc_camss_csi_vfe1_clk.clkr,
3146	[GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr,
3147	[GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr,
3148	[GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr,
3149	[GCC_CAMSS_JPEG0_CLK] = &gcc_camss_jpeg0_clk.clkr,
3150	[GCC_CAMSS_JPEG_AHB_CLK] = &gcc_camss_jpeg_ahb_clk.clkr,
3151	[GCC_CAMSS_JPEG_AXI_CLK] = &gcc_camss_jpeg_axi_clk.clkr,
3152	[GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
3153	[GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
3154	[GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr,
3155	[GCC_CAMSS_MICRO_AHB_CLK] = &gcc_camss_micro_ahb_clk.clkr,
3156	[GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
3157	[GCC_CAMSS_VFE0_AHB_CLK] = &gcc_camss_vfe0_ahb_clk.clkr,
3158	[GCC_CAMSS_VFE0_AXI_CLK] = &gcc_camss_vfe0_axi_clk.clkr,
3159	[GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr,
3160	[GCC_CAMSS_VFE1_AHB_CLK] = &gcc_camss_vfe1_ahb_clk.clkr,
3161	[GCC_CAMSS_VFE1_AXI_CLK] = &gcc_camss_vfe1_axi_clk.clkr,
3162	[GCC_CAMSS_VFE1_CLK] = &gcc_camss_vfe1_clk.clkr,
3163	[GCC_CPP_TBU_CLK] = &gcc_cpp_tbu_clk.clkr,
3164	[GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
3165	[GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
3166	[GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
3167	[GCC_DCC_CLK] = &gcc_dcc_clk.clkr,
3168	[GCC_GFX_TBU_CLK] = &gcc_gfx_tbu_clk.clkr,
3169	[GCC_GFX_TCU_CLK] = &gcc_gfx_tcu_clk.clkr,
3170	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3171	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3172	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3173	[GCC_GTCU_AHB_CLK] = &gcc_gtcu_ahb_clk.clkr,
3174	[GCC_JPEG_TBU_CLK] = &gcc_jpeg_tbu_clk.clkr,
3175	[GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr,
3176	[GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr,
3177	[GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr,
3178	[GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr,
3179	[GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr,
3180	[GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr,
3181	[GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr,
3182	[GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr,
3183	[GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
3184	[GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
3185	[GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr,
3186	[GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr,
3187	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3188	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3189	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3190	[GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr,
3191	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
3192	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
3193	[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
3194	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3195	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3196	[GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,
3197	[GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
3198	[GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
3199	[GCC_USB_HS_PHY_CFG_AHB_CLK] = &gcc_usb_hs_phy_cfg_ahb_clk.clkr,
3200	[GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
3201	[GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr,
3202	[GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr,
3203	[GCC_VENUS0_CORE0_VCODEC0_CLK] = &gcc_venus0_core0_vcodec0_clk.clkr,
3204	[GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr,
3205	[GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr,
3206	[GCC_VFE1_TBU_CLK] = &gcc_vfe1_tbu_clk.clkr,
3207	[GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr,
3208};
3209
3210static const struct qcom_reset_map gcc_msm8917_resets[] = {
3211	[GCC_CAMSS_MICRO_BCR]		= { 0x56008 },
3212	[GCC_MSS_BCR]			= { 0x71000 },
3213	[GCC_QUSB2_PHY_BCR]		= { 0x4103c },
3214	[GCC_USB_HS_BCR]		= { 0x41000 },
3215	[GCC_USB2_HS_PHY_ONLY_BCR]	= { 0x41034 },
3216};
3217
3218static const struct regmap_config gcc_msm8917_regmap_config = {
3219	.reg_bits	= 32,
3220	.reg_stride	= 4,
3221	.val_bits	= 32,
3222	.max_register	= 0x80000,
3223	.fast_io	= true,
3224};
3225
3226static struct gdsc *gcc_msm8917_gdscs[] = {
3227	[CPP_GDSC] = &cpp_gdsc,
3228	[JPEG_GDSC] = &jpeg_gdsc,
3229	[MDSS_GDSC] = &mdss_gdsc,
3230	[OXILI_GX_GDSC] = &oxili_gx_gdsc,
3231	[VENUS_CORE0_GDSC] = &venus_core0_gdsc,
3232	[VENUS_GDSC] = &venus_gdsc,
3233	[VFE0_GDSC] = &vfe0_gdsc,
3234	[VFE1_GDSC] = &vfe1_gdsc,
3235};
3236
3237static const struct qcom_cc_desc gcc_msm8917_desc = {
3238	.config = &gcc_msm8917_regmap_config,
3239	.clks = gcc_msm8917_clocks,
3240	.num_clks = ARRAY_SIZE(gcc_msm8917_clocks),
3241	.resets = gcc_msm8917_resets,
3242	.num_resets = ARRAY_SIZE(gcc_msm8917_resets),
3243	.gdscs = gcc_msm8917_gdscs,
3244	.num_gdscs = ARRAY_SIZE(gcc_msm8917_gdscs),
3245};
3246
3247static const struct qcom_cc_desc gcc_qm215_desc = {
3248	.config = &gcc_msm8917_regmap_config,
3249	.clks = gcc_msm8917_clocks,
3250	.num_clks = ARRAY_SIZE(gcc_msm8917_clocks),
3251	.resets = gcc_msm8917_resets,
3252	.num_resets = ARRAY_SIZE(gcc_msm8917_resets),
3253	.gdscs = gcc_msm8917_gdscs,
3254	.num_gdscs = ARRAY_SIZE(gcc_msm8917_gdscs),
3255};
3256
3257static int gcc_msm8917_probe(struct platform_device *pdev)
3258{
3259	struct regmap *regmap;
3260	const struct qcom_cc_desc *gcc_desc;
3261
3262	gcc_desc = of_device_get_match_data(&pdev->dev);
3263
3264	if (gcc_desc == &gcc_qm215_desc)
3265		gfx3d_clk_src.parent_map = gcc_gfx3d_map_qm215;
3266
3267	regmap = qcom_cc_map(pdev, gcc_desc);
3268	if (IS_ERR(regmap))
3269		return PTR_ERR(regmap);
3270
3271	clk_alpha_pll_configure(&gpll3_early, regmap, &gpll3_early_config);
3272
3273	return qcom_cc_really_probe(pdev, gcc_desc, regmap);
3274}
3275
3276static const struct of_device_id gcc_msm8917_match_table[] = {
3277	{ .compatible = "qcom,gcc-msm8917", .data = &gcc_msm8917_desc },
3278	{ .compatible = "qcom,gcc-qm215", .data = &gcc_qm215_desc },
3279	{},
3280};
3281
3282static struct platform_driver gcc_msm8917_driver = {
3283	.probe = gcc_msm8917_probe,
3284	.driver = {
3285		.name = "gcc-msm8917",
3286		.of_match_table = gcc_msm8917_match_table,
3287	},
3288};
3289
3290static int __init gcc_msm8917_init(void)
3291{
3292	return platform_driver_register(&gcc_msm8917_driver);
3293}
3294core_initcall(gcc_msm8917_init);
3295
3296static void __exit gcc_msm8917_exit(void)
3297{
3298	platform_driver_unregister(&gcc_msm8917_driver);
3299}
3300module_exit(gcc_msm8917_exit);
3301
3302MODULE_DESCRIPTION("Qualcomm GCC MSM8917 Driver");
3303MODULE_LICENSE("GPL");