xref: /openbmc/linux/drivers/clk/qcom/gcc-msm8996.c (revision 675aaf05)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (c) 2015, The Linux Foundation. All rights reserved.
4  */
5 
6 #include <linux/kernel.h>
7 #include <linux/bitops.h>
8 #include <linux/err.h>
9 #include <linux/platform_device.h>
10 #include <linux/module.h>
11 #include <linux/of.h>
12 #include <linux/of_device.h>
13 #include <linux/clk-provider.h>
14 #include <linux/regmap.h>
15 #include <linux/reset-controller.h>
16 
17 #include <dt-bindings/clock/qcom,gcc-msm8996.h>
18 
19 #include "common.h"
20 #include "clk-regmap.h"
21 #include "clk-alpha-pll.h"
22 #include "clk-rcg.h"
23 #include "clk-branch.h"
24 #include "reset.h"
25 #include "gdsc.h"
26 
27 enum {
28 	P_XO,
29 	P_GPLL0,
30 	P_GPLL2,
31 	P_GPLL3,
32 	P_GPLL1,
33 	P_GPLL2_EARLY,
34 	P_GPLL0_EARLY_DIV,
35 	P_SLEEP_CLK,
36 	P_GPLL4,
37 	P_AUD_REF_CLK,
38 	P_GPLL1_EARLY_DIV
39 };
40 
41 static const struct parent_map gcc_sleep_clk_map[] = {
42 	{ P_SLEEP_CLK, 5 }
43 };
44 
45 static const char * const gcc_sleep_clk[] = {
46 	"sleep_clk"
47 };
48 
49 static const struct parent_map gcc_xo_gpll0_map[] = {
50 	{ P_XO, 0 },
51 	{ P_GPLL0, 1 }
52 };
53 
54 static const char * const gcc_xo_gpll0[] = {
55 	"xo",
56 	"gpll0"
57 };
58 
59 static const struct parent_map gcc_xo_sleep_clk_map[] = {
60 	{ P_XO, 0 },
61 	{ P_SLEEP_CLK, 5 }
62 };
63 
64 static const char * const gcc_xo_sleep_clk[] = {
65 	"xo",
66 	"sleep_clk"
67 };
68 
69 static const struct parent_map gcc_xo_gpll0_gpll0_early_div_map[] = {
70 	{ P_XO, 0 },
71 	{ P_GPLL0, 1 },
72 	{ P_GPLL0_EARLY_DIV, 6 }
73 };
74 
75 static const char * const gcc_xo_gpll0_gpll0_early_div[] = {
76 	"xo",
77 	"gpll0",
78 	"gpll0_early_div"
79 };
80 
81 static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {
82 	{ P_XO, 0 },
83 	{ P_GPLL0, 1 },
84 	{ P_GPLL4, 5 }
85 };
86 
87 static const char * const gcc_xo_gpll0_gpll4[] = {
88 	"xo",
89 	"gpll0",
90 	"gpll4"
91 };
92 
93 static const struct parent_map gcc_xo_gpll0_aud_ref_clk_map[] = {
94 	{ P_XO, 0 },
95 	{ P_GPLL0, 1 },
96 	{ P_AUD_REF_CLK, 2 }
97 };
98 
99 static const char * const gcc_xo_gpll0_aud_ref_clk[] = {
100 	"xo",
101 	"gpll0",
102 	"aud_ref_clk"
103 };
104 
105 static const struct parent_map gcc_xo_gpll0_sleep_clk_gpll0_early_div_map[] = {
106 	{ P_XO, 0 },
107 	{ P_GPLL0, 1 },
108 	{ P_SLEEP_CLK, 5 },
109 	{ P_GPLL0_EARLY_DIV, 6 }
110 };
111 
112 static const char * const gcc_xo_gpll0_sleep_clk_gpll0_early_div[] = {
113 	"xo",
114 	"gpll0",
115 	"sleep_clk",
116 	"gpll0_early_div"
117 };
118 
119 static const struct parent_map gcc_xo_gpll0_gpll4_gpll0_early_div_map[] = {
120 	{ P_XO, 0 },
121 	{ P_GPLL0, 1 },
122 	{ P_GPLL4, 5 },
123 	{ P_GPLL0_EARLY_DIV, 6 }
124 };
125 
126 static const char * const gcc_xo_gpll0_gpll4_gpll0_early_div[] = {
127 	"xo",
128 	"gpll0",
129 	"gpll4",
130 	"gpll0_early_div"
131 };
132 
133 static const struct parent_map gcc_xo_gpll0_gpll2_gpll3_gpll0_early_div_map[] = {
134 	{ P_XO, 0 },
135 	{ P_GPLL0, 1 },
136 	{ P_GPLL2, 2 },
137 	{ P_GPLL3, 3 },
138 	{ P_GPLL0_EARLY_DIV, 6 }
139 };
140 
141 static const char * const gcc_xo_gpll0_gpll2_gpll3_gpll0_early_div[] = {
142 	"xo",
143 	"gpll0",
144 	"gpll2",
145 	"gpll3",
146 	"gpll0_early_div"
147 };
148 
149 static const struct parent_map gcc_xo_gpll0_gpll1_early_div_gpll1_gpll4_gpll0_early_div_map[] = {
150 	{ P_XO, 0 },
151 	{ P_GPLL0, 1 },
152 	{ P_GPLL1_EARLY_DIV, 3 },
153 	{ P_GPLL1, 4 },
154 	{ P_GPLL4, 5 },
155 	{ P_GPLL0_EARLY_DIV, 6 }
156 };
157 
158 static const char * const gcc_xo_gpll0_gpll1_early_div_gpll1_gpll4_gpll0_early_div[] = {
159 	"xo",
160 	"gpll0",
161 	"gpll1_early_div",
162 	"gpll1",
163 	"gpll4",
164 	"gpll0_early_div"
165 };
166 
167 static const struct parent_map gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll2_early_gpll0_early_div_map[] = {
168 	{ P_XO, 0 },
169 	{ P_GPLL0, 1 },
170 	{ P_GPLL2, 2 },
171 	{ P_GPLL3, 3 },
172 	{ P_GPLL1, 4 },
173 	{ P_GPLL2_EARLY, 5 },
174 	{ P_GPLL0_EARLY_DIV, 6 }
175 };
176 
177 static const char * const gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll2_early_gpll0_early_div[] = {
178 	"xo",
179 	"gpll0",
180 	"gpll2",
181 	"gpll3",
182 	"gpll1",
183 	"gpll2_early",
184 	"gpll0_early_div"
185 };
186 
187 static const struct parent_map gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll4_gpll0_early_div_map[] = {
188 	{ P_XO, 0 },
189 	{ P_GPLL0, 1 },
190 	{ P_GPLL2, 2 },
191 	{ P_GPLL3, 3 },
192 	{ P_GPLL1, 4 },
193 	{ P_GPLL4, 5 },
194 	{ P_GPLL0_EARLY_DIV, 6 }
195 };
196 
197 static const char * const gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll4_gpll0_early_div[] = {
198 	"xo",
199 	"gpll0",
200 	"gpll2",
201 	"gpll3",
202 	"gpll1",
203 	"gpll4",
204 	"gpll0_early_div"
205 };
206 
207 static struct clk_fixed_factor xo = {
208 	.mult = 1,
209 	.div = 1,
210 	.hw.init = &(struct clk_init_data){
211 		.name = "xo",
212 		.parent_names = (const char *[]){ "xo_board" },
213 		.num_parents = 1,
214 		.ops = &clk_fixed_factor_ops,
215 	},
216 };
217 
218 static struct clk_alpha_pll gpll0_early = {
219 	.offset = 0x00000,
220 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
221 	.clkr = {
222 		.enable_reg = 0x52000,
223 		.enable_mask = BIT(0),
224 		.hw.init = &(struct clk_init_data){
225 			.name = "gpll0_early",
226 			.parent_names = (const char *[]){ "xo" },
227 			.num_parents = 1,
228 			.ops = &clk_alpha_pll_ops,
229 		},
230 	},
231 };
232 
233 static struct clk_fixed_factor gpll0_early_div = {
234 	.mult = 1,
235 	.div = 2,
236 	.hw.init = &(struct clk_init_data){
237 		.name = "gpll0_early_div",
238 		.parent_names = (const char *[]){ "gpll0_early" },
239 		.num_parents = 1,
240 		.ops = &clk_fixed_factor_ops,
241 	},
242 };
243 
244 static struct clk_alpha_pll_postdiv gpll0 = {
245 	.offset = 0x00000,
246 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
247 	.clkr.hw.init = &(struct clk_init_data){
248 		.name = "gpll0",
249 		.parent_names = (const char *[]){ "gpll0_early" },
250 		.num_parents = 1,
251 		.ops = &clk_alpha_pll_postdiv_ops,
252 	},
253 };
254 
255 static struct clk_branch gcc_mmss_gpll0_div_clk = {
256 	.halt_check = BRANCH_HALT_DELAY,
257 	.clkr = {
258 		.enable_reg = 0x5200c,
259 		.enable_mask = BIT(0),
260 		.hw.init = &(struct clk_init_data){
261 			.name = "gcc_mmss_gpll0_div_clk",
262 			.parent_names = (const char *[]){ "gpll0" },
263 			.num_parents = 1,
264 			.flags = CLK_SET_RATE_PARENT,
265 			.ops = &clk_branch2_ops,
266 		},
267 	},
268 };
269 
270 static struct clk_branch gcc_mss_gpll0_div_clk = {
271 	.halt_check = BRANCH_HALT_DELAY,
272 	.clkr = {
273 		.enable_reg = 0x5200c,
274 		.enable_mask = BIT(2),
275 		.hw.init = &(struct clk_init_data){
276 			.name = "gcc_mss_gpll0_div_clk",
277 			.parent_names = (const char *[]){ "gpll0" },
278 			.num_parents = 1,
279 			.flags = CLK_SET_RATE_PARENT,
280 			.ops = &clk_branch2_ops
281 		},
282 	},
283 };
284 
285 static struct clk_alpha_pll gpll4_early = {
286 	.offset = 0x77000,
287 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
288 	.clkr = {
289 		.enable_reg = 0x52000,
290 		.enable_mask = BIT(4),
291 		.hw.init = &(struct clk_init_data){
292 			.name = "gpll4_early",
293 			.parent_names = (const char *[]){ "xo" },
294 			.num_parents = 1,
295 			.ops = &clk_alpha_pll_ops,
296 		},
297 	},
298 };
299 
300 static struct clk_alpha_pll_postdiv gpll4 = {
301 	.offset = 0x77000,
302 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
303 	.clkr.hw.init = &(struct clk_init_data){
304 		.name = "gpll4",
305 		.parent_names = (const char *[]){ "gpll4_early" },
306 		.num_parents = 1,
307 		.ops = &clk_alpha_pll_postdiv_ops,
308 	},
309 };
310 
311 static const struct freq_tbl ftbl_system_noc_clk_src[] = {
312 	F(19200000, P_XO, 1, 0, 0),
313 	F(50000000, P_GPLL0_EARLY_DIV, 6, 0, 0),
314 	F(100000000, P_GPLL0, 6, 0, 0),
315 	F(150000000, P_GPLL0, 4, 0, 0),
316 	F(200000000, P_GPLL0, 3, 0, 0),
317 	F(240000000, P_GPLL0, 2.5, 0, 0),
318 	{ }
319 };
320 
321 static struct clk_rcg2 system_noc_clk_src = {
322 	.cmd_rcgr = 0x0401c,
323 	.hid_width = 5,
324 	.parent_map = gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll2_early_gpll0_early_div_map,
325 	.freq_tbl = ftbl_system_noc_clk_src,
326 	.clkr.hw.init = &(struct clk_init_data){
327 		.name = "system_noc_clk_src",
328 		.parent_names = gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll2_early_gpll0_early_div,
329 		.num_parents = 7,
330 		.ops = &clk_rcg2_ops,
331 	},
332 };
333 
334 static const struct freq_tbl ftbl_config_noc_clk_src[] = {
335 	F(19200000, P_XO, 1, 0, 0),
336 	F(37500000, P_GPLL0, 16, 0, 0),
337 	F(75000000, P_GPLL0, 8, 0, 0),
338 	{ }
339 };
340 
341 static struct clk_rcg2 config_noc_clk_src = {
342 	.cmd_rcgr = 0x0500c,
343 	.hid_width = 5,
344 	.parent_map = gcc_xo_gpll0_map,
345 	.freq_tbl = ftbl_config_noc_clk_src,
346 	.clkr.hw.init = &(struct clk_init_data){
347 		.name = "config_noc_clk_src",
348 		.parent_names = gcc_xo_gpll0,
349 		.num_parents = 2,
350 		.ops = &clk_rcg2_ops,
351 	},
352 };
353 
354 static const struct freq_tbl ftbl_periph_noc_clk_src[] = {
355 	F(19200000, P_XO, 1, 0, 0),
356 	F(37500000, P_GPLL0, 16, 0, 0),
357 	F(50000000, P_GPLL0, 12, 0, 0),
358 	F(75000000, P_GPLL0, 8, 0, 0),
359 	F(100000000, P_GPLL0, 6, 0, 0),
360 	{ }
361 };
362 
363 static struct clk_rcg2 periph_noc_clk_src = {
364 	.cmd_rcgr = 0x06014,
365 	.hid_width = 5,
366 	.parent_map = gcc_xo_gpll0_map,
367 	.freq_tbl = ftbl_periph_noc_clk_src,
368 	.clkr.hw.init = &(struct clk_init_data){
369 		.name = "periph_noc_clk_src",
370 		.parent_names = gcc_xo_gpll0,
371 		.num_parents = 2,
372 		.ops = &clk_rcg2_ops,
373 	},
374 };
375 
376 static const struct freq_tbl ftbl_usb30_master_clk_src[] = {
377 	F(19200000, P_XO, 1, 0, 0),
378 	F(120000000, P_GPLL0, 5, 0, 0),
379 	F(150000000, P_GPLL0, 4, 0, 0),
380 	{ }
381 };
382 
383 static struct clk_rcg2 usb30_master_clk_src = {
384 	.cmd_rcgr = 0x0f014,
385 	.mnd_width = 8,
386 	.hid_width = 5,
387 	.parent_map = gcc_xo_gpll0_gpll0_early_div_map,
388 	.freq_tbl = ftbl_usb30_master_clk_src,
389 	.clkr.hw.init = &(struct clk_init_data){
390 		.name = "usb30_master_clk_src",
391 		.parent_names = gcc_xo_gpll0_gpll0_early_div,
392 		.num_parents = 3,
393 		.ops = &clk_rcg2_ops,
394 	},
395 };
396 
397 static const struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = {
398 	F(19200000, P_XO, 1, 0, 0),
399 	{ }
400 };
401 
402 static struct clk_rcg2 usb30_mock_utmi_clk_src = {
403 	.cmd_rcgr = 0x0f028,
404 	.hid_width = 5,
405 	.parent_map = gcc_xo_gpll0_gpll0_early_div_map,
406 	.freq_tbl = ftbl_usb30_mock_utmi_clk_src,
407 	.clkr.hw.init = &(struct clk_init_data){
408 		.name = "usb30_mock_utmi_clk_src",
409 		.parent_names = gcc_xo_gpll0_gpll0_early_div,
410 		.num_parents = 3,
411 		.ops = &clk_rcg2_ops,
412 	},
413 };
414 
415 static const struct freq_tbl ftbl_usb3_phy_aux_clk_src[] = {
416 	F(1200000, P_XO, 16, 0, 0),
417 	{ }
418 };
419 
420 static struct clk_rcg2 usb3_phy_aux_clk_src = {
421 	.cmd_rcgr = 0x5000c,
422 	.hid_width = 5,
423 	.parent_map = gcc_xo_sleep_clk_map,
424 	.freq_tbl = ftbl_usb3_phy_aux_clk_src,
425 	.clkr.hw.init = &(struct clk_init_data){
426 		.name = "usb3_phy_aux_clk_src",
427 		.parent_names = gcc_xo_sleep_clk,
428 		.num_parents = 2,
429 		.ops = &clk_rcg2_ops,
430 	},
431 };
432 
433 static const struct freq_tbl ftbl_usb20_master_clk_src[] = {
434 	F(120000000, P_GPLL0, 5, 0, 0),
435 	{ }
436 };
437 
438 static struct clk_rcg2 usb20_master_clk_src = {
439 	.cmd_rcgr = 0x12010,
440 	.mnd_width = 8,
441 	.hid_width = 5,
442 	.parent_map = gcc_xo_gpll0_gpll0_early_div_map,
443 	.freq_tbl = ftbl_usb20_master_clk_src,
444 	.clkr.hw.init = &(struct clk_init_data){
445 		.name = "usb20_master_clk_src",
446 		.parent_names = gcc_xo_gpll0_gpll0_early_div,
447 		.num_parents = 3,
448 		.ops = &clk_rcg2_ops,
449 	},
450 };
451 
452 static struct clk_rcg2 usb20_mock_utmi_clk_src = {
453 	.cmd_rcgr = 0x12024,
454 	.hid_width = 5,
455 	.parent_map = gcc_xo_gpll0_gpll0_early_div_map,
456 	.freq_tbl = ftbl_usb30_mock_utmi_clk_src,
457 	.clkr.hw.init = &(struct clk_init_data){
458 		.name = "usb20_mock_utmi_clk_src",
459 		.parent_names = gcc_xo_gpll0_gpll0_early_div,
460 		.num_parents = 3,
461 		.ops = &clk_rcg2_ops,
462 	},
463 };
464 
465 static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
466 	F(144000, P_XO, 16, 3, 25),
467 	F(400000, P_XO, 12, 1, 4),
468 	F(20000000, P_GPLL0, 15, 1, 2),
469 	F(25000000, P_GPLL0, 12, 1, 2),
470 	F(50000000, P_GPLL0, 12, 0, 0),
471 	F(96000000, P_GPLL4, 4, 0, 0),
472 	F(192000000, P_GPLL4, 2, 0, 0),
473 	F(384000000, P_GPLL4, 1, 0, 0),
474 	{ }
475 };
476 
477 static struct clk_rcg2 sdcc1_apps_clk_src = {
478 	.cmd_rcgr = 0x13010,
479 	.mnd_width = 8,
480 	.hid_width = 5,
481 	.parent_map = gcc_xo_gpll0_gpll4_gpll0_early_div_map,
482 	.freq_tbl = ftbl_sdcc1_apps_clk_src,
483 	.clkr.hw.init = &(struct clk_init_data){
484 		.name = "sdcc1_apps_clk_src",
485 		.parent_names = gcc_xo_gpll0_gpll4_gpll0_early_div,
486 		.num_parents = 4,
487 		.ops = &clk_rcg2_floor_ops,
488 	},
489 };
490 
491 static struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = {
492 	F(19200000, P_XO, 1, 0, 0),
493 	F(150000000, P_GPLL0, 4, 0, 0),
494 	F(300000000, P_GPLL0, 2, 0, 0),
495 	{ }
496 };
497 
498 static struct clk_rcg2 sdcc1_ice_core_clk_src = {
499 	.cmd_rcgr = 0x13024,
500 	.hid_width = 5,
501 	.parent_map = gcc_xo_gpll0_gpll4_gpll0_early_div_map,
502 	.freq_tbl = ftbl_sdcc1_ice_core_clk_src,
503 	.clkr.hw.init = &(struct clk_init_data){
504 		.name = "sdcc1_ice_core_clk_src",
505 		.parent_names = gcc_xo_gpll0_gpll4_gpll0_early_div,
506 		.num_parents = 4,
507 		.ops = &clk_rcg2_ops,
508 	},
509 };
510 
511 static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = {
512 	F(144000, P_XO, 16, 3, 25),
513 	F(400000, P_XO, 12, 1, 4),
514 	F(20000000, P_GPLL0, 15, 1, 2),
515 	F(25000000, P_GPLL0, 12, 1, 2),
516 	F(50000000, P_GPLL0, 12, 0, 0),
517 	F(100000000, P_GPLL0, 6, 0, 0),
518 	F(200000000, P_GPLL0, 3, 0, 0),
519 	{ }
520 };
521 
522 static struct clk_rcg2 sdcc2_apps_clk_src = {
523 	.cmd_rcgr = 0x14010,
524 	.mnd_width = 8,
525 	.hid_width = 5,
526 	.parent_map = gcc_xo_gpll0_gpll4_map,
527 	.freq_tbl = ftbl_sdcc2_apps_clk_src,
528 	.clkr.hw.init = &(struct clk_init_data){
529 		.name = "sdcc2_apps_clk_src",
530 		.parent_names = gcc_xo_gpll0_gpll4,
531 		.num_parents = 3,
532 		.ops = &clk_rcg2_floor_ops,
533 	},
534 };
535 
536 static struct clk_rcg2 sdcc3_apps_clk_src = {
537 	.cmd_rcgr = 0x15010,
538 	.mnd_width = 8,
539 	.hid_width = 5,
540 	.parent_map = gcc_xo_gpll0_gpll4_map,
541 	.freq_tbl = ftbl_sdcc2_apps_clk_src,
542 	.clkr.hw.init = &(struct clk_init_data){
543 		.name = "sdcc3_apps_clk_src",
544 		.parent_names = gcc_xo_gpll0_gpll4,
545 		.num_parents = 3,
546 		.ops = &clk_rcg2_floor_ops,
547 	},
548 };
549 
550 static const struct freq_tbl ftbl_sdcc4_apps_clk_src[] = {
551 	F(144000, P_XO, 16, 3, 25),
552 	F(400000, P_XO, 12, 1, 4),
553 	F(20000000, P_GPLL0, 15, 1, 2),
554 	F(25000000, P_GPLL0, 12, 1, 2),
555 	F(50000000, P_GPLL0, 12, 0, 0),
556 	F(100000000, P_GPLL0, 6, 0, 0),
557 	{ }
558 };
559 
560 static struct clk_rcg2 sdcc4_apps_clk_src = {
561 	.cmd_rcgr = 0x16010,
562 	.mnd_width = 8,
563 	.hid_width = 5,
564 	.parent_map = gcc_xo_gpll0_map,
565 	.freq_tbl = ftbl_sdcc4_apps_clk_src,
566 	.clkr.hw.init = &(struct clk_init_data){
567 		.name = "sdcc4_apps_clk_src",
568 		.parent_names = gcc_xo_gpll0,
569 		.num_parents = 2,
570 		.ops = &clk_rcg2_floor_ops,
571 	},
572 };
573 
574 static const struct freq_tbl ftbl_blsp1_qup1_spi_apps_clk_src[] = {
575 	F(960000, P_XO, 10, 1, 2),
576 	F(4800000, P_XO, 4, 0, 0),
577 	F(9600000, P_XO, 2, 0, 0),
578 	F(15000000, P_GPLL0, 10, 1, 4),
579 	F(19200000, P_XO, 1, 0, 0),
580 	F(25000000, P_GPLL0, 12, 1, 2),
581 	F(50000000, P_GPLL0, 12, 0, 0),
582 	{ }
583 };
584 
585 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
586 	.cmd_rcgr = 0x1900c,
587 	.mnd_width = 8,
588 	.hid_width = 5,
589 	.parent_map = gcc_xo_gpll0_map,
590 	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
591 	.clkr.hw.init = &(struct clk_init_data){
592 		.name = "blsp1_qup1_spi_apps_clk_src",
593 		.parent_names = gcc_xo_gpll0,
594 		.num_parents = 2,
595 		.ops = &clk_rcg2_ops,
596 	},
597 };
598 
599 static const struct freq_tbl ftbl_blsp1_qup1_i2c_apps_clk_src[] = {
600 	F(19200000, P_XO, 1, 0, 0),
601 	F(50000000, P_GPLL0, 12, 0, 0),
602 	{ }
603 };
604 
605 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
606 	.cmd_rcgr = 0x19020,
607 	.hid_width = 5,
608 	.parent_map = gcc_xo_gpll0_map,
609 	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
610 	.clkr.hw.init = &(struct clk_init_data){
611 		.name = "blsp1_qup1_i2c_apps_clk_src",
612 		.parent_names = gcc_xo_gpll0,
613 		.num_parents = 2,
614 		.ops = &clk_rcg2_ops,
615 	},
616 };
617 
618 static const struct freq_tbl ftbl_blsp1_uart1_apps_clk_src[] = {
619 	F(3686400, P_GPLL0, 1, 96, 15625),
620 	F(7372800, P_GPLL0, 1, 192, 15625),
621 	F(14745600, P_GPLL0, 1, 384, 15625),
622 	F(16000000, P_GPLL0, 5, 2, 15),
623 	F(19200000, P_XO, 1, 0, 0),
624 	F(24000000, P_GPLL0, 5, 1, 5),
625 	F(32000000, P_GPLL0, 1, 4, 75),
626 	F(40000000, P_GPLL0, 15, 0, 0),
627 	F(46400000, P_GPLL0, 1, 29, 375),
628 	F(48000000, P_GPLL0, 12.5, 0, 0),
629 	F(51200000, P_GPLL0, 1, 32, 375),
630 	F(56000000, P_GPLL0, 1, 7, 75),
631 	F(58982400, P_GPLL0, 1, 1536, 15625),
632 	F(60000000, P_GPLL0, 10, 0, 0),
633 	F(63157895, P_GPLL0, 9.5, 0, 0),
634 	{ }
635 };
636 
637 static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
638 	.cmd_rcgr = 0x1a00c,
639 	.mnd_width = 16,
640 	.hid_width = 5,
641 	.parent_map = gcc_xo_gpll0_map,
642 	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
643 	.clkr.hw.init = &(struct clk_init_data){
644 		.name = "blsp1_uart1_apps_clk_src",
645 		.parent_names = gcc_xo_gpll0,
646 		.num_parents = 2,
647 		.ops = &clk_rcg2_ops,
648 	},
649 };
650 
651 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
652 	.cmd_rcgr = 0x1b00c,
653 	.mnd_width = 8,
654 	.hid_width = 5,
655 	.parent_map = gcc_xo_gpll0_map,
656 	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
657 	.clkr.hw.init = &(struct clk_init_data){
658 		.name = "blsp1_qup2_spi_apps_clk_src",
659 		.parent_names = gcc_xo_gpll0,
660 		.num_parents = 2,
661 		.ops = &clk_rcg2_ops,
662 	},
663 };
664 
665 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
666 	.cmd_rcgr = 0x1b020,
667 	.hid_width = 5,
668 	.parent_map = gcc_xo_gpll0_map,
669 	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
670 	.clkr.hw.init = &(struct clk_init_data){
671 		.name = "blsp1_qup2_i2c_apps_clk_src",
672 		.parent_names = gcc_xo_gpll0,
673 		.num_parents = 2,
674 		.ops = &clk_rcg2_ops,
675 	},
676 };
677 
678 static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
679 	.cmd_rcgr = 0x1c00c,
680 	.mnd_width = 16,
681 	.hid_width = 5,
682 	.parent_map = gcc_xo_gpll0_map,
683 	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
684 	.clkr.hw.init = &(struct clk_init_data){
685 		.name = "blsp1_uart2_apps_clk_src",
686 		.parent_names = gcc_xo_gpll0,
687 		.num_parents = 2,
688 		.ops = &clk_rcg2_ops,
689 	},
690 };
691 
692 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
693 	.cmd_rcgr = 0x1d00c,
694 	.mnd_width = 8,
695 	.hid_width = 5,
696 	.parent_map = gcc_xo_gpll0_map,
697 	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
698 	.clkr.hw.init = &(struct clk_init_data){
699 		.name = "blsp1_qup3_spi_apps_clk_src",
700 		.parent_names = gcc_xo_gpll0,
701 		.num_parents = 2,
702 		.ops = &clk_rcg2_ops,
703 	},
704 };
705 
706 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
707 	.cmd_rcgr = 0x1d020,
708 	.hid_width = 5,
709 	.parent_map = gcc_xo_gpll0_map,
710 	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
711 	.clkr.hw.init = &(struct clk_init_data){
712 		.name = "blsp1_qup3_i2c_apps_clk_src",
713 		.parent_names = gcc_xo_gpll0,
714 		.num_parents = 2,
715 		.ops = &clk_rcg2_ops,
716 	},
717 };
718 
719 static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
720 	.cmd_rcgr = 0x1e00c,
721 	.mnd_width = 16,
722 	.hid_width = 5,
723 	.parent_map = gcc_xo_gpll0_map,
724 	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
725 	.clkr.hw.init = &(struct clk_init_data){
726 		.name = "blsp1_uart3_apps_clk_src",
727 		.parent_names = gcc_xo_gpll0,
728 		.num_parents = 2,
729 		.ops = &clk_rcg2_ops,
730 	},
731 };
732 
733 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
734 	.cmd_rcgr = 0x1f00c,
735 	.mnd_width = 8,
736 	.hid_width = 5,
737 	.parent_map = gcc_xo_gpll0_map,
738 	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
739 	.clkr.hw.init = &(struct clk_init_data){
740 		.name = "blsp1_qup4_spi_apps_clk_src",
741 		.parent_names = gcc_xo_gpll0,
742 		.num_parents = 2,
743 		.ops = &clk_rcg2_ops,
744 	},
745 };
746 
747 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
748 	.cmd_rcgr = 0x1f020,
749 	.hid_width = 5,
750 	.parent_map = gcc_xo_gpll0_map,
751 	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
752 	.clkr.hw.init = &(struct clk_init_data){
753 		.name = "blsp1_qup4_i2c_apps_clk_src",
754 		.parent_names = gcc_xo_gpll0,
755 		.num_parents = 2,
756 		.ops = &clk_rcg2_ops,
757 	},
758 };
759 
760 static struct clk_rcg2 blsp1_uart4_apps_clk_src = {
761 	.cmd_rcgr = 0x2000c,
762 	.mnd_width = 16,
763 	.hid_width = 5,
764 	.parent_map = gcc_xo_gpll0_map,
765 	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
766 	.clkr.hw.init = &(struct clk_init_data){
767 		.name = "blsp1_uart4_apps_clk_src",
768 		.parent_names = gcc_xo_gpll0,
769 		.num_parents = 2,
770 		.ops = &clk_rcg2_ops,
771 	},
772 };
773 
774 static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
775 	.cmd_rcgr = 0x2100c,
776 	.mnd_width = 8,
777 	.hid_width = 5,
778 	.parent_map = gcc_xo_gpll0_map,
779 	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
780 	.clkr.hw.init = &(struct clk_init_data){
781 		.name = "blsp1_qup5_spi_apps_clk_src",
782 		.parent_names = gcc_xo_gpll0,
783 		.num_parents = 2,
784 		.ops = &clk_rcg2_ops,
785 	},
786 };
787 
788 static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
789 	.cmd_rcgr = 0x21020,
790 	.hid_width = 5,
791 	.parent_map = gcc_xo_gpll0_map,
792 	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
793 	.clkr.hw.init = &(struct clk_init_data){
794 		.name = "blsp1_qup5_i2c_apps_clk_src",
795 		.parent_names = gcc_xo_gpll0,
796 		.num_parents = 2,
797 		.ops = &clk_rcg2_ops,
798 	},
799 };
800 
801 static struct clk_rcg2 blsp1_uart5_apps_clk_src = {
802 	.cmd_rcgr = 0x2200c,
803 	.mnd_width = 16,
804 	.hid_width = 5,
805 	.parent_map = gcc_xo_gpll0_map,
806 	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
807 	.clkr.hw.init = &(struct clk_init_data){
808 		.name = "blsp1_uart5_apps_clk_src",
809 		.parent_names = gcc_xo_gpll0,
810 		.num_parents = 2,
811 		.ops = &clk_rcg2_ops,
812 	},
813 };
814 
815 static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
816 	.cmd_rcgr = 0x2300c,
817 	.mnd_width = 8,
818 	.hid_width = 5,
819 	.parent_map = gcc_xo_gpll0_map,
820 	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
821 	.clkr.hw.init = &(struct clk_init_data){
822 		.name = "blsp1_qup6_spi_apps_clk_src",
823 		.parent_names = gcc_xo_gpll0,
824 		.num_parents = 2,
825 		.ops = &clk_rcg2_ops,
826 	},
827 };
828 
829 static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
830 	.cmd_rcgr = 0x23020,
831 	.hid_width = 5,
832 	.parent_map = gcc_xo_gpll0_map,
833 	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
834 	.clkr.hw.init = &(struct clk_init_data){
835 		.name = "blsp1_qup6_i2c_apps_clk_src",
836 		.parent_names = gcc_xo_gpll0,
837 		.num_parents = 2,
838 		.ops = &clk_rcg2_ops,
839 	},
840 };
841 
842 static struct clk_rcg2 blsp1_uart6_apps_clk_src = {
843 	.cmd_rcgr = 0x2400c,
844 	.mnd_width = 16,
845 	.hid_width = 5,
846 	.parent_map = gcc_xo_gpll0_map,
847 	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
848 	.clkr.hw.init = &(struct clk_init_data){
849 		.name = "blsp1_uart6_apps_clk_src",
850 		.parent_names = gcc_xo_gpll0,
851 		.num_parents = 2,
852 		.ops = &clk_rcg2_ops,
853 	},
854 };
855 
856 static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
857 	.cmd_rcgr = 0x2600c,
858 	.mnd_width = 8,
859 	.hid_width = 5,
860 	.parent_map = gcc_xo_gpll0_map,
861 	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
862 	.clkr.hw.init = &(struct clk_init_data){
863 		.name = "blsp2_qup1_spi_apps_clk_src",
864 		.parent_names = gcc_xo_gpll0,
865 		.num_parents = 2,
866 		.ops = &clk_rcg2_ops,
867 	},
868 };
869 
870 static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
871 	.cmd_rcgr = 0x26020,
872 	.hid_width = 5,
873 	.parent_map = gcc_xo_gpll0_map,
874 	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
875 	.clkr.hw.init = &(struct clk_init_data){
876 		.name = "blsp2_qup1_i2c_apps_clk_src",
877 		.parent_names = gcc_xo_gpll0,
878 		.num_parents = 2,
879 		.ops = &clk_rcg2_ops,
880 	},
881 };
882 
883 static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
884 	.cmd_rcgr = 0x2700c,
885 	.mnd_width = 16,
886 	.hid_width = 5,
887 	.parent_map = gcc_xo_gpll0_map,
888 	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
889 	.clkr.hw.init = &(struct clk_init_data){
890 		.name = "blsp2_uart1_apps_clk_src",
891 		.parent_names = gcc_xo_gpll0,
892 		.num_parents = 2,
893 		.ops = &clk_rcg2_ops,
894 	},
895 };
896 
897 static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
898 	.cmd_rcgr = 0x2800c,
899 	.mnd_width = 8,
900 	.hid_width = 5,
901 	.parent_map = gcc_xo_gpll0_map,
902 	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
903 	.clkr.hw.init = &(struct clk_init_data){
904 		.name = "blsp2_qup2_spi_apps_clk_src",
905 		.parent_names = gcc_xo_gpll0,
906 		.num_parents = 2,
907 		.ops = &clk_rcg2_ops,
908 	},
909 };
910 
911 static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
912 	.cmd_rcgr = 0x28020,
913 	.hid_width = 5,
914 	.parent_map = gcc_xo_gpll0_map,
915 	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
916 	.clkr.hw.init = &(struct clk_init_data){
917 		.name = "blsp2_qup2_i2c_apps_clk_src",
918 		.parent_names = gcc_xo_gpll0,
919 		.num_parents = 2,
920 		.ops = &clk_rcg2_ops,
921 	},
922 };
923 
924 static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
925 	.cmd_rcgr = 0x2900c,
926 	.mnd_width = 16,
927 	.hid_width = 5,
928 	.parent_map = gcc_xo_gpll0_map,
929 	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
930 	.clkr.hw.init = &(struct clk_init_data){
931 		.name = "blsp2_uart2_apps_clk_src",
932 		.parent_names = gcc_xo_gpll0,
933 		.num_parents = 2,
934 		.ops = &clk_rcg2_ops,
935 	},
936 };
937 
938 static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
939 	.cmd_rcgr = 0x2a00c,
940 	.mnd_width = 8,
941 	.hid_width = 5,
942 	.parent_map = gcc_xo_gpll0_map,
943 	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
944 	.clkr.hw.init = &(struct clk_init_data){
945 		.name = "blsp2_qup3_spi_apps_clk_src",
946 		.parent_names = gcc_xo_gpll0,
947 		.num_parents = 2,
948 		.ops = &clk_rcg2_ops,
949 	},
950 };
951 
952 static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
953 	.cmd_rcgr = 0x2a020,
954 	.hid_width = 5,
955 	.parent_map = gcc_xo_gpll0_map,
956 	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
957 	.clkr.hw.init = &(struct clk_init_data){
958 		.name = "blsp2_qup3_i2c_apps_clk_src",
959 		.parent_names = gcc_xo_gpll0,
960 		.num_parents = 2,
961 		.ops = &clk_rcg2_ops,
962 	},
963 };
964 
965 static struct clk_rcg2 blsp2_uart3_apps_clk_src = {
966 	.cmd_rcgr = 0x2b00c,
967 	.mnd_width = 16,
968 	.hid_width = 5,
969 	.parent_map = gcc_xo_gpll0_map,
970 	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
971 	.clkr.hw.init = &(struct clk_init_data){
972 		.name = "blsp2_uart3_apps_clk_src",
973 		.parent_names = gcc_xo_gpll0,
974 		.num_parents = 2,
975 		.ops = &clk_rcg2_ops,
976 	},
977 };
978 
979 static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
980 	.cmd_rcgr = 0x2c00c,
981 	.mnd_width = 8,
982 	.hid_width = 5,
983 	.parent_map = gcc_xo_gpll0_map,
984 	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
985 	.clkr.hw.init = &(struct clk_init_data){
986 		.name = "blsp2_qup4_spi_apps_clk_src",
987 		.parent_names = gcc_xo_gpll0,
988 		.num_parents = 2,
989 		.ops = &clk_rcg2_ops,
990 	},
991 };
992 
993 static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
994 	.cmd_rcgr = 0x2c020,
995 	.hid_width = 5,
996 	.parent_map = gcc_xo_gpll0_map,
997 	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
998 	.clkr.hw.init = &(struct clk_init_data){
999 		.name = "blsp2_qup4_i2c_apps_clk_src",
1000 		.parent_names = gcc_xo_gpll0,
1001 		.num_parents = 2,
1002 		.ops = &clk_rcg2_ops,
1003 	},
1004 };
1005 
1006 static struct clk_rcg2 blsp2_uart4_apps_clk_src = {
1007 	.cmd_rcgr = 0x2d00c,
1008 	.mnd_width = 16,
1009 	.hid_width = 5,
1010 	.parent_map = gcc_xo_gpll0_map,
1011 	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
1012 	.clkr.hw.init = &(struct clk_init_data){
1013 		.name = "blsp2_uart4_apps_clk_src",
1014 		.parent_names = gcc_xo_gpll0,
1015 		.num_parents = 2,
1016 		.ops = &clk_rcg2_ops,
1017 	},
1018 };
1019 
1020 static struct clk_rcg2 blsp2_qup5_spi_apps_clk_src = {
1021 	.cmd_rcgr = 0x2e00c,
1022 	.mnd_width = 8,
1023 	.hid_width = 5,
1024 	.parent_map = gcc_xo_gpll0_map,
1025 	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
1026 	.clkr.hw.init = &(struct clk_init_data){
1027 		.name = "blsp2_qup5_spi_apps_clk_src",
1028 		.parent_names = gcc_xo_gpll0,
1029 		.num_parents = 2,
1030 		.ops = &clk_rcg2_ops,
1031 	},
1032 };
1033 
1034 static struct clk_rcg2 blsp2_qup5_i2c_apps_clk_src = {
1035 	.cmd_rcgr = 0x2e020,
1036 	.hid_width = 5,
1037 	.parent_map = gcc_xo_gpll0_map,
1038 	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
1039 	.clkr.hw.init = &(struct clk_init_data){
1040 		.name = "blsp2_qup5_i2c_apps_clk_src",
1041 		.parent_names = gcc_xo_gpll0,
1042 		.num_parents = 2,
1043 		.ops = &clk_rcg2_ops,
1044 	},
1045 };
1046 
1047 static struct clk_rcg2 blsp2_uart5_apps_clk_src = {
1048 	.cmd_rcgr = 0x2f00c,
1049 	.mnd_width = 16,
1050 	.hid_width = 5,
1051 	.parent_map = gcc_xo_gpll0_map,
1052 	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
1053 	.clkr.hw.init = &(struct clk_init_data){
1054 		.name = "blsp2_uart5_apps_clk_src",
1055 		.parent_names = gcc_xo_gpll0,
1056 		.num_parents = 2,
1057 		.ops = &clk_rcg2_ops,
1058 	},
1059 };
1060 
1061 static struct clk_rcg2 blsp2_qup6_spi_apps_clk_src = {
1062 	.cmd_rcgr = 0x3000c,
1063 	.mnd_width = 8,
1064 	.hid_width = 5,
1065 	.parent_map = gcc_xo_gpll0_map,
1066 	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
1067 	.clkr.hw.init = &(struct clk_init_data){
1068 		.name = "blsp2_qup6_spi_apps_clk_src",
1069 		.parent_names = gcc_xo_gpll0,
1070 		.num_parents = 2,
1071 		.ops = &clk_rcg2_ops,
1072 	},
1073 };
1074 
1075 static struct clk_rcg2 blsp2_qup6_i2c_apps_clk_src = {
1076 	.cmd_rcgr = 0x30020,
1077 	.hid_width = 5,
1078 	.parent_map = gcc_xo_gpll0_map,
1079 	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
1080 	.clkr.hw.init = &(struct clk_init_data){
1081 		.name = "blsp2_qup6_i2c_apps_clk_src",
1082 		.parent_names = gcc_xo_gpll0,
1083 		.num_parents = 2,
1084 		.ops = &clk_rcg2_ops,
1085 	},
1086 };
1087 
1088 static struct clk_rcg2 blsp2_uart6_apps_clk_src = {
1089 	.cmd_rcgr = 0x3100c,
1090 	.mnd_width = 16,
1091 	.hid_width = 5,
1092 	.parent_map = gcc_xo_gpll0_map,
1093 	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
1094 	.clkr.hw.init = &(struct clk_init_data){
1095 		.name = "blsp2_uart6_apps_clk_src",
1096 		.parent_names = gcc_xo_gpll0,
1097 		.num_parents = 2,
1098 		.ops = &clk_rcg2_ops,
1099 	},
1100 };
1101 
1102 static const struct freq_tbl ftbl_pdm2_clk_src[] = {
1103 	F(60000000, P_GPLL0, 10, 0, 0),
1104 	{ }
1105 };
1106 
1107 static struct clk_rcg2 pdm2_clk_src = {
1108 	.cmd_rcgr = 0x33010,
1109 	.hid_width = 5,
1110 	.parent_map = gcc_xo_gpll0_map,
1111 	.freq_tbl = ftbl_pdm2_clk_src,
1112 	.clkr.hw.init = &(struct clk_init_data){
1113 		.name = "pdm2_clk_src",
1114 		.parent_names = gcc_xo_gpll0,
1115 		.num_parents = 2,
1116 		.ops = &clk_rcg2_ops,
1117 	},
1118 };
1119 
1120 static const struct freq_tbl ftbl_tsif_ref_clk_src[] = {
1121 	F(105495, P_XO, 1, 1, 182),
1122 	{ }
1123 };
1124 
1125 static struct clk_rcg2 tsif_ref_clk_src = {
1126 	.cmd_rcgr = 0x36010,
1127 	.mnd_width = 8,
1128 	.hid_width = 5,
1129 	.parent_map = gcc_xo_gpll0_aud_ref_clk_map,
1130 	.freq_tbl = ftbl_tsif_ref_clk_src,
1131 	.clkr.hw.init = &(struct clk_init_data){
1132 		.name = "tsif_ref_clk_src",
1133 		.parent_names = gcc_xo_gpll0_aud_ref_clk,
1134 		.num_parents = 3,
1135 		.ops = &clk_rcg2_ops,
1136 	},
1137 };
1138 
1139 static struct clk_rcg2 gcc_sleep_clk_src = {
1140 	.cmd_rcgr = 0x43014,
1141 	.hid_width = 5,
1142 	.parent_map = gcc_sleep_clk_map,
1143 	.clkr.hw.init = &(struct clk_init_data){
1144 		.name = "gcc_sleep_clk_src",
1145 		.parent_names = gcc_sleep_clk,
1146 		.num_parents = 1,
1147 		.ops = &clk_rcg2_ops,
1148 	},
1149 };
1150 
1151 static struct clk_rcg2 hmss_rbcpr_clk_src = {
1152 	.cmd_rcgr = 0x48040,
1153 	.hid_width = 5,
1154 	.parent_map = gcc_xo_gpll0_map,
1155 	.freq_tbl = ftbl_usb30_mock_utmi_clk_src,
1156 	.clkr.hw.init = &(struct clk_init_data){
1157 		.name = "hmss_rbcpr_clk_src",
1158 		.parent_names = gcc_xo_gpll0,
1159 		.num_parents = 2,
1160 		.ops = &clk_rcg2_ops,
1161 	},
1162 };
1163 
1164 static struct clk_rcg2 hmss_gpll0_clk_src = {
1165 	.cmd_rcgr = 0x48058,
1166 	.hid_width = 5,
1167 	.parent_map = gcc_xo_gpll0_map,
1168 	.clkr.hw.init = &(struct clk_init_data){
1169 		.name = "hmss_gpll0_clk_src",
1170 		.parent_names = gcc_xo_gpll0,
1171 		.num_parents = 2,
1172 		.ops = &clk_rcg2_ops,
1173 	},
1174 };
1175 
1176 static const struct freq_tbl ftbl_gp1_clk_src[] = {
1177 	F(19200000, P_XO, 1, 0, 0),
1178 	F(100000000, P_GPLL0, 6, 0, 0),
1179 	F(200000000, P_GPLL0, 3, 0, 0),
1180 	{ }
1181 };
1182 
1183 static struct clk_rcg2 gp1_clk_src = {
1184 	.cmd_rcgr = 0x64004,
1185 	.mnd_width = 8,
1186 	.hid_width = 5,
1187 	.parent_map = gcc_xo_gpll0_sleep_clk_gpll0_early_div_map,
1188 	.freq_tbl = ftbl_gp1_clk_src,
1189 	.clkr.hw.init = &(struct clk_init_data){
1190 		.name = "gp1_clk_src",
1191 		.parent_names = gcc_xo_gpll0_sleep_clk_gpll0_early_div,
1192 		.num_parents = 4,
1193 		.ops = &clk_rcg2_ops,
1194 	},
1195 };
1196 
1197 static struct clk_rcg2 gp2_clk_src = {
1198 	.cmd_rcgr = 0x65004,
1199 	.mnd_width = 8,
1200 	.hid_width = 5,
1201 	.parent_map = gcc_xo_gpll0_sleep_clk_gpll0_early_div_map,
1202 	.freq_tbl = ftbl_gp1_clk_src,
1203 	.clkr.hw.init = &(struct clk_init_data){
1204 		.name = "gp2_clk_src",
1205 		.parent_names = gcc_xo_gpll0_sleep_clk_gpll0_early_div,
1206 		.num_parents = 4,
1207 		.ops = &clk_rcg2_ops,
1208 	},
1209 };
1210 
1211 static struct clk_rcg2 gp3_clk_src = {
1212 	.cmd_rcgr = 0x66004,
1213 	.mnd_width = 8,
1214 	.hid_width = 5,
1215 	.parent_map = gcc_xo_gpll0_sleep_clk_gpll0_early_div_map,
1216 	.freq_tbl = ftbl_gp1_clk_src,
1217 	.clkr.hw.init = &(struct clk_init_data){
1218 		.name = "gp3_clk_src",
1219 		.parent_names = gcc_xo_gpll0_sleep_clk_gpll0_early_div,
1220 		.num_parents = 4,
1221 		.ops = &clk_rcg2_ops,
1222 	},
1223 };
1224 
1225 static const struct freq_tbl ftbl_pcie_aux_clk_src[] = {
1226 	F(1010526, P_XO, 1, 1, 19),
1227 	{ }
1228 };
1229 
1230 static struct clk_rcg2 pcie_aux_clk_src = {
1231 	.cmd_rcgr = 0x6c000,
1232 	.mnd_width = 16,
1233 	.hid_width = 5,
1234 	.parent_map = gcc_xo_sleep_clk_map,
1235 	.freq_tbl = ftbl_pcie_aux_clk_src,
1236 	.clkr.hw.init = &(struct clk_init_data){
1237 		.name = "pcie_aux_clk_src",
1238 		.parent_names = gcc_xo_sleep_clk,
1239 		.num_parents = 2,
1240 		.ops = &clk_rcg2_ops,
1241 	},
1242 };
1243 
1244 static const struct freq_tbl ftbl_ufs_axi_clk_src[] = {
1245 	F(100000000, P_GPLL0, 6, 0, 0),
1246 	F(200000000, P_GPLL0, 3, 0, 0),
1247 	F(240000000, P_GPLL0, 2.5, 0, 0),
1248 	{ }
1249 };
1250 
1251 static struct clk_rcg2 ufs_axi_clk_src = {
1252 	.cmd_rcgr = 0x75024,
1253 	.mnd_width = 8,
1254 	.hid_width = 5,
1255 	.parent_map = gcc_xo_gpll0_map,
1256 	.freq_tbl = ftbl_ufs_axi_clk_src,
1257 	.clkr.hw.init = &(struct clk_init_data){
1258 		.name = "ufs_axi_clk_src",
1259 		.parent_names = gcc_xo_gpll0,
1260 		.num_parents = 2,
1261 		.ops = &clk_rcg2_ops,
1262 	},
1263 };
1264 
1265 static const struct freq_tbl ftbl_ufs_ice_core_clk_src[] = {
1266 	F(19200000, P_XO, 1, 0, 0),
1267 	F(150000000, P_GPLL0, 4, 0, 0),
1268 	F(300000000, P_GPLL0, 2, 0, 0),
1269 	{ }
1270 };
1271 
1272 static struct clk_rcg2 ufs_ice_core_clk_src = {
1273 	.cmd_rcgr = 0x76014,
1274 	.hid_width = 5,
1275 	.parent_map = gcc_xo_gpll0_map,
1276 	.freq_tbl = ftbl_ufs_ice_core_clk_src,
1277 	.clkr.hw.init = &(struct clk_init_data){
1278 		.name = "ufs_ice_core_clk_src",
1279 		.parent_names = gcc_xo_gpll0,
1280 		.num_parents = 2,
1281 		.ops = &clk_rcg2_ops,
1282 	},
1283 };
1284 
1285 static const struct freq_tbl ftbl_qspi_ser_clk_src[] = {
1286 	F(75000000, P_GPLL0, 8, 0, 0),
1287 	F(150000000, P_GPLL0, 4, 0, 0),
1288 	F(256000000, P_GPLL4, 1.5, 0, 0),
1289 	F(300000000, P_GPLL0, 2, 0, 0),
1290 	{ }
1291 };
1292 
1293 static struct clk_rcg2 qspi_ser_clk_src = {
1294 	.cmd_rcgr = 0x8b00c,
1295 	.hid_width = 5,
1296 	.parent_map = gcc_xo_gpll0_gpll1_early_div_gpll1_gpll4_gpll0_early_div_map,
1297 	.freq_tbl = ftbl_qspi_ser_clk_src,
1298 	.clkr.hw.init = &(struct clk_init_data){
1299 		.name = "qspi_ser_clk_src",
1300 		.parent_names = gcc_xo_gpll0_gpll1_early_div_gpll1_gpll4_gpll0_early_div,
1301 		.num_parents = 6,
1302 		.ops = &clk_rcg2_ops,
1303 	},
1304 };
1305 
1306 static struct clk_branch gcc_sys_noc_usb3_axi_clk = {
1307 	.halt_reg = 0x0f03c,
1308 	.clkr = {
1309 		.enable_reg = 0x0f03c,
1310 		.enable_mask = BIT(0),
1311 		.hw.init = &(struct clk_init_data){
1312 			.name = "gcc_sys_noc_usb3_axi_clk",
1313 			.parent_names = (const char *[]){ "usb30_master_clk_src" },
1314 			.num_parents = 1,
1315 			.flags = CLK_SET_RATE_PARENT,
1316 			.ops = &clk_branch2_ops,
1317 		},
1318 	},
1319 };
1320 
1321 static struct clk_branch gcc_sys_noc_ufs_axi_clk = {
1322 	.halt_reg = 0x75038,
1323 	.clkr = {
1324 		.enable_reg = 0x75038,
1325 		.enable_mask = BIT(0),
1326 		.hw.init = &(struct clk_init_data){
1327 			.name = "gcc_sys_noc_ufs_axi_clk",
1328 			.parent_names = (const char *[]){ "ufs_axi_clk_src" },
1329 			.num_parents = 1,
1330 			.flags = CLK_SET_RATE_PARENT,
1331 			.ops = &clk_branch2_ops,
1332 		},
1333 	},
1334 };
1335 
1336 static struct clk_branch gcc_periph_noc_usb20_ahb_clk = {
1337 	.halt_reg = 0x6010,
1338 	.clkr = {
1339 		.enable_reg = 0x6010,
1340 		.enable_mask = BIT(0),
1341 		.hw.init = &(struct clk_init_data){
1342 			.name = "gcc_periph_noc_usb20_ahb_clk",
1343 			.parent_names = (const char *[]){ "usb20_master_clk_src" },
1344 			.num_parents = 1,
1345 			.flags = CLK_SET_RATE_PARENT,
1346 			.ops = &clk_branch2_ops,
1347 		},
1348 	},
1349 };
1350 
1351 static struct clk_branch gcc_mmss_noc_cfg_ahb_clk = {
1352 	.halt_reg = 0x9008,
1353 	.clkr = {
1354 		.enable_reg = 0x9008,
1355 		.enable_mask = BIT(0),
1356 		.hw.init = &(struct clk_init_data){
1357 			.name = "gcc_mmss_noc_cfg_ahb_clk",
1358 			.parent_names = (const char *[]){ "config_noc_clk_src" },
1359 			.num_parents = 1,
1360 			.flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
1361 			.ops = &clk_branch2_ops,
1362 		},
1363 	},
1364 };
1365 
1366 static struct clk_branch gcc_mmss_bimc_gfx_clk = {
1367 	.halt_reg = 0x9010,
1368 	.clkr = {
1369 		.enable_reg = 0x9010,
1370 		.enable_mask = BIT(0),
1371 		.hw.init = &(struct clk_init_data){
1372 			.name = "gcc_mmss_bimc_gfx_clk",
1373 			.flags = CLK_SET_RATE_PARENT,
1374 			.ops = &clk_branch2_ops,
1375 		},
1376 	},
1377 };
1378 
1379 static struct clk_branch gcc_usb30_master_clk = {
1380 	.halt_reg = 0x0f008,
1381 	.clkr = {
1382 		.enable_reg = 0x0f008,
1383 		.enable_mask = BIT(0),
1384 		.hw.init = &(struct clk_init_data){
1385 			.name = "gcc_usb30_master_clk",
1386 			.parent_names = (const char *[]){ "usb30_master_clk_src" },
1387 			.num_parents = 1,
1388 			.flags = CLK_SET_RATE_PARENT,
1389 			.ops = &clk_branch2_ops,
1390 		},
1391 	},
1392 };
1393 
1394 static struct clk_branch gcc_usb30_sleep_clk = {
1395 	.halt_reg = 0x0f00c,
1396 	.clkr = {
1397 		.enable_reg = 0x0f00c,
1398 		.enable_mask = BIT(0),
1399 		.hw.init = &(struct clk_init_data){
1400 			.name = "gcc_usb30_sleep_clk",
1401 			.parent_names = (const char *[]){ "gcc_sleep_clk_src" },
1402 			.num_parents = 1,
1403 			.flags = CLK_SET_RATE_PARENT,
1404 			.ops = &clk_branch2_ops,
1405 		},
1406 	},
1407 };
1408 
1409 static struct clk_branch gcc_usb30_mock_utmi_clk = {
1410 	.halt_reg = 0x0f010,
1411 	.clkr = {
1412 		.enable_reg = 0x0f010,
1413 		.enable_mask = BIT(0),
1414 		.hw.init = &(struct clk_init_data){
1415 			.name = "gcc_usb30_mock_utmi_clk",
1416 			.parent_names = (const char *[]){ "usb30_mock_utmi_clk_src" },
1417 			.num_parents = 1,
1418 			.flags = CLK_SET_RATE_PARENT,
1419 			.ops = &clk_branch2_ops,
1420 		},
1421 	},
1422 };
1423 
1424 static struct clk_branch gcc_usb3_phy_aux_clk = {
1425 	.halt_reg = 0x50000,
1426 	.clkr = {
1427 		.enable_reg = 0x50000,
1428 		.enable_mask = BIT(0),
1429 		.hw.init = &(struct clk_init_data){
1430 			.name = "gcc_usb3_phy_aux_clk",
1431 			.parent_names = (const char *[]){ "usb3_phy_aux_clk_src" },
1432 			.num_parents = 1,
1433 			.flags = CLK_SET_RATE_PARENT,
1434 			.ops = &clk_branch2_ops,
1435 		},
1436 	},
1437 };
1438 
1439 static struct clk_branch gcc_usb3_phy_pipe_clk = {
1440 	.halt_reg = 0x50004,
1441 	.halt_check = BRANCH_HALT_SKIP,
1442 	.clkr = {
1443 		.enable_reg = 0x50004,
1444 		.enable_mask = BIT(0),
1445 		.hw.init = &(struct clk_init_data){
1446 			.name = "gcc_usb3_phy_pipe_clk",
1447 			.parent_names = (const char *[]){ "usb3_phy_pipe_clk_src" },
1448 			.num_parents = 1,
1449 			.flags = CLK_SET_RATE_PARENT,
1450 			.ops = &clk_branch2_ops,
1451 		},
1452 	},
1453 };
1454 
1455 static struct clk_branch gcc_usb20_master_clk = {
1456 	.halt_reg = 0x12004,
1457 	.clkr = {
1458 		.enable_reg = 0x12004,
1459 		.enable_mask = BIT(0),
1460 		.hw.init = &(struct clk_init_data){
1461 			.name = "gcc_usb20_master_clk",
1462 			.parent_names = (const char *[]){ "usb20_master_clk_src" },
1463 			.num_parents = 1,
1464 			.flags = CLK_SET_RATE_PARENT,
1465 			.ops = &clk_branch2_ops,
1466 		},
1467 	},
1468 };
1469 
1470 static struct clk_branch gcc_usb20_sleep_clk = {
1471 	.halt_reg = 0x12008,
1472 	.clkr = {
1473 		.enable_reg = 0x12008,
1474 		.enable_mask = BIT(0),
1475 		.hw.init = &(struct clk_init_data){
1476 			.name = "gcc_usb20_sleep_clk",
1477 			.parent_names = (const char *[]){ "gcc_sleep_clk_src" },
1478 			.num_parents = 1,
1479 			.flags = CLK_SET_RATE_PARENT,
1480 			.ops = &clk_branch2_ops,
1481 		},
1482 	},
1483 };
1484 
1485 static struct clk_branch gcc_usb20_mock_utmi_clk = {
1486 	.halt_reg = 0x1200c,
1487 	.clkr = {
1488 		.enable_reg = 0x1200c,
1489 		.enable_mask = BIT(0),
1490 		.hw.init = &(struct clk_init_data){
1491 			.name = "gcc_usb20_mock_utmi_clk",
1492 			.parent_names = (const char *[]){ "usb20_mock_utmi_clk_src" },
1493 			.num_parents = 1,
1494 			.flags = CLK_SET_RATE_PARENT,
1495 			.ops = &clk_branch2_ops,
1496 		},
1497 	},
1498 };
1499 
1500 static struct clk_branch gcc_usb_phy_cfg_ahb2phy_clk = {
1501 	.halt_reg = 0x6a004,
1502 	.clkr = {
1503 		.enable_reg = 0x6a004,
1504 		.enable_mask = BIT(0),
1505 		.hw.init = &(struct clk_init_data){
1506 			.name = "gcc_usb_phy_cfg_ahb2phy_clk",
1507 			.parent_names = (const char *[]){ "periph_noc_clk_src" },
1508 			.num_parents = 1,
1509 			.flags = CLK_SET_RATE_PARENT,
1510 			.ops = &clk_branch2_ops,
1511 		},
1512 	},
1513 };
1514 
1515 static struct clk_branch gcc_sdcc1_apps_clk = {
1516 	.halt_reg = 0x13004,
1517 	.clkr = {
1518 		.enable_reg = 0x13004,
1519 		.enable_mask = BIT(0),
1520 		.hw.init = &(struct clk_init_data){
1521 			.name = "gcc_sdcc1_apps_clk",
1522 			.parent_names = (const char *[]){ "sdcc1_apps_clk_src" },
1523 			.num_parents = 1,
1524 			.flags = CLK_SET_RATE_PARENT,
1525 			.ops = &clk_branch2_ops,
1526 		},
1527 	},
1528 };
1529 
1530 static struct clk_branch gcc_sdcc1_ahb_clk = {
1531 	.halt_reg = 0x13008,
1532 	.clkr = {
1533 		.enable_reg = 0x13008,
1534 		.enable_mask = BIT(0),
1535 		.hw.init = &(struct clk_init_data){
1536 			.name = "gcc_sdcc1_ahb_clk",
1537 			.parent_names = (const char *[]){ "periph_noc_clk_src" },
1538 			.num_parents = 1,
1539 			.flags = CLK_SET_RATE_PARENT,
1540 			.ops = &clk_branch2_ops,
1541 		},
1542 	},
1543 };
1544 
1545 static struct clk_branch gcc_sdcc1_ice_core_clk = {
1546 	.halt_reg = 0x13038,
1547 	.clkr = {
1548 		.enable_reg = 0x13038,
1549 		.enable_mask = BIT(0),
1550 		.hw.init = &(struct clk_init_data){
1551 			.name = "gcc_sdcc1_ice_core_clk",
1552 			.parent_names = (const char *[]){ "sdcc1_ice_core_clk_src" },
1553 			.num_parents = 1,
1554 			.flags = CLK_SET_RATE_PARENT,
1555 			.ops = &clk_branch2_ops,
1556 		},
1557 	},
1558 };
1559 
1560 static struct clk_branch gcc_sdcc2_apps_clk = {
1561 	.halt_reg = 0x14004,
1562 	.clkr = {
1563 		.enable_reg = 0x14004,
1564 		.enable_mask = BIT(0),
1565 		.hw.init = &(struct clk_init_data){
1566 			.name = "gcc_sdcc2_apps_clk",
1567 			.parent_names = (const char *[]){ "sdcc2_apps_clk_src" },
1568 			.num_parents = 1,
1569 			.flags = CLK_SET_RATE_PARENT,
1570 			.ops = &clk_branch2_ops,
1571 		},
1572 	},
1573 };
1574 
1575 static struct clk_branch gcc_sdcc2_ahb_clk = {
1576 	.halt_reg = 0x14008,
1577 	.clkr = {
1578 		.enable_reg = 0x14008,
1579 		.enable_mask = BIT(0),
1580 		.hw.init = &(struct clk_init_data){
1581 			.name = "gcc_sdcc2_ahb_clk",
1582 			.parent_names = (const char *[]){ "periph_noc_clk_src" },
1583 			.num_parents = 1,
1584 			.flags = CLK_SET_RATE_PARENT,
1585 			.ops = &clk_branch2_ops,
1586 		},
1587 	},
1588 };
1589 
1590 static struct clk_branch gcc_sdcc3_apps_clk = {
1591 	.halt_reg = 0x15004,
1592 	.clkr = {
1593 		.enable_reg = 0x15004,
1594 		.enable_mask = BIT(0),
1595 		.hw.init = &(struct clk_init_data){
1596 			.name = "gcc_sdcc3_apps_clk",
1597 			.parent_names = (const char *[]){ "sdcc3_apps_clk_src" },
1598 			.num_parents = 1,
1599 			.flags = CLK_SET_RATE_PARENT,
1600 			.ops = &clk_branch2_ops,
1601 		},
1602 	},
1603 };
1604 
1605 static struct clk_branch gcc_sdcc3_ahb_clk = {
1606 	.halt_reg = 0x15008,
1607 	.clkr = {
1608 		.enable_reg = 0x15008,
1609 		.enable_mask = BIT(0),
1610 		.hw.init = &(struct clk_init_data){
1611 			.name = "gcc_sdcc3_ahb_clk",
1612 			.parent_names = (const char *[]){ "periph_noc_clk_src" },
1613 			.num_parents = 1,
1614 			.flags = CLK_SET_RATE_PARENT,
1615 			.ops = &clk_branch2_ops,
1616 		},
1617 	},
1618 };
1619 
1620 static struct clk_branch gcc_sdcc4_apps_clk = {
1621 	.halt_reg = 0x16004,
1622 	.clkr = {
1623 		.enable_reg = 0x16004,
1624 		.enable_mask = BIT(0),
1625 		.hw.init = &(struct clk_init_data){
1626 			.name = "gcc_sdcc4_apps_clk",
1627 			.parent_names = (const char *[]){ "sdcc4_apps_clk_src" },
1628 			.num_parents = 1,
1629 			.flags = CLK_SET_RATE_PARENT,
1630 			.ops = &clk_branch2_ops,
1631 		},
1632 	},
1633 };
1634 
1635 static struct clk_branch gcc_sdcc4_ahb_clk = {
1636 	.halt_reg = 0x16008,
1637 	.clkr = {
1638 		.enable_reg = 0x16008,
1639 		.enable_mask = BIT(0),
1640 		.hw.init = &(struct clk_init_data){
1641 			.name = "gcc_sdcc4_ahb_clk",
1642 			.parent_names = (const char *[]){ "periph_noc_clk_src" },
1643 			.num_parents = 1,
1644 			.flags = CLK_SET_RATE_PARENT,
1645 			.ops = &clk_branch2_ops,
1646 		},
1647 	},
1648 };
1649 
1650 static struct clk_branch gcc_blsp1_ahb_clk = {
1651 	.halt_reg = 0x17004,
1652 	.halt_check = BRANCH_HALT_VOTED,
1653 	.clkr = {
1654 		.enable_reg = 0x52004,
1655 		.enable_mask = BIT(17),
1656 		.hw.init = &(struct clk_init_data){
1657 			.name = "gcc_blsp1_ahb_clk",
1658 			.parent_names = (const char *[]){ "periph_noc_clk_src" },
1659 			.num_parents = 1,
1660 			.flags = CLK_SET_RATE_PARENT,
1661 			.ops = &clk_branch2_ops,
1662 		},
1663 	},
1664 };
1665 
1666 static struct clk_branch gcc_blsp1_sleep_clk = {
1667 	.halt_reg = 0x17008,
1668 	.halt_check = BRANCH_HALT_VOTED,
1669 	.clkr = {
1670 		.enable_reg = 0x52004,
1671 		.enable_mask = BIT(16),
1672 		.hw.init = &(struct clk_init_data){
1673 			.name = "gcc_blsp1_sleep_clk",
1674 			.parent_names = (const char *[]){ "gcc_sleep_clk_src" },
1675 			.num_parents = 1,
1676 			.flags = CLK_SET_RATE_PARENT,
1677 			.ops = &clk_branch2_ops,
1678 		},
1679 	},
1680 };
1681 
1682 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1683 	.halt_reg = 0x19004,
1684 	.clkr = {
1685 		.enable_reg = 0x19004,
1686 		.enable_mask = BIT(0),
1687 		.hw.init = &(struct clk_init_data){
1688 			.name = "gcc_blsp1_qup1_spi_apps_clk",
1689 			.parent_names = (const char *[]){ "blsp1_qup1_spi_apps_clk_src" },
1690 			.num_parents = 1,
1691 			.flags = CLK_SET_RATE_PARENT,
1692 			.ops = &clk_branch2_ops,
1693 		},
1694 	},
1695 };
1696 
1697 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1698 	.halt_reg = 0x19008,
1699 	.clkr = {
1700 		.enable_reg = 0x19008,
1701 		.enable_mask = BIT(0),
1702 		.hw.init = &(struct clk_init_data){
1703 			.name = "gcc_blsp1_qup1_i2c_apps_clk",
1704 			.parent_names = (const char *[]){ "blsp1_qup1_i2c_apps_clk_src" },
1705 			.num_parents = 1,
1706 			.flags = CLK_SET_RATE_PARENT,
1707 			.ops = &clk_branch2_ops,
1708 		},
1709 	},
1710 };
1711 
1712 static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1713 	.halt_reg = 0x1a004,
1714 	.clkr = {
1715 		.enable_reg = 0x1a004,
1716 		.enable_mask = BIT(0),
1717 		.hw.init = &(struct clk_init_data){
1718 			.name = "gcc_blsp1_uart1_apps_clk",
1719 			.parent_names = (const char *[]){ "blsp1_uart1_apps_clk_src" },
1720 			.num_parents = 1,
1721 			.flags = CLK_SET_RATE_PARENT,
1722 			.ops = &clk_branch2_ops,
1723 		},
1724 	},
1725 };
1726 
1727 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1728 	.halt_reg = 0x1b004,
1729 	.clkr = {
1730 		.enable_reg = 0x1b004,
1731 		.enable_mask = BIT(0),
1732 		.hw.init = &(struct clk_init_data){
1733 			.name = "gcc_blsp1_qup2_spi_apps_clk",
1734 			.parent_names = (const char *[]){ "blsp1_qup2_spi_apps_clk_src" },
1735 			.num_parents = 1,
1736 			.flags = CLK_SET_RATE_PARENT,
1737 			.ops = &clk_branch2_ops,
1738 		},
1739 	},
1740 };
1741 
1742 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1743 	.halt_reg = 0x1b008,
1744 	.clkr = {
1745 		.enable_reg = 0x1b008,
1746 		.enable_mask = BIT(0),
1747 		.hw.init = &(struct clk_init_data){
1748 			.name = "gcc_blsp1_qup2_i2c_apps_clk",
1749 			.parent_names = (const char *[]){ "blsp1_qup2_i2c_apps_clk_src" },
1750 			.num_parents = 1,
1751 			.flags = CLK_SET_RATE_PARENT,
1752 			.ops = &clk_branch2_ops,
1753 		},
1754 	},
1755 };
1756 
1757 static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1758 	.halt_reg = 0x1c004,
1759 	.clkr = {
1760 		.enable_reg = 0x1c004,
1761 		.enable_mask = BIT(0),
1762 		.hw.init = &(struct clk_init_data){
1763 			.name = "gcc_blsp1_uart2_apps_clk",
1764 			.parent_names = (const char *[]){ "blsp1_uart2_apps_clk_src" },
1765 			.num_parents = 1,
1766 			.flags = CLK_SET_RATE_PARENT,
1767 			.ops = &clk_branch2_ops,
1768 		},
1769 	},
1770 };
1771 
1772 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1773 	.halt_reg = 0x1d004,
1774 	.clkr = {
1775 		.enable_reg = 0x1d004,
1776 		.enable_mask = BIT(0),
1777 		.hw.init = &(struct clk_init_data){
1778 			.name = "gcc_blsp1_qup3_spi_apps_clk",
1779 			.parent_names = (const char *[]){ "blsp1_qup3_spi_apps_clk_src" },
1780 			.num_parents = 1,
1781 			.flags = CLK_SET_RATE_PARENT,
1782 			.ops = &clk_branch2_ops,
1783 		},
1784 	},
1785 };
1786 
1787 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1788 	.halt_reg = 0x1d008,
1789 	.clkr = {
1790 		.enable_reg = 0x1d008,
1791 		.enable_mask = BIT(0),
1792 		.hw.init = &(struct clk_init_data){
1793 			.name = "gcc_blsp1_qup3_i2c_apps_clk",
1794 			.parent_names = (const char *[]){ "blsp1_qup3_i2c_apps_clk_src" },
1795 			.num_parents = 1,
1796 			.flags = CLK_SET_RATE_PARENT,
1797 			.ops = &clk_branch2_ops,
1798 		},
1799 	},
1800 };
1801 
1802 static struct clk_branch gcc_blsp1_uart3_apps_clk = {
1803 	.halt_reg = 0x1e004,
1804 	.clkr = {
1805 		.enable_reg = 0x1e004,
1806 		.enable_mask = BIT(0),
1807 		.hw.init = &(struct clk_init_data){
1808 			.name = "gcc_blsp1_uart3_apps_clk",
1809 			.parent_names = (const char *[]){ "blsp1_uart3_apps_clk_src" },
1810 			.num_parents = 1,
1811 			.flags = CLK_SET_RATE_PARENT,
1812 			.ops = &clk_branch2_ops,
1813 		},
1814 	},
1815 };
1816 
1817 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1818 	.halt_reg = 0x1f004,
1819 	.clkr = {
1820 		.enable_reg = 0x1f004,
1821 		.enable_mask = BIT(0),
1822 		.hw.init = &(struct clk_init_data){
1823 			.name = "gcc_blsp1_qup4_spi_apps_clk",
1824 			.parent_names = (const char *[]){ "blsp1_qup4_spi_apps_clk_src" },
1825 			.num_parents = 1,
1826 			.flags = CLK_SET_RATE_PARENT,
1827 			.ops = &clk_branch2_ops,
1828 		},
1829 	},
1830 };
1831 
1832 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1833 	.halt_reg = 0x1f008,
1834 	.clkr = {
1835 		.enable_reg = 0x1f008,
1836 		.enable_mask = BIT(0),
1837 		.hw.init = &(struct clk_init_data){
1838 			.name = "gcc_blsp1_qup4_i2c_apps_clk",
1839 			.parent_names = (const char *[]){ "blsp1_qup4_i2c_apps_clk_src" },
1840 			.num_parents = 1,
1841 			.flags = CLK_SET_RATE_PARENT,
1842 			.ops = &clk_branch2_ops,
1843 		},
1844 	},
1845 };
1846 
1847 static struct clk_branch gcc_blsp1_uart4_apps_clk = {
1848 	.halt_reg = 0x20004,
1849 	.clkr = {
1850 		.enable_reg = 0x20004,
1851 		.enable_mask = BIT(0),
1852 		.hw.init = &(struct clk_init_data){
1853 			.name = "gcc_blsp1_uart4_apps_clk",
1854 			.parent_names = (const char *[]){ "blsp1_uart4_apps_clk_src" },
1855 			.num_parents = 1,
1856 			.flags = CLK_SET_RATE_PARENT,
1857 			.ops = &clk_branch2_ops,
1858 		},
1859 	},
1860 };
1861 
1862 static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
1863 	.halt_reg = 0x21004,
1864 	.clkr = {
1865 		.enable_reg = 0x21004,
1866 		.enable_mask = BIT(0),
1867 		.hw.init = &(struct clk_init_data){
1868 			.name = "gcc_blsp1_qup5_spi_apps_clk",
1869 			.parent_names = (const char *[]){ "blsp1_qup5_spi_apps_clk_src" },
1870 			.num_parents = 1,
1871 			.flags = CLK_SET_RATE_PARENT,
1872 			.ops = &clk_branch2_ops,
1873 		},
1874 	},
1875 };
1876 
1877 static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
1878 	.halt_reg = 0x21008,
1879 	.clkr = {
1880 		.enable_reg = 0x21008,
1881 		.enable_mask = BIT(0),
1882 		.hw.init = &(struct clk_init_data){
1883 			.name = "gcc_blsp1_qup5_i2c_apps_clk",
1884 			.parent_names = (const char *[]){ "blsp1_qup5_i2c_apps_clk_src" },
1885 			.num_parents = 1,
1886 			.flags = CLK_SET_RATE_PARENT,
1887 			.ops = &clk_branch2_ops,
1888 		},
1889 	},
1890 };
1891 
1892 static struct clk_branch gcc_blsp1_uart5_apps_clk = {
1893 	.halt_reg = 0x22004,
1894 	.clkr = {
1895 		.enable_reg = 0x22004,
1896 		.enable_mask = BIT(0),
1897 		.hw.init = &(struct clk_init_data){
1898 			.name = "gcc_blsp1_uart5_apps_clk",
1899 			.parent_names = (const char *[]){ "blsp1_uart5_apps_clk_src" },
1900 			.num_parents = 1,
1901 			.flags = CLK_SET_RATE_PARENT,
1902 			.ops = &clk_branch2_ops,
1903 		},
1904 	},
1905 };
1906 
1907 static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
1908 	.halt_reg = 0x23004,
1909 	.clkr = {
1910 		.enable_reg = 0x23004,
1911 		.enable_mask = BIT(0),
1912 		.hw.init = &(struct clk_init_data){
1913 			.name = "gcc_blsp1_qup6_spi_apps_clk",
1914 			.parent_names = (const char *[]){ "blsp1_qup6_spi_apps_clk_src" },
1915 			.num_parents = 1,
1916 			.flags = CLK_SET_RATE_PARENT,
1917 			.ops = &clk_branch2_ops,
1918 		},
1919 	},
1920 };
1921 
1922 static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
1923 	.halt_reg = 0x23008,
1924 	.clkr = {
1925 		.enable_reg = 0x23008,
1926 		.enable_mask = BIT(0),
1927 		.hw.init = &(struct clk_init_data){
1928 			.name = "gcc_blsp1_qup6_i2c_apps_clk",
1929 			.parent_names = (const char *[]){ "blsp1_qup6_i2c_apps_clk_src" },
1930 			.num_parents = 1,
1931 			.flags = CLK_SET_RATE_PARENT,
1932 			.ops = &clk_branch2_ops,
1933 		},
1934 	},
1935 };
1936 
1937 static struct clk_branch gcc_blsp1_uart6_apps_clk = {
1938 	.halt_reg = 0x24004,
1939 	.clkr = {
1940 		.enable_reg = 0x24004,
1941 		.enable_mask = BIT(0),
1942 		.hw.init = &(struct clk_init_data){
1943 			.name = "gcc_blsp1_uart6_apps_clk",
1944 			.parent_names = (const char *[]){ "blsp1_uart6_apps_clk_src" },
1945 			.num_parents = 1,
1946 			.flags = CLK_SET_RATE_PARENT,
1947 			.ops = &clk_branch2_ops,
1948 		},
1949 	},
1950 };
1951 
1952 static struct clk_branch gcc_blsp2_ahb_clk = {
1953 	.halt_reg = 0x25004,
1954 	.halt_check = BRANCH_HALT_VOTED,
1955 	.clkr = {
1956 		.enable_reg = 0x52004,
1957 		.enable_mask = BIT(15),
1958 		.hw.init = &(struct clk_init_data){
1959 			.name = "gcc_blsp2_ahb_clk",
1960 			.parent_names = (const char *[]){ "periph_noc_clk_src" },
1961 			.num_parents = 1,
1962 			.flags = CLK_SET_RATE_PARENT,
1963 			.ops = &clk_branch2_ops,
1964 		},
1965 	},
1966 };
1967 
1968 static struct clk_branch gcc_blsp2_sleep_clk = {
1969 	.halt_reg = 0x25008,
1970 	.halt_check = BRANCH_HALT_VOTED,
1971 	.clkr = {
1972 		.enable_reg = 0x52004,
1973 		.enable_mask = BIT(14),
1974 		.hw.init = &(struct clk_init_data){
1975 			.name = "gcc_blsp2_sleep_clk",
1976 			.parent_names = (const char *[]){ "gcc_sleep_clk_src" },
1977 			.num_parents = 1,
1978 			.flags = CLK_SET_RATE_PARENT,
1979 			.ops = &clk_branch2_ops,
1980 		},
1981 	},
1982 };
1983 
1984 static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
1985 	.halt_reg = 0x26004,
1986 	.clkr = {
1987 		.enable_reg = 0x26004,
1988 		.enable_mask = BIT(0),
1989 		.hw.init = &(struct clk_init_data){
1990 			.name = "gcc_blsp2_qup1_spi_apps_clk",
1991 			.parent_names = (const char *[]){ "blsp2_qup1_spi_apps_clk_src" },
1992 			.num_parents = 1,
1993 			.flags = CLK_SET_RATE_PARENT,
1994 			.ops = &clk_branch2_ops,
1995 		},
1996 	},
1997 };
1998 
1999 static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
2000 	.halt_reg = 0x26008,
2001 	.clkr = {
2002 		.enable_reg = 0x26008,
2003 		.enable_mask = BIT(0),
2004 		.hw.init = &(struct clk_init_data){
2005 			.name = "gcc_blsp2_qup1_i2c_apps_clk",
2006 			.parent_names = (const char *[]){ "blsp2_qup1_i2c_apps_clk_src" },
2007 			.num_parents = 1,
2008 			.flags = CLK_SET_RATE_PARENT,
2009 			.ops = &clk_branch2_ops,
2010 		},
2011 	},
2012 };
2013 
2014 static struct clk_branch gcc_blsp2_uart1_apps_clk = {
2015 	.halt_reg = 0x27004,
2016 	.clkr = {
2017 		.enable_reg = 0x27004,
2018 		.enable_mask = BIT(0),
2019 		.hw.init = &(struct clk_init_data){
2020 			.name = "gcc_blsp2_uart1_apps_clk",
2021 			.parent_names = (const char *[]){ "blsp2_uart1_apps_clk_src" },
2022 			.num_parents = 1,
2023 			.flags = CLK_SET_RATE_PARENT,
2024 			.ops = &clk_branch2_ops,
2025 		},
2026 	},
2027 };
2028 
2029 static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
2030 	.halt_reg = 0x28004,
2031 	.clkr = {
2032 		.enable_reg = 0x28004,
2033 		.enable_mask = BIT(0),
2034 		.hw.init = &(struct clk_init_data){
2035 			.name = "gcc_blsp2_qup2_spi_apps_clk",
2036 			.parent_names = (const char *[]){ "blsp2_qup2_spi_apps_clk_src" },
2037 			.num_parents = 1,
2038 			.flags = CLK_SET_RATE_PARENT,
2039 			.ops = &clk_branch2_ops,
2040 		},
2041 	},
2042 };
2043 
2044 static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
2045 	.halt_reg = 0x28008,
2046 	.clkr = {
2047 		.enable_reg = 0x28008,
2048 		.enable_mask = BIT(0),
2049 		.hw.init = &(struct clk_init_data){
2050 			.name = "gcc_blsp2_qup2_i2c_apps_clk",
2051 			.parent_names = (const char *[]){ "blsp2_qup2_i2c_apps_clk_src" },
2052 			.num_parents = 1,
2053 			.flags = CLK_SET_RATE_PARENT,
2054 			.ops = &clk_branch2_ops,
2055 		},
2056 	},
2057 };
2058 
2059 static struct clk_branch gcc_blsp2_uart2_apps_clk = {
2060 	.halt_reg = 0x29004,
2061 	.clkr = {
2062 		.enable_reg = 0x29004,
2063 		.enable_mask = BIT(0),
2064 		.hw.init = &(struct clk_init_data){
2065 			.name = "gcc_blsp2_uart2_apps_clk",
2066 			.parent_names = (const char *[]){ "blsp2_uart2_apps_clk_src" },
2067 			.num_parents = 1,
2068 			.flags = CLK_SET_RATE_PARENT,
2069 			.ops = &clk_branch2_ops,
2070 		},
2071 	},
2072 };
2073 
2074 static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
2075 	.halt_reg = 0x2a004,
2076 	.clkr = {
2077 		.enable_reg = 0x2a004,
2078 		.enable_mask = BIT(0),
2079 		.hw.init = &(struct clk_init_data){
2080 			.name = "gcc_blsp2_qup3_spi_apps_clk",
2081 			.parent_names = (const char *[]){ "blsp2_qup3_spi_apps_clk_src" },
2082 			.num_parents = 1,
2083 			.flags = CLK_SET_RATE_PARENT,
2084 			.ops = &clk_branch2_ops,
2085 		},
2086 	},
2087 };
2088 
2089 static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
2090 	.halt_reg = 0x2a008,
2091 	.clkr = {
2092 		.enable_reg = 0x2a008,
2093 		.enable_mask = BIT(0),
2094 		.hw.init = &(struct clk_init_data){
2095 			.name = "gcc_blsp2_qup3_i2c_apps_clk",
2096 			.parent_names = (const char *[]){ "blsp2_qup3_i2c_apps_clk_src" },
2097 			.num_parents = 1,
2098 			.flags = CLK_SET_RATE_PARENT,
2099 			.ops = &clk_branch2_ops,
2100 		},
2101 	},
2102 };
2103 
2104 static struct clk_branch gcc_blsp2_uart3_apps_clk = {
2105 	.halt_reg = 0x2b004,
2106 	.clkr = {
2107 		.enable_reg = 0x2b004,
2108 		.enable_mask = BIT(0),
2109 		.hw.init = &(struct clk_init_data){
2110 			.name = "gcc_blsp2_uart3_apps_clk",
2111 			.parent_names = (const char *[]){ "blsp2_uart3_apps_clk_src" },
2112 			.num_parents = 1,
2113 			.flags = CLK_SET_RATE_PARENT,
2114 			.ops = &clk_branch2_ops,
2115 		},
2116 	},
2117 };
2118 
2119 static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
2120 	.halt_reg = 0x2c004,
2121 	.clkr = {
2122 		.enable_reg = 0x2c004,
2123 		.enable_mask = BIT(0),
2124 		.hw.init = &(struct clk_init_data){
2125 			.name = "gcc_blsp2_qup4_spi_apps_clk",
2126 			.parent_names = (const char *[]){ "blsp2_qup4_spi_apps_clk_src" },
2127 			.num_parents = 1,
2128 			.flags = CLK_SET_RATE_PARENT,
2129 			.ops = &clk_branch2_ops,
2130 		},
2131 	},
2132 };
2133 
2134 static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
2135 	.halt_reg = 0x2c008,
2136 	.clkr = {
2137 		.enable_reg = 0x2c008,
2138 		.enable_mask = BIT(0),
2139 		.hw.init = &(struct clk_init_data){
2140 			.name = "gcc_blsp2_qup4_i2c_apps_clk",
2141 			.parent_names = (const char *[]){ "blsp2_qup4_i2c_apps_clk_src" },
2142 			.num_parents = 1,
2143 			.flags = CLK_SET_RATE_PARENT,
2144 			.ops = &clk_branch2_ops,
2145 		},
2146 	},
2147 };
2148 
2149 static struct clk_branch gcc_blsp2_uart4_apps_clk = {
2150 	.halt_reg = 0x2d004,
2151 	.clkr = {
2152 		.enable_reg = 0x2d004,
2153 		.enable_mask = BIT(0),
2154 		.hw.init = &(struct clk_init_data){
2155 			.name = "gcc_blsp2_uart4_apps_clk",
2156 			.parent_names = (const char *[]){ "blsp2_uart4_apps_clk_src" },
2157 			.num_parents = 1,
2158 			.flags = CLK_SET_RATE_PARENT,
2159 			.ops = &clk_branch2_ops,
2160 		},
2161 	},
2162 };
2163 
2164 static struct clk_branch gcc_blsp2_qup5_spi_apps_clk = {
2165 	.halt_reg = 0x2e004,
2166 	.clkr = {
2167 		.enable_reg = 0x2e004,
2168 		.enable_mask = BIT(0),
2169 		.hw.init = &(struct clk_init_data){
2170 			.name = "gcc_blsp2_qup5_spi_apps_clk",
2171 			.parent_names = (const char *[]){ "blsp2_qup5_spi_apps_clk_src" },
2172 			.num_parents = 1,
2173 			.flags = CLK_SET_RATE_PARENT,
2174 			.ops = &clk_branch2_ops,
2175 		},
2176 	},
2177 };
2178 
2179 static struct clk_branch gcc_blsp2_qup5_i2c_apps_clk = {
2180 	.halt_reg = 0x2e008,
2181 	.clkr = {
2182 		.enable_reg = 0x2e008,
2183 		.enable_mask = BIT(0),
2184 		.hw.init = &(struct clk_init_data){
2185 			.name = "gcc_blsp2_qup5_i2c_apps_clk",
2186 			.parent_names = (const char *[]){ "blsp2_qup5_i2c_apps_clk_src" },
2187 			.num_parents = 1,
2188 			.flags = CLK_SET_RATE_PARENT,
2189 			.ops = &clk_branch2_ops,
2190 		},
2191 	},
2192 };
2193 
2194 static struct clk_branch gcc_blsp2_uart5_apps_clk = {
2195 	.halt_reg = 0x2f004,
2196 	.clkr = {
2197 		.enable_reg = 0x2f004,
2198 		.enable_mask = BIT(0),
2199 		.hw.init = &(struct clk_init_data){
2200 			.name = "gcc_blsp2_uart5_apps_clk",
2201 			.parent_names = (const char *[]){ "blsp2_uart5_apps_clk_src" },
2202 			.num_parents = 1,
2203 			.flags = CLK_SET_RATE_PARENT,
2204 			.ops = &clk_branch2_ops,
2205 		},
2206 	},
2207 };
2208 
2209 static struct clk_branch gcc_blsp2_qup6_spi_apps_clk = {
2210 	.halt_reg = 0x30004,
2211 	.clkr = {
2212 		.enable_reg = 0x30004,
2213 		.enable_mask = BIT(0),
2214 		.hw.init = &(struct clk_init_data){
2215 			.name = "gcc_blsp2_qup6_spi_apps_clk",
2216 			.parent_names = (const char *[]){ "blsp2_qup6_spi_apps_clk_src" },
2217 			.num_parents = 1,
2218 			.flags = CLK_SET_RATE_PARENT,
2219 			.ops = &clk_branch2_ops,
2220 		},
2221 	},
2222 };
2223 
2224 static struct clk_branch gcc_blsp2_qup6_i2c_apps_clk = {
2225 	.halt_reg = 0x30008,
2226 	.clkr = {
2227 		.enable_reg = 0x30008,
2228 		.enable_mask = BIT(0),
2229 		.hw.init = &(struct clk_init_data){
2230 			.name = "gcc_blsp2_qup6_i2c_apps_clk",
2231 			.parent_names = (const char *[]){ "blsp2_qup6_i2c_apps_clk_src" },
2232 			.num_parents = 1,
2233 			.flags = CLK_SET_RATE_PARENT,
2234 			.ops = &clk_branch2_ops,
2235 		},
2236 	},
2237 };
2238 
2239 static struct clk_branch gcc_blsp2_uart6_apps_clk = {
2240 	.halt_reg = 0x31004,
2241 	.clkr = {
2242 		.enable_reg = 0x31004,
2243 		.enable_mask = BIT(0),
2244 		.hw.init = &(struct clk_init_data){
2245 			.name = "gcc_blsp2_uart6_apps_clk",
2246 			.parent_names = (const char *[]){ "blsp2_uart6_apps_clk_src" },
2247 			.num_parents = 1,
2248 			.flags = CLK_SET_RATE_PARENT,
2249 			.ops = &clk_branch2_ops,
2250 		},
2251 	},
2252 };
2253 
2254 static struct clk_branch gcc_pdm_ahb_clk = {
2255 	.halt_reg = 0x33004,
2256 	.clkr = {
2257 		.enable_reg = 0x33004,
2258 		.enable_mask = BIT(0),
2259 		.hw.init = &(struct clk_init_data){
2260 			.name = "gcc_pdm_ahb_clk",
2261 			.parent_names = (const char *[]){ "periph_noc_clk_src" },
2262 			.num_parents = 1,
2263 			.flags = CLK_SET_RATE_PARENT,
2264 			.ops = &clk_branch2_ops,
2265 		},
2266 	},
2267 };
2268 
2269 static struct clk_branch gcc_pdm2_clk = {
2270 	.halt_reg = 0x3300c,
2271 	.clkr = {
2272 		.enable_reg = 0x3300c,
2273 		.enable_mask = BIT(0),
2274 		.hw.init = &(struct clk_init_data){
2275 			.name = "gcc_pdm2_clk",
2276 			.parent_names = (const char *[]){ "pdm2_clk_src" },
2277 			.num_parents = 1,
2278 			.flags = CLK_SET_RATE_PARENT,
2279 			.ops = &clk_branch2_ops,
2280 		},
2281 	},
2282 };
2283 
2284 static struct clk_branch gcc_prng_ahb_clk = {
2285 	.halt_reg = 0x34004,
2286 	.halt_check = BRANCH_HALT_VOTED,
2287 	.clkr = {
2288 		.enable_reg = 0x52004,
2289 		.enable_mask = BIT(13),
2290 		.hw.init = &(struct clk_init_data){
2291 			.name = "gcc_prng_ahb_clk",
2292 			.parent_names = (const char *[]){ "config_noc_clk_src" },
2293 			.num_parents = 1,
2294 			.flags = CLK_SET_RATE_PARENT,
2295 			.ops = &clk_branch2_ops,
2296 		},
2297 	},
2298 };
2299 
2300 static struct clk_branch gcc_tsif_ahb_clk = {
2301 	.halt_reg = 0x36004,
2302 	.clkr = {
2303 		.enable_reg = 0x36004,
2304 		.enable_mask = BIT(0),
2305 		.hw.init = &(struct clk_init_data){
2306 			.name = "gcc_tsif_ahb_clk",
2307 			.parent_names = (const char *[]){ "periph_noc_clk_src" },
2308 			.num_parents = 1,
2309 			.flags = CLK_SET_RATE_PARENT,
2310 			.ops = &clk_branch2_ops,
2311 		},
2312 	},
2313 };
2314 
2315 static struct clk_branch gcc_tsif_ref_clk = {
2316 	.halt_reg = 0x36008,
2317 	.clkr = {
2318 		.enable_reg = 0x36008,
2319 		.enable_mask = BIT(0),
2320 		.hw.init = &(struct clk_init_data){
2321 			.name = "gcc_tsif_ref_clk",
2322 			.parent_names = (const char *[]){ "tsif_ref_clk_src" },
2323 			.num_parents = 1,
2324 			.flags = CLK_SET_RATE_PARENT,
2325 			.ops = &clk_branch2_ops,
2326 		},
2327 	},
2328 };
2329 
2330 static struct clk_branch gcc_tsif_inactivity_timers_clk = {
2331 	.halt_reg = 0x3600c,
2332 	.clkr = {
2333 		.enable_reg = 0x3600c,
2334 		.enable_mask = BIT(0),
2335 		.hw.init = &(struct clk_init_data){
2336 			.name = "gcc_tsif_inactivity_timers_clk",
2337 			.parent_names = (const char *[]){ "gcc_sleep_clk_src" },
2338 			.num_parents = 1,
2339 			.flags = CLK_SET_RATE_PARENT,
2340 			.ops = &clk_branch2_ops,
2341 		},
2342 	},
2343 };
2344 
2345 static struct clk_branch gcc_boot_rom_ahb_clk = {
2346 	.halt_reg = 0x38004,
2347 	.halt_check = BRANCH_HALT_VOTED,
2348 	.clkr = {
2349 		.enable_reg = 0x52004,
2350 		.enable_mask = BIT(10),
2351 		.hw.init = &(struct clk_init_data){
2352 			.name = "gcc_boot_rom_ahb_clk",
2353 			.parent_names = (const char *[]){ "config_noc_clk_src" },
2354 			.num_parents = 1,
2355 			.flags = CLK_SET_RATE_PARENT,
2356 			.ops = &clk_branch2_ops,
2357 		},
2358 	},
2359 };
2360 
2361 static struct clk_branch gcc_bimc_gfx_clk = {
2362 	.halt_reg = 0x46018,
2363 	.clkr = {
2364 		.enable_reg = 0x46018,
2365 		.enable_mask = BIT(0),
2366 		.hw.init = &(struct clk_init_data){
2367 			.name = "gcc_bimc_gfx_clk",
2368 			.flags = CLK_SET_RATE_PARENT,
2369 			.ops = &clk_branch2_ops,
2370 		},
2371 	},
2372 };
2373 
2374 static struct clk_branch gcc_hmss_rbcpr_clk = {
2375 	.halt_reg = 0x4800c,
2376 	.clkr = {
2377 		.enable_reg = 0x4800c,
2378 		.enable_mask = BIT(0),
2379 		.hw.init = &(struct clk_init_data){
2380 			.name = "gcc_hmss_rbcpr_clk",
2381 			.parent_names = (const char *[]){ "hmss_rbcpr_clk_src" },
2382 			.num_parents = 1,
2383 			.flags = CLK_SET_RATE_PARENT,
2384 			.ops = &clk_branch2_ops,
2385 		},
2386 	},
2387 };
2388 
2389 static struct clk_branch gcc_gp1_clk = {
2390 	.halt_reg = 0x64000,
2391 	.clkr = {
2392 		.enable_reg = 0x64000,
2393 		.enable_mask = BIT(0),
2394 		.hw.init = &(struct clk_init_data){
2395 			.name = "gcc_gp1_clk",
2396 			.parent_names = (const char *[]){ "gp1_clk_src" },
2397 			.num_parents = 1,
2398 			.flags = CLK_SET_RATE_PARENT,
2399 			.ops = &clk_branch2_ops,
2400 		},
2401 	},
2402 };
2403 
2404 static struct clk_branch gcc_gp2_clk = {
2405 	.halt_reg = 0x65000,
2406 	.clkr = {
2407 		.enable_reg = 0x65000,
2408 		.enable_mask = BIT(0),
2409 		.hw.init = &(struct clk_init_data){
2410 			.name = "gcc_gp2_clk",
2411 			.parent_names = (const char *[]){ "gp2_clk_src" },
2412 			.num_parents = 1,
2413 			.flags = CLK_SET_RATE_PARENT,
2414 			.ops = &clk_branch2_ops,
2415 		},
2416 	},
2417 };
2418 
2419 static struct clk_branch gcc_gp3_clk = {
2420 	.halt_reg = 0x66000,
2421 	.clkr = {
2422 		.enable_reg = 0x66000,
2423 		.enable_mask = BIT(0),
2424 		.hw.init = &(struct clk_init_data){
2425 			.name = "gcc_gp3_clk",
2426 			.parent_names = (const char *[]){ "gp3_clk_src" },
2427 			.num_parents = 1,
2428 			.flags = CLK_SET_RATE_PARENT,
2429 			.ops = &clk_branch2_ops,
2430 		},
2431 	},
2432 };
2433 
2434 static struct clk_branch gcc_pcie_0_slv_axi_clk = {
2435 	.halt_reg = 0x6b008,
2436 	.clkr = {
2437 		.enable_reg = 0x6b008,
2438 		.enable_mask = BIT(0),
2439 		.hw.init = &(struct clk_init_data){
2440 			.name = "gcc_pcie_0_slv_axi_clk",
2441 			.parent_names = (const char *[]){ "system_noc_clk_src" },
2442 			.num_parents = 1,
2443 			.flags = CLK_SET_RATE_PARENT,
2444 			.ops = &clk_branch2_ops,
2445 		},
2446 	},
2447 };
2448 
2449 static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
2450 	.halt_reg = 0x6b00c,
2451 	.clkr = {
2452 		.enable_reg = 0x6b00c,
2453 		.enable_mask = BIT(0),
2454 		.hw.init = &(struct clk_init_data){
2455 			.name = "gcc_pcie_0_mstr_axi_clk",
2456 			.parent_names = (const char *[]){ "system_noc_clk_src" },
2457 			.num_parents = 1,
2458 			.flags = CLK_SET_RATE_PARENT,
2459 			.ops = &clk_branch2_ops,
2460 		},
2461 	},
2462 };
2463 
2464 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
2465 	.halt_reg = 0x6b010,
2466 	.clkr = {
2467 		.enable_reg = 0x6b010,
2468 		.enable_mask = BIT(0),
2469 		.hw.init = &(struct clk_init_data){
2470 			.name = "gcc_pcie_0_cfg_ahb_clk",
2471 			.parent_names = (const char *[]){ "config_noc_clk_src" },
2472 			.num_parents = 1,
2473 			.flags = CLK_SET_RATE_PARENT,
2474 			.ops = &clk_branch2_ops,
2475 		},
2476 	},
2477 };
2478 
2479 static struct clk_branch gcc_pcie_0_aux_clk = {
2480 	.halt_reg = 0x6b014,
2481 	.clkr = {
2482 		.enable_reg = 0x6b014,
2483 		.enable_mask = BIT(0),
2484 		.hw.init = &(struct clk_init_data){
2485 			.name = "gcc_pcie_0_aux_clk",
2486 			.parent_names = (const char *[]){ "pcie_aux_clk_src" },
2487 			.num_parents = 1,
2488 			.flags = CLK_SET_RATE_PARENT,
2489 			.ops = &clk_branch2_ops,
2490 		},
2491 	},
2492 };
2493 
2494 static struct clk_branch gcc_pcie_0_pipe_clk = {
2495 	.halt_reg = 0x6b018,
2496 	.halt_check = BRANCH_HALT_SKIP,
2497 	.clkr = {
2498 		.enable_reg = 0x6b018,
2499 		.enable_mask = BIT(0),
2500 		.hw.init = &(struct clk_init_data){
2501 			.name = "gcc_pcie_0_pipe_clk",
2502 			.parent_names = (const char *[]){ "pcie_0_pipe_clk_src" },
2503 			.num_parents = 1,
2504 			.flags = CLK_SET_RATE_PARENT,
2505 			.ops = &clk_branch2_ops,
2506 		},
2507 	},
2508 };
2509 
2510 static struct clk_branch gcc_pcie_1_slv_axi_clk = {
2511 	.halt_reg = 0x6d008,
2512 	.clkr = {
2513 		.enable_reg = 0x6d008,
2514 		.enable_mask = BIT(0),
2515 		.hw.init = &(struct clk_init_data){
2516 			.name = "gcc_pcie_1_slv_axi_clk",
2517 			.parent_names = (const char *[]){ "system_noc_clk_src" },
2518 			.num_parents = 1,
2519 			.flags = CLK_SET_RATE_PARENT,
2520 			.ops = &clk_branch2_ops,
2521 		},
2522 	},
2523 };
2524 
2525 static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
2526 	.halt_reg = 0x6d00c,
2527 	.clkr = {
2528 		.enable_reg = 0x6d00c,
2529 		.enable_mask = BIT(0),
2530 		.hw.init = &(struct clk_init_data){
2531 			.name = "gcc_pcie_1_mstr_axi_clk",
2532 			.parent_names = (const char *[]){ "system_noc_clk_src" },
2533 			.num_parents = 1,
2534 			.flags = CLK_SET_RATE_PARENT,
2535 			.ops = &clk_branch2_ops,
2536 		},
2537 	},
2538 };
2539 
2540 static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
2541 	.halt_reg = 0x6d010,
2542 	.clkr = {
2543 		.enable_reg = 0x6d010,
2544 		.enable_mask = BIT(0),
2545 		.hw.init = &(struct clk_init_data){
2546 			.name = "gcc_pcie_1_cfg_ahb_clk",
2547 			.parent_names = (const char *[]){ "config_noc_clk_src" },
2548 			.num_parents = 1,
2549 			.flags = CLK_SET_RATE_PARENT,
2550 			.ops = &clk_branch2_ops,
2551 		},
2552 	},
2553 };
2554 
2555 static struct clk_branch gcc_pcie_1_aux_clk = {
2556 	.halt_reg = 0x6d014,
2557 	.clkr = {
2558 		.enable_reg = 0x6d014,
2559 		.enable_mask = BIT(0),
2560 		.hw.init = &(struct clk_init_data){
2561 			.name = "gcc_pcie_1_aux_clk",
2562 			.parent_names = (const char *[]){ "pcie_aux_clk_src" },
2563 			.num_parents = 1,
2564 			.flags = CLK_SET_RATE_PARENT,
2565 			.ops = &clk_branch2_ops,
2566 		},
2567 	},
2568 };
2569 
2570 static struct clk_branch gcc_pcie_1_pipe_clk = {
2571 	.halt_reg = 0x6d018,
2572 	.halt_check = BRANCH_HALT_SKIP,
2573 	.clkr = {
2574 		.enable_reg = 0x6d018,
2575 		.enable_mask = BIT(0),
2576 		.hw.init = &(struct clk_init_data){
2577 			.name = "gcc_pcie_1_pipe_clk",
2578 			.parent_names = (const char *[]){ "pcie_1_pipe_clk_src" },
2579 			.num_parents = 1,
2580 			.flags = CLK_SET_RATE_PARENT,
2581 			.ops = &clk_branch2_ops,
2582 		},
2583 	},
2584 };
2585 
2586 static struct clk_branch gcc_pcie_2_slv_axi_clk = {
2587 	.halt_reg = 0x6e008,
2588 	.clkr = {
2589 		.enable_reg = 0x6e008,
2590 		.enable_mask = BIT(0),
2591 		.hw.init = &(struct clk_init_data){
2592 			.name = "gcc_pcie_2_slv_axi_clk",
2593 			.parent_names = (const char *[]){ "system_noc_clk_src" },
2594 			.num_parents = 1,
2595 			.flags = CLK_SET_RATE_PARENT,
2596 			.ops = &clk_branch2_ops,
2597 		},
2598 	},
2599 };
2600 
2601 static struct clk_branch gcc_pcie_2_mstr_axi_clk = {
2602 	.halt_reg = 0x6e00c,
2603 	.clkr = {
2604 		.enable_reg = 0x6e00c,
2605 		.enable_mask = BIT(0),
2606 		.hw.init = &(struct clk_init_data){
2607 			.name = "gcc_pcie_2_mstr_axi_clk",
2608 			.parent_names = (const char *[]){ "system_noc_clk_src" },
2609 			.num_parents = 1,
2610 			.flags = CLK_SET_RATE_PARENT,
2611 			.ops = &clk_branch2_ops,
2612 		},
2613 	},
2614 };
2615 
2616 static struct clk_branch gcc_pcie_2_cfg_ahb_clk = {
2617 	.halt_reg = 0x6e010,
2618 	.clkr = {
2619 		.enable_reg = 0x6e010,
2620 		.enable_mask = BIT(0),
2621 		.hw.init = &(struct clk_init_data){
2622 			.name = "gcc_pcie_2_cfg_ahb_clk",
2623 			.parent_names = (const char *[]){ "config_noc_clk_src" },
2624 			.num_parents = 1,
2625 			.flags = CLK_SET_RATE_PARENT,
2626 			.ops = &clk_branch2_ops,
2627 		},
2628 	},
2629 };
2630 
2631 static struct clk_branch gcc_pcie_2_aux_clk = {
2632 	.halt_reg = 0x6e014,
2633 	.clkr = {
2634 		.enable_reg = 0x6e014,
2635 		.enable_mask = BIT(0),
2636 		.hw.init = &(struct clk_init_data){
2637 			.name = "gcc_pcie_2_aux_clk",
2638 			.parent_names = (const char *[]){ "pcie_aux_clk_src" },
2639 			.num_parents = 1,
2640 			.flags = CLK_SET_RATE_PARENT,
2641 			.ops = &clk_branch2_ops,
2642 		},
2643 	},
2644 };
2645 
2646 static struct clk_branch gcc_pcie_2_pipe_clk = {
2647 	.halt_reg = 0x6e018,
2648 	.halt_check = BRANCH_HALT_SKIP,
2649 	.clkr = {
2650 		.enable_reg = 0x6e018,
2651 		.enable_mask = BIT(0),
2652 		.hw.init = &(struct clk_init_data){
2653 			.name = "gcc_pcie_2_pipe_clk",
2654 			.parent_names = (const char *[]){ "pcie_2_pipe_clk_src" },
2655 			.num_parents = 1,
2656 			.flags = CLK_SET_RATE_PARENT,
2657 			.ops = &clk_branch2_ops,
2658 		},
2659 	},
2660 };
2661 
2662 static struct clk_branch gcc_pcie_phy_cfg_ahb_clk = {
2663 	.halt_reg = 0x6f004,
2664 	.clkr = {
2665 		.enable_reg = 0x6f004,
2666 		.enable_mask = BIT(0),
2667 		.hw.init = &(struct clk_init_data){
2668 			.name = "gcc_pcie_phy_cfg_ahb_clk",
2669 			.parent_names = (const char *[]){ "config_noc_clk_src" },
2670 			.num_parents = 1,
2671 			.flags = CLK_SET_RATE_PARENT,
2672 			.ops = &clk_branch2_ops,
2673 		},
2674 	},
2675 };
2676 
2677 static struct clk_branch gcc_pcie_phy_aux_clk = {
2678 	.halt_reg = 0x6f008,
2679 	.clkr = {
2680 		.enable_reg = 0x6f008,
2681 		.enable_mask = BIT(0),
2682 		.hw.init = &(struct clk_init_data){
2683 			.name = "gcc_pcie_phy_aux_clk",
2684 			.parent_names = (const char *[]){ "pcie_aux_clk_src" },
2685 			.num_parents = 1,
2686 			.flags = CLK_SET_RATE_PARENT,
2687 			.ops = &clk_branch2_ops,
2688 		},
2689 	},
2690 };
2691 
2692 static struct clk_branch gcc_ufs_axi_clk = {
2693 	.halt_reg = 0x75008,
2694 	.clkr = {
2695 		.enable_reg = 0x75008,
2696 		.enable_mask = BIT(0),
2697 		.hw.init = &(struct clk_init_data){
2698 			.name = "gcc_ufs_axi_clk",
2699 			.parent_names = (const char *[]){ "ufs_axi_clk_src" },
2700 			.num_parents = 1,
2701 			.flags = CLK_SET_RATE_PARENT,
2702 			.ops = &clk_branch2_ops,
2703 		},
2704 	},
2705 };
2706 
2707 static struct clk_branch gcc_ufs_ahb_clk = {
2708 	.halt_reg = 0x7500c,
2709 	.clkr = {
2710 		.enable_reg = 0x7500c,
2711 		.enable_mask = BIT(0),
2712 		.hw.init = &(struct clk_init_data){
2713 			.name = "gcc_ufs_ahb_clk",
2714 			.parent_names = (const char *[]){ "config_noc_clk_src" },
2715 			.num_parents = 1,
2716 			.flags = CLK_SET_RATE_PARENT,
2717 			.ops = &clk_branch2_ops,
2718 		},
2719 	},
2720 };
2721 
2722 static struct clk_fixed_factor ufs_tx_cfg_clk_src = {
2723 	.mult = 1,
2724 	.div = 16,
2725 	.hw.init = &(struct clk_init_data){
2726 		.name = "ufs_tx_cfg_clk_src",
2727 		.parent_names = (const char *[]){ "ufs_axi_clk_src" },
2728 		.num_parents = 1,
2729 		.flags = CLK_SET_RATE_PARENT,
2730 		.ops = &clk_fixed_factor_ops,
2731 	},
2732 };
2733 
2734 static struct clk_branch gcc_ufs_tx_cfg_clk = {
2735 	.halt_reg = 0x75010,
2736 	.clkr = {
2737 		.enable_reg = 0x75010,
2738 		.enable_mask = BIT(0),
2739 		.hw.init = &(struct clk_init_data){
2740 			.name = "gcc_ufs_tx_cfg_clk",
2741 			.parent_names = (const char *[]){ "ufs_tx_cfg_clk_src" },
2742 			.num_parents = 1,
2743 			.flags = CLK_SET_RATE_PARENT,
2744 			.ops = &clk_branch2_ops,
2745 		},
2746 	},
2747 };
2748 
2749 static struct clk_fixed_factor ufs_rx_cfg_clk_src = {
2750 	.mult = 1,
2751 	.div = 16,
2752 	.hw.init = &(struct clk_init_data){
2753 		.name = "ufs_rx_cfg_clk_src",
2754 		.parent_names = (const char *[]){ "ufs_axi_clk_src" },
2755 		.num_parents = 1,
2756 		.flags = CLK_SET_RATE_PARENT,
2757 		.ops = &clk_fixed_factor_ops,
2758 	},
2759 };
2760 
2761 static struct clk_branch gcc_hlos1_vote_lpass_core_smmu_clk = {
2762 	.halt_reg = 0x7d010,
2763 	.halt_check = BRANCH_HALT_VOTED,
2764 	.clkr = {
2765 		.enable_reg = 0x7d010,
2766 		.enable_mask = BIT(0),
2767 		.hw.init = &(struct clk_init_data){
2768 			.name = "hlos1_vote_lpass_core_smmu_clk",
2769 			.ops = &clk_branch2_ops,
2770 		},
2771 	},
2772 };
2773 
2774 static struct clk_branch gcc_hlos1_vote_lpass_adsp_smmu_clk = {
2775 	.halt_reg = 0x7d014,
2776 	.halt_check = BRANCH_HALT_VOTED,
2777 	.clkr = {
2778 		.enable_reg = 0x7d014,
2779 		.enable_mask = BIT(0),
2780 		.hw.init = &(struct clk_init_data){
2781 			.name = "hlos1_vote_lpass_adsp_smmu_clk",
2782 			.ops = &clk_branch2_ops,
2783 		},
2784 	},
2785 };
2786 
2787 static struct clk_branch gcc_ufs_rx_cfg_clk = {
2788 	.halt_reg = 0x75014,
2789 	.clkr = {
2790 		.enable_reg = 0x75014,
2791 		.enable_mask = BIT(0),
2792 		.hw.init = &(struct clk_init_data){
2793 			.name = "gcc_ufs_rx_cfg_clk",
2794 			.parent_names = (const char *[]){ "ufs_rx_cfg_clk_src" },
2795 			.num_parents = 1,
2796 			.flags = CLK_SET_RATE_PARENT,
2797 			.ops = &clk_branch2_ops,
2798 		},
2799 	},
2800 };
2801 
2802 static struct clk_branch gcc_ufs_tx_symbol_0_clk = {
2803 	.halt_reg = 0x75018,
2804 	.halt_check = BRANCH_HALT_SKIP,
2805 	.clkr = {
2806 		.enable_reg = 0x75018,
2807 		.enable_mask = BIT(0),
2808 		.hw.init = &(struct clk_init_data){
2809 			.name = "gcc_ufs_tx_symbol_0_clk",
2810 			.parent_names = (const char *[]){ "ufs_tx_symbol_0_clk_src" },
2811 			.num_parents = 1,
2812 			.flags = CLK_SET_RATE_PARENT,
2813 			.ops = &clk_branch2_ops,
2814 		},
2815 	},
2816 };
2817 
2818 static struct clk_branch gcc_ufs_rx_symbol_0_clk = {
2819 	.halt_reg = 0x7501c,
2820 	.halt_check = BRANCH_HALT_SKIP,
2821 	.clkr = {
2822 		.enable_reg = 0x7501c,
2823 		.enable_mask = BIT(0),
2824 		.hw.init = &(struct clk_init_data){
2825 			.name = "gcc_ufs_rx_symbol_0_clk",
2826 			.parent_names = (const char *[]){ "ufs_rx_symbol_0_clk_src" },
2827 			.num_parents = 1,
2828 			.flags = CLK_SET_RATE_PARENT,
2829 			.ops = &clk_branch2_ops,
2830 		},
2831 	},
2832 };
2833 
2834 static struct clk_branch gcc_ufs_rx_symbol_1_clk = {
2835 	.halt_reg = 0x75020,
2836 	.halt_check = BRANCH_HALT_SKIP,
2837 	.clkr = {
2838 		.enable_reg = 0x75020,
2839 		.enable_mask = BIT(0),
2840 		.hw.init = &(struct clk_init_data){
2841 			.name = "gcc_ufs_rx_symbol_1_clk",
2842 			.parent_names = (const char *[]){ "ufs_rx_symbol_1_clk_src" },
2843 			.num_parents = 1,
2844 			.flags = CLK_SET_RATE_PARENT,
2845 			.ops = &clk_branch2_ops,
2846 		},
2847 	},
2848 };
2849 
2850 static struct clk_fixed_factor ufs_ice_core_postdiv_clk_src = {
2851 	.mult = 1,
2852 	.div = 2,
2853 	.hw.init = &(struct clk_init_data){
2854 		.name = "ufs_ice_core_postdiv_clk_src",
2855 		.parent_names = (const char *[]){ "ufs_ice_core_clk_src" },
2856 		.num_parents = 1,
2857 		.flags = CLK_SET_RATE_PARENT,
2858 		.ops = &clk_fixed_factor_ops,
2859 	},
2860 };
2861 
2862 static struct clk_branch gcc_ufs_unipro_core_clk = {
2863 	.halt_reg = 0x7600c,
2864 	.clkr = {
2865 		.enable_reg = 0x7600c,
2866 		.enable_mask = BIT(0),
2867 		.hw.init = &(struct clk_init_data){
2868 			.name = "gcc_ufs_unipro_core_clk",
2869 			.parent_names = (const char *[]){ "ufs_ice_core_postdiv_clk_src" },
2870 			.num_parents = 1,
2871 			.flags = CLK_SET_RATE_PARENT,
2872 			.ops = &clk_branch2_ops,
2873 		},
2874 	},
2875 };
2876 
2877 static struct clk_branch gcc_ufs_ice_core_clk = {
2878 	.halt_reg = 0x76010,
2879 	.clkr = {
2880 		.enable_reg = 0x76010,
2881 		.enable_mask = BIT(0),
2882 		.hw.init = &(struct clk_init_data){
2883 			.name = "gcc_ufs_ice_core_clk",
2884 			.parent_names = (const char *[]){ "ufs_ice_core_clk_src" },
2885 			.num_parents = 1,
2886 			.flags = CLK_SET_RATE_PARENT,
2887 			.ops = &clk_branch2_ops,
2888 		},
2889 	},
2890 };
2891 
2892 static struct clk_branch gcc_ufs_sys_clk_core_clk = {
2893 	.halt_check = BRANCH_HALT_DELAY,
2894 	.clkr = {
2895 		.enable_reg = 0x76030,
2896 		.enable_mask = BIT(0),
2897 		.hw.init = &(struct clk_init_data){
2898 			.name = "gcc_ufs_sys_clk_core_clk",
2899 			.ops = &clk_branch2_ops,
2900 		},
2901 	},
2902 };
2903 
2904 static struct clk_branch gcc_ufs_tx_symbol_clk_core_clk = {
2905 	.halt_check = BRANCH_HALT_DELAY,
2906 	.clkr = {
2907 		.enable_reg = 0x76034,
2908 		.enable_mask = BIT(0),
2909 		.hw.init = &(struct clk_init_data){
2910 			.name = "gcc_ufs_tx_symbol_clk_core_clk",
2911 			.ops = &clk_branch2_ops,
2912 		},
2913 	},
2914 };
2915 
2916 static struct clk_branch gcc_aggre0_snoc_axi_clk = {
2917 	.halt_reg = 0x81008,
2918 	.clkr = {
2919 		.enable_reg = 0x81008,
2920 		.enable_mask = BIT(0),
2921 		.hw.init = &(struct clk_init_data){
2922 			.name = "gcc_aggre0_snoc_axi_clk",
2923 			.parent_names = (const char *[]){ "system_noc_clk_src" },
2924 			.num_parents = 1,
2925 			.flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
2926 			.ops = &clk_branch2_ops,
2927 		},
2928 	},
2929 };
2930 
2931 static struct clk_branch gcc_aggre0_cnoc_ahb_clk = {
2932 	.halt_reg = 0x8100c,
2933 	.clkr = {
2934 		.enable_reg = 0x8100c,
2935 		.enable_mask = BIT(0),
2936 		.hw.init = &(struct clk_init_data){
2937 			.name = "gcc_aggre0_cnoc_ahb_clk",
2938 			.parent_names = (const char *[]){ "config_noc_clk_src" },
2939 			.num_parents = 1,
2940 			.flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
2941 			.ops = &clk_branch2_ops,
2942 		},
2943 	},
2944 };
2945 
2946 static struct clk_branch gcc_smmu_aggre0_axi_clk = {
2947 	.halt_reg = 0x81014,
2948 	.clkr = {
2949 		.enable_reg = 0x81014,
2950 		.enable_mask = BIT(0),
2951 		.hw.init = &(struct clk_init_data){
2952 			.name = "gcc_smmu_aggre0_axi_clk",
2953 			.parent_names = (const char *[]){ "system_noc_clk_src" },
2954 			.num_parents = 1,
2955 			.flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
2956 			.ops = &clk_branch2_ops,
2957 		},
2958 	},
2959 };
2960 
2961 static struct clk_branch gcc_smmu_aggre0_ahb_clk = {
2962 	.halt_reg = 0x81018,
2963 	.clkr = {
2964 		.enable_reg = 0x81018,
2965 		.enable_mask = BIT(0),
2966 		.hw.init = &(struct clk_init_data){
2967 			.name = "gcc_smmu_aggre0_ahb_clk",
2968 			.parent_names = (const char *[]){ "config_noc_clk_src" },
2969 			.num_parents = 1,
2970 			.flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
2971 			.ops = &clk_branch2_ops,
2972 		},
2973 	},
2974 };
2975 
2976 static struct clk_branch gcc_aggre1_pnoc_ahb_clk = {
2977 	.halt_reg = 0x82014,
2978 	.clkr = {
2979 		.enable_reg = 0x82014,
2980 		.enable_mask = BIT(0),
2981 		.hw.init = &(struct clk_init_data){
2982 			.name = "gcc_aggre1_pnoc_ahb_clk",
2983 			.parent_names = (const char *[]){ "periph_noc_clk_src" },
2984 			.num_parents = 1,
2985 			.ops = &clk_branch2_ops,
2986 		},
2987 	},
2988 };
2989 
2990 static struct clk_branch gcc_aggre2_ufs_axi_clk = {
2991 	.halt_reg = 0x83014,
2992 	.clkr = {
2993 		.enable_reg = 0x83014,
2994 		.enable_mask = BIT(0),
2995 		.hw.init = &(struct clk_init_data){
2996 			.name = "gcc_aggre2_ufs_axi_clk",
2997 			.parent_names = (const char *[]){ "ufs_axi_clk_src" },
2998 			.num_parents = 1,
2999 			.flags = CLK_SET_RATE_PARENT,
3000 			.ops = &clk_branch2_ops,
3001 		},
3002 	},
3003 };
3004 
3005 static struct clk_branch gcc_aggre2_usb3_axi_clk = {
3006 	.halt_reg = 0x83018,
3007 	.clkr = {
3008 		.enable_reg = 0x83018,
3009 		.enable_mask = BIT(0),
3010 		.hw.init = &(struct clk_init_data){
3011 			.name = "gcc_aggre2_usb3_axi_clk",
3012 			.parent_names = (const char *[]){ "usb30_master_clk_src" },
3013 			.num_parents = 1,
3014 			.flags = CLK_SET_RATE_PARENT,
3015 			.ops = &clk_branch2_ops,
3016 		},
3017 	},
3018 };
3019 
3020 static struct clk_branch gcc_dcc_ahb_clk = {
3021 	.halt_reg = 0x84004,
3022 	.clkr = {
3023 		.enable_reg = 0x84004,
3024 		.enable_mask = BIT(0),
3025 		.hw.init = &(struct clk_init_data){
3026 			.name = "gcc_dcc_ahb_clk",
3027 			.parent_names = (const char *[]){ "config_noc_clk_src" },
3028 			.num_parents = 1,
3029 			.ops = &clk_branch2_ops,
3030 		},
3031 	},
3032 };
3033 
3034 static struct clk_branch gcc_aggre0_noc_mpu_cfg_ahb_clk = {
3035 	.halt_reg = 0x85000,
3036 	.clkr = {
3037 		.enable_reg = 0x85000,
3038 		.enable_mask = BIT(0),
3039 		.hw.init = &(struct clk_init_data){
3040 			.name = "gcc_aggre0_noc_mpu_cfg_ahb_clk",
3041 			.parent_names = (const char *[]){ "config_noc_clk_src" },
3042 			.num_parents = 1,
3043 			.ops = &clk_branch2_ops,
3044 		},
3045 	},
3046 };
3047 
3048 static struct clk_branch gcc_qspi_ahb_clk = {
3049 	.halt_reg = 0x8b004,
3050 	.clkr = {
3051 		.enable_reg = 0x8b004,
3052 		.enable_mask = BIT(0),
3053 		.hw.init = &(struct clk_init_data){
3054 			.name = "gcc_qspi_ahb_clk",
3055 			.parent_names = (const char *[]){ "periph_noc_clk_src" },
3056 			.num_parents = 1,
3057 			.flags = CLK_SET_RATE_PARENT,
3058 			.ops = &clk_branch2_ops,
3059 		},
3060 	},
3061 };
3062 
3063 static struct clk_branch gcc_qspi_ser_clk = {
3064 	.halt_reg = 0x8b008,
3065 	.clkr = {
3066 		.enable_reg = 0x8b008,
3067 		.enable_mask = BIT(0),
3068 		.hw.init = &(struct clk_init_data){
3069 			.name = "gcc_qspi_ser_clk",
3070 			.parent_names = (const char *[]){ "qspi_ser_clk_src" },
3071 			.num_parents = 1,
3072 			.flags = CLK_SET_RATE_PARENT,
3073 			.ops = &clk_branch2_ops,
3074 		},
3075 	},
3076 };
3077 
3078 static struct clk_branch gcc_usb3_clkref_clk = {
3079 	.halt_reg = 0x8800C,
3080 	.clkr = {
3081 		.enable_reg = 0x8800C,
3082 		.enable_mask = BIT(0),
3083 		.hw.init = &(struct clk_init_data){
3084 			.name = "gcc_usb3_clkref_clk",
3085 			.parent_names = (const char *[]){ "xo" },
3086 			.num_parents = 1,
3087 			.ops = &clk_branch2_ops,
3088 		},
3089 	},
3090 };
3091 
3092 static struct clk_branch gcc_hdmi_clkref_clk = {
3093 	.halt_reg = 0x88000,
3094 	.clkr = {
3095 		.enable_reg = 0x88000,
3096 		.enable_mask = BIT(0),
3097 		.hw.init = &(struct clk_init_data){
3098 			.name = "gcc_hdmi_clkref_clk",
3099 			.parent_names = (const char *[]){ "xo" },
3100 			.num_parents = 1,
3101 			.ops = &clk_branch2_ops,
3102 		},
3103 	},
3104 };
3105 
3106 static struct clk_branch gcc_edp_clkref_clk = {
3107 	.halt_reg = 0x88004,
3108 	.clkr = {
3109 		.enable_reg = 0x88004,
3110 		.enable_mask = BIT(0),
3111 		.hw.init = &(struct clk_init_data){
3112 			.name = "gcc_edp_clkref_clk",
3113 			.parent_names = (const char *[]){ "xo" },
3114 			.num_parents = 1,
3115 			.ops = &clk_branch2_ops,
3116 		},
3117 	},
3118 };
3119 
3120 static struct clk_branch gcc_ufs_clkref_clk = {
3121 	.halt_reg = 0x88008,
3122 	.clkr = {
3123 		.enable_reg = 0x88008,
3124 		.enable_mask = BIT(0),
3125 		.hw.init = &(struct clk_init_data){
3126 			.name = "gcc_ufs_clkref_clk",
3127 			.parent_names = (const char *[]){ "xo" },
3128 			.num_parents = 1,
3129 			.ops = &clk_branch2_ops,
3130 		},
3131 	},
3132 };
3133 
3134 static struct clk_branch gcc_pcie_clkref_clk = {
3135 	.halt_reg = 0x88010,
3136 	.clkr = {
3137 		.enable_reg = 0x88010,
3138 		.enable_mask = BIT(0),
3139 		.hw.init = &(struct clk_init_data){
3140 			.name = "gcc_pcie_clkref_clk",
3141 			.parent_names = (const char *[]){ "xo" },
3142 			.num_parents = 1,
3143 			.ops = &clk_branch2_ops,
3144 		},
3145 	},
3146 };
3147 
3148 static struct clk_branch gcc_rx2_usb2_clkref_clk = {
3149 	.halt_reg = 0x88014,
3150 	.clkr = {
3151 		.enable_reg = 0x88014,
3152 		.enable_mask = BIT(0),
3153 		.hw.init = &(struct clk_init_data){
3154 			.name = "gcc_rx2_usb2_clkref_clk",
3155 			.parent_names = (const char *[]){ "xo" },
3156 			.num_parents = 1,
3157 			.ops = &clk_branch2_ops,
3158 		},
3159 	},
3160 };
3161 
3162 static struct clk_branch gcc_rx1_usb2_clkref_clk = {
3163 	.halt_reg = 0x88018,
3164 	.clkr = {
3165 		.enable_reg = 0x88018,
3166 		.enable_mask = BIT(0),
3167 		.hw.init = &(struct clk_init_data){
3168 			.name = "gcc_rx1_usb2_clkref_clk",
3169 			.parent_names = (const char *[]){ "xo" },
3170 			.num_parents = 1,
3171 			.ops = &clk_branch2_ops,
3172 		},
3173 	},
3174 };
3175 
3176 static struct clk_branch gcc_mss_cfg_ahb_clk = {
3177 	.halt_reg = 0x8a000,
3178 	.clkr = {
3179 		.enable_reg = 0x8a000,
3180 		.enable_mask = BIT(0),
3181 		.hw.init = &(struct clk_init_data){
3182 			.name = "gcc_mss_cfg_ahb_clk",
3183 			.parent_names = (const char *[]){ "config_noc_clk_src" },
3184 			.num_parents = 1,
3185 			.ops = &clk_branch2_ops,
3186 		},
3187 	},
3188 };
3189 
3190 static struct clk_branch gcc_mss_mnoc_bimc_axi_clk = {
3191 	.halt_reg = 0x8a004,
3192 	.clkr = {
3193 		.enable_reg = 0x8a004,
3194 		.enable_mask = BIT(0),
3195 		.hw.init = &(struct clk_init_data){
3196 			.name = "gcc_mss_mnoc_bimc_axi_clk",
3197 			.parent_names = (const char *[]){ "system_noc_clk_src" },
3198 			.num_parents = 1,
3199 			.ops = &clk_branch2_ops,
3200 		},
3201 	},
3202 };
3203 
3204 static struct clk_branch gcc_mss_snoc_axi_clk = {
3205 	.halt_reg = 0x8a024,
3206 	.clkr = {
3207 		.enable_reg = 0x8a024,
3208 		.enable_mask = BIT(0),
3209 		.hw.init = &(struct clk_init_data){
3210 			.name = "gcc_mss_snoc_axi_clk",
3211 			.parent_names = (const char *[]){ "system_noc_clk_src" },
3212 			.num_parents = 1,
3213 			.ops = &clk_branch2_ops,
3214 		},
3215 	},
3216 };
3217 
3218 static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
3219 	.halt_reg = 0x8a028,
3220 	.clkr = {
3221 		.enable_reg = 0x8a028,
3222 		.enable_mask = BIT(0),
3223 		.hw.init = &(struct clk_init_data){
3224 			.name = "gcc_mss_q6_bimc_axi_clk",
3225 			.parent_names = (const char *[]){ "system_noc_clk_src" },
3226 			.num_parents = 1,
3227 			.ops = &clk_branch2_ops,
3228 		},
3229 	},
3230 };
3231 
3232 static struct clk_hw *gcc_msm8996_hws[] = {
3233 	&xo.hw,
3234 	&gpll0_early_div.hw,
3235 	&ufs_tx_cfg_clk_src.hw,
3236 	&ufs_rx_cfg_clk_src.hw,
3237 	&ufs_ice_core_postdiv_clk_src.hw,
3238 };
3239 
3240 static struct gdsc aggre0_noc_gdsc = {
3241 	.gdscr = 0x81004,
3242 	.gds_hw_ctrl = 0x81028,
3243 	.pd = {
3244 		.name = "aggre0_noc",
3245 	},
3246 	.pwrsts = PWRSTS_OFF_ON,
3247 	.flags = VOTABLE | ALWAYS_ON,
3248 };
3249 
3250 static struct gdsc hlos1_vote_aggre0_noc_gdsc = {
3251 	.gdscr = 0x7d024,
3252 	.pd = {
3253 		.name = "hlos1_vote_aggre0_noc",
3254 	},
3255 	.pwrsts = PWRSTS_OFF_ON,
3256 	.flags = VOTABLE,
3257 };
3258 
3259 static struct gdsc hlos1_vote_lpass_adsp_gdsc = {
3260 	.gdscr = 0x7d034,
3261 	.pd = {
3262 		.name = "hlos1_vote_lpass_adsp",
3263 	},
3264 	.pwrsts = PWRSTS_OFF_ON,
3265 	.flags = VOTABLE,
3266 };
3267 
3268 static struct gdsc hlos1_vote_lpass_core_gdsc = {
3269 	.gdscr = 0x7d038,
3270 	.pd = {
3271 		.name = "hlos1_vote_lpass_core",
3272 	},
3273 	.pwrsts = PWRSTS_OFF_ON,
3274 	.flags = VOTABLE,
3275 };
3276 
3277 static struct gdsc usb30_gdsc = {
3278 	.gdscr = 0xf004,
3279 	.pd = {
3280 		.name = "usb30",
3281 	},
3282 	.pwrsts = PWRSTS_OFF_ON,
3283 };
3284 
3285 static struct gdsc pcie0_gdsc = {
3286 	.gdscr = 0x6b004,
3287 	.pd = {
3288 		.name = "pcie0",
3289 	},
3290 	.pwrsts = PWRSTS_OFF_ON,
3291 };
3292 
3293 static struct gdsc pcie1_gdsc = {
3294 	.gdscr = 0x6d004,
3295 	.pd = {
3296 		.name = "pcie1",
3297 	},
3298 	.pwrsts = PWRSTS_OFF_ON,
3299 };
3300 
3301 static struct gdsc pcie2_gdsc = {
3302 	.gdscr = 0x6e004,
3303 	.pd = {
3304 		.name = "pcie2",
3305 	},
3306 	.pwrsts = PWRSTS_OFF_ON,
3307 };
3308 
3309 static struct gdsc ufs_gdsc = {
3310 	.gdscr = 0x75004,
3311 	.pd = {
3312 		.name = "ufs",
3313 	},
3314 	.pwrsts = PWRSTS_OFF_ON,
3315 };
3316 
3317 static struct clk_regmap *gcc_msm8996_clocks[] = {
3318 	[GPLL0_EARLY] = &gpll0_early.clkr,
3319 	[GPLL0] = &gpll0.clkr,
3320 	[GPLL4_EARLY] = &gpll4_early.clkr,
3321 	[GPLL4] = &gpll4.clkr,
3322 	[SYSTEM_NOC_CLK_SRC] = &system_noc_clk_src.clkr,
3323 	[CONFIG_NOC_CLK_SRC] = &config_noc_clk_src.clkr,
3324 	[PERIPH_NOC_CLK_SRC] = &periph_noc_clk_src.clkr,
3325 	[USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
3326 	[USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
3327 	[USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr,
3328 	[USB20_MASTER_CLK_SRC] = &usb20_master_clk_src.clkr,
3329 	[USB20_MOCK_UTMI_CLK_SRC] = &usb20_mock_utmi_clk_src.clkr,
3330 	[SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
3331 	[SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
3332 	[SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
3333 	[SDCC3_APPS_CLK_SRC] = &sdcc3_apps_clk_src.clkr,
3334 	[SDCC4_APPS_CLK_SRC] = &sdcc4_apps_clk_src.clkr,
3335 	[BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
3336 	[BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
3337 	[BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
3338 	[BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
3339 	[BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
3340 	[BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
3341 	[BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
3342 	[BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
3343 	[BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
3344 	[BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
3345 	[BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
3346 	[BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
3347 	[BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
3348 	[BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
3349 	[BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
3350 	[BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
3351 	[BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
3352 	[BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
3353 	[BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
3354 	[BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
3355 	[BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
3356 	[BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
3357 	[BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
3358 	[BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
3359 	[BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
3360 	[BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
3361 	[BLSP2_UART3_APPS_CLK_SRC] = &blsp2_uart3_apps_clk_src.clkr,
3362 	[BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
3363 	[BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
3364 	[BLSP2_UART4_APPS_CLK_SRC] = &blsp2_uart4_apps_clk_src.clkr,
3365 	[BLSP2_QUP5_SPI_APPS_CLK_SRC] = &blsp2_qup5_spi_apps_clk_src.clkr,
3366 	[BLSP2_QUP5_I2C_APPS_CLK_SRC] = &blsp2_qup5_i2c_apps_clk_src.clkr,
3367 	[BLSP2_UART5_APPS_CLK_SRC] = &blsp2_uart5_apps_clk_src.clkr,
3368 	[BLSP2_QUP6_SPI_APPS_CLK_SRC] = &blsp2_qup6_spi_apps_clk_src.clkr,
3369 	[BLSP2_QUP6_I2C_APPS_CLK_SRC] = &blsp2_qup6_i2c_apps_clk_src.clkr,
3370 	[BLSP2_UART6_APPS_CLK_SRC] = &blsp2_uart6_apps_clk_src.clkr,
3371 	[PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
3372 	[TSIF_REF_CLK_SRC] = &tsif_ref_clk_src.clkr,
3373 	[GCC_SLEEP_CLK_SRC] = &gcc_sleep_clk_src.clkr,
3374 	[HMSS_RBCPR_CLK_SRC] = &hmss_rbcpr_clk_src.clkr,
3375 	[HMSS_GPLL0_CLK_SRC] = &hmss_gpll0_clk_src.clkr,
3376 	[GP1_CLK_SRC] = &gp1_clk_src.clkr,
3377 	[GP2_CLK_SRC] = &gp2_clk_src.clkr,
3378 	[GP3_CLK_SRC] = &gp3_clk_src.clkr,
3379 	[PCIE_AUX_CLK_SRC] = &pcie_aux_clk_src.clkr,
3380 	[UFS_AXI_CLK_SRC] = &ufs_axi_clk_src.clkr,
3381 	[UFS_ICE_CORE_CLK_SRC] = &ufs_ice_core_clk_src.clkr,
3382 	[QSPI_SER_CLK_SRC] = &qspi_ser_clk_src.clkr,
3383 	[GCC_SYS_NOC_USB3_AXI_CLK] = &gcc_sys_noc_usb3_axi_clk.clkr,
3384 	[GCC_SYS_NOC_UFS_AXI_CLK] = &gcc_sys_noc_ufs_axi_clk.clkr,
3385 	[GCC_PERIPH_NOC_USB20_AHB_CLK] = &gcc_periph_noc_usb20_ahb_clk.clkr,
3386 	[GCC_MMSS_NOC_CFG_AHB_CLK] = &gcc_mmss_noc_cfg_ahb_clk.clkr,
3387 	[GCC_MMSS_BIMC_GFX_CLK] = &gcc_mmss_bimc_gfx_clk.clkr,
3388 	[GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
3389 	[GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,
3390 	[GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
3391 	[GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr,
3392 	[GCC_USB3_PHY_PIPE_CLK] = &gcc_usb3_phy_pipe_clk.clkr,
3393 	[GCC_USB20_MASTER_CLK] = &gcc_usb20_master_clk.clkr,
3394 	[GCC_USB20_SLEEP_CLK] = &gcc_usb20_sleep_clk.clkr,
3395 	[GCC_USB20_MOCK_UTMI_CLK] = &gcc_usb20_mock_utmi_clk.clkr,
3396 	[GCC_USB_PHY_CFG_AHB2PHY_CLK] = &gcc_usb_phy_cfg_ahb2phy_clk.clkr,
3397 	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
3398 	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
3399 	[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
3400 	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3401 	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3402 	[GCC_SDCC3_APPS_CLK] = &gcc_sdcc3_apps_clk.clkr,
3403 	[GCC_SDCC3_AHB_CLK] = &gcc_sdcc3_ahb_clk.clkr,
3404 	[GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
3405 	[GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
3406 	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
3407 	[GCC_BLSP1_SLEEP_CLK] = &gcc_blsp1_sleep_clk.clkr,
3408 	[GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
3409 	[GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
3410 	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
3411 	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
3412 	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
3413 	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
3414 	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
3415 	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
3416 	[GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
3417 	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
3418 	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
3419 	[GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
3420 	[GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
3421 	[GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
3422 	[GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
3423 	[GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
3424 	[GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
3425 	[GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
3426 	[GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
3427 	[GCC_BLSP2_SLEEP_CLK] = &gcc_blsp2_sleep_clk.clkr,
3428 	[GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
3429 	[GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
3430 	[GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
3431 	[GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
3432 	[GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
3433 	[GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
3434 	[GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
3435 	[GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
3436 	[GCC_BLSP2_UART3_APPS_CLK] = &gcc_blsp2_uart3_apps_clk.clkr,
3437 	[GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
3438 	[GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
3439 	[GCC_BLSP2_UART4_APPS_CLK] = &gcc_blsp2_uart4_apps_clk.clkr,
3440 	[GCC_BLSP2_QUP5_SPI_APPS_CLK] = &gcc_blsp2_qup5_spi_apps_clk.clkr,
3441 	[GCC_BLSP2_QUP5_I2C_APPS_CLK] = &gcc_blsp2_qup5_i2c_apps_clk.clkr,
3442 	[GCC_BLSP2_UART5_APPS_CLK] = &gcc_blsp2_uart5_apps_clk.clkr,
3443 	[GCC_BLSP2_QUP6_SPI_APPS_CLK] = &gcc_blsp2_qup6_spi_apps_clk.clkr,
3444 	[GCC_BLSP2_QUP6_I2C_APPS_CLK] = &gcc_blsp2_qup6_i2c_apps_clk.clkr,
3445 	[GCC_BLSP2_UART6_APPS_CLK] = &gcc_blsp2_uart6_apps_clk.clkr,
3446 	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3447 	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3448 	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3449 	[GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr,
3450 	[GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
3451 	[GCC_TSIF_INACTIVITY_TIMERS_CLK] = &gcc_tsif_inactivity_timers_clk.clkr,
3452 	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3453 	[GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
3454 	[GCC_HMSS_RBCPR_CLK] = &gcc_hmss_rbcpr_clk.clkr,
3455 	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3456 	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3457 	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3458 	[GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
3459 	[GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
3460 	[GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
3461 	[GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
3462 	[GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
3463 	[GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
3464 	[GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
3465 	[GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
3466 	[GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
3467 	[GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
3468 	[GCC_PCIE_2_SLV_AXI_CLK] = &gcc_pcie_2_slv_axi_clk.clkr,
3469 	[GCC_PCIE_2_MSTR_AXI_CLK] = &gcc_pcie_2_mstr_axi_clk.clkr,
3470 	[GCC_PCIE_2_CFG_AHB_CLK] = &gcc_pcie_2_cfg_ahb_clk.clkr,
3471 	[GCC_PCIE_2_AUX_CLK] = &gcc_pcie_2_aux_clk.clkr,
3472 	[GCC_PCIE_2_PIPE_CLK] = &gcc_pcie_2_pipe_clk.clkr,
3473 	[GCC_PCIE_PHY_CFG_AHB_CLK] = &gcc_pcie_phy_cfg_ahb_clk.clkr,
3474 	[GCC_PCIE_PHY_AUX_CLK] = &gcc_pcie_phy_aux_clk.clkr,
3475 	[GCC_UFS_AXI_CLK] = &gcc_ufs_axi_clk.clkr,
3476 	[GCC_UFS_AHB_CLK] = &gcc_ufs_ahb_clk.clkr,
3477 	[GCC_UFS_TX_CFG_CLK] = &gcc_ufs_tx_cfg_clk.clkr,
3478 	[GCC_UFS_RX_CFG_CLK] = &gcc_ufs_rx_cfg_clk.clkr,
3479 	[GCC_HLOS1_VOTE_LPASS_CORE_SMMU_CLK] = &gcc_hlos1_vote_lpass_core_smmu_clk.clkr,
3480 	[GCC_HLOS1_VOTE_LPASS_ADSP_SMMU_CLK] = &gcc_hlos1_vote_lpass_adsp_smmu_clk.clkr,
3481 	[GCC_UFS_TX_SYMBOL_0_CLK] = &gcc_ufs_tx_symbol_0_clk.clkr,
3482 	[GCC_UFS_RX_SYMBOL_0_CLK] = &gcc_ufs_rx_symbol_0_clk.clkr,
3483 	[GCC_UFS_RX_SYMBOL_1_CLK] = &gcc_ufs_rx_symbol_1_clk.clkr,
3484 	[GCC_UFS_UNIPRO_CORE_CLK] = &gcc_ufs_unipro_core_clk.clkr,
3485 	[GCC_UFS_ICE_CORE_CLK] = &gcc_ufs_ice_core_clk.clkr,
3486 	[GCC_UFS_SYS_CLK_CORE_CLK] = &gcc_ufs_sys_clk_core_clk.clkr,
3487 	[GCC_UFS_TX_SYMBOL_CLK_CORE_CLK] = &gcc_ufs_tx_symbol_clk_core_clk.clkr,
3488 	[GCC_AGGRE0_SNOC_AXI_CLK] = &gcc_aggre0_snoc_axi_clk.clkr,
3489 	[GCC_AGGRE0_CNOC_AHB_CLK] = &gcc_aggre0_cnoc_ahb_clk.clkr,
3490 	[GCC_SMMU_AGGRE0_AXI_CLK] = &gcc_smmu_aggre0_axi_clk.clkr,
3491 	[GCC_SMMU_AGGRE0_AHB_CLK] = &gcc_smmu_aggre0_ahb_clk.clkr,
3492 	[GCC_AGGRE1_PNOC_AHB_CLK] = &gcc_aggre1_pnoc_ahb_clk.clkr,
3493 	[GCC_AGGRE2_UFS_AXI_CLK] = &gcc_aggre2_ufs_axi_clk.clkr,
3494 	[GCC_AGGRE2_USB3_AXI_CLK] = &gcc_aggre2_usb3_axi_clk.clkr,
3495 	[GCC_QSPI_AHB_CLK] = &gcc_qspi_ahb_clk.clkr,
3496 	[GCC_QSPI_SER_CLK] = &gcc_qspi_ser_clk.clkr,
3497 	[GCC_USB3_CLKREF_CLK] = &gcc_usb3_clkref_clk.clkr,
3498 	[GCC_HDMI_CLKREF_CLK] = &gcc_hdmi_clkref_clk.clkr,
3499 	[GCC_UFS_CLKREF_CLK] = &gcc_ufs_clkref_clk.clkr,
3500 	[GCC_PCIE_CLKREF_CLK] = &gcc_pcie_clkref_clk.clkr,
3501 	[GCC_RX2_USB2_CLKREF_CLK] = &gcc_rx2_usb2_clkref_clk.clkr,
3502 	[GCC_RX1_USB2_CLKREF_CLK] = &gcc_rx1_usb2_clkref_clk.clkr,
3503 	[GCC_EDP_CLKREF_CLK] = &gcc_edp_clkref_clk.clkr,
3504 	[GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
3505 	[GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
3506 	[GCC_MSS_SNOC_AXI_CLK] = &gcc_mss_snoc_axi_clk.clkr,
3507 	[GCC_MSS_MNOC_BIMC_AXI_CLK] = &gcc_mss_mnoc_bimc_axi_clk.clkr,
3508 	[GCC_DCC_AHB_CLK] = &gcc_dcc_ahb_clk.clkr,
3509 	[GCC_AGGRE0_NOC_MPU_CFG_AHB_CLK] = &gcc_aggre0_noc_mpu_cfg_ahb_clk.clkr,
3510 	[GCC_MMSS_GPLL0_DIV_CLK] = &gcc_mmss_gpll0_div_clk.clkr,
3511 	[GCC_MSS_GPLL0_DIV_CLK] = &gcc_mss_gpll0_div_clk.clkr,
3512 };
3513 
3514 static struct gdsc *gcc_msm8996_gdscs[] = {
3515 	[AGGRE0_NOC_GDSC] = &aggre0_noc_gdsc,
3516 	[HLOS1_VOTE_AGGRE0_NOC_GDSC] = &hlos1_vote_aggre0_noc_gdsc,
3517 	[HLOS1_VOTE_LPASS_ADSP_GDSC] = &hlos1_vote_lpass_adsp_gdsc,
3518 	[HLOS1_VOTE_LPASS_CORE_GDSC] = &hlos1_vote_lpass_core_gdsc,
3519 	[USB30_GDSC] = &usb30_gdsc,
3520 	[PCIE0_GDSC] = &pcie0_gdsc,
3521 	[PCIE1_GDSC] = &pcie1_gdsc,
3522 	[PCIE2_GDSC] = &pcie2_gdsc,
3523 	[UFS_GDSC] = &ufs_gdsc,
3524 };
3525 
3526 static const struct qcom_reset_map gcc_msm8996_resets[] = {
3527 	[GCC_SYSTEM_NOC_BCR] = { 0x4000 },
3528 	[GCC_CONFIG_NOC_BCR] = { 0x5000 },
3529 	[GCC_PERIPH_NOC_BCR] = { 0x6000 },
3530 	[GCC_IMEM_BCR] = { 0x8000 },
3531 	[GCC_MMSS_BCR] = { 0x9000 },
3532 	[GCC_PIMEM_BCR] = { 0x0a000 },
3533 	[GCC_QDSS_BCR] = { 0x0c000 },
3534 	[GCC_USB_30_BCR] = { 0x0f000 },
3535 	[GCC_USB_20_BCR] = { 0x12000 },
3536 	[GCC_QUSB2PHY_PRIM_BCR] = { 0x12038 },
3537 	[GCC_QUSB2PHY_SEC_BCR] = { 0x1203c },
3538 	[GCC_USB3_PHY_BCR] = { 0x50020 },
3539 	[GCC_USB3PHY_PHY_BCR] = { 0x50024 },
3540 	[GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 },
3541 	[GCC_SDCC1_BCR] = { 0x13000 },
3542 	[GCC_SDCC2_BCR] = { 0x14000 },
3543 	[GCC_SDCC3_BCR] = { 0x15000 },
3544 	[GCC_SDCC4_BCR] = { 0x16000 },
3545 	[GCC_BLSP1_BCR] = { 0x17000 },
3546 	[GCC_BLSP1_QUP1_BCR] = { 0x19000 },
3547 	[GCC_BLSP1_UART1_BCR] = { 0x1a000 },
3548 	[GCC_BLSP1_QUP2_BCR] = { 0x1b000 },
3549 	[GCC_BLSP1_UART2_BCR] = { 0x1c000 },
3550 	[GCC_BLSP1_QUP3_BCR] = { 0x1d000 },
3551 	[GCC_BLSP1_UART3_BCR] = { 0x1e000 },
3552 	[GCC_BLSP1_QUP4_BCR] = { 0x1f000 },
3553 	[GCC_BLSP1_UART4_BCR] = { 0x20000 },
3554 	[GCC_BLSP1_QUP5_BCR] = { 0x21000 },
3555 	[GCC_BLSP1_UART5_BCR] = { 0x22000 },
3556 	[GCC_BLSP1_QUP6_BCR] = { 0x23000 },
3557 	[GCC_BLSP1_UART6_BCR] = { 0x24000 },
3558 	[GCC_BLSP2_BCR] = { 0x25000 },
3559 	[GCC_BLSP2_QUP1_BCR] = { 0x26000 },
3560 	[GCC_BLSP2_UART1_BCR] = { 0x27000 },
3561 	[GCC_BLSP2_QUP2_BCR] = { 0x28000 },
3562 	[GCC_BLSP2_UART2_BCR] = { 0x29000 },
3563 	[GCC_BLSP2_QUP3_BCR] = { 0x2a000 },
3564 	[GCC_BLSP2_UART3_BCR] = { 0x2b000 },
3565 	[GCC_BLSP2_QUP4_BCR] = { 0x2c000 },
3566 	[GCC_BLSP2_UART4_BCR] = { 0x2d000 },
3567 	[GCC_BLSP2_QUP5_BCR] = { 0x2e000 },
3568 	[GCC_BLSP2_UART5_BCR] = { 0x2f000 },
3569 	[GCC_BLSP2_QUP6_BCR] = { 0x30000 },
3570 	[GCC_BLSP2_UART6_BCR] = { 0x31000 },
3571 	[GCC_PDM_BCR] = { 0x33000 },
3572 	[GCC_PRNG_BCR] = { 0x34000 },
3573 	[GCC_TSIF_BCR] = { 0x36000 },
3574 	[GCC_TCSR_BCR] = { 0x37000 },
3575 	[GCC_BOOT_ROM_BCR] = { 0x38000 },
3576 	[GCC_MSG_RAM_BCR] = { 0x39000 },
3577 	[GCC_TLMM_BCR] = { 0x3a000 },
3578 	[GCC_MPM_BCR] = { 0x3b000 },
3579 	[GCC_SEC_CTRL_BCR] = { 0x3d000 },
3580 	[GCC_SPMI_BCR] = { 0x3f000 },
3581 	[GCC_SPDM_BCR] = { 0x40000 },
3582 	[GCC_CE1_BCR] = { 0x41000 },
3583 	[GCC_BIMC_BCR] = { 0x44000 },
3584 	[GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x49000 },
3585 	[GCC_SNOC_BUS_TIMEOUT2_BCR] = { 0x49008 },
3586 	[GCC_SNOC_BUS_TIMEOUT1_BCR] = { 0x49010 },
3587 	[GCC_SNOC_BUS_TIMEOUT3_BCR] = { 0x49018 },
3588 	[GCC_SNOC_BUS_TIMEOUT_EXTREF_BCR] = { 0x49020 },
3589 	[GCC_PNOC_BUS_TIMEOUT0_BCR] = { 0x4a000 },
3590 	[GCC_PNOC_BUS_TIMEOUT1_BCR] = { 0x4a008 },
3591 	[GCC_PNOC_BUS_TIMEOUT2_BCR] = { 0x4a010 },
3592 	[GCC_PNOC_BUS_TIMEOUT3_BCR] = { 0x4a018 },
3593 	[GCC_PNOC_BUS_TIMEOUT4_BCR] = { 0x4a020 },
3594 	[GCC_CNOC_BUS_TIMEOUT0_BCR] = { 0x4b000 },
3595 	[GCC_CNOC_BUS_TIMEOUT1_BCR] = { 0x4b008 },
3596 	[GCC_CNOC_BUS_TIMEOUT2_BCR] = { 0x4b010 },
3597 	[GCC_CNOC_BUS_TIMEOUT3_BCR] = { 0x4b018 },
3598 	[GCC_CNOC_BUS_TIMEOUT4_BCR] = { 0x4b020 },
3599 	[GCC_CNOC_BUS_TIMEOUT5_BCR] = { 0x4b028 },
3600 	[GCC_CNOC_BUS_TIMEOUT6_BCR] = { 0x4b030 },
3601 	[GCC_CNOC_BUS_TIMEOUT7_BCR] = { 0x4b038 },
3602 	[GCC_CNOC_BUS_TIMEOUT8_BCR] = { 0x80000 },
3603 	[GCC_CNOC_BUS_TIMEOUT9_BCR] = { 0x80008 },
3604 	[GCC_CNOC_BUS_TIMEOUT_EXTREF_BCR] = { 0x80010 },
3605 	[GCC_APB2JTAG_BCR] = { 0x4c000 },
3606 	[GCC_RBCPR_CX_BCR] = { 0x4e000 },
3607 	[GCC_RBCPR_MX_BCR] = { 0x4f000 },
3608 	[GCC_PCIE_0_BCR] = { 0x6b000 },
3609 	[GCC_PCIE_0_PHY_BCR] = { 0x6c01c },
3610 	[GCC_PCIE_1_BCR] = { 0x6d000 },
3611 	[GCC_PCIE_1_PHY_BCR] = { 0x6d038 },
3612 	[GCC_PCIE_2_BCR] = { 0x6e000 },
3613 	[GCC_PCIE_2_PHY_BCR] = { 0x6e038 },
3614 	[GCC_PCIE_PHY_BCR] = { 0x6f000 },
3615 	[GCC_PCIE_PHY_COM_BCR] = { 0x6f014 },
3616 	[GCC_PCIE_PHY_COM_NOCSR_BCR] = { 0x6f00c },
3617 	[GCC_DCD_BCR] = { 0x70000 },
3618 	[GCC_OBT_ODT_BCR] = { 0x73000 },
3619 	[GCC_UFS_BCR] = { 0x75000 },
3620 	[GCC_SSC_BCR] = { 0x63000 },
3621 	[GCC_VS_BCR] = { 0x7a000 },
3622 	[GCC_AGGRE0_NOC_BCR] = { 0x81000 },
3623 	[GCC_AGGRE1_NOC_BCR] = { 0x82000 },
3624 	[GCC_AGGRE2_NOC_BCR] = { 0x83000 },
3625 	[GCC_DCC_BCR] = { 0x84000 },
3626 	[GCC_IPA_BCR] = { 0x89000 },
3627 	[GCC_QSPI_BCR] = { 0x8b000 },
3628 	[GCC_SKL_BCR] = { 0x8c000 },
3629 	[GCC_MSMPU_BCR] = { 0x8d000 },
3630 	[GCC_MSS_Q6_BCR] = { 0x8e000 },
3631 	[GCC_QREFS_VBG_CAL_BCR] = { 0x88020 },
3632 	[GCC_MSS_RESTART] = { 0x8f008 },
3633 };
3634 
3635 static const struct regmap_config gcc_msm8996_regmap_config = {
3636 	.reg_bits	= 32,
3637 	.reg_stride	= 4,
3638 	.val_bits	= 32,
3639 	.max_register	= 0x8f010,
3640 	.fast_io	= true,
3641 };
3642 
3643 static const struct qcom_cc_desc gcc_msm8996_desc = {
3644 	.config = &gcc_msm8996_regmap_config,
3645 	.clks = gcc_msm8996_clocks,
3646 	.num_clks = ARRAY_SIZE(gcc_msm8996_clocks),
3647 	.resets = gcc_msm8996_resets,
3648 	.num_resets = ARRAY_SIZE(gcc_msm8996_resets),
3649 	.gdscs = gcc_msm8996_gdscs,
3650 	.num_gdscs = ARRAY_SIZE(gcc_msm8996_gdscs),
3651 	.clk_hws = gcc_msm8996_hws,
3652 	.num_clk_hws = ARRAY_SIZE(gcc_msm8996_hws),
3653 };
3654 
3655 static const struct of_device_id gcc_msm8996_match_table[] = {
3656 	{ .compatible = "qcom,gcc-msm8996" },
3657 	{ }
3658 };
3659 MODULE_DEVICE_TABLE(of, gcc_msm8996_match_table);
3660 
3661 static int gcc_msm8996_probe(struct platform_device *pdev)
3662 {
3663 	struct regmap *regmap;
3664 
3665 	regmap = qcom_cc_map(pdev, &gcc_msm8996_desc);
3666 	if (IS_ERR(regmap))
3667 		return PTR_ERR(regmap);
3668 
3669 	/*
3670 	 * Set the HMSS_AHB_CLK_SLEEP_ENA bit to allow the hmss_ahb_clk to be
3671 	 * turned off by hardware during certain apps low power modes.
3672 	 */
3673 	regmap_update_bits(regmap, 0x52008, BIT(21), BIT(21));
3674 
3675 	return qcom_cc_really_probe(pdev, &gcc_msm8996_desc, regmap);
3676 }
3677 
3678 static struct platform_driver gcc_msm8996_driver = {
3679 	.probe		= gcc_msm8996_probe,
3680 	.driver		= {
3681 		.name	= "gcc-msm8996",
3682 		.of_match_table = gcc_msm8996_match_table,
3683 	},
3684 };
3685 
3686 static int __init gcc_msm8996_init(void)
3687 {
3688 	return platform_driver_register(&gcc_msm8996_driver);
3689 }
3690 core_initcall(gcc_msm8996_init);
3691 
3692 static void __exit gcc_msm8996_exit(void)
3693 {
3694 	platform_driver_unregister(&gcc_msm8996_driver);
3695 }
3696 module_exit(gcc_msm8996_exit);
3697 
3698 MODULE_DESCRIPTION("QCOM GCC MSM8996 Driver");
3699 MODULE_LICENSE("GPL v2");
3700 MODULE_ALIAS("platform:gcc-msm8996");
3701