xref: /linux/drivers/clk/qcom/gcc-sm7150.c (revision fd7d598270724cc787982ea48bbe17ad383a8b7f)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
4  * Copyright (c) 2023, Danila Tikhonov <danila@jiaxyga.com>
5  * Copyright (c) 2023, David Wronek <davidwronek@gmail.com>
6  */
7 
8 #include <linux/clk-provider.h>
9 #include <linux/err.h>
10 #include <linux/kernel.h>
11 #include <linux/mod_devicetable.h>
12 #include <linux/module.h>
13 #include <linux/platform_device.h>
14 #include <linux/regmap.h>
15 
16 #include <dt-bindings/clock/qcom,sm7150-gcc.h>
17 
18 #include "clk-alpha-pll.h"
19 #include "clk-branch.h"
20 #include "clk-rcg.h"
21 #include "clk-regmap.h"
22 #include "common.h"
23 #include "gdsc.h"
24 #include "reset.h"
25 
26 enum {
27 	DT_BI_TCXO,
28 	DT_BI_TCXO_AO,
29 	DT_SLEEP_CLK
30 };
31 
32 enum {
33 	P_BI_TCXO,
34 	P_GPLL0_OUT_EVEN,
35 	P_GPLL0_OUT_MAIN,
36 	P_GPLL6_OUT_MAIN,
37 	P_GPLL7_OUT_MAIN,
38 	P_SLEEP_CLK,
39 };
40 
41 static struct clk_alpha_pll gpll0 = {
42 	.offset = 0x0,
43 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
44 	.clkr = {
45 		.enable_reg = 0x52000,
46 		.enable_mask = BIT(0),
47 		.hw.init = &(struct clk_init_data){
48 			.name = "gpll0",
49 			.parent_data = &(const struct clk_parent_data){
50 				.index = DT_BI_TCXO,
51 			},
52 			.num_parents = 1,
53 			.ops = &clk_alpha_pll_fixed_fabia_ops,
54 		},
55 	},
56 };
57 
58 static const struct clk_div_table post_div_table_fabia_even[] = {
59 	{ 0x0, 1 },
60 	{ 0x1, 2 },
61 	{ 0x3, 4 },
62 	{ 0x7, 8 },
63 	{ }
64 };
65 
66 static struct clk_alpha_pll_postdiv gpll0_out_even = {
67 	.offset = 0x0,
68 	.post_div_shift = 8,
69 	.post_div_table = post_div_table_fabia_even,
70 	.num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
71 	.width = 4,
72 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
73 	.clkr.hw.init = &(struct clk_init_data){
74 		.name = "gpll0_out_even",
75 		.parent_hws = (const struct clk_hw*[]){
76 			&gpll0.clkr.hw,
77 		},
78 		.num_parents = 1,
79 		.ops = &clk_alpha_pll_postdiv_fabia_ops,
80 	},
81 };
82 
83 static struct clk_fixed_factor gcc_pll0_main_div_cdiv = {
84 	.mult = 1,
85 	.div = 2,
86 	.hw.init = &(struct clk_init_data){
87 		.name = "gcc_pll0_main_div_cdiv",
88 		.parent_hws = (const struct clk_hw*[]){
89 			&gpll0.clkr.hw,
90 		},
91 		.num_parents = 1,
92 		.ops = &clk_fixed_factor_ops,
93 	},
94 };
95 
96 static struct clk_alpha_pll gpll6 = {
97 	.offset = 0x13000,
98 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
99 	.clkr = {
100 		.enable_reg = 0x52000,
101 		.enable_mask = BIT(6),
102 		.hw.init = &(struct clk_init_data){
103 			.name = "gpll6",
104 			.parent_data = &(const struct clk_parent_data){
105 				.index = DT_BI_TCXO,
106 			},
107 			.num_parents = 1,
108 			.ops = &clk_alpha_pll_fixed_fabia_ops,
109 		},
110 	},
111 };
112 
113 static struct clk_alpha_pll gpll7 = {
114 	.offset = 0x27000,
115 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
116 	.clkr = {
117 		.enable_reg = 0x52000,
118 		.enable_mask = BIT(7),
119 		.hw.init = &(struct clk_init_data){
120 			.name = "gpll7",
121 			.parent_data = &(const struct clk_parent_data){
122 				.index = DT_BI_TCXO,
123 			},
124 			.num_parents = 1,
125 			.ops = &clk_alpha_pll_fixed_fabia_ops,
126 		},
127 	},
128 };
129 
130 static const struct parent_map gcc_parent_map_0[] = {
131 	{ P_BI_TCXO, 0 },
132 	{ P_GPLL0_OUT_MAIN, 1 },
133 	{ P_GPLL0_OUT_EVEN, 6 },
134 };
135 
136 static const struct clk_parent_data gcc_parent_data_0[] = {
137 	{ .index = DT_BI_TCXO },
138 	{ .hw = &gpll0.clkr.hw },
139 	{ .hw = &gpll0_out_even.clkr.hw },
140 };
141 static const struct clk_parent_data gcc_parent_data_0_ao[] = {
142 	{ .index = DT_BI_TCXO_AO },
143 	{ .hw = &gpll0.clkr.hw },
144 	{ .hw = &gpll0_out_even.clkr.hw },
145 };
146 
147 static const struct parent_map gcc_parent_map_1[] = {
148 	{ P_BI_TCXO, 0 },
149 	{ P_GPLL0_OUT_MAIN, 1 },
150 	{ P_SLEEP_CLK, 5 },
151 	{ P_GPLL0_OUT_EVEN, 6 },
152 };
153 
154 static const struct clk_parent_data gcc_parent_data_1[] = {
155 	{ .index = DT_BI_TCXO },
156 	{ .hw = &gpll0.clkr.hw },
157 	{ .index = DT_SLEEP_CLK },
158 	{ .hw = &gpll0_out_even.clkr.hw },
159 };
160 
161 static const struct parent_map gcc_parent_map_2[] = {
162 	{ P_BI_TCXO, 0 },
163 	{ P_GPLL0_OUT_MAIN, 1 },
164 };
165 
166 static const struct clk_parent_data gcc_parent_data_2[] = {
167 	{ .index = DT_BI_TCXO },
168 	{ .hw = &gpll0.clkr.hw },
169 };
170 
171 static const struct clk_parent_data gcc_parent_data_2_ao[] = {
172 	{ .index = DT_BI_TCXO_AO },
173 	{ .hw = &gpll0.clkr.hw },
174 };
175 
176 static const struct parent_map gcc_parent_map_3[] = {
177 	{ P_BI_TCXO, 0 },
178 	{ P_SLEEP_CLK, 5 },
179 };
180 
181 static const struct clk_parent_data gcc_parent_data_3[] = {
182 	{ .index = DT_BI_TCXO },
183 	{ .index = DT_SLEEP_CLK },
184 };
185 
186 static const struct parent_map gcc_parent_map_4[] = {
187 	{ P_BI_TCXO, 0 },
188 };
189 
190 static const struct clk_parent_data gcc_parent_data_4[] = {
191 	{ .index = DT_BI_TCXO },
192 };
193 
194 static const struct parent_map gcc_parent_map_5[] = {
195 	{ P_BI_TCXO, 0 },
196 	{ P_GPLL0_OUT_MAIN, 1 },
197 	{ P_GPLL6_OUT_MAIN, 2 },
198 	{ P_GPLL0_OUT_EVEN, 6 },
199 };
200 
201 static const struct clk_parent_data gcc_parent_data_5[] = {
202 	{ .index = DT_BI_TCXO },
203 	{ .hw = &gpll0.clkr.hw },
204 	{ .hw = &gpll6.clkr.hw },
205 	{ .hw = &gpll0_out_even.clkr.hw },
206 };
207 
208 static const struct parent_map gcc_parent_map_6[] = {
209 	{ P_BI_TCXO, 0 },
210 	{ P_GPLL0_OUT_MAIN, 1 },
211 	{ P_GPLL7_OUT_MAIN, 3 },
212 	{ P_GPLL0_OUT_EVEN, 6 },
213 };
214 
215 static const struct clk_parent_data gcc_parent_data_6[] = {
216 	{ .index = DT_BI_TCXO },
217 	{ .hw = &gpll0.clkr.hw },
218 	{ .hw = &gpll7.clkr.hw },
219 	{ .hw = &gpll0_out_even.clkr.hw },
220 };
221 
222 static const struct parent_map gcc_parent_map_7[] = {
223 	{ P_BI_TCXO, 0 },
224 	{ P_GPLL0_OUT_MAIN, 1 },
225 	{ P_GPLL0_OUT_EVEN, 6 },
226 };
227 
228 static const struct clk_parent_data gcc_parent_data_7[] = {
229 	{ .index = DT_BI_TCXO },
230 	{ .hw = &gpll0.clkr.hw },
231 	{ .hw = &gpll0_out_even.clkr.hw },
232 };
233 
234 static const struct parent_map gcc_parent_map_8[] = {
235 	{ P_BI_TCXO, 0 },
236 	{ P_GPLL0_OUT_MAIN, 1 },
237 };
238 
239 static const struct clk_parent_data gcc_parent_data_8[] = {
240 	{ .index = DT_BI_TCXO },
241 	{ .hw = &gpll0.clkr.hw },
242 };
243 
244 static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src[] = {
245 	F(19200000, P_BI_TCXO, 1, 0, 0),
246 	{ }
247 };
248 
249 static struct clk_rcg2 gcc_cpuss_ahb_clk_src = {
250 	.cmd_rcgr = 0x48014,
251 	.mnd_width = 0,
252 	.hid_width = 5,
253 	.parent_map = gcc_parent_map_0,
254 	.freq_tbl = ftbl_gcc_cpuss_ahb_clk_src,
255 	.clkr.hw.init = &(struct clk_init_data){
256 		.name = "gcc_cpuss_ahb_clk_src",
257 		.parent_data = gcc_parent_data_0_ao,
258 		.num_parents = ARRAY_SIZE(gcc_parent_data_0_ao),
259 		.flags = CLK_SET_RATE_PARENT,
260 		.ops = &clk_rcg2_ops,
261 	},
262 };
263 
264 static const struct freq_tbl ftbl_gcc_cpuss_rbcpr_clk_src[] = {
265 	F(19200000, P_BI_TCXO, 1, 0, 0),
266 	{ }
267 };
268 
269 static struct clk_rcg2 gcc_cpuss_rbcpr_clk_src = {
270 	.cmd_rcgr = 0x4815c,
271 	.mnd_width = 0,
272 	.hid_width = 5,
273 	.parent_map = gcc_parent_map_2,
274 	.freq_tbl = ftbl_gcc_cpuss_rbcpr_clk_src,
275 	.clkr.hw.init = &(struct clk_init_data){
276 		.name = "gcc_cpuss_rbcpr_clk_src",
277 		.parent_data = gcc_parent_data_2_ao,
278 		.num_parents = ARRAY_SIZE(gcc_parent_data_2_ao),
279 		.ops = &clk_rcg2_ops,
280 	},
281 };
282 
283 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
284 	F(19200000, P_BI_TCXO, 1, 0, 0),
285 	F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
286 	F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
287 	F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
288 	F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
289 	{ }
290 };
291 
292 static struct clk_rcg2 gcc_gp1_clk_src = {
293 	.cmd_rcgr = 0x64004,
294 	.mnd_width = 8,
295 	.hid_width = 5,
296 	.parent_map = gcc_parent_map_1,
297 	.freq_tbl = ftbl_gcc_gp1_clk_src,
298 	.clkr.hw.init = &(struct clk_init_data){
299 		.name = "gcc_gp1_clk_src",
300 		.parent_data = gcc_parent_data_1,
301 		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
302 		.ops = &clk_rcg2_ops,
303 	},
304 };
305 
306 static struct clk_rcg2 gcc_gp2_clk_src = {
307 	.cmd_rcgr = 0x65004,
308 	.mnd_width = 8,
309 	.hid_width = 5,
310 	.parent_map = gcc_parent_map_1,
311 	.freq_tbl = ftbl_gcc_gp1_clk_src,
312 	.clkr.hw.init = &(struct clk_init_data){
313 		.name = "gcc_gp2_clk_src",
314 		.parent_data = gcc_parent_data_1,
315 		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
316 		.ops = &clk_rcg2_ops,
317 	},
318 };
319 
320 static struct clk_rcg2 gcc_gp3_clk_src = {
321 	.cmd_rcgr = 0x66004,
322 	.mnd_width = 8,
323 	.hid_width = 5,
324 	.parent_map = gcc_parent_map_1,
325 	.freq_tbl = ftbl_gcc_gp1_clk_src,
326 	.clkr.hw.init = &(struct clk_init_data){
327 		.name = "gcc_gp3_clk_src",
328 		.parent_data = gcc_parent_data_1,
329 		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
330 		.ops = &clk_rcg2_ops,
331 	},
332 };
333 
334 static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
335 	F(9600000, P_BI_TCXO, 2, 0, 0),
336 	F(19200000, P_BI_TCXO, 1, 0, 0),
337 	{ }
338 };
339 
340 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
341 	.cmd_rcgr = 0x6b028,
342 	.mnd_width = 16,
343 	.hid_width = 5,
344 	.parent_map = gcc_parent_map_3,
345 	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
346 	.clkr.hw.init = &(struct clk_init_data){
347 		.name = "gcc_pcie_0_aux_clk_src",
348 		.parent_data = gcc_parent_data_3,
349 		.num_parents = ARRAY_SIZE(gcc_parent_data_3),
350 		.ops = &clk_rcg2_ops,
351 	},
352 };
353 
354 static const struct freq_tbl ftbl_gcc_pcie_phy_refgen_clk_src[] = {
355 	F(19200000, P_BI_TCXO, 1, 0, 0),
356 	F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
357 	{ }
358 };
359 
360 static struct clk_rcg2 gcc_pcie_phy_refgen_clk_src = {
361 	.cmd_rcgr = 0x6f014,
362 	.mnd_width = 0,
363 	.hid_width = 5,
364 	.parent_map = gcc_parent_map_0,
365 	.freq_tbl = ftbl_gcc_pcie_phy_refgen_clk_src,
366 	.clkr.hw.init = &(struct clk_init_data){
367 		.name = "gcc_pcie_phy_refgen_clk_src",
368 		.parent_data = gcc_parent_data_0,
369 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
370 		.ops = &clk_rcg2_ops,
371 	},
372 };
373 
374 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
375 	F(19200000, P_BI_TCXO, 1, 0, 0),
376 	F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
377 	{ }
378 };
379 
380 static struct clk_rcg2 gcc_pdm2_clk_src = {
381 	.cmd_rcgr = 0x33010,
382 	.mnd_width = 0,
383 	.hid_width = 5,
384 	.parent_map = gcc_parent_map_0,
385 	.freq_tbl = ftbl_gcc_pdm2_clk_src,
386 	.clkr.hw.init = &(struct clk_init_data){
387 		.name = "gcc_pdm2_clk_src",
388 		.parent_data = gcc_parent_data_0,
389 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
390 		.ops = &clk_rcg2_ops,
391 	},
392 };
393 
394 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
395 	F(7372800, P_GPLL0_OUT_EVEN, 1, 384, 15625),
396 	F(14745600, P_GPLL0_OUT_EVEN, 1, 768, 15625),
397 	F(19200000, P_BI_TCXO, 1, 0, 0),
398 	F(29491200, P_GPLL0_OUT_EVEN, 1, 1536, 15625),
399 	F(32000000, P_GPLL0_OUT_EVEN, 1, 8, 75),
400 	F(48000000, P_GPLL0_OUT_EVEN, 1, 4, 25),
401 	F(64000000, P_GPLL0_OUT_EVEN, 1, 16, 75),
402 	F(80000000, P_GPLL0_OUT_EVEN, 1, 4, 15),
403 	F(96000000, P_GPLL0_OUT_EVEN, 1, 8, 25),
404 	F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
405 	F(102400000, P_GPLL0_OUT_EVEN, 1, 128, 375),
406 	F(112000000, P_GPLL0_OUT_EVEN, 1, 28, 75),
407 	F(117964800, P_GPLL0_OUT_EVEN, 1, 6144, 15625),
408 	F(120000000, P_GPLL0_OUT_EVEN, 2.5, 0, 0),
409 	F(128000000, P_GPLL0_OUT_MAIN, 1, 16, 75),
410 	{ }
411 };
412 
413 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
414 	.name = "gcc_qupv3_wrap0_s0_clk_src",
415 	.parent_data = gcc_parent_data_0,
416 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
417 	.ops = &clk_rcg2_ops,
418 };
419 
420 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
421 	.cmd_rcgr = 0x17034,
422 	.mnd_width = 16,
423 	.hid_width = 5,
424 	.parent_map = gcc_parent_map_0,
425 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
426 	.clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
427 };
428 
429 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
430 	.name = "gcc_qupv3_wrap0_s1_clk_src",
431 	.parent_data = gcc_parent_data_0,
432 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
433 	.ops = &clk_rcg2_ops,
434 };
435 
436 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
437 	.cmd_rcgr = 0x17164,
438 	.mnd_width = 16,
439 	.hid_width = 5,
440 	.parent_map = gcc_parent_map_0,
441 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
442 	.clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
443 };
444 
445 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
446 	.name = "gcc_qupv3_wrap0_s2_clk_src",
447 	.parent_data = gcc_parent_data_0,
448 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
449 	.ops = &clk_rcg2_ops,
450 };
451 
452 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
453 	.cmd_rcgr = 0x17294,
454 	.mnd_width = 16,
455 	.hid_width = 5,
456 	.parent_map = gcc_parent_map_0,
457 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
458 	.clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
459 };
460 
461 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
462 	.name = "gcc_qupv3_wrap0_s3_clk_src",
463 	.parent_data = gcc_parent_data_0,
464 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
465 	.ops = &clk_rcg2_ops,
466 };
467 
468 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
469 	.cmd_rcgr = 0x173c4,
470 	.mnd_width = 16,
471 	.hid_width = 5,
472 	.parent_map = gcc_parent_map_0,
473 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
474 	.clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
475 };
476 
477 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
478 	.name = "gcc_qupv3_wrap0_s4_clk_src",
479 	.parent_data = gcc_parent_data_0,
480 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
481 	.ops = &clk_rcg2_ops,
482 };
483 
484 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
485 	.cmd_rcgr = 0x174f4,
486 	.mnd_width = 16,
487 	.hid_width = 5,
488 	.parent_map = gcc_parent_map_0,
489 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
490 	.clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
491 };
492 
493 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
494 	.name = "gcc_qupv3_wrap0_s5_clk_src",
495 	.parent_data = gcc_parent_data_0,
496 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
497 	.ops = &clk_rcg2_ops,
498 };
499 
500 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
501 	.cmd_rcgr = 0x17624,
502 	.mnd_width = 16,
503 	.hid_width = 5,
504 	.parent_map = gcc_parent_map_0,
505 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
506 	.clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
507 };
508 
509 static struct clk_init_data gcc_qupv3_wrap0_s6_clk_src_init = {
510 	.name = "gcc_qupv3_wrap0_s6_clk_src",
511 	.parent_data = gcc_parent_data_0,
512 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
513 	.flags = CLK_SET_RATE_PARENT,
514 	.ops = &clk_rcg2_ops,
515 };
516 
517 static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
518 	.cmd_rcgr = 0x17754,
519 	.mnd_width = 16,
520 	.hid_width = 5,
521 	.parent_map = gcc_parent_map_0,
522 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
523 	.clkr.hw.init = &gcc_qupv3_wrap0_s6_clk_src_init,
524 };
525 
526 static struct clk_init_data gcc_qupv3_wrap0_s7_clk_src_init = {
527 	.name = "gcc_qupv3_wrap0_s7_clk_src",
528 	.parent_data = gcc_parent_data_0,
529 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
530 	.flags = CLK_SET_RATE_PARENT,
531 	.ops = &clk_rcg2_ops,
532 };
533 
534 static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = {
535 	.cmd_rcgr = 0x17884,
536 	.mnd_width = 16,
537 	.hid_width = 5,
538 	.parent_map = gcc_parent_map_0,
539 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
540 	.clkr.hw.init = &gcc_qupv3_wrap0_s7_clk_src_init,
541 };
542 
543 static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
544 	.name = "gcc_qupv3_wrap1_s0_clk_src",
545 	.parent_data = gcc_parent_data_0,
546 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
547 	.ops = &clk_rcg2_ops,
548 };
549 
550 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
551 	.cmd_rcgr = 0x18018,
552 	.mnd_width = 16,
553 	.hid_width = 5,
554 	.parent_map = gcc_parent_map_0,
555 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
556 	.clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
557 };
558 
559 static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
560 	.name = "gcc_qupv3_wrap1_s1_clk_src",
561 	.parent_data = gcc_parent_data_0,
562 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
563 	.ops = &clk_rcg2_ops,
564 };
565 
566 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
567 	.cmd_rcgr = 0x18148,
568 	.mnd_width = 16,
569 	.hid_width = 5,
570 	.parent_map = gcc_parent_map_0,
571 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
572 	.clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
573 };
574 
575 static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {
576 	.name = "gcc_qupv3_wrap1_s2_clk_src",
577 	.parent_data = gcc_parent_data_0,
578 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
579 	.ops = &clk_rcg2_ops,
580 };
581 
582 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
583 	.cmd_rcgr = 0x18278,
584 	.mnd_width = 16,
585 	.hid_width = 5,
586 	.parent_map = gcc_parent_map_0,
587 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
588 	.clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,
589 };
590 
591 static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
592 	.name = "gcc_qupv3_wrap1_s3_clk_src",
593 	.parent_data = gcc_parent_data_0,
594 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
595 	.ops = &clk_rcg2_ops,
596 };
597 
598 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
599 	.cmd_rcgr = 0x183a8,
600 	.mnd_width = 16,
601 	.hid_width = 5,
602 	.parent_map = gcc_parent_map_0,
603 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
604 	.clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
605 };
606 
607 static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
608 	.name = "gcc_qupv3_wrap1_s4_clk_src",
609 	.parent_data = gcc_parent_data_0,
610 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
611 	.ops = &clk_rcg2_ops,
612 };
613 
614 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
615 	.cmd_rcgr = 0x184d8,
616 	.mnd_width = 16,
617 	.hid_width = 5,
618 	.parent_map = gcc_parent_map_0,
619 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
620 	.clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
621 };
622 
623 static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
624 	.name = "gcc_qupv3_wrap1_s5_clk_src",
625 	.parent_data = gcc_parent_data_0,
626 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
627 	.ops = &clk_rcg2_ops,
628 };
629 
630 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
631 	.cmd_rcgr = 0x18608,
632 	.mnd_width = 16,
633 	.hid_width = 5,
634 	.parent_map = gcc_parent_map_0,
635 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
636 	.clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
637 };
638 
639 static struct clk_init_data gcc_qupv3_wrap1_s6_clk_src_init = {
640 	.name = "gcc_qupv3_wrap1_s6_clk_src",
641 	.parent_data = gcc_parent_data_0,
642 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
643 	.ops = &clk_rcg2_ops,
644 };
645 
646 static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = {
647 	.cmd_rcgr = 0x18738,
648 	.mnd_width = 16,
649 	.hid_width = 5,
650 	.parent_map = gcc_parent_map_0,
651 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
652 	.clkr.hw.init = &gcc_qupv3_wrap1_s6_clk_src_init,
653 };
654 
655 static struct clk_init_data gcc_qupv3_wrap1_s7_clk_src_init = {
656 	.name = "gcc_qupv3_wrap1_s7_clk_src",
657 	.parent_data = gcc_parent_data_0,
658 	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
659 	.ops = &clk_rcg2_ops,
660 };
661 
662 static struct clk_rcg2 gcc_qupv3_wrap1_s7_clk_src = {
663 	.cmd_rcgr = 0x18868,
664 	.mnd_width = 16,
665 	.hid_width = 5,
666 	.parent_map = gcc_parent_map_0,
667 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
668 	.clkr.hw.init = &gcc_qupv3_wrap1_s7_clk_src_init,
669 };
670 
671 static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {
672 	F(144000, P_BI_TCXO, 16, 3, 25),
673 	F(400000, P_BI_TCXO, 12, 1, 4),
674 	F(19200000, P_BI_TCXO, 1, 0, 0),
675 	F(20000000, P_GPLL0_OUT_EVEN, 5, 1, 3),
676 	F(25000000, P_GPLL0_OUT_EVEN, 6, 1, 2),
677 	F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
678 	F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
679 	F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0),
680 	F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0),
681 	{ }
682 };
683 
684 static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {
685 	.cmd_rcgr = 0x12028,
686 	.mnd_width = 8,
687 	.hid_width = 5,
688 	.parent_map = gcc_parent_map_5,
689 	.freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,
690 	.clkr.hw.init = &(struct clk_init_data){
691 		.name = "gcc_sdcc1_apps_clk_src",
692 		.parent_data = gcc_parent_data_5,
693 		.num_parents = ARRAY_SIZE(gcc_parent_data_5),
694 		.ops = &clk_rcg2_floor_ops,
695 	},
696 };
697 
698 static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = {
699 	F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
700 	F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
701 	F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
702 	F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
703 	{ }
704 };
705 
706 static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = {
707 	.cmd_rcgr = 0x12010,
708 	.mnd_width = 0,
709 	.hid_width = 5,
710 	.parent_map = gcc_parent_map_0,
711 	.freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src,
712 	.clkr.hw.init = &(struct clk_init_data){
713 		.name = "gcc_sdcc1_ice_core_clk_src",
714 		.parent_data = gcc_parent_data_0,
715 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
716 		.ops = &clk_rcg2_ops,
717 	},
718 };
719 
720 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
721 	F(400000, P_BI_TCXO, 12, 1, 4),
722 	F(9600000, P_BI_TCXO, 2, 0, 0),
723 	F(19200000, P_BI_TCXO, 1, 0, 0),
724 	F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
725 	F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
726 	F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
727 	F(208000000, P_GPLL7_OUT_MAIN, 4, 0, 0),
728 	{ }
729 };
730 
731 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
732 	.cmd_rcgr = 0x1400c,
733 	.mnd_width = 8,
734 	.hid_width = 5,
735 	.parent_map = gcc_parent_map_6,
736 	.freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
737 	.clkr.hw.init = &(struct clk_init_data){
738 		.name = "gcc_sdcc2_apps_clk_src",
739 		.parent_data = gcc_parent_data_6,
740 		.num_parents = ARRAY_SIZE(gcc_parent_data_6),
741 		.ops = &clk_rcg2_floor_ops,
742 		.flags = CLK_OPS_PARENT_ENABLE,
743 	},
744 };
745 
746 static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = {
747 	F(400000, P_BI_TCXO, 12, 1, 4),
748 	F(9600000, P_BI_TCXO, 2, 0, 0),
749 	F(19200000, P_BI_TCXO, 1, 0, 0),
750 	F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
751 	F(33333333, P_GPLL0_OUT_EVEN, 9, 0, 0),
752 	F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
753 	F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
754 	{ }
755 };
756 
757 static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {
758 	.cmd_rcgr = 0x1600c,
759 	.mnd_width = 8,
760 	.hid_width = 5,
761 	.parent_map = gcc_parent_map_0,
762 	.freq_tbl = ftbl_gcc_sdcc4_apps_clk_src,
763 	.clkr.hw.init = &(struct clk_init_data){
764 		.name = "gcc_sdcc4_apps_clk_src",
765 		.parent_data = gcc_parent_data_0,
766 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
767 		.ops = &clk_rcg2_floor_ops,
768 	},
769 };
770 
771 static const struct freq_tbl ftbl_gcc_tsif_ref_clk_src[] = {
772 	F(105495, P_BI_TCXO, 2, 1, 91),
773 	{ }
774 };
775 
776 static struct clk_rcg2 gcc_tsif_ref_clk_src = {
777 	.cmd_rcgr = 0x36010,
778 	.mnd_width = 8,
779 	.hid_width = 5,
780 	.parent_map = gcc_parent_map_7,
781 	.freq_tbl = ftbl_gcc_tsif_ref_clk_src,
782 	.clkr.hw.init = &(struct clk_init_data){
783 		.name = "gcc_tsif_ref_clk_src",
784 		.parent_data = gcc_parent_data_7,
785 		.num_parents = ARRAY_SIZE(gcc_parent_data_7),
786 		.ops = &clk_rcg2_ops,
787 	},
788 };
789 
790 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
791 	F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
792 	F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
793 	F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
794 	F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
795 	F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
796 	{ }
797 };
798 
799 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
800 	.cmd_rcgr = 0x77020,
801 	.mnd_width = 8,
802 	.hid_width = 5,
803 	.parent_map = gcc_parent_map_0,
804 	.freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
805 	.clkr.hw.init = &(struct clk_init_data){
806 		.name = "gcc_ufs_phy_axi_clk_src",
807 		.parent_data = gcc_parent_data_0,
808 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
809 		.ops = &clk_rcg2_ops,
810 	},
811 };
812 
813 static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
814 	F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
815 	F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
816 	F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
817 	F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
818 	{ }
819 };
820 
821 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
822 	.cmd_rcgr = 0x77048,
823 	.mnd_width = 0,
824 	.hid_width = 5,
825 	.parent_map = gcc_parent_map_0,
826 	.freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
827 	.clkr.hw.init = &(struct clk_init_data){
828 		.name = "gcc_ufs_phy_ice_core_clk_src",
829 		.parent_data = gcc_parent_data_0,
830 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
831 		.ops = &clk_rcg2_ops,
832 	},
833 };
834 
835 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
836 	.cmd_rcgr = 0x77098,
837 	.mnd_width = 0,
838 	.hid_width = 5,
839 	.parent_map = gcc_parent_map_4,
840 	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
841 	.clkr.hw.init = &(struct clk_init_data){
842 		.name = "gcc_ufs_phy_phy_aux_clk_src",
843 		.parent_data = gcc_parent_data_4,
844 		.num_parents = ARRAY_SIZE(gcc_parent_data_4),
845 		.ops = &clk_rcg2_ops,
846 	},
847 };
848 
849 static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_core_clk_src[] = {
850 	F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
851 	F(75000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
852 	F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
853 	{ }
854 };
855 
856 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
857 	.cmd_rcgr = 0x77060,
858 	.mnd_width = 0,
859 	.hid_width = 5,
860 	.parent_map = gcc_parent_map_0,
861 	.freq_tbl = ftbl_gcc_ufs_phy_unipro_core_clk_src,
862 	.clkr.hw.init = &(struct clk_init_data){
863 		.name = "gcc_ufs_phy_unipro_core_clk_src",
864 		.parent_data = gcc_parent_data_0,
865 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
866 		.ops = &clk_rcg2_ops,
867 	},
868 };
869 
870 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
871 	F(66666667, P_GPLL0_OUT_EVEN, 4.5, 0, 0),
872 	F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
873 	F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
874 	F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
875 	{ }
876 };
877 
878 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
879 	.cmd_rcgr = 0xf01c,
880 	.mnd_width = 8,
881 	.hid_width = 5,
882 	.parent_map = gcc_parent_map_0,
883 	.freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
884 	.clkr.hw.init = &(struct clk_init_data){
885 		.name = "gcc_usb30_prim_master_clk_src",
886 		.parent_data = gcc_parent_data_0,
887 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
888 		.ops = &clk_rcg2_ops,
889 	},
890 };
891 
892 static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {
893 	F(19200000, P_BI_TCXO, 1, 0, 0),
894 	F(20000000, P_GPLL0_OUT_EVEN, 15, 0, 0),
895 	F(40000000, P_GPLL0_OUT_EVEN, 7.5, 0, 0),
896 	F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
897 	{ }
898 };
899 
900 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
901 	.cmd_rcgr = 0xf034,
902 	.mnd_width = 0,
903 	.hid_width = 5,
904 	.parent_map = gcc_parent_map_0,
905 	.freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
906 	.clkr.hw.init = &(struct clk_init_data){
907 		.name = "gcc_usb30_prim_mock_utmi_clk_src",
908 		.parent_data = gcc_parent_data_0,
909 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
910 		.ops = &clk_rcg2_ops,
911 	},
912 };
913 
914 static const struct freq_tbl ftbl_gcc_usb3_prim_phy_aux_clk_src[] = {
915 	F(19200000, P_BI_TCXO, 1, 0, 0),
916 	{ }
917 };
918 
919 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
920 	.cmd_rcgr = 0xf060,
921 	.mnd_width = 0,
922 	.hid_width = 5,
923 	.parent_map = gcc_parent_map_3,
924 	.freq_tbl = ftbl_gcc_usb3_prim_phy_aux_clk_src,
925 	.clkr.hw.init = &(struct clk_init_data){
926 		.name = "gcc_usb3_prim_phy_aux_clk_src",
927 		.parent_data = gcc_parent_data_3,
928 		.num_parents = ARRAY_SIZE(gcc_parent_data_3),
929 		.ops = &clk_rcg2_ops,
930 	},
931 };
932 
933 static struct clk_rcg2 gcc_vs_ctrl_clk_src = {
934 	.cmd_rcgr = 0x7a030,
935 	.mnd_width = 0,
936 	.hid_width = 5,
937 	.parent_map = gcc_parent_map_2,
938 	.freq_tbl = ftbl_gcc_usb3_prim_phy_aux_clk_src,
939 	.clkr.hw.init = &(struct clk_init_data){
940 		.name = "gcc_vs_ctrl_clk_src",
941 		.parent_data = gcc_parent_data_2,
942 		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
943 		.ops = &clk_rcg2_ops,
944 	},
945 };
946 
947 static const struct freq_tbl ftbl_gcc_vsensor_clk_src[] = {
948 	F(19200000, P_BI_TCXO, 1, 0, 0),
949 	F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
950 	F(600000000, P_GPLL0_OUT_MAIN, 1, 0, 0),
951 	{ }
952 };
953 
954 static struct clk_rcg2 gcc_vsensor_clk_src = {
955 	.cmd_rcgr = 0x7a018,
956 	.mnd_width = 0,
957 	.hid_width = 5,
958 	.parent_map = gcc_parent_map_8,
959 	.freq_tbl = ftbl_gcc_vsensor_clk_src,
960 	.clkr.hw.init = &(struct clk_init_data){
961 		.name = "gcc_vsensor_clk_src",
962 		.parent_data = gcc_parent_data_8,
963 		.num_parents = ARRAY_SIZE(gcc_parent_data_8),
964 		.ops = &clk_rcg2_ops,
965 	},
966 };
967 
968 static struct clk_branch gcc_aggre_noc_pcie_tbu_clk = {
969 	.halt_reg = 0x2800c,
970 	.halt_check = BRANCH_HALT,
971 	.clkr = {
972 		.enable_reg = 0x2800c,
973 		.enable_mask = BIT(0),
974 		.hw.init = &(struct clk_init_data){
975 			.name = "gcc_aggre_noc_pcie_tbu_clk",
976 			.ops = &clk_branch2_ops,
977 		},
978 	},
979 };
980 
981 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
982 	.halt_reg = 0x82024,
983 	.halt_check = BRANCH_HALT,
984 	.hwcg_reg = 0x82024,
985 	.hwcg_bit = 1,
986 	.clkr = {
987 		.enable_reg = 0x82024,
988 		.enable_mask = BIT(0),
989 		.hw.init = &(struct clk_init_data){
990 			.name = "gcc_aggre_ufs_phy_axi_clk",
991 			.parent_hws = (const struct clk_hw*[]){
992 				&gcc_ufs_phy_axi_clk_src.clkr.hw,
993 			},
994 			.num_parents = 1,
995 			.flags = CLK_SET_RATE_PARENT,
996 			.ops = &clk_branch2_ops,
997 		},
998 	},
999 };
1000 
1001 static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = {
1002 	.halt_reg = 0x82024,
1003 	.halt_check = BRANCH_HALT,
1004 	.hwcg_reg = 0x82024,
1005 	.hwcg_bit = 1,
1006 	.clkr = {
1007 		.enable_reg = 0x82024,
1008 		.enable_mask = BIT(1),
1009 		.hw.init = &(struct clk_init_data){
1010 			.name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk",
1011 			.parent_hws = (const struct clk_hw*[]){
1012 				&gcc_aggre_ufs_phy_axi_clk.clkr.hw,
1013 			},
1014 			.num_parents = 1,
1015 			.flags = CLK_SET_RATE_PARENT,
1016 			.ops = &clk_branch_simple_ops,
1017 		},
1018 	},
1019 };
1020 
1021 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
1022 	.halt_reg = 0x8201c,
1023 	.halt_check = BRANCH_HALT,
1024 	.clkr = {
1025 		.enable_reg = 0x8201c,
1026 		.enable_mask = BIT(0),
1027 		.hw.init = &(struct clk_init_data){
1028 			.name = "gcc_aggre_usb3_prim_axi_clk",
1029 			.parent_hws = (const struct clk_hw*[]){
1030 				&gcc_usb30_prim_master_clk_src.clkr.hw,
1031 			},
1032 			.num_parents = 1,
1033 			.flags = CLK_SET_RATE_PARENT,
1034 			.ops = &clk_branch2_ops,
1035 		},
1036 	},
1037 };
1038 
1039 static struct clk_branch gcc_apc_vs_clk = {
1040 	.halt_reg = 0x7a050,
1041 	.halt_check = BRANCH_HALT,
1042 	.clkr = {
1043 		.enable_reg = 0x7a050,
1044 		.enable_mask = BIT(0),
1045 		.hw.init = &(struct clk_init_data){
1046 			.name = "gcc_apc_vs_clk",
1047 			.parent_hws = (const struct clk_hw*[]){
1048 				&gcc_vsensor_clk_src.clkr.hw,
1049 			},
1050 			.num_parents = 1,
1051 			.flags = CLK_SET_RATE_PARENT,
1052 			.ops = &clk_branch2_ops,
1053 		},
1054 	},
1055 };
1056 
1057 static struct clk_branch gcc_boot_rom_ahb_clk = {
1058 	.halt_reg = 0x38004,
1059 	.halt_check = BRANCH_HALT_VOTED,
1060 	.hwcg_reg = 0x38004,
1061 	.hwcg_bit = 1,
1062 	.clkr = {
1063 		.enable_reg = 0x52004,
1064 		.enable_mask = BIT(10),
1065 		.hw.init = &(struct clk_init_data){
1066 			.name = "gcc_boot_rom_ahb_clk",
1067 			.ops = &clk_branch2_ops,
1068 		},
1069 	},
1070 };
1071 
1072 static struct clk_branch gcc_camera_hf_axi_clk = {
1073 	.halt_reg = 0xb020,
1074 	.halt_check = BRANCH_HALT,
1075 	.clkr = {
1076 		.enable_reg = 0xb020,
1077 		.enable_mask = BIT(0),
1078 		.hw.init = &(struct clk_init_data){
1079 			.name = "gcc_camera_hf_axi_clk",
1080 			.ops = &clk_branch2_ops,
1081 		},
1082 	},
1083 };
1084 
1085 static struct clk_branch gcc_camera_sf_axi_clk = {
1086 	.halt_reg = 0xb06c,
1087 	.halt_check = BRANCH_HALT,
1088 	.clkr = {
1089 		.enable_reg = 0xb06c,
1090 		.enable_mask = BIT(0),
1091 		.hw.init = &(struct clk_init_data){
1092 			.name = "gcc_camera_sf_axi_clk",
1093 			.ops = &clk_branch2_ops,
1094 		},
1095 	},
1096 };
1097 
1098 static struct clk_branch gcc_ce1_ahb_clk = {
1099 	.halt_reg = 0x4100c,
1100 	.halt_check = BRANCH_HALT_VOTED,
1101 	.hwcg_reg = 0x4100c,
1102 	.hwcg_bit = 1,
1103 	.clkr = {
1104 		.enable_reg = 0x52004,
1105 		.enable_mask = BIT(3),
1106 		.hw.init = &(struct clk_init_data){
1107 			.name = "gcc_ce1_ahb_clk",
1108 			.ops = &clk_branch2_ops,
1109 		},
1110 	},
1111 };
1112 
1113 static struct clk_branch gcc_ce1_axi_clk = {
1114 	.halt_reg = 0x41008,
1115 	.halt_check = BRANCH_HALT_VOTED,
1116 	.clkr = {
1117 		.enable_reg = 0x52004,
1118 		.enable_mask = BIT(4),
1119 		.hw.init = &(struct clk_init_data){
1120 			.name = "gcc_ce1_axi_clk",
1121 			.ops = &clk_branch2_ops,
1122 		},
1123 	},
1124 };
1125 
1126 static struct clk_branch gcc_ce1_clk = {
1127 	.halt_reg = 0x41004,
1128 	.halt_check = BRANCH_HALT_VOTED,
1129 	.clkr = {
1130 		.enable_reg = 0x52004,
1131 		.enable_mask = BIT(5),
1132 		.hw.init = &(struct clk_init_data){
1133 			.name = "gcc_ce1_clk",
1134 			.ops = &clk_branch2_ops,
1135 		},
1136 	},
1137 };
1138 
1139 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1140 	.halt_reg = 0x502c,
1141 	.halt_check = BRANCH_HALT,
1142 	.clkr = {
1143 		.enable_reg = 0x502c,
1144 		.enable_mask = BIT(0),
1145 		.hw.init = &(struct clk_init_data){
1146 			.name = "gcc_cfg_noc_usb3_prim_axi_clk",
1147 			.parent_hws = (const struct clk_hw*[]){
1148 				&gcc_usb30_prim_master_clk_src.clkr.hw,
1149 			},
1150 			.num_parents = 1,
1151 			.flags = CLK_SET_RATE_PARENT,
1152 			.ops = &clk_branch2_ops,
1153 		},
1154 	},
1155 };
1156 
1157 static struct clk_branch gcc_cpuss_ahb_clk = {
1158 	.halt_reg = 0x48000,
1159 	.halt_check = BRANCH_HALT_VOTED,
1160 	.clkr = {
1161 		.enable_reg = 0x52004,
1162 		.enable_mask = BIT(21),
1163 		.hw.init = &(struct clk_init_data){
1164 			.name = "gcc_cpuss_ahb_clk",
1165 			.parent_hws = (const struct clk_hw*[]){
1166 				&gcc_cpuss_ahb_clk_src.clkr.hw,
1167 			},
1168 			.num_parents = 1,
1169 			.flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
1170 			.ops = &clk_branch2_ops,
1171 		},
1172 	},
1173 };
1174 
1175 static struct clk_branch gcc_cpuss_rbcpr_clk = {
1176 	.halt_reg = 0x48008,
1177 	.halt_check = BRANCH_HALT,
1178 	.clkr = {
1179 		.enable_reg = 0x48008,
1180 		.enable_mask = BIT(0),
1181 		.hw.init = &(struct clk_init_data){
1182 			.name = "gcc_cpuss_rbcpr_clk",
1183 			.parent_hws = (const struct clk_hw*[]){
1184 				&gcc_cpuss_rbcpr_clk_src.clkr.hw,
1185 			},
1186 			.num_parents = 1,
1187 			.flags = CLK_SET_RATE_PARENT,
1188 			.ops = &clk_branch2_ops,
1189 		},
1190 	},
1191 };
1192 
1193 static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1194 	.halt_reg = 0x4452c,
1195 	.halt_check = BRANCH_VOTED,
1196 	.clkr = {
1197 		.enable_reg = 0x4452c,
1198 		.enable_mask = BIT(0),
1199 		.hw.init = &(struct clk_init_data){
1200 			.name = "gcc_ddrss_gpu_axi_clk",
1201 			.ops = &clk_branch2_ops,
1202 		},
1203 	},
1204 };
1205 
1206 
1207 static struct clk_branch gcc_disp_gpll0_clk_src = {
1208 	.halt_check = BRANCH_HALT_DELAY,
1209 	.clkr = {
1210 		.enable_reg = 0x52004,
1211 		.enable_mask = BIT(18),
1212 		.hw.init = &(struct clk_init_data){
1213 			.name = "gcc_disp_gpll0_clk_src",
1214 			.parent_hws = (const struct clk_hw*[]){
1215 				&gpll0.clkr.hw,
1216 			},
1217 			.num_parents = 1,
1218 			.ops = &clk_branch2_aon_ops,
1219 		},
1220 	},
1221 };
1222 
1223 static struct clk_branch gcc_disp_gpll0_div_clk_src = {
1224 	.halt_check = BRANCH_HALT_DELAY,
1225 	.clkr = {
1226 		.enable_reg = 0x52004,
1227 		.enable_mask = BIT(19),
1228 		.hw.init = &(struct clk_init_data){
1229 			.name = "gcc_disp_gpll0_div_clk_src",
1230 			.parent_hws = (const struct clk_hw*[]){
1231 				&gcc_pll0_main_div_cdiv.hw,
1232 			},
1233 			.num_parents = 1,
1234 			.ops = &clk_branch2_ops,
1235 		},
1236 	},
1237 };
1238 
1239 static struct clk_branch gcc_disp_hf_axi_clk = {
1240 	.halt_reg = 0xb024,
1241 	.halt_check = BRANCH_HALT,
1242 	.clkr = {
1243 		.enable_reg = 0xb024,
1244 		.enable_mask = BIT(0),
1245 		.hw.init = &(struct clk_init_data){
1246 			.name = "gcc_disp_hf_axi_clk",
1247 			.ops = &clk_branch2_ops,
1248 		},
1249 	},
1250 };
1251 
1252 static struct clk_branch gcc_disp_sf_axi_clk = {
1253 	.halt_reg = 0xb070,
1254 	.halt_check = BRANCH_HALT,
1255 	.clkr = {
1256 		.enable_reg = 0xb070,
1257 		.enable_mask = BIT(0),
1258 		.hw.init = &(struct clk_init_data){
1259 			.name = "gcc_disp_sf_axi_clk",
1260 			.ops = &clk_branch2_ops,
1261 		},
1262 	},
1263 };
1264 
1265 
1266 static struct clk_branch gcc_gp1_clk = {
1267 	.halt_reg = 0x64000,
1268 	.halt_check = BRANCH_HALT,
1269 	.clkr = {
1270 		.enable_reg = 0x64000,
1271 		.enable_mask = BIT(0),
1272 		.hw.init = &(struct clk_init_data){
1273 			.name = "gcc_gp1_clk",
1274 			.parent_hws = (const struct clk_hw*[]){
1275 				&gcc_gp1_clk_src.clkr.hw,
1276 			},
1277 			.num_parents = 1,
1278 			.flags = CLK_SET_RATE_PARENT,
1279 			.ops = &clk_branch2_ops,
1280 		},
1281 	},
1282 };
1283 
1284 static struct clk_branch gcc_gp2_clk = {
1285 	.halt_reg = 0x65000,
1286 	.halt_check = BRANCH_HALT,
1287 	.clkr = {
1288 		.enable_reg = 0x65000,
1289 		.enable_mask = BIT(0),
1290 		.hw.init = &(struct clk_init_data){
1291 			.name = "gcc_gp2_clk",
1292 			.parent_hws = (const struct clk_hw*[]){
1293 				&gcc_gp2_clk_src.clkr.hw,
1294 			},
1295 			.num_parents = 1,
1296 			.flags = CLK_SET_RATE_PARENT,
1297 			.ops = &clk_branch2_ops,
1298 		},
1299 	},
1300 };
1301 
1302 static struct clk_branch gcc_gp3_clk = {
1303 	.halt_reg = 0x66000,
1304 	.halt_check = BRANCH_HALT,
1305 	.clkr = {
1306 		.enable_reg = 0x66000,
1307 		.enable_mask = BIT(0),
1308 		.hw.init = &(struct clk_init_data){
1309 			.name = "gcc_gp3_clk",
1310 			.parent_hws = (const struct clk_hw*[]){
1311 				&gcc_gp3_clk_src.clkr.hw,
1312 			},
1313 			.num_parents = 1,
1314 			.flags = CLK_SET_RATE_PARENT,
1315 			.ops = &clk_branch2_ops,
1316 		},
1317 	},
1318 };
1319 
1320 static struct clk_branch gcc_gpu_gpll0_clk_src = {
1321 	.halt_check = BRANCH_HALT_DELAY,
1322 	.clkr = {
1323 		.enable_reg = 0x52004,
1324 		.enable_mask = BIT(15),
1325 		.hw.init = &(struct clk_init_data){
1326 			.name = "gcc_gpu_gpll0_clk_src",
1327 			.parent_hws = (const struct clk_hw*[]){
1328 				&gpll0.clkr.hw,
1329 			},
1330 			.num_parents = 1,
1331 			.ops = &clk_branch2_ops,
1332 		},
1333 	},
1334 };
1335 
1336 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
1337 	.halt_check = BRANCH_HALT_DELAY,
1338 	.clkr = {
1339 		.enable_reg = 0x52004,
1340 		.enable_mask = BIT(16),
1341 		.hw.init = &(struct clk_init_data){
1342 			.name = "gcc_gpu_gpll0_div_clk_src",
1343 			.parent_hws = (const struct clk_hw*[]){
1344 				&gcc_pll0_main_div_cdiv.hw,
1345 			},
1346 			.num_parents = 1,
1347 			.ops = &clk_branch2_ops,
1348 		},
1349 	},
1350 };
1351 
1352 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
1353 	.halt_reg = 0x7100c,
1354 	.halt_check = BRANCH_VOTED,
1355 	.clkr = {
1356 		.enable_reg = 0x7100c,
1357 		.enable_mask = BIT(0),
1358 		.hw.init = &(struct clk_init_data){
1359 			.name = "gcc_gpu_memnoc_gfx_clk",
1360 			.ops = &clk_branch2_ops,
1361 		},
1362 	},
1363 };
1364 
1365 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
1366 	.halt_reg = 0x71018,
1367 	.halt_check = BRANCH_HALT,
1368 	.clkr = {
1369 		.enable_reg = 0x71018,
1370 		.enable_mask = BIT(0),
1371 		.hw.init = &(struct clk_init_data){
1372 			.name = "gcc_gpu_snoc_dvm_gfx_clk",
1373 			.ops = &clk_branch2_ops,
1374 		},
1375 	},
1376 };
1377 
1378 static struct clk_branch gcc_gpu_vs_clk = {
1379 	.halt_reg = 0x7a04c,
1380 	.halt_check = BRANCH_HALT,
1381 	.clkr = {
1382 		.enable_reg = 0x7a04c,
1383 		.enable_mask = BIT(0),
1384 		.hw.init = &(struct clk_init_data){
1385 			.name = "gcc_gpu_vs_clk",
1386 			.parent_hws = (const struct clk_hw*[]){
1387 				&gcc_vsensor_clk_src.clkr.hw,
1388 			},
1389 			.num_parents = 1,
1390 			.flags = CLK_SET_RATE_PARENT,
1391 			.ops = &clk_branch2_ops,
1392 		},
1393 	},
1394 };
1395 
1396 static struct clk_branch gcc_npu_axi_clk = {
1397 	.halt_reg = 0x4d008,
1398 	.halt_check = BRANCH_HALT,
1399 	.clkr = {
1400 		.enable_reg = 0x4d008,
1401 		.enable_mask = BIT(0),
1402 		.hw.init = &(struct clk_init_data){
1403 			.name = "gcc_npu_axi_clk",
1404 			.ops = &clk_branch2_ops,
1405 		},
1406 	},
1407 };
1408 
1409 static struct clk_branch gcc_npu_cfg_ahb_clk = {
1410 	.halt_reg = 0x4d004,
1411 	.halt_check = BRANCH_HALT,
1412 	.hwcg_reg = 0x4d004,
1413 	.hwcg_bit = 1,
1414 	.clkr = {
1415 		.enable_reg = 0x4d004,
1416 		.enable_mask = BIT(0),
1417 		.hw.init = &(struct clk_init_data){
1418 			.name = "gcc_npu_cfg_ahb_clk",
1419 			.flags = CLK_IS_CRITICAL,
1420 			.ops = &clk_branch2_ops,
1421 		},
1422 	},
1423 };
1424 
1425 static struct clk_branch gcc_npu_gpll0_clk_src = {
1426 	.halt_check = BRANCH_HALT_DELAY,
1427 	.clkr = {
1428 		.enable_reg = 0x52004,
1429 		.enable_mask = BIT(25),
1430 		.hw.init = &(struct clk_init_data){
1431 			.name = "gcc_npu_gpll0_clk_src",
1432 			.parent_hws = (const struct clk_hw*[]){
1433 				&gpll0.clkr.hw,
1434 			},
1435 			.num_parents = 1,
1436 			.ops = &clk_branch2_ops,
1437 		},
1438 	},
1439 };
1440 
1441 static struct clk_branch gcc_npu_gpll0_div_clk_src = {
1442 	.halt_check = BRANCH_HALT_DELAY,
1443 	.clkr = {
1444 		.enable_reg = 0x52004,
1445 		.enable_mask = BIT(26),
1446 		.hw.init = &(struct clk_init_data){
1447 			.name = "gcc_npu_gpll0_div_clk_src",
1448 			.parent_hws = (const struct clk_hw*[]){
1449 				&gcc_pll0_main_div_cdiv.hw,
1450 			},
1451 			.num_parents = 1,
1452 			.flags = CLK_SET_RATE_PARENT,
1453 			.ops = &clk_branch2_ops,
1454 		},
1455 	},
1456 };
1457 
1458 static struct clk_branch gcc_pcie_0_aux_clk = {
1459 	.halt_reg = 0x6b01c,
1460 	.halt_check = BRANCH_HALT_VOTED,
1461 	.clkr = {
1462 		.enable_reg = 0x5200c,
1463 		.enable_mask = BIT(3),
1464 		.hw.init = &(struct clk_init_data){
1465 			.name = "gcc_pcie_0_aux_clk",
1466 			.parent_hws = (const struct clk_hw*[]){
1467 				&gcc_pcie_0_aux_clk_src.clkr.hw,
1468 			},
1469 			.num_parents = 1,
1470 			.flags = CLK_SET_RATE_PARENT,
1471 			.ops = &clk_branch2_ops,
1472 		},
1473 	},
1474 };
1475 
1476 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
1477 	.halt_reg = 0x6b018,
1478 	.halt_check = BRANCH_HALT_VOTED,
1479 	.hwcg_reg = 0x6b018,
1480 	.hwcg_bit = 1,
1481 	.clkr = {
1482 		.enable_reg = 0x5200c,
1483 		.enable_mask = BIT(2),
1484 		.hw.init = &(struct clk_init_data){
1485 			.name = "gcc_pcie_0_cfg_ahb_clk",
1486 			.ops = &clk_branch2_ops,
1487 		},
1488 	},
1489 };
1490 
1491 static struct clk_branch gcc_pcie_0_clkref_clk = {
1492 	.halt_reg = 0x8c008,
1493 	.halt_check = BRANCH_HALT,
1494 	.clkr = {
1495 		.enable_reg = 0x8c008,
1496 		.enable_mask = BIT(0),
1497 		.hw.init = &(struct clk_init_data){
1498 			.name = "gcc_pcie_0_clkref_clk",
1499 			.ops = &clk_branch2_ops,
1500 		},
1501 	},
1502 };
1503 
1504 static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
1505 	.halt_reg = 0x6b014,
1506 	.halt_check = BRANCH_HALT_VOTED,
1507 	.clkr = {
1508 		.enable_reg = 0x5200c,
1509 		.enable_mask = BIT(1),
1510 		.hw.init = &(struct clk_init_data){
1511 			.name = "gcc_pcie_0_mstr_axi_clk",
1512 			.ops = &clk_branch2_ops,
1513 		},
1514 	},
1515 };
1516 
1517 static struct clk_branch gcc_pcie_0_pipe_clk = {
1518 	.halt_reg = 0x6b020,
1519 	.halt_check = BRANCH_HALT_SKIP,
1520 	.clkr = {
1521 		.enable_reg = 0x5200c,
1522 		.enable_mask = BIT(4),
1523 		.hw.init = &(struct clk_init_data){
1524 			.name = "gcc_pcie_0_pipe_clk",
1525 			.ops = &clk_branch2_ops,
1526 		},
1527 	},
1528 };
1529 
1530 static struct clk_branch gcc_pcie_0_slv_axi_clk = {
1531 	.halt_reg = 0x6b010,
1532 	.halt_check = BRANCH_HALT_VOTED,
1533 	.hwcg_reg = 0x6b010,
1534 	.hwcg_bit = 1,
1535 	.clkr = {
1536 		.enable_reg = 0x5200c,
1537 		.enable_mask = BIT(0),
1538 		.hw.init = &(struct clk_init_data){
1539 			.name = "gcc_pcie_0_slv_axi_clk",
1540 			.ops = &clk_branch2_ops,
1541 		},
1542 	},
1543 };
1544 
1545 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
1546 	.halt_reg = 0x6b00c,
1547 	.halt_check = BRANCH_HALT_VOTED,
1548 	.clkr = {
1549 		.enable_reg = 0x5200c,
1550 		.enable_mask = BIT(5),
1551 		.hw.init = &(struct clk_init_data){
1552 			.name = "gcc_pcie_0_slv_q2a_axi_clk",
1553 			.ops = &clk_branch2_ops,
1554 		},
1555 	},
1556 };
1557 
1558 static struct clk_branch gcc_pcie_phy_aux_clk = {
1559 	.halt_reg = 0x6f004,
1560 	.halt_check = BRANCH_HALT,
1561 	.clkr = {
1562 		.enable_reg = 0x6f004,
1563 		.enable_mask = BIT(0),
1564 		.hw.init = &(struct clk_init_data){
1565 			.name = "gcc_pcie_phy_aux_clk",
1566 			.parent_hws = (const struct clk_hw*[]){
1567 				&gcc_pcie_0_aux_clk_src.clkr.hw,
1568 			},
1569 			.num_parents = 1,
1570 			.flags = CLK_SET_RATE_PARENT,
1571 			.ops = &clk_branch2_ops,
1572 		},
1573 	},
1574 };
1575 
1576 static struct clk_branch gcc_pcie_phy_refgen_clk = {
1577 	.halt_reg = 0x6f02c,
1578 	.halt_check = BRANCH_HALT,
1579 	.clkr = {
1580 		.enable_reg = 0x6f02c,
1581 		.enable_mask = BIT(0),
1582 		.hw.init = &(struct clk_init_data){
1583 			.name = "gcc_pcie_phy_refgen_clk",
1584 			.parent_hws = (const struct clk_hw*[]){
1585 				&gcc_pcie_phy_refgen_clk_src.clkr.hw,
1586 			},
1587 			.num_parents = 1,
1588 			.flags = CLK_SET_RATE_PARENT,
1589 			.ops = &clk_branch2_ops,
1590 		},
1591 	},
1592 };
1593 
1594 static struct clk_branch gcc_pdm2_clk = {
1595 	.halt_reg = 0x3300c,
1596 	.halt_check = BRANCH_HALT,
1597 	.clkr = {
1598 		.enable_reg = 0x3300c,
1599 		.enable_mask = BIT(0),
1600 		.hw.init = &(struct clk_init_data){
1601 			.name = "gcc_pdm2_clk",
1602 			.parent_hws = (const struct clk_hw*[]){
1603 				&gcc_pdm2_clk_src.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_pdm_ahb_clk = {
1613 	.halt_reg = 0x33004,
1614 	.halt_check = BRANCH_HALT,
1615 	.hwcg_reg = 0x33004,
1616 	.hwcg_bit = 1,
1617 	.clkr = {
1618 		.enable_reg = 0x33004,
1619 		.enable_mask = BIT(0),
1620 		.hw.init = &(struct clk_init_data){
1621 			.name = "gcc_pdm_ahb_clk",
1622 			.ops = &clk_branch2_ops,
1623 		},
1624 	},
1625 };
1626 
1627 static struct clk_branch gcc_pdm_xo4_clk = {
1628 	.halt_reg = 0x33008,
1629 	.halt_check = BRANCH_HALT,
1630 	.clkr = {
1631 		.enable_reg = 0x33008,
1632 		.enable_mask = BIT(0),
1633 		.hw.init = &(struct clk_init_data){
1634 			.name = "gcc_pdm_xo4_clk",
1635 			.ops = &clk_branch2_ops,
1636 		},
1637 	},
1638 };
1639 
1640 static struct clk_branch gcc_prng_ahb_clk = {
1641 	.halt_reg = 0x34004,
1642 	.halt_check = BRANCH_HALT_VOTED,
1643 	.hwcg_reg = 0x34004,
1644 	.hwcg_bit = 1,
1645 	.clkr = {
1646 		.enable_reg = 0x52004,
1647 		.enable_mask = BIT(13),
1648 		.hw.init = &(struct clk_init_data){
1649 			.name = "gcc_prng_ahb_clk",
1650 			.ops = &clk_branch2_ops,
1651 		},
1652 	},
1653 };
1654 
1655 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
1656 	.halt_reg = 0x17014,
1657 	.halt_check = BRANCH_HALT_VOTED,
1658 	.clkr = {
1659 		.enable_reg = 0x5200c,
1660 		.enable_mask = BIT(9),
1661 		.hw.init = &(struct clk_init_data){
1662 			.name = "gcc_qupv3_wrap0_core_2x_clk",
1663 			.ops = &clk_branch2_ops,
1664 		},
1665 	},
1666 };
1667 
1668 static struct clk_branch gcc_qupv3_wrap0_core_clk = {
1669 	.halt_reg = 0x1700c,
1670 	.halt_check = BRANCH_HALT_VOTED,
1671 	.clkr = {
1672 		.enable_reg = 0x5200c,
1673 		.enable_mask = BIT(8),
1674 		.hw.init = &(struct clk_init_data){
1675 			.name = "gcc_qupv3_wrap0_core_clk",
1676 			.ops = &clk_branch2_ops,
1677 		},
1678 	},
1679 };
1680 
1681 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
1682 	.halt_reg = 0x17030,
1683 	.halt_check = BRANCH_HALT_VOTED,
1684 	.clkr = {
1685 		.enable_reg = 0x5200c,
1686 		.enable_mask = BIT(10),
1687 		.hw.init = &(struct clk_init_data){
1688 			.name = "gcc_qupv3_wrap0_s0_clk",
1689 			.parent_hws = (const struct clk_hw*[]){
1690 				&gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
1691 			},
1692 			.num_parents = 1,
1693 			.flags = CLK_SET_RATE_PARENT,
1694 			.ops = &clk_branch2_ops,
1695 		},
1696 	},
1697 };
1698 
1699 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
1700 	.halt_reg = 0x17160,
1701 	.halt_check = BRANCH_HALT_VOTED,
1702 	.clkr = {
1703 		.enable_reg = 0x5200c,
1704 		.enable_mask = BIT(11),
1705 		.hw.init = &(struct clk_init_data){
1706 			.name = "gcc_qupv3_wrap0_s1_clk",
1707 			.parent_hws = (const struct clk_hw*[]){
1708 				&gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
1709 			},
1710 			.num_parents = 1,
1711 			.flags = CLK_SET_RATE_PARENT,
1712 			.ops = &clk_branch2_ops,
1713 		},
1714 	},
1715 };
1716 
1717 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
1718 	.halt_reg = 0x17290,
1719 	.halt_check = BRANCH_HALT_VOTED,
1720 	.clkr = {
1721 		.enable_reg = 0x5200c,
1722 		.enable_mask = BIT(12),
1723 		.hw.init = &(struct clk_init_data){
1724 			.name = "gcc_qupv3_wrap0_s2_clk",
1725 			.parent_hws = (const struct clk_hw*[]){
1726 				&gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
1727 			},
1728 			.num_parents = 1,
1729 			.flags = CLK_SET_RATE_PARENT,
1730 			.ops = &clk_branch2_ops,
1731 		},
1732 	},
1733 };
1734 
1735 static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
1736 	.halt_reg = 0x173c0,
1737 	.halt_check = BRANCH_HALT_VOTED,
1738 	.clkr = {
1739 		.enable_reg = 0x5200c,
1740 		.enable_mask = BIT(13),
1741 		.hw.init = &(struct clk_init_data){
1742 			.name = "gcc_qupv3_wrap0_s3_clk",
1743 			.parent_hws = (const struct clk_hw*[]){
1744 				&gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
1745 			},
1746 			.num_parents = 1,
1747 			.flags = CLK_SET_RATE_PARENT,
1748 			.ops = &clk_branch2_ops,
1749 		},
1750 	},
1751 };
1752 
1753 static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
1754 	.halt_reg = 0x174f0,
1755 	.halt_check = BRANCH_HALT_VOTED,
1756 	.clkr = {
1757 		.enable_reg = 0x5200c,
1758 		.enable_mask = BIT(14),
1759 		.hw.init = &(struct clk_init_data){
1760 			.name = "gcc_qupv3_wrap0_s4_clk",
1761 			.parent_hws = (const struct clk_hw*[]){
1762 				&gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
1763 			},
1764 			.num_parents = 1,
1765 			.flags = CLK_SET_RATE_PARENT,
1766 			.ops = &clk_branch2_ops,
1767 		},
1768 	},
1769 };
1770 
1771 static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
1772 	.halt_reg = 0x17620,
1773 	.halt_check = BRANCH_HALT_VOTED,
1774 	.clkr = {
1775 		.enable_reg = 0x5200c,
1776 		.enable_mask = BIT(15),
1777 		.hw.init = &(struct clk_init_data){
1778 			.name = "gcc_qupv3_wrap0_s5_clk",
1779 			.parent_hws = (const struct clk_hw*[]){
1780 				&gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
1781 			},
1782 			.num_parents = 1,
1783 			.flags = CLK_SET_RATE_PARENT,
1784 			.ops = &clk_branch2_ops,
1785 		},
1786 	},
1787 };
1788 
1789 static struct clk_branch gcc_qupv3_wrap0_s6_clk = {
1790 	.halt_reg = 0x17750,
1791 	.halt_check = BRANCH_HALT_VOTED,
1792 	.clkr = {
1793 		.enable_reg = 0x5200c,
1794 		.enable_mask = BIT(16),
1795 		.hw.init = &(struct clk_init_data){
1796 			.name = "gcc_qupv3_wrap0_s6_clk",
1797 			.parent_hws = (const struct clk_hw*[]){
1798 				&gcc_qupv3_wrap0_s6_clk_src.clkr.hw,
1799 			},
1800 			.num_parents = 1,
1801 			.flags = CLK_SET_RATE_PARENT,
1802 			.ops = &clk_branch2_ops,
1803 		},
1804 	},
1805 };
1806 
1807 static struct clk_branch gcc_qupv3_wrap0_s7_clk = {
1808 	.halt_reg = 0x17880,
1809 	.halt_check = BRANCH_HALT_VOTED,
1810 	.clkr = {
1811 		.enable_reg = 0x5200c,
1812 		.enable_mask = BIT(17),
1813 		.hw.init = &(struct clk_init_data){
1814 			.name = "gcc_qupv3_wrap0_s7_clk",
1815 			.parent_hws = (const struct clk_hw*[]){
1816 				&gcc_qupv3_wrap0_s7_clk_src.clkr.hw,
1817 			},
1818 			.num_parents = 1,
1819 			.flags = CLK_SET_RATE_PARENT,
1820 			.ops = &clk_branch2_ops,
1821 		},
1822 	},
1823 };
1824 
1825 static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
1826 	.halt_reg = 0x18004,
1827 	.halt_check = BRANCH_HALT_VOTED,
1828 	.clkr = {
1829 		.enable_reg = 0x5200c,
1830 		.enable_mask = BIT(18),
1831 		.hw.init = &(struct clk_init_data){
1832 			.name = "gcc_qupv3_wrap1_core_2x_clk",
1833 			.ops = &clk_branch2_ops,
1834 		},
1835 	},
1836 };
1837 
1838 static struct clk_branch gcc_qupv3_wrap1_core_clk = {
1839 	.halt_reg = 0x18008,
1840 	.halt_check = BRANCH_HALT_VOTED,
1841 	.clkr = {
1842 		.enable_reg = 0x5200c,
1843 		.enable_mask = BIT(19),
1844 		.hw.init = &(struct clk_init_data){
1845 			.name = "gcc_qupv3_wrap1_core_clk",
1846 			.ops = &clk_branch2_ops,
1847 		},
1848 	},
1849 };
1850 
1851 static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
1852 	.halt_reg = 0x18014,
1853 	.halt_check = BRANCH_HALT_VOTED,
1854 	.clkr = {
1855 		.enable_reg = 0x5200c,
1856 		.enable_mask = BIT(22),
1857 		.hw.init = &(struct clk_init_data){
1858 			.name = "gcc_qupv3_wrap1_s0_clk",
1859 			.parent_hws = (const struct clk_hw*[]){
1860 				&gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
1861 			},
1862 			.num_parents = 1,
1863 			.flags = CLK_SET_RATE_PARENT,
1864 			.ops = &clk_branch2_ops,
1865 		},
1866 	},
1867 };
1868 
1869 static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
1870 	.halt_reg = 0x18144,
1871 	.halt_check = BRANCH_HALT_VOTED,
1872 	.clkr = {
1873 		.enable_reg = 0x5200c,
1874 		.enable_mask = BIT(23),
1875 		.hw.init = &(struct clk_init_data){
1876 			.name = "gcc_qupv3_wrap1_s1_clk",
1877 			.parent_hws = (const struct clk_hw*[]){
1878 				&gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
1879 			},
1880 			.num_parents = 1,
1881 			.flags = CLK_SET_RATE_PARENT,
1882 			.ops = &clk_branch2_ops,
1883 		},
1884 	},
1885 };
1886 
1887 static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
1888 	.halt_reg = 0x18274,
1889 	.halt_check = BRANCH_HALT_VOTED,
1890 	.clkr = {
1891 		.enable_reg = 0x5200c,
1892 		.enable_mask = BIT(24),
1893 		.hw.init = &(struct clk_init_data){
1894 			.name = "gcc_qupv3_wrap1_s2_clk",
1895 			.parent_hws = (const struct clk_hw*[]){
1896 				&gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
1897 			},
1898 			.num_parents = 1,
1899 			.flags = CLK_SET_RATE_PARENT,
1900 			.ops = &clk_branch2_ops,
1901 		},
1902 	},
1903 };
1904 
1905 static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
1906 	.halt_reg = 0x183a4,
1907 	.halt_check = BRANCH_HALT_VOTED,
1908 	.clkr = {
1909 		.enable_reg = 0x5200c,
1910 		.enable_mask = BIT(25),
1911 		.hw.init = &(struct clk_init_data){
1912 			.name = "gcc_qupv3_wrap1_s3_clk",
1913 			.parent_hws = (const struct clk_hw*[]){
1914 				&gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
1915 			},
1916 			.num_parents = 1,
1917 			.flags = CLK_SET_RATE_PARENT,
1918 			.ops = &clk_branch2_ops,
1919 		},
1920 	},
1921 };
1922 
1923 static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
1924 	.halt_reg = 0x184d4,
1925 	.halt_check = BRANCH_HALT_VOTED,
1926 	.clkr = {
1927 		.enable_reg = 0x5200c,
1928 		.enable_mask = BIT(26),
1929 		.hw.init = &(struct clk_init_data){
1930 			.name = "gcc_qupv3_wrap1_s4_clk",
1931 			.parent_hws = (const struct clk_hw*[]){
1932 				&gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
1933 			},
1934 			.num_parents = 1,
1935 			.flags = CLK_SET_RATE_PARENT,
1936 			.ops = &clk_branch2_ops,
1937 		},
1938 	},
1939 };
1940 
1941 static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
1942 	.halt_reg = 0x18604,
1943 	.halt_check = BRANCH_HALT_VOTED,
1944 	.clkr = {
1945 		.enable_reg = 0x5200c,
1946 		.enable_mask = BIT(27),
1947 		.hw.init = &(struct clk_init_data){
1948 			.name = "gcc_qupv3_wrap1_s5_clk",
1949 			.parent_hws = (const struct clk_hw*[]){
1950 				&gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
1951 			},
1952 			.num_parents = 1,
1953 			.flags = CLK_SET_RATE_PARENT,
1954 			.ops = &clk_branch2_ops,
1955 		},
1956 	},
1957 };
1958 
1959 static struct clk_branch gcc_qupv3_wrap1_s6_clk = {
1960 	.halt_reg = 0x18734,
1961 	.halt_check = BRANCH_HALT_VOTED,
1962 	.clkr = {
1963 		.enable_reg = 0x5200c,
1964 		.enable_mask = BIT(28),
1965 		.hw.init = &(struct clk_init_data){
1966 			.name = "gcc_qupv3_wrap1_s6_clk",
1967 			.parent_hws = (const struct clk_hw*[]){
1968 				&gcc_qupv3_wrap1_s6_clk_src.clkr.hw,
1969 			},
1970 			.num_parents = 1,
1971 			.flags = CLK_SET_RATE_PARENT,
1972 			.ops = &clk_branch2_ops,
1973 		},
1974 	},
1975 };
1976 
1977 static struct clk_branch gcc_qupv3_wrap1_s7_clk = {
1978 	.halt_reg = 0x18864,
1979 	.halt_check = BRANCH_HALT_VOTED,
1980 	.clkr = {
1981 		.enable_reg = 0x5200c,
1982 		.enable_mask = BIT(29),
1983 		.hw.init = &(struct clk_init_data){
1984 			.name = "gcc_qupv3_wrap1_s7_clk",
1985 			.parent_hws = (const struct clk_hw*[]){
1986 				&gcc_qupv3_wrap1_s7_clk_src.clkr.hw,
1987 			},
1988 			.num_parents = 1,
1989 			.flags = CLK_SET_RATE_PARENT,
1990 			.ops = &clk_branch2_ops,
1991 		},
1992 	},
1993 };
1994 
1995 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
1996 	.halt_reg = 0x17004,
1997 	.halt_check = BRANCH_HALT_VOTED,
1998 	.clkr = {
1999 		.enable_reg = 0x5200c,
2000 		.enable_mask = BIT(6),
2001 		.hw.init = &(struct clk_init_data){
2002 			.name = "gcc_qupv3_wrap_0_m_ahb_clk",
2003 			.ops = &clk_branch2_ops,
2004 		},
2005 	},
2006 };
2007 
2008 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
2009 	.halt_reg = 0x17008,
2010 	.halt_check = BRANCH_HALT_VOTED,
2011 	.hwcg_reg = 0x17008,
2012 	.hwcg_bit = 1,
2013 	.clkr = {
2014 		.enable_reg = 0x5200c,
2015 		.enable_mask = BIT(7),
2016 		.hw.init = &(struct clk_init_data){
2017 			.name = "gcc_qupv3_wrap_0_s_ahb_clk",
2018 			.ops = &clk_branch2_ops,
2019 		},
2020 	},
2021 };
2022 
2023 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
2024 	.halt_reg = 0x1800c,
2025 	.halt_check = BRANCH_HALT_VOTED,
2026 	.clkr = {
2027 		.enable_reg = 0x5200c,
2028 		.enable_mask = BIT(20),
2029 		.hw.init = &(struct clk_init_data){
2030 			.name = "gcc_qupv3_wrap_1_m_ahb_clk",
2031 			.ops = &clk_branch2_ops,
2032 		},
2033 	},
2034 };
2035 
2036 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
2037 	.halt_reg = 0x18010,
2038 	.halt_check = BRANCH_HALT_VOTED,
2039 	.hwcg_reg = 0x18010,
2040 	.hwcg_bit = 1,
2041 	.clkr = {
2042 		.enable_reg = 0x5200c,
2043 		.enable_mask = BIT(21),
2044 		.hw.init = &(struct clk_init_data){
2045 			.name = "gcc_qupv3_wrap_1_s_ahb_clk",
2046 			.ops = &clk_branch2_ops,
2047 		},
2048 	},
2049 };
2050 
2051 static struct clk_branch gcc_sdcc1_ahb_clk = {
2052 	.halt_reg = 0x12008,
2053 	.halt_check = BRANCH_HALT,
2054 	.clkr = {
2055 		.enable_reg = 0x12008,
2056 		.enable_mask = BIT(0),
2057 		.hw.init = &(struct clk_init_data){
2058 			.name = "gcc_sdcc1_ahb_clk",
2059 			.ops = &clk_branch2_ops,
2060 		},
2061 	},
2062 };
2063 
2064 static struct clk_branch gcc_sdcc1_apps_clk = {
2065 	.halt_reg = 0x1200c,
2066 	.halt_check = BRANCH_HALT,
2067 	.clkr = {
2068 		.enable_reg = 0x1200c,
2069 		.enable_mask = BIT(0),
2070 		.hw.init = &(struct clk_init_data){
2071 			.name = "gcc_sdcc1_apps_clk",
2072 			.parent_hws = (const struct clk_hw*[]){
2073 				&gcc_sdcc1_apps_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_sdcc1_ice_core_clk = {
2083 	.halt_reg = 0x12040,
2084 	.halt_check = BRANCH_HALT,
2085 	.clkr = {
2086 		.enable_reg = 0x12040,
2087 		.enable_mask = BIT(0),
2088 		.hw.init = &(struct clk_init_data){
2089 			.name = "gcc_sdcc1_ice_core_clk",
2090 			.parent_hws = (const struct clk_hw*[]){
2091 				&gcc_sdcc1_ice_core_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_sdcc2_ahb_clk = {
2101 	.halt_reg = 0x14008,
2102 	.halt_check = BRANCH_HALT,
2103 	.clkr = {
2104 		.enable_reg = 0x14008,
2105 		.enable_mask = BIT(0),
2106 		.hw.init = &(struct clk_init_data){
2107 			.name = "gcc_sdcc2_ahb_clk",
2108 			.ops = &clk_branch2_ops,
2109 		},
2110 	},
2111 };
2112 
2113 static struct clk_branch gcc_sdcc2_apps_clk = {
2114 	.halt_reg = 0x14004,
2115 	.halt_check = BRANCH_HALT,
2116 	.clkr = {
2117 		.enable_reg = 0x14004,
2118 		.enable_mask = BIT(0),
2119 		.hw.init = &(struct clk_init_data){
2120 			.name = "gcc_sdcc2_apps_clk",
2121 			.parent_hws = (const struct clk_hw*[]){
2122 				&gcc_sdcc2_apps_clk_src.clkr.hw,
2123 			},
2124 			.num_parents = 1,
2125 			.flags = CLK_SET_RATE_PARENT,
2126 			.ops = &clk_branch2_ops,
2127 		},
2128 	},
2129 };
2130 
2131 static struct clk_branch gcc_sdcc4_ahb_clk = {
2132 	.halt_reg = 0x16008,
2133 	.halt_check = BRANCH_HALT,
2134 	.clkr = {
2135 		.enable_reg = 0x16008,
2136 		.enable_mask = BIT(0),
2137 		.hw.init = &(struct clk_init_data){
2138 			.name = "gcc_sdcc4_ahb_clk",
2139 			.ops = &clk_branch2_ops,
2140 		},
2141 	},
2142 };
2143 
2144 static struct clk_branch gcc_sdcc4_apps_clk = {
2145 	.halt_reg = 0x16004,
2146 	.halt_check = BRANCH_HALT,
2147 	.clkr = {
2148 		.enable_reg = 0x16004,
2149 		.enable_mask = BIT(0),
2150 		.hw.init = &(struct clk_init_data){
2151 			.name = "gcc_sdcc4_apps_clk",
2152 			.parent_hws = (const struct clk_hw*[]){
2153 				&gcc_sdcc4_apps_clk_src.clkr.hw,
2154 			},
2155 			.num_parents = 1,
2156 			.flags = CLK_SET_RATE_PARENT,
2157 			.ops = &clk_branch2_ops,
2158 		},
2159 	},
2160 };
2161 
2162 static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {
2163 	.halt_reg = 0x4144,
2164 	.halt_check = BRANCH_HALT_VOTED,
2165 	.clkr = {
2166 		.enable_reg = 0x52004,
2167 		.enable_mask = BIT(0),
2168 		.hw.init = &(struct clk_init_data){
2169 			.name = "gcc_sys_noc_cpuss_ahb_clk",
2170 			.parent_hws = (const struct clk_hw*[]){
2171 				&gcc_cpuss_ahb_clk_src.clkr.hw,
2172 			},
2173 			.num_parents = 1,
2174 			.flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
2175 			.ops = &clk_branch2_ops,
2176 		},
2177 	},
2178 };
2179 
2180 static struct clk_branch gcc_tsif_ahb_clk = {
2181 	.halt_reg = 0x36004,
2182 	.halt_check = BRANCH_HALT,
2183 	.clkr = {
2184 		.enable_reg = 0x36004,
2185 		.enable_mask = BIT(0),
2186 		.hw.init = &(struct clk_init_data){
2187 			.name = "gcc_tsif_ahb_clk",
2188 			.ops = &clk_branch2_ops,
2189 		},
2190 	},
2191 };
2192 
2193 static struct clk_branch gcc_tsif_inactivity_timers_clk = {
2194 	.halt_reg = 0x3600c,
2195 	.halt_check = BRANCH_HALT,
2196 	.clkr = {
2197 		.enable_reg = 0x3600c,
2198 		.enable_mask = BIT(0),
2199 		.hw.init = &(struct clk_init_data){
2200 			.name = "gcc_tsif_inactivity_timers_clk",
2201 			.ops = &clk_branch2_ops,
2202 		},
2203 	},
2204 };
2205 
2206 static struct clk_branch gcc_tsif_ref_clk = {
2207 	.halt_reg = 0x36008,
2208 	.halt_check = BRANCH_HALT,
2209 	.clkr = {
2210 		.enable_reg = 0x36008,
2211 		.enable_mask = BIT(0),
2212 		.hw.init = &(struct clk_init_data){
2213 			.name = "gcc_tsif_ref_clk",
2214 			.parent_hws = (const struct clk_hw*[]){
2215 				&gcc_tsif_ref_clk_src.clkr.hw,
2216 			},
2217 			.num_parents = 1,
2218 			.flags = CLK_SET_RATE_PARENT,
2219 			.ops = &clk_branch2_ops,
2220 		},
2221 	},
2222 };
2223 
2224 static struct clk_branch gcc_ufs_mem_clkref_clk = {
2225 	.halt_reg = 0x8c000,
2226 	.halt_check = BRANCH_HALT,
2227 	.clkr = {
2228 		.enable_reg = 0x8c000,
2229 		.enable_mask = BIT(0),
2230 		.hw.init = &(struct clk_init_data){
2231 			.name = "gcc_ufs_mem_clkref_clk",
2232 			.ops = &clk_branch2_ops,
2233 		},
2234 	},
2235 };
2236 
2237 static struct clk_branch gcc_ufs_phy_ahb_clk = {
2238 	.halt_reg = 0x77014,
2239 	.halt_check = BRANCH_HALT,
2240 	.hwcg_reg = 0x77014,
2241 	.hwcg_bit = 1,
2242 	.clkr = {
2243 		.enable_reg = 0x77014,
2244 		.enable_mask = BIT(0),
2245 		.hw.init = &(struct clk_init_data){
2246 			.name = "gcc_ufs_phy_ahb_clk",
2247 			.ops = &clk_branch2_ops,
2248 		},
2249 	},
2250 };
2251 
2252 static struct clk_branch gcc_ufs_phy_axi_clk = {
2253 	.halt_reg = 0x77038,
2254 	.halt_check = BRANCH_HALT,
2255 	.hwcg_reg = 0x77038,
2256 	.hwcg_bit = 1,
2257 	.clkr = {
2258 		.enable_reg = 0x77038,
2259 		.enable_mask = BIT(0),
2260 		.hw.init = &(struct clk_init_data){
2261 			.name = "gcc_ufs_phy_axi_clk",
2262 			.parent_hws = (const struct clk_hw*[]){
2263 				&gcc_ufs_phy_axi_clk_src.clkr.hw,
2264 			},
2265 			.num_parents = 1,
2266 			.flags = CLK_SET_RATE_PARENT,
2267 			.ops = &clk_branch2_ops,
2268 		},
2269 	},
2270 };
2271 
2272 static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = {
2273 	.halt_reg = 0x77038,
2274 	.halt_check = BRANCH_HALT,
2275 	.hwcg_reg = 0x77038,
2276 	.hwcg_bit = 1,
2277 	.clkr = {
2278 		.enable_reg = 0x77038,
2279 		.enable_mask = BIT(1),
2280 		.hw.init = &(struct clk_init_data){
2281 			.name = "gcc_ufs_phy_axi_hw_ctl_clk",
2282 			.parent_hws = (const struct clk_hw*[]){
2283 				&gcc_ufs_phy_axi_clk.clkr.hw,
2284 			},
2285 			.num_parents = 1,
2286 			.flags = CLK_SET_RATE_PARENT,
2287 			.ops = &clk_branch_simple_ops,
2288 		},
2289 	},
2290 };
2291 
2292 static struct clk_branch gcc_ufs_phy_ice_core_clk = {
2293 	.halt_reg = 0x77090,
2294 	.halt_check = BRANCH_HALT,
2295 	.hwcg_reg = 0x77090,
2296 	.hwcg_bit = 1,
2297 	.clkr = {
2298 		.enable_reg = 0x77090,
2299 		.enable_mask = BIT(0),
2300 		.hw.init = &(struct clk_init_data){
2301 			.name = "gcc_ufs_phy_ice_core_clk",
2302 			.parent_hws = (const struct clk_hw*[]){
2303 				&gcc_ufs_phy_ice_core_clk_src.clkr.hw,
2304 			},
2305 			.num_parents = 1,
2306 			.flags = CLK_SET_RATE_PARENT,
2307 			.ops = &clk_branch2_ops,
2308 		},
2309 	},
2310 };
2311 
2312 static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = {
2313 	.halt_reg = 0x77090,
2314 	.halt_check = BRANCH_HALT,
2315 	.hwcg_reg = 0x77090,
2316 	.hwcg_bit = 1,
2317 	.clkr = {
2318 		.enable_reg = 0x77090,
2319 		.enable_mask = BIT(1),
2320 		.hw.init = &(struct clk_init_data){
2321 			.name = "gcc_ufs_phy_ice_core_hw_ctl_clk",
2322 			.parent_hws = (const struct clk_hw*[]){
2323 				&gcc_ufs_phy_ice_core_clk.clkr.hw,
2324 			},
2325 			.num_parents = 1,
2326 			.flags = CLK_SET_RATE_PARENT,
2327 			.ops = &clk_branch_simple_ops,
2328 		},
2329 	},
2330 };
2331 
2332 static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
2333 	.halt_reg = 0x77094,
2334 	.halt_check = BRANCH_HALT,
2335 	.hwcg_reg = 0x77094,
2336 	.hwcg_bit = 1,
2337 	.clkr = {
2338 		.enable_reg = 0x77094,
2339 		.enable_mask = BIT(0),
2340 		.hw.init = &(struct clk_init_data){
2341 			.name = "gcc_ufs_phy_phy_aux_clk",
2342 			.parent_hws = (const struct clk_hw*[]){
2343 				&gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2344 			},
2345 			.num_parents = 1,
2346 			.flags = CLK_SET_RATE_PARENT,
2347 			.ops = &clk_branch2_ops,
2348 		},
2349 	},
2350 };
2351 
2352 static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = {
2353 	.halt_reg = 0x77094,
2354 	.halt_check = BRANCH_HALT,
2355 	.hwcg_reg = 0x77094,
2356 	.hwcg_bit = 1,
2357 	.clkr = {
2358 		.enable_reg = 0x77094,
2359 		.enable_mask = BIT(1),
2360 		.hw.init = &(struct clk_init_data){
2361 			.name = "gcc_ufs_phy_phy_aux_hw_ctl_clk",
2362 			.parent_hws = (const struct clk_hw*[]){
2363 				&gcc_ufs_phy_phy_aux_clk.clkr.hw,
2364 			},
2365 			.num_parents = 1,
2366 			.flags = CLK_SET_RATE_PARENT,
2367 			.ops = &clk_branch_simple_ops,
2368 		},
2369 	},
2370 };
2371 
2372 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
2373 	.halt_reg = 0x7701c,
2374 	.halt_check = BRANCH_HALT_SKIP,
2375 	.clkr = {
2376 		.enable_reg = 0x7701c,
2377 		.enable_mask = BIT(0),
2378 		.hw.init = &(struct clk_init_data){
2379 			.name = "gcc_ufs_phy_rx_symbol_0_clk",
2380 			.ops = &clk_branch2_ops,
2381 		},
2382 	},
2383 };
2384 
2385 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
2386 	.halt_reg = 0x77018,
2387 	.halt_check = BRANCH_HALT_SKIP,
2388 	.clkr = {
2389 		.enable_reg = 0x77018,
2390 		.enable_mask = BIT(0),
2391 		.hw.init = &(struct clk_init_data){
2392 			.name = "gcc_ufs_phy_tx_symbol_0_clk",
2393 			.ops = &clk_branch2_ops,
2394 		},
2395 	},
2396 };
2397 
2398 static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
2399 	.halt_reg = 0x7708c,
2400 	.halt_check = BRANCH_HALT,
2401 	.hwcg_reg = 0x7708c,
2402 	.hwcg_bit = 1,
2403 	.clkr = {
2404 		.enable_reg = 0x7708c,
2405 		.enable_mask = BIT(0),
2406 		.hw.init = &(struct clk_init_data){
2407 			.name = "gcc_ufs_phy_unipro_core_clk",
2408 			.parent_hws = (const struct clk_hw*[]){
2409 				&gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2410 			},
2411 			.num_parents = 1,
2412 			.flags = CLK_SET_RATE_PARENT,
2413 			.ops = &clk_branch2_ops,
2414 		},
2415 	},
2416 };
2417 
2418 static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = {
2419 	.halt_reg = 0x7708c,
2420 	.halt_check = BRANCH_HALT,
2421 	.hwcg_reg = 0x7708c,
2422 	.hwcg_bit = 1,
2423 	.clkr = {
2424 		.enable_reg = 0x7708c,
2425 		.enable_mask = BIT(1),
2426 		.hw.init = &(struct clk_init_data){
2427 			.name = "gcc_ufs_phy_unipro_core_hw_ctl_clk",
2428 			.parent_hws = (const struct clk_hw*[]){
2429 				&gcc_ufs_phy_unipro_core_clk.clkr.hw,
2430 			},
2431 			.num_parents = 1,
2432 			.flags = CLK_SET_RATE_PARENT,
2433 			.ops = &clk_branch_simple_ops,
2434 		},
2435 	},
2436 };
2437 
2438 static struct clk_branch gcc_usb30_prim_master_clk = {
2439 	.halt_reg = 0xf010,
2440 	.halt_check = BRANCH_HALT,
2441 	.clkr = {
2442 		.enable_reg = 0xf010,
2443 		.enable_mask = BIT(0),
2444 		.hw.init = &(struct clk_init_data){
2445 			.name = "gcc_usb30_prim_master_clk",
2446 			.parent_hws = (const struct clk_hw*[]){
2447 				&gcc_usb30_prim_master_clk_src.clkr.hw,
2448 			},
2449 			.num_parents = 1,
2450 			.flags = CLK_SET_RATE_PARENT,
2451 			.ops = &clk_branch2_ops,
2452 		},
2453 	},
2454 };
2455 
2456 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
2457 	.halt_reg = 0xf018,
2458 	.halt_check = BRANCH_HALT,
2459 	.clkr = {
2460 		.enable_reg = 0xf018,
2461 		.enable_mask = BIT(0),
2462 		.hw.init = &(struct clk_init_data){
2463 			.name = "gcc_usb30_prim_mock_utmi_clk",
2464 			.parent_hws = (const struct clk_hw*[]){
2465 				&gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
2466 			},
2467 			.num_parents = 1,
2468 			.flags = CLK_SET_RATE_PARENT,
2469 			.ops = &clk_branch2_ops,
2470 		},
2471 	},
2472 };
2473 
2474 static struct clk_branch gcc_usb30_prim_sleep_clk = {
2475 	.halt_reg = 0xf014,
2476 	.halt_check = BRANCH_HALT,
2477 	.clkr = {
2478 		.enable_reg = 0xf014,
2479 		.enable_mask = BIT(0),
2480 		.hw.init = &(struct clk_init_data){
2481 			.name = "gcc_usb30_prim_sleep_clk",
2482 			.ops = &clk_branch2_ops,
2483 		},
2484 	},
2485 };
2486 
2487 static struct clk_branch gcc_usb3_prim_clkref_clk = {
2488 	.halt_reg = 0x8c010,
2489 	.halt_check = BRANCH_HALT,
2490 	.clkr = {
2491 		.enable_reg = 0x8c010,
2492 		.enable_mask = BIT(0),
2493 		.hw.init = &(struct clk_init_data){
2494 			.name = "gcc_usb3_prim_clkref_clk",
2495 			.ops = &clk_branch2_ops,
2496 		},
2497 	},
2498 };
2499 
2500 static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
2501 	.halt_reg = 0xf050,
2502 	.halt_check = BRANCH_HALT,
2503 	.clkr = {
2504 		.enable_reg = 0xf050,
2505 		.enable_mask = BIT(0),
2506 		.hw.init = &(struct clk_init_data){
2507 			.name = "gcc_usb3_prim_phy_aux_clk",
2508 			.parent_hws = (const struct clk_hw*[]){
2509 				&gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2510 			},
2511 			.num_parents = 1,
2512 			.flags = CLK_SET_RATE_PARENT,
2513 			.ops = &clk_branch2_ops,
2514 		},
2515 	},
2516 };
2517 
2518 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
2519 	.halt_reg = 0xf054,
2520 	.halt_check = BRANCH_HALT,
2521 	.clkr = {
2522 		.enable_reg = 0xf054,
2523 		.enable_mask = BIT(0),
2524 		.hw.init = &(struct clk_init_data){
2525 			.name = "gcc_usb3_prim_phy_com_aux_clk",
2526 			.parent_hws = (const struct clk_hw*[]){
2527 				&gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2528 			},
2529 			.num_parents = 1,
2530 			.flags = CLK_SET_RATE_PARENT,
2531 			.ops = &clk_branch2_ops,
2532 		},
2533 	},
2534 };
2535 
2536 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
2537 	.halt_check = BRANCH_HALT_SKIP,
2538 	.clkr = {
2539 		.enable_reg = 0xf058,
2540 		.enable_mask = BIT(0),
2541 		.hw.init = &(struct clk_init_data){
2542 			.name = "gcc_usb3_prim_phy_pipe_clk",
2543 			.ops = &clk_branch2_ops,
2544 		},
2545 	},
2546 };
2547 
2548 static struct clk_branch gcc_usb_phy_cfg_ahb2phy_clk = {
2549 	.halt_reg = 0x6a004,
2550 	.halt_check = BRANCH_HALT,
2551 	.hwcg_reg = 0x6a004,
2552 	.hwcg_bit = 1,
2553 	.clkr = {
2554 		.enable_reg = 0x6a004,
2555 		.enable_mask = BIT(0),
2556 		.hw.init = &(struct clk_init_data){
2557 			.name = "gcc_usb_phy_cfg_ahb2phy_clk",
2558 			.ops = &clk_branch2_ops,
2559 		},
2560 	},
2561 };
2562 
2563 static struct clk_branch gcc_vdda_vs_clk = {
2564 	.halt_reg = 0x7a00c,
2565 	.halt_check = BRANCH_HALT,
2566 	.clkr = {
2567 		.enable_reg = 0x7a00c,
2568 		.enable_mask = BIT(0),
2569 		.hw.init = &(struct clk_init_data){
2570 			.name = "gcc_vdda_vs_clk",
2571 			.parent_hws = (const struct clk_hw*[]){
2572 				&gcc_vsensor_clk_src.clkr.hw,
2573 			},
2574 			.num_parents = 1,
2575 			.flags = CLK_SET_RATE_PARENT,
2576 			.ops = &clk_branch2_ops,
2577 		},
2578 	},
2579 };
2580 
2581 static struct clk_branch gcc_vddcx_vs_clk = {
2582 	.halt_reg = 0x7a004,
2583 	.halt_check = BRANCH_HALT,
2584 	.clkr = {
2585 		.enable_reg = 0x7a004,
2586 		.enable_mask = BIT(0),
2587 		.hw.init = &(struct clk_init_data){
2588 			.name = "gcc_vddcx_vs_clk",
2589 			.parent_hws = (const struct clk_hw*[]){
2590 				&gcc_vsensor_clk_src.clkr.hw,
2591 			},
2592 			.num_parents = 1,
2593 			.flags = CLK_SET_RATE_PARENT,
2594 			.ops = &clk_branch2_ops,
2595 		},
2596 	},
2597 };
2598 
2599 static struct clk_branch gcc_vddmx_vs_clk = {
2600 	.halt_reg = 0x7a008,
2601 	.halt_check = BRANCH_HALT,
2602 	.clkr = {
2603 		.enable_reg = 0x7a008,
2604 		.enable_mask = BIT(0),
2605 		.hw.init = &(struct clk_init_data){
2606 			.name = "gcc_vddmx_vs_clk",
2607 			.parent_hws = (const struct clk_hw*[]){
2608 				&gcc_vsensor_clk_src.clkr.hw,
2609 			},
2610 			.num_parents = 1,
2611 			.flags = CLK_SET_RATE_PARENT,
2612 			.ops = &clk_branch2_ops,
2613 		},
2614 	},
2615 };
2616 
2617 
2618 static struct clk_branch gcc_video_axi_clk = {
2619 	.halt_reg = 0xb01c,
2620 	.halt_check = BRANCH_HALT,
2621 	.clkr = {
2622 		.enable_reg = 0xb01c,
2623 		.enable_mask = BIT(0),
2624 		.hw.init = &(struct clk_init_data){
2625 			.name = "gcc_video_axi_clk",
2626 			.ops = &clk_branch2_ops,
2627 		},
2628 	},
2629 };
2630 
2631 static struct clk_branch gcc_vs_ctrl_ahb_clk = {
2632 	.halt_reg = 0x7a014,
2633 	.halt_check = BRANCH_HALT,
2634 	.hwcg_reg = 0x7a014,
2635 	.hwcg_bit = 1,
2636 	.clkr = {
2637 		.enable_reg = 0x7a014,
2638 		.enable_mask = BIT(0),
2639 		.hw.init = &(struct clk_init_data){
2640 			.name = "gcc_vs_ctrl_ahb_clk",
2641 			.ops = &clk_branch2_ops,
2642 		},
2643 	},
2644 };
2645 
2646 static struct clk_branch gcc_vs_ctrl_clk = {
2647 	.halt_reg = 0x7a010,
2648 	.halt_check = BRANCH_HALT,
2649 	.clkr = {
2650 		.enable_reg = 0x7a010,
2651 		.enable_mask = BIT(0),
2652 		.hw.init = &(struct clk_init_data){
2653 			.name = "gcc_vs_ctrl_clk",
2654 			.parent_hws = (const struct clk_hw*[]){
2655 				&gcc_vs_ctrl_clk_src.clkr.hw,
2656 			},
2657 			.num_parents = 1,
2658 			.flags = CLK_SET_RATE_PARENT,
2659 			.ops = &clk_branch2_ops,
2660 		},
2661 	},
2662 };
2663 
2664 static struct gdsc pcie_0_gdsc = {
2665 	.gdscr = 0x6b004,
2666 	.pd = {
2667 		.name = "pcie_0_gdsc",
2668 	},
2669 	.pwrsts = PWRSTS_OFF_ON,
2670 };
2671 
2672 static struct gdsc ufs_phy_gdsc = {
2673 	.gdscr = 0x77004,
2674 	.pd = {
2675 		.name = "ufs_phy_gdsc",
2676 	},
2677 	.pwrsts = PWRSTS_OFF_ON,
2678 };
2679 
2680 static struct gdsc usb30_prim_gdsc = {
2681 	.gdscr = 0xf004,
2682 	.pd = {
2683 		.name = "usb30_prim_gdsc",
2684 	},
2685 	.pwrsts = PWRSTS_OFF_ON,
2686 };
2687 
2688 static struct gdsc hlos1_vote_aggre_noc_mmu_audio_tbu_gdsc = {
2689 	.gdscr = 0x7d030,
2690 	.pd = {
2691 		.name = "hlos1_vote_aggre_noc_mmu_audio_tbu_gdsc",
2692 	},
2693 	.pwrsts = PWRSTS_OFF_ON,
2694 	.flags = VOTABLE,
2695 };
2696 
2697 static struct gdsc hlos1_vote_aggre_noc_mmu_pcie_tbu_gdsc = {
2698 	.gdscr = 0x7d03c,
2699 	.pd = {
2700 		.name = "hlos1_vote_aggre_noc_mmu_pcie_tbu_gdsc",
2701 	},
2702 	.pwrsts = PWRSTS_OFF_ON,
2703 	.flags = VOTABLE,
2704 };
2705 
2706 static struct gdsc hlos1_vote_aggre_noc_mmu_tbu1_gdsc = {
2707 	.gdscr = 0x7d034,
2708 	.pd = {
2709 		.name = "hlos1_vote_aggre_noc_mmu_tbu1_gdsc",
2710 	},
2711 	.pwrsts = PWRSTS_OFF_ON,
2712 	.flags = VOTABLE,
2713 };
2714 
2715 static struct gdsc hlos1_vote_aggre_noc_mmu_tbu2_gdsc = {
2716 	.gdscr = 0x7d038,
2717 	.pd = {
2718 		.name = "hlos1_vote_aggre_noc_mmu_tbu2_gdsc",
2719 	},
2720 	.pwrsts = PWRSTS_OFF_ON,
2721 	.flags = VOTABLE,
2722 };
2723 
2724 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc = {
2725 	.gdscr = 0x7d040,
2726 	.pd = {
2727 		.name = "hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc",
2728 	},
2729 	.pwrsts = PWRSTS_OFF_ON,
2730 	.flags = VOTABLE,
2731 };
2732 
2733 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc = {
2734 	.gdscr = 0x7d048,
2735 	.pd = {
2736 		.name = "hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc",
2737 	},
2738 	.pwrsts = PWRSTS_OFF_ON,
2739 	.flags = VOTABLE,
2740 };
2741 
2742 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_sf_gdsc = {
2743 	.gdscr = 0x7d044,
2744 	.pd = {
2745 		.name = "hlos1_vote_mmnoc_mmu_tbu_sf_gdsc",
2746 	},
2747 	.pwrsts = PWRSTS_OFF_ON,
2748 	.flags = VOTABLE,
2749 };
2750 
2751 static struct clk_hw *gcc_sm7150_hws[] = {
2752 	[GCC_GPLL0_MAIN_DIV_CDIV] = &gcc_pll0_main_div_cdiv.hw,
2753 };
2754 
2755 static struct clk_regmap *gcc_sm7150_clocks[] = {
2756 	[GCC_AGGRE_NOC_PCIE_TBU_CLK] = &gcc_aggre_noc_pcie_tbu_clk.clkr,
2757 	[GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
2758 	[GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] =
2759 		&gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr,
2760 	[GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
2761 	[GCC_APC_VS_CLK] = &gcc_apc_vs_clk.clkr,
2762 	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2763 	[GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,
2764 	[GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr,
2765 	[GCC_CE1_AHB_CLK] = &gcc_ce1_ahb_clk.clkr,
2766 	[GCC_CE1_AXI_CLK] = &gcc_ce1_axi_clk.clkr,
2767 	[GCC_CE1_CLK] = &gcc_ce1_clk.clkr,
2768 	[GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
2769 	[GCC_CPUSS_AHB_CLK] = &gcc_cpuss_ahb_clk.clkr,
2770 	[GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr,
2771 	[GCC_CPUSS_RBCPR_CLK] = &gcc_cpuss_rbcpr_clk.clkr,
2772 	[GCC_CPUSS_RBCPR_CLK_SRC] = &gcc_cpuss_rbcpr_clk_src.clkr,
2773 	[GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
2774 	[GCC_DISP_GPLL0_CLK_SRC] = &gcc_disp_gpll0_clk_src.clkr,
2775 	[GCC_DISP_GPLL0_DIV_CLK_SRC] = &gcc_disp_gpll0_div_clk_src.clkr,
2776 	[GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
2777 	[GCC_DISP_SF_AXI_CLK] = &gcc_disp_sf_axi_clk.clkr,
2778 	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2779 	[GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
2780 	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2781 	[GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
2782 	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2783 	[GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
2784 	[GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
2785 	[GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
2786 	[GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
2787 	[GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
2788 	[GCC_GPU_VS_CLK] = &gcc_gpu_vs_clk.clkr,
2789 	[GCC_NPU_AXI_CLK] = &gcc_npu_axi_clk.clkr,
2790 	[GCC_NPU_CFG_AHB_CLK] = &gcc_npu_cfg_ahb_clk.clkr,
2791 	[GCC_NPU_GPLL0_CLK_SRC] = &gcc_npu_gpll0_clk_src.clkr,
2792 	[GCC_NPU_GPLL0_DIV_CLK_SRC] = &gcc_npu_gpll0_div_clk_src.clkr,
2793 	[GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
2794 	[GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
2795 	[GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
2796 	[GCC_PCIE_0_CLKREF_CLK] = &gcc_pcie_0_clkref_clk.clkr,
2797 	[GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
2798 	[GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
2799 	[GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
2800 	[GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
2801 	[GCC_PCIE_PHY_AUX_CLK] = &gcc_pcie_phy_aux_clk.clkr,
2802 	[GCC_PCIE_PHY_REFGEN_CLK] = &gcc_pcie_phy_refgen_clk.clkr,
2803 	[GCC_PCIE_PHY_REFGEN_CLK_SRC] = &gcc_pcie_phy_refgen_clk_src.clkr,
2804 	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2805 	[GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
2806 	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2807 	[GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
2808 	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
2809 	[GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
2810 	[GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
2811 	[GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
2812 	[GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
2813 	[GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
2814 	[GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
2815 	[GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
2816 	[GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
2817 	[GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
2818 	[GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
2819 	[GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
2820 	[GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
2821 	[GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
2822 	[GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
2823 	[GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr,
2824 	[GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr,
2825 	[GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr,
2826 	[GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr,
2827 	[GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
2828 	[GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
2829 	[GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
2830 	[GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
2831 	[GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
2832 	[GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
2833 	[GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
2834 	[GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
2835 	[GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
2836 	[GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
2837 	[GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
2838 	[GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
2839 	[GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
2840 	[GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
2841 	[GCC_QUPV3_WRAP1_S6_CLK] = &gcc_qupv3_wrap1_s6_clk.clkr,
2842 	[GCC_QUPV3_WRAP1_S6_CLK_SRC] = &gcc_qupv3_wrap1_s6_clk_src.clkr,
2843 	[GCC_QUPV3_WRAP1_S7_CLK] = &gcc_qupv3_wrap1_s7_clk.clkr,
2844 	[GCC_QUPV3_WRAP1_S7_CLK_SRC] = &gcc_qupv3_wrap1_s7_clk_src.clkr,
2845 	[GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
2846 	[GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
2847 	[GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
2848 	[GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
2849 	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2850 	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2851 	[GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,
2852 	[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
2853 	[GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr,
2854 	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2855 	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2856 	[GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
2857 	[GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
2858 	[GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
2859 	[GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr,
2860 	[GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,
2861 	[GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr,
2862 	[GCC_TSIF_INACTIVITY_TIMERS_CLK] = &gcc_tsif_inactivity_timers_clk.clkr,
2863 	[GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
2864 	[GCC_TSIF_REF_CLK_SRC] = &gcc_tsif_ref_clk_src.clkr,
2865 	[GCC_UFS_MEM_CLKREF_CLK] = &gcc_ufs_mem_clkref_clk.clkr,
2866 	[GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
2867 	[GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
2868 	[GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
2869 	[GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr,
2870 	[GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
2871 	[GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
2872 	[GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] =
2873 		&gcc_ufs_phy_ice_core_hw_ctl_clk.clkr,
2874 	[GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
2875 	[GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
2876 	[GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr,
2877 	[GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
2878 	[GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
2879 	[GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
2880 	[GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] =
2881 		&gcc_ufs_phy_unipro_core_clk_src.clkr,
2882 	[GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] =
2883 		&gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr,
2884 	[GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
2885 	[GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
2886 	[GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
2887 	[GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] =
2888 		&gcc_usb30_prim_mock_utmi_clk_src.clkr,
2889 	[GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
2890 	[GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,
2891 	[GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
2892 	[GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
2893 	[GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
2894 	[GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
2895 	[GCC_USB_PHY_CFG_AHB2PHY_CLK] = &gcc_usb_phy_cfg_ahb2phy_clk.clkr,
2896 	[GCC_VDDA_VS_CLK] = &gcc_vdda_vs_clk.clkr,
2897 	[GCC_VDDCX_VS_CLK] = &gcc_vddcx_vs_clk.clkr,
2898 	[GCC_VDDMX_VS_CLK] = &gcc_vddmx_vs_clk.clkr,
2899 	[GCC_VIDEO_AXI_CLK] = &gcc_video_axi_clk.clkr,
2900 	[GCC_VS_CTRL_AHB_CLK] = &gcc_vs_ctrl_ahb_clk.clkr,
2901 	[GCC_VS_CTRL_CLK] = &gcc_vs_ctrl_clk.clkr,
2902 	[GCC_VS_CTRL_CLK_SRC] = &gcc_vs_ctrl_clk_src.clkr,
2903 	[GCC_VSENSOR_CLK_SRC] = &gcc_vsensor_clk_src.clkr,
2904 	[GPLL0] = &gpll0.clkr,
2905 	[GPLL0_OUT_EVEN] = &gpll0_out_even.clkr,
2906 	[GPLL6] = &gpll6.clkr,
2907 	[GPLL7] = &gpll7.clkr,
2908 };
2909 
2910 static const struct qcom_reset_map gcc_sm7150_resets[] = {
2911 	[GCC_PCIE_0_BCR] = { 0x6b000 },
2912 	[GCC_PCIE_PHY_BCR] = { 0x6f000 },
2913 	[GCC_PCIE_PHY_COM_BCR] = { 0x6f010 },
2914 	[GCC_UFS_PHY_BCR] = { 0x77000 },
2915 	[GCC_USB30_PRIM_BCR] = { 0xf000 },
2916 	[GCC_USB3_DP_PHY_PRIM_BCR] = { 0x50008 },
2917 	[GCC_USB3_DP_PHY_SEC_BCR] = { 0x50014 },
2918 	[GCC_USB3_PHY_PRIM_BCR] = { 0x50000 },
2919 	[GCC_USB3_PHY_SEC_BCR] = { 0x5000c },
2920 	[GCC_QUSB2PHY_PRIM_BCR] = { 0x26000 },
2921 	[GCC_VIDEO_AXI_CLK_BCR] = { 0xb01c, 2 },
2922 };
2923 
2924 static const struct clk_rcg_dfs_data gcc_sm7150_dfs_desc[] = {
2925 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
2926 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
2927 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
2928 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
2929 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
2930 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
2931 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s6_clk_src),
2932 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s7_clk_src),
2933 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
2934 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
2935 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),
2936 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
2937 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
2938 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
2939 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src),
2940 	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s7_clk_src),
2941 };
2942 
2943 static struct gdsc *gcc_sm7150_gdscs[] = {
2944 	[PCIE_0_GDSC] = &pcie_0_gdsc,
2945 	[UFS_PHY_GDSC] = &ufs_phy_gdsc,
2946 	[USB30_PRIM_GDSC] = &usb30_prim_gdsc,
2947 	[HLOS1_VOTE_AGGRE_NOC_MMU_AUDIO_TBU_GDSC] =
2948 			&hlos1_vote_aggre_noc_mmu_audio_tbu_gdsc,
2949 	[HLOS1_VOTE_AGGRE_NOC_MMU_PCIE_TBU_GDSC] =
2950 			&hlos1_vote_aggre_noc_mmu_pcie_tbu_gdsc,
2951 	[HLOS1_VOTE_AGGRE_NOC_MMU_TBU1_GDSC] =
2952 			&hlos1_vote_aggre_noc_mmu_tbu1_gdsc,
2953 	[HLOS1_VOTE_AGGRE_NOC_MMU_TBU2_GDSC] =
2954 			&hlos1_vote_aggre_noc_mmu_tbu2_gdsc,
2955 	[HLOS1_VOTE_MMNOC_MMU_TBU_HF0_GDSC] =
2956 			&hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc,
2957 	[HLOS1_VOTE_MMNOC_MMU_TBU_HF1_GDSC] =
2958 			&hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc,
2959 	[HLOS1_VOTE_MMNOC_MMU_TBU_SF_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_sf_gdsc,
2960 };
2961 
2962 static const struct regmap_config gcc_sm7150_regmap_config = {
2963 	.reg_bits	= 32,
2964 	.reg_stride	= 4,
2965 	.val_bits	= 32,
2966 	.max_register	= 0x1820b0,
2967 	.fast_io	= true,
2968 };
2969 
2970 static const struct qcom_cc_desc gcc_sm7150_desc = {
2971 	.config = &gcc_sm7150_regmap_config,
2972 	.clk_hws = gcc_sm7150_hws,
2973 	.num_clk_hws = ARRAY_SIZE(gcc_sm7150_hws),
2974 	.clks = gcc_sm7150_clocks,
2975 	.num_clks = ARRAY_SIZE(gcc_sm7150_clocks),
2976 	.resets = gcc_sm7150_resets,
2977 	.num_resets = ARRAY_SIZE(gcc_sm7150_resets),
2978 	.gdscs = gcc_sm7150_gdscs,
2979 	.num_gdscs = ARRAY_SIZE(gcc_sm7150_gdscs),
2980 };
2981 
2982 static const struct of_device_id gcc_sm7150_match_table[] = {
2983 	{ .compatible = "qcom,sm7150-gcc" },
2984 	{ }
2985 };
2986 MODULE_DEVICE_TABLE(of, gcc_sm7150_match_table);
2987 
2988 static int gcc_sm7150_probe(struct platform_device *pdev)
2989 {
2990 	struct regmap *regmap;
2991 	int ret;
2992 
2993 	regmap = qcom_cc_map(pdev, &gcc_sm7150_desc);
2994 	if (IS_ERR(regmap))
2995 		return PTR_ERR(regmap);
2996 
2997 	/*
2998 	 * Disable the GPLL0 active input to MM blocks, NPU
2999 	 * and GPU via MISC registers.
3000 	 */
3001 	regmap_update_bits(regmap, 0x09ffc, 0x3, 0x3);
3002 	regmap_update_bits(regmap, 0x4d110, 0x3, 0x3);
3003 	regmap_update_bits(regmap, 0x71028, 0x3, 0x3);
3004 
3005 	/*
3006 	 * Keep the critical clocks always-ON
3007 	 * GCC_CPUSS_GNOC_CLK, GCC_VIDEO_AHB_CLK, GCC_CAMERA_AHB_CLK,
3008 	 * GCC_DISP_AHB_CLK, GCC_CAMERA_XO_CLK, GCC_VIDEO_XO_CLK,
3009 	 * GCC_DISP_XO_CLK, GCC_GPU_CFG_AHB_CLK
3010 	 */
3011 	regmap_update_bits(regmap, 0x48004, BIT(0), BIT(0));
3012 	regmap_update_bits(regmap, 0x0b004, BIT(0), BIT(0));
3013 	regmap_update_bits(regmap, 0x0b008, BIT(0), BIT(0));
3014 	regmap_update_bits(regmap, 0x0b00c, BIT(0), BIT(0));
3015 	regmap_update_bits(regmap, 0x0b02c, BIT(0), BIT(0));
3016 	regmap_update_bits(regmap, 0x0b028, BIT(0), BIT(0));
3017 	regmap_update_bits(regmap, 0x0b030, BIT(0), BIT(0));
3018 	regmap_update_bits(regmap, 0x71004, BIT(0), BIT(0));
3019 
3020 	ret = qcom_cc_register_rcg_dfs(regmap, gcc_sm7150_dfs_desc,
3021 					ARRAY_SIZE(gcc_sm7150_dfs_desc));
3022 	if (ret)
3023 		return ret;
3024 
3025 	return qcom_cc_really_probe(pdev, &gcc_sm7150_desc, regmap);
3026 }
3027 
3028 static struct platform_driver gcc_sm7150_driver = {
3029 	.probe = gcc_sm7150_probe,
3030 	.driver = {
3031 		.name = "gcc-sm7150",
3032 		.of_match_table = gcc_sm7150_match_table,
3033 	},
3034 };
3035 
3036 static int __init gcc_sm7150_init(void)
3037 {
3038 	return platform_driver_register(&gcc_sm7150_driver);
3039 }
3040 subsys_initcall(gcc_sm7150_init);
3041 
3042 static void __exit gcc_sm7150_exit(void)
3043 {
3044 	platform_driver_unregister(&gcc_sm7150_driver);
3045 }
3046 module_exit(gcc_sm7150_exit);
3047 
3048 MODULE_DESCRIPTION("Qualcomm SM7150 Global Clock Controller");
3049 MODULE_LICENSE("GPL");
3050