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