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