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