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