xref: /openbmc/linux/drivers/clk/qcom/gcc-msm8917.c (revision a9ebfc40)
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 
35 enum {
36 	DT_XO,
37 	DT_SLEEP_CLK,
38 	DT_DSI0PLL,
39 	DT_DSI0PLL_BYTE,
40 };
41 
42 enum {
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 
53 static 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 
71 static 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 
88 static 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 
101 static const struct pll_vco gpll3_p_vco[] = {
102 	{ 700000000, 1400000000, 0 },
103 };
104 
105 static 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 
113 static 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 
131 static 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 
145 static 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 
162 static 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 
175 static 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 
193 static 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 
206 static const struct parent_map gcc_xo_gpll0_map[] = {
207 	{ P_XO, 0 },
208 	{ P_GPLL0, 1 },
209 };
210 
211 static const struct parent_map gcc_xo_gpll0_out_aux_map[] = {
212 	{ P_XO, 0 },
213 	{ P_GPLL0, 2 },
214 };
215 
216 static const struct clk_parent_data gcc_xo_gpll0_data[] = {
217 	{ .index = DT_XO },
218 	{ .hw = &gpll0.clkr.hw },
219 };
220 
221 static 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 
228 static 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 
235 static 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 
242 static 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 
249 static 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 
257 static 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 
270 static 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 
276 static 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 
289 static 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 
302 static 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 
315 static 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 
328 static 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 
341 static 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 
354 static 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 
365 static 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 
379 static 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 
393 static 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 
407 static 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 
421 static 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 
435 static 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 
449 static 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 
469 static 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 
483 static 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 
497 static 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 
511 static 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 
525 static const struct parent_map gcc_byte0_map[] = {
526 	{ P_XO, 0 },
527 	{ P_DSI0PLL_BYTE, 1 },
528 };
529 
530 static const struct clk_parent_data gcc_byte_data[] = {
531 	{ .index = DT_XO },
532 	{ .index = DT_DSI0PLL_BYTE },
533 };
534 
535 static 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 
548 static 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 
555 static 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 
569 static 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 
583 static 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 
590 static 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 
603 static 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 
609 static 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 
623 static const struct parent_map gcc_cpp_map[] = {
624 	{ P_XO, 0 },
625 	{ P_GPLL0, 1 },
626 	{ P_GPLL6, 3 },
627 };
628 
629 static const struct clk_parent_data gcc_cpp_data[] = {
630 	{ .index = DT_XO },
631 	{ .hw = &gpll0.clkr.hw },
632 	{ .hw = &gpll6.hw },
633 };
634 
635 static 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 
645 static 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 
658 static 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 
666 static 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 
679 static 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 
686 static 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 
699 static 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 
712 static 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 
725 static 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 
733 static 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 
746 static 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 
759 static const struct freq_tbl ftbl_esc0_1_clk_src[] = {
760 	F(19200000, P_XO, 1, 0, 0),
761 	{ }
762 };
763 
764 static 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 
777 static 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 
784 static 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 
791 static 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 
798 static 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 
820 static 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 
834 static const struct freq_tbl ftbl_gp_clk_src[] = {
835 	F(19200000, P_XO, 1, 0, 0),
836 	{ }
837 };
838 
839 static 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 
853 static 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 
867 static 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 
881 static 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 
888 static 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 
901 static 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 
908 static 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 
922 static 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 
936 static 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 
950 static 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 
963 static 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 
976 static const struct parent_map gcc_pclk_map[] = {
977 	{ P_XO, 0 },
978 	{ P_DSI0PLL, 1 },
979 };
980 
981 static const struct clk_parent_data gcc_pclk_data[] = {
982 	{ .index = DT_XO },
983 	{ .index = DT_DSI0PLL },
984 };
985 
986 static 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 
1000 static const struct freq_tbl ftbl_pdm2_clk_src[] = {
1001 	F(64000000, P_GPLL0, 12.5, 0, 0),
1002 	{ }
1003 };
1004 
1005 static 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 
1018 static 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 
1024 static 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 
1037 static const struct parent_map gcc_sdcc1_apps_map[] = {
1038 	{ P_XO, 0 },
1039 	{ P_GPLL0, 1 },
1040 	{ P_GPLL4, 2 },
1041 };
1042 
1043 static 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 
1049 static 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 
1063 static 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 
1077 static 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 
1089 static 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 
1103 static 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 
1111 static 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 
1124 static 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 
1135 static 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 
1148 static 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 
1163 static 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 
1176 static 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 
1189 static const struct freq_tbl ftbl_vsync_clk_src[] = {
1190 	F(19200000, P_XO, 1, 0, 0),
1191 	{ }
1192 };
1193 
1194 static 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 
1207 static 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 
1220 static 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 
1233 static 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 
1246 static 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 
1259 static 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 
1272 static 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 
1290 static 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 
1308 static 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 
1326 static 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 
1344 static 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 
1362 static 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 
1380 static 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 
1398 static 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 
1416 static 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 
1434 static 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 
1452 static 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 
1470 static 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 
1488 static 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 
1506 static 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 
1524 static 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 
1542 static 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 
1560 static 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 
1573 static 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 
1586 static 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 
1604 static 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 
1622 static 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 
1640 static 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 
1658 static 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 
1676 static 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 
1694 static 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 
1712 static 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 
1730 static 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 
1748 static 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 
1766 static 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 
1784 static 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 
1802 static 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 
1820 static 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 
1838 static 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 
1856 static 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 
1874 static 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 
1892 static 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 
1910 static 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 
1928 static 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 
1946 static 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 
1964 static 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 
1982 static 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 
2000 static 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 
2018 static 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 
2036 static 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 
2054 static 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 
2072 static 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 
2090 static 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 
2103 static 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 
2121 static 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 
2139 static 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 
2157 static 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 
2175 static 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 
2193 static 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 
2211 static 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 
2224 static 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 
2242 static 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 
2260 static 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 
2273 static 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 
2291 static 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 
2304 static 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 
2317 static 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 
2330 static 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 
2348 static 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 
2361 static 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 
2374 static 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 
2387 static 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 
2400 static 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 
2418 static 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 
2436 static 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 
2454 static 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 
2467 static 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 
2480 static 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 
2493 static 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 
2506 static 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 
2524 static 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 
2542 static 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 
2560 static 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 
2578 static 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 
2596 static 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 
2609 static 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 
2622 static 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 
2635 static 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 
2653 static 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 
2671 static 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 
2684 static 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 
2697 static 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 
2710 static 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 
2728 static 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 
2741 static 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 
2754 static 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 
2772 static 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 
2790 static 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 
2803 static 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 
2815 static 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 
2827 static 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 
2839 static 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 
2856 static 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 
2869 static 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 
2882 static 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 
2900 static 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 
2918 static 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 
2931 static 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 
2944 static 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 
2957 static 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 
2967 static 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 
2978 static 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 
2988 static 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 
2998 static 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 
3008 static 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 
3018 static 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 
3030 static 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 
3041 static 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 
3210 static 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 
3218 static 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 
3226 static 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 
3237 static 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 
3247 static 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 
3257 static 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 
3276 static 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 
3282 static 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 
3290 static int __init gcc_msm8917_init(void)
3291 {
3292 	return platform_driver_register(&gcc_msm8917_driver);
3293 }
3294 core_initcall(gcc_msm8917_init);
3295 
3296 static void __exit gcc_msm8917_exit(void)
3297 {
3298 	platform_driver_unregister(&gcc_msm8917_driver);
3299 }
3300 module_exit(gcc_msm8917_exit);
3301 
3302 MODULE_DESCRIPTION("Qualcomm GCC MSM8917 Driver");
3303 MODULE_LICENSE("GPL");
3304