xref: /openbmc/linux/drivers/clk/qcom/gcc-sc7280.c (revision 67559900)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
4  */
5 
6 #include <linux/clk-provider.h>
7 #include <linux/kernel.h>
8 #include <linux/module.h>
9 #include <linux/of_device.h>
10 #include <linux/of.h>
11 #include <linux/regmap.h>
12 
13 #include <dt-bindings/clock/qcom,gcc-sc7280.h>
14 
15 #include "clk-alpha-pll.h"
16 #include "clk-branch.h"
17 #include "clk-rcg.h"
18 #include "clk-regmap-divider.h"
19 #include "clk-regmap-mux.h"
20 #include "common.h"
21 #include "gdsc.h"
22 #include "reset.h"
23 
24 enum {
25 	P_BI_TCXO,
26 	P_GCC_GPLL0_OUT_EVEN,
27 	P_GCC_GPLL0_OUT_MAIN,
28 	P_GCC_GPLL0_OUT_ODD,
29 	P_GCC_GPLL10_OUT_MAIN,
30 	P_GCC_GPLL4_OUT_MAIN,
31 	P_GCC_GPLL9_OUT_MAIN,
32 	P_PCIE_0_PIPE_CLK,
33 	P_PCIE_1_PIPE_CLK,
34 	P_SLEEP_CLK,
35 	P_UFS_PHY_RX_SYMBOL_0_CLK,
36 	P_UFS_PHY_RX_SYMBOL_1_CLK,
37 	P_UFS_PHY_TX_SYMBOL_0_CLK,
38 	P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
39 	P_GCC_MSS_GPLL0_MAIN_DIV_CLK,
40 };
41 
42 static struct clk_alpha_pll gcc_gpll0 = {
43 	.offset = 0x0,
44 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
45 	.clkr = {
46 		.enable_reg = 0x52010,
47 		.enable_mask = BIT(0),
48 		.hw.init = &(struct clk_init_data){
49 			.name = "gcc_gpll0",
50 			.parent_data = &(const struct clk_parent_data){
51 				.fw_name = "bi_tcxo",
52 			},
53 			.num_parents = 1,
54 			.ops = &clk_alpha_pll_fixed_lucid_ops,
55 		},
56 	},
57 };
58 
59 static const struct clk_div_table post_div_table_gcc_gpll0_out_even[] = {
60 	{ 0x1, 2 },
61 	{ }
62 };
63 
64 static struct clk_alpha_pll_postdiv gcc_gpll0_out_even = {
65 	.offset = 0x0,
66 	.post_div_shift = 8,
67 	.post_div_table = post_div_table_gcc_gpll0_out_even,
68 	.num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
69 	.width = 4,
70 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
71 	.clkr.hw.init = &(struct clk_init_data){
72 		.name = "gcc_gpll0_out_even",
73 		.parent_hws = (const struct clk_hw*[]){
74 			&gcc_gpll0.clkr.hw,
75 		},
76 		.num_parents = 1,
77 		.ops = &clk_alpha_pll_postdiv_lucid_ops,
78 	},
79 };
80 
81 static const struct clk_div_table post_div_table_gcc_gpll0_out_odd[] = {
82 	{ 0x3, 3 },
83 	{ }
84 };
85 
86 static struct clk_alpha_pll_postdiv gcc_gpll0_out_odd = {
87 	.offset = 0x0,
88 	.post_div_shift = 12,
89 	.post_div_table = post_div_table_gcc_gpll0_out_odd,
90 	.num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_odd),
91 	.width = 4,
92 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
93 	.clkr.hw.init = &(struct clk_init_data){
94 		.name = "gcc_gpll0_out_odd",
95 		.parent_hws = (const struct clk_hw*[]){
96 			&gcc_gpll0.clkr.hw,
97 		},
98 		.num_parents = 1,
99 		.ops = &clk_alpha_pll_postdiv_lucid_ops,
100 	},
101 };
102 
103 static struct clk_alpha_pll gcc_gpll1 = {
104 	.offset = 0x1000,
105 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
106 	.clkr = {
107 		.enable_reg = 0x52010,
108 		.enable_mask = BIT(1),
109 		.hw.init = &(struct clk_init_data){
110 			.name = "gcc_gpll1",
111 			.parent_data = &(const struct clk_parent_data){
112 				.fw_name = "bi_tcxo",
113 			},
114 			.num_parents = 1,
115 			.ops = &clk_alpha_pll_fixed_lucid_ops,
116 		},
117 	},
118 };
119 
120 static struct clk_alpha_pll gcc_gpll10 = {
121 	.offset = 0x1e000,
122 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
123 	.clkr = {
124 		.enable_reg = 0x52010,
125 		.enable_mask = BIT(9),
126 		.hw.init = &(struct clk_init_data){
127 			.name = "gcc_gpll10",
128 			.parent_data = &(const struct clk_parent_data){
129 				.fw_name = "bi_tcxo",
130 			},
131 			.num_parents = 1,
132 			.ops = &clk_alpha_pll_fixed_lucid_ops,
133 		},
134 	},
135 };
136 
137 static struct clk_alpha_pll gcc_gpll4 = {
138 	.offset = 0x76000,
139 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
140 	.clkr = {
141 		.enable_reg = 0x52010,
142 		.enable_mask = BIT(4),
143 		.hw.init = &(struct clk_init_data){
144 			.name = "gcc_gpll4",
145 			.parent_data = &(const struct clk_parent_data){
146 				.fw_name = "bi_tcxo",
147 			},
148 			.num_parents = 1,
149 			.ops = &clk_alpha_pll_fixed_lucid_ops,
150 		},
151 	},
152 };
153 
154 static struct clk_alpha_pll gcc_gpll9 = {
155 	.offset = 0x1c000,
156 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
157 	.clkr = {
158 		.enable_reg = 0x52010,
159 		.enable_mask = BIT(8),
160 		.hw.init = &(struct clk_init_data){
161 			.name = "gcc_gpll9",
162 			.parent_data = &(const struct clk_parent_data){
163 				.fw_name = "bi_tcxo",
164 			},
165 			.num_parents = 1,
166 			.ops = &clk_alpha_pll_fixed_lucid_ops,
167 		},
168 	},
169 };
170 
171 static struct clk_branch gcc_mss_gpll0_main_div_clk_src = {
172 	.halt_check = BRANCH_HALT_DELAY,
173 	.clkr = {
174 		.enable_reg = 0x52000,
175 		.enable_mask = BIT(17),
176 		.hw.init = &(struct clk_init_data){
177 			.name = "gcc_mss_gpll0_main_div_clk_src",
178 			.parent_hws = (const struct clk_hw*[]){
179 				&gcc_gpll0_out_even.clkr.hw,
180 			},
181 			.num_parents = 1,
182 			.flags = CLK_SET_RATE_PARENT,
183 			.ops = &clk_branch2_ops,
184 		},
185 	},
186 };
187 
188 static const struct parent_map gcc_parent_map_0[] = {
189 	{ P_BI_TCXO, 0 },
190 	{ P_GCC_GPLL0_OUT_MAIN, 1 },
191 	{ P_GCC_GPLL0_OUT_EVEN, 6 },
192 };
193 
194 static const struct clk_parent_data gcc_parent_data_0[] = {
195 	{ .fw_name = "bi_tcxo" },
196 	{ .hw = &gcc_gpll0.clkr.hw },
197 	{ .hw = &gcc_gpll0_out_even.clkr.hw },
198 };
199 
200 static const struct parent_map gcc_parent_map_1[] = {
201 	{ P_BI_TCXO, 0 },
202 	{ P_GCC_GPLL0_OUT_MAIN, 1 },
203 	{ P_GCC_GPLL0_OUT_ODD, 3 },
204 	{ P_GCC_GPLL0_OUT_EVEN, 6 },
205 };
206 
207 static const struct clk_parent_data gcc_parent_data_1[] = {
208 	{ .fw_name = "bi_tcxo" },
209 	{ .hw = &gcc_gpll0.clkr.hw },
210 	{ .hw = &gcc_gpll0_out_odd.clkr.hw },
211 	{ .hw = &gcc_gpll0_out_even.clkr.hw },
212 };
213 
214 static const struct parent_map gcc_parent_map_2[] = {
215 	{ P_BI_TCXO, 0 },
216 	{ P_SLEEP_CLK, 5 },
217 };
218 
219 static const struct clk_parent_data gcc_parent_data_2[] = {
220 	{ .fw_name = "bi_tcxo" },
221 	{ .fw_name = "sleep_clk" },
222 };
223 
224 static const struct parent_map gcc_parent_map_3[] = {
225 	{ P_BI_TCXO, 0 },
226 };
227 
228 static const struct clk_parent_data gcc_parent_data_3[] = {
229 	{ .fw_name = "bi_tcxo" },
230 };
231 
232 static const struct parent_map gcc_parent_map_4[] = {
233 	{ P_BI_TCXO, 0 },
234 	{ P_GCC_GPLL0_OUT_MAIN, 1 },
235 	{ P_GCC_GPLL0_OUT_ODD, 3 },
236 	{ P_SLEEP_CLK, 5 },
237 	{ P_GCC_GPLL0_OUT_EVEN, 6 },
238 };
239 
240 static const struct clk_parent_data gcc_parent_data_4[] = {
241 	{ .fw_name = "bi_tcxo" },
242 	{ .hw = &gcc_gpll0.clkr.hw },
243 	{ .hw = &gcc_gpll0_out_odd.clkr.hw },
244 	{ .fw_name = "sleep_clk" },
245 	{ .hw = &gcc_gpll0_out_even.clkr.hw },
246 };
247 
248 static const struct parent_map gcc_parent_map_5[] = {
249 	{ P_BI_TCXO, 0 },
250 	{ P_GCC_GPLL0_OUT_EVEN, 6 },
251 };
252 
253 static const struct clk_parent_data gcc_parent_data_5[] = {
254 	{ .fw_name = "bi_tcxo" },
255 	{ .hw = &gcc_gpll0_out_even.clkr.hw },
256 };
257 
258 static const struct parent_map gcc_parent_map_6[] = {
259 	{ P_PCIE_0_PIPE_CLK, 0 },
260 	{ P_BI_TCXO, 2 },
261 };
262 
263 static const struct clk_parent_data gcc_parent_data_6[] = {
264 	{ .fw_name = "pcie_0_pipe_clk", .name = "pcie_0_pipe_clk" },
265 	{ .fw_name = "bi_tcxo" },
266 };
267 
268 static const struct parent_map gcc_parent_map_7[] = {
269 	{ P_PCIE_1_PIPE_CLK, 0 },
270 	{ P_BI_TCXO, 2 },
271 };
272 
273 static const struct clk_parent_data gcc_parent_data_7[] = {
274 	{ .fw_name = "pcie_1_pipe_clk", .name = "pcie_1_pipe_clk" },
275 	{ .fw_name = "bi_tcxo" },
276 };
277 
278 static const struct parent_map gcc_parent_map_8[] = {
279 	{ P_BI_TCXO, 0 },
280 	{ P_GCC_GPLL0_OUT_MAIN, 1 },
281 	{ P_GCC_GPLL0_OUT_ODD, 3 },
282 	{ P_GCC_GPLL10_OUT_MAIN, 5 },
283 	{ P_GCC_GPLL0_OUT_EVEN, 6 },
284 };
285 
286 static const struct clk_parent_data gcc_parent_data_8[] = {
287 	{ .fw_name = "bi_tcxo" },
288 	{ .hw = &gcc_gpll0.clkr.hw },
289 	{ .hw = &gcc_gpll0_out_odd.clkr.hw },
290 	{ .hw = &gcc_gpll10.clkr.hw },
291 	{ .hw = &gcc_gpll0_out_even.clkr.hw },
292 };
293 
294 static const struct parent_map gcc_parent_map_9[] = {
295 	{ P_BI_TCXO, 0 },
296 	{ P_GCC_GPLL0_OUT_MAIN, 1 },
297 	{ P_GCC_GPLL9_OUT_MAIN, 2 },
298 	{ P_GCC_GPLL0_OUT_ODD, 3 },
299 	{ P_GCC_GPLL4_OUT_MAIN, 5 },
300 	{ P_GCC_GPLL0_OUT_EVEN, 6 },
301 };
302 
303 static const struct clk_parent_data gcc_parent_data_9[] = {
304 	{ .fw_name = "bi_tcxo" },
305 	{ .hw = &gcc_gpll0.clkr.hw },
306 	{ .hw = &gcc_gpll9.clkr.hw },
307 	{ .hw = &gcc_gpll0_out_odd.clkr.hw },
308 	{ .hw = &gcc_gpll4.clkr.hw },
309 	{ .hw = &gcc_gpll0_out_even.clkr.hw },
310 };
311 
312 static const struct parent_map gcc_parent_map_10[] = {
313 	{ P_UFS_PHY_RX_SYMBOL_0_CLK, 0 },
314 	{ P_BI_TCXO, 2 },
315 };
316 
317 static const struct clk_parent_data gcc_parent_data_10[] = {
318 	{ .fw_name = "ufs_phy_rx_symbol_0_clk" },
319 	{ .fw_name = "bi_tcxo" },
320 };
321 
322 static const struct parent_map gcc_parent_map_11[] = {
323 	{ P_UFS_PHY_RX_SYMBOL_1_CLK, 0 },
324 	{ P_BI_TCXO, 2 },
325 };
326 
327 static const struct clk_parent_data gcc_parent_data_11[] = {
328 	{ .fw_name = "ufs_phy_rx_symbol_1_clk" },
329 	{ .fw_name = "bi_tcxo" },
330 };
331 
332 static const struct parent_map gcc_parent_map_12[] = {
333 	{ P_UFS_PHY_TX_SYMBOL_0_CLK, 0 },
334 	{ P_BI_TCXO, 2 },
335 };
336 
337 static const struct clk_parent_data gcc_parent_data_12[] = {
338 	{ .fw_name = "ufs_phy_tx_symbol_0_clk" },
339 	{ .fw_name = "bi_tcxo" },
340 };
341 
342 static const struct parent_map gcc_parent_map_13[] = {
343 	{ P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 0 },
344 	{ P_BI_TCXO, 2 },
345 };
346 
347 static const struct clk_parent_data gcc_parent_data_13[] = {
348 	{ .fw_name = "usb3_phy_wrapper_gcc_usb30_pipe_clk" },
349 	{ .fw_name = "bi_tcxo" },
350 };
351 
352 static const struct parent_map gcc_parent_map_14[] = {
353 	{ P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 0 },
354 	{ P_BI_TCXO, 2 },
355 };
356 
357 static const struct clk_parent_data gcc_parent_data_14[] = {
358 	{ .fw_name = "usb3_phy_wrapper_gcc_usb30_pipe_clk" },
359 	{ .fw_name = "bi_tcxo" },
360 };
361 
362 static const struct parent_map gcc_parent_map_15[] = {
363 	{ P_BI_TCXO, 0 },
364 	{ P_GCC_MSS_GPLL0_MAIN_DIV_CLK, 1 },
365 };
366 
367 static const struct clk_parent_data gcc_parent_data_15[] = {
368 	{ .fw_name = "bi_tcxo" },
369 	{ .hw = &gcc_mss_gpll0_main_div_clk_src.clkr.hw },
370 };
371 
372 static struct clk_regmap_mux gcc_pcie_0_pipe_clk_src = {
373 	.reg = 0x6b054,
374 	.shift = 0,
375 	.width = 2,
376 	.parent_map = gcc_parent_map_6,
377 	.clkr = {
378 		.hw.init = &(struct clk_init_data){
379 			.name = "gcc_pcie_0_pipe_clk_src",
380 			.parent_data = gcc_parent_data_6,
381 			.num_parents = ARRAY_SIZE(gcc_parent_data_6),
382 			.ops = &clk_regmap_mux_closest_ops,
383 		},
384 	},
385 };
386 
387 static struct clk_regmap_mux gcc_pcie_1_pipe_clk_src = {
388 	.reg = 0x8d054,
389 	.shift = 0,
390 	.width = 2,
391 	.parent_map = gcc_parent_map_7,
392 	.clkr = {
393 		.hw.init = &(struct clk_init_data){
394 			.name = "gcc_pcie_1_pipe_clk_src",
395 			.parent_data = gcc_parent_data_7,
396 			.num_parents = ARRAY_SIZE(gcc_parent_data_7),
397 			.ops = &clk_regmap_mux_closest_ops,
398 		},
399 	},
400 };
401 
402 static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_0_clk_src = {
403 	.reg = 0x77058,
404 	.shift = 0,
405 	.width = 2,
406 	.parent_map = gcc_parent_map_10,
407 	.clkr = {
408 		.hw.init = &(struct clk_init_data){
409 			.name = "gcc_ufs_phy_rx_symbol_0_clk_src",
410 			.parent_data = gcc_parent_data_10,
411 			.num_parents = ARRAY_SIZE(gcc_parent_data_10),
412 			.ops = &clk_regmap_mux_closest_ops,
413 		},
414 	},
415 };
416 
417 static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_1_clk_src = {
418 	.reg = 0x770c8,
419 	.shift = 0,
420 	.width = 2,
421 	.parent_map = gcc_parent_map_11,
422 	.clkr = {
423 		.hw.init = &(struct clk_init_data){
424 			.name = "gcc_ufs_phy_rx_symbol_1_clk_src",
425 			.parent_data = gcc_parent_data_11,
426 			.num_parents = ARRAY_SIZE(gcc_parent_data_11),
427 			.ops = &clk_regmap_mux_closest_ops,
428 		},
429 	},
430 };
431 
432 static struct clk_regmap_mux gcc_ufs_phy_tx_symbol_0_clk_src = {
433 	.reg = 0x77048,
434 	.shift = 0,
435 	.width = 2,
436 	.parent_map = gcc_parent_map_12,
437 	.clkr = {
438 		.hw.init = &(struct clk_init_data){
439 			.name = "gcc_ufs_phy_tx_symbol_0_clk_src",
440 			.parent_data = gcc_parent_data_12,
441 			.num_parents = ARRAY_SIZE(gcc_parent_data_12),
442 			.ops = &clk_regmap_mux_closest_ops,
443 		},
444 	},
445 };
446 
447 static struct clk_regmap_mux gcc_usb3_prim_phy_pipe_clk_src = {
448 	.reg = 0xf060,
449 	.shift = 0,
450 	.width = 2,
451 	.parent_map = gcc_parent_map_13,
452 	.clkr = {
453 		.hw.init = &(struct clk_init_data){
454 			.name = "gcc_usb3_prim_phy_pipe_clk_src",
455 			.parent_data = gcc_parent_data_13,
456 			.num_parents = ARRAY_SIZE(gcc_parent_data_13),
457 			.ops = &clk_regmap_mux_closest_ops,
458 		},
459 	},
460 };
461 
462 static struct clk_regmap_mux gcc_usb3_sec_phy_pipe_clk_src = {
463 	.reg = 0x9e060,
464 	.shift = 0,
465 	.width = 2,
466 	.parent_map = gcc_parent_map_14,
467 	.clkr = {
468 		.hw.init = &(struct clk_init_data){
469 			.name = "gcc_usb3_sec_phy_pipe_clk_src",
470 			.parent_data = gcc_parent_data_14,
471 			.num_parents = ARRAY_SIZE(gcc_parent_data_14),
472 			.ops = &clk_regmap_mux_closest_ops,
473 		},
474 	},
475 };
476 
477 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
478 	F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
479 	F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
480 	F(200000000, P_GCC_GPLL0_OUT_ODD, 1, 0, 0),
481 	{ }
482 };
483 
484 static struct clk_rcg2 gcc_gp1_clk_src = {
485 	.cmd_rcgr = 0x64004,
486 	.mnd_width = 16,
487 	.hid_width = 5,
488 	.parent_map = gcc_parent_map_4,
489 	.freq_tbl = ftbl_gcc_gp1_clk_src,
490 	.clkr.hw.init = &(struct clk_init_data){
491 		.name = "gcc_gp1_clk_src",
492 		.parent_data = gcc_parent_data_4,
493 		.num_parents = ARRAY_SIZE(gcc_parent_data_4),
494 		.ops = &clk_rcg2_ops,
495 	},
496 };
497 
498 static struct clk_rcg2 gcc_gp2_clk_src = {
499 	.cmd_rcgr = 0x65004,
500 	.mnd_width = 16,
501 	.hid_width = 5,
502 	.parent_map = gcc_parent_map_4,
503 	.freq_tbl = ftbl_gcc_gp1_clk_src,
504 	.clkr.hw.init = &(struct clk_init_data){
505 		.name = "gcc_gp2_clk_src",
506 		.parent_data = gcc_parent_data_4,
507 		.num_parents = ARRAY_SIZE(gcc_parent_data_4),
508 		.ops = &clk_rcg2_ops,
509 	},
510 };
511 
512 static struct clk_rcg2 gcc_gp3_clk_src = {
513 	.cmd_rcgr = 0x66004,
514 	.mnd_width = 16,
515 	.hid_width = 5,
516 	.parent_map = gcc_parent_map_4,
517 	.freq_tbl = ftbl_gcc_gp1_clk_src,
518 	.clkr.hw.init = &(struct clk_init_data){
519 		.name = "gcc_gp3_clk_src",
520 		.parent_data = gcc_parent_data_4,
521 		.num_parents = ARRAY_SIZE(gcc_parent_data_4),
522 		.ops = &clk_rcg2_ops,
523 	},
524 };
525 
526 static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
527 	F(9600000, P_BI_TCXO, 2, 0, 0),
528 	F(19200000, P_BI_TCXO, 1, 0, 0),
529 	{ }
530 };
531 
532 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
533 	.cmd_rcgr = 0x6b058,
534 	.mnd_width = 16,
535 	.hid_width = 5,
536 	.parent_map = gcc_parent_map_2,
537 	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
538 	.clkr.hw.init = &(struct clk_init_data){
539 		.name = "gcc_pcie_0_aux_clk_src",
540 		.parent_data = gcc_parent_data_2,
541 		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
542 		.ops = &clk_rcg2_ops,
543 	},
544 };
545 
546 static const struct freq_tbl ftbl_gcc_pcie_0_phy_rchng_clk_src[] = {
547 	F(19200000, P_BI_TCXO, 1, 0, 0),
548 	F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
549 	{ }
550 };
551 
552 static struct clk_rcg2 gcc_pcie_0_phy_rchng_clk_src = {
553 	.cmd_rcgr = 0x6b03c,
554 	.mnd_width = 0,
555 	.hid_width = 5,
556 	.parent_map = gcc_parent_map_0,
557 	.freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
558 	.clkr.hw.init = &(struct clk_init_data){
559 		.name = "gcc_pcie_0_phy_rchng_clk_src",
560 		.parent_data = gcc_parent_data_0,
561 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
562 		.ops = &clk_rcg2_ops,
563 	},
564 };
565 
566 static struct clk_rcg2 gcc_pcie_1_aux_clk_src = {
567 	.cmd_rcgr = 0x8d058,
568 	.mnd_width = 16,
569 	.hid_width = 5,
570 	.parent_map = gcc_parent_map_2,
571 	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
572 	.clkr.hw.init = &(struct clk_init_data){
573 		.name = "gcc_pcie_1_aux_clk_src",
574 		.parent_data = gcc_parent_data_2,
575 		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
576 		.ops = &clk_rcg2_ops,
577 	},
578 };
579 
580 static struct clk_rcg2 gcc_pcie_1_phy_rchng_clk_src = {
581 	.cmd_rcgr = 0x8d03c,
582 	.mnd_width = 0,
583 	.hid_width = 5,
584 	.parent_map = gcc_parent_map_0,
585 	.freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
586 	.clkr.hw.init = &(struct clk_init_data){
587 		.name = "gcc_pcie_1_phy_rchng_clk_src",
588 		.parent_data = gcc_parent_data_0,
589 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
590 		.flags = CLK_SET_RATE_PARENT,
591 		.ops = &clk_rcg2_ops,
592 	},
593 };
594 
595 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
596 	F(60000000, P_GCC_GPLL0_OUT_EVEN, 5, 0, 0),
597 	{ }
598 };
599 
600 static struct clk_rcg2 gcc_pdm2_clk_src = {
601 	.cmd_rcgr = 0x33010,
602 	.mnd_width = 0,
603 	.hid_width = 5,
604 	.parent_map = gcc_parent_map_0,
605 	.freq_tbl = ftbl_gcc_pdm2_clk_src,
606 	.clkr.hw.init = &(struct clk_init_data){
607 		.name = "gcc_pdm2_clk_src",
608 		.parent_data = gcc_parent_data_0,
609 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
610 		.flags = CLK_SET_RATE_PARENT,
611 		.ops = &clk_rcg2_ops,
612 	},
613 };
614 
615 static const struct freq_tbl ftbl_gcc_qspi_core_clk_src[] = {
616 	F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
617 	F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0),
618 	F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
619 	F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
620 	{ }
621 };
622 
623 static struct clk_rcg2 gcc_qspi_core_clk_src = {
624 	.cmd_rcgr = 0x4b00c,
625 	.mnd_width = 0,
626 	.hid_width = 5,
627 	.parent_map = gcc_parent_map_0,
628 	.freq_tbl = ftbl_gcc_qspi_core_clk_src,
629 	.clkr.hw.init = &(struct clk_init_data){
630 		.name = "gcc_qspi_core_clk_src",
631 		.parent_data = gcc_parent_data_0,
632 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
633 		.ops = &clk_rcg2_floor_ops,
634 	},
635 };
636 
637 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
638 	F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
639 	F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
640 	F(19200000, P_BI_TCXO, 1, 0, 0),
641 	F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
642 	F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
643 	F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
644 	F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
645 	F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
646 	F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
647 	F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
648 	F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
649 	F(102400000, P_GCC_GPLL0_OUT_EVEN, 1, 128, 375),
650 	F(112000000, P_GCC_GPLL0_OUT_EVEN, 1, 28, 75),
651 	F(117964800, P_GCC_GPLL0_OUT_EVEN, 1, 6144, 15625),
652 	F(120000000, P_GCC_GPLL0_OUT_EVEN, 2.5, 0, 0),
653 	{ }
654 };
655 
656 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
657 	.name = "gcc_qupv3_wrap0_s0_clk_src",
658 	.parent_data = gcc_parent_data_0,
659 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
660 	.ops = &clk_rcg2_ops,
661 };
662 
663 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
664 	.cmd_rcgr = 0x17010,
665 	.mnd_width = 16,
666 	.hid_width = 5,
667 	.parent_map = gcc_parent_map_0,
668 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
669 	.clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
670 };
671 
672 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
673 	.name = "gcc_qupv3_wrap0_s1_clk_src",
674 	.parent_data = gcc_parent_data_0,
675 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
676 	.ops = &clk_rcg2_ops,
677 };
678 
679 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
680 	.cmd_rcgr = 0x17140,
681 	.mnd_width = 16,
682 	.hid_width = 5,
683 	.parent_map = gcc_parent_map_0,
684 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
685 	.clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
686 };
687 
688 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s2_clk_src[] = {
689 	F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
690 	F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
691 	F(19200000, P_BI_TCXO, 1, 0, 0),
692 	F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
693 	F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
694 	F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
695 	F(52174000, P_GCC_GPLL0_OUT_MAIN, 1, 2, 23),
696 	F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
697 	F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
698 	F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
699 	F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
700 	F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
701 	{ }
702 };
703 
704 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
705 	.name = "gcc_qupv3_wrap0_s2_clk_src",
706 	.parent_data = gcc_parent_data_0,
707 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
708 	.ops = &clk_rcg2_ops,
709 };
710 
711 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
712 	.cmd_rcgr = 0x17270,
713 	.mnd_width = 16,
714 	.hid_width = 5,
715 	.parent_map = gcc_parent_map_0,
716 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
717 	.clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
718 };
719 
720 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
721 	.name = "gcc_qupv3_wrap0_s3_clk_src",
722 	.parent_data = gcc_parent_data_0,
723 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
724 	.ops = &clk_rcg2_ops,
725 };
726 
727 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
728 	.cmd_rcgr = 0x173a0,
729 	.mnd_width = 16,
730 	.hid_width = 5,
731 	.parent_map = gcc_parent_map_0,
732 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
733 	.clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
734 };
735 
736 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
737 	.name = "gcc_qupv3_wrap0_s4_clk_src",
738 	.parent_data = gcc_parent_data_0,
739 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
740 	.ops = &clk_rcg2_ops,
741 };
742 
743 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
744 	.cmd_rcgr = 0x174d0,
745 	.mnd_width = 16,
746 	.hid_width = 5,
747 	.parent_map = gcc_parent_map_0,
748 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
749 	.clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
750 };
751 
752 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
753 	.name = "gcc_qupv3_wrap0_s5_clk_src",
754 	.parent_data = gcc_parent_data_0,
755 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
756 	.ops = &clk_rcg2_ops,
757 };
758 
759 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
760 	.cmd_rcgr = 0x17600,
761 	.mnd_width = 16,
762 	.hid_width = 5,
763 	.parent_map = gcc_parent_map_0,
764 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
765 	.clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
766 };
767 
768 static struct clk_init_data gcc_qupv3_wrap0_s6_clk_src_init = {
769 	.name = "gcc_qupv3_wrap0_s6_clk_src",
770 	.parent_data = gcc_parent_data_0,
771 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
772 	.ops = &clk_rcg2_ops,
773 };
774 
775 static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
776 	.cmd_rcgr = 0x17730,
777 	.mnd_width = 16,
778 	.hid_width = 5,
779 	.parent_map = gcc_parent_map_0,
780 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
781 	.clkr.hw.init = &gcc_qupv3_wrap0_s6_clk_src_init,
782 };
783 
784 static struct clk_init_data gcc_qupv3_wrap0_s7_clk_src_init = {
785 	.name = "gcc_qupv3_wrap0_s7_clk_src",
786 	.parent_data = gcc_parent_data_0,
787 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
788 	.ops = &clk_rcg2_ops,
789 };
790 
791 static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = {
792 	.cmd_rcgr = 0x17860,
793 	.mnd_width = 16,
794 	.hid_width = 5,
795 	.parent_map = gcc_parent_map_0,
796 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
797 	.clkr.hw.init = &gcc_qupv3_wrap0_s7_clk_src_init,
798 };
799 
800 static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
801 	.name = "gcc_qupv3_wrap1_s0_clk_src",
802 	.parent_data = gcc_parent_data_0,
803 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
804 	.ops = &clk_rcg2_ops,
805 };
806 
807 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
808 	.cmd_rcgr = 0x18010,
809 	.mnd_width = 16,
810 	.hid_width = 5,
811 	.parent_map = gcc_parent_map_0,
812 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
813 	.clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
814 };
815 
816 static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
817 	.name = "gcc_qupv3_wrap1_s1_clk_src",
818 	.parent_data = gcc_parent_data_0,
819 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
820 	.ops = &clk_rcg2_ops,
821 };
822 
823 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
824 	.cmd_rcgr = 0x18140,
825 	.mnd_width = 16,
826 	.hid_width = 5,
827 	.parent_map = gcc_parent_map_0,
828 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
829 	.clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
830 };
831 
832 static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {
833 	.name = "gcc_qupv3_wrap1_s2_clk_src",
834 	.parent_data = gcc_parent_data_0,
835 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
836 	.ops = &clk_rcg2_ops,
837 };
838 
839 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
840 	.cmd_rcgr = 0x18270,
841 	.mnd_width = 16,
842 	.hid_width = 5,
843 	.parent_map = gcc_parent_map_0,
844 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
845 	.clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,
846 };
847 
848 static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
849 	.name = "gcc_qupv3_wrap1_s3_clk_src",
850 	.parent_data = gcc_parent_data_0,
851 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
852 	.ops = &clk_rcg2_ops,
853 };
854 
855 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
856 	.cmd_rcgr = 0x183a0,
857 	.mnd_width = 16,
858 	.hid_width = 5,
859 	.parent_map = gcc_parent_map_0,
860 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
861 	.clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
862 };
863 
864 static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
865 	.name = "gcc_qupv3_wrap1_s4_clk_src",
866 	.parent_data = gcc_parent_data_0,
867 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
868 	.ops = &clk_rcg2_ops,
869 };
870 
871 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
872 	.cmd_rcgr = 0x184d0,
873 	.mnd_width = 16,
874 	.hid_width = 5,
875 	.parent_map = gcc_parent_map_0,
876 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
877 	.clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
878 };
879 
880 static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
881 	.name = "gcc_qupv3_wrap1_s5_clk_src",
882 	.parent_data = gcc_parent_data_0,
883 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
884 	.ops = &clk_rcg2_ops,
885 };
886 
887 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
888 	.cmd_rcgr = 0x18600,
889 	.mnd_width = 16,
890 	.hid_width = 5,
891 	.parent_map = gcc_parent_map_0,
892 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
893 	.clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
894 };
895 
896 static struct clk_init_data gcc_qupv3_wrap1_s6_clk_src_init = {
897 	.name = "gcc_qupv3_wrap1_s6_clk_src",
898 	.parent_data = gcc_parent_data_0,
899 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
900 	.ops = &clk_rcg2_ops,
901 };
902 
903 static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = {
904 	.cmd_rcgr = 0x18730,
905 	.mnd_width = 16,
906 	.hid_width = 5,
907 	.parent_map = gcc_parent_map_0,
908 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
909 	.clkr.hw.init = &gcc_qupv3_wrap1_s6_clk_src_init,
910 };
911 
912 static struct clk_init_data gcc_qupv3_wrap1_s7_clk_src_init = {
913 	.name = "gcc_qupv3_wrap1_s7_clk_src",
914 	.parent_data = gcc_parent_data_0,
915 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
916 	.ops = &clk_rcg2_ops,
917 };
918 
919 static struct clk_rcg2 gcc_qupv3_wrap1_s7_clk_src = {
920 	.cmd_rcgr = 0x18860,
921 	.mnd_width = 16,
922 	.hid_width = 5,
923 	.parent_map = gcc_parent_map_0,
924 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
925 	.clkr.hw.init = &gcc_qupv3_wrap1_s7_clk_src_init,
926 };
927 
928 static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {
929 	F(144000, P_BI_TCXO, 16, 3, 25),
930 	F(400000, P_BI_TCXO, 12, 1, 4),
931 	F(19200000, P_BI_TCXO, 1, 0, 0),
932 	F(20000000, P_GCC_GPLL0_OUT_EVEN, 5, 1, 3),
933 	F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
934 	F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
935 	F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
936 	F(192000000, P_GCC_GPLL10_OUT_MAIN, 2, 0, 0),
937 	F(384000000, P_GCC_GPLL10_OUT_MAIN, 1, 0, 0),
938 	{ }
939 };
940 
941 static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {
942 	.cmd_rcgr = 0x7500c,
943 	.mnd_width = 8,
944 	.hid_width = 5,
945 	.parent_map = gcc_parent_map_8,
946 	.freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,
947 	.clkr.hw.init = &(struct clk_init_data){
948 		.name = "gcc_sdcc1_apps_clk_src",
949 		.parent_data = gcc_parent_data_8,
950 		.num_parents = ARRAY_SIZE(gcc_parent_data_8),
951 		.ops = &clk_rcg2_floor_ops,
952 	},
953 };
954 
955 static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = {
956 	F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
957 	F(150000000, P_GCC_GPLL0_OUT_EVEN, 2, 0, 0),
958 	F(300000000, P_GCC_GPLL0_OUT_EVEN, 1, 0, 0),
959 	{ }
960 };
961 
962 static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = {
963 	.cmd_rcgr = 0x7502c,
964 	.mnd_width = 0,
965 	.hid_width = 5,
966 	.parent_map = gcc_parent_map_1,
967 	.freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src,
968 	.clkr.hw.init = &(struct clk_init_data){
969 		.name = "gcc_sdcc1_ice_core_clk_src",
970 		.parent_data = gcc_parent_data_1,
971 		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
972 		.ops = &clk_rcg2_floor_ops,
973 	},
974 };
975 
976 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
977 	F(400000, P_BI_TCXO, 12, 1, 4),
978 	F(19200000, P_BI_TCXO, 1, 0, 0),
979 	F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
980 	F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
981 	F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
982 	F(202000000, P_GCC_GPLL9_OUT_MAIN, 4, 0, 0),
983 	{ }
984 };
985 
986 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
987 	.cmd_rcgr = 0x1400c,
988 	.mnd_width = 8,
989 	.hid_width = 5,
990 	.parent_map = gcc_parent_map_9,
991 	.freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
992 	.clkr.hw.init = &(struct clk_init_data){
993 		.name = "gcc_sdcc2_apps_clk_src",
994 		.parent_data = gcc_parent_data_9,
995 		.num_parents = ARRAY_SIZE(gcc_parent_data_9),
996 		.flags = CLK_OPS_PARENT_ENABLE,
997 		.ops = &clk_rcg2_floor_ops,
998 	},
999 };
1000 
1001 static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = {
1002 	F(400000, P_BI_TCXO, 12, 1, 4),
1003 	F(19200000, P_BI_TCXO, 1, 0, 0),
1004 	F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
1005 	F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
1006 	F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
1007 	{ }
1008 };
1009 
1010 static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {
1011 	.cmd_rcgr = 0x1600c,
1012 	.mnd_width = 8,
1013 	.hid_width = 5,
1014 	.parent_map = gcc_parent_map_1,
1015 	.freq_tbl = ftbl_gcc_sdcc4_apps_clk_src,
1016 	.clkr.hw.init = &(struct clk_init_data){
1017 		.name = "gcc_sdcc4_apps_clk_src",
1018 		.parent_data = gcc_parent_data_1,
1019 		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1020 		.ops = &clk_rcg2_floor_ops,
1021 	},
1022 };
1023 
1024 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
1025 	F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
1026 	F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
1027 	F(150000000, P_GCC_GPLL0_OUT_EVEN, 2, 0, 0),
1028 	F(300000000, P_GCC_GPLL0_OUT_EVEN, 1, 0, 0),
1029 	{ }
1030 };
1031 
1032 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
1033 	.cmd_rcgr = 0x77024,
1034 	.mnd_width = 8,
1035 	.hid_width = 5,
1036 	.parent_map = gcc_parent_map_0,
1037 	.freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
1038 	.clkr.hw.init = &(struct clk_init_data){
1039 		.name = "gcc_ufs_phy_axi_clk_src",
1040 		.parent_data = gcc_parent_data_0,
1041 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
1042 		.ops = &clk_rcg2_ops,
1043 	},
1044 };
1045 
1046 static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
1047 	F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
1048 	F(150000000, P_GCC_GPLL0_OUT_EVEN, 2, 0, 0),
1049 	F(300000000, P_GCC_GPLL0_OUT_EVEN, 1, 0, 0),
1050 	{ }
1051 };
1052 
1053 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
1054 	.cmd_rcgr = 0x7706c,
1055 	.mnd_width = 0,
1056 	.hid_width = 5,
1057 	.parent_map = gcc_parent_map_0,
1058 	.freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
1059 	.clkr.hw.init = &(struct clk_init_data){
1060 		.name = "gcc_ufs_phy_ice_core_clk_src",
1061 		.parent_data = gcc_parent_data_0,
1062 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
1063 		.ops = &clk_rcg2_ops,
1064 	},
1065 };
1066 
1067 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
1068 	.cmd_rcgr = 0x770a0,
1069 	.mnd_width = 0,
1070 	.hid_width = 5,
1071 	.parent_map = gcc_parent_map_3,
1072 	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
1073 	.clkr.hw.init = &(struct clk_init_data){
1074 		.name = "gcc_ufs_phy_phy_aux_clk_src",
1075 		.parent_data = gcc_parent_data_3,
1076 		.num_parents = ARRAY_SIZE(gcc_parent_data_3),
1077 		.ops = &clk_rcg2_ops,
1078 	},
1079 };
1080 
1081 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
1082 	.cmd_rcgr = 0x77084,
1083 	.mnd_width = 0,
1084 	.hid_width = 5,
1085 	.parent_map = gcc_parent_map_0,
1086 	.freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
1087 	.clkr.hw.init = &(struct clk_init_data){
1088 		.name = "gcc_ufs_phy_unipro_core_clk_src",
1089 		.parent_data = gcc_parent_data_0,
1090 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
1091 		.ops = &clk_rcg2_ops,
1092 	},
1093 };
1094 
1095 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
1096 	F(66666667, P_GCC_GPLL0_OUT_EVEN, 4.5, 0, 0),
1097 	F(133333333, P_GCC_GPLL0_OUT_MAIN, 4.5, 0, 0),
1098 	F(200000000, P_GCC_GPLL0_OUT_ODD, 1, 0, 0),
1099 	F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0),
1100 	{ }
1101 };
1102 
1103 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1104 	.cmd_rcgr = 0xf020,
1105 	.mnd_width = 8,
1106 	.hid_width = 5,
1107 	.parent_map = gcc_parent_map_1,
1108 	.freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1109 	.clkr.hw.init = &(struct clk_init_data){
1110 		.name = "gcc_usb30_prim_master_clk_src",
1111 		.parent_data = gcc_parent_data_1,
1112 		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1113 		.ops = &clk_rcg2_ops,
1114 	},
1115 };
1116 
1117 static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {
1118 	F(19200000, P_BI_TCXO, 1, 0, 0),
1119 	{ }
1120 };
1121 
1122 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1123 	.cmd_rcgr = 0xf038,
1124 	.mnd_width = 0,
1125 	.hid_width = 5,
1126 	.parent_map = gcc_parent_map_3,
1127 	.freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1128 	.clkr.hw.init = &(struct clk_init_data){
1129 		.name = "gcc_usb30_prim_mock_utmi_clk_src",
1130 		.parent_data = gcc_parent_data_3,
1131 		.num_parents = ARRAY_SIZE(gcc_parent_data_3),
1132 		.ops = &clk_rcg2_ops,
1133 	},
1134 };
1135 
1136 static const struct freq_tbl ftbl_gcc_usb30_sec_master_clk_src[] = {
1137 	F(60000000, P_GCC_GPLL0_OUT_EVEN, 5, 0, 0),
1138 	F(120000000, P_GCC_GPLL0_OUT_EVEN, 2.5, 0, 0),
1139 	{ }
1140 };
1141 
1142 static struct clk_rcg2 gcc_usb30_sec_master_clk_src = {
1143 	.cmd_rcgr = 0x9e020,
1144 	.mnd_width = 8,
1145 	.hid_width = 5,
1146 	.parent_map = gcc_parent_map_5,
1147 	.freq_tbl = ftbl_gcc_usb30_sec_master_clk_src,
1148 	.clkr.hw.init = &(struct clk_init_data){
1149 		.name = "gcc_usb30_sec_master_clk_src",
1150 		.parent_data = gcc_parent_data_5,
1151 		.num_parents = ARRAY_SIZE(gcc_parent_data_5),
1152 		.ops = &clk_rcg2_ops,
1153 	},
1154 };
1155 
1156 static struct clk_rcg2 gcc_usb30_sec_mock_utmi_clk_src = {
1157 	.cmd_rcgr = 0x9e038,
1158 	.mnd_width = 0,
1159 	.hid_width = 5,
1160 	.parent_map = gcc_parent_map_3,
1161 	.freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1162 	.clkr.hw.init = &(struct clk_init_data){
1163 		.name = "gcc_usb30_sec_mock_utmi_clk_src",
1164 		.parent_data = gcc_parent_data_3,
1165 		.num_parents = ARRAY_SIZE(gcc_parent_data_3),
1166 		.ops = &clk_rcg2_ops,
1167 	},
1168 };
1169 
1170 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1171 	.cmd_rcgr = 0xf064,
1172 	.mnd_width = 0,
1173 	.hid_width = 5,
1174 	.parent_map = gcc_parent_map_2,
1175 	.freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1176 	.clkr.hw.init = &(struct clk_init_data){
1177 		.name = "gcc_usb3_prim_phy_aux_clk_src",
1178 		.parent_data = gcc_parent_data_2,
1179 		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
1180 		.ops = &clk_rcg2_ops,
1181 	},
1182 };
1183 
1184 static struct clk_rcg2 gcc_usb3_sec_phy_aux_clk_src = {
1185 	.cmd_rcgr = 0x9e064,
1186 	.mnd_width = 0,
1187 	.hid_width = 5,
1188 	.parent_map = gcc_parent_map_2,
1189 	.freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1190 	.clkr.hw.init = &(struct clk_init_data){
1191 		.name = "gcc_usb3_sec_phy_aux_clk_src",
1192 		.parent_data = gcc_parent_data_2,
1193 		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
1194 		.ops = &clk_rcg2_ops,
1195 	},
1196 };
1197 
1198 static const struct freq_tbl ftbl_gcc_sec_ctrl_clk_src[] = {
1199 	F(4800000, P_BI_TCXO, 4, 0, 0),
1200 	F(19200000, P_BI_TCXO, 1, 0, 0),
1201 	{ }
1202 };
1203 
1204 static struct clk_rcg2 gcc_sec_ctrl_clk_src = {
1205 	.cmd_rcgr = 0x3d02c,
1206 	.mnd_width = 0,
1207 	.hid_width = 5,
1208 	.parent_map = gcc_parent_map_3,
1209 	.freq_tbl = ftbl_gcc_sec_ctrl_clk_src,
1210 	.clkr.hw.init = &(struct clk_init_data){
1211 		.name = "gcc_sec_ctrl_clk_src",
1212 		.parent_data = gcc_parent_data_3,
1213 		.num_parents = ARRAY_SIZE(gcc_parent_data_3),
1214 		.ops = &clk_rcg2_ops,
1215 	},
1216 };
1217 
1218 static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {
1219 	.reg = 0xf050,
1220 	.shift = 0,
1221 	.width = 4,
1222 	.clkr.hw.init = &(struct clk_init_data) {
1223 		.name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",
1224 		.parent_hws = (const struct clk_hw*[]){
1225 			&gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
1226 		},
1227 		.num_parents = 1,
1228 		.flags = CLK_SET_RATE_PARENT,
1229 		.ops = &clk_regmap_div_ro_ops,
1230 	},
1231 };
1232 
1233 static struct clk_regmap_div gcc_usb30_sec_mock_utmi_postdiv_clk_src = {
1234 	.reg = 0x9e050,
1235 	.shift = 0,
1236 	.width = 4,
1237 	.clkr.hw.init = &(struct clk_init_data) {
1238 		.name = "gcc_usb30_sec_mock_utmi_postdiv_clk_src",
1239 		.parent_hws = (const struct clk_hw*[]){
1240 			&gcc_usb30_sec_mock_utmi_clk_src.clkr.hw,
1241 		},
1242 		.num_parents = 1,
1243 		.flags = CLK_SET_RATE_PARENT,
1244 		.ops = &clk_regmap_div_ro_ops,
1245 	},
1246 };
1247 
1248 static struct clk_branch gcc_pcie_clkref_en = {
1249 	.halt_reg = 0x8c004,
1250 	.halt_check = BRANCH_HALT,
1251 	.clkr = {
1252 		.enable_reg = 0x8c004,
1253 		.enable_mask = BIT(0),
1254 		.hw.init = &(struct clk_init_data){
1255 			.name = "gcc_pcie_clkref_en",
1256 			.ops = &clk_branch2_ops,
1257 		},
1258 	},
1259 };
1260 
1261 static struct clk_branch gcc_edp_clkref_en = {
1262 	.halt_reg = 0x8c008,
1263 	.halt_check = BRANCH_HALT,
1264 	.clkr = {
1265 		.enable_reg = 0x8c008,
1266 		.enable_mask = BIT(0),
1267 		.hw.init = &(struct clk_init_data){
1268 			.name = "gcc_edp_clkref_en",
1269 			.ops = &clk_branch2_ops,
1270 		},
1271 	},
1272 };
1273 
1274 static struct clk_branch gcc_aggre_noc_pcie_0_axi_clk = {
1275 	.halt_reg = 0x6b080,
1276 	.halt_check = BRANCH_HALT_SKIP,
1277 	.hwcg_reg = 0x6b080,
1278 	.hwcg_bit = 1,
1279 	.clkr = {
1280 		.enable_reg = 0x52000,
1281 		.enable_mask = BIT(12),
1282 		.hw.init = &(struct clk_init_data){
1283 			.name = "gcc_aggre_noc_pcie_0_axi_clk",
1284 			.ops = &clk_branch2_ops,
1285 		},
1286 	},
1287 };
1288 
1289 static struct clk_branch gcc_aggre_noc_pcie_1_axi_clk = {
1290 	.halt_reg = 0x8d084,
1291 	.halt_check = BRANCH_HALT_SKIP,
1292 	.hwcg_reg = 0x8d084,
1293 	.hwcg_bit = 1,
1294 	.clkr = {
1295 		.enable_reg = 0x52000,
1296 		.enable_mask = BIT(11),
1297 		.hw.init = &(struct clk_init_data){
1298 			.name = "gcc_aggre_noc_pcie_1_axi_clk",
1299 			.ops = &clk_branch2_ops,
1300 		},
1301 	},
1302 };
1303 
1304 static struct clk_branch gcc_aggre_noc_pcie_tbu_clk = {
1305 	.halt_reg = 0x90010,
1306 	.halt_check = BRANCH_HALT_VOTED,
1307 	.hwcg_reg = 0x90010,
1308 	.hwcg_bit = 1,
1309 	.clkr = {
1310 		.enable_reg = 0x52000,
1311 		.enable_mask = BIT(18),
1312 		.hw.init = &(struct clk_init_data){
1313 			.name = "gcc_aggre_noc_pcie_tbu_clk",
1314 			.ops = &clk_branch2_ops,
1315 		},
1316 	},
1317 };
1318 
1319 static struct clk_branch gcc_aggre_noc_pcie_center_sf_axi_clk = {
1320 	.halt_reg = 0x8d088,
1321 	.halt_check = BRANCH_HALT_VOTED,
1322 	.hwcg_reg = 0x8d088,
1323 	.hwcg_bit = 1,
1324 	.clkr = {
1325 		.enable_reg = 0x52008,
1326 		.enable_mask = BIT(28),
1327 		.hw.init = &(struct clk_init_data){
1328 			.name = "gcc_aggre_noc_pcie_center_sf_axi_clk",
1329 			.ops = &clk_branch2_ops,
1330 		},
1331 	},
1332 };
1333 
1334 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
1335 	.halt_reg = 0x770cc,
1336 	.halt_check = BRANCH_HALT_VOTED,
1337 	.hwcg_reg = 0x770cc,
1338 	.hwcg_bit = 1,
1339 	.clkr = {
1340 		.enable_reg = 0x770cc,
1341 		.enable_mask = BIT(0),
1342 		.hw.init = &(struct clk_init_data){
1343 			.name = "gcc_aggre_ufs_phy_axi_clk",
1344 			.parent_hws = (const struct clk_hw*[]){
1345 				&gcc_ufs_phy_axi_clk_src.clkr.hw,
1346 			},
1347 			.num_parents = 1,
1348 			.flags = CLK_SET_RATE_PARENT,
1349 			.ops = &clk_branch2_ops,
1350 		},
1351 	},
1352 };
1353 
1354 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
1355 	.halt_reg = 0xf080,
1356 	.halt_check = BRANCH_HALT_VOTED,
1357 	.hwcg_reg = 0xf080,
1358 	.hwcg_bit = 1,
1359 	.clkr = {
1360 		.enable_reg = 0xf080,
1361 		.enable_mask = BIT(0),
1362 		.hw.init = &(struct clk_init_data){
1363 			.name = "gcc_aggre_usb3_prim_axi_clk",
1364 			.parent_hws = (const struct clk_hw*[]){
1365 				&gcc_usb30_prim_master_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_aggre_usb3_sec_axi_clk = {
1375 	.halt_reg = 0x9e080,
1376 	.halt_check = BRANCH_HALT_VOTED,
1377 	.hwcg_reg = 0x9e080,
1378 	.hwcg_bit = 1,
1379 	.clkr = {
1380 		.enable_reg = 0x9e080,
1381 		.enable_mask = BIT(0),
1382 		.hw.init = &(struct clk_init_data){
1383 			.name = "gcc_aggre_usb3_sec_axi_clk",
1384 			.parent_hws = (const struct clk_hw*[]){
1385 				&gcc_usb30_sec_master_clk_src.clkr.hw,
1386 			},
1387 			.num_parents = 1,
1388 			.flags = CLK_SET_RATE_PARENT,
1389 			.ops = &clk_branch2_ops,
1390 		},
1391 	},
1392 };
1393 
1394 static struct clk_branch gcc_camera_hf_axi_clk = {
1395 	.halt_reg = 0x26010,
1396 	.halt_check = BRANCH_HALT_SKIP,
1397 	.hwcg_reg = 0x26010,
1398 	.hwcg_bit = 1,
1399 	.clkr = {
1400 		.enable_reg = 0x26010,
1401 		.enable_mask = BIT(0),
1402 		.hw.init = &(struct clk_init_data){
1403 			.name = "gcc_camera_hf_axi_clk",
1404 			.ops = &clk_branch2_ops,
1405 		},
1406 	},
1407 };
1408 
1409 static struct clk_branch gcc_camera_sf_axi_clk = {
1410 	.halt_reg = 0x2601c,
1411 	.halt_check = BRANCH_HALT_SKIP,
1412 	.hwcg_reg = 0x2601c,
1413 	.hwcg_bit = 1,
1414 	.clkr = {
1415 		.enable_reg = 0x2601c,
1416 		.enable_mask = BIT(0),
1417 		.hw.init = &(struct clk_init_data){
1418 			.name = "gcc_camera_sf_axi_clk",
1419 			.ops = &clk_branch2_ops,
1420 		},
1421 	},
1422 };
1423 
1424 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1425 	.halt_reg = 0xf07c,
1426 	.halt_check = BRANCH_HALT_VOTED,
1427 	.hwcg_reg = 0xf07c,
1428 	.hwcg_bit = 1,
1429 	.clkr = {
1430 		.enable_reg = 0xf07c,
1431 		.enable_mask = BIT(0),
1432 		.hw.init = &(struct clk_init_data){
1433 			.name = "gcc_cfg_noc_usb3_prim_axi_clk",
1434 			.parent_hws = (const struct clk_hw*[]){
1435 				&gcc_usb30_prim_master_clk_src.clkr.hw,
1436 			},
1437 			.num_parents = 1,
1438 			.flags = CLK_SET_RATE_PARENT,
1439 			.ops = &clk_branch2_ops,
1440 		},
1441 	},
1442 };
1443 
1444 static struct clk_branch gcc_cfg_noc_usb3_sec_axi_clk = {
1445 	.halt_reg = 0x9e07c,
1446 	.halt_check = BRANCH_HALT_VOTED,
1447 	.hwcg_reg = 0x9e07c,
1448 	.hwcg_bit = 1,
1449 	.clkr = {
1450 		.enable_reg = 0x9e07c,
1451 		.enable_mask = BIT(0),
1452 		.hw.init = &(struct clk_init_data){
1453 			.name = "gcc_cfg_noc_usb3_sec_axi_clk",
1454 			.parent_hws = (const struct clk_hw*[]){
1455 				&gcc_usb30_sec_master_clk_src.clkr.hw,
1456 			},
1457 			.num_parents = 1,
1458 			.flags = CLK_SET_RATE_PARENT,
1459 			.ops = &clk_branch2_ops,
1460 		},
1461 	},
1462 };
1463 
1464 static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1465 	.halt_reg = 0x71154,
1466 	.halt_check = BRANCH_HALT_SKIP,
1467 	.hwcg_reg = 0x71154,
1468 	.hwcg_bit = 1,
1469 	.clkr = {
1470 		.enable_reg = 0x71154,
1471 		.enable_mask = BIT(0),
1472 		.hw.init = &(struct clk_init_data){
1473 			.name = "gcc_ddrss_gpu_axi_clk",
1474 			.ops = &clk_branch2_aon_ops,
1475 		},
1476 	},
1477 };
1478 
1479 static struct clk_branch gcc_ddrss_pcie_sf_clk = {
1480 	.halt_reg = 0x8d080,
1481 	.halt_check = BRANCH_HALT_SKIP,
1482 	.hwcg_reg = 0x8d080,
1483 	.hwcg_bit = 1,
1484 	.clkr = {
1485 		.enable_reg = 0x52000,
1486 		.enable_mask = BIT(19),
1487 		.hw.init = &(struct clk_init_data){
1488 			.name = "gcc_ddrss_pcie_sf_clk",
1489 			.ops = &clk_branch2_ops,
1490 		},
1491 	},
1492 };
1493 
1494 static struct clk_branch gcc_disp_gpll0_clk_src = {
1495 	.halt_check = BRANCH_HALT_DELAY,
1496 	.clkr = {
1497 		.enable_reg = 0x52000,
1498 		.enable_mask = BIT(7),
1499 		.hw.init = &(struct clk_init_data){
1500 			.name = "gcc_disp_gpll0_clk_src",
1501 			.parent_hws = (const struct clk_hw*[]){
1502 				&gcc_gpll0.clkr.hw,
1503 			},
1504 			.num_parents = 1,
1505 			.flags = CLK_SET_RATE_PARENT,
1506 			.ops = &clk_branch2_ops,
1507 		},
1508 	},
1509 };
1510 
1511 static struct clk_branch gcc_disp_hf_axi_clk = {
1512 	.halt_reg = 0x2700c,
1513 	.halt_check = BRANCH_HALT_SKIP,
1514 	.hwcg_reg = 0x2700c,
1515 	.hwcg_bit = 1,
1516 	.clkr = {
1517 		.enable_reg = 0x2700c,
1518 		.enable_mask = BIT(0),
1519 		.hw.init = &(struct clk_init_data){
1520 			.name = "gcc_disp_hf_axi_clk",
1521 			.ops = &clk_branch2_ops,
1522 		},
1523 	},
1524 };
1525 
1526 static struct clk_branch gcc_disp_sf_axi_clk = {
1527 	.halt_reg = 0x27014,
1528 	.halt_check = BRANCH_HALT_SKIP,
1529 	.hwcg_reg = 0x27014,
1530 	.hwcg_bit = 1,
1531 	.clkr = {
1532 		.enable_reg = 0x27014,
1533 		.enable_mask = BIT(0),
1534 		.hw.init = &(struct clk_init_data){
1535 			.name = "gcc_disp_sf_axi_clk",
1536 			.ops = &clk_branch2_ops,
1537 		},
1538 	},
1539 };
1540 
1541 static struct clk_branch gcc_gp1_clk = {
1542 	.halt_reg = 0x64000,
1543 	.halt_check = BRANCH_HALT,
1544 	.clkr = {
1545 		.enable_reg = 0x64000,
1546 		.enable_mask = BIT(0),
1547 		.hw.init = &(struct clk_init_data){
1548 			.name = "gcc_gp1_clk",
1549 			.parent_hws = (const struct clk_hw*[]){
1550 				&gcc_gp1_clk_src.clkr.hw,
1551 			},
1552 			.num_parents = 1,
1553 			.flags = CLK_SET_RATE_PARENT,
1554 			.ops = &clk_branch2_ops,
1555 		},
1556 	},
1557 };
1558 
1559 static struct clk_branch gcc_gp2_clk = {
1560 	.halt_reg = 0x65000,
1561 	.halt_check = BRANCH_HALT,
1562 	.clkr = {
1563 		.enable_reg = 0x65000,
1564 		.enable_mask = BIT(0),
1565 		.hw.init = &(struct clk_init_data){
1566 			.name = "gcc_gp2_clk",
1567 			.parent_hws = (const struct clk_hw*[]){
1568 				&gcc_gp2_clk_src.clkr.hw,
1569 			},
1570 			.num_parents = 1,
1571 			.flags = CLK_SET_RATE_PARENT,
1572 			.ops = &clk_branch2_ops,
1573 		},
1574 	},
1575 };
1576 
1577 static struct clk_branch gcc_gp3_clk = {
1578 	.halt_reg = 0x66000,
1579 	.halt_check = BRANCH_HALT,
1580 	.clkr = {
1581 		.enable_reg = 0x66000,
1582 		.enable_mask = BIT(0),
1583 		.hw.init = &(struct clk_init_data){
1584 			.name = "gcc_gp3_clk",
1585 			.parent_hws = (const struct clk_hw*[]){
1586 				&gcc_gp3_clk_src.clkr.hw,
1587 			},
1588 			.num_parents = 1,
1589 			.flags = CLK_SET_RATE_PARENT,
1590 			.ops = &clk_branch2_ops,
1591 		},
1592 	},
1593 };
1594 
1595 static struct clk_branch gcc_gpu_gpll0_clk_src = {
1596 	.halt_check = BRANCH_HALT_DELAY,
1597 	.clkr = {
1598 		.enable_reg = 0x52000,
1599 		.enable_mask = BIT(15),
1600 		.hw.init = &(struct clk_init_data){
1601 			.name = "gcc_gpu_gpll0_clk_src",
1602 			.parent_hws = (const struct clk_hw*[]){
1603 				&gcc_gpll0.clkr.hw,
1604 			},
1605 			.num_parents = 1,
1606 			.flags = CLK_SET_RATE_PARENT,
1607 			.ops = &clk_branch2_ops,
1608 		},
1609 	},
1610 };
1611 
1612 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
1613 	.halt_check = BRANCH_HALT_DELAY,
1614 	.clkr = {
1615 		.enable_reg = 0x52000,
1616 		.enable_mask = BIT(16),
1617 		.hw.init = &(struct clk_init_data){
1618 			.name = "gcc_gpu_gpll0_div_clk_src",
1619 			.parent_hws = (const struct clk_hw*[]){
1620 				&gcc_gpll0_out_even.clkr.hw,
1621 			},
1622 			.num_parents = 1,
1623 			.flags = CLK_SET_RATE_PARENT,
1624 			.ops = &clk_branch2_ops,
1625 		},
1626 	},
1627 };
1628 
1629 static struct clk_branch gcc_gpu_iref_en = {
1630 	.halt_reg = 0x8c014,
1631 	.halt_check = BRANCH_HALT,
1632 	.clkr = {
1633 		.enable_reg = 0x8c014,
1634 		.enable_mask = BIT(0),
1635 		.hw.init = &(struct clk_init_data){
1636 			.name = "gcc_gpu_iref_en",
1637 			.ops = &clk_branch2_ops,
1638 		},
1639 	},
1640 };
1641 
1642 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
1643 	.halt_reg = 0x7100c,
1644 	.halt_check = BRANCH_HALT_VOTED,
1645 	.hwcg_reg = 0x7100c,
1646 	.hwcg_bit = 1,
1647 	.clkr = {
1648 		.enable_reg = 0x7100c,
1649 		.enable_mask = BIT(0),
1650 		.hw.init = &(struct clk_init_data){
1651 			.name = "gcc_gpu_memnoc_gfx_clk",
1652 			.ops = &clk_branch2_aon_ops,
1653 		},
1654 	},
1655 };
1656 
1657 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
1658 	.halt_reg = 0x71018,
1659 	.halt_check = BRANCH_HALT,
1660 	.clkr = {
1661 		.enable_reg = 0x71018,
1662 		.enable_mask = BIT(0),
1663 		.hw.init = &(struct clk_init_data){
1664 			.name = "gcc_gpu_snoc_dvm_gfx_clk",
1665 			.ops = &clk_branch2_aon_ops,
1666 		},
1667 	},
1668 };
1669 
1670 static struct clk_branch gcc_pcie0_phy_rchng_clk = {
1671 	.halt_reg = 0x6b038,
1672 	.halt_check = BRANCH_HALT_VOTED,
1673 	.clkr = {
1674 		.enable_reg = 0x52000,
1675 		.enable_mask = BIT(22),
1676 		.hw.init = &(struct clk_init_data){
1677 			.name = "gcc_pcie0_phy_rchng_clk",
1678 			.parent_hws = (const struct clk_hw*[]){
1679 				&gcc_pcie_0_phy_rchng_clk_src.clkr.hw,
1680 			},
1681 			.num_parents = 1,
1682 			.flags = CLK_SET_RATE_PARENT,
1683 			.ops = &clk_branch2_ops,
1684 		},
1685 	},
1686 };
1687 
1688 static struct clk_branch gcc_pcie1_phy_rchng_clk = {
1689 	.halt_reg = 0x8d038,
1690 	.halt_check = BRANCH_HALT_VOTED,
1691 	.clkr = {
1692 		.enable_reg = 0x52000,
1693 		.enable_mask = BIT(23),
1694 		.hw.init = &(struct clk_init_data){
1695 			.name = "gcc_pcie1_phy_rchng_clk",
1696 			.parent_hws = (const struct clk_hw*[]){
1697 				&gcc_pcie_1_phy_rchng_clk_src.clkr.hw,
1698 			},
1699 			.num_parents = 1,
1700 			.flags = CLK_SET_RATE_PARENT,
1701 			.ops = &clk_branch2_ops,
1702 		},
1703 	},
1704 };
1705 
1706 static struct clk_branch gcc_pcie_0_aux_clk = {
1707 	.halt_reg = 0x6b028,
1708 	.halt_check = BRANCH_HALT_VOTED,
1709 	.clkr = {
1710 		.enable_reg = 0x52008,
1711 		.enable_mask = BIT(3),
1712 		.hw.init = &(struct clk_init_data){
1713 			.name = "gcc_pcie_0_aux_clk",
1714 			.parent_hws = (const struct clk_hw*[]){
1715 				&gcc_pcie_0_aux_clk_src.clkr.hw,
1716 			},
1717 			.num_parents = 1,
1718 			.flags = CLK_SET_RATE_PARENT,
1719 			.ops = &clk_branch2_ops,
1720 		},
1721 	},
1722 };
1723 
1724 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
1725 	.halt_reg = 0x6b024,
1726 	.halt_check = BRANCH_HALT_VOTED,
1727 	.hwcg_reg = 0x6b024,
1728 	.hwcg_bit = 1,
1729 	.clkr = {
1730 		.enable_reg = 0x52008,
1731 		.enable_mask = BIT(2),
1732 		.hw.init = &(struct clk_init_data){
1733 			.name = "gcc_pcie_0_cfg_ahb_clk",
1734 			.ops = &clk_branch2_ops,
1735 		},
1736 	},
1737 };
1738 
1739 static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
1740 	.halt_reg = 0x6b01c,
1741 	.halt_check = BRANCH_HALT_SKIP,
1742 	.clkr = {
1743 		.enable_reg = 0x52008,
1744 		.enable_mask = BIT(1),
1745 		.hw.init = &(struct clk_init_data){
1746 			.name = "gcc_pcie_0_mstr_axi_clk",
1747 			.ops = &clk_branch2_ops,
1748 		},
1749 	},
1750 };
1751 
1752 static struct clk_branch gcc_pcie_0_pipe_clk = {
1753 	.halt_reg = 0x6b030,
1754 	.halt_check = BRANCH_HALT_SKIP,
1755 	.clkr = {
1756 		.enable_reg = 0x52008,
1757 		.enable_mask = BIT(4),
1758 		.hw.init = &(struct clk_init_data){
1759 			.name = "gcc_pcie_0_pipe_clk",
1760 			.parent_hws = (const struct clk_hw*[]){
1761 				&gcc_pcie_0_pipe_clk_src.clkr.hw,
1762 			},
1763 			.num_parents = 1,
1764 			.flags = CLK_SET_RATE_PARENT,
1765 			.ops = &clk_branch2_ops,
1766 		},
1767 	},
1768 };
1769 
1770 static struct clk_branch gcc_pcie_0_slv_axi_clk = {
1771 	.halt_reg = 0x6b014,
1772 	.halt_check = BRANCH_HALT_VOTED,
1773 	.clkr = {
1774 		.enable_reg = 0x52008,
1775 		.enable_mask = BIT(0),
1776 		.hw.init = &(struct clk_init_data){
1777 			.name = "gcc_pcie_0_slv_axi_clk",
1778 			.ops = &clk_branch2_ops,
1779 		},
1780 	},
1781 };
1782 
1783 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
1784 	.halt_reg = 0x6b010,
1785 	.halt_check = BRANCH_HALT_VOTED,
1786 	.clkr = {
1787 		.enable_reg = 0x52008,
1788 		.enable_mask = BIT(5),
1789 		.hw.init = &(struct clk_init_data){
1790 			.name = "gcc_pcie_0_slv_q2a_axi_clk",
1791 			.ops = &clk_branch2_ops,
1792 		},
1793 	},
1794 };
1795 
1796 static struct clk_branch gcc_pcie_1_aux_clk = {
1797 	.halt_reg = 0x8d028,
1798 	.halt_check = BRANCH_HALT_VOTED,
1799 	.clkr = {
1800 		.enable_reg = 0x52000,
1801 		.enable_mask = BIT(29),
1802 		.hw.init = &(struct clk_init_data){
1803 			.name = "gcc_pcie_1_aux_clk",
1804 			.parent_hws = (const struct clk_hw*[]){
1805 				&gcc_pcie_1_aux_clk_src.clkr.hw,
1806 			},
1807 			.num_parents = 1,
1808 			.flags = CLK_SET_RATE_PARENT,
1809 			.ops = &clk_branch2_ops,
1810 		},
1811 	},
1812 };
1813 
1814 static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
1815 	.halt_reg = 0x8d024,
1816 	.halt_check = BRANCH_HALT_VOTED,
1817 	.hwcg_reg = 0x8d024,
1818 	.hwcg_bit = 1,
1819 	.clkr = {
1820 		.enable_reg = 0x52000,
1821 		.enable_mask = BIT(28),
1822 		.hw.init = &(struct clk_init_data){
1823 			.name = "gcc_pcie_1_cfg_ahb_clk",
1824 			.ops = &clk_branch2_ops,
1825 		},
1826 	},
1827 };
1828 
1829 static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
1830 	.halt_reg = 0x8d01c,
1831 	.halt_check = BRANCH_HALT_SKIP,
1832 	.clkr = {
1833 		.enable_reg = 0x52000,
1834 		.enable_mask = BIT(27),
1835 		.hw.init = &(struct clk_init_data){
1836 			.name = "gcc_pcie_1_mstr_axi_clk",
1837 			.ops = &clk_branch2_ops,
1838 		},
1839 	},
1840 };
1841 
1842 static struct clk_branch gcc_pcie_1_pipe_clk = {
1843 	.halt_reg = 0x8d030,
1844 	.halt_check = BRANCH_HALT_SKIP,
1845 	.clkr = {
1846 		.enable_reg = 0x52000,
1847 		.enable_mask = BIT(30),
1848 		.hw.init = &(struct clk_init_data){
1849 			.name = "gcc_pcie_1_pipe_clk",
1850 			.parent_hws = (const struct clk_hw*[]){
1851 				&gcc_pcie_1_pipe_clk_src.clkr.hw,
1852 			},
1853 			.num_parents = 1,
1854 			.flags = CLK_SET_RATE_PARENT,
1855 			.ops = &clk_branch2_ops,
1856 		},
1857 	},
1858 };
1859 
1860 static struct clk_branch gcc_pcie_1_slv_axi_clk = {
1861 	.halt_reg = 0x8d014,
1862 	.halt_check = BRANCH_HALT_VOTED,
1863 	.clkr = {
1864 		.enable_reg = 0x52000,
1865 		.enable_mask = BIT(26),
1866 		.hw.init = &(struct clk_init_data){
1867 			.name = "gcc_pcie_1_slv_axi_clk",
1868 			.ops = &clk_branch2_ops,
1869 		},
1870 	},
1871 };
1872 
1873 static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = {
1874 	.halt_reg = 0x8d010,
1875 	.halt_check = BRANCH_HALT_VOTED,
1876 	.clkr = {
1877 		.enable_reg = 0x52000,
1878 		.enable_mask = BIT(25),
1879 		.hw.init = &(struct clk_init_data){
1880 			.name = "gcc_pcie_1_slv_q2a_axi_clk",
1881 			.ops = &clk_branch2_ops,
1882 		},
1883 	},
1884 };
1885 
1886 static struct clk_branch gcc_pcie_throttle_core_clk = {
1887 	.halt_reg = 0x90018,
1888 	.halt_check = BRANCH_HALT_SKIP,
1889 	.hwcg_reg = 0x90018,
1890 	.hwcg_bit = 1,
1891 	.clkr = {
1892 		.enable_reg = 0x52000,
1893 		.enable_mask = BIT(20),
1894 		.hw.init = &(struct clk_init_data){
1895 			.name = "gcc_pcie_throttle_core_clk",
1896 			.ops = &clk_branch2_ops,
1897 		},
1898 	},
1899 };
1900 
1901 static struct clk_branch gcc_pdm2_clk = {
1902 	.halt_reg = 0x3300c,
1903 	.halt_check = BRANCH_HALT,
1904 	.clkr = {
1905 		.enable_reg = 0x3300c,
1906 		.enable_mask = BIT(0),
1907 		.hw.init = &(struct clk_init_data){
1908 			.name = "gcc_pdm2_clk",
1909 			.parent_hws = (const struct clk_hw*[]){
1910 				&gcc_pdm2_clk_src.clkr.hw,
1911 			},
1912 			.num_parents = 1,
1913 			.flags = CLK_SET_RATE_PARENT,
1914 			.ops = &clk_branch2_ops,
1915 		},
1916 	},
1917 };
1918 
1919 static struct clk_branch gcc_pdm_ahb_clk = {
1920 	.halt_reg = 0x33004,
1921 	.halt_check = BRANCH_HALT_VOTED,
1922 	.hwcg_reg = 0x33004,
1923 	.hwcg_bit = 1,
1924 	.clkr = {
1925 		.enable_reg = 0x33004,
1926 		.enable_mask = BIT(0),
1927 		.hw.init = &(struct clk_init_data){
1928 			.name = "gcc_pdm_ahb_clk",
1929 			.ops = &clk_branch2_ops,
1930 		},
1931 	},
1932 };
1933 
1934 static struct clk_branch gcc_pdm_xo4_clk = {
1935 	.halt_reg = 0x33008,
1936 	.halt_check = BRANCH_HALT,
1937 	.clkr = {
1938 		.enable_reg = 0x33008,
1939 		.enable_mask = BIT(0),
1940 		.hw.init = &(struct clk_init_data){
1941 			.name = "gcc_pdm_xo4_clk",
1942 			.ops = &clk_branch2_ops,
1943 		},
1944 	},
1945 };
1946 
1947 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
1948 	.halt_reg = 0x26008,
1949 	.halt_check = BRANCH_HALT_VOTED,
1950 	.hwcg_reg = 0x26008,
1951 	.hwcg_bit = 1,
1952 	.clkr = {
1953 		.enable_reg = 0x26008,
1954 		.enable_mask = BIT(0),
1955 		.hw.init = &(struct clk_init_data){
1956 			.name = "gcc_qmip_camera_nrt_ahb_clk",
1957 			.ops = &clk_branch2_ops,
1958 		},
1959 	},
1960 };
1961 
1962 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
1963 	.halt_reg = 0x2600c,
1964 	.halt_check = BRANCH_HALT_VOTED,
1965 	.hwcg_reg = 0x2600c,
1966 	.hwcg_bit = 1,
1967 	.clkr = {
1968 		.enable_reg = 0x2600c,
1969 		.enable_mask = BIT(0),
1970 		.hw.init = &(struct clk_init_data){
1971 			.name = "gcc_qmip_camera_rt_ahb_clk",
1972 			.ops = &clk_branch2_ops,
1973 		},
1974 	},
1975 };
1976 
1977 static struct clk_branch gcc_qmip_disp_ahb_clk = {
1978 	.halt_reg = 0x27008,
1979 	.halt_check = BRANCH_HALT_VOTED,
1980 	.clkr = {
1981 		.enable_reg = 0x27008,
1982 		.enable_mask = BIT(0),
1983 		.hw.init = &(struct clk_init_data){
1984 			.name = "gcc_qmip_disp_ahb_clk",
1985 			.ops = &clk_branch2_ops,
1986 		},
1987 	},
1988 };
1989 
1990 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
1991 	.halt_reg = 0x28008,
1992 	.halt_check = BRANCH_HALT_VOTED,
1993 	.hwcg_reg = 0x28008,
1994 	.hwcg_bit = 1,
1995 	.clkr = {
1996 		.enable_reg = 0x28008,
1997 		.enable_mask = BIT(0),
1998 		.hw.init = &(struct clk_init_data){
1999 			.name = "gcc_qmip_video_vcodec_ahb_clk",
2000 			.ops = &clk_branch2_ops,
2001 		},
2002 	},
2003 };
2004 
2005 static struct clk_branch gcc_qspi_cnoc_periph_ahb_clk = {
2006 	.halt_reg = 0x4b004,
2007 	.halt_check = BRANCH_HALT,
2008 	.hwcg_reg = 0x4b004,
2009 	.hwcg_bit = 1,
2010 	.clkr = {
2011 		.enable_reg = 0x4b004,
2012 		.enable_mask = BIT(0),
2013 		.hw.init = &(struct clk_init_data){
2014 			.name = "gcc_qspi_cnoc_periph_ahb_clk",
2015 			.ops = &clk_branch2_ops,
2016 		},
2017 	},
2018 };
2019 
2020 static struct clk_branch gcc_qspi_core_clk = {
2021 	.halt_reg = 0x4b008,
2022 	.halt_check = BRANCH_HALT,
2023 	.clkr = {
2024 		.enable_reg = 0x4b008,
2025 		.enable_mask = BIT(0),
2026 		.hw.init = &(struct clk_init_data){
2027 			.name = "gcc_qspi_core_clk",
2028 			.parent_hws = (const struct clk_hw*[]){
2029 				&gcc_qspi_core_clk_src.clkr.hw,
2030 			},
2031 			.num_parents = 1,
2032 			.flags = CLK_SET_RATE_PARENT,
2033 			.ops = &clk_branch2_ops,
2034 		},
2035 	},
2036 };
2037 
2038 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
2039 	.halt_reg = 0x23008,
2040 	.halt_check = BRANCH_HALT_VOTED,
2041 	.clkr = {
2042 		.enable_reg = 0x52008,
2043 		.enable_mask = BIT(9),
2044 		.hw.init = &(struct clk_init_data){
2045 			.name = "gcc_qupv3_wrap0_core_2x_clk",
2046 			.ops = &clk_branch2_ops,
2047 		},
2048 	},
2049 };
2050 
2051 static struct clk_branch gcc_qupv3_wrap0_core_clk = {
2052 	.halt_reg = 0x23000,
2053 	.halt_check = BRANCH_HALT_VOTED,
2054 	.clkr = {
2055 		.enable_reg = 0x52008,
2056 		.enable_mask = BIT(8),
2057 		.hw.init = &(struct clk_init_data){
2058 			.name = "gcc_qupv3_wrap0_core_clk",
2059 			.ops = &clk_branch2_ops,
2060 		},
2061 	},
2062 };
2063 
2064 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
2065 	.halt_reg = 0x1700c,
2066 	.halt_check = BRANCH_HALT_VOTED,
2067 	.clkr = {
2068 		.enable_reg = 0x52008,
2069 		.enable_mask = BIT(10),
2070 		.hw.init = &(struct clk_init_data){
2071 			.name = "gcc_qupv3_wrap0_s0_clk",
2072 			.parent_hws = (const struct clk_hw*[]){
2073 				&gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
2074 			},
2075 			.num_parents = 1,
2076 			.flags = CLK_SET_RATE_PARENT,
2077 			.ops = &clk_branch2_ops,
2078 		},
2079 	},
2080 };
2081 
2082 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
2083 	.halt_reg = 0x1713c,
2084 	.halt_check = BRANCH_HALT_VOTED,
2085 	.clkr = {
2086 		.enable_reg = 0x52008,
2087 		.enable_mask = BIT(11),
2088 		.hw.init = &(struct clk_init_data){
2089 			.name = "gcc_qupv3_wrap0_s1_clk",
2090 			.parent_hws = (const struct clk_hw*[]){
2091 				&gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
2092 			},
2093 			.num_parents = 1,
2094 			.flags = CLK_SET_RATE_PARENT,
2095 			.ops = &clk_branch2_ops,
2096 		},
2097 	},
2098 };
2099 
2100 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
2101 	.halt_reg = 0x1726c,
2102 	.halt_check = BRANCH_HALT_VOTED,
2103 	.clkr = {
2104 		.enable_reg = 0x52008,
2105 		.enable_mask = BIT(12),
2106 		.hw.init = &(struct clk_init_data){
2107 			.name = "gcc_qupv3_wrap0_s2_clk",
2108 			.parent_hws = (const struct clk_hw*[]){
2109 				&gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
2110 			},
2111 			.num_parents = 1,
2112 			.flags = CLK_SET_RATE_PARENT,
2113 			.ops = &clk_branch2_ops,
2114 		},
2115 	},
2116 };
2117 
2118 static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
2119 	.halt_reg = 0x1739c,
2120 	.halt_check = BRANCH_HALT_VOTED,
2121 	.clkr = {
2122 		.enable_reg = 0x52008,
2123 		.enable_mask = BIT(13),
2124 		.hw.init = &(struct clk_init_data){
2125 			.name = "gcc_qupv3_wrap0_s3_clk",
2126 			.parent_hws = (const struct clk_hw*[]){
2127 				&gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
2128 			},
2129 			.num_parents = 1,
2130 			.flags = CLK_SET_RATE_PARENT,
2131 			.ops = &clk_branch2_ops,
2132 		},
2133 	},
2134 };
2135 
2136 static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
2137 	.halt_reg = 0x174cc,
2138 	.halt_check = BRANCH_HALT_VOTED,
2139 	.clkr = {
2140 		.enable_reg = 0x52008,
2141 		.enable_mask = BIT(14),
2142 		.hw.init = &(struct clk_init_data){
2143 			.name = "gcc_qupv3_wrap0_s4_clk",
2144 			.parent_hws = (const struct clk_hw*[]){
2145 				&gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
2146 			},
2147 			.num_parents = 1,
2148 			.flags = CLK_SET_RATE_PARENT,
2149 			.ops = &clk_branch2_ops,
2150 		},
2151 	},
2152 };
2153 
2154 static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
2155 	.halt_reg = 0x175fc,
2156 	.halt_check = BRANCH_HALT_VOTED,
2157 	.clkr = {
2158 		.enable_reg = 0x52008,
2159 		.enable_mask = BIT(15),
2160 		.hw.init = &(struct clk_init_data){
2161 			.name = "gcc_qupv3_wrap0_s5_clk",
2162 			.parent_hws = (const struct clk_hw*[]){
2163 				&gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
2164 			},
2165 			.num_parents = 1,
2166 			.flags = CLK_SET_RATE_PARENT,
2167 			.ops = &clk_branch2_ops,
2168 		},
2169 	},
2170 };
2171 
2172 static struct clk_branch gcc_qupv3_wrap0_s6_clk = {
2173 	.halt_reg = 0x1772c,
2174 	.halt_check = BRANCH_HALT_VOTED,
2175 	.clkr = {
2176 		.enable_reg = 0x52008,
2177 		.enable_mask = BIT(16),
2178 		.hw.init = &(struct clk_init_data){
2179 			.name = "gcc_qupv3_wrap0_s6_clk",
2180 			.parent_hws = (const struct clk_hw*[]){
2181 				&gcc_qupv3_wrap0_s6_clk_src.clkr.hw,
2182 			},
2183 			.num_parents = 1,
2184 			.flags = CLK_SET_RATE_PARENT,
2185 			.ops = &clk_branch2_ops,
2186 		},
2187 	},
2188 };
2189 
2190 static struct clk_branch gcc_qupv3_wrap0_s7_clk = {
2191 	.halt_reg = 0x1785c,
2192 	.halt_check = BRANCH_HALT_VOTED,
2193 	.clkr = {
2194 		.enable_reg = 0x52008,
2195 		.enable_mask = BIT(17),
2196 		.hw.init = &(struct clk_init_data){
2197 			.name = "gcc_qupv3_wrap0_s7_clk",
2198 			.parent_hws = (const struct clk_hw*[]){
2199 				&gcc_qupv3_wrap0_s7_clk_src.clkr.hw,
2200 			},
2201 			.num_parents = 1,
2202 			.flags = CLK_SET_RATE_PARENT,
2203 			.ops = &clk_branch2_ops,
2204 		},
2205 	},
2206 };
2207 
2208 static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
2209 	.halt_reg = 0x23140,
2210 	.halt_check = BRANCH_HALT_VOTED,
2211 	.clkr = {
2212 		.enable_reg = 0x52008,
2213 		.enable_mask = BIT(18),
2214 		.hw.init = &(struct clk_init_data){
2215 			.name = "gcc_qupv3_wrap1_core_2x_clk",
2216 			.ops = &clk_branch2_ops,
2217 		},
2218 	},
2219 };
2220 
2221 static struct clk_branch gcc_qupv3_wrap1_core_clk = {
2222 	.halt_reg = 0x23138,
2223 	.halt_check = BRANCH_HALT_VOTED,
2224 	.clkr = {
2225 		.enable_reg = 0x52008,
2226 		.enable_mask = BIT(19),
2227 		.hw.init = &(struct clk_init_data){
2228 			.name = "gcc_qupv3_wrap1_core_clk",
2229 			.ops = &clk_branch2_ops,
2230 		},
2231 	},
2232 };
2233 
2234 static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
2235 	.halt_reg = 0x1800c,
2236 	.halt_check = BRANCH_HALT_VOTED,
2237 	.clkr = {
2238 		.enable_reg = 0x52008,
2239 		.enable_mask = BIT(22),
2240 		.hw.init = &(struct clk_init_data){
2241 			.name = "gcc_qupv3_wrap1_s0_clk",
2242 			.parent_hws = (const struct clk_hw*[]){
2243 				&gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
2244 			},
2245 			.num_parents = 1,
2246 			.flags = CLK_SET_RATE_PARENT,
2247 			.ops = &clk_branch2_ops,
2248 		},
2249 	},
2250 };
2251 
2252 static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
2253 	.halt_reg = 0x1813c,
2254 	.halt_check = BRANCH_HALT_VOTED,
2255 	.clkr = {
2256 		.enable_reg = 0x52008,
2257 		.enable_mask = BIT(23),
2258 		.hw.init = &(struct clk_init_data){
2259 			.name = "gcc_qupv3_wrap1_s1_clk",
2260 			.parent_hws = (const struct clk_hw*[]){
2261 				&gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
2262 			},
2263 			.num_parents = 1,
2264 			.flags = CLK_SET_RATE_PARENT,
2265 			.ops = &clk_branch2_ops,
2266 		},
2267 	},
2268 };
2269 
2270 static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
2271 	.halt_reg = 0x1826c,
2272 	.halt_check = BRANCH_HALT_VOTED,
2273 	.clkr = {
2274 		.enable_reg = 0x52008,
2275 		.enable_mask = BIT(24),
2276 		.hw.init = &(struct clk_init_data){
2277 			.name = "gcc_qupv3_wrap1_s2_clk",
2278 			.parent_hws = (const struct clk_hw*[]){
2279 				&gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
2280 			},
2281 			.num_parents = 1,
2282 			.flags = CLK_SET_RATE_PARENT,
2283 			.ops = &clk_branch2_ops,
2284 		},
2285 	},
2286 };
2287 
2288 static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
2289 	.halt_reg = 0x1839c,
2290 	.halt_check = BRANCH_HALT_VOTED,
2291 	.clkr = {
2292 		.enable_reg = 0x52008,
2293 		.enable_mask = BIT(25),
2294 		.hw.init = &(struct clk_init_data){
2295 			.name = "gcc_qupv3_wrap1_s3_clk",
2296 			.parent_hws = (const struct clk_hw*[]){
2297 				&gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
2298 			},
2299 			.num_parents = 1,
2300 			.flags = CLK_SET_RATE_PARENT,
2301 			.ops = &clk_branch2_ops,
2302 		},
2303 	},
2304 };
2305 
2306 static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
2307 	.halt_reg = 0x184cc,
2308 	.halt_check = BRANCH_HALT_VOTED,
2309 	.clkr = {
2310 		.enable_reg = 0x52008,
2311 		.enable_mask = BIT(26),
2312 		.hw.init = &(struct clk_init_data){
2313 			.name = "gcc_qupv3_wrap1_s4_clk",
2314 			.parent_hws = (const struct clk_hw*[]){
2315 				&gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
2316 			},
2317 			.num_parents = 1,
2318 			.flags = CLK_SET_RATE_PARENT,
2319 			.ops = &clk_branch2_ops,
2320 		},
2321 	},
2322 };
2323 
2324 static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
2325 	.halt_reg = 0x185fc,
2326 	.halt_check = BRANCH_HALT_VOTED,
2327 	.clkr = {
2328 		.enable_reg = 0x52008,
2329 		.enable_mask = BIT(27),
2330 		.hw.init = &(struct clk_init_data){
2331 			.name = "gcc_qupv3_wrap1_s5_clk",
2332 			.parent_hws = (const struct clk_hw*[]){
2333 				&gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
2334 			},
2335 			.num_parents = 1,
2336 			.flags = CLK_SET_RATE_PARENT,
2337 			.ops = &clk_branch2_ops,
2338 		},
2339 	},
2340 };
2341 
2342 static struct clk_branch gcc_qupv3_wrap1_s6_clk = {
2343 	.halt_reg = 0x1872c,
2344 	.halt_check = BRANCH_HALT_VOTED,
2345 	.clkr = {
2346 		.enable_reg = 0x52000,
2347 		.enable_mask = BIT(13),
2348 		.hw.init = &(struct clk_init_data){
2349 			.name = "gcc_qupv3_wrap1_s6_clk",
2350 			.parent_hws = (const struct clk_hw*[]){
2351 				&gcc_qupv3_wrap1_s6_clk_src.clkr.hw,
2352 			},
2353 			.num_parents = 1,
2354 			.flags = CLK_SET_RATE_PARENT,
2355 			.ops = &clk_branch2_ops,
2356 		},
2357 	},
2358 };
2359 
2360 static struct clk_branch gcc_qupv3_wrap1_s7_clk = {
2361 	.halt_reg = 0x1885c,
2362 	.halt_check = BRANCH_HALT_VOTED,
2363 	.clkr = {
2364 		.enable_reg = 0x52000,
2365 		.enable_mask = BIT(14),
2366 		.hw.init = &(struct clk_init_data){
2367 			.name = "gcc_qupv3_wrap1_s7_clk",
2368 			.parent_hws = (const struct clk_hw*[]){
2369 				&gcc_qupv3_wrap1_s7_clk_src.clkr.hw,
2370 			},
2371 			.num_parents = 1,
2372 			.flags = CLK_SET_RATE_PARENT,
2373 			.ops = &clk_branch2_ops,
2374 		},
2375 	},
2376 };
2377 
2378 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
2379 	.halt_reg = 0x17004,
2380 	.halt_check = BRANCH_HALT_VOTED,
2381 	.hwcg_reg = 0x17004,
2382 	.hwcg_bit = 1,
2383 	.clkr = {
2384 		.enable_reg = 0x52008,
2385 		.enable_mask = BIT(6),
2386 		.hw.init = &(struct clk_init_data){
2387 			.name = "gcc_qupv3_wrap_0_m_ahb_clk",
2388 			.ops = &clk_branch2_ops,
2389 		},
2390 	},
2391 };
2392 
2393 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
2394 	.halt_reg = 0x17008,
2395 	.halt_check = BRANCH_HALT_VOTED,
2396 	.hwcg_reg = 0x17008,
2397 	.hwcg_bit = 1,
2398 	.clkr = {
2399 		.enable_reg = 0x52008,
2400 		.enable_mask = BIT(7),
2401 		.hw.init = &(struct clk_init_data){
2402 			.name = "gcc_qupv3_wrap_0_s_ahb_clk",
2403 			.ops = &clk_branch2_ops,
2404 		},
2405 	},
2406 };
2407 
2408 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
2409 	.halt_reg = 0x18004,
2410 	.halt_check = BRANCH_HALT_VOTED,
2411 	.hwcg_reg = 0x18004,
2412 	.hwcg_bit = 1,
2413 	.clkr = {
2414 		.enable_reg = 0x52008,
2415 		.enable_mask = BIT(20),
2416 		.hw.init = &(struct clk_init_data){
2417 			.name = "gcc_qupv3_wrap_1_m_ahb_clk",
2418 			.ops = &clk_branch2_ops,
2419 		},
2420 	},
2421 };
2422 
2423 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
2424 	.halt_reg = 0x18008,
2425 	.halt_check = BRANCH_HALT_VOTED,
2426 	.hwcg_reg = 0x18008,
2427 	.hwcg_bit = 1,
2428 	.clkr = {
2429 		.enable_reg = 0x52008,
2430 		.enable_mask = BIT(21),
2431 		.hw.init = &(struct clk_init_data){
2432 			.name = "gcc_qupv3_wrap_1_s_ahb_clk",
2433 			.ops = &clk_branch2_ops,
2434 		},
2435 	},
2436 };
2437 
2438 static struct clk_branch gcc_sdcc1_ahb_clk = {
2439 	.halt_reg = 0x75004,
2440 	.halt_check = BRANCH_HALT,
2441 	.clkr = {
2442 		.enable_reg = 0x75004,
2443 		.enable_mask = BIT(0),
2444 		.hw.init = &(struct clk_init_data){
2445 			.name = "gcc_sdcc1_ahb_clk",
2446 			.ops = &clk_branch2_ops,
2447 		},
2448 	},
2449 };
2450 
2451 static struct clk_branch gcc_sdcc1_apps_clk = {
2452 	.halt_reg = 0x75008,
2453 	.halt_check = BRANCH_HALT,
2454 	.clkr = {
2455 		.enable_reg = 0x75008,
2456 		.enable_mask = BIT(0),
2457 		.hw.init = &(struct clk_init_data){
2458 			.name = "gcc_sdcc1_apps_clk",
2459 			.parent_hws = (const struct clk_hw*[]){
2460 				&gcc_sdcc1_apps_clk_src.clkr.hw,
2461 			},
2462 			.num_parents = 1,
2463 			.flags = CLK_SET_RATE_PARENT,
2464 			.ops = &clk_branch2_ops,
2465 		},
2466 	},
2467 };
2468 
2469 static struct clk_branch gcc_sdcc1_ice_core_clk = {
2470 	.halt_reg = 0x75024,
2471 	.halt_check = BRANCH_HALT_VOTED,
2472 	.hwcg_reg = 0x75024,
2473 	.hwcg_bit = 1,
2474 	.clkr = {
2475 		.enable_reg = 0x75024,
2476 		.enable_mask = BIT(0),
2477 		.hw.init = &(struct clk_init_data){
2478 			.name = "gcc_sdcc1_ice_core_clk",
2479 			.parent_hws = (const struct clk_hw*[]){
2480 				&gcc_sdcc1_ice_core_clk_src.clkr.hw,
2481 			},
2482 			.num_parents = 1,
2483 			.flags = CLK_SET_RATE_PARENT,
2484 			.ops = &clk_branch2_ops,
2485 		},
2486 	},
2487 };
2488 
2489 static struct clk_branch gcc_sdcc2_ahb_clk = {
2490 	.halt_reg = 0x14008,
2491 	.halt_check = BRANCH_HALT,
2492 	.clkr = {
2493 		.enable_reg = 0x14008,
2494 		.enable_mask = BIT(0),
2495 		.hw.init = &(struct clk_init_data){
2496 			.name = "gcc_sdcc2_ahb_clk",
2497 			.ops = &clk_branch2_ops,
2498 		},
2499 	},
2500 };
2501 
2502 static struct clk_branch gcc_sdcc2_apps_clk = {
2503 	.halt_reg = 0x14004,
2504 	.halt_check = BRANCH_HALT,
2505 	.clkr = {
2506 		.enable_reg = 0x14004,
2507 		.enable_mask = BIT(0),
2508 		.hw.init = &(struct clk_init_data){
2509 			.name = "gcc_sdcc2_apps_clk",
2510 			.parent_hws = (const struct clk_hw*[]){
2511 				&gcc_sdcc2_apps_clk_src.clkr.hw,
2512 			},
2513 			.num_parents = 1,
2514 			.flags = CLK_SET_RATE_PARENT,
2515 			.ops = &clk_branch2_ops,
2516 		},
2517 	},
2518 };
2519 
2520 static struct clk_branch gcc_sdcc4_ahb_clk = {
2521 	.halt_reg = 0x16008,
2522 	.halt_check = BRANCH_HALT,
2523 	.clkr = {
2524 		.enable_reg = 0x16008,
2525 		.enable_mask = BIT(0),
2526 		.hw.init = &(struct clk_init_data){
2527 			.name = "gcc_sdcc4_ahb_clk",
2528 			.ops = &clk_branch2_ops,
2529 		},
2530 	},
2531 };
2532 
2533 static struct clk_branch gcc_sdcc4_apps_clk = {
2534 	.halt_reg = 0x16004,
2535 	.halt_check = BRANCH_HALT,
2536 	.clkr = {
2537 		.enable_reg = 0x16004,
2538 		.enable_mask = BIT(0),
2539 		.hw.init = &(struct clk_init_data){
2540 			.name = "gcc_sdcc4_apps_clk",
2541 			.parent_hws = (const struct clk_hw*[]){
2542 				&gcc_sdcc4_apps_clk_src.clkr.hw,
2543 			},
2544 			.num_parents = 1,
2545 			.flags = CLK_SET_RATE_PARENT,
2546 			.ops = &clk_branch2_ops,
2547 		},
2548 	},
2549 };
2550 
2551 static struct clk_branch gcc_throttle_pcie_ahb_clk = {
2552 	.halt_reg = 0x9001c,
2553 	.halt_check = BRANCH_HALT,
2554 	.clkr = {
2555 		.enable_reg = 0x9001c,
2556 		.enable_mask = BIT(0),
2557 		.hw.init = &(struct clk_init_data){
2558 			.name = "gcc_throttle_pcie_ahb_clk",
2559 			.ops = &clk_branch2_ops,
2560 		},
2561 	},
2562 };
2563 
2564 static struct clk_branch gcc_titan_nrt_throttle_core_clk = {
2565 	.halt_reg = 0x26024,
2566 	.halt_check = BRANCH_HALT_SKIP,
2567 	.hwcg_reg = 0x26024,
2568 	.hwcg_bit = 1,
2569 	.clkr = {
2570 		.enable_reg = 0x26024,
2571 		.enable_mask = BIT(0),
2572 		.hw.init = &(struct clk_init_data){
2573 			.name = "gcc_titan_nrt_throttle_core_clk",
2574 			.ops = &clk_branch2_ops,
2575 		},
2576 	},
2577 };
2578 
2579 static struct clk_branch gcc_titan_rt_throttle_core_clk = {
2580 	.halt_reg = 0x26018,
2581 	.halt_check = BRANCH_HALT_SKIP,
2582 	.hwcg_reg = 0x26018,
2583 	.hwcg_bit = 1,
2584 	.clkr = {
2585 		.enable_reg = 0x26018,
2586 		.enable_mask = BIT(0),
2587 		.hw.init = &(struct clk_init_data){
2588 			.name = "gcc_titan_rt_throttle_core_clk",
2589 			.ops = &clk_branch2_ops,
2590 		},
2591 	},
2592 };
2593 
2594 static struct clk_branch gcc_ufs_1_clkref_en = {
2595 	.halt_reg = 0x8c000,
2596 	.halt_check = BRANCH_HALT,
2597 	.clkr = {
2598 		.enable_reg = 0x8c000,
2599 		.enable_mask = BIT(0),
2600 		.hw.init = &(struct clk_init_data){
2601 			.name = "gcc_ufs_1_clkref_en",
2602 			.ops = &clk_branch2_ops,
2603 		},
2604 	},
2605 };
2606 
2607 static struct clk_branch gcc_ufs_phy_ahb_clk = {
2608 	.halt_reg = 0x77018,
2609 	.halt_check = BRANCH_HALT_VOTED,
2610 	.hwcg_reg = 0x77018,
2611 	.hwcg_bit = 1,
2612 	.clkr = {
2613 		.enable_reg = 0x77018,
2614 		.enable_mask = BIT(0),
2615 		.hw.init = &(struct clk_init_data){
2616 			.name = "gcc_ufs_phy_ahb_clk",
2617 			.ops = &clk_branch2_ops,
2618 		},
2619 	},
2620 };
2621 
2622 static struct clk_branch gcc_ufs_phy_axi_clk = {
2623 	.halt_reg = 0x77010,
2624 	.halt_check = BRANCH_HALT_VOTED,
2625 	.hwcg_reg = 0x77010,
2626 	.hwcg_bit = 1,
2627 	.clkr = {
2628 		.enable_reg = 0x77010,
2629 		.enable_mask = BIT(0),
2630 		.hw.init = &(struct clk_init_data){
2631 			.name = "gcc_ufs_phy_axi_clk",
2632 			.parent_hws = (const struct clk_hw*[]){
2633 				&gcc_ufs_phy_axi_clk_src.clkr.hw,
2634 			},
2635 			.num_parents = 1,
2636 			.flags = CLK_SET_RATE_PARENT,
2637 			.ops = &clk_branch2_ops,
2638 		},
2639 	},
2640 };
2641 
2642 static struct clk_branch gcc_ufs_phy_ice_core_clk = {
2643 	.halt_reg = 0x77064,
2644 	.halt_check = BRANCH_HALT_VOTED,
2645 	.hwcg_reg = 0x77064,
2646 	.hwcg_bit = 1,
2647 	.clkr = {
2648 		.enable_reg = 0x77064,
2649 		.enable_mask = BIT(0),
2650 		.hw.init = &(struct clk_init_data){
2651 			.name = "gcc_ufs_phy_ice_core_clk",
2652 			.parent_hws = (const struct clk_hw*[]){
2653 				&gcc_ufs_phy_ice_core_clk_src.clkr.hw,
2654 			},
2655 			.num_parents = 1,
2656 			.flags = CLK_SET_RATE_PARENT,
2657 			.ops = &clk_branch2_ops,
2658 		},
2659 	},
2660 };
2661 
2662 static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
2663 	.halt_reg = 0x7709c,
2664 	.halt_check = BRANCH_HALT_VOTED,
2665 	.hwcg_reg = 0x7709c,
2666 	.hwcg_bit = 1,
2667 	.clkr = {
2668 		.enable_reg = 0x7709c,
2669 		.enable_mask = BIT(0),
2670 		.hw.init = &(struct clk_init_data){
2671 			.name = "gcc_ufs_phy_phy_aux_clk",
2672 			.parent_hws = (const struct clk_hw*[]){
2673 				&gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2674 			},
2675 			.num_parents = 1,
2676 			.flags = CLK_SET_RATE_PARENT,
2677 			.ops = &clk_branch2_ops,
2678 		},
2679 	},
2680 };
2681 
2682 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
2683 	.halt_reg = 0x77020,
2684 	.halt_check = BRANCH_HALT_DELAY,
2685 	.clkr = {
2686 		.enable_reg = 0x77020,
2687 		.enable_mask = BIT(0),
2688 		.hw.init = &(struct clk_init_data){
2689 			.name = "gcc_ufs_phy_rx_symbol_0_clk",
2690 			.parent_hws = (const struct clk_hw*[]){
2691 				&gcc_ufs_phy_rx_symbol_0_clk_src.clkr.hw,
2692 			},
2693 			.num_parents = 1,
2694 			.flags = CLK_SET_RATE_PARENT,
2695 			.ops = &clk_branch2_ops,
2696 		},
2697 	},
2698 };
2699 
2700 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
2701 	.halt_reg = 0x770b8,
2702 	.halt_check = BRANCH_HALT_DELAY,
2703 	.clkr = {
2704 		.enable_reg = 0x770b8,
2705 		.enable_mask = BIT(0),
2706 		.hw.init = &(struct clk_init_data){
2707 			.name = "gcc_ufs_phy_rx_symbol_1_clk",
2708 			.parent_hws = (const struct clk_hw*[]){
2709 				&gcc_ufs_phy_rx_symbol_1_clk_src.clkr.hw,
2710 			},
2711 			.num_parents = 1,
2712 			.flags = CLK_SET_RATE_PARENT,
2713 			.ops = &clk_branch2_ops,
2714 		},
2715 	},
2716 };
2717 
2718 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
2719 	.halt_reg = 0x7701c,
2720 	.halt_check = BRANCH_HALT_DELAY,
2721 	.clkr = {
2722 		.enable_reg = 0x7701c,
2723 		.enable_mask = BIT(0),
2724 		.hw.init = &(struct clk_init_data){
2725 			.name = "gcc_ufs_phy_tx_symbol_0_clk",
2726 			.parent_hws = (const struct clk_hw*[]){
2727 				&gcc_ufs_phy_tx_symbol_0_clk_src.clkr.hw,
2728 			},
2729 			.num_parents = 1,
2730 			.flags = CLK_SET_RATE_PARENT,
2731 			.ops = &clk_branch2_ops,
2732 		},
2733 	},
2734 };
2735 
2736 static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
2737 	.halt_reg = 0x7705c,
2738 	.halt_check = BRANCH_HALT_VOTED,
2739 	.hwcg_reg = 0x7705c,
2740 	.hwcg_bit = 1,
2741 	.clkr = {
2742 		.enable_reg = 0x7705c,
2743 		.enable_mask = BIT(0),
2744 		.hw.init = &(struct clk_init_data){
2745 			.name = "gcc_ufs_phy_unipro_core_clk",
2746 			.parent_hws = (const struct clk_hw*[]){
2747 				&gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2748 			},
2749 			.num_parents = 1,
2750 			.flags = CLK_SET_RATE_PARENT,
2751 			.ops = &clk_branch2_ops,
2752 		},
2753 	},
2754 };
2755 
2756 static struct clk_branch gcc_usb30_prim_master_clk = {
2757 	.halt_reg = 0xf010,
2758 	.halt_check = BRANCH_HALT,
2759 	.clkr = {
2760 		.enable_reg = 0xf010,
2761 		.enable_mask = BIT(0),
2762 		.hw.init = &(struct clk_init_data){
2763 			.name = "gcc_usb30_prim_master_clk",
2764 			.parent_hws = (const struct clk_hw*[]){
2765 				&gcc_usb30_prim_master_clk_src.clkr.hw,
2766 			},
2767 			.num_parents = 1,
2768 			.flags = CLK_SET_RATE_PARENT,
2769 			.ops = &clk_branch2_ops,
2770 		},
2771 	},
2772 };
2773 
2774 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
2775 	.halt_reg = 0xf01c,
2776 	.halt_check = BRANCH_HALT,
2777 	.clkr = {
2778 		.enable_reg = 0xf01c,
2779 		.enable_mask = BIT(0),
2780 		.hw.init = &(struct clk_init_data){
2781 			.name = "gcc_usb30_prim_mock_utmi_clk",
2782 			.parent_data = &(const struct clk_parent_data){
2783 				.hw =
2784 					&gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,
2785 			},
2786 			.num_parents = 1,
2787 			.flags = CLK_SET_RATE_PARENT,
2788 			.ops = &clk_branch2_ops,
2789 		},
2790 	},
2791 };
2792 
2793 static struct clk_branch gcc_usb30_prim_sleep_clk = {
2794 	.halt_reg = 0xf018,
2795 	.halt_check = BRANCH_HALT,
2796 	.clkr = {
2797 		.enable_reg = 0xf018,
2798 		.enable_mask = BIT(0),
2799 		.hw.init = &(struct clk_init_data){
2800 			.name = "gcc_usb30_prim_sleep_clk",
2801 			.ops = &clk_branch2_ops,
2802 		},
2803 	},
2804 };
2805 
2806 static struct clk_branch gcc_usb30_sec_master_clk = {
2807 	.halt_reg = 0x9e010,
2808 	.halt_check = BRANCH_HALT,
2809 	.clkr = {
2810 		.enable_reg = 0x9e010,
2811 		.enable_mask = BIT(0),
2812 		.hw.init = &(struct clk_init_data){
2813 			.name = "gcc_usb30_sec_master_clk",
2814 			.parent_hws = (const struct clk_hw*[]){
2815 				&gcc_usb30_sec_master_clk_src.clkr.hw,
2816 			},
2817 			.num_parents = 1,
2818 			.flags = CLK_SET_RATE_PARENT,
2819 			.ops = &clk_branch2_ops,
2820 		},
2821 	},
2822 };
2823 
2824 static struct clk_branch gcc_usb30_sec_mock_utmi_clk = {
2825 	.halt_reg = 0x9e01c,
2826 	.halt_check = BRANCH_HALT,
2827 	.clkr = {
2828 		.enable_reg = 0x9e01c,
2829 		.enable_mask = BIT(0),
2830 		.hw.init = &(struct clk_init_data){
2831 			.name = "gcc_usb30_sec_mock_utmi_clk",
2832 			.parent_data = &(const struct clk_parent_data){
2833 				.hw =
2834 					&gcc_usb30_sec_mock_utmi_postdiv_clk_src.clkr.hw,
2835 			},
2836 			.num_parents = 1,
2837 			.flags = CLK_SET_RATE_PARENT,
2838 			.ops = &clk_branch2_ops,
2839 		},
2840 	},
2841 };
2842 
2843 static struct clk_branch gcc_usb30_sec_sleep_clk = {
2844 	.halt_reg = 0x9e018,
2845 	.halt_check = BRANCH_HALT,
2846 	.clkr = {
2847 		.enable_reg = 0x9e018,
2848 		.enable_mask = BIT(0),
2849 		.hw.init = &(struct clk_init_data){
2850 			.name = "gcc_usb30_sec_sleep_clk",
2851 			.ops = &clk_branch2_ops,
2852 		},
2853 	},
2854 };
2855 
2856 static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
2857 	.halt_reg = 0xf054,
2858 	.halt_check = BRANCH_HALT,
2859 	.clkr = {
2860 		.enable_reg = 0xf054,
2861 		.enable_mask = BIT(0),
2862 		.hw.init = &(struct clk_init_data){
2863 			.name = "gcc_usb3_prim_phy_aux_clk",
2864 			.parent_hws = (const struct clk_hw*[]){
2865 				&gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2866 			},
2867 			.num_parents = 1,
2868 			.flags = CLK_SET_RATE_PARENT,
2869 			.ops = &clk_branch2_ops,
2870 		},
2871 	},
2872 };
2873 
2874 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
2875 	.halt_reg = 0xf058,
2876 	.halt_check = BRANCH_HALT,
2877 	.clkr = {
2878 		.enable_reg = 0xf058,
2879 		.enable_mask = BIT(0),
2880 		.hw.init = &(struct clk_init_data){
2881 			.name = "gcc_usb3_prim_phy_com_aux_clk",
2882 			.parent_hws = (const struct clk_hw*[]){
2883 				&gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2884 			},
2885 			.num_parents = 1,
2886 			.flags = CLK_SET_RATE_PARENT,
2887 			.ops = &clk_branch2_ops,
2888 		},
2889 	},
2890 };
2891 
2892 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
2893 	.halt_reg = 0xf05c,
2894 	.halt_check = BRANCH_HALT_DELAY,
2895 	.hwcg_reg = 0xf05c,
2896 	.hwcg_bit = 1,
2897 	.clkr = {
2898 		.enable_reg = 0xf05c,
2899 		.enable_mask = BIT(0),
2900 		.hw.init = &(struct clk_init_data){
2901 			.name = "gcc_usb3_prim_phy_pipe_clk",
2902 			.parent_hws = (const struct clk_hw*[]){
2903 				&gcc_usb3_prim_phy_pipe_clk_src.clkr.hw,
2904 			},
2905 			.num_parents = 1,
2906 			.flags = CLK_SET_RATE_PARENT,
2907 			.ops = &clk_branch2_ops,
2908 		},
2909 	},
2910 };
2911 
2912 static struct clk_branch gcc_cfg_noc_lpass_clk = {
2913 	.halt_reg = 0x47020,
2914 	.halt_check = BRANCH_HALT,
2915 	.clkr = {
2916 		.enable_reg = 0x47020,
2917 		.enable_mask = BIT(0),
2918 		.hw.init = &(struct clk_init_data){
2919 			.name = "gcc_cfg_noc_lpass_clk",
2920 			.ops = &clk_branch2_ops,
2921 		},
2922 	},
2923 };
2924 static struct clk_branch gcc_mss_cfg_ahb_clk = {
2925 	.halt_reg = 0x8a000,
2926 	.halt_check = BRANCH_HALT,
2927 	.clkr = {
2928 		.enable_reg = 0x8a000,
2929 		.enable_mask = BIT(0),
2930 		.hw.init = &(struct clk_init_data){
2931 			.name = "gcc_mss_cfg_ahb_clk",
2932 			.ops = &clk_branch2_ops,
2933 		},
2934 	},
2935 };
2936 
2937 static struct clk_branch gcc_mss_offline_axi_clk = {
2938 	.halt_reg = 0x8a004,
2939 	.halt_check = BRANCH_HALT_DELAY,
2940 	.clkr = {
2941 		.enable_reg = 0x8a004,
2942 		.enable_mask = BIT(0),
2943 		.hw.init = &(struct clk_init_data){
2944 			.name = "gcc_mss_offline_axi_clk",
2945 			.ops = &clk_branch2_ops,
2946 		},
2947 	},
2948 };
2949 
2950 static struct clk_branch gcc_mss_snoc_axi_clk = {
2951 	.halt_reg = 0x8a154,
2952 	.halt_check = BRANCH_HALT_DELAY,
2953 	.clkr = {
2954 		.enable_reg = 0x8a154,
2955 		.enable_mask = BIT(0),
2956 		.hw.init = &(struct clk_init_data){
2957 			.name = "gcc_mss_snoc_axi_clk",
2958 			.ops = &clk_branch2_ops,
2959 		},
2960 	},
2961 };
2962 
2963 static struct clk_branch gcc_mss_q6_memnoc_axi_clk = {
2964 	.halt_reg = 0x8a158,
2965 	.halt_check = BRANCH_HALT,
2966 	.clkr = {
2967 		.enable_reg = 0x8a158,
2968 		.enable_mask = BIT(0),
2969 		.hw.init = &(struct clk_init_data){
2970 			.name = "gcc_mss_q6_memnoc_axi_clk",
2971 			.ops = &clk_branch2_ops,
2972 		},
2973 	},
2974 };
2975 
2976 static struct clk_regmap_mux gcc_mss_q6ss_boot_clk_src = {
2977 	.reg = 0x8a2a4,
2978 	.shift = 0,
2979 	.width = 1,
2980 	.parent_map = gcc_parent_map_15,
2981 	.clkr = {
2982 		.hw.init = &(struct clk_init_data){
2983 			.name = "gcc_mss_q6ss_boot_clk_src",
2984 			.parent_data = gcc_parent_data_15,
2985 			.num_parents = ARRAY_SIZE(gcc_parent_data_15),
2986 			.ops = &clk_regmap_mux_closest_ops,
2987 		},
2988 	},
2989 };
2990 
2991 static struct clk_branch gcc_usb3_sec_phy_aux_clk = {
2992 	.halt_reg = 0x9e054,
2993 	.halt_check = BRANCH_HALT,
2994 	.clkr = {
2995 		.enable_reg = 0x9e054,
2996 		.enable_mask = BIT(0),
2997 		.hw.init = &(struct clk_init_data){
2998 			.name = "gcc_usb3_sec_phy_aux_clk",
2999 			.parent_hws = (const struct clk_hw*[]){
3000 				&gcc_usb3_sec_phy_aux_clk_src.clkr.hw,
3001 			},
3002 			.num_parents = 1,
3003 			.flags = CLK_SET_RATE_PARENT,
3004 			.ops = &clk_branch2_ops,
3005 		},
3006 	},
3007 };
3008 
3009 static struct clk_branch gcc_usb3_sec_phy_com_aux_clk = {
3010 	.halt_reg = 0x9e058,
3011 	.halt_check = BRANCH_HALT,
3012 	.clkr = {
3013 		.enable_reg = 0x9e058,
3014 		.enable_mask = BIT(0),
3015 		.hw.init = &(struct clk_init_data){
3016 			.name = "gcc_usb3_sec_phy_com_aux_clk",
3017 			.parent_hws = (const struct clk_hw*[]){
3018 				&gcc_usb3_sec_phy_aux_clk_src.clkr.hw,
3019 			},
3020 			.num_parents = 1,
3021 			.flags = CLK_SET_RATE_PARENT,
3022 			.ops = &clk_branch2_ops,
3023 		},
3024 	},
3025 };
3026 
3027 static struct clk_branch gcc_usb3_sec_phy_pipe_clk = {
3028 	.halt_reg = 0x9e05c,
3029 	.halt_check = BRANCH_HALT_SKIP,
3030 	.hwcg_reg = 0x9e05c,
3031 	.hwcg_bit = 1,
3032 	.clkr = {
3033 		.enable_reg = 0x9e05c,
3034 		.enable_mask = BIT(0),
3035 		.hw.init = &(struct clk_init_data){
3036 			.name = "gcc_usb3_sec_phy_pipe_clk",
3037 			.parent_hws = (const struct clk_hw*[]){
3038 				&gcc_usb3_sec_phy_pipe_clk_src.clkr.hw,
3039 			},
3040 			.num_parents = 1,
3041 			.flags = CLK_SET_RATE_PARENT,
3042 			.ops = &clk_branch2_ops,
3043 		},
3044 	},
3045 };
3046 
3047 static struct clk_branch gcc_video_axi0_clk = {
3048 	.halt_reg = 0x2800c,
3049 	.halt_check = BRANCH_HALT_SKIP,
3050 	.hwcg_reg = 0x2800c,
3051 	.hwcg_bit = 1,
3052 	.clkr = {
3053 		.enable_reg = 0x2800c,
3054 		.enable_mask = BIT(0),
3055 		.hw.init = &(struct clk_init_data){
3056 			.name = "gcc_video_axi0_clk",
3057 			.ops = &clk_branch2_ops,
3058 		},
3059 	},
3060 };
3061 
3062 static struct clk_branch gcc_video_mvp_throttle_core_clk = {
3063 	.halt_reg = 0x28010,
3064 	.halt_check = BRANCH_HALT_SKIP,
3065 	.hwcg_reg = 0x28010,
3066 	.hwcg_bit = 1,
3067 	.clkr = {
3068 		.enable_reg = 0x28010,
3069 		.enable_mask = BIT(0),
3070 		.hw.init = &(struct clk_init_data){
3071 			.name = "gcc_video_mvp_throttle_core_clk",
3072 			.ops = &clk_branch2_ops,
3073 		},
3074 	},
3075 };
3076 
3077 static struct clk_branch gcc_wpss_ahb_clk = {
3078 	.halt_reg = 0x9d154,
3079 	.halt_check = BRANCH_HALT,
3080 	.clkr = {
3081 		.enable_reg = 0x9d154,
3082 		.enable_mask = BIT(0),
3083 		.hw.init = &(struct clk_init_data){
3084 			.name = "gcc_wpss_ahb_clk",
3085 			.ops = &clk_branch2_ops,
3086 		},
3087 	},
3088 };
3089 
3090 static struct clk_branch gcc_wpss_ahb_bdg_mst_clk = {
3091 	.halt_reg = 0x9d158,
3092 	.halt_check = BRANCH_HALT,
3093 	.clkr = {
3094 		.enable_reg = 0x9d158,
3095 		.enable_mask = BIT(0),
3096 		.hw.init = &(struct clk_init_data){
3097 			.name = "gcc_wpss_ahb_bdg_mst_clk",
3098 			.ops = &clk_branch2_ops,
3099 		},
3100 	},
3101 };
3102 
3103 static struct clk_branch gcc_wpss_rscp_clk = {
3104 	.halt_reg = 0x9d16c,
3105 	.halt_check = BRANCH_HALT,
3106 	.clkr = {
3107 		.enable_reg = 0x9d16c,
3108 		.enable_mask = BIT(0),
3109 		.hw.init = &(struct clk_init_data){
3110 			.name = "gcc_wpss_rscp_clk",
3111 			.ops = &clk_branch2_ops,
3112 		},
3113 	},
3114 };
3115 
3116 static struct gdsc gcc_pcie_0_gdsc = {
3117 	.gdscr = 0x6b004,
3118 	.pd = {
3119 		.name = "gcc_pcie_0_gdsc",
3120 	},
3121 	.pwrsts = PWRSTS_OFF_ON,
3122 	.flags = VOTABLE,
3123 };
3124 
3125 static struct gdsc gcc_pcie_1_gdsc = {
3126 	.gdscr = 0x8d004,
3127 	.pd = {
3128 		.name = "gcc_pcie_1_gdsc",
3129 	},
3130 	.pwrsts = PWRSTS_OFF_ON,
3131 	.flags = VOTABLE,
3132 };
3133 
3134 static struct gdsc gcc_ufs_phy_gdsc = {
3135 	.gdscr = 0x77004,
3136 	.pd = {
3137 		.name = "gcc_ufs_phy_gdsc",
3138 	},
3139 	.pwrsts = PWRSTS_OFF_ON,
3140 	.flags = VOTABLE,
3141 };
3142 
3143 static struct gdsc gcc_usb30_prim_gdsc = {
3144 	.gdscr = 0xf004,
3145 	.pd = {
3146 		.name = "gcc_usb30_prim_gdsc",
3147 	},
3148 	.pwrsts = PWRSTS_OFF_ON,
3149 	.flags = VOTABLE,
3150 };
3151 
3152 static struct gdsc gcc_usb30_sec_gdsc = {
3153 	.gdscr = 0x9e004,
3154 	.pd = {
3155 		.name = "gcc_usb30_sec_gdsc",
3156 	},
3157 	.pwrsts = PWRSTS_OFF_ON,
3158 	.flags = VOTABLE,
3159 };
3160 
3161 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc = {
3162 	.gdscr = 0x7d050,
3163 	.pd = {
3164 		.name = "hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc",
3165 	},
3166 	.pwrsts = PWRSTS_OFF_ON,
3167 	.flags = VOTABLE,
3168 };
3169 
3170 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc = {
3171 	.gdscr = 0x7d058,
3172 	.pd = {
3173 		.name = "hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc",
3174 	},
3175 	.pwrsts = PWRSTS_OFF_ON,
3176 	.flags = VOTABLE,
3177 };
3178 
3179 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_sf0_gdsc = {
3180 	.gdscr = 0x7d054,
3181 	.pd = {
3182 		.name = "hlos1_vote_mmnoc_mmu_tbu_sf0_gdsc",
3183 	},
3184 	.pwrsts = PWRSTS_OFF_ON,
3185 	.flags = VOTABLE,
3186 };
3187 
3188 static struct gdsc hlos1_vote_turing_mmu_tbu0_gdsc = {
3189 	.gdscr = 0x7d05c,
3190 	.pd = {
3191 		.name = "hlos1_vote_turing_mmu_tbu0_gdsc",
3192 	},
3193 	.pwrsts = PWRSTS_OFF_ON,
3194 	.flags = VOTABLE,
3195 };
3196 
3197 static struct gdsc hlos1_vote_turing_mmu_tbu1_gdsc = {
3198 	.gdscr = 0x7d060,
3199 	.pd = {
3200 		.name = "hlos1_vote_turing_mmu_tbu1_gdsc",
3201 	},
3202 	.pwrsts = PWRSTS_OFF_ON,
3203 	.flags = VOTABLE,
3204 };
3205 
3206 static struct clk_regmap *gcc_sc7280_clocks[] = {
3207 	[GCC_AGGRE_NOC_PCIE_0_AXI_CLK] = &gcc_aggre_noc_pcie_0_axi_clk.clkr,
3208 	[GCC_AGGRE_NOC_PCIE_1_AXI_CLK] = &gcc_aggre_noc_pcie_1_axi_clk.clkr,
3209 	[GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
3210 	[GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
3211 	[GCC_AGGRE_USB3_SEC_AXI_CLK] = &gcc_aggre_usb3_sec_axi_clk.clkr,
3212 	[GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,
3213 	[GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr,
3214 	[GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
3215 	[GCC_CFG_NOC_USB3_SEC_AXI_CLK] = &gcc_cfg_noc_usb3_sec_axi_clk.clkr,
3216 	[GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
3217 	[GCC_DDRSS_PCIE_SF_CLK] = &gcc_ddrss_pcie_sf_clk.clkr,
3218 	[GCC_DISP_GPLL0_CLK_SRC] = &gcc_disp_gpll0_clk_src.clkr,
3219 	[GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
3220 	[GCC_DISP_SF_AXI_CLK] = &gcc_disp_sf_axi_clk.clkr,
3221 	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3222 	[GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
3223 	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3224 	[GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
3225 	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3226 	[GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
3227 	[GCC_GPLL0] = &gcc_gpll0.clkr,
3228 	[GCC_GPLL0_OUT_EVEN] = &gcc_gpll0_out_even.clkr,
3229 	[GCC_GPLL0_OUT_ODD] = &gcc_gpll0_out_odd.clkr,
3230 	[GCC_GPLL1] = &gcc_gpll1.clkr,
3231 	[GCC_GPLL10] = &gcc_gpll10.clkr,
3232 	[GCC_GPLL4] = &gcc_gpll4.clkr,
3233 	[GCC_GPLL9] = &gcc_gpll9.clkr,
3234 	[GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
3235 	[GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
3236 	[GCC_GPU_IREF_EN] = &gcc_gpu_iref_en.clkr,
3237 	[GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
3238 	[GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
3239 	[GCC_PCIE0_PHY_RCHNG_CLK] = &gcc_pcie0_phy_rchng_clk.clkr,
3240 	[GCC_PCIE1_PHY_RCHNG_CLK] = &gcc_pcie1_phy_rchng_clk.clkr,
3241 	[GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
3242 	[GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
3243 	[GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
3244 	[GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
3245 	[GCC_PCIE_0_PHY_RCHNG_CLK_SRC] = &gcc_pcie_0_phy_rchng_clk_src.clkr,
3246 	[GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
3247 	[GCC_PCIE_0_PIPE_CLK_SRC] = &gcc_pcie_0_pipe_clk_src.clkr,
3248 	[GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
3249 	[GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
3250 	[GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
3251 	[GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr,
3252 	[GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
3253 	[GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
3254 	[GCC_PCIE_1_PHY_RCHNG_CLK_SRC] = &gcc_pcie_1_phy_rchng_clk_src.clkr,
3255 	[GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
3256 	[GCC_PCIE_1_PIPE_CLK_SRC] = &gcc_pcie_1_pipe_clk_src.clkr,
3257 	[GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
3258 	[GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr,
3259 	[GCC_PCIE_THROTTLE_CORE_CLK] = &gcc_pcie_throttle_core_clk.clkr,
3260 	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3261 	[GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
3262 	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3263 	[GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
3264 	[GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
3265 	[GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
3266 	[GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
3267 	[GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
3268 	[GCC_QSPI_CNOC_PERIPH_AHB_CLK] = &gcc_qspi_cnoc_periph_ahb_clk.clkr,
3269 	[GCC_QSPI_CORE_CLK] = &gcc_qspi_core_clk.clkr,
3270 	[GCC_QSPI_CORE_CLK_SRC] = &gcc_qspi_core_clk_src.clkr,
3271 	[GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
3272 	[GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
3273 	[GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
3274 	[GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
3275 	[GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
3276 	[GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
3277 	[GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
3278 	[GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
3279 	[GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
3280 	[GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
3281 	[GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
3282 	[GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
3283 	[GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
3284 	[GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
3285 	[GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr,
3286 	[GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr,
3287 	[GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr,
3288 	[GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr,
3289 	[GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
3290 	[GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
3291 	[GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
3292 	[GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
3293 	[GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
3294 	[GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
3295 	[GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
3296 	[GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
3297 	[GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
3298 	[GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
3299 	[GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
3300 	[GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
3301 	[GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
3302 	[GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
3303 	[GCC_QUPV3_WRAP1_S6_CLK] = &gcc_qupv3_wrap1_s6_clk.clkr,
3304 	[GCC_QUPV3_WRAP1_S6_CLK_SRC] = &gcc_qupv3_wrap1_s6_clk_src.clkr,
3305 	[GCC_QUPV3_WRAP1_S7_CLK] = &gcc_qupv3_wrap1_s7_clk.clkr,
3306 	[GCC_QUPV3_WRAP1_S7_CLK_SRC] = &gcc_qupv3_wrap1_s7_clk_src.clkr,
3307 	[GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
3308 	[GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
3309 	[GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
3310 	[GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
3311 	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
3312 	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
3313 	[GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,
3314 	[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
3315 	[GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr,
3316 	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3317 	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3318 	[GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
3319 	[GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
3320 	[GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
3321 	[GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr,
3322 	[GCC_THROTTLE_PCIE_AHB_CLK] = &gcc_throttle_pcie_ahb_clk.clkr,
3323 	[GCC_TITAN_NRT_THROTTLE_CORE_CLK] =
3324 		&gcc_titan_nrt_throttle_core_clk.clkr,
3325 	[GCC_TITAN_RT_THROTTLE_CORE_CLK] = &gcc_titan_rt_throttle_core_clk.clkr,
3326 	[GCC_UFS_1_CLKREF_EN] = &gcc_ufs_1_clkref_en.clkr,
3327 	[GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
3328 	[GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
3329 	[GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
3330 	[GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
3331 	[GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
3332 	[GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
3333 	[GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
3334 	[GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
3335 	[GCC_UFS_PHY_RX_SYMBOL_0_CLK_SRC] =
3336 		&gcc_ufs_phy_rx_symbol_0_clk_src.clkr,
3337 	[GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
3338 	[GCC_UFS_PHY_RX_SYMBOL_1_CLK_SRC] =
3339 		&gcc_ufs_phy_rx_symbol_1_clk_src.clkr,
3340 	[GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
3341 	[GCC_UFS_PHY_TX_SYMBOL_0_CLK_SRC] =
3342 		&gcc_ufs_phy_tx_symbol_0_clk_src.clkr,
3343 	[GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
3344 	[GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] =
3345 		&gcc_ufs_phy_unipro_core_clk_src.clkr,
3346 	[GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
3347 	[GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
3348 	[GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
3349 	[GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] =
3350 		&gcc_usb30_prim_mock_utmi_clk_src.clkr,
3351 	[GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] =
3352 		&gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,
3353 	[GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
3354 	[GCC_USB30_SEC_MASTER_CLK] = &gcc_usb30_sec_master_clk.clkr,
3355 	[GCC_USB30_SEC_MASTER_CLK_SRC] = &gcc_usb30_sec_master_clk_src.clkr,
3356 	[GCC_USB30_SEC_MOCK_UTMI_CLK] = &gcc_usb30_sec_mock_utmi_clk.clkr,
3357 	[GCC_USB30_SEC_MOCK_UTMI_CLK_SRC] =
3358 			&gcc_usb30_sec_mock_utmi_clk_src.clkr,
3359 	[GCC_USB30_SEC_MOCK_UTMI_POSTDIV_CLK_SRC] =
3360 			&gcc_usb30_sec_mock_utmi_postdiv_clk_src.clkr,
3361 	[GCC_USB30_SEC_SLEEP_CLK] = &gcc_usb30_sec_sleep_clk.clkr,
3362 	[GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
3363 	[GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
3364 	[GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
3365 	[GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
3366 	[GCC_USB3_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb3_prim_phy_pipe_clk_src.clkr,
3367 	[GCC_USB3_SEC_PHY_AUX_CLK] = &gcc_usb3_sec_phy_aux_clk.clkr,
3368 	[GCC_USB3_SEC_PHY_AUX_CLK_SRC] = &gcc_usb3_sec_phy_aux_clk_src.clkr,
3369 	[GCC_USB3_SEC_PHY_COM_AUX_CLK] = &gcc_usb3_sec_phy_com_aux_clk.clkr,
3370 	[GCC_USB3_SEC_PHY_PIPE_CLK] = &gcc_usb3_sec_phy_pipe_clk.clkr,
3371 	[GCC_USB3_SEC_PHY_PIPE_CLK_SRC] = &gcc_usb3_sec_phy_pipe_clk_src.clkr,
3372 	[GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
3373 	[GCC_VIDEO_MVP_THROTTLE_CORE_CLK] =
3374 			&gcc_video_mvp_throttle_core_clk.clkr,
3375 	[GCC_CFG_NOC_LPASS_CLK] = &gcc_cfg_noc_lpass_clk.clkr,
3376 	[GCC_MSS_GPLL0_MAIN_DIV_CLK_SRC] = &gcc_mss_gpll0_main_div_clk_src.clkr,
3377 	[GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
3378 	[GCC_MSS_OFFLINE_AXI_CLK] = &gcc_mss_offline_axi_clk.clkr,
3379 	[GCC_MSS_SNOC_AXI_CLK] = &gcc_mss_snoc_axi_clk.clkr,
3380 	[GCC_MSS_Q6_MEMNOC_AXI_CLK] = &gcc_mss_q6_memnoc_axi_clk.clkr,
3381 	[GCC_MSS_Q6SS_BOOT_CLK_SRC] = &gcc_mss_q6ss_boot_clk_src.clkr,
3382 	[GCC_AGGRE_NOC_PCIE_TBU_CLK] = &gcc_aggre_noc_pcie_tbu_clk.clkr,
3383 	[GCC_AGGRE_NOC_PCIE_CENTER_SF_AXI_CLK] =
3384 				&gcc_aggre_noc_pcie_center_sf_axi_clk.clkr,
3385 	[GCC_PCIE_CLKREF_EN] = &gcc_pcie_clkref_en.clkr,
3386 	[GCC_EDP_CLKREF_EN] = &gcc_edp_clkref_en.clkr,
3387 	[GCC_SEC_CTRL_CLK_SRC] = &gcc_sec_ctrl_clk_src.clkr,
3388 	[GCC_WPSS_AHB_CLK] = &gcc_wpss_ahb_clk.clkr,
3389 	[GCC_WPSS_AHB_BDG_MST_CLK] = &gcc_wpss_ahb_bdg_mst_clk.clkr,
3390 	[GCC_WPSS_RSCP_CLK] = &gcc_wpss_rscp_clk.clkr,
3391 };
3392 
3393 static struct gdsc *gcc_sc7280_gdscs[] = {
3394 	[GCC_PCIE_0_GDSC] = &gcc_pcie_0_gdsc,
3395 	[GCC_PCIE_1_GDSC] = &gcc_pcie_1_gdsc,
3396 	[GCC_UFS_PHY_GDSC] = &gcc_ufs_phy_gdsc,
3397 	[GCC_USB30_PRIM_GDSC] = &gcc_usb30_prim_gdsc,
3398 	[GCC_USB30_SEC_GDSC] = &gcc_usb30_sec_gdsc,
3399 	[HLOS1_VOTE_MMNOC_MMU_TBU_HF0_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc,
3400 	[HLOS1_VOTE_MMNOC_MMU_TBU_HF1_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc,
3401 	[HLOS1_VOTE_MMNOC_MMU_TBU_SF0_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_sf0_gdsc,
3402 	[HLOS1_VOTE_TURING_MMU_TBU0_GDSC] = &hlos1_vote_turing_mmu_tbu0_gdsc,
3403 	[HLOS1_VOTE_TURING_MMU_TBU1_GDSC] = &hlos1_vote_turing_mmu_tbu1_gdsc,
3404 };
3405 
3406 static const struct qcom_reset_map gcc_sc7280_resets[] = {
3407 	[GCC_PCIE_0_BCR] = { 0x6b000 },
3408 	[GCC_PCIE_0_PHY_BCR] = { 0x6c01c },
3409 	[GCC_PCIE_1_BCR] = { 0x8d000 },
3410 	[GCC_PCIE_1_PHY_BCR] = { 0x8e01c },
3411 	[GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 },
3412 	[GCC_QUSB2PHY_SEC_BCR] = { 0x12004 },
3413 	[GCC_SDCC1_BCR] = { 0x75000 },
3414 	[GCC_SDCC2_BCR] = { 0x14000 },
3415 	[GCC_SDCC4_BCR] = { 0x16000 },
3416 	[GCC_UFS_PHY_BCR] = { 0x77000 },
3417 	[GCC_USB30_PRIM_BCR] = { 0xf000 },
3418 	[GCC_USB30_SEC_BCR] = { 0x9e000 },
3419 	[GCC_USB3_DP_PHY_PRIM_BCR] = { 0x50008 },
3420 	[GCC_USB3_PHY_PRIM_BCR] = { 0x50000 },
3421 	[GCC_USB3PHY_PHY_PRIM_BCR] = { 0x50004 },
3422 	[GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 },
3423 };
3424 
3425 static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
3426 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
3427 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
3428 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
3429 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
3430 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
3431 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
3432 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s6_clk_src),
3433 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s7_clk_src),
3434 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
3435 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
3436 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),
3437 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
3438 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
3439 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
3440 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src),
3441 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s7_clk_src),
3442 };
3443 
3444 static const struct regmap_config gcc_sc7280_regmap_config = {
3445 	.reg_bits = 32,
3446 	.reg_stride = 4,
3447 	.val_bits = 32,
3448 	.max_register = 0x9f128,
3449 	.fast_io = true,
3450 };
3451 
3452 static const struct qcom_cc_desc gcc_sc7280_desc = {
3453 	.config = &gcc_sc7280_regmap_config,
3454 	.clks = gcc_sc7280_clocks,
3455 	.num_clks = ARRAY_SIZE(gcc_sc7280_clocks),
3456 	.resets = gcc_sc7280_resets,
3457 	.num_resets = ARRAY_SIZE(gcc_sc7280_resets),
3458 	.gdscs = gcc_sc7280_gdscs,
3459 	.num_gdscs = ARRAY_SIZE(gcc_sc7280_gdscs),
3460 };
3461 
3462 static const struct of_device_id gcc_sc7280_match_table[] = {
3463 	{ .compatible = "qcom,gcc-sc7280" },
3464 	{ }
3465 };
3466 MODULE_DEVICE_TABLE(of, gcc_sc7280_match_table);
3467 
3468 static int gcc_sc7280_probe(struct platform_device *pdev)
3469 {
3470 	struct regmap *regmap;
3471 	int ret;
3472 
3473 	regmap = qcom_cc_map(pdev, &gcc_sc7280_desc);
3474 	if (IS_ERR(regmap))
3475 		return PTR_ERR(regmap);
3476 
3477 	/*
3478 	 * Keep the clocks always-ON
3479 	 * GCC_CAMERA_AHB_CLK/XO_CLK, GCC_DISP_AHB_CLK/XO_CLK
3480 	 * GCC_VIDEO_AHB_CLK/XO_CLK, GCC_GPU_CFG_AHB_CLK
3481 	 */
3482 	regmap_update_bits(regmap, 0x26004, BIT(0), BIT(0));
3483 	regmap_update_bits(regmap, 0x26028, BIT(0), BIT(0));
3484 	regmap_update_bits(regmap, 0x27004, BIT(0), BIT(0));
3485 	regmap_update_bits(regmap, 0x2701C, BIT(0), BIT(0));
3486 	regmap_update_bits(regmap, 0x28004, BIT(0), BIT(0));
3487 	regmap_update_bits(regmap, 0x28014, BIT(0), BIT(0));
3488 	regmap_update_bits(regmap, 0x71004, BIT(0), BIT(0));
3489 
3490 	ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
3491 			ARRAY_SIZE(gcc_dfs_clocks));
3492 	if (ret)
3493 		return ret;
3494 
3495 	return qcom_cc_really_probe(pdev, &gcc_sc7280_desc, regmap);
3496 }
3497 
3498 static struct platform_driver gcc_sc7280_driver = {
3499 	.probe = gcc_sc7280_probe,
3500 	.driver = {
3501 		.name = "gcc-sc7280",
3502 		.of_match_table = gcc_sc7280_match_table,
3503 	},
3504 };
3505 
3506 static int __init gcc_sc7280_init(void)
3507 {
3508 	return platform_driver_register(&gcc_sc7280_driver);
3509 }
3510 subsys_initcall(gcc_sc7280_init);
3511 
3512 static void __exit gcc_sc7280_exit(void)
3513 {
3514 	platform_driver_unregister(&gcc_sc7280_driver);
3515 }
3516 module_exit(gcc_sc7280_exit);
3517 
3518 MODULE_DESCRIPTION("QTI GCC SC7280 Driver");
3519 MODULE_LICENSE("GPL v2");
3520