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