xref: /linux/drivers/clk/qcom/gcc-msm8917.c (revision 522ba450b56fff29f868b1552bdc2965f55de7ed)
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 struct clk_rcg2 gfx3d_clk_src = {
961 	.cmd_rcgr = 0x59000,
962 	.hid_width = 5,
963 	.freq_tbl = ftbl_gfx3d_clk_src,
964 	.parent_map = gcc_gfx3d_map,
965 	.clkr.hw.init = &(struct clk_init_data) {
966 		.name = "gfx3d_clk_src",
967 		.parent_data = gcc_gfx3d_data,
968 		.num_parents = ARRAY_SIZE(gcc_gfx3d_data),
969 		.ops = &clk_rcg2_ops,
970 		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
971 	}
972 };
973 
974 static const struct freq_tbl ftbl_gp_clk_src[] = {
975 	F(19200000, P_XO, 1, 0, 0),
976 	{ }
977 };
978 
979 static struct clk_rcg2 gp1_clk_src = {
980 	.cmd_rcgr = 0x08004,
981 	.hid_width = 5,
982 	.mnd_width = 8,
983 	.freq_tbl = ftbl_gp_clk_src,
984 	.parent_map = gcc_xo_gpll0_gpll6_sleep_map,
985 	.clkr.hw.init = &(struct clk_init_data) {
986 		.name = "gp1_clk_src",
987 		.parent_data = gcc_xo_gpll0_gpll6_sleep_data,
988 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
989 		.ops = &clk_rcg2_ops,
990 	}
991 };
992 
993 static struct clk_rcg2 gp2_clk_src = {
994 	.cmd_rcgr = 0x09004,
995 	.hid_width = 5,
996 	.mnd_width = 8,
997 	.freq_tbl = ftbl_gp_clk_src,
998 	.parent_map = gcc_xo_gpll0_gpll6_sleep_map,
999 	.clkr.hw.init = &(struct clk_init_data) {
1000 		.name = "gp2_clk_src",
1001 		.parent_data = gcc_xo_gpll0_gpll6_sleep_data,
1002 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
1003 		.ops = &clk_rcg2_ops,
1004 	}
1005 };
1006 
1007 static struct clk_rcg2 gp3_clk_src = {
1008 	.cmd_rcgr = 0x0a004,
1009 	.hid_width = 5,
1010 	.mnd_width = 8,
1011 	.freq_tbl = ftbl_gp_clk_src,
1012 	.parent_map = gcc_xo_gpll0_gpll6_sleep_map,
1013 	.clkr.hw.init = &(struct clk_init_data) {
1014 		.name = "gp3_clk_src",
1015 		.parent_data = gcc_xo_gpll0_gpll6_sleep_data,
1016 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
1017 		.ops = &clk_rcg2_ops,
1018 	}
1019 };
1020 
1021 static const struct freq_tbl ftbl_jpeg0_clk_src[] = {
1022 	F(133330000, P_GPLL0, 6, 0, 0),
1023 	F(266670000, P_GPLL0, 3, 0, 0),
1024 	F(320000000, P_GPLL0, 2.5, 0, 0),
1025 	{ }
1026 };
1027 
1028 static struct clk_rcg2 jpeg0_clk_src = {
1029 	.cmd_rcgr = 0x57000,
1030 	.hid_width = 5,
1031 	.freq_tbl = ftbl_jpeg0_clk_src,
1032 	.parent_map = gcc_xo_gpll0_map,
1033 	.clkr.hw.init = &(struct clk_init_data) {
1034 		.name = "jpeg0_clk_src",
1035 		.parent_data = gcc_xo_gpll0_data,
1036 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
1037 		.ops = &clk_rcg2_ops,
1038 	}
1039 };
1040 
1041 static const struct freq_tbl ftbl_mclk_clk_src[] = {
1042 	F(19200000, P_XO, 1, 0, 0),
1043 	F(24000000, P_GPLL6, 1, 1, 45),
1044 	F(66667000, P_GPLL0, 12, 0, 0),
1045 	{ }
1046 };
1047 
1048 static struct clk_rcg2 mclk0_clk_src = {
1049 	.cmd_rcgr = 0x52000,
1050 	.hid_width = 5,
1051 	.mnd_width = 8,
1052 	.freq_tbl = ftbl_mclk_clk_src,
1053 	.parent_map = gcc_xo_gpll0_gpll6_sleep_map,
1054 	.clkr.hw.init = &(struct clk_init_data) {
1055 		.name = "mclk0_clk_src",
1056 		.parent_data = gcc_xo_gpll0_gpll6_sleep_data,
1057 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
1058 		.ops = &clk_rcg2_ops,
1059 	}
1060 };
1061 
1062 static struct clk_rcg2 mclk1_clk_src = {
1063 	.cmd_rcgr = 0x53000,
1064 	.hid_width = 5,
1065 	.mnd_width = 8,
1066 	.freq_tbl = ftbl_mclk_clk_src,
1067 	.parent_map = gcc_xo_gpll0_gpll6_sleep_map,
1068 	.clkr.hw.init = &(struct clk_init_data) {
1069 		.name = "mclk1_clk_src",
1070 		.parent_data = gcc_xo_gpll0_gpll6_sleep_data,
1071 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
1072 		.ops = &clk_rcg2_ops,
1073 	}
1074 };
1075 
1076 static struct clk_rcg2 mclk2_clk_src = {
1077 	.cmd_rcgr = 0x5c000,
1078 	.hid_width = 5,
1079 	.mnd_width = 8,
1080 	.freq_tbl = ftbl_mclk_clk_src,
1081 	.parent_map = gcc_xo_gpll0_gpll6_sleep_map,
1082 	.clkr.hw.init = &(struct clk_init_data) {
1083 		.name = "mclk2_clk_src",
1084 		.parent_data = gcc_xo_gpll0_gpll6_sleep_data,
1085 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
1086 		.ops = &clk_rcg2_ops,
1087 	}
1088 };
1089 
1090 static const struct freq_tbl ftbl_mdp_clk_src[] = {
1091 	F(50000000, P_GPLL0, 16, 0, 0),
1092 	F(80000000, P_GPLL0, 10, 0, 0),
1093 	F(100000000, P_GPLL0, 8, 0, 0),
1094 	F(145450000, P_GPLL0, 5.5, 0, 0),
1095 	F(160000000, P_GPLL0, 5, 0, 0),
1096 	F(177780000, P_GPLL0, 4.5, 0, 0),
1097 	F(200000000, P_GPLL0, 4, 0, 0),
1098 	F(266670000, P_GPLL0, 3, 0, 0),
1099 	F(320000000, P_GPLL0, 2.5, 0, 0),
1100 	{ }
1101 };
1102 
1103 static struct clk_rcg2 mdp_clk_src = {
1104 	.cmd_rcgr = 0x4d014,
1105 	.hid_width = 5,
1106 	.freq_tbl = ftbl_mdp_clk_src,
1107 	.parent_map = gcc_xo_gpll0_map,
1108 	.clkr.hw.init = &(struct clk_init_data) {
1109 		.name = "mdp_clk_src",
1110 		.parent_data = gcc_xo_gpll0_data,
1111 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
1112 		.ops = &clk_rcg2_ops,
1113 	}
1114 };
1115 
1116 static const struct parent_map gcc_pclk0_map[] = {
1117 	{ P_XO, 0 },
1118 	{ P_DSI0PLL, 1 },
1119 	{ P_DSI1PLL, 3 },
1120 };
1121 
1122 static const struct parent_map gcc_pclk1_map[] = {
1123 	{ P_XO, 0 },
1124 	{ P_DSI0PLL, 3 },
1125 	{ P_DSI1PLL, 1 },
1126 };
1127 
1128 static const struct clk_parent_data gcc_pclk_data[] = {
1129 	{ .index = DT_XO },
1130 	{ .index = DT_DSI0PLL },
1131 	{ .index = DT_DSI1PLL },
1132 };
1133 
1134 static struct clk_rcg2 pclk0_clk_src = {
1135 	.cmd_rcgr = 0x4d000,
1136 	.hid_width = 5,
1137 	.mnd_width = 8,
1138 	.parent_map = gcc_pclk0_map,
1139 	.clkr.hw.init = &(struct clk_init_data) {
1140 		.name = "pclk0_clk_src",
1141 		.parent_data = gcc_pclk_data,
1142 		.num_parents = ARRAY_SIZE(gcc_pclk_data),
1143 		.ops = &clk_pixel_ops,
1144 		.flags = CLK_SET_RATE_PARENT,
1145 	}
1146 };
1147 
1148 static struct clk_rcg2 pclk1_clk_src = {
1149 	.cmd_rcgr = 0x4d0b8,
1150 	.hid_width = 5,
1151 	.mnd_width = 8,
1152 	.parent_map = gcc_pclk1_map,
1153 	.clkr.hw.init = &(struct clk_init_data){
1154 		.name = "pclk1_clk_src",
1155 		.parent_data = gcc_pclk_data,
1156 		.num_parents = ARRAY_SIZE(gcc_pclk_data),
1157 		.ops = &clk_pixel_ops,
1158 		.flags = CLK_SET_RATE_PARENT,
1159 	},
1160 };
1161 
1162 static const struct freq_tbl ftbl_pdm2_clk_src[] = {
1163 	F(64000000, P_GPLL0, 12.5, 0, 0),
1164 	{ }
1165 };
1166 
1167 static struct clk_rcg2 pdm2_clk_src = {
1168 	.cmd_rcgr = 0x44010,
1169 	.hid_width = 5,
1170 	.freq_tbl = ftbl_pdm2_clk_src,
1171 	.parent_map = gcc_xo_gpll0_map,
1172 	.clkr.hw.init = &(struct clk_init_data) {
1173 		.name = "pdm2_clk_src",
1174 		.parent_data = gcc_xo_gpll0_data,
1175 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
1176 		.ops = &clk_rcg2_ops,
1177 	}
1178 };
1179 
1180 static const struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = {
1181 	F(100000000, P_GPLL0, 8, 0, 0),
1182 	F(200000000, P_GPLL0, 4, 0, 0),
1183 	{ }
1184 };
1185 
1186 static struct clk_rcg2 sdcc1_ice_core_clk_src = {
1187 	.cmd_rcgr = 0x5d000,
1188 	.hid_width = 5,
1189 	.freq_tbl = ftbl_sdcc1_ice_core_clk_src,
1190 	.parent_map = gcc_xo_gpll0_map,
1191 	.clkr.hw.init = &(struct clk_init_data) {
1192 		.name = "sdcc1_ice_core_clk_src",
1193 		.parent_data = gcc_xo_gpll0_data,
1194 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
1195 		.ops = &clk_rcg2_ops,
1196 	}
1197 };
1198 
1199 static const struct parent_map gcc_sdcc1_apps_map[] = {
1200 	{ P_XO, 0 },
1201 	{ P_GPLL0, 1 },
1202 	{ P_GPLL4, 2 },
1203 };
1204 
1205 static const struct clk_parent_data gcc_sdcc1_apss_data[] = {
1206 	{ .index = DT_XO },
1207 	{ .hw = &gpll0.clkr.hw },
1208 	{ .hw = &gpll4.clkr.hw },
1209 };
1210 
1211 static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
1212 	F(144000, P_XO, 16, 3, 25),
1213 	F(400000, P_XO, 12, 1, 4),
1214 	F(20000000, P_GPLL0, 10, 1, 4),
1215 	F(25000000, P_GPLL0, 16, 1, 2),
1216 	F(50000000, P_GPLL0, 16, 0, 0),
1217 	F(100000000, P_GPLL0, 8, 0, 0),
1218 	F(177770000, P_GPLL0, 4.5, 0, 0),
1219 	F(192000000, P_GPLL4, 6, 0, 0),
1220 	F(200000000, P_GPLL0, 4, 0, 0),
1221 	F(384000000, P_GPLL4, 3, 0, 0),
1222 	{ }
1223 };
1224 
1225 static struct clk_rcg2 sdcc1_apps_clk_src = {
1226 	.cmd_rcgr = 0x42004,
1227 	.hid_width = 5,
1228 	.mnd_width = 8,
1229 	.freq_tbl = ftbl_sdcc1_apps_clk_src,
1230 	.parent_map = gcc_sdcc1_apps_map,
1231 	.clkr.hw.init = &(struct clk_init_data) {
1232 		.name = "sdcc1_apps_clk_src",
1233 		.parent_data = gcc_sdcc1_apss_data,
1234 		.num_parents = ARRAY_SIZE(gcc_sdcc1_apss_data),
1235 		.ops = &clk_rcg2_floor_ops,
1236 	}
1237 };
1238 
1239 static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = {
1240 	F(144000, P_XO, 16, 3, 25),
1241 	F(400000, P_XO, 12, 1, 4),
1242 	F(20000000, P_GPLL0, 10, 1, 4),
1243 	F(25000000, P_GPLL0, 16, 1, 2),
1244 	F(50000000, P_GPLL0, 16, 0, 0),
1245 	F(100000000, P_GPLL0, 8, 0, 0),
1246 	F(177770000, P_GPLL0, 4.5, 0, 0),
1247 	F(200000000, P_GPLL0, 4, 0, 0),
1248 	{ }
1249 };
1250 
1251 static struct clk_rcg2 sdcc2_apps_clk_src = {
1252 	.cmd_rcgr = 0x43004,
1253 	.hid_width = 5,
1254 	.mnd_width = 8,
1255 	.freq_tbl = ftbl_sdcc2_apps_clk_src,
1256 	.parent_map = gcc_xo_gpll0_map,
1257 	.clkr.hw.init = &(struct clk_init_data) {
1258 		.name = "sdcc2_apps_clk_src",
1259 		.parent_data = gcc_xo_gpll0_data,
1260 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
1261 		.ops = &clk_rcg2_floor_ops,
1262 	}
1263 };
1264 
1265 static const struct freq_tbl ftbl_usb_hs_system_clk_src[] = {
1266 	F(80000000, P_GPLL0, 10, 0, 0),
1267 	F(100000000, P_GPLL0, 8, 0, 0),
1268 	F(133330000, P_GPLL0, 6, 0, 0),
1269 	F(177780000, P_GPLL0, 4.5, 0, 0),
1270 	{ }
1271 };
1272 
1273 static const struct freq_tbl ftbl_usb_hs_system_clk_src_msm8937[] = {
1274 	F(57142857, P_GPLL0, 14, 0, 0),
1275 	F(100000000, P_GPLL0, 8, 0, 0),
1276 	F(133333333, P_GPLL0, 6, 0, 0),
1277 	F(177777778, P_GPLL0, 4.5, 0, 0),
1278 	{ }
1279 };
1280 
1281 static struct clk_rcg2 usb_hs_system_clk_src = {
1282 	.cmd_rcgr = 0x41010,
1283 	.hid_width = 5,
1284 	.parent_map = gcc_xo_gpll0_map,
1285 	.freq_tbl = ftbl_usb_hs_system_clk_src,
1286 	.clkr.hw.init = &(struct clk_init_data){
1287 		.name = "usb_hs_system_clk_src",
1288 		.parent_data = gcc_xo_gpll0_data,
1289 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
1290 		.ops = &clk_rcg2_ops,
1291 	},
1292 };
1293 
1294 static const struct freq_tbl ftbl_vcodec0_clk_src[] = {
1295 	F(133330000, P_GPLL0, 6, 0, 0),
1296 	F(180000000, P_GPLL6, 6, 0, 0),
1297 	F(228570000, P_GPLL0, 3.5, 0, 0),
1298 	F(266670000, P_GPLL0, 3, 0, 0),
1299 	F(308570000, P_GPLL6, 3.5, 0, 0),
1300 	F(329140000, P_GPLL4, 3.5, 0, 0),
1301 	F(360000000, P_GPLL6, 3, 0, 0),
1302 	{ }
1303 };
1304 
1305 static const struct freq_tbl ftbl_vcodec0_clk_src_msm8937[] = {
1306 	F(166150000, P_GPLL6, 6.5, 0, 0),
1307 	F(240000000, P_GPLL6, 4.5, 0, 0),
1308 	F(308571428, P_GPLL6, 3.5, 0, 0),
1309 	F(320000000, P_GPLL0, 2.5, 0, 0),
1310 	F(360000000, P_GPLL6, 3, 0, 0),
1311 	{ }
1312 };
1313 
1314 static struct clk_rcg2 vcodec0_clk_src = {
1315 	.cmd_rcgr = 0x4c000,
1316 	.hid_width = 5,
1317 	.freq_tbl = ftbl_vcodec0_clk_src,
1318 	.parent_map = gcc_xo_gpll0_gpll6_gpll4_map,
1319 	.clkr.hw.init = &(struct clk_init_data) {
1320 		.name = "vcodec0_clk_src",
1321 		.parent_data = gcc_xo_gpll0_gpll6_gpll4_data,
1322 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_gpll4_data),
1323 		.ops = &clk_rcg2_ops,
1324 	}
1325 };
1326 
1327 static const struct freq_tbl ftbl_vfe_clk_src[] = {
1328 	F(50000000, P_GPLL0, 16, 0, 0),
1329 	F(80000000, P_GPLL0, 10, 0, 0),
1330 	F(100000000, P_GPLL0, 8, 0, 0),
1331 	F(133330000, P_GPLL0, 6, 0, 0),
1332 	F(160000000, P_GPLL0, 5, 0, 0),
1333 	F(200000000, P_GPLL0, 4, 0, 0),
1334 	F(266670000, P_GPLL0, 3, 0, 0),
1335 	F(308570000, P_GPLL6, 3.5, 0, 0),
1336 	F(320000000, P_GPLL0, 2.5, 0, 0),
1337 	F(329140000, P_GPLL4, 3.5, 0, 0),
1338 	F(360000000, P_GPLL6, 3, 0, 0),
1339 	{ }
1340 };
1341 
1342 static const struct freq_tbl ftbl_vfe_clk_src_msm8937[] = {
1343 	F(50000000, P_GPLL0, 16, 0, 0),
1344 	F(80000000, P_GPLL0, 10, 0, 0),
1345 	F(100000000, P_GPLL0, 8, 0, 0),
1346 	F(133333333, P_GPLL0, 6, 0, 0),
1347 	F(160000000, P_GPLL0, 5, 0, 0),
1348 	F(177777778, P_GPLL0, 4.5, 0, 0),
1349 	F(200000000, P_GPLL0, 4, 0, 0),
1350 	F(266666667, P_GPLL0, 3, 0, 0),
1351 	F(308571428, P_GPLL6, 3.5, 0, 0),
1352 	F(320000000, P_GPLL0, 2.5, 0, 0),
1353 	F(360000000, P_GPLL6, 3, 0, 0),
1354 	F(400000000, P_GPLL0, 2, 0, 0),
1355 	F(432000000, P_GPLL6, 2.5, 0, 0),
1356 	{ }
1357 };
1358 
1359 static struct clk_rcg2 vfe0_clk_src = {
1360 	.cmd_rcgr = 0x58000,
1361 	.hid_width = 5,
1362 	.freq_tbl = ftbl_vfe_clk_src,
1363 	.parent_map = gcc_xo_gpll0_gpll6_gpll4_map,
1364 	.clkr.hw.init = &(struct clk_init_data) {
1365 		.name = "vfe0_clk_src",
1366 		.parent_data = gcc_xo_gpll0_gpll6_gpll4_data,
1367 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_gpll4_data),
1368 		.ops = &clk_rcg2_ops,
1369 	}
1370 };
1371 
1372 static struct clk_rcg2 vfe1_clk_src = {
1373 	.cmd_rcgr = 0x58054,
1374 	.hid_width = 5,
1375 	.freq_tbl = ftbl_vfe_clk_src,
1376 	.parent_map = gcc_xo_gpll0_gpll6_gpll4_map,
1377 	.clkr.hw.init = &(struct clk_init_data) {
1378 		.name = "vfe1_clk_src",
1379 		.parent_data = gcc_xo_gpll0_gpll6_gpll4_data,
1380 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_gpll4_data),
1381 		.ops = &clk_rcg2_ops,
1382 	}
1383 };
1384 
1385 static const struct freq_tbl ftbl_vsync_clk_src[] = {
1386 	F(19200000, P_XO, 1, 0, 0),
1387 	{ }
1388 };
1389 
1390 static struct clk_rcg2 vsync_clk_src = {
1391 	.cmd_rcgr = 0x4d02c,
1392 	.hid_width = 5,
1393 	.freq_tbl = ftbl_vsync_clk_src,
1394 	.parent_map = gcc_xo_gpll0_out_aux_map,
1395 	.clkr.hw.init = &(struct clk_init_data) {
1396 		.name = "vsync_clk_src",
1397 		.parent_data = gcc_xo_gpll0_data,
1398 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
1399 		.ops = &clk_rcg2_ops,
1400 	}
1401 };
1402 
1403 static struct clk_branch gcc_apss_tcu_clk = {
1404 	.halt_reg = 0x12018,
1405 	.halt_check = BRANCH_HALT_VOTED,
1406 	.clkr = {
1407 		.enable_reg = 0x4500c,
1408 		.enable_mask = BIT(1),
1409 		.hw.init = &(struct clk_init_data) {
1410 			.name = "gcc_apss_tcu_clk",
1411 			.ops = &clk_branch2_ops,
1412 		}
1413 	}
1414 };
1415 
1416 static struct clk_branch gcc_bimc_gfx_clk = {
1417 	.halt_reg = 0x59034,
1418 	.halt_check = BRANCH_HALT,
1419 	.clkr = {
1420 		.enable_reg = 0x59034,
1421 		.enable_mask = BIT(0),
1422 		.hw.init = &(struct clk_init_data) {
1423 			.name = "gcc_bimc_gfx_clk",
1424 			.ops = &clk_branch2_ops,
1425 		}
1426 	}
1427 };
1428 
1429 static struct clk_branch gcc_bimc_gpu_clk = {
1430 	.halt_reg = 0x59030,
1431 	.halt_check = BRANCH_HALT,
1432 	.clkr = {
1433 		.enable_reg = 0x59030,
1434 		.enable_mask = BIT(0),
1435 		.hw.init = &(struct clk_init_data) {
1436 			.name = "gcc_bimc_gpu_clk",
1437 			.ops = &clk_branch2_ops,
1438 		}
1439 	}
1440 };
1441 
1442 static struct clk_branch gcc_blsp1_ahb_clk = {
1443 	.halt_reg = 0x01008,
1444 	.halt_check = BRANCH_HALT_VOTED,
1445 	.clkr = {
1446 		.enable_reg = 0x45004,
1447 		.enable_mask = BIT(10),
1448 		.hw.init = &(struct clk_init_data) {
1449 			.name = "gcc_blsp1_ahb_clk",
1450 			.ops = &clk_branch2_ops,
1451 		}
1452 	}
1453 };
1454 
1455 static struct clk_branch gcc_blsp2_ahb_clk = {
1456 	.halt_reg = 0x0b008,
1457 	.halt_check = BRANCH_HALT_VOTED,
1458 	.clkr = {
1459 		.enable_reg = 0x45004,
1460 		.enable_mask = BIT(20),
1461 		.hw.init = &(struct clk_init_data) {
1462 			.name = "gcc_blsp2_ahb_clk",
1463 			.ops = &clk_branch2_ops,
1464 		}
1465 	}
1466 };
1467 
1468 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1469 	.halt_reg = 0x02008,
1470 	.halt_check = BRANCH_HALT,
1471 	.clkr = {
1472 		.enable_reg = 0x02008,
1473 		.enable_mask = BIT(0),
1474 		.hw.init = &(struct clk_init_data){
1475 			.name = "gcc_blsp1_qup1_i2c_apps_clk",
1476 			.parent_hws = (const struct clk_hw*[]){
1477 				&blsp1_qup1_i2c_apps_clk_src.clkr.hw,
1478 			},
1479 			.num_parents = 1,
1480 			.ops = &clk_branch2_ops,
1481 			.flags = CLK_SET_RATE_PARENT,
1482 		},
1483 	},
1484 };
1485 
1486 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1487 	.halt_reg = 0x03010,
1488 	.halt_check = BRANCH_HALT,
1489 	.clkr = {
1490 		.enable_reg = 0x03010,
1491 		.enable_mask = BIT(0),
1492 		.hw.init = &(struct clk_init_data) {
1493 			.name = "gcc_blsp1_qup2_i2c_apps_clk",
1494 			.parent_hws = (const struct clk_hw*[]){
1495 				&blsp1_qup2_i2c_apps_clk_src.clkr.hw,
1496 			},
1497 			.num_parents = 1,
1498 			.ops = &clk_branch2_ops,
1499 			.flags = CLK_SET_RATE_PARENT,
1500 		}
1501 	}
1502 };
1503 
1504 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1505 	.halt_reg = 0x04020,
1506 	.halt_check = BRANCH_HALT,
1507 	.clkr = {
1508 		.enable_reg = 0x04020,
1509 		.enable_mask = BIT(0),
1510 		.hw.init = &(struct clk_init_data) {
1511 			.name = "gcc_blsp1_qup3_i2c_apps_clk",
1512 			.parent_hws = (const struct clk_hw*[]){
1513 				&blsp1_qup3_i2c_apps_clk_src.clkr.hw,
1514 			},
1515 			.num_parents = 1,
1516 			.ops = &clk_branch2_ops,
1517 			.flags = CLK_SET_RATE_PARENT,
1518 		}
1519 	}
1520 };
1521 
1522 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1523 	.halt_reg = 0x05020,
1524 	.halt_check = BRANCH_HALT,
1525 	.clkr = {
1526 		.enable_reg = 0x05020,
1527 		.enable_mask = BIT(0),
1528 		.hw.init = &(struct clk_init_data) {
1529 			.name = "gcc_blsp1_qup4_i2c_apps_clk",
1530 			.parent_hws = (const struct clk_hw*[]){
1531 				&blsp1_qup4_i2c_apps_clk_src.clkr.hw,
1532 			},
1533 			.num_parents = 1,
1534 			.ops = &clk_branch2_ops,
1535 			.flags = CLK_SET_RATE_PARENT,
1536 		}
1537 	}
1538 };
1539 
1540 static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
1541 	.halt_reg = 0x0c008,
1542 	.halt_check = BRANCH_HALT,
1543 	.clkr = {
1544 		.enable_reg = 0x0c008,
1545 		.enable_mask = BIT(0),
1546 		.hw.init = &(struct clk_init_data) {
1547 			.name = "gcc_blsp2_qup1_i2c_apps_clk",
1548 			.parent_hws = (const struct clk_hw*[]){
1549 				&blsp2_qup1_i2c_apps_clk_src.clkr.hw,
1550 			},
1551 			.num_parents = 1,
1552 			.ops = &clk_branch2_ops,
1553 			.flags = CLK_SET_RATE_PARENT,
1554 		}
1555 	}
1556 };
1557 
1558 static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
1559 	.halt_reg = 0x0d010,
1560 	.halt_check = BRANCH_HALT,
1561 	.clkr = {
1562 		.enable_reg = 0x0d010,
1563 		.enable_mask = BIT(0),
1564 		.hw.init = &(struct clk_init_data) {
1565 			.name = "gcc_blsp2_qup2_i2c_apps_clk",
1566 			.parent_hws = (const struct clk_hw*[]){
1567 				&blsp2_qup2_i2c_apps_clk_src.clkr.hw,
1568 			},
1569 			.num_parents = 1,
1570 			.ops = &clk_branch2_ops,
1571 			.flags = CLK_SET_RATE_PARENT,
1572 		}
1573 	}
1574 };
1575 
1576 static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
1577 	.halt_reg = 0x0f020,
1578 	.halt_check = BRANCH_HALT,
1579 	.clkr = {
1580 		.enable_reg = 0x0f020,
1581 		.enable_mask = BIT(0),
1582 		.hw.init = &(struct clk_init_data) {
1583 			.name = "gcc_blsp2_qup3_i2c_apps_clk",
1584 			.parent_hws = (const struct clk_hw*[]){
1585 				&blsp2_qup3_i2c_apps_clk_src.clkr.hw,
1586 			},
1587 			.num_parents = 1,
1588 			.ops = &clk_branch2_ops,
1589 			.flags = CLK_SET_RATE_PARENT,
1590 		}
1591 	}
1592 };
1593 
1594 static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
1595 	.halt_reg = 0x18020,
1596 	.halt_check = BRANCH_HALT,
1597 	.clkr = {
1598 		.enable_reg = 0x18020,
1599 		.enable_mask = BIT(0),
1600 		.hw.init = &(struct clk_init_data){
1601 			.name = "gcc_blsp2_qup4_i2c_apps_clk",
1602 			.parent_hws = (const struct clk_hw*[]){
1603 				&blsp2_qup4_i2c_apps_clk_src.clkr.hw,
1604 			},
1605 			.num_parents = 1,
1606 			.ops = &clk_branch2_ops,
1607 			.flags = CLK_SET_RATE_PARENT,
1608 		},
1609 	},
1610 };
1611 
1612 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1613 	.halt_reg = 0x02004,
1614 	.halt_check = BRANCH_HALT,
1615 	.clkr = {
1616 		.enable_reg = 0x02004,
1617 		.enable_mask = BIT(0),
1618 		.hw.init = &(struct clk_init_data){
1619 			.name = "gcc_blsp1_qup1_spi_apps_clk",
1620 			.parent_hws = (const struct clk_hw*[]){
1621 				&blsp1_qup1_spi_apps_clk_src.clkr.hw,
1622 			},
1623 			.num_parents = 1,
1624 			.ops = &clk_branch2_ops,
1625 			.flags = CLK_SET_RATE_PARENT,
1626 		},
1627 	},
1628 };
1629 
1630 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1631 	.halt_reg = 0x0300c,
1632 	.halt_check = BRANCH_HALT,
1633 	.clkr = {
1634 		.enable_reg = 0x0300c,
1635 		.enable_mask = BIT(0),
1636 		.hw.init = &(struct clk_init_data) {
1637 			.name = "gcc_blsp1_qup2_spi_apps_clk",
1638 			.parent_hws = (const struct clk_hw*[]){
1639 				&blsp1_qup2_spi_apps_clk_src.clkr.hw,
1640 			},
1641 			.num_parents = 1,
1642 			.ops = &clk_branch2_ops,
1643 			.flags = CLK_SET_RATE_PARENT,
1644 		}
1645 	}
1646 };
1647 
1648 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1649 	.halt_reg = 0x0401c,
1650 	.halt_check = BRANCH_HALT,
1651 	.clkr = {
1652 		.enable_reg = 0x0401c,
1653 		.enable_mask = BIT(0),
1654 		.hw.init = &(struct clk_init_data) {
1655 			.name = "gcc_blsp1_qup3_spi_apps_clk",
1656 			.parent_hws = (const struct clk_hw*[]){
1657 				&blsp1_qup3_spi_apps_clk_src.clkr.hw,
1658 			},
1659 			.num_parents = 1,
1660 			.ops = &clk_branch2_ops,
1661 			.flags = CLK_SET_RATE_PARENT,
1662 		}
1663 	}
1664 };
1665 
1666 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1667 	.halt_reg = 0x0501c,
1668 	.halt_check = BRANCH_HALT,
1669 	.clkr = {
1670 		.enable_reg = 0x0501c,
1671 		.enable_mask = BIT(0),
1672 		.hw.init = &(struct clk_init_data) {
1673 			.name = "gcc_blsp1_qup4_spi_apps_clk",
1674 			.parent_hws = (const struct clk_hw*[]){
1675 				&blsp1_qup4_spi_apps_clk_src.clkr.hw,
1676 			},
1677 			.num_parents = 1,
1678 			.ops = &clk_branch2_ops,
1679 			.flags = CLK_SET_RATE_PARENT,
1680 		}
1681 	}
1682 };
1683 
1684 static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
1685 	.halt_reg = 0x0c004,
1686 	.halt_check = BRANCH_HALT,
1687 	.clkr = {
1688 		.enable_reg = 0x0c004,
1689 		.enable_mask = BIT(0),
1690 		.hw.init = &(struct clk_init_data) {
1691 			.name = "gcc_blsp2_qup1_spi_apps_clk",
1692 			.parent_hws = (const struct clk_hw*[]){
1693 				&blsp2_qup1_spi_apps_clk_src.clkr.hw,
1694 			},
1695 			.num_parents = 1,
1696 			.ops = &clk_branch2_ops,
1697 			.flags = CLK_SET_RATE_PARENT,
1698 		}
1699 	}
1700 };
1701 
1702 static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
1703 	.halt_reg = 0x0d00c,
1704 	.halt_check = BRANCH_HALT,
1705 	.clkr = {
1706 		.enable_reg = 0x0d00c,
1707 		.enable_mask = BIT(0),
1708 		.hw.init = &(struct clk_init_data) {
1709 			.name = "gcc_blsp2_qup2_spi_apps_clk",
1710 			.parent_hws = (const struct clk_hw*[]){
1711 				&blsp2_qup2_spi_apps_clk_src.clkr.hw,
1712 			},
1713 			.num_parents = 1,
1714 			.ops = &clk_branch2_ops,
1715 			.flags = CLK_SET_RATE_PARENT,
1716 		}
1717 	}
1718 };
1719 
1720 static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
1721 	.halt_reg = 0x0f01c,
1722 	.halt_check = BRANCH_HALT,
1723 	.clkr = {
1724 		.enable_reg = 0x0f01c,
1725 		.enable_mask = BIT(0),
1726 		.hw.init = &(struct clk_init_data) {
1727 			.name = "gcc_blsp2_qup3_spi_apps_clk",
1728 			.parent_hws = (const struct clk_hw*[]){
1729 				&blsp2_qup3_spi_apps_clk_src.clkr.hw,
1730 			},
1731 			.num_parents = 1,
1732 			.ops = &clk_branch2_ops,
1733 			.flags = CLK_SET_RATE_PARENT,
1734 		}
1735 	}
1736 };
1737 
1738 static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
1739 	.halt_reg = 0x1801c,
1740 	.halt_check = BRANCH_HALT,
1741 	.clkr = {
1742 		.enable_reg = 0x1801c,
1743 		.enable_mask = BIT(0),
1744 		.hw.init = &(struct clk_init_data){
1745 			.name = "gcc_blsp2_qup4_spi_apps_clk",
1746 			.parent_hws = (const struct clk_hw*[]){
1747 				&blsp2_qup4_spi_apps_clk_src.clkr.hw,
1748 			},
1749 			.num_parents = 1,
1750 			.ops = &clk_branch2_ops,
1751 			.flags = CLK_SET_RATE_PARENT,
1752 		},
1753 	},
1754 };
1755 
1756 static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1757 	.halt_reg = 0x0203c,
1758 	.halt_check = BRANCH_HALT,
1759 	.clkr = {
1760 		.enable_reg = 0x0203c,
1761 		.enable_mask = BIT(0),
1762 		.hw.init = &(struct clk_init_data) {
1763 			.name = "gcc_blsp1_uart1_apps_clk",
1764 			.parent_hws = (const struct clk_hw*[]){
1765 				&blsp1_uart1_apps_clk_src.clkr.hw,
1766 			},
1767 			.num_parents = 1,
1768 			.ops = &clk_branch2_ops,
1769 			.flags = CLK_SET_RATE_PARENT,
1770 		}
1771 	}
1772 };
1773 
1774 static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1775 	.halt_reg = 0x0302c,
1776 	.halt_check = BRANCH_HALT,
1777 	.clkr = {
1778 		.enable_reg = 0x0302c,
1779 		.enable_mask = BIT(0),
1780 		.hw.init = &(struct clk_init_data) {
1781 			.name = "gcc_blsp1_uart2_apps_clk",
1782 			.parent_hws = (const struct clk_hw*[]){
1783 				&blsp1_uart2_apps_clk_src.clkr.hw,
1784 			},
1785 			.num_parents = 1,
1786 			.ops = &clk_branch2_ops,
1787 			.flags = CLK_SET_RATE_PARENT,
1788 		}
1789 	}
1790 };
1791 
1792 static struct clk_branch gcc_blsp2_uart1_apps_clk = {
1793 	.halt_reg = 0x0c03c,
1794 	.halt_check = BRANCH_HALT,
1795 	.clkr = {
1796 		.enable_reg = 0x0c03c,
1797 		.enable_mask = BIT(0),
1798 		.hw.init = &(struct clk_init_data) {
1799 			.name = "gcc_blsp2_uart1_apps_clk",
1800 			.parent_hws = (const struct clk_hw*[]){
1801 				&blsp2_uart1_apps_clk_src.clkr.hw,
1802 			},
1803 			.num_parents = 1,
1804 			.ops = &clk_branch2_ops,
1805 			.flags = CLK_SET_RATE_PARENT,
1806 		}
1807 	}
1808 };
1809 
1810 static struct clk_branch gcc_blsp2_uart2_apps_clk = {
1811 	.halt_reg = 0x0d02c,
1812 	.halt_check = BRANCH_HALT,
1813 	.clkr = {
1814 		.enable_reg = 0x0d02c,
1815 		.enable_mask = BIT(0),
1816 		.hw.init = &(struct clk_init_data) {
1817 			.name = "gcc_blsp2_uart2_apps_clk",
1818 			.parent_hws = (const struct clk_hw*[]){
1819 				&blsp2_uart2_apps_clk_src.clkr.hw,
1820 			},
1821 			.num_parents = 1,
1822 			.ops = &clk_branch2_ops,
1823 			.flags = CLK_SET_RATE_PARENT,
1824 		}
1825 	}
1826 };
1827 
1828 static struct clk_branch gcc_boot_rom_ahb_clk = {
1829 	.halt_reg = 0x1300c,
1830 	.halt_check = BRANCH_HALT_VOTED,
1831 	.clkr = {
1832 		.enable_reg = 0x45004,
1833 		.enable_mask = BIT(7),
1834 		.hw.init = &(struct clk_init_data) {
1835 			.name = "gcc_boot_rom_ahb_clk",
1836 			.ops = &clk_branch2_ops,
1837 		}
1838 	}
1839 };
1840 
1841 static struct clk_branch gcc_camss_ahb_clk = {
1842 	.halt_reg = 0x56004,
1843 	.halt_check = BRANCH_HALT,
1844 	.clkr = {
1845 		.enable_reg = 0x56004,
1846 		.enable_mask = BIT(0),
1847 		.hw.init = &(struct clk_init_data) {
1848 			.name = "gcc_camss_ahb_clk",
1849 			.ops = &clk_branch2_ops,
1850 		}
1851 	}
1852 };
1853 
1854 static struct clk_branch gcc_camss_cci_ahb_clk = {
1855 	.halt_reg = 0x5101c,
1856 	.halt_check = BRANCH_HALT,
1857 	.clkr = {
1858 		.enable_reg = 0x5101c,
1859 		.enable_mask = BIT(0),
1860 		.hw.init = &(struct clk_init_data) {
1861 			.name = "gcc_camss_cci_ahb_clk",
1862 			.parent_hws = (const struct clk_hw*[]){
1863 				&camss_top_ahb_clk_src.clkr.hw,
1864 			},
1865 			.num_parents = 1,
1866 			.ops = &clk_branch2_ops,
1867 			.flags = CLK_SET_RATE_PARENT,
1868 		}
1869 	}
1870 };
1871 
1872 static struct clk_branch gcc_camss_cci_clk = {
1873 	.halt_reg = 0x51018,
1874 	.halt_check = BRANCH_HALT,
1875 	.clkr = {
1876 		.enable_reg = 0x51018,
1877 		.enable_mask = BIT(0),
1878 		.hw.init = &(struct clk_init_data) {
1879 			.name = "gcc_camss_cci_clk",
1880 			.parent_hws = (const struct clk_hw*[]){
1881 				&cci_clk_src.clkr.hw,
1882 			},
1883 			.num_parents = 1,
1884 			.ops = &clk_branch2_ops,
1885 			.flags = CLK_SET_RATE_PARENT,
1886 		}
1887 	}
1888 };
1889 
1890 static struct clk_branch gcc_camss_cpp_ahb_clk = {
1891 	.halt_reg = 0x58040,
1892 	.halt_check = BRANCH_HALT,
1893 	.clkr = {
1894 		.enable_reg = 0x58040,
1895 		.enable_mask = BIT(0),
1896 		.hw.init = &(struct clk_init_data) {
1897 			.name = "gcc_camss_cpp_ahb_clk",
1898 			.parent_hws = (const struct clk_hw*[]){
1899 				&camss_top_ahb_clk_src.clkr.hw,
1900 			},
1901 			.num_parents = 1,
1902 			.ops = &clk_branch2_ops,
1903 			.flags = CLK_SET_RATE_PARENT,
1904 		}
1905 	}
1906 };
1907 
1908 static struct clk_branch gcc_camss_cpp_clk = {
1909 	.halt_reg = 0x5803c,
1910 	.halt_check = BRANCH_HALT,
1911 	.clkr = {
1912 		.enable_reg = 0x5803c,
1913 		.enable_mask = BIT(0),
1914 		.hw.init = &(struct clk_init_data) {
1915 			.name = "gcc_camss_cpp_clk",
1916 			.parent_hws = (const struct clk_hw*[]){
1917 				&cpp_clk_src.clkr.hw,
1918 			},
1919 			.num_parents = 1,
1920 			.ops = &clk_branch2_ops,
1921 			.flags = CLK_SET_RATE_PARENT,
1922 		}
1923 	}
1924 };
1925 
1926 static struct clk_branch gcc_camss_csi0_ahb_clk = {
1927 	.halt_reg = 0x4e040,
1928 	.halt_check = BRANCH_HALT,
1929 	.clkr = {
1930 		.enable_reg = 0x4e040,
1931 		.enable_mask = BIT(0),
1932 		.hw.init = &(struct clk_init_data) {
1933 			.name = "gcc_camss_csi0_ahb_clk",
1934 			.parent_hws = (const struct clk_hw*[]){
1935 				&camss_top_ahb_clk_src.clkr.hw,
1936 			},
1937 			.num_parents = 1,
1938 			.ops = &clk_branch2_ops,
1939 			.flags = CLK_SET_RATE_PARENT,
1940 		}
1941 	}
1942 };
1943 
1944 static struct clk_branch gcc_camss_csi1_ahb_clk = {
1945 	.halt_reg = 0x4f040,
1946 	.halt_check = BRANCH_HALT,
1947 	.clkr = {
1948 		.enable_reg = 0x4f040,
1949 		.enable_mask = BIT(0),
1950 		.hw.init = &(struct clk_init_data) {
1951 			.name = "gcc_camss_csi1_ahb_clk",
1952 			.parent_hws = (const struct clk_hw*[]){
1953 				&camss_top_ahb_clk_src.clkr.hw,
1954 			},
1955 			.num_parents = 1,
1956 			.ops = &clk_branch2_ops,
1957 			.flags = CLK_SET_RATE_PARENT,
1958 		}
1959 	}
1960 };
1961 
1962 static struct clk_branch gcc_camss_csi2_ahb_clk = {
1963 	.halt_reg = 0x3c040,
1964 	.halt_check = BRANCH_HALT,
1965 	.clkr = {
1966 		.enable_reg = 0x3c040,
1967 		.enable_mask = BIT(0),
1968 		.hw.init = &(struct clk_init_data) {
1969 			.name = "gcc_camss_csi2_ahb_clk",
1970 			.parent_hws = (const struct clk_hw*[]){
1971 				&camss_top_ahb_clk_src.clkr.hw,
1972 			},
1973 			.num_parents = 1,
1974 			.ops = &clk_branch2_ops,
1975 			.flags = CLK_SET_RATE_PARENT,
1976 		}
1977 	}
1978 };
1979 
1980 static struct clk_branch gcc_camss_csi0_clk = {
1981 	.halt_reg = 0x4e03c,
1982 	.halt_check = BRANCH_HALT,
1983 	.clkr = {
1984 		.enable_reg = 0x4e03c,
1985 		.enable_mask = BIT(0),
1986 		.hw.init = &(struct clk_init_data) {
1987 			.name = "gcc_camss_csi0_clk",
1988 			.parent_hws = (const struct clk_hw*[]){
1989 				&csi0_clk_src.clkr.hw,
1990 			},
1991 			.num_parents = 1,
1992 			.ops = &clk_branch2_ops,
1993 			.flags = CLK_SET_RATE_PARENT,
1994 		}
1995 	}
1996 };
1997 
1998 static struct clk_branch gcc_camss_csi1_clk = {
1999 	.halt_reg = 0x4f03c,
2000 	.halt_check = BRANCH_HALT,
2001 	.clkr = {
2002 		.enable_reg = 0x4f03c,
2003 		.enable_mask = BIT(0),
2004 		.hw.init = &(struct clk_init_data) {
2005 			.name = "gcc_camss_csi1_clk",
2006 			.parent_hws = (const struct clk_hw*[]){
2007 				&csi1_clk_src.clkr.hw,
2008 			},
2009 			.num_parents = 1,
2010 			.ops = &clk_branch2_ops,
2011 			.flags = CLK_SET_RATE_PARENT,
2012 		}
2013 	}
2014 };
2015 
2016 static struct clk_branch gcc_camss_csi2_clk = {
2017 	.halt_reg = 0x3c03c,
2018 	.halt_check = BRANCH_HALT,
2019 	.clkr = {
2020 		.enable_reg = 0x3c03c,
2021 		.enable_mask = BIT(0),
2022 		.hw.init = &(struct clk_init_data) {
2023 			.name = "gcc_camss_csi2_clk",
2024 			.parent_hws = (const struct clk_hw*[]){
2025 				&csi2_clk_src.clkr.hw,
2026 			},
2027 			.num_parents = 1,
2028 			.ops = &clk_branch2_ops,
2029 			.flags = CLK_SET_RATE_PARENT,
2030 		}
2031 	}
2032 };
2033 
2034 static struct clk_branch gcc_camss_csi0phy_clk = {
2035 	.halt_reg = 0x4e048,
2036 	.halt_check = BRANCH_HALT,
2037 	.clkr = {
2038 		.enable_reg = 0x4e048,
2039 		.enable_mask = BIT(0),
2040 		.hw.init = &(struct clk_init_data) {
2041 			.name = "gcc_camss_csi0phy_clk",
2042 			.parent_hws = (const struct clk_hw*[]){
2043 				&csi0_clk_src.clkr.hw,
2044 			},
2045 			.num_parents = 1,
2046 			.ops = &clk_branch2_ops,
2047 			.flags = CLK_SET_RATE_PARENT,
2048 		}
2049 	}
2050 };
2051 
2052 static struct clk_branch gcc_camss_csi1phy_clk = {
2053 	.halt_reg = 0x4f048,
2054 	.halt_check = BRANCH_HALT,
2055 	.clkr = {
2056 		.enable_reg = 0x4f048,
2057 		.enable_mask = BIT(0),
2058 		.hw.init = &(struct clk_init_data) {
2059 			.name = "gcc_camss_csi1phy_clk",
2060 			.parent_hws = (const struct clk_hw*[]){
2061 				&csi1_clk_src.clkr.hw,
2062 			},
2063 			.num_parents = 1,
2064 			.ops = &clk_branch2_ops,
2065 			.flags = CLK_SET_RATE_PARENT,
2066 		}
2067 	}
2068 };
2069 
2070 static struct clk_branch gcc_camss_csi2phy_clk = {
2071 	.halt_reg = 0x3c048,
2072 	.halt_check = BRANCH_HALT,
2073 	.clkr = {
2074 		.enable_reg = 0x3c048,
2075 		.enable_mask = BIT(0),
2076 		.hw.init = &(struct clk_init_data) {
2077 			.name = "gcc_camss_csi2phy_clk",
2078 			.parent_hws = (const struct clk_hw*[]){
2079 				&csi2_clk_src.clkr.hw,
2080 			},
2081 			.num_parents = 1,
2082 			.ops = &clk_branch2_ops,
2083 			.flags = CLK_SET_RATE_PARENT,
2084 		}
2085 	}
2086 };
2087 
2088 static struct clk_branch gcc_camss_csi0phytimer_clk = {
2089 	.halt_reg = 0x4e01c,
2090 	.halt_check = BRANCH_HALT,
2091 	.clkr = {
2092 		.enable_reg = 0x4e01c,
2093 		.enable_mask = BIT(0),
2094 		.hw.init = &(struct clk_init_data) {
2095 			.name = "gcc_camss_csi0phytimer_clk",
2096 			.parent_hws = (const struct clk_hw*[]){
2097 				&csi0phytimer_clk_src.clkr.hw,
2098 			},
2099 			.num_parents = 1,
2100 			.ops = &clk_branch2_ops,
2101 			.flags = CLK_SET_RATE_PARENT,
2102 		}
2103 	}
2104 };
2105 
2106 static struct clk_branch gcc_camss_csi1phytimer_clk = {
2107 	.halt_reg = 0x4f01c,
2108 	.halt_check = BRANCH_HALT,
2109 	.clkr = {
2110 		.enable_reg = 0x4f01c,
2111 		.enable_mask = BIT(0),
2112 		.hw.init = &(struct clk_init_data) {
2113 			.name = "gcc_camss_csi1phytimer_clk",
2114 			.parent_hws = (const struct clk_hw*[]){
2115 				&csi1phytimer_clk_src.clkr.hw,
2116 			},
2117 			.num_parents = 1,
2118 			.ops = &clk_branch2_ops,
2119 			.flags = CLK_SET_RATE_PARENT,
2120 		}
2121 	}
2122 };
2123 
2124 static struct clk_branch gcc_camss_csi0pix_clk = {
2125 	.halt_reg = 0x4e058,
2126 	.halt_check = BRANCH_HALT,
2127 	.clkr = {
2128 		.enable_reg = 0x4e058,
2129 		.enable_mask = BIT(0),
2130 		.hw.init = &(struct clk_init_data) {
2131 			.name = "gcc_camss_csi0pix_clk",
2132 			.parent_hws = (const struct clk_hw*[]){
2133 				&csi0_clk_src.clkr.hw,
2134 			},
2135 			.num_parents = 1,
2136 			.ops = &clk_branch2_ops,
2137 			.flags = CLK_SET_RATE_PARENT,
2138 		}
2139 	}
2140 };
2141 
2142 static struct clk_branch gcc_camss_csi1pix_clk = {
2143 	.halt_reg = 0x4f058,
2144 	.halt_check = BRANCH_HALT,
2145 	.clkr = {
2146 		.enable_reg = 0x4f058,
2147 		.enable_mask = BIT(0),
2148 		.hw.init = &(struct clk_init_data) {
2149 			.name = "gcc_camss_csi1pix_clk",
2150 			.parent_hws = (const struct clk_hw*[]){
2151 				&csi1_clk_src.clkr.hw,
2152 			},
2153 			.num_parents = 1,
2154 			.ops = &clk_branch2_ops,
2155 			.flags = CLK_SET_RATE_PARENT,
2156 		}
2157 	}
2158 };
2159 
2160 static struct clk_branch gcc_camss_csi2pix_clk = {
2161 	.halt_reg = 0x3c058,
2162 	.halt_check = BRANCH_HALT,
2163 	.clkr = {
2164 		.enable_reg = 0x3c058,
2165 		.enable_mask = BIT(0),
2166 		.hw.init = &(struct clk_init_data) {
2167 			.name = "gcc_camss_csi2pix_clk",
2168 			.parent_hws = (const struct clk_hw*[]){
2169 				&csi2_clk_src.clkr.hw,
2170 			},
2171 			.num_parents = 1,
2172 			.ops = &clk_branch2_ops,
2173 			.flags = CLK_SET_RATE_PARENT,
2174 		}
2175 	}
2176 };
2177 
2178 static struct clk_branch gcc_camss_csi0rdi_clk = {
2179 	.halt_reg = 0x4e050,
2180 	.halt_check = BRANCH_HALT,
2181 	.clkr = {
2182 		.enable_reg = 0x4e050,
2183 		.enable_mask = BIT(0),
2184 		.hw.init = &(struct clk_init_data) {
2185 			.name = "gcc_camss_csi0rdi_clk",
2186 			.parent_hws = (const struct clk_hw*[]){
2187 				&csi0_clk_src.clkr.hw,
2188 			},
2189 			.num_parents = 1,
2190 			.ops = &clk_branch2_ops,
2191 			.flags = CLK_SET_RATE_PARENT,
2192 		}
2193 	}
2194 };
2195 
2196 static struct clk_branch gcc_camss_csi1rdi_clk = {
2197 	.halt_reg = 0x4f050,
2198 	.halt_check = BRANCH_HALT,
2199 	.clkr = {
2200 		.enable_reg = 0x4f050,
2201 		.enable_mask = BIT(0),
2202 		.hw.init = &(struct clk_init_data) {
2203 			.name = "gcc_camss_csi1rdi_clk",
2204 			.parent_hws = (const struct clk_hw*[]){
2205 				&csi1_clk_src.clkr.hw,
2206 			},
2207 			.num_parents = 1,
2208 			.ops = &clk_branch2_ops,
2209 			.flags = CLK_SET_RATE_PARENT,
2210 		}
2211 	}
2212 };
2213 
2214 static struct clk_branch gcc_camss_csi2rdi_clk = {
2215 	.halt_reg = 0x3c050,
2216 	.halt_check = BRANCH_HALT,
2217 	.clkr = {
2218 		.enable_reg = 0x3c050,
2219 		.enable_mask = BIT(0),
2220 		.hw.init = &(struct clk_init_data) {
2221 			.name = "gcc_camss_csi2rdi_clk",
2222 			.parent_hws = (const struct clk_hw*[]){
2223 				&csi2_clk_src.clkr.hw,
2224 			},
2225 			.num_parents = 1,
2226 			.ops = &clk_branch2_ops,
2227 			.flags = CLK_SET_RATE_PARENT,
2228 		}
2229 	}
2230 };
2231 
2232 static struct clk_branch gcc_camss_csi_vfe0_clk = {
2233 	.halt_reg = 0x58050,
2234 	.halt_check = BRANCH_HALT,
2235 	.clkr = {
2236 		.enable_reg = 0x58050,
2237 		.enable_mask = BIT(0),
2238 		.hw.init = &(struct clk_init_data) {
2239 			.name = "gcc_camss_csi_vfe0_clk",
2240 			.parent_hws = (const struct clk_hw*[]){
2241 				&vfe0_clk_src.clkr.hw,
2242 			},
2243 			.num_parents = 1,
2244 			.ops = &clk_branch2_ops,
2245 			.flags = CLK_SET_RATE_PARENT,
2246 		}
2247 	}
2248 };
2249 
2250 static struct clk_branch gcc_camss_csi_vfe1_clk = {
2251 	.halt_reg = 0x58074,
2252 	.halt_check = BRANCH_HALT,
2253 	.clkr = {
2254 		.enable_reg = 0x58074,
2255 		.enable_mask = BIT(0),
2256 		.hw.init = &(struct clk_init_data) {
2257 			.name = "gcc_camss_csi_vfe1_clk",
2258 			.parent_hws = (const struct clk_hw*[]){
2259 				&vfe1_clk_src.clkr.hw,
2260 			},
2261 			.num_parents = 1,
2262 			.ops = &clk_branch2_ops,
2263 			.flags = CLK_SET_RATE_PARENT,
2264 		}
2265 	}
2266 };
2267 
2268 static struct clk_branch gcc_camss_gp0_clk = {
2269 	.halt_reg = 0x54018,
2270 	.halt_check = BRANCH_HALT,
2271 	.clkr = {
2272 		.enable_reg = 0x54018,
2273 		.enable_mask = BIT(0),
2274 		.hw.init = &(struct clk_init_data) {
2275 			.name = "gcc_camss_gp0_clk",
2276 			.parent_hws = (const struct clk_hw*[]){
2277 				&camss_gp0_clk_src.clkr.hw,
2278 			},
2279 			.num_parents = 1,
2280 			.ops = &clk_branch2_ops,
2281 			.flags = CLK_SET_RATE_PARENT,
2282 		}
2283 	}
2284 };
2285 
2286 static struct clk_branch gcc_camss_gp1_clk = {
2287 	.halt_reg = 0x55018,
2288 	.halt_check = BRANCH_HALT,
2289 	.clkr = {
2290 		.enable_reg = 0x55018,
2291 		.enable_mask = BIT(0),
2292 		.hw.init = &(struct clk_init_data) {
2293 			.name = "gcc_camss_gp1_clk",
2294 			.parent_hws = (const struct clk_hw*[]){
2295 				&camss_gp1_clk_src.clkr.hw,
2296 			},
2297 			.num_parents = 1,
2298 			.ops = &clk_branch2_ops,
2299 			.flags = CLK_SET_RATE_PARENT,
2300 		}
2301 	}
2302 };
2303 
2304 static struct clk_branch gcc_camss_ispif_ahb_clk = {
2305 	.halt_reg = 0x50004,
2306 	.halt_check = BRANCH_HALT,
2307 	.clkr = {
2308 		.enable_reg = 0x50004,
2309 		.enable_mask = BIT(0),
2310 		.hw.init = &(struct clk_init_data) {
2311 			.name = "gcc_camss_ispif_ahb_clk",
2312 			.parent_hws = (const struct clk_hw*[]){
2313 				&camss_top_ahb_clk_src.clkr.hw,
2314 			},
2315 			.num_parents = 1,
2316 			.ops = &clk_branch2_ops,
2317 			.flags = CLK_SET_RATE_PARENT,
2318 		}
2319 	}
2320 };
2321 
2322 static struct clk_branch gcc_camss_jpeg0_clk = {
2323 	.halt_reg = 0x57020,
2324 	.halt_check = BRANCH_HALT,
2325 	.clkr = {
2326 		.enable_reg = 0x57020,
2327 		.enable_mask = BIT(0),
2328 		.hw.init = &(struct clk_init_data) {
2329 			.name = "gcc_camss_jpeg0_clk",
2330 			.parent_hws = (const struct clk_hw*[]){
2331 				&jpeg0_clk_src.clkr.hw,
2332 			},
2333 			.num_parents = 1,
2334 			.ops = &clk_branch2_ops,
2335 			.flags = CLK_SET_RATE_PARENT,
2336 		}
2337 	}
2338 };
2339 
2340 static struct clk_branch gcc_camss_jpeg_ahb_clk = {
2341 	.halt_reg = 0x57024,
2342 	.halt_check = BRANCH_HALT,
2343 	.clkr = {
2344 		.enable_reg = 0x57024,
2345 		.enable_mask = BIT(0),
2346 		.hw.init = &(struct clk_init_data) {
2347 			.name = "gcc_camss_jpeg_ahb_clk",
2348 			.parent_hws = (const struct clk_hw*[]){
2349 				&camss_top_ahb_clk_src.clkr.hw,
2350 			},
2351 			.num_parents = 1,
2352 			.ops = &clk_branch2_ops,
2353 			.flags = CLK_SET_RATE_PARENT,
2354 		}
2355 	}
2356 };
2357 
2358 static struct clk_branch gcc_camss_jpeg_axi_clk = {
2359 	.halt_reg = 0x57028,
2360 	.halt_check = BRANCH_HALT,
2361 	.clkr = {
2362 		.enable_reg = 0x57028,
2363 		.enable_mask = BIT(0),
2364 		.hw.init = &(struct clk_init_data) {
2365 			.name = "gcc_camss_jpeg_axi_clk",
2366 			.ops = &clk_branch2_ops,
2367 		}
2368 	}
2369 };
2370 
2371 static struct clk_branch gcc_camss_mclk0_clk = {
2372 	.halt_reg = 0x52018,
2373 	.halt_check = BRANCH_HALT,
2374 	.clkr = {
2375 		.enable_reg = 0x52018,
2376 		.enable_mask = BIT(0),
2377 		.hw.init = &(struct clk_init_data) {
2378 			.name = "gcc_camss_mclk0_clk",
2379 			.parent_hws = (const struct clk_hw*[]){
2380 				&mclk0_clk_src.clkr.hw,
2381 			},
2382 			.num_parents = 1,
2383 			.ops = &clk_branch2_ops,
2384 			.flags = CLK_SET_RATE_PARENT,
2385 		}
2386 	}
2387 };
2388 
2389 static struct clk_branch gcc_camss_mclk1_clk = {
2390 	.halt_reg = 0x53018,
2391 	.halt_check = BRANCH_HALT,
2392 	.clkr = {
2393 		.enable_reg = 0x53018,
2394 		.enable_mask = BIT(0),
2395 		.hw.init = &(struct clk_init_data) {
2396 			.name = "gcc_camss_mclk1_clk",
2397 			.parent_hws = (const struct clk_hw*[]){
2398 				&mclk1_clk_src.clkr.hw,
2399 			},
2400 			.num_parents = 1,
2401 			.ops = &clk_branch2_ops,
2402 			.flags = CLK_SET_RATE_PARENT,
2403 		}
2404 	}
2405 };
2406 
2407 static struct clk_branch gcc_camss_mclk2_clk = {
2408 	.halt_reg = 0x5c018,
2409 	.halt_check = BRANCH_HALT,
2410 	.clkr = {
2411 		.enable_reg = 0x5c018,
2412 		.enable_mask = BIT(0),
2413 		.hw.init = &(struct clk_init_data) {
2414 			.name = "gcc_camss_mclk2_clk",
2415 			.parent_hws = (const struct clk_hw*[]){
2416 				&mclk2_clk_src.clkr.hw,
2417 			},
2418 			.num_parents = 1,
2419 			.ops = &clk_branch2_ops,
2420 			.flags = CLK_SET_RATE_PARENT,
2421 		}
2422 	}
2423 };
2424 
2425 static struct clk_branch gcc_camss_micro_ahb_clk = {
2426 	.halt_reg = 0x5600c,
2427 	.halt_check = BRANCH_HALT,
2428 	.clkr = {
2429 		.enable_reg = 0x5600c,
2430 		.enable_mask = BIT(0),
2431 		.hw.init = &(struct clk_init_data) {
2432 			.name = "gcc_camss_micro_ahb_clk",
2433 			.parent_hws = (const struct clk_hw*[]){
2434 				&camss_top_ahb_clk_src.clkr.hw,
2435 			},
2436 			.num_parents = 1,
2437 			.ops = &clk_branch2_ops,
2438 			.flags = CLK_SET_RATE_PARENT,
2439 		}
2440 	}
2441 };
2442 
2443 static struct clk_branch gcc_camss_top_ahb_clk = {
2444 	.halt_reg = 0x5a014,
2445 	.halt_check = BRANCH_HALT,
2446 	.clkr = {
2447 		.enable_reg = 0x5a014,
2448 		.enable_mask = BIT(0),
2449 		.hw.init = &(struct clk_init_data) {
2450 			.name = "gcc_camss_top_ahb_clk",
2451 			.parent_hws = (const struct clk_hw*[]){
2452 				&camss_top_ahb_clk_src.clkr.hw,
2453 			},
2454 			.num_parents = 1,
2455 			.ops = &clk_branch2_ops,
2456 			.flags = CLK_SET_RATE_PARENT,
2457 		}
2458 	}
2459 };
2460 
2461 static struct clk_branch gcc_camss_vfe0_ahb_clk = {
2462 	.halt_reg = 0x58044,
2463 	.halt_check = BRANCH_HALT,
2464 	.clkr = {
2465 		.enable_reg = 0x58044,
2466 		.enable_mask = BIT(0),
2467 		.hw.init = &(struct clk_init_data) {
2468 			.name = "gcc_camss_vfe0_ahb_clk",
2469 			.parent_hws = (const struct clk_hw*[]){
2470 				&camss_top_ahb_clk_src.clkr.hw,
2471 			},
2472 			.num_parents = 1,
2473 			.ops = &clk_branch2_ops,
2474 			.flags = CLK_SET_RATE_PARENT,
2475 		}
2476 	}
2477 };
2478 
2479 static struct clk_branch gcc_camss_vfe0_axi_clk = {
2480 	.halt_reg = 0x58048,
2481 	.halt_check = BRANCH_HALT,
2482 	.clkr = {
2483 		.enable_reg = 0x58048,
2484 		.enable_mask = BIT(0),
2485 		.hw.init = &(struct clk_init_data) {
2486 			.name = "gcc_camss_vfe0_axi_clk",
2487 			.ops = &clk_branch2_ops,
2488 		}
2489 	}
2490 };
2491 
2492 static struct clk_branch gcc_camss_vfe0_clk = {
2493 	.halt_reg = 0x58038,
2494 	.halt_check = BRANCH_HALT,
2495 	.clkr = {
2496 		.enable_reg = 0x58038,
2497 		.enable_mask = BIT(0),
2498 		.hw.init = &(struct clk_init_data) {
2499 			.name = "gcc_camss_vfe0_clk",
2500 			.parent_hws = (const struct clk_hw*[]){
2501 				&vfe0_clk_src.clkr.hw,
2502 			},
2503 			.num_parents = 1,
2504 			.ops = &clk_branch2_ops,
2505 			.flags = CLK_SET_RATE_PARENT,
2506 		}
2507 	}
2508 };
2509 
2510 static struct clk_branch gcc_camss_vfe1_ahb_clk = {
2511 	.halt_reg = 0x58060,
2512 	.halt_check = BRANCH_HALT,
2513 	.clkr = {
2514 		.enable_reg = 0x58060,
2515 		.enable_mask = BIT(0),
2516 		.hw.init = &(struct clk_init_data) {
2517 			.name = "gcc_camss_vfe1_ahb_clk",
2518 			.parent_hws = (const struct clk_hw*[]){
2519 				&camss_top_ahb_clk_src.clkr.hw,
2520 			},
2521 			.num_parents = 1,
2522 			.ops = &clk_branch2_ops,
2523 			.flags = CLK_SET_RATE_PARENT,
2524 		}
2525 	}
2526 };
2527 
2528 static struct clk_branch gcc_camss_vfe1_axi_clk = {
2529 	.halt_reg = 0x58068,
2530 	.halt_check = BRANCH_HALT,
2531 	.clkr = {
2532 		.enable_reg = 0x58068,
2533 		.enable_mask = BIT(0),
2534 		.hw.init = &(struct clk_init_data) {
2535 			.name = "gcc_camss_vfe1_axi_clk",
2536 			.ops = &clk_branch2_ops,
2537 		}
2538 	}
2539 };
2540 
2541 static struct clk_branch gcc_camss_vfe1_clk = {
2542 	.halt_reg = 0x5805c,
2543 	.halt_check = BRANCH_HALT,
2544 	.clkr = {
2545 		.enable_reg = 0x5805c,
2546 		.enable_mask = BIT(0),
2547 		.hw.init = &(struct clk_init_data) {
2548 			.name = "gcc_camss_vfe1_clk",
2549 			.parent_hws = (const struct clk_hw*[]){
2550 				&vfe1_clk_src.clkr.hw,
2551 			},
2552 			.num_parents = 1,
2553 			.ops = &clk_branch2_ops,
2554 			.flags = CLK_SET_RATE_PARENT,
2555 		}
2556 	}
2557 };
2558 
2559 static struct clk_branch gcc_cpp_tbu_clk = {
2560 	.halt_reg = 0x12040,
2561 	.halt_check = BRANCH_HALT_VOTED,
2562 	.clkr = {
2563 		.enable_reg = 0x4500c,
2564 		.enable_mask = BIT(14),
2565 		.hw.init = &(struct clk_init_data) {
2566 			.name = "gcc_cpp_tbu_clk",
2567 			.ops = &clk_branch2_ops,
2568 		}
2569 	}
2570 };
2571 
2572 static struct clk_branch gcc_crypto_ahb_clk = {
2573 	.halt_reg = 0x16024,
2574 	.halt_check = BRANCH_HALT_VOTED,
2575 	.clkr = {
2576 		.enable_reg = 0x45004,
2577 		.enable_mask = BIT(0),
2578 		.hw.init = &(struct clk_init_data) {
2579 			.name = "gcc_crypto_ahb_clk",
2580 			.ops = &clk_branch2_ops,
2581 		}
2582 	}
2583 };
2584 
2585 static struct clk_branch gcc_crypto_axi_clk = {
2586 	.halt_reg = 0x16020,
2587 	.halt_check = BRANCH_HALT_VOTED,
2588 	.clkr = {
2589 		.enable_reg = 0x45004,
2590 		.enable_mask = BIT(1),
2591 		.hw.init = &(struct clk_init_data) {
2592 			.name = "gcc_crypto_axi_clk",
2593 			.ops = &clk_branch2_ops,
2594 		}
2595 	}
2596 };
2597 
2598 static struct clk_branch gcc_crypto_clk = {
2599 	.halt_reg = 0x1601c,
2600 	.halt_check = BRANCH_HALT_VOTED,
2601 	.clkr = {
2602 		.enable_reg = 0x45004,
2603 		.enable_mask = BIT(2),
2604 		.hw.init = &(struct clk_init_data) {
2605 			.name = "gcc_crypto_clk",
2606 			.parent_hws = (const struct clk_hw*[]){
2607 				&crypto_clk_src.clkr.hw,
2608 			},
2609 			.num_parents = 1,
2610 			.ops = &clk_branch2_ops,
2611 			.flags = CLK_SET_RATE_PARENT,
2612 		}
2613 	}
2614 };
2615 
2616 static struct clk_branch gcc_dcc_clk = {
2617 	.halt_reg = 0x77004,
2618 	.halt_check = BRANCH_HALT,
2619 	.clkr = {
2620 		.enable_reg = 0x77004,
2621 		.enable_mask = BIT(0),
2622 		.hw.init = &(struct clk_init_data) {
2623 			.name = "gcc_dcc_clk",
2624 			.ops = &clk_branch2_ops,
2625 		}
2626 	}
2627 };
2628 
2629 static struct clk_branch gcc_gfx_tbu_clk = {
2630 	.halt_reg = 0x12010,
2631 	.halt_check = BRANCH_HALT_VOTED,
2632 	.clkr = {
2633 		.enable_reg = 0x4500c,
2634 		.enable_mask = BIT(3),
2635 		.hw.init = &(struct clk_init_data){
2636 			.name = "gcc_gfx_tbu_clk",
2637 			.ops = &clk_branch2_ops,
2638 		},
2639 	},
2640 };
2641 
2642 static struct clk_branch gcc_gfx_tcu_clk = {
2643 	.halt_reg = 0x12020,
2644 	.halt_check = BRANCH_HALT_VOTED,
2645 	.clkr = {
2646 		.enable_reg = 0x4500c,
2647 		.enable_mask = BIT(2),
2648 		.hw.init = &(struct clk_init_data){
2649 			.name = "gcc_gfx_tcu_clk",
2650 			.ops = &clk_branch2_ops,
2651 		},
2652 	},
2653 };
2654 
2655 static struct clk_branch gcc_gtcu_ahb_clk = {
2656 	.halt_reg = 0x12044,
2657 	.halt_check = BRANCH_HALT_VOTED,
2658 	.clkr = {
2659 		.enable_reg = 0x4500c,
2660 		.enable_mask = BIT(13),
2661 		.hw.init = &(struct clk_init_data){
2662 			.name = "gcc_gtcu_ahb_clk",
2663 			.ops = &clk_branch2_ops,
2664 		},
2665 	},
2666 };
2667 
2668 static struct clk_branch gcc_gp1_clk = {
2669 	.halt_reg = 0x08000,
2670 	.halt_check = BRANCH_HALT,
2671 	.clkr = {
2672 		.enable_reg = 0x08000,
2673 		.enable_mask = BIT(0),
2674 		.hw.init = &(struct clk_init_data) {
2675 			.name = "gcc_gp1_clk",
2676 			.parent_hws = (const struct clk_hw*[]){
2677 				&gp1_clk_src.clkr.hw,
2678 			},
2679 			.num_parents = 1,
2680 			.ops = &clk_branch2_ops,
2681 			.flags = CLK_SET_RATE_PARENT,
2682 		}
2683 	}
2684 };
2685 
2686 static struct clk_branch gcc_gp2_clk = {
2687 	.halt_reg = 0x09000,
2688 	.halt_check = BRANCH_HALT,
2689 	.clkr = {
2690 		.enable_reg = 0x09000,
2691 		.enable_mask = BIT(0),
2692 		.hw.init = &(struct clk_init_data) {
2693 			.name = "gcc_gp2_clk",
2694 			.parent_hws = (const struct clk_hw*[]){
2695 				&gp2_clk_src.clkr.hw,
2696 			},
2697 			.num_parents = 1,
2698 			.ops = &clk_branch2_ops,
2699 			.flags = CLK_SET_RATE_PARENT,
2700 		}
2701 	}
2702 };
2703 
2704 static struct clk_branch gcc_gp3_clk = {
2705 	.halt_reg = 0x0a000,
2706 	.halt_check = BRANCH_HALT,
2707 	.clkr = {
2708 		.enable_reg = 0x0a000,
2709 		.enable_mask = BIT(0),
2710 		.hw.init = &(struct clk_init_data) {
2711 			.name = "gcc_gp3_clk",
2712 			.parent_hws = (const struct clk_hw*[]){
2713 				&gp3_clk_src.clkr.hw,
2714 			},
2715 			.num_parents = 1,
2716 			.ops = &clk_branch2_ops,
2717 			.flags = CLK_SET_RATE_PARENT,
2718 		}
2719 	}
2720 };
2721 
2722 static struct clk_branch gcc_jpeg_tbu_clk = {
2723 	.halt_reg = 0x12034,
2724 	.halt_check = BRANCH_HALT_VOTED,
2725 	.clkr = {
2726 		.enable_reg = 0x4500c,
2727 		.enable_mask = BIT(10),
2728 		.hw.init = &(struct clk_init_data) {
2729 			.name = "gcc_jpeg_tbu_clk",
2730 			.ops = &clk_branch2_ops,
2731 		}
2732 	}
2733 };
2734 
2735 static struct clk_branch gcc_mdp_tbu_clk = {
2736 	.halt_reg = 0x1201c,
2737 	.halt_check = BRANCH_HALT_VOTED,
2738 	.clkr = {
2739 		.enable_reg = 0x4500c,
2740 		.enable_mask = BIT(4),
2741 		.hw.init = &(struct clk_init_data) {
2742 			.name = "gcc_mdp_tbu_clk",
2743 			.ops = &clk_branch2_ops,
2744 		}
2745 	}
2746 };
2747 
2748 static struct clk_branch gcc_mdss_ahb_clk = {
2749 	.halt_reg = 0x4d07c,
2750 	.halt_check = BRANCH_HALT,
2751 	.clkr = {
2752 		.enable_reg = 0x4d07c,
2753 		.enable_mask = BIT(0),
2754 		.hw.init = &(struct clk_init_data) {
2755 			.name = "gcc_mdss_ahb_clk",
2756 			.ops = &clk_branch2_ops,
2757 		}
2758 	}
2759 };
2760 
2761 static struct clk_branch gcc_mdss_axi_clk = {
2762 	.halt_reg = 0x4d080,
2763 	.halt_check = BRANCH_HALT,
2764 	.clkr = {
2765 		.enable_reg = 0x4d080,
2766 		.enable_mask = BIT(0),
2767 		.hw.init = &(struct clk_init_data) {
2768 			.name = "gcc_mdss_axi_clk",
2769 			.ops = &clk_branch2_ops,
2770 		}
2771 	}
2772 };
2773 
2774 static struct clk_branch gcc_mdss_byte0_clk = {
2775 	.halt_reg = 0x4d094,
2776 	.halt_check = BRANCH_HALT,
2777 	.clkr = {
2778 		.enable_reg = 0x4d094,
2779 		.enable_mask = BIT(0),
2780 		.hw.init = &(struct clk_init_data) {
2781 			.name = "gcc_mdss_byte0_clk",
2782 			.parent_hws = (const struct clk_hw*[]){
2783 				&byte0_clk_src.clkr.hw,
2784 			},
2785 			.num_parents = 1,
2786 			.ops = &clk_branch2_ops,
2787 			.flags = CLK_SET_RATE_PARENT,
2788 		}
2789 	}
2790 };
2791 
2792 static struct clk_branch gcc_mdss_byte1_clk = {
2793 	.halt_reg = 0x4d0a0,
2794 	.halt_check = BRANCH_HALT,
2795 	.clkr = {
2796 		.enable_reg = 0x4d0a0,
2797 		.enable_mask = BIT(0),
2798 		.hw.init = &(struct clk_init_data){
2799 			.name = "gcc_mdss_byte1_clk",
2800 			.parent_hws = (const struct clk_hw*[]){
2801 				&byte1_clk_src.clkr.hw,
2802 			},
2803 			.num_parents = 1,
2804 			.ops = &clk_branch2_ops,
2805 			.flags = CLK_SET_RATE_PARENT,
2806 		},
2807 	},
2808 };
2809 
2810 static struct clk_branch gcc_mdss_esc0_clk = {
2811 	.halt_reg = 0x4d098,
2812 	.halt_check = BRANCH_HALT,
2813 	.clkr = {
2814 		.enable_reg = 0x4d098,
2815 		.enable_mask = BIT(0),
2816 		.hw.init = &(struct clk_init_data) {
2817 			.name = "gcc_mdss_esc0_clk",
2818 			.parent_hws = (const struct clk_hw*[]){
2819 				&esc0_clk_src.clkr.hw,
2820 			},
2821 			.num_parents = 1,
2822 			.ops = &clk_branch2_ops,
2823 			.flags = CLK_SET_RATE_PARENT,
2824 		}
2825 	}
2826 };
2827 
2828 static struct clk_branch gcc_mdss_esc1_clk = {
2829 	.halt_reg = 0x4d09c,
2830 	.halt_check = BRANCH_HALT,
2831 	.clkr = {
2832 		.enable_reg = 0x4d09c,
2833 		.enable_mask = BIT(0),
2834 		.hw.init = &(struct clk_init_data){
2835 			.name = "gcc_mdss_esc1_clk",
2836 			.parent_hws = (const struct clk_hw*[]){
2837 				&esc1_clk_src.clkr.hw,
2838 			},
2839 			.num_parents = 1,
2840 			.ops = &clk_branch2_ops,
2841 			.flags = CLK_SET_RATE_PARENT,
2842 		},
2843 	},
2844 };
2845 
2846 static struct clk_branch gcc_mdss_mdp_clk = {
2847 	.halt_reg = 0x4d088,
2848 	.halt_check = BRANCH_HALT,
2849 	.clkr = {
2850 		.enable_reg = 0x4d088,
2851 		.enable_mask = BIT(0),
2852 		.hw.init = &(struct clk_init_data) {
2853 			.name = "gcc_mdss_mdp_clk",
2854 			.parent_hws = (const struct clk_hw*[]){
2855 				&mdp_clk_src.clkr.hw,
2856 			},
2857 			.num_parents = 1,
2858 			.ops = &clk_branch2_ops,
2859 			.flags = CLK_SET_RATE_PARENT,
2860 		}
2861 	}
2862 };
2863 
2864 static struct clk_branch gcc_mdss_pclk0_clk = {
2865 	.halt_reg = 0x4d084,
2866 	.halt_check = BRANCH_HALT,
2867 	.clkr = {
2868 		.enable_reg = 0x4d084,
2869 		.enable_mask = BIT(0),
2870 		.hw.init = &(struct clk_init_data) {
2871 			.name = "gcc_mdss_pclk0_clk",
2872 			.parent_hws = (const struct clk_hw*[]){
2873 				&pclk0_clk_src.clkr.hw,
2874 			},
2875 			.num_parents = 1,
2876 			.ops = &clk_branch2_ops,
2877 			.flags = CLK_SET_RATE_PARENT,
2878 		}
2879 	}
2880 };
2881 
2882 static struct clk_branch gcc_mdss_pclk1_clk = {
2883 	.halt_reg = 0x4d0a4,
2884 	.halt_check = BRANCH_HALT,
2885 	.clkr = {
2886 		.enable_reg = 0x4d0a4,
2887 		.enable_mask = BIT(0),
2888 		.hw.init = &(struct clk_init_data){
2889 			.name = "gcc_mdss_pclk1_clk",
2890 			.parent_hws = (const struct clk_hw*[]){
2891 				&pclk1_clk_src.clkr.hw,
2892 			},
2893 			.num_parents = 1,
2894 			.ops = &clk_branch2_ops,
2895 			.flags = CLK_SET_RATE_PARENT,
2896 		},
2897 	},
2898 };
2899 
2900 static struct clk_branch gcc_mdss_vsync_clk = {
2901 	.halt_reg = 0x4d090,
2902 	.halt_check = BRANCH_HALT,
2903 	.clkr = {
2904 		.enable_reg = 0x4d090,
2905 		.enable_mask = BIT(0),
2906 		.hw.init = &(struct clk_init_data) {
2907 			.name = "gcc_mdss_vsync_clk",
2908 			.parent_hws = (const struct clk_hw*[]){
2909 				&vsync_clk_src.clkr.hw,
2910 			},
2911 			.num_parents = 1,
2912 			.ops = &clk_branch2_ops,
2913 			.flags = CLK_SET_RATE_PARENT,
2914 		}
2915 	}
2916 };
2917 
2918 static struct clk_branch gcc_mss_cfg_ahb_clk = {
2919 	.halt_reg = 0x49000,
2920 	.halt_check = BRANCH_HALT,
2921 	.clkr = {
2922 		.enable_reg = 0x49000,
2923 		.enable_mask = BIT(0),
2924 		.hw.init = &(struct clk_init_data) {
2925 			.name = "gcc_mss_cfg_ahb_clk",
2926 			.ops = &clk_branch2_ops,
2927 		}
2928 	}
2929 };
2930 
2931 static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
2932 	.halt_reg = 0x49004,
2933 	.halt_check = BRANCH_HALT,
2934 	.clkr = {
2935 		.enable_reg = 0x49004,
2936 		.enable_mask = BIT(0),
2937 		.hw.init = &(struct clk_init_data) {
2938 			.name = "gcc_mss_q6_bimc_axi_clk",
2939 			.ops = &clk_branch2_ops,
2940 		}
2941 	}
2942 };
2943 
2944 static struct clk_branch gcc_oxili_ahb_clk = {
2945 	.halt_reg = 0x59028,
2946 	.halt_check = BRANCH_HALT,
2947 	.clkr = {
2948 		.enable_reg = 0x59028,
2949 		.enable_mask = BIT(0),
2950 		.hw.init = &(struct clk_init_data) {
2951 			.name = "gcc_oxili_ahb_clk",
2952 			.ops = &clk_branch2_ops,
2953 		}
2954 	}
2955 };
2956 
2957 static struct clk_branch gcc_oxili_aon_clk = {
2958 	.halt_reg = 0x5904c,
2959 	.halt_check = BRANCH_HALT,
2960 	.clkr = {
2961 		.enable_reg = 0x5904c,
2962 		.enable_mask = BIT(0),
2963 		.hw.init = &(struct clk_init_data){
2964 			.name = "gcc_oxili_aon_clk",
2965 			.parent_hws = (const struct clk_hw*[]){
2966 				&gfx3d_clk_src.clkr.hw,
2967 			},
2968 			.num_parents = 1,
2969 			.ops = &clk_branch2_ops,
2970 			.flags = CLK_SET_RATE_PARENT,
2971 		},
2972 	},
2973 };
2974 
2975 static struct clk_branch gcc_oxili_gfx3d_clk = {
2976 	.halt_reg = 0x59020,
2977 	.halt_check = BRANCH_HALT,
2978 	.clkr = {
2979 		.enable_reg = 0x59020,
2980 		.enable_mask = BIT(0),
2981 		.hw.init = &(struct clk_init_data) {
2982 			.name = "gcc_oxili_gfx3d_clk",
2983 			.parent_hws = (const struct clk_hw*[]){
2984 				&gfx3d_clk_src.clkr.hw,
2985 			},
2986 			.num_parents = 1,
2987 			.ops = &clk_branch2_ops,
2988 			.flags = CLK_SET_RATE_PARENT,
2989 		}
2990 	}
2991 };
2992 
2993 static struct clk_branch gcc_oxili_timer_clk = {
2994 	.halt_reg = 0x59040,
2995 	.halt_check = BRANCH_HALT,
2996 	.clkr = {
2997 		.enable_reg = 0x59040,
2998 		.enable_mask = BIT(0),
2999 		.hw.init = &(struct clk_init_data){
3000 			.name = "gcc_oxili_timer_clk",
3001 			.ops = &clk_branch2_ops,
3002 		},
3003 	},
3004 };
3005 
3006 static struct clk_branch gcc_pdm2_clk = {
3007 	.halt_reg = 0x4400c,
3008 	.halt_check = BRANCH_HALT,
3009 	.clkr = {
3010 		.enable_reg = 0x4400c,
3011 		.enable_mask = BIT(0),
3012 		.hw.init = &(struct clk_init_data) {
3013 			.name = "gcc_pdm2_clk",
3014 			.parent_hws = (const struct clk_hw*[]){
3015 				&pdm2_clk_src.clkr.hw,
3016 			},
3017 			.num_parents = 1,
3018 			.ops = &clk_branch2_ops,
3019 			.flags = CLK_SET_RATE_PARENT,
3020 		}
3021 	}
3022 };
3023 
3024 static struct clk_branch gcc_pdm_ahb_clk = {
3025 	.halt_reg = 0x44004,
3026 	.halt_check = BRANCH_HALT,
3027 	.clkr = {
3028 		.enable_reg = 0x44004,
3029 		.enable_mask = BIT(0),
3030 		.hw.init = &(struct clk_init_data) {
3031 			.name = "gcc_pdm_ahb_clk",
3032 			.ops = &clk_branch2_ops,
3033 		}
3034 	}
3035 };
3036 
3037 static struct clk_branch gcc_prng_ahb_clk = {
3038 	.halt_reg = 0x13004,
3039 	.halt_check = BRANCH_HALT_VOTED,
3040 	.clkr = {
3041 		.enable_reg = 0x45004,
3042 		.enable_mask = BIT(8),
3043 		.hw.init = &(struct clk_init_data) {
3044 			.name = "gcc_prng_ahb_clk",
3045 			.ops = &clk_branch2_ops,
3046 		}
3047 	}
3048 };
3049 
3050 static struct clk_branch gcc_qdss_dap_clk = {
3051 	.halt_reg = 0x29084,
3052 	.halt_check = BRANCH_HALT_VOTED,
3053 	.clkr = {
3054 		.enable_reg = 0x45004,
3055 		.enable_mask = BIT(11),
3056 		.hw.init = &(struct clk_init_data) {
3057 			.name = "gcc_qdss_dap_clk",
3058 			.ops = &clk_branch2_ops,
3059 		}
3060 	}
3061 };
3062 
3063 static struct clk_branch gcc_sdcc1_ice_core_clk = {
3064 	.halt_reg = 0x5d014,
3065 	.halt_check = BRANCH_HALT,
3066 	.clkr = {
3067 		.enable_reg = 0x5d014,
3068 		.enable_mask = BIT(0),
3069 		.hw.init = &(struct clk_init_data) {
3070 			.name = "gcc_sdcc1_ice_core_clk",
3071 			.parent_hws = (const struct clk_hw*[]){
3072 				&sdcc1_ice_core_clk_src.clkr.hw,
3073 			},
3074 			.num_parents = 1,
3075 			.ops = &clk_branch2_ops,
3076 			.flags = CLK_SET_RATE_PARENT,
3077 		}
3078 	}
3079 };
3080 
3081 static struct clk_branch gcc_sdcc1_ahb_clk = {
3082 	.halt_reg = 0x4201c,
3083 	.halt_check = BRANCH_HALT,
3084 	.clkr = {
3085 		.enable_reg = 0x4201c,
3086 		.enable_mask = BIT(0),
3087 		.hw.init = &(struct clk_init_data) {
3088 			.name = "gcc_sdcc1_ahb_clk",
3089 			.ops = &clk_branch2_ops,
3090 		}
3091 	}
3092 };
3093 
3094 static struct clk_branch gcc_sdcc2_ahb_clk = {
3095 	.halt_reg = 0x4301c,
3096 	.halt_check = BRANCH_HALT,
3097 	.clkr = {
3098 		.enable_reg = 0x4301c,
3099 		.enable_mask = BIT(0),
3100 		.hw.init = &(struct clk_init_data) {
3101 			.name = "gcc_sdcc2_ahb_clk",
3102 			.ops = &clk_branch2_ops,
3103 		}
3104 	}
3105 };
3106 
3107 static struct clk_branch gcc_sdcc1_apps_clk = {
3108 	.halt_reg = 0x42018,
3109 	.halt_check = BRANCH_HALT,
3110 	.clkr = {
3111 		.enable_reg = 0x42018,
3112 		.enable_mask = BIT(0),
3113 		.hw.init = &(struct clk_init_data) {
3114 			.name = "gcc_sdcc1_apps_clk",
3115 			.parent_hws = (const struct clk_hw*[]){
3116 				&sdcc1_apps_clk_src.clkr.hw,
3117 			},
3118 			.num_parents = 1,
3119 			.ops = &clk_branch2_ops,
3120 			.flags = CLK_SET_RATE_PARENT,
3121 		}
3122 	}
3123 };
3124 
3125 static struct clk_branch gcc_sdcc2_apps_clk = {
3126 	.halt_reg = 0x43018,
3127 	.halt_check = BRANCH_HALT,
3128 	.clkr = {
3129 		.enable_reg = 0x43018,
3130 		.enable_mask = BIT(0),
3131 		.hw.init = &(struct clk_init_data) {
3132 			.name = "gcc_sdcc2_apps_clk",
3133 			.parent_hws = (const struct clk_hw*[]){
3134 				&sdcc2_apps_clk_src.clkr.hw,
3135 			},
3136 			.num_parents = 1,
3137 			.ops = &clk_branch2_ops,
3138 			.flags = CLK_SET_RATE_PARENT,
3139 		}
3140 	}
3141 };
3142 
3143 static struct clk_branch gcc_smmu_cfg_clk = {
3144 	.halt_reg = 0x12038,
3145 	.halt_check = BRANCH_HALT_VOTED,
3146 	.clkr = {
3147 		.enable_reg = 0x4500c,
3148 		.enable_mask = BIT(12),
3149 		.hw.init = &(struct clk_init_data) {
3150 			.name = "gcc_smmu_cfg_clk",
3151 			.ops = &clk_branch2_ops,
3152 		}
3153 	}
3154 };
3155 
3156 static struct clk_branch gcc_usb2a_phy_sleep_clk = {
3157 	.halt_reg = 0x4102c,
3158 	.clkr = {
3159 		.enable_reg = 0x4102c,
3160 		.enable_mask = BIT(0),
3161 		.hw.init = &(struct clk_init_data){
3162 			.name = "gcc_usb2a_phy_sleep_clk",
3163 			.ops = &clk_branch2_ops,
3164 		},
3165 	},
3166 };
3167 
3168 static struct clk_branch gcc_usb_hs_ahb_clk = {
3169 	.halt_reg = 0x41008,
3170 	.clkr = {
3171 		.enable_reg = 0x41008,
3172 		.enable_mask = BIT(0),
3173 		.hw.init = &(struct clk_init_data){
3174 			.name = "gcc_usb_hs_ahb_clk",
3175 			.ops = &clk_branch2_ops,
3176 		},
3177 	},
3178 };
3179 
3180 static struct clk_branch gcc_usb_hs_phy_cfg_ahb_clk = {
3181 	.halt_reg = 0x41030,
3182 	.clkr = {
3183 		.enable_reg = 0x41030,
3184 		.enable_mask = BIT(0),
3185 		.hw.init = &(struct clk_init_data){
3186 			.name = "gcc_usb_hs_phy_cfg_ahb_clk",
3187 			.ops = &clk_branch2_ops,
3188 		},
3189 	},
3190 };
3191 
3192 static struct clk_branch gcc_usb_hs_system_clk = {
3193 	.halt_reg = 0x41004,
3194 	.clkr = {
3195 		.enable_reg = 0x41004,
3196 		.enable_mask = BIT(0),
3197 		.hw.init = &(struct clk_init_data){
3198 			.name = "gcc_usb_hs_system_clk",
3199 			.parent_hws = (const struct clk_hw*[]){
3200 				&usb_hs_system_clk_src.clkr.hw,
3201 			},
3202 			.num_parents = 1,
3203 			.flags = CLK_SET_RATE_PARENT,
3204 			.ops = &clk_branch2_ops,
3205 		},
3206 	},
3207 };
3208 
3209 static struct clk_branch gcc_venus0_ahb_clk = {
3210 	.halt_reg = 0x4c020,
3211 	.halt_check = BRANCH_HALT,
3212 	.clkr = {
3213 		.enable_reg = 0x4c020,
3214 		.enable_mask = BIT(0),
3215 		.hw.init = &(struct clk_init_data) {
3216 			.name = "gcc_venus0_ahb_clk",
3217 			.ops = &clk_branch2_ops,
3218 		}
3219 	}
3220 };
3221 
3222 static struct clk_branch gcc_venus0_axi_clk = {
3223 	.halt_reg = 0x4c024,
3224 	.halt_check = BRANCH_HALT,
3225 	.clkr = {
3226 		.enable_reg = 0x4c024,
3227 		.enable_mask = BIT(0),
3228 		.hw.init = &(struct clk_init_data) {
3229 			.name = "gcc_venus0_axi_clk",
3230 			.ops = &clk_branch2_ops,
3231 		}
3232 	}
3233 };
3234 
3235 static struct clk_branch gcc_venus0_core0_vcodec0_clk = {
3236 	.halt_reg = 0x4c02c,
3237 	.halt_check = BRANCH_HALT,
3238 	.clkr = {
3239 		.enable_reg = 0x4c02c,
3240 		.enable_mask = BIT(0),
3241 		.hw.init = &(struct clk_init_data) {
3242 			.name = "gcc_venus0_core0_vcodec0_clk",
3243 			.parent_hws = (const struct clk_hw*[]){
3244 				&vcodec0_clk_src.clkr.hw,
3245 			},
3246 			.num_parents = 1,
3247 			.ops = &clk_branch2_ops,
3248 			.flags = CLK_SET_RATE_PARENT,
3249 		}
3250 	}
3251 };
3252 
3253 static struct clk_branch gcc_venus0_vcodec0_clk = {
3254 	.halt_reg = 0x4c01c,
3255 	.halt_check = BRANCH_HALT,
3256 	.clkr = {
3257 		.enable_reg = 0x4c01c,
3258 		.enable_mask = BIT(0),
3259 		.hw.init = &(struct clk_init_data) {
3260 			.name = "gcc_venus0_vcodec0_clk",
3261 			.parent_hws = (const struct clk_hw*[]){
3262 				&vcodec0_clk_src.clkr.hw,
3263 			},
3264 			.num_parents = 1,
3265 			.ops = &clk_branch2_ops,
3266 			.flags = CLK_SET_RATE_PARENT,
3267 		}
3268 	}
3269 };
3270 
3271 static struct clk_branch gcc_venus_tbu_clk = {
3272 	.halt_reg = 0x12014,
3273 	.halt_check = BRANCH_HALT_VOTED,
3274 	.clkr = {
3275 		.enable_reg = 0x4500c,
3276 		.enable_mask = BIT(5),
3277 		.hw.init = &(struct clk_init_data) {
3278 			.name = "gcc_venus_tbu_clk",
3279 			.ops = &clk_branch2_ops,
3280 		}
3281 	}
3282 };
3283 
3284 static struct clk_branch gcc_vfe1_tbu_clk = {
3285 	.halt_reg = 0x12090,
3286 	.halt_check = BRANCH_HALT_VOTED,
3287 	.clkr = {
3288 		.enable_reg = 0x4500c,
3289 		.enable_mask = BIT(17),
3290 		.hw.init = &(struct clk_init_data) {
3291 			.name = "gcc_vfe1_tbu_clk",
3292 			.ops = &clk_branch2_ops,
3293 		}
3294 	}
3295 };
3296 
3297 static struct clk_branch gcc_vfe_tbu_clk = {
3298 	.halt_reg = 0x1203c,
3299 	.halt_check = BRANCH_HALT_VOTED,
3300 	.clkr = {
3301 		.enable_reg = 0x4500c,
3302 		.enable_mask = BIT(9),
3303 		.hw.init = &(struct clk_init_data) {
3304 			.name = "gcc_vfe_tbu_clk",
3305 			.ops = &clk_branch2_ops,
3306 		}
3307 	}
3308 };
3309 
3310 static struct gdsc venus_gdsc = {
3311 	.gdscr = 0x4c018,
3312 	.cxcs = (unsigned int []){ 0x4c024, 0x4c01c },
3313 	.cxc_count = 2,
3314 	.pd = {
3315 		.name = "venus_gdsc",
3316 	},
3317 	.pwrsts = PWRSTS_OFF_ON,
3318 };
3319 
3320 static struct gdsc venus_core0_gdsc = {
3321 	.gdscr = 0x4c028,
3322 	.cxcs = (unsigned int []){ 0x4c02c },
3323 	.cxc_count = 1,
3324 	.pd = {
3325 		.name = "venus_core0",
3326 	},
3327 	.flags = HW_CTRL,
3328 	.pwrsts = PWRSTS_OFF_ON,
3329 };
3330 
3331 static struct gdsc mdss_gdsc = {
3332 	.gdscr = 0x4d078,
3333 	.cxcs = (unsigned int []){ 0x4d080, 0x4d088 },
3334 	.cxc_count = 2,
3335 	.pd = {
3336 		.name = "mdss_gdsc",
3337 	},
3338 	.pwrsts = PWRSTS_OFF_ON,
3339 };
3340 
3341 static struct gdsc jpeg_gdsc = {
3342 	.gdscr = 0x5701c,
3343 	.cxcs = (unsigned int []){ 0x57020, 0x57028 },
3344 	.cxc_count = 2,
3345 	.pd = {
3346 		.name = "jpeg_gdsc",
3347 	},
3348 	.pwrsts = PWRSTS_OFF_ON,
3349 };
3350 
3351 static struct gdsc vfe0_gdsc = {
3352 	.gdscr = 0x58034,
3353 	.cxcs = (unsigned int []){ 0x58038, 0x58048, 0x5600c, 0x58050 },
3354 	.cxc_count = 4,
3355 	.pd = {
3356 		.name = "vfe0_gdsc",
3357 	},
3358 	.pwrsts = PWRSTS_OFF_ON,
3359 };
3360 
3361 static struct gdsc vfe1_gdsc = {
3362 	.gdscr = 0x5806c,
3363 	.cxcs = (unsigned int []){ 0x5805c, 0x58068, 0x5600c, 0x58074 },
3364 	.cxc_count = 4,
3365 	.pd = {
3366 		.name = "vfe1_gdsc",
3367 	},
3368 	.pwrsts = PWRSTS_OFF_ON,
3369 };
3370 
3371 static struct gdsc oxili_gx_gdsc = {
3372 	.gdscr = 0x5901c,
3373 	.clamp_io_ctrl = 0x5b00c,
3374 	.cxcs = (unsigned int []){ 0x59000, 0x59020 },
3375 	.cxc_count = 2,
3376 	.pd = {
3377 		.name = "oxili_gx_gdsc",
3378 	},
3379 	.pwrsts = PWRSTS_OFF_ON,
3380 	.flags = CLAMP_IO,
3381 };
3382 
3383 static struct gdsc oxili_gx_gdsc_msm8937 = {
3384 	.gdscr = 0x5901c,
3385 	.clamp_io_ctrl = 0x5b00c,
3386 	.cxcs = (unsigned int []){ 0x59000 },
3387 	.cxc_count = 1,
3388 	.pd = {
3389 		.name = "oxili_gx_gdsc",
3390 	},
3391 	.pwrsts = PWRSTS_OFF_ON,
3392 	.flags = CLAMP_IO,
3393 };
3394 
3395 static struct gdsc oxili_cx_gdsc = {
3396 	.gdscr = 0x59044,
3397 	.cxcs = (unsigned int []){ 0x59020 },
3398 	.cxc_count = 1,
3399 	.pd = {
3400 		.name = "oxili_cx_gdsc",
3401 	},
3402 	.pwrsts = PWRSTS_OFF_ON,
3403 };
3404 
3405 static struct gdsc cpp_gdsc = {
3406 	.gdscr = 0x58078,
3407 	.cxcs = (unsigned int []){ 0x5803c, 0x58064 },
3408 	.cxc_count = 2,
3409 	.pd = {
3410 		.name = "cpp_gdsc",
3411 	},
3412 	.flags = ALWAYS_ON,
3413 	.pwrsts = PWRSTS_OFF_ON,
3414 };
3415 
3416 static struct clk_regmap *gcc_msm8917_clocks[] = {
3417 	[GPLL0] = &gpll0.clkr,
3418 	[GPLL0_EARLY] = &gpll0_early.clkr,
3419 	[GPLL0_SLEEP_CLK_SRC] = &gpll0_sleep_clk_src.clkr,
3420 	[GPLL3] = &gpll3.clkr,
3421 	[GPLL3_EARLY] = &gpll3_early.clkr,
3422 	[GPLL4] = &gpll4.clkr,
3423 	[GPLL4_EARLY] = &gpll4_early.clkr,
3424 	[GPLL6] = &gpll6,
3425 	[GPLL6_EARLY] = &gpll6_early.clkr,
3426 	[APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
3427 	[BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
3428 	[BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
3429 	[BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
3430 	[BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
3431 	[BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
3432 	[BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
3433 	[BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
3434 	[BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
3435 	[BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
3436 	[BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
3437 	[BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
3438 	[BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
3439 	[BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
3440 	[BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
3441 	[BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
3442 	[BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
3443 	[BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
3444 	[CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
3445 	[CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
3446 	[CAMSS_TOP_AHB_CLK_SRC] = &camss_top_ahb_clk_src.clkr,
3447 	[CCI_CLK_SRC] = &cci_clk_src.clkr,
3448 	[CPP_CLK_SRC] = &cpp_clk_src.clkr,
3449 	[CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
3450 	[CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
3451 	[CSI0_CLK_SRC] = &csi0_clk_src.clkr,
3452 	[CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
3453 	[CSI1_CLK_SRC] = &csi1_clk_src.clkr,
3454 	[CSI2_CLK_SRC] = &csi2_clk_src.clkr,
3455 	[ESC0_CLK_SRC] = &esc0_clk_src.clkr,
3456 	[GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
3457 	[GP1_CLK_SRC] = &gp1_clk_src.clkr,
3458 	[GP2_CLK_SRC] = &gp2_clk_src.clkr,
3459 	[GP3_CLK_SRC] = &gp3_clk_src.clkr,
3460 	[JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
3461 	[MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
3462 	[MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
3463 	[MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,
3464 	[MDP_CLK_SRC] = &mdp_clk_src.clkr,
3465 	[PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
3466 	[PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
3467 	[SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
3468 	[SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
3469 	[SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
3470 	[USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
3471 	[VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
3472 	[VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
3473 	[VFE1_CLK_SRC] = &vfe1_clk_src.clkr,
3474 	[VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
3475 	[GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr,
3476 	[GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
3477 	[GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr,
3478 	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
3479 	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
3480 	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
3481 	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
3482 	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
3483 	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
3484 	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
3485 	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
3486 	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
3487 	[GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
3488 	[GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
3489 	[GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
3490 	[GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
3491 	[GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
3492 	[GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
3493 	[GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
3494 	[GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
3495 	[GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
3496 	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3497 	[GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr,
3498 	[GCC_CAMSS_CCI_AHB_CLK] = &gcc_camss_cci_ahb_clk.clkr,
3499 	[GCC_CAMSS_CCI_CLK] = &gcc_camss_cci_clk.clkr,
3500 	[GCC_CAMSS_CPP_AHB_CLK] = &gcc_camss_cpp_ahb_clk.clkr,
3501 	[GCC_CAMSS_CPP_CLK] = &gcc_camss_cpp_clk.clkr,
3502 	[GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
3503 	[GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr,
3504 	[GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr,
3505 	[GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr,
3506 	[GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr,
3507 	[GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr,
3508 	[GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
3509 	[GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr,
3510 	[GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr,
3511 	[GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr,
3512 	[GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr,
3513 	[GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr,
3514 	[GCC_CAMSS_CSI2PHY_CLK] = &gcc_camss_csi2phy_clk.clkr,
3515 	[GCC_CAMSS_CSI2PIX_CLK] = &gcc_camss_csi2pix_clk.clkr,
3516 	[GCC_CAMSS_CSI2RDI_CLK] = &gcc_camss_csi2rdi_clk.clkr,
3517 	[GCC_CAMSS_CSI2_AHB_CLK] = &gcc_camss_csi2_ahb_clk.clkr,
3518 	[GCC_CAMSS_CSI2_CLK] = &gcc_camss_csi2_clk.clkr,
3519 	[GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr,
3520 	[GCC_CAMSS_CSI_VFE1_CLK] = &gcc_camss_csi_vfe1_clk.clkr,
3521 	[GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr,
3522 	[GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr,
3523 	[GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr,
3524 	[GCC_CAMSS_JPEG0_CLK] = &gcc_camss_jpeg0_clk.clkr,
3525 	[GCC_CAMSS_JPEG_AHB_CLK] = &gcc_camss_jpeg_ahb_clk.clkr,
3526 	[GCC_CAMSS_JPEG_AXI_CLK] = &gcc_camss_jpeg_axi_clk.clkr,
3527 	[GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
3528 	[GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
3529 	[GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr,
3530 	[GCC_CAMSS_MICRO_AHB_CLK] = &gcc_camss_micro_ahb_clk.clkr,
3531 	[GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
3532 	[GCC_CAMSS_VFE0_AHB_CLK] = &gcc_camss_vfe0_ahb_clk.clkr,
3533 	[GCC_CAMSS_VFE0_AXI_CLK] = &gcc_camss_vfe0_axi_clk.clkr,
3534 	[GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr,
3535 	[GCC_CAMSS_VFE1_AHB_CLK] = &gcc_camss_vfe1_ahb_clk.clkr,
3536 	[GCC_CAMSS_VFE1_AXI_CLK] = &gcc_camss_vfe1_axi_clk.clkr,
3537 	[GCC_CAMSS_VFE1_CLK] = &gcc_camss_vfe1_clk.clkr,
3538 	[GCC_CPP_TBU_CLK] = &gcc_cpp_tbu_clk.clkr,
3539 	[GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
3540 	[GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
3541 	[GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
3542 	[GCC_DCC_CLK] = &gcc_dcc_clk.clkr,
3543 	[GCC_GFX_TBU_CLK] = &gcc_gfx_tbu_clk.clkr,
3544 	[GCC_GFX_TCU_CLK] = &gcc_gfx_tcu_clk.clkr,
3545 	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3546 	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3547 	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3548 	[GCC_GTCU_AHB_CLK] = &gcc_gtcu_ahb_clk.clkr,
3549 	[GCC_JPEG_TBU_CLK] = &gcc_jpeg_tbu_clk.clkr,
3550 	[GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr,
3551 	[GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr,
3552 	[GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr,
3553 	[GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr,
3554 	[GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr,
3555 	[GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr,
3556 	[GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr,
3557 	[GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr,
3558 	[GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
3559 	[GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
3560 	[GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr,
3561 	[GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr,
3562 	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3563 	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3564 	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3565 	[GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr,
3566 	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
3567 	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
3568 	[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
3569 	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3570 	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3571 	[GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,
3572 	[GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
3573 	[GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
3574 	[GCC_USB_HS_PHY_CFG_AHB_CLK] = &gcc_usb_hs_phy_cfg_ahb_clk.clkr,
3575 	[GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
3576 	[GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr,
3577 	[GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr,
3578 	[GCC_VENUS0_CORE0_VCODEC0_CLK] = &gcc_venus0_core0_vcodec0_clk.clkr,
3579 	[GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr,
3580 	[GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr,
3581 	[GCC_VFE1_TBU_CLK] = &gcc_vfe1_tbu_clk.clkr,
3582 	[GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr,
3583 };
3584 
3585 static struct clk_regmap *gcc_msm8937_clocks[] = {
3586 	[GPLL0] = &gpll0.clkr,
3587 	[GPLL0_EARLY] = &gpll0_early.clkr,
3588 	[GPLL0_SLEEP_CLK_SRC] = &gpll0_sleep_clk_src.clkr,
3589 	[GPLL3] = &gpll3.clkr,
3590 	[GPLL3_EARLY] = &gpll3_early.clkr,
3591 	[GPLL4] = &gpll4.clkr,
3592 	[GPLL4_EARLY] = &gpll4_early.clkr,
3593 	[GPLL6] = &gpll6,
3594 	[GPLL6_EARLY] = &gpll6_early.clkr,
3595 	[APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
3596 	[MSM8937_BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
3597 	[MSM8937_BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
3598 	[BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
3599 	[BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
3600 	[BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
3601 	[BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
3602 	[BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
3603 	[BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
3604 	[BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
3605 	[BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
3606 	[BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
3607 	[BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
3608 	[BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
3609 	[BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
3610 	[BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
3611 	[BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
3612 	[MSM8937_BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
3613 	[MSM8937_BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
3614 	[BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
3615 	[BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
3616 	[BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
3617 	[MSM8937_BYTE1_CLK_SRC] = &byte1_clk_src.clkr,
3618 	[CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
3619 	[CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
3620 	[CAMSS_TOP_AHB_CLK_SRC] = &camss_top_ahb_clk_src.clkr,
3621 	[CCI_CLK_SRC] = &cci_clk_src.clkr,
3622 	[CPP_CLK_SRC] = &cpp_clk_src.clkr,
3623 	[CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
3624 	[CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
3625 	[CSI0_CLK_SRC] = &csi0_clk_src.clkr,
3626 	[CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
3627 	[CSI1_CLK_SRC] = &csi1_clk_src.clkr,
3628 	[CSI2_CLK_SRC] = &csi2_clk_src.clkr,
3629 	[ESC0_CLK_SRC] = &esc0_clk_src.clkr,
3630 	[MSM8937_ESC1_CLK_SRC] = &esc1_clk_src.clkr,
3631 	[GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
3632 	[GP1_CLK_SRC] = &gp1_clk_src.clkr,
3633 	[GP2_CLK_SRC] = &gp2_clk_src.clkr,
3634 	[GP3_CLK_SRC] = &gp3_clk_src.clkr,
3635 	[JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
3636 	[MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
3637 	[MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
3638 	[MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,
3639 	[MDP_CLK_SRC] = &mdp_clk_src.clkr,
3640 	[PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
3641 	[MSM8937_PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,
3642 	[PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
3643 	[SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
3644 	[SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
3645 	[SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
3646 	[USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
3647 	[VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
3648 	[VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
3649 	[VFE1_CLK_SRC] = &vfe1_clk_src.clkr,
3650 	[VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
3651 	[GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr,
3652 	[GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
3653 	[GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr,
3654 	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
3655 	[MSM8937_GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
3656 	[MSM8937_GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
3657 	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
3658 	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
3659 	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
3660 	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
3661 	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
3662 	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
3663 	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
3664 	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
3665 	[GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
3666 	[GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
3667 	[GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
3668 	[GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
3669 	[GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
3670 	[GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
3671 	[GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
3672 	[MSM8937_GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
3673 	[MSM8937_GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
3674 	[GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
3675 	[GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
3676 	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3677 	[GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr,
3678 	[GCC_CAMSS_CCI_AHB_CLK] = &gcc_camss_cci_ahb_clk.clkr,
3679 	[GCC_CAMSS_CCI_CLK] = &gcc_camss_cci_clk.clkr,
3680 	[GCC_CAMSS_CPP_AHB_CLK] = &gcc_camss_cpp_ahb_clk.clkr,
3681 	[GCC_CAMSS_CPP_CLK] = &gcc_camss_cpp_clk.clkr,
3682 	[GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
3683 	[GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr,
3684 	[GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr,
3685 	[GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr,
3686 	[GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr,
3687 	[GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr,
3688 	[GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
3689 	[GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr,
3690 	[GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr,
3691 	[GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr,
3692 	[GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr,
3693 	[GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr,
3694 	[GCC_CAMSS_CSI2PHY_CLK] = &gcc_camss_csi2phy_clk.clkr,
3695 	[GCC_CAMSS_CSI2PIX_CLK] = &gcc_camss_csi2pix_clk.clkr,
3696 	[GCC_CAMSS_CSI2RDI_CLK] = &gcc_camss_csi2rdi_clk.clkr,
3697 	[GCC_CAMSS_CSI2_AHB_CLK] = &gcc_camss_csi2_ahb_clk.clkr,
3698 	[GCC_CAMSS_CSI2_CLK] = &gcc_camss_csi2_clk.clkr,
3699 	[GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr,
3700 	[GCC_CAMSS_CSI_VFE1_CLK] = &gcc_camss_csi_vfe1_clk.clkr,
3701 	[GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr,
3702 	[GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr,
3703 	[GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr,
3704 	[GCC_CAMSS_JPEG0_CLK] = &gcc_camss_jpeg0_clk.clkr,
3705 	[GCC_CAMSS_JPEG_AHB_CLK] = &gcc_camss_jpeg_ahb_clk.clkr,
3706 	[GCC_CAMSS_JPEG_AXI_CLK] = &gcc_camss_jpeg_axi_clk.clkr,
3707 	[GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
3708 	[GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
3709 	[GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr,
3710 	[GCC_CAMSS_MICRO_AHB_CLK] = &gcc_camss_micro_ahb_clk.clkr,
3711 	[GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
3712 	[GCC_CAMSS_VFE0_AHB_CLK] = &gcc_camss_vfe0_ahb_clk.clkr,
3713 	[GCC_CAMSS_VFE0_AXI_CLK] = &gcc_camss_vfe0_axi_clk.clkr,
3714 	[GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr,
3715 	[GCC_CAMSS_VFE1_AHB_CLK] = &gcc_camss_vfe1_ahb_clk.clkr,
3716 	[GCC_CAMSS_VFE1_AXI_CLK] = &gcc_camss_vfe1_axi_clk.clkr,
3717 	[GCC_CAMSS_VFE1_CLK] = &gcc_camss_vfe1_clk.clkr,
3718 	[GCC_CPP_TBU_CLK] = &gcc_cpp_tbu_clk.clkr,
3719 	[GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
3720 	[GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
3721 	[GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
3722 	[GCC_DCC_CLK] = &gcc_dcc_clk.clkr,
3723 	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3724 	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3725 	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3726 	[GCC_JPEG_TBU_CLK] = &gcc_jpeg_tbu_clk.clkr,
3727 	[GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr,
3728 	[GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr,
3729 	[GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr,
3730 	[GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr,
3731 	[MSM8937_GCC_MDSS_BYTE1_CLK] = &gcc_mdss_byte1_clk.clkr,
3732 	[GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr,
3733 	[MSM8937_GCC_MDSS_ESC1_CLK] = &gcc_mdss_esc1_clk.clkr,
3734 	[GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr,
3735 	[GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr,
3736 	[MSM8937_GCC_MDSS_PCLK1_CLK] = &gcc_mdss_pclk1_clk.clkr,
3737 	[GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr,
3738 	[GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
3739 	[GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
3740 	[GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr,
3741 	[MSM8937_GCC_OXILI_AON_CLK] = &gcc_oxili_aon_clk.clkr,
3742 	[GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr,
3743 	[MSM8937_GCC_OXILI_TIMER_CLK] = &gcc_oxili_timer_clk.clkr,
3744 	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3745 	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3746 	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3747 	[GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr,
3748 	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
3749 	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
3750 	[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
3751 	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3752 	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3753 	[GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,
3754 	[GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
3755 	[GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
3756 	[GCC_USB_HS_PHY_CFG_AHB_CLK] = &gcc_usb_hs_phy_cfg_ahb_clk.clkr,
3757 	[GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
3758 	[GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr,
3759 	[GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr,
3760 	[GCC_VENUS0_CORE0_VCODEC0_CLK] = &gcc_venus0_core0_vcodec0_clk.clkr,
3761 	[GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr,
3762 	[GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr,
3763 	[GCC_VFE1_TBU_CLK] = &gcc_vfe1_tbu_clk.clkr,
3764 	[GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr,
3765 };
3766 
3767 static const struct qcom_reset_map gcc_msm8917_resets[] = {
3768 	[GCC_CAMSS_MICRO_BCR]		= { 0x56008 },
3769 	[GCC_MSS_BCR]			= { 0x71000 },
3770 	[GCC_QUSB2_PHY_BCR]		= { 0x4103c },
3771 	[GCC_USB_HS_BCR]		= { 0x41000 },
3772 	[GCC_USB2_HS_PHY_ONLY_BCR]	= { 0x41034 },
3773 };
3774 
3775 static const struct regmap_config gcc_msm8917_regmap_config = {
3776 	.reg_bits	= 32,
3777 	.reg_stride	= 4,
3778 	.val_bits	= 32,
3779 	.max_register	= 0x80000,
3780 	.fast_io	= true,
3781 };
3782 
3783 static struct gdsc *gcc_msm8917_gdscs[] = {
3784 	[CPP_GDSC] = &cpp_gdsc,
3785 	[JPEG_GDSC] = &jpeg_gdsc,
3786 	[MDSS_GDSC] = &mdss_gdsc,
3787 	[OXILI_GX_GDSC] = &oxili_gx_gdsc,
3788 	[VENUS_CORE0_GDSC] = &venus_core0_gdsc,
3789 	[VENUS_GDSC] = &venus_gdsc,
3790 	[VFE0_GDSC] = &vfe0_gdsc,
3791 	[VFE1_GDSC] = &vfe1_gdsc,
3792 };
3793 
3794 static struct gdsc *gcc_msm8937_gdscs[] = {
3795 	[CPP_GDSC] = &cpp_gdsc,
3796 	[JPEG_GDSC] = &jpeg_gdsc,
3797 	[MDSS_GDSC] = &mdss_gdsc,
3798 	[OXILI_GX_GDSC] = &oxili_gx_gdsc_msm8937,
3799 	[MSM8937_OXILI_CX_GDSC] = &oxili_cx_gdsc,
3800 	[VENUS_CORE0_GDSC] = &venus_core0_gdsc,
3801 	[VENUS_GDSC] = &venus_gdsc,
3802 	[VFE0_GDSC] = &vfe0_gdsc,
3803 	[VFE1_GDSC] = &vfe1_gdsc,
3804 };
3805 
3806 static const struct qcom_cc_desc gcc_msm8917_desc = {
3807 	.config = &gcc_msm8917_regmap_config,
3808 	.clks = gcc_msm8917_clocks,
3809 	.num_clks = ARRAY_SIZE(gcc_msm8917_clocks),
3810 	.resets = gcc_msm8917_resets,
3811 	.num_resets = ARRAY_SIZE(gcc_msm8917_resets),
3812 	.gdscs = gcc_msm8917_gdscs,
3813 	.num_gdscs = ARRAY_SIZE(gcc_msm8917_gdscs),
3814 };
3815 
3816 static const struct qcom_cc_desc gcc_qm215_desc = {
3817 	.config = &gcc_msm8917_regmap_config,
3818 	.clks = gcc_msm8917_clocks,
3819 	.num_clks = ARRAY_SIZE(gcc_msm8917_clocks),
3820 	.resets = gcc_msm8917_resets,
3821 	.num_resets = ARRAY_SIZE(gcc_msm8917_resets),
3822 	.gdscs = gcc_msm8917_gdscs,
3823 	.num_gdscs = ARRAY_SIZE(gcc_msm8917_gdscs),
3824 };
3825 
3826 static const struct qcom_cc_desc gcc_msm8937_desc = {
3827 	.config = &gcc_msm8917_regmap_config,
3828 	.clks = gcc_msm8937_clocks,
3829 	.num_clks = ARRAY_SIZE(gcc_msm8937_clocks),
3830 	.resets = gcc_msm8917_resets,
3831 	.num_resets = ARRAY_SIZE(gcc_msm8917_resets),
3832 	.gdscs = gcc_msm8937_gdscs,
3833 	.num_gdscs = ARRAY_SIZE(gcc_msm8937_gdscs),
3834 };
3835 
msm8937_clock_override(void)3836 static void msm8937_clock_override(void)
3837 {
3838 	/* GPLL3 750MHz configuration */
3839 	gpll3_early_config.l = 47;
3840 	gpll3_early.vco_table = gpll3_p_vco_msm8937;
3841 	gpll3_early.num_vco = ARRAY_SIZE(gpll3_p_vco_msm8937);
3842 
3843 	/*
3844 	 * Set below clocks for use specific msm8937 parent map.
3845 	 */
3846 	vcodec0_clk_src.parent_map = gcc_cpp_map;
3847 	vcodec0_clk_src.clkr.hw.init = &vcodec0_clk_src_init_msm8937;
3848 
3849 	/*
3850 	 * Set below clocks for use specific msm8937 freq table.
3851 	 */
3852 	vfe0_clk_src.freq_tbl = ftbl_vfe_clk_src_msm8937;
3853 	vfe1_clk_src.freq_tbl = ftbl_vfe_clk_src_msm8937;
3854 	cpp_clk_src.freq_tbl = ftbl_cpp_clk_src_msm8937;
3855 	vcodec0_clk_src.freq_tbl = ftbl_vcodec0_clk_src_msm8937;
3856 	csi0phytimer_clk_src.freq_tbl = ftbl_csi_phytimer_clk_src_msm8937;
3857 	csi1phytimer_clk_src.freq_tbl = ftbl_csi_phytimer_clk_src_msm8937;
3858 	usb_hs_system_clk_src.freq_tbl = ftbl_usb_hs_system_clk_src_msm8937;
3859 }
3860 
gcc_msm8917_probe(struct platform_device * pdev)3861 static int gcc_msm8917_probe(struct platform_device *pdev)
3862 {
3863 	struct regmap *regmap;
3864 	const struct qcom_cc_desc *gcc_desc;
3865 
3866 	gcc_desc = of_device_get_match_data(&pdev->dev);
3867 
3868 	if (gcc_desc == &gcc_qm215_desc) {
3869 		gfx3d_clk_src.parent_map = gcc_gfx3d_map_qm215;
3870 	} else if (gcc_desc == &gcc_msm8937_desc) {
3871 		msm8937_clock_override();
3872 		gfx3d_clk_src.freq_tbl = ftbl_gfx3d_clk_src_msm8937;
3873 	}
3874 
3875 	regmap = qcom_cc_map(pdev, gcc_desc);
3876 	if (IS_ERR(regmap))
3877 		return PTR_ERR(regmap);
3878 
3879 	clk_alpha_pll_configure(&gpll3_early, regmap, &gpll3_early_config);
3880 
3881 	return qcom_cc_really_probe(&pdev->dev, gcc_desc, regmap);
3882 }
3883 
3884 static const struct of_device_id gcc_msm8917_match_table[] = {
3885 	{ .compatible = "qcom,gcc-msm8917", .data = &gcc_msm8917_desc },
3886 	{ .compatible = "qcom,gcc-qm215", .data = &gcc_qm215_desc },
3887 	{ .compatible = "qcom,gcc-msm8937", .data = &gcc_msm8937_desc },
3888 	{},
3889 };
3890 MODULE_DEVICE_TABLE(of, gcc_msm8917_match_table);
3891 
3892 static struct platform_driver gcc_msm8917_driver = {
3893 	.probe = gcc_msm8917_probe,
3894 	.driver = {
3895 		.name = "gcc-msm8917",
3896 		.of_match_table = gcc_msm8917_match_table,
3897 	},
3898 };
3899 
gcc_msm8917_init(void)3900 static int __init gcc_msm8917_init(void)
3901 {
3902 	return platform_driver_register(&gcc_msm8917_driver);
3903 }
3904 core_initcall(gcc_msm8917_init);
3905 
gcc_msm8917_exit(void)3906 static void __exit gcc_msm8917_exit(void)
3907 {
3908 	platform_driver_unregister(&gcc_msm8917_driver);
3909 }
3910 module_exit(gcc_msm8917_exit);
3911 
3912 MODULE_DESCRIPTION("Qualcomm GCC MSM8917 Driver");
3913 MODULE_LICENSE("GPL");
3914