xref: /openbmc/linux/drivers/clk/qcom/gcc-sm8150.c (revision f80be457)
1 // SPDX-License-Identifier: GPL-2.0
2 // Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
3 
4 #include <linux/kernel.h>
5 #include <linux/bitops.h>
6 #include <linux/err.h>
7 #include <linux/platform_device.h>
8 #include <linux/module.h>
9 #include <linux/of.h>
10 #include <linux/of_device.h>
11 #include <linux/clk-provider.h>
12 #include <linux/regmap.h>
13 #include <linux/reset-controller.h>
14 
15 #include <dt-bindings/clock/qcom,gcc-sm8150.h>
16 
17 #include "common.h"
18 #include "clk-alpha-pll.h"
19 #include "clk-branch.h"
20 #include "clk-pll.h"
21 #include "clk-rcg.h"
22 #include "clk-regmap.h"
23 #include "reset.h"
24 #include "gdsc.h"
25 
26 enum {
27 	P_BI_TCXO,
28 	P_AUD_REF_CLK,
29 	P_CORE_BI_PLL_TEST_SE,
30 	P_GPLL0_OUT_EVEN,
31 	P_GPLL0_OUT_MAIN,
32 	P_GPLL7_OUT_MAIN,
33 	P_GPLL9_OUT_MAIN,
34 	P_SLEEP_CLK,
35 };
36 
37 static struct clk_alpha_pll gpll0 = {
38 	.offset = 0x0,
39 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
40 	.clkr = {
41 		.enable_reg = 0x52000,
42 		.enable_mask = BIT(0),
43 		.hw.init = &(struct clk_init_data){
44 			.name = "gpll0",
45 			.parent_data = &(const struct clk_parent_data){
46 				.fw_name = "bi_tcxo",
47 				.name = "bi_tcxo",
48 			},
49 			.num_parents = 1,
50 			.ops = &clk_alpha_pll_fixed_trion_ops,
51 		},
52 	},
53 };
54 
55 static const struct clk_div_table post_div_table_trion_even[] = {
56 	{ 0x0, 1 },
57 	{ 0x1, 2 },
58 	{ 0x3, 4 },
59 	{ 0x7, 8 },
60 	{ }
61 };
62 
63 static struct clk_alpha_pll_postdiv gpll0_out_even = {
64 	.offset = 0x0,
65 	.post_div_shift = 8,
66 	.post_div_table = post_div_table_trion_even,
67 	.num_post_div = ARRAY_SIZE(post_div_table_trion_even),
68 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
69 	.width = 4,
70 	.clkr.hw.init = &(struct clk_init_data){
71 		.name = "gpll0_out_even",
72 		.parent_hws = (const struct clk_hw*[]){
73 			&gpll0.clkr.hw,
74 		},
75 		.num_parents = 1,
76 		.ops = &clk_alpha_pll_postdiv_trion_ops,
77 	},
78 };
79 
80 static struct clk_alpha_pll gpll7 = {
81 	.offset = 0x1a000,
82 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
83 	.clkr = {
84 		.enable_reg = 0x52000,
85 		.enable_mask = BIT(7),
86 		.hw.init = &(struct clk_init_data){
87 			.name = "gpll7",
88 			.parent_data = &(const struct clk_parent_data){
89 				.fw_name = "bi_tcxo",
90 				.name = "bi_tcxo",
91 			},
92 			.num_parents = 1,
93 			.ops = &clk_alpha_pll_fixed_trion_ops,
94 		},
95 	},
96 };
97 
98 static struct clk_alpha_pll gpll9 = {
99 	.offset = 0x1c000,
100 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
101 	.clkr = {
102 		.enable_reg = 0x52000,
103 		.enable_mask = BIT(9),
104 		.hw.init = &(struct clk_init_data){
105 			.name = "gpll9",
106 			.parent_data = &(const struct clk_parent_data){
107 				.fw_name = "bi_tcxo",
108 				.name = "bi_tcxo",
109 			},
110 			.num_parents = 1,
111 			.ops = &clk_alpha_pll_fixed_trion_ops,
112 		},
113 	},
114 };
115 
116 static const struct parent_map gcc_parent_map_0[] = {
117 	{ P_BI_TCXO, 0 },
118 	{ P_GPLL0_OUT_MAIN, 1 },
119 	{ P_GPLL0_OUT_EVEN, 6 },
120 	{ P_CORE_BI_PLL_TEST_SE, 7 },
121 };
122 
123 static const struct clk_parent_data gcc_parents_0[] = {
124 	{ .fw_name = "bi_tcxo", .name = "bi_tcxo" },
125 	{ .hw = &gpll0.clkr.hw },
126 	{ .hw = &gpll0_out_even.clkr.hw },
127 	{ .fw_name = "core_bi_pll_test_se" },
128 };
129 
130 static const struct parent_map gcc_parent_map_1[] = {
131 	{ P_BI_TCXO, 0 },
132 	{ P_GPLL0_OUT_MAIN, 1 },
133 	{ P_SLEEP_CLK, 5 },
134 	{ P_GPLL0_OUT_EVEN, 6 },
135 	{ P_CORE_BI_PLL_TEST_SE, 7 },
136 };
137 
138 static const struct clk_parent_data gcc_parents_1[] = {
139 	{ .fw_name = "bi_tcxo", .name = "bi_tcxo" },
140 	{ .hw = &gpll0.clkr.hw },
141 	{ .fw_name = "sleep_clk", .name = "sleep_clk" },
142 	{ .hw = &gpll0_out_even.clkr.hw },
143 	{ .fw_name = "core_bi_pll_test_se" },
144 };
145 
146 static const struct parent_map gcc_parent_map_2[] = {
147 	{ P_BI_TCXO, 0 },
148 	{ P_SLEEP_CLK, 5 },
149 	{ P_CORE_BI_PLL_TEST_SE, 7 },
150 };
151 
152 static const struct clk_parent_data gcc_parents_2[] = {
153 	{ .fw_name = "bi_tcxo", .name = "bi_tcxo" },
154 	{ .fw_name = "sleep_clk", .name = "sleep_clk" },
155 	{ .fw_name = "core_bi_pll_test_se" },
156 };
157 
158 static const struct parent_map gcc_parent_map_3[] = {
159 	{ P_BI_TCXO, 0 },
160 	{ P_GPLL0_OUT_MAIN, 1 },
161 	{ P_CORE_BI_PLL_TEST_SE, 7 },
162 };
163 
164 static const struct clk_parent_data gcc_parents_3[] = {
165 	{ .fw_name = "bi_tcxo", .name = "bi_tcxo" },
166 	{ .hw = &gpll0.clkr.hw },
167 	{ .fw_name = "core_bi_pll_test_se"},
168 };
169 
170 static const struct parent_map gcc_parent_map_4[] = {
171 	{ P_BI_TCXO, 0 },
172 	{ P_CORE_BI_PLL_TEST_SE, 7 },
173 };
174 
175 static const struct clk_parent_data gcc_parents_4[] = {
176 	{ .fw_name = "bi_tcxo", .name = "bi_tcxo" },
177 	{ .fw_name = "core_bi_pll_test_se" },
178 };
179 
180 static const struct parent_map gcc_parent_map_5[] = {
181 	{ P_BI_TCXO, 0 },
182 	{ P_GPLL0_OUT_MAIN, 1 },
183 	{ P_GPLL7_OUT_MAIN, 3 },
184 	{ P_GPLL0_OUT_EVEN, 6 },
185 	{ P_CORE_BI_PLL_TEST_SE, 7 },
186 };
187 
188 static const struct clk_parent_data gcc_parents_5[] = {
189 	{ .fw_name = "bi_tcxo", .name = "bi_tcxo" },
190 	{ .hw = &gpll0.clkr.hw },
191 	{ .hw = &gpll7.clkr.hw },
192 	{ .hw = &gpll0_out_even.clkr.hw },
193 	{ .fw_name = "core_bi_pll_test_se" },
194 };
195 
196 static const struct parent_map gcc_parent_map_6[] = {
197 	{ P_BI_TCXO, 0 },
198 	{ P_GPLL0_OUT_MAIN, 1 },
199 	{ P_GPLL9_OUT_MAIN, 2 },
200 	{ P_GPLL0_OUT_EVEN, 6 },
201 	{ P_CORE_BI_PLL_TEST_SE, 7 },
202 };
203 
204 static const struct clk_parent_data gcc_parents_6[] = {
205 	{ .fw_name = "bi_tcxo", .name = "bi_tcxo" },
206 	{ .hw = &gpll0.clkr.hw },
207 	{ .hw = &gpll9.clkr.hw },
208 	{ .hw = &gpll0_out_even.clkr.hw },
209 	{ .fw_name = "core_bi_pll_test_se" },
210 };
211 
212 static const struct parent_map gcc_parent_map_7[] = {
213 	{ P_BI_TCXO, 0 },
214 	{ P_GPLL0_OUT_MAIN, 1 },
215 	{ P_AUD_REF_CLK, 2 },
216 	{ P_GPLL0_OUT_EVEN, 6 },
217 	{ P_CORE_BI_PLL_TEST_SE, 7 },
218 };
219 
220 static const struct clk_parent_data gcc_parents_7[] = {
221 	{ .fw_name = "bi_tcxo", .name = "bi_tcxo" },
222 	{ .hw = &gpll0.clkr.hw },
223 	{ .fw_name = "aud_ref_clk", .name = "aud_ref_clk" },
224 	{ .hw = &gpll0_out_even.clkr.hw },
225 	{ .fw_name = "core_bi_pll_test_se" },
226 };
227 
228 static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src[] = {
229 	F(19200000, P_BI_TCXO, 1, 0, 0),
230 	F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
231 	F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
232 	{ }
233 };
234 
235 static struct clk_rcg2 gcc_cpuss_ahb_clk_src = {
236 	.cmd_rcgr = 0x48014,
237 	.mnd_width = 0,
238 	.hid_width = 5,
239 	.parent_map = gcc_parent_map_0,
240 	.freq_tbl = ftbl_gcc_cpuss_ahb_clk_src,
241 	.clkr.hw.init = &(struct clk_init_data){
242 		.name = "gcc_cpuss_ahb_clk_src",
243 		.parent_data = gcc_parents_0,
244 		.num_parents = ARRAY_SIZE(gcc_parents_0),
245 		.flags = CLK_SET_RATE_PARENT,
246 		.ops = &clk_rcg2_ops,
247 	},
248 };
249 
250 static const struct freq_tbl ftbl_gcc_emac_ptp_clk_src[] = {
251 	F(19200000, P_BI_TCXO, 1, 0, 0),
252 	F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
253 	F(125000000, P_GPLL7_OUT_MAIN, 4, 0, 0),
254 	F(250000000, P_GPLL7_OUT_MAIN, 2, 0, 0),
255 	{ }
256 };
257 
258 static struct clk_rcg2 gcc_emac_ptp_clk_src = {
259 	.cmd_rcgr = 0x6038,
260 	.mnd_width = 0,
261 	.hid_width = 5,
262 	.parent_map = gcc_parent_map_5,
263 	.freq_tbl = ftbl_gcc_emac_ptp_clk_src,
264 	.clkr.hw.init = &(struct clk_init_data){
265 		.name = "gcc_emac_ptp_clk_src",
266 		.parent_data = gcc_parents_5,
267 		.num_parents = ARRAY_SIZE(gcc_parents_5),
268 		.flags = CLK_SET_RATE_PARENT,
269 		.ops = &clk_rcg2_ops,
270 	},
271 };
272 
273 static const struct freq_tbl ftbl_gcc_emac_rgmii_clk_src[] = {
274 	F(2500000, P_BI_TCXO, 1, 25, 192),
275 	F(5000000, P_BI_TCXO, 1, 25, 96),
276 	F(19200000, P_BI_TCXO, 1, 0, 0),
277 	F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
278 	F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
279 	F(125000000, P_GPLL7_OUT_MAIN, 4, 0, 0),
280 	F(250000000, P_GPLL7_OUT_MAIN, 2, 0, 0),
281 	{ }
282 };
283 
284 static struct clk_rcg2 gcc_emac_rgmii_clk_src = {
285 	.cmd_rcgr = 0x601c,
286 	.mnd_width = 8,
287 	.hid_width = 5,
288 	.parent_map = gcc_parent_map_5,
289 	.freq_tbl = ftbl_gcc_emac_rgmii_clk_src,
290 	.clkr.hw.init = &(struct clk_init_data){
291 		.name = "gcc_emac_rgmii_clk_src",
292 		.parent_data = gcc_parents_5,
293 		.num_parents = ARRAY_SIZE(gcc_parents_5),
294 		.flags = CLK_SET_RATE_PARENT,
295 		.ops = &clk_rcg2_ops,
296 	},
297 };
298 
299 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
300 	F(19200000, P_BI_TCXO, 1, 0, 0),
301 	F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
302 	F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
303 	F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
304 	F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
305 	{ }
306 };
307 
308 static struct clk_rcg2 gcc_gp1_clk_src = {
309 	.cmd_rcgr = 0x64004,
310 	.mnd_width = 8,
311 	.hid_width = 5,
312 	.parent_map = gcc_parent_map_1,
313 	.freq_tbl = ftbl_gcc_gp1_clk_src,
314 	.clkr.hw.init = &(struct clk_init_data){
315 		.name = "gcc_gp1_clk_src",
316 		.parent_data = gcc_parents_1,
317 		.num_parents = ARRAY_SIZE(gcc_parents_1),
318 		.flags = CLK_SET_RATE_PARENT,
319 		.ops = &clk_rcg2_ops,
320 	},
321 };
322 
323 static struct clk_rcg2 gcc_gp2_clk_src = {
324 	.cmd_rcgr = 0x65004,
325 	.mnd_width = 8,
326 	.hid_width = 5,
327 	.parent_map = gcc_parent_map_1,
328 	.freq_tbl = ftbl_gcc_gp1_clk_src,
329 	.clkr.hw.init = &(struct clk_init_data){
330 		.name = "gcc_gp2_clk_src",
331 		.parent_data = gcc_parents_1,
332 		.num_parents = ARRAY_SIZE(gcc_parents_1),
333 		.flags = CLK_SET_RATE_PARENT,
334 		.ops = &clk_rcg2_ops,
335 	},
336 };
337 
338 static struct clk_rcg2 gcc_gp3_clk_src = {
339 	.cmd_rcgr = 0x66004,
340 	.mnd_width = 8,
341 	.hid_width = 5,
342 	.parent_map = gcc_parent_map_1,
343 	.freq_tbl = ftbl_gcc_gp1_clk_src,
344 	.clkr.hw.init = &(struct clk_init_data){
345 		.name = "gcc_gp3_clk_src",
346 		.parent_data = gcc_parents_1,
347 		.num_parents = ARRAY_SIZE(gcc_parents_1),
348 		.flags = CLK_SET_RATE_PARENT,
349 		.ops = &clk_rcg2_ops,
350 	},
351 };
352 
353 static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
354 	F(9600000, P_BI_TCXO, 2, 0, 0),
355 	F(19200000, P_BI_TCXO, 1, 0, 0),
356 	{ }
357 };
358 
359 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
360 	.cmd_rcgr = 0x6b02c,
361 	.mnd_width = 16,
362 	.hid_width = 5,
363 	.parent_map = gcc_parent_map_2,
364 	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
365 	.clkr.hw.init = &(struct clk_init_data){
366 		.name = "gcc_pcie_0_aux_clk_src",
367 		.parent_data = gcc_parents_2,
368 		.num_parents = ARRAY_SIZE(gcc_parents_2),
369 		.flags = CLK_SET_RATE_PARENT,
370 		.ops = &clk_rcg2_ops,
371 	},
372 };
373 
374 static struct clk_rcg2 gcc_pcie_1_aux_clk_src = {
375 	.cmd_rcgr = 0x8d02c,
376 	.mnd_width = 16,
377 	.hid_width = 5,
378 	.parent_map = gcc_parent_map_2,
379 	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
380 	.clkr.hw.init = &(struct clk_init_data){
381 		.name = "gcc_pcie_1_aux_clk_src",
382 		.parent_data = gcc_parents_2,
383 		.num_parents = ARRAY_SIZE(gcc_parents_2),
384 		.flags = CLK_SET_RATE_PARENT,
385 		.ops = &clk_rcg2_ops,
386 	},
387 };
388 
389 static const struct freq_tbl ftbl_gcc_pcie_phy_refgen_clk_src[] = {
390 	F(19200000, P_BI_TCXO, 1, 0, 0),
391 	F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
392 	{ }
393 };
394 
395 static struct clk_rcg2 gcc_pcie_phy_refgen_clk_src = {
396 	.cmd_rcgr = 0x6f014,
397 	.mnd_width = 0,
398 	.hid_width = 5,
399 	.parent_map = gcc_parent_map_0,
400 	.freq_tbl = ftbl_gcc_pcie_phy_refgen_clk_src,
401 	.clkr.hw.init = &(struct clk_init_data){
402 		.name = "gcc_pcie_phy_refgen_clk_src",
403 		.parent_data = gcc_parents_0,
404 		.num_parents = ARRAY_SIZE(gcc_parents_0),
405 		.flags = CLK_SET_RATE_PARENT,
406 		.ops = &clk_rcg2_ops,
407 	},
408 };
409 
410 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
411 	F(9600000, P_BI_TCXO, 2, 0, 0),
412 	F(19200000, P_BI_TCXO, 1, 0, 0),
413 	F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
414 	{ }
415 };
416 
417 static struct clk_rcg2 gcc_pdm2_clk_src = {
418 	.cmd_rcgr = 0x33010,
419 	.mnd_width = 0,
420 	.hid_width = 5,
421 	.parent_map = gcc_parent_map_0,
422 	.freq_tbl = ftbl_gcc_pdm2_clk_src,
423 	.clkr.hw.init = &(struct clk_init_data){
424 		.name = "gcc_pdm2_clk_src",
425 		.parent_data = gcc_parents_0,
426 		.num_parents = ARRAY_SIZE(gcc_parents_0),
427 		.flags = CLK_SET_RATE_PARENT,
428 		.ops = &clk_rcg2_ops,
429 	},
430 };
431 
432 static const struct freq_tbl ftbl_gcc_qspi_core_clk_src[] = {
433 	F(19200000, P_BI_TCXO, 1, 0, 0),
434 	F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
435 	F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
436 	F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
437 	{ }
438 };
439 
440 static struct clk_rcg2 gcc_qspi_core_clk_src = {
441 	.cmd_rcgr = 0x4b008,
442 	.mnd_width = 0,
443 	.hid_width = 5,
444 	.parent_map = gcc_parent_map_0,
445 	.freq_tbl = ftbl_gcc_qspi_core_clk_src,
446 	.clkr.hw.init = &(struct clk_init_data){
447 		.name = "gcc_qspi_core_clk_src",
448 		.parent_data = gcc_parents_0,
449 		.num_parents = ARRAY_SIZE(gcc_parents_0),
450 		.flags = CLK_SET_RATE_PARENT,
451 		.ops = &clk_rcg2_ops,
452 	},
453 };
454 
455 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
456 	F(7372800, P_GPLL0_OUT_EVEN, 1, 384, 15625),
457 	F(14745600, P_GPLL0_OUT_EVEN, 1, 768, 15625),
458 	F(19200000, P_BI_TCXO, 1, 0, 0),
459 	F(29491200, P_GPLL0_OUT_EVEN, 1, 1536, 15625),
460 	F(32000000, P_GPLL0_OUT_EVEN, 1, 8, 75),
461 	F(48000000, P_GPLL0_OUT_EVEN, 1, 4, 25),
462 	F(64000000, P_GPLL0_OUT_EVEN, 1, 16, 75),
463 	F(80000000, P_GPLL0_OUT_EVEN, 1, 4, 15),
464 	F(96000000, P_GPLL0_OUT_EVEN, 1, 8, 25),
465 	F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
466 	F(102400000, P_GPLL0_OUT_EVEN, 1, 128, 375),
467 	F(112000000, P_GPLL0_OUT_EVEN, 1, 28, 75),
468 	F(117964800, P_GPLL0_OUT_EVEN, 1, 6144, 15625),
469 	F(120000000, P_GPLL0_OUT_EVEN, 2.5, 0, 0),
470 	F(128000000, P_GPLL0_OUT_MAIN, 1, 16, 75),
471 	{ }
472 };
473 
474 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
475 	.cmd_rcgr = 0x17148,
476 	.mnd_width = 16,
477 	.hid_width = 5,
478 	.parent_map = gcc_parent_map_0,
479 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
480 	.clkr.hw.init = &(struct clk_init_data){
481 		.name = "gcc_qupv3_wrap0_s0_clk_src",
482 		.parent_data = gcc_parents_0,
483 		.num_parents = ARRAY_SIZE(gcc_parents_0),
484 		.flags = CLK_SET_RATE_PARENT,
485 		.ops = &clk_rcg2_ops,
486 	},
487 };
488 
489 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
490 	.cmd_rcgr = 0x17278,
491 	.mnd_width = 16,
492 	.hid_width = 5,
493 	.parent_map = gcc_parent_map_0,
494 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
495 	.clkr.hw.init = &(struct clk_init_data){
496 		.name = "gcc_qupv3_wrap0_s1_clk_src",
497 		.parent_data = gcc_parents_0,
498 		.num_parents = ARRAY_SIZE(gcc_parents_0),
499 		.flags = CLK_SET_RATE_PARENT,
500 		.ops = &clk_rcg2_ops,
501 	},
502 };
503 
504 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
505 	.cmd_rcgr = 0x173a8,
506 	.mnd_width = 16,
507 	.hid_width = 5,
508 	.parent_map = gcc_parent_map_0,
509 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
510 	.clkr.hw.init = &(struct clk_init_data){
511 		.name = "gcc_qupv3_wrap0_s2_clk_src",
512 		.parent_data = gcc_parents_0,
513 		.num_parents = ARRAY_SIZE(gcc_parents_0),
514 		.flags = CLK_SET_RATE_PARENT,
515 		.ops = &clk_rcg2_ops,
516 	},
517 };
518 
519 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
520 	.cmd_rcgr = 0x174d8,
521 	.mnd_width = 16,
522 	.hid_width = 5,
523 	.parent_map = gcc_parent_map_0,
524 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
525 	.clkr.hw.init = &(struct clk_init_data){
526 		.name = "gcc_qupv3_wrap0_s3_clk_src",
527 		.parent_data = gcc_parents_0,
528 		.num_parents = ARRAY_SIZE(gcc_parents_0),
529 		.flags = CLK_SET_RATE_PARENT,
530 		.ops = &clk_rcg2_ops,
531 	},
532 };
533 
534 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
535 	.cmd_rcgr = 0x17608,
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 = &(struct clk_init_data){
541 		.name = "gcc_qupv3_wrap0_s4_clk_src",
542 		.parent_data = gcc_parents_0,
543 		.num_parents = ARRAY_SIZE(gcc_parents_0),
544 		.flags = CLK_SET_RATE_PARENT,
545 		.ops = &clk_rcg2_ops,
546 	},
547 };
548 
549 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
550 	.cmd_rcgr = 0x17738,
551 	.mnd_width = 16,
552 	.hid_width = 5,
553 	.parent_map = gcc_parent_map_0,
554 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
555 	.clkr.hw.init = &(struct clk_init_data){
556 		.name = "gcc_qupv3_wrap0_s5_clk_src",
557 		.parent_data = gcc_parents_0,
558 		.num_parents = ARRAY_SIZE(gcc_parents_0),
559 		.flags = CLK_SET_RATE_PARENT,
560 		.ops = &clk_rcg2_ops,
561 	},
562 };
563 
564 static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
565 	.cmd_rcgr = 0x17868,
566 	.mnd_width = 16,
567 	.hid_width = 5,
568 	.parent_map = gcc_parent_map_0,
569 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
570 	.clkr.hw.init = &(struct clk_init_data){
571 		.name = "gcc_qupv3_wrap0_s6_clk_src",
572 		.parent_data = gcc_parents_0,
573 		.num_parents = ARRAY_SIZE(gcc_parents_0),
574 		.flags = CLK_SET_RATE_PARENT,
575 		.ops = &clk_rcg2_ops,
576 	},
577 };
578 
579 static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = {
580 	.cmd_rcgr = 0x17998,
581 	.mnd_width = 16,
582 	.hid_width = 5,
583 	.parent_map = gcc_parent_map_0,
584 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
585 	.clkr.hw.init = &(struct clk_init_data){
586 		.name = "gcc_qupv3_wrap0_s7_clk_src",
587 		.parent_data = gcc_parents_0,
588 		.num_parents = ARRAY_SIZE(gcc_parents_0),
589 		.flags = CLK_SET_RATE_PARENT,
590 		.ops = &clk_rcg2_ops,
591 	},
592 };
593 
594 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
595 	.cmd_rcgr = 0x18148,
596 	.mnd_width = 16,
597 	.hid_width = 5,
598 	.parent_map = gcc_parent_map_0,
599 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
600 	.clkr.hw.init = &(struct clk_init_data){
601 		.name = "gcc_qupv3_wrap1_s0_clk_src",
602 		.parent_data = gcc_parents_0,
603 		.num_parents = ARRAY_SIZE(gcc_parents_0),
604 		.flags = CLK_SET_RATE_PARENT,
605 		.ops = &clk_rcg2_ops,
606 	},
607 };
608 
609 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
610 	.cmd_rcgr = 0x18278,
611 	.mnd_width = 16,
612 	.hid_width = 5,
613 	.parent_map = gcc_parent_map_0,
614 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
615 	.clkr.hw.init = &(struct clk_init_data){
616 		.name = "gcc_qupv3_wrap1_s1_clk_src",
617 		.parent_data = gcc_parents_0,
618 		.num_parents = ARRAY_SIZE(gcc_parents_0),
619 		.flags = CLK_SET_RATE_PARENT,
620 		.ops = &clk_rcg2_ops,
621 	},
622 };
623 
624 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
625 	.cmd_rcgr = 0x183a8,
626 	.mnd_width = 16,
627 	.hid_width = 5,
628 	.parent_map = gcc_parent_map_0,
629 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
630 	.clkr.hw.init = &(struct clk_init_data){
631 		.name = "gcc_qupv3_wrap1_s2_clk_src",
632 		.parent_data = gcc_parents_0,
633 		.num_parents = ARRAY_SIZE(gcc_parents_0),
634 		.flags = CLK_SET_RATE_PARENT,
635 		.ops = &clk_rcg2_ops,
636 	},
637 };
638 
639 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
640 	.cmd_rcgr = 0x184d8,
641 	.mnd_width = 16,
642 	.hid_width = 5,
643 	.parent_map = gcc_parent_map_0,
644 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
645 	.clkr.hw.init = &(struct clk_init_data){
646 		.name = "gcc_qupv3_wrap1_s3_clk_src",
647 		.parent_data = gcc_parents_0,
648 		.num_parents = ARRAY_SIZE(gcc_parents_0),
649 		.flags = CLK_SET_RATE_PARENT,
650 		.ops = &clk_rcg2_ops,
651 	},
652 };
653 
654 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
655 	.cmd_rcgr = 0x18608,
656 	.mnd_width = 16,
657 	.hid_width = 5,
658 	.parent_map = gcc_parent_map_0,
659 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
660 	.clkr.hw.init = &(struct clk_init_data){
661 		.name = "gcc_qupv3_wrap1_s4_clk_src",
662 		.parent_data = gcc_parents_0,
663 		.num_parents = ARRAY_SIZE(gcc_parents_0),
664 		.flags = CLK_SET_RATE_PARENT,
665 		.ops = &clk_rcg2_ops,
666 	},
667 };
668 
669 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
670 	.cmd_rcgr = 0x18738,
671 	.mnd_width = 16,
672 	.hid_width = 5,
673 	.parent_map = gcc_parent_map_0,
674 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
675 	.clkr.hw.init = &(struct clk_init_data){
676 		.name = "gcc_qupv3_wrap1_s5_clk_src",
677 		.parent_data = gcc_parents_0,
678 		.num_parents = ARRAY_SIZE(gcc_parents_0),
679 		.flags = CLK_SET_RATE_PARENT,
680 		.ops = &clk_rcg2_ops,
681 	},
682 };
683 
684 static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = {
685 	.cmd_rcgr = 0x1e148,
686 	.mnd_width = 16,
687 	.hid_width = 5,
688 	.parent_map = gcc_parent_map_0,
689 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
690 	.clkr.hw.init = &(struct clk_init_data){
691 		.name = "gcc_qupv3_wrap2_s0_clk_src",
692 		.parent_data = gcc_parents_0,
693 		.num_parents = ARRAY_SIZE(gcc_parents_0),
694 		.flags = CLK_SET_RATE_PARENT,
695 		.ops = &clk_rcg2_ops,
696 	},
697 };
698 
699 static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = {
700 	.cmd_rcgr = 0x1e278,
701 	.mnd_width = 16,
702 	.hid_width = 5,
703 	.parent_map = gcc_parent_map_0,
704 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
705 	.clkr.hw.init = &(struct clk_init_data){
706 		.name = "gcc_qupv3_wrap2_s1_clk_src",
707 		.parent_data = gcc_parents_0,
708 		.num_parents = ARRAY_SIZE(gcc_parents_0),
709 		.flags = CLK_SET_RATE_PARENT,
710 		.ops = &clk_rcg2_ops,
711 	},
712 };
713 
714 static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src = {
715 	.cmd_rcgr = 0x1e3a8,
716 	.mnd_width = 16,
717 	.hid_width = 5,
718 	.parent_map = gcc_parent_map_0,
719 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
720 	.clkr.hw.init = &(struct clk_init_data){
721 		.name = "gcc_qupv3_wrap2_s2_clk_src",
722 		.parent_data = gcc_parents_0,
723 		.num_parents = ARRAY_SIZE(gcc_parents_0),
724 		.flags = CLK_SET_RATE_PARENT,
725 		.ops = &clk_rcg2_ops,
726 	},
727 };
728 
729 static struct clk_rcg2 gcc_qupv3_wrap2_s3_clk_src = {
730 	.cmd_rcgr = 0x1e4d8,
731 	.mnd_width = 16,
732 	.hid_width = 5,
733 	.parent_map = gcc_parent_map_0,
734 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
735 	.clkr.hw.init = &(struct clk_init_data){
736 		.name = "gcc_qupv3_wrap2_s3_clk_src",
737 		.parent_data = gcc_parents_0,
738 		.num_parents = ARRAY_SIZE(gcc_parents_0),
739 		.flags = CLK_SET_RATE_PARENT,
740 		.ops = &clk_rcg2_ops,
741 	},
742 };
743 
744 static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = {
745 	.cmd_rcgr = 0x1e608,
746 	.mnd_width = 16,
747 	.hid_width = 5,
748 	.parent_map = gcc_parent_map_0,
749 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
750 	.clkr.hw.init = &(struct clk_init_data){
751 		.name = "gcc_qupv3_wrap2_s4_clk_src",
752 		.parent_data = gcc_parents_0,
753 		.num_parents = ARRAY_SIZE(gcc_parents_0),
754 		.flags = CLK_SET_RATE_PARENT,
755 		.ops = &clk_rcg2_ops,
756 	},
757 };
758 
759 static struct clk_rcg2 gcc_qupv3_wrap2_s5_clk_src = {
760 	.cmd_rcgr = 0x1e738,
761 	.mnd_width = 16,
762 	.hid_width = 5,
763 	.parent_map = gcc_parent_map_0,
764 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
765 	.clkr.hw.init = &(struct clk_init_data){
766 		.name = "gcc_qupv3_wrap2_s5_clk_src",
767 		.parent_data = gcc_parents_0,
768 		.num_parents = ARRAY_SIZE(gcc_parents_0),
769 		.flags = CLK_SET_RATE_PARENT,
770 		.ops = &clk_rcg2_ops,
771 	},
772 };
773 
774 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
775 	F(400000, P_BI_TCXO, 12, 1, 4),
776 	F(9600000, P_BI_TCXO, 2, 0, 0),
777 	F(19200000, P_BI_TCXO, 1, 0, 0),
778 	F(25000000, P_GPLL0_OUT_MAIN, 12, 1, 2),
779 	F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
780 	F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
781 	F(202000000, P_GPLL9_OUT_MAIN, 4, 0, 0),
782 	{ }
783 };
784 
785 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
786 	.cmd_rcgr = 0x1400c,
787 	.mnd_width = 8,
788 	.hid_width = 5,
789 	.parent_map = gcc_parent_map_6,
790 	.freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
791 	.clkr.hw.init = &(struct clk_init_data){
792 		.name = "gcc_sdcc2_apps_clk_src",
793 		.parent_data = gcc_parents_6,
794 		.num_parents = ARRAY_SIZE(gcc_parents_6),
795 		.flags = CLK_SET_RATE_PARENT,
796 		.ops = &clk_rcg2_floor_ops,
797 	},
798 };
799 
800 static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = {
801 	F(400000, P_BI_TCXO, 12, 1, 4),
802 	F(9600000, P_BI_TCXO, 2, 0, 0),
803 	F(19200000, P_BI_TCXO, 1, 0, 0),
804 	F(25000000, P_GPLL0_OUT_MAIN, 12, 1, 2),
805 	F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
806 	F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
807 	{ }
808 };
809 
810 static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {
811 	.cmd_rcgr = 0x1600c,
812 	.mnd_width = 8,
813 	.hid_width = 5,
814 	.parent_map = gcc_parent_map_3,
815 	.freq_tbl = ftbl_gcc_sdcc4_apps_clk_src,
816 	.clkr.hw.init = &(struct clk_init_data){
817 		.name = "gcc_sdcc4_apps_clk_src",
818 		.parent_data = gcc_parents_3,
819 		.num_parents = ARRAY_SIZE(gcc_parents_3),
820 		.flags = CLK_SET_RATE_PARENT,
821 		.ops = &clk_rcg2_floor_ops,
822 	},
823 };
824 
825 static const struct freq_tbl ftbl_gcc_tsif_ref_clk_src[] = {
826 	F(105495, P_BI_TCXO, 2, 1, 91),
827 	{ }
828 };
829 
830 static struct clk_rcg2 gcc_tsif_ref_clk_src = {
831 	.cmd_rcgr = 0x36010,
832 	.mnd_width = 8,
833 	.hid_width = 5,
834 	.parent_map = gcc_parent_map_7,
835 	.freq_tbl = ftbl_gcc_tsif_ref_clk_src,
836 	.clkr.hw.init = &(struct clk_init_data){
837 		.name = "gcc_tsif_ref_clk_src",
838 		.parent_data = gcc_parents_7,
839 		.num_parents = ARRAY_SIZE(gcc_parents_7),
840 		.flags = CLK_SET_RATE_PARENT,
841 		.ops = &clk_rcg2_ops,
842 	},
843 };
844 
845 static const struct freq_tbl ftbl_gcc_ufs_card_axi_clk_src[] = {
846 	F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
847 	F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
848 	F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
849 	F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
850 	F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
851 	{ }
852 };
853 
854 static struct clk_rcg2 gcc_ufs_card_axi_clk_src = {
855 	.cmd_rcgr = 0x75020,
856 	.mnd_width = 8,
857 	.hid_width = 5,
858 	.parent_map = gcc_parent_map_0,
859 	.freq_tbl = ftbl_gcc_ufs_card_axi_clk_src,
860 	.clkr.hw.init = &(struct clk_init_data){
861 		.name = "gcc_ufs_card_axi_clk_src",
862 		.parent_data = gcc_parents_0,
863 		.num_parents = ARRAY_SIZE(gcc_parents_0),
864 		.flags = CLK_SET_RATE_PARENT,
865 		.ops = &clk_rcg2_ops,
866 	},
867 };
868 
869 static const struct freq_tbl ftbl_gcc_ufs_card_ice_core_clk_src[] = {
870 	F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
871 	F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
872 	F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
873 	F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
874 	{ }
875 };
876 
877 static struct clk_rcg2 gcc_ufs_card_ice_core_clk_src = {
878 	.cmd_rcgr = 0x75060,
879 	.mnd_width = 0,
880 	.hid_width = 5,
881 	.parent_map = gcc_parent_map_0,
882 	.freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
883 	.clkr.hw.init = &(struct clk_init_data){
884 		.name = "gcc_ufs_card_ice_core_clk_src",
885 		.parent_data = gcc_parents_0,
886 		.num_parents = ARRAY_SIZE(gcc_parents_0),
887 		.flags = CLK_SET_RATE_PARENT,
888 		.ops = &clk_rcg2_ops,
889 	},
890 };
891 
892 static const struct freq_tbl ftbl_gcc_ufs_card_phy_aux_clk_src[] = {
893 	F(19200000, P_BI_TCXO, 1, 0, 0),
894 	{ }
895 };
896 
897 static struct clk_rcg2 gcc_ufs_card_phy_aux_clk_src = {
898 	.cmd_rcgr = 0x75094,
899 	.mnd_width = 0,
900 	.hid_width = 5,
901 	.parent_map = gcc_parent_map_4,
902 	.freq_tbl = ftbl_gcc_ufs_card_phy_aux_clk_src,
903 	.clkr.hw.init = &(struct clk_init_data){
904 		.name = "gcc_ufs_card_phy_aux_clk_src",
905 		.parent_data = gcc_parents_4,
906 		.num_parents = ARRAY_SIZE(gcc_parents_4),
907 		.flags = CLK_SET_RATE_PARENT,
908 		.ops = &clk_rcg2_ops,
909 	},
910 };
911 
912 static const struct freq_tbl ftbl_gcc_ufs_card_unipro_core_clk_src[] = {
913 	F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
914 	F(75000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
915 	F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
916 	{ }
917 };
918 
919 static struct clk_rcg2 gcc_ufs_card_unipro_core_clk_src = {
920 	.cmd_rcgr = 0x75078,
921 	.mnd_width = 0,
922 	.hid_width = 5,
923 	.parent_map = gcc_parent_map_0,
924 	.freq_tbl = ftbl_gcc_ufs_card_unipro_core_clk_src,
925 	.clkr.hw.init = &(struct clk_init_data){
926 		.name = "gcc_ufs_card_unipro_core_clk_src",
927 		.parent_data = gcc_parents_0,
928 		.num_parents = ARRAY_SIZE(gcc_parents_0),
929 		.flags = CLK_SET_RATE_PARENT,
930 		.ops = &clk_rcg2_ops,
931 	},
932 };
933 
934 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
935 	F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
936 	F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
937 	F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
938 	F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
939 	F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
940 	{ }
941 };
942 
943 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
944 	.cmd_rcgr = 0x77020,
945 	.mnd_width = 8,
946 	.hid_width = 5,
947 	.parent_map = gcc_parent_map_0,
948 	.freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
949 	.clkr.hw.init = &(struct clk_init_data){
950 		.name = "gcc_ufs_phy_axi_clk_src",
951 		.parent_data = gcc_parents_0,
952 		.num_parents = ARRAY_SIZE(gcc_parents_0),
953 		.flags = CLK_SET_RATE_PARENT,
954 		.ops = &clk_rcg2_ops,
955 	},
956 };
957 
958 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
959 	.cmd_rcgr = 0x77060,
960 	.mnd_width = 0,
961 	.hid_width = 5,
962 	.parent_map = gcc_parent_map_0,
963 	.freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
964 	.clkr.hw.init = &(struct clk_init_data){
965 		.name = "gcc_ufs_phy_ice_core_clk_src",
966 		.parent_data = gcc_parents_0,
967 		.num_parents = ARRAY_SIZE(gcc_parents_0),
968 		.flags = CLK_SET_RATE_PARENT,
969 		.ops = &clk_rcg2_ops,
970 	},
971 };
972 
973 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
974 	.cmd_rcgr = 0x77094,
975 	.mnd_width = 0,
976 	.hid_width = 5,
977 	.parent_map = gcc_parent_map_4,
978 	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
979 	.clkr.hw.init = &(struct clk_init_data){
980 		.name = "gcc_ufs_phy_phy_aux_clk_src",
981 		.parent_data = gcc_parents_4,
982 		.num_parents = ARRAY_SIZE(gcc_parents_4),
983 		.flags = CLK_SET_RATE_PARENT,
984 		.ops = &clk_rcg2_ops,
985 	},
986 };
987 
988 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
989 	.cmd_rcgr = 0x77078,
990 	.mnd_width = 0,
991 	.hid_width = 5,
992 	.parent_map = gcc_parent_map_0,
993 	.freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
994 	.clkr.hw.init = &(struct clk_init_data){
995 		.name = "gcc_ufs_phy_unipro_core_clk_src",
996 		.parent_data = gcc_parents_0,
997 		.num_parents = ARRAY_SIZE(gcc_parents_0),
998 		.flags = CLK_SET_RATE_PARENT,
999 		.ops = &clk_rcg2_ops,
1000 	},
1001 };
1002 
1003 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
1004 	F(33333333, P_GPLL0_OUT_EVEN, 9, 0, 0),
1005 	F(66666667, P_GPLL0_OUT_EVEN, 4.5, 0, 0),
1006 	F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
1007 	F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
1008 	F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
1009 	{ }
1010 };
1011 
1012 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1013 	.cmd_rcgr = 0xf01c,
1014 	.mnd_width = 8,
1015 	.hid_width = 5,
1016 	.parent_map = gcc_parent_map_0,
1017 	.freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1018 	.clkr.hw.init = &(struct clk_init_data){
1019 		.name = "gcc_usb30_prim_master_clk_src",
1020 		.parent_data = gcc_parents_0,
1021 		.num_parents = ARRAY_SIZE(gcc_parents_0),
1022 		.flags = CLK_SET_RATE_PARENT,
1023 		.ops = &clk_rcg2_ops,
1024 	},
1025 };
1026 
1027 static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {
1028 	F(19200000, P_BI_TCXO, 1, 0, 0),
1029 	F(20000000, P_GPLL0_OUT_EVEN, 15, 0, 0),
1030 	F(60000000, P_GPLL0_OUT_EVEN, 5, 0, 0),
1031 	{ }
1032 };
1033 
1034 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1035 	.cmd_rcgr = 0xf034,
1036 	.mnd_width = 0,
1037 	.hid_width = 5,
1038 	.parent_map = gcc_parent_map_0,
1039 	.freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1040 	.clkr.hw.init = &(struct clk_init_data){
1041 		.name = "gcc_usb30_prim_mock_utmi_clk_src",
1042 		.parent_data = gcc_parents_0,
1043 		.num_parents = ARRAY_SIZE(gcc_parents_0),
1044 		.flags = CLK_SET_RATE_PARENT,
1045 		.ops = &clk_rcg2_ops,
1046 	},
1047 };
1048 
1049 static struct clk_rcg2 gcc_usb30_sec_master_clk_src = {
1050 	.cmd_rcgr = 0x1001c,
1051 	.mnd_width = 8,
1052 	.hid_width = 5,
1053 	.parent_map = gcc_parent_map_0,
1054 	.freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1055 	.clkr.hw.init = &(struct clk_init_data){
1056 		.name = "gcc_usb30_sec_master_clk_src",
1057 		.parent_data = gcc_parents_0,
1058 		.num_parents = ARRAY_SIZE(gcc_parents_0),
1059 		.flags = CLK_SET_RATE_PARENT,
1060 		.ops = &clk_rcg2_ops,
1061 	},
1062 };
1063 
1064 static struct clk_rcg2 gcc_usb30_sec_mock_utmi_clk_src = {
1065 	.cmd_rcgr = 0x10034,
1066 	.mnd_width = 0,
1067 	.hid_width = 5,
1068 	.parent_map = gcc_parent_map_0,
1069 	.freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1070 	.clkr.hw.init = &(struct clk_init_data){
1071 		.name = "gcc_usb30_sec_mock_utmi_clk_src",
1072 		.parent_data = gcc_parents_0,
1073 		.num_parents = ARRAY_SIZE(gcc_parents_0),
1074 		.flags = CLK_SET_RATE_PARENT,
1075 		.ops = &clk_rcg2_ops,
1076 	},
1077 };
1078 
1079 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1080 	.cmd_rcgr = 0xf060,
1081 	.mnd_width = 0,
1082 	.hid_width = 5,
1083 	.parent_map = gcc_parent_map_2,
1084 	.freq_tbl = ftbl_gcc_ufs_card_phy_aux_clk_src,
1085 	.clkr.hw.init = &(struct clk_init_data){
1086 		.name = "gcc_usb3_prim_phy_aux_clk_src",
1087 		.parent_data = gcc_parents_2,
1088 		.num_parents = ARRAY_SIZE(gcc_parents_2),
1089 		.flags = CLK_SET_RATE_PARENT,
1090 		.ops = &clk_rcg2_ops,
1091 	},
1092 };
1093 
1094 static struct clk_rcg2 gcc_usb3_sec_phy_aux_clk_src = {
1095 	.cmd_rcgr = 0x10060,
1096 	.mnd_width = 0,
1097 	.hid_width = 5,
1098 	.parent_map = gcc_parent_map_2,
1099 	.freq_tbl = ftbl_gcc_ufs_card_phy_aux_clk_src,
1100 	.clkr.hw.init = &(struct clk_init_data){
1101 		.name = "gcc_usb3_sec_phy_aux_clk_src",
1102 		.parent_data = gcc_parents_2,
1103 		.num_parents = ARRAY_SIZE(gcc_parents_2),
1104 		.flags = CLK_SET_RATE_PARENT,
1105 		.ops = &clk_rcg2_ops,
1106 	},
1107 };
1108 
1109 static struct clk_branch gcc_aggre_noc_pcie_tbu_clk = {
1110 	.halt_reg = 0x90018,
1111 	.halt_check = BRANCH_HALT,
1112 	.clkr = {
1113 		.enable_reg = 0x90018,
1114 		.enable_mask = BIT(0),
1115 		.hw.init = &(struct clk_init_data){
1116 			.name = "gcc_aggre_noc_pcie_tbu_clk",
1117 			.ops = &clk_branch2_ops,
1118 		},
1119 	},
1120 };
1121 
1122 static struct clk_branch gcc_aggre_ufs_card_axi_clk = {
1123 	.halt_reg = 0x750c0,
1124 	.halt_check = BRANCH_HALT,
1125 	.hwcg_reg = 0x750c0,
1126 	.hwcg_bit = 1,
1127 	.clkr = {
1128 		.enable_reg = 0x750c0,
1129 		.enable_mask = BIT(0),
1130 		.hw.init = &(struct clk_init_data){
1131 			.name = "gcc_aggre_ufs_card_axi_clk",
1132 			.parent_hws = (const struct clk_hw *[]){
1133 				      &gcc_ufs_card_axi_clk_src.clkr.hw },
1134 			.num_parents = 1,
1135 			.flags = CLK_SET_RATE_PARENT,
1136 			.ops = &clk_branch2_ops,
1137 		},
1138 	},
1139 };
1140 
1141 static struct clk_branch gcc_aggre_ufs_card_axi_hw_ctl_clk = {
1142 	.halt_reg = 0x750c0,
1143 	.halt_check = BRANCH_HALT,
1144 	.hwcg_reg = 0x750c0,
1145 	.hwcg_bit = 1,
1146 	.clkr = {
1147 		.enable_reg = 0x750c0,
1148 		.enable_mask = BIT(1),
1149 		.hw.init = &(struct clk_init_data){
1150 			.name = "gcc_aggre_ufs_card_axi_hw_ctl_clk",
1151 			.parent_hws = (const struct clk_hw *[]){
1152 				      &gcc_aggre_ufs_card_axi_clk.clkr.hw },
1153 			.num_parents = 1,
1154 			.flags = CLK_SET_RATE_PARENT,
1155 			.ops = &clk_branch_simple_ops,
1156 		},
1157 	},
1158 };
1159 
1160 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
1161 	.halt_reg = 0x770c0,
1162 	.halt_check = BRANCH_HALT,
1163 	.hwcg_reg = 0x770c0,
1164 	.hwcg_bit = 1,
1165 	.clkr = {
1166 		.enable_reg = 0x770c0,
1167 		.enable_mask = BIT(0),
1168 		.hw.init = &(struct clk_init_data){
1169 			.name = "gcc_aggre_ufs_phy_axi_clk",
1170 			.parent_hws = (const struct clk_hw *[]){
1171 				      &gcc_ufs_phy_axi_clk_src.clkr.hw },
1172 			.num_parents = 1,
1173 			.flags = CLK_SET_RATE_PARENT,
1174 			.ops = &clk_branch2_ops,
1175 		},
1176 	},
1177 };
1178 
1179 static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = {
1180 	.halt_reg = 0x770c0,
1181 	.halt_check = BRANCH_HALT,
1182 	.hwcg_reg = 0x770c0,
1183 	.hwcg_bit = 1,
1184 	.clkr = {
1185 		.enable_reg = 0x770c0,
1186 		.enable_mask = BIT(1),
1187 		.hw.init = &(struct clk_init_data){
1188 			.name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk",
1189 			.parent_hws = (const struct clk_hw *[]){
1190 				      &gcc_aggre_ufs_phy_axi_clk.clkr.hw },
1191 			.num_parents = 1,
1192 			.flags = CLK_SET_RATE_PARENT,
1193 			.ops = &clk_branch_simple_ops,
1194 		},
1195 	},
1196 };
1197 
1198 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
1199 	.halt_reg = 0xf07c,
1200 	.halt_check = BRANCH_HALT,
1201 	.clkr = {
1202 		.enable_reg = 0xf07c,
1203 		.enable_mask = BIT(0),
1204 		.hw.init = &(struct clk_init_data){
1205 			.name = "gcc_aggre_usb3_prim_axi_clk",
1206 			.parent_hws = (const struct clk_hw *[]){
1207 				      &gcc_usb30_prim_master_clk_src.clkr.hw },
1208 			.num_parents = 1,
1209 			.flags = CLK_SET_RATE_PARENT,
1210 			.ops = &clk_branch2_ops,
1211 		},
1212 	},
1213 };
1214 
1215 static struct clk_branch gcc_aggre_usb3_sec_axi_clk = {
1216 	.halt_reg = 0x1007c,
1217 	.halt_check = BRANCH_HALT,
1218 	.clkr = {
1219 		.enable_reg = 0x1007c,
1220 		.enable_mask = BIT(0),
1221 		.hw.init = &(struct clk_init_data){
1222 			.name = "gcc_aggre_usb3_sec_axi_clk",
1223 			.parent_hws = (const struct clk_hw *[]){
1224 				      &gcc_usb30_sec_master_clk_src.clkr.hw },
1225 			.num_parents = 1,
1226 			.flags = CLK_SET_RATE_PARENT,
1227 			.ops = &clk_branch2_ops,
1228 		},
1229 	},
1230 };
1231 
1232 static struct clk_branch gcc_boot_rom_ahb_clk = {
1233 	.halt_reg = 0x38004,
1234 	.halt_check = BRANCH_HALT_VOTED,
1235 	.hwcg_reg = 0x38004,
1236 	.hwcg_bit = 1,
1237 	.clkr = {
1238 		.enable_reg = 0x52004,
1239 		.enable_mask = BIT(10),
1240 		.hw.init = &(struct clk_init_data){
1241 			.name = "gcc_boot_rom_ahb_clk",
1242 			.ops = &clk_branch2_ops,
1243 		},
1244 	},
1245 };
1246 
1247 /*
1248  * Clock ON depends on external parent 'config noc', so cant poll
1249  * delay and also mark as crtitical for camss boot
1250  */
1251 static struct clk_branch gcc_camera_ahb_clk = {
1252 	.halt_reg = 0xb008,
1253 	.halt_check = BRANCH_HALT_DELAY,
1254 	.hwcg_reg = 0xb008,
1255 	.hwcg_bit = 1,
1256 	.clkr = {
1257 		.enable_reg = 0xb008,
1258 		.enable_mask = BIT(0),
1259 		.hw.init = &(struct clk_init_data){
1260 			.name = "gcc_camera_ahb_clk",
1261 			.flags = CLK_IS_CRITICAL,
1262 			.ops = &clk_branch2_ops,
1263 		},
1264 	},
1265 };
1266 
1267 static struct clk_branch gcc_camera_hf_axi_clk = {
1268 	.halt_reg = 0xb030,
1269 	.halt_check = BRANCH_HALT,
1270 	.clkr = {
1271 		.enable_reg = 0xb030,
1272 		.enable_mask = BIT(0),
1273 		.hw.init = &(struct clk_init_data){
1274 			.name = "gcc_camera_hf_axi_clk",
1275 			.ops = &clk_branch2_ops,
1276 		},
1277 	},
1278 };
1279 
1280 static struct clk_branch gcc_camera_sf_axi_clk = {
1281 	.halt_reg = 0xb034,
1282 	.halt_check = BRANCH_HALT,
1283 	.clkr = {
1284 		.enable_reg = 0xb034,
1285 		.enable_mask = BIT(0),
1286 		.hw.init = &(struct clk_init_data){
1287 			.name = "gcc_camera_sf_axi_clk",
1288 			.ops = &clk_branch2_ops,
1289 		},
1290 	},
1291 };
1292 
1293 /* XO critical input to camss, so no need to poll */
1294 static struct clk_branch gcc_camera_xo_clk = {
1295 	.halt_reg = 0xb044,
1296 	.halt_check = BRANCH_HALT_DELAY,
1297 	.clkr = {
1298 		.enable_reg = 0xb044,
1299 		.enable_mask = BIT(0),
1300 		.hw.init = &(struct clk_init_data){
1301 			.name = "gcc_camera_xo_clk",
1302 			.flags = CLK_IS_CRITICAL,
1303 			.ops = &clk_branch2_ops,
1304 		},
1305 	},
1306 };
1307 
1308 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1309 	.halt_reg = 0xf078,
1310 	.halt_check = BRANCH_HALT,
1311 	.clkr = {
1312 		.enable_reg = 0xf078,
1313 		.enable_mask = BIT(0),
1314 		.hw.init = &(struct clk_init_data){
1315 			.name = "gcc_cfg_noc_usb3_prim_axi_clk",
1316 			.parent_hws = (const struct clk_hw *[]){
1317 				      &gcc_usb30_prim_master_clk_src.clkr.hw },
1318 			.num_parents = 1,
1319 			.flags = CLK_SET_RATE_PARENT,
1320 			.ops = &clk_branch2_ops,
1321 		},
1322 	},
1323 };
1324 
1325 static struct clk_branch gcc_cfg_noc_usb3_sec_axi_clk = {
1326 	.halt_reg = 0x10078,
1327 	.halt_check = BRANCH_HALT,
1328 	.clkr = {
1329 		.enable_reg = 0x10078,
1330 		.enable_mask = BIT(0),
1331 		.hw.init = &(struct clk_init_data){
1332 			.name = "gcc_cfg_noc_usb3_sec_axi_clk",
1333 			.parent_hws = (const struct clk_hw *[]){
1334 				      &gcc_usb30_sec_master_clk_src.clkr.hw },
1335 			.num_parents = 1,
1336 			.flags = CLK_SET_RATE_PARENT,
1337 			.ops = &clk_branch2_ops,
1338 		},
1339 	},
1340 };
1341 
1342 static struct clk_branch gcc_cpuss_ahb_clk = {
1343 	.halt_reg = 0x48000,
1344 	.halt_check = BRANCH_HALT_VOTED,
1345 	.clkr = {
1346 		.enable_reg = 0x52004,
1347 		.enable_mask = BIT(21),
1348 		.hw.init = &(struct clk_init_data){
1349 			.name = "gcc_cpuss_ahb_clk",
1350 			.parent_hws = (const struct clk_hw *[]){
1351 				      &gcc_cpuss_ahb_clk_src.clkr.hw },
1352 			.num_parents = 1,
1353 			 /* required for cpuss */
1354 			.flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
1355 			.ops = &clk_branch2_ops,
1356 		},
1357 	},
1358 };
1359 
1360 static struct clk_branch gcc_cpuss_dvm_bus_clk = {
1361 	.halt_reg = 0x48190,
1362 	.halt_check = BRANCH_HALT,
1363 	.clkr = {
1364 		.enable_reg = 0x48190,
1365 		.enable_mask = BIT(0),
1366 		.hw.init = &(struct clk_init_data){
1367 			.name = "gcc_cpuss_dvm_bus_clk",
1368 			 /* required for cpuss */
1369 			.flags = CLK_IS_CRITICAL,
1370 			.ops = &clk_branch2_ops,
1371 		},
1372 	},
1373 };
1374 
1375 static struct clk_branch gcc_cpuss_gnoc_clk = {
1376 	.halt_reg = 0x48004,
1377 	.halt_check = BRANCH_HALT_VOTED,
1378 	.hwcg_reg = 0x48004,
1379 	.hwcg_bit = 1,
1380 	.clkr = {
1381 		.enable_reg = 0x52004,
1382 		.enable_mask = BIT(22),
1383 		.hw.init = &(struct clk_init_data){
1384 			.name = "gcc_cpuss_gnoc_clk",
1385 			 /* required for cpuss */
1386 			.flags = CLK_IS_CRITICAL,
1387 			.ops = &clk_branch2_ops,
1388 		},
1389 	},
1390 };
1391 
1392 static struct clk_branch gcc_cpuss_rbcpr_clk = {
1393 	.halt_reg = 0x48008,
1394 	.halt_check = BRANCH_HALT,
1395 	.clkr = {
1396 		.enable_reg = 0x48008,
1397 		.enable_mask = BIT(0),
1398 		.hw.init = &(struct clk_init_data){
1399 			.name = "gcc_cpuss_rbcpr_clk",
1400 			.ops = &clk_branch2_ops,
1401 		},
1402 	},
1403 };
1404 
1405 static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1406 	.halt_reg = 0x71154,
1407 	.halt_check = BRANCH_VOTED,
1408 	.clkr = {
1409 		.enable_reg = 0x71154,
1410 		.enable_mask = BIT(0),
1411 		.hw.init = &(struct clk_init_data){
1412 			.name = "gcc_ddrss_gpu_axi_clk",
1413 			.ops = &clk_branch2_ops,
1414 		},
1415 	},
1416 };
1417 
1418 /*
1419  * Clock ON depends on external parent 'config noc', so cant poll
1420  * delay and also mark as crtitical for disp boot
1421  */
1422 static struct clk_branch gcc_disp_ahb_clk = {
1423 	.halt_reg = 0xb00c,
1424 	.halt_check = BRANCH_HALT_DELAY,
1425 	.hwcg_reg = 0xb00c,
1426 	.hwcg_bit = 1,
1427 	.clkr = {
1428 		.enable_reg = 0xb00c,
1429 		.enable_mask = BIT(0),
1430 		.hw.init = &(struct clk_init_data){
1431 			.name = "gcc_disp_ahb_clk",
1432 			.flags = CLK_IS_CRITICAL,
1433 			.ops = &clk_branch2_ops,
1434 		},
1435 	},
1436 };
1437 
1438 static struct clk_branch gcc_disp_hf_axi_clk = {
1439 	.halt_reg = 0xb038,
1440 	.halt_check = BRANCH_HALT,
1441 	.clkr = {
1442 		.enable_reg = 0xb038,
1443 		.enable_mask = BIT(0),
1444 		.hw.init = &(struct clk_init_data){
1445 			.name = "gcc_disp_hf_axi_clk",
1446 			.ops = &clk_branch2_ops,
1447 		},
1448 	},
1449 };
1450 
1451 static struct clk_branch gcc_disp_sf_axi_clk = {
1452 	.halt_reg = 0xb03c,
1453 	.halt_check = BRANCH_HALT,
1454 	.clkr = {
1455 		.enable_reg = 0xb03c,
1456 		.enable_mask = BIT(0),
1457 		.hw.init = &(struct clk_init_data){
1458 			.name = "gcc_disp_sf_axi_clk",
1459 			.ops = &clk_branch2_ops,
1460 		},
1461 	},
1462 };
1463 
1464 /* XO critical input to disp, so no need to poll */
1465 static struct clk_branch gcc_disp_xo_clk = {
1466 	.halt_reg = 0xb048,
1467 	.halt_check = BRANCH_HALT_DELAY,
1468 	.clkr = {
1469 		.enable_reg = 0xb048,
1470 		.enable_mask = BIT(0),
1471 		.hw.init = &(struct clk_init_data){
1472 			.name = "gcc_disp_xo_clk",
1473 			.flags = CLK_IS_CRITICAL,
1474 			.ops = &clk_branch2_ops,
1475 		},
1476 	},
1477 };
1478 
1479 static struct clk_branch gcc_emac_axi_clk = {
1480 	.halt_reg = 0x6010,
1481 	.halt_check = BRANCH_HALT,
1482 	.clkr = {
1483 		.enable_reg = 0x6010,
1484 		.enable_mask = BIT(0),
1485 		.hw.init = &(struct clk_init_data){
1486 			.name = "gcc_emac_axi_clk",
1487 			.ops = &clk_branch2_ops,
1488 		},
1489 	},
1490 };
1491 
1492 static struct clk_branch gcc_emac_ptp_clk = {
1493 	.halt_reg = 0x6034,
1494 	.halt_check = BRANCH_HALT,
1495 	.clkr = {
1496 		.enable_reg = 0x6034,
1497 		.enable_mask = BIT(0),
1498 		.hw.init = &(struct clk_init_data){
1499 			.name = "gcc_emac_ptp_clk",
1500 			.parent_hws = (const struct clk_hw *[]){
1501 				      &gcc_emac_ptp_clk_src.clkr.hw },
1502 			.num_parents = 1,
1503 			.flags = CLK_SET_RATE_PARENT,
1504 			.ops = &clk_branch2_ops,
1505 		},
1506 	},
1507 };
1508 
1509 static struct clk_branch gcc_emac_rgmii_clk = {
1510 	.halt_reg = 0x6018,
1511 	.halt_check = BRANCH_HALT,
1512 	.clkr = {
1513 		.enable_reg = 0x6018,
1514 		.enable_mask = BIT(0),
1515 		.hw.init = &(struct clk_init_data){
1516 			.name = "gcc_emac_rgmii_clk",
1517 			.parent_hws = (const struct clk_hw *[]){
1518 				      &gcc_emac_rgmii_clk_src.clkr.hw },
1519 			.num_parents = 1,
1520 			.flags = CLK_SET_RATE_PARENT,
1521 			.ops = &clk_branch2_ops,
1522 		},
1523 	},
1524 };
1525 
1526 static struct clk_branch gcc_emac_slv_ahb_clk = {
1527 	.halt_reg = 0x6014,
1528 	.halt_check = BRANCH_HALT,
1529 	.hwcg_reg = 0x6014,
1530 	.hwcg_bit = 1,
1531 	.clkr = {
1532 		.enable_reg = 0x6014,
1533 		.enable_mask = BIT(0),
1534 		.hw.init = &(struct clk_init_data){
1535 			.name = "gcc_emac_slv_ahb_clk",
1536 			.ops = &clk_branch2_ops,
1537 		},
1538 	},
1539 };
1540 
1541 static struct clk_branch gcc_gp1_clk = {
1542 	.halt_reg = 0x64000,
1543 	.halt_check = BRANCH_HALT,
1544 	.clkr = {
1545 		.enable_reg = 0x64000,
1546 		.enable_mask = BIT(0),
1547 		.hw.init = &(struct clk_init_data){
1548 			.name = "gcc_gp1_clk",
1549 			.parent_hws = (const struct clk_hw *[]){
1550 				      &gcc_gp1_clk_src.clkr.hw },
1551 			.num_parents = 1,
1552 			.flags = CLK_SET_RATE_PARENT,
1553 			.ops = &clk_branch2_ops,
1554 		},
1555 	},
1556 };
1557 
1558 static struct clk_branch gcc_gp2_clk = {
1559 	.halt_reg = 0x65000,
1560 	.halt_check = BRANCH_HALT,
1561 	.clkr = {
1562 		.enable_reg = 0x65000,
1563 		.enable_mask = BIT(0),
1564 		.hw.init = &(struct clk_init_data){
1565 			.name = "gcc_gp2_clk",
1566 			.parent_hws = (const struct clk_hw *[]){
1567 				      &gcc_gp2_clk_src.clkr.hw },
1568 			.num_parents = 1,
1569 			.flags = CLK_SET_RATE_PARENT,
1570 			.ops = &clk_branch2_ops,
1571 		},
1572 	},
1573 };
1574 
1575 static struct clk_branch gcc_gp3_clk = {
1576 	.halt_reg = 0x66000,
1577 	.halt_check = BRANCH_HALT,
1578 	.clkr = {
1579 		.enable_reg = 0x66000,
1580 		.enable_mask = BIT(0),
1581 		.hw.init = &(struct clk_init_data){
1582 			.name = "gcc_gp3_clk",
1583 			.parent_hws = (const struct clk_hw *[]){
1584 				      &gcc_gp3_clk_src.clkr.hw },
1585 			.num_parents = 1,
1586 			.flags = CLK_SET_RATE_PARENT,
1587 			.ops = &clk_branch2_ops,
1588 		},
1589 	},
1590 };
1591 
1592 static struct clk_branch gcc_gpu_cfg_ahb_clk = {
1593 	.halt_reg = 0x71004,
1594 	.halt_check = BRANCH_HALT,
1595 	.hwcg_reg = 0x71004,
1596 	.hwcg_bit = 1,
1597 	.clkr = {
1598 		.enable_reg = 0x71004,
1599 		.enable_mask = BIT(0),
1600 		.hw.init = &(struct clk_init_data){
1601 			.name = "gcc_gpu_cfg_ahb_clk",
1602 			 /* required for gpu */
1603 			.flags = CLK_IS_CRITICAL,
1604 			.ops = &clk_branch2_ops,
1605 		},
1606 	},
1607 };
1608 
1609 static struct clk_branch gcc_gpu_gpll0_clk_src = {
1610 	.halt_check = BRANCH_HALT_SKIP,
1611 	.clkr = {
1612 		.enable_reg = 0x52004,
1613 		.enable_mask = BIT(15),
1614 		.hw.init = &(struct clk_init_data){
1615 			.name = "gcc_gpu_gpll0_clk_src",
1616 			.parent_hws = (const struct clk_hw *[]){
1617 				&gpll0.clkr.hw },
1618 			.num_parents = 1,
1619 			.flags = CLK_SET_RATE_PARENT,
1620 			.ops = &clk_branch2_ops,
1621 		},
1622 	},
1623 };
1624 
1625 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
1626 	.halt_check = BRANCH_HALT_SKIP,
1627 	.clkr = {
1628 		.enable_reg = 0x52004,
1629 		.enable_mask = BIT(16),
1630 		.hw.init = &(struct clk_init_data){
1631 			.name = "gcc_gpu_gpll0_div_clk_src",
1632 			.parent_hws = (const struct clk_hw *[]){
1633 				&gpll0_out_even.clkr.hw },
1634 			.num_parents = 1,
1635 			.flags = CLK_SET_RATE_PARENT,
1636 			.ops = &clk_branch2_ops,
1637 		},
1638 	},
1639 };
1640 
1641 static struct clk_branch gcc_gpu_iref_clk = {
1642 	.halt_reg = 0x8c010,
1643 	.halt_check = BRANCH_HALT,
1644 	.clkr = {
1645 		.enable_reg = 0x8c010,
1646 		.enable_mask = BIT(0),
1647 		.hw.init = &(struct clk_init_data){
1648 			.name = "gcc_gpu_iref_clk",
1649 			.ops = &clk_branch2_ops,
1650 		},
1651 	},
1652 };
1653 
1654 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
1655 	.halt_reg = 0x7100c,
1656 	.halt_check = BRANCH_VOTED,
1657 	.clkr = {
1658 		.enable_reg = 0x7100c,
1659 		.enable_mask = BIT(0),
1660 		.hw.init = &(struct clk_init_data){
1661 			.name = "gcc_gpu_memnoc_gfx_clk",
1662 			.ops = &clk_branch2_ops,
1663 		},
1664 	},
1665 };
1666 
1667 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
1668 	.halt_reg = 0x71018,
1669 	.halt_check = BRANCH_HALT,
1670 	.clkr = {
1671 		.enable_reg = 0x71018,
1672 		.enable_mask = BIT(0),
1673 		.hw.init = &(struct clk_init_data){
1674 			.name = "gcc_gpu_snoc_dvm_gfx_clk",
1675 			.ops = &clk_branch2_ops,
1676 		},
1677 	},
1678 };
1679 
1680 static struct clk_branch gcc_npu_at_clk = {
1681 	.halt_reg = 0x4d010,
1682 	.halt_check = BRANCH_VOTED,
1683 	.clkr = {
1684 		.enable_reg = 0x4d010,
1685 		.enable_mask = BIT(0),
1686 		.hw.init = &(struct clk_init_data){
1687 			.name = "gcc_npu_at_clk",
1688 			.ops = &clk_branch2_ops,
1689 		},
1690 	},
1691 };
1692 
1693 static struct clk_branch gcc_npu_axi_clk = {
1694 	.halt_reg = 0x4d008,
1695 	.halt_check = BRANCH_VOTED,
1696 	.clkr = {
1697 		.enable_reg = 0x4d008,
1698 		.enable_mask = BIT(0),
1699 		.hw.init = &(struct clk_init_data){
1700 			.name = "gcc_npu_axi_clk",
1701 			.ops = &clk_branch2_ops,
1702 		},
1703 	},
1704 };
1705 
1706 static struct clk_branch gcc_npu_cfg_ahb_clk = {
1707 	.halt_reg = 0x4d004,
1708 	.halt_check = BRANCH_HALT,
1709 	.hwcg_reg = 0x4d004,
1710 	.hwcg_bit = 1,
1711 	.clkr = {
1712 		.enable_reg = 0x4d004,
1713 		.enable_mask = BIT(0),
1714 		.hw.init = &(struct clk_init_data){
1715 			.name = "gcc_npu_cfg_ahb_clk",
1716 			 /* required for npu */
1717 			.flags = CLK_IS_CRITICAL,
1718 			.ops = &clk_branch2_ops,
1719 		},
1720 	},
1721 };
1722 
1723 static struct clk_branch gcc_npu_gpll0_clk_src = {
1724 	.halt_check = BRANCH_HALT_SKIP,
1725 	.clkr = {
1726 		.enable_reg = 0x52004,
1727 		.enable_mask = BIT(18),
1728 		.hw.init = &(struct clk_init_data){
1729 			.name = "gcc_npu_gpll0_clk_src",
1730 			.parent_hws = (const struct clk_hw *[]){
1731 				&gpll0.clkr.hw },
1732 			.num_parents = 1,
1733 			.flags = CLK_SET_RATE_PARENT,
1734 			.ops = &clk_branch2_ops,
1735 		},
1736 	},
1737 };
1738 
1739 static struct clk_branch gcc_npu_gpll0_div_clk_src = {
1740 	.halt_check = BRANCH_HALT_SKIP,
1741 	.clkr = {
1742 		.enable_reg = 0x52004,
1743 		.enable_mask = BIT(19),
1744 		.hw.init = &(struct clk_init_data){
1745 			.name = "gcc_npu_gpll0_div_clk_src",
1746 			.parent_hws = (const struct clk_hw *[]){
1747 				&gpll0_out_even.clkr.hw },
1748 			.num_parents = 1,
1749 			.flags = CLK_SET_RATE_PARENT,
1750 			.ops = &clk_branch2_ops,
1751 		},
1752 	},
1753 };
1754 
1755 static struct clk_branch gcc_npu_trig_clk = {
1756 	.halt_reg = 0x4d00c,
1757 	.halt_check = BRANCH_VOTED,
1758 	.clkr = {
1759 		.enable_reg = 0x4d00c,
1760 		.enable_mask = BIT(0),
1761 		.hw.init = &(struct clk_init_data){
1762 			.name = "gcc_npu_trig_clk",
1763 			.ops = &clk_branch2_ops,
1764 		},
1765 	},
1766 };
1767 
1768 static struct clk_branch gcc_pcie0_phy_refgen_clk = {
1769 	.halt_reg = 0x6f02c,
1770 	.halt_check = BRANCH_HALT,
1771 	.clkr = {
1772 		.enable_reg = 0x6f02c,
1773 		.enable_mask = BIT(0),
1774 		.hw.init = &(struct clk_init_data){
1775 			.name = "gcc_pcie0_phy_refgen_clk",
1776 			.parent_hws = (const struct clk_hw *[]){
1777 				      &gcc_pcie_phy_refgen_clk_src.clkr.hw },
1778 			.num_parents = 1,
1779 			.flags = CLK_SET_RATE_PARENT,
1780 			.ops = &clk_branch2_ops,
1781 		},
1782 	},
1783 };
1784 
1785 static struct clk_branch gcc_pcie1_phy_refgen_clk = {
1786 	.halt_reg = 0x6f030,
1787 	.halt_check = BRANCH_HALT,
1788 	.clkr = {
1789 		.enable_reg = 0x6f030,
1790 		.enable_mask = BIT(0),
1791 		.hw.init = &(struct clk_init_data){
1792 			.name = "gcc_pcie1_phy_refgen_clk",
1793 			.parent_hws = (const struct clk_hw *[]){
1794 				      &gcc_pcie_phy_refgen_clk_src.clkr.hw },
1795 			.num_parents = 1,
1796 			.flags = CLK_SET_RATE_PARENT,
1797 			.ops = &clk_branch2_ops,
1798 		},
1799 	},
1800 };
1801 
1802 static struct clk_branch gcc_pcie_0_aux_clk = {
1803 	.halt_reg = 0x6b020,
1804 	.halt_check = BRANCH_HALT_VOTED,
1805 	.clkr = {
1806 		.enable_reg = 0x5200c,
1807 		.enable_mask = BIT(3),
1808 		.hw.init = &(struct clk_init_data){
1809 			.name = "gcc_pcie_0_aux_clk",
1810 			.parent_hws = (const struct clk_hw *[]){
1811 				      &gcc_pcie_0_aux_clk_src.clkr.hw },
1812 			.num_parents = 1,
1813 			.flags = CLK_SET_RATE_PARENT,
1814 			.ops = &clk_branch2_ops,
1815 		},
1816 	},
1817 };
1818 
1819 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
1820 	.halt_reg = 0x6b01c,
1821 	.halt_check = BRANCH_HALT_VOTED,
1822 	.hwcg_reg = 0x6b01c,
1823 	.hwcg_bit = 1,
1824 	.clkr = {
1825 		.enable_reg = 0x5200c,
1826 		.enable_mask = BIT(2),
1827 		.hw.init = &(struct clk_init_data){
1828 			.name = "gcc_pcie_0_cfg_ahb_clk",
1829 			.ops = &clk_branch2_ops,
1830 		},
1831 	},
1832 };
1833 
1834 static struct clk_branch gcc_pcie_0_clkref_clk = {
1835 	.halt_reg = 0x8c00c,
1836 	.halt_check = BRANCH_HALT,
1837 	.clkr = {
1838 		.enable_reg = 0x8c00c,
1839 		.enable_mask = BIT(0),
1840 		.hw.init = &(struct clk_init_data){
1841 			.name = "gcc_pcie_0_clkref_clk",
1842 			.ops = &clk_branch2_ops,
1843 		},
1844 	},
1845 };
1846 
1847 static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
1848 	.halt_reg = 0x6b018,
1849 	.halt_check = BRANCH_HALT_VOTED,
1850 	.clkr = {
1851 		.enable_reg = 0x5200c,
1852 		.enable_mask = BIT(1),
1853 		.hw.init = &(struct clk_init_data){
1854 			.name = "gcc_pcie_0_mstr_axi_clk",
1855 			.ops = &clk_branch2_ops,
1856 		},
1857 	},
1858 };
1859 
1860 /* Clock ON depends on external parent 'PIPE' clock, so dont poll */
1861 static struct clk_branch gcc_pcie_0_pipe_clk = {
1862 	.halt_reg = 0x6b024,
1863 	.halt_check = BRANCH_HALT_DELAY,
1864 	.clkr = {
1865 		.enable_reg = 0x5200c,
1866 		.enable_mask = BIT(4),
1867 		.hw.init = &(struct clk_init_data){
1868 			.name = "gcc_pcie_0_pipe_clk",
1869 			.ops = &clk_branch2_ops,
1870 		},
1871 	},
1872 };
1873 
1874 static struct clk_branch gcc_pcie_0_slv_axi_clk = {
1875 	.halt_reg = 0x6b014,
1876 	.halt_check = BRANCH_HALT_VOTED,
1877 	.hwcg_reg = 0x6b014,
1878 	.hwcg_bit = 1,
1879 	.clkr = {
1880 		.enable_reg = 0x5200c,
1881 		.enable_mask = BIT(0),
1882 		.hw.init = &(struct clk_init_data){
1883 			.name = "gcc_pcie_0_slv_axi_clk",
1884 			.ops = &clk_branch2_ops,
1885 		},
1886 	},
1887 };
1888 
1889 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
1890 	.halt_reg = 0x6b010,
1891 	.halt_check = BRANCH_HALT_VOTED,
1892 	.clkr = {
1893 		.enable_reg = 0x5200c,
1894 		.enable_mask = BIT(5),
1895 		.hw.init = &(struct clk_init_data){
1896 			.name = "gcc_pcie_0_slv_q2a_axi_clk",
1897 			.ops = &clk_branch2_ops,
1898 		},
1899 	},
1900 };
1901 
1902 static struct clk_branch gcc_pcie_1_aux_clk = {
1903 	.halt_reg = 0x8d020,
1904 	.halt_check = BRANCH_HALT_VOTED,
1905 	.clkr = {
1906 		.enable_reg = 0x52004,
1907 		.enable_mask = BIT(29),
1908 		.hw.init = &(struct clk_init_data){
1909 			.name = "gcc_pcie_1_aux_clk",
1910 			.parent_hws = (const struct clk_hw *[]){
1911 				      &gcc_pcie_1_aux_clk_src.clkr.hw },
1912 			.num_parents = 1,
1913 			.flags = CLK_SET_RATE_PARENT,
1914 			.ops = &clk_branch2_ops,
1915 		},
1916 	},
1917 };
1918 
1919 static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
1920 	.halt_reg = 0x8d01c,
1921 	.halt_check = BRANCH_HALT_VOTED,
1922 	.hwcg_reg = 0x8d01c,
1923 	.hwcg_bit = 1,
1924 	.clkr = {
1925 		.enable_reg = 0x52004,
1926 		.enable_mask = BIT(28),
1927 		.hw.init = &(struct clk_init_data){
1928 			.name = "gcc_pcie_1_cfg_ahb_clk",
1929 			.ops = &clk_branch2_ops,
1930 		},
1931 	},
1932 };
1933 
1934 static struct clk_branch gcc_pcie_1_clkref_clk = {
1935 	.halt_reg = 0x8c02c,
1936 	.halt_check = BRANCH_HALT,
1937 	.clkr = {
1938 		.enable_reg = 0x8c02c,
1939 		.enable_mask = BIT(0),
1940 		.hw.init = &(struct clk_init_data){
1941 			.name = "gcc_pcie_1_clkref_clk",
1942 			.ops = &clk_branch2_ops,
1943 		},
1944 	},
1945 };
1946 
1947 static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
1948 	.halt_reg = 0x8d018,
1949 	.halt_check = BRANCH_HALT_VOTED,
1950 	.clkr = {
1951 		.enable_reg = 0x52004,
1952 		.enable_mask = BIT(27),
1953 		.hw.init = &(struct clk_init_data){
1954 			.name = "gcc_pcie_1_mstr_axi_clk",
1955 			.ops = &clk_branch2_ops,
1956 		},
1957 	},
1958 };
1959 
1960 /* Clock ON depends on external parent 'PIPE' clock, so dont poll */
1961 static struct clk_branch gcc_pcie_1_pipe_clk = {
1962 	.halt_reg = 0x8d024,
1963 	.halt_check = BRANCH_HALT_DELAY,
1964 	.clkr = {
1965 		.enable_reg = 0x52004,
1966 		.enable_mask = BIT(30),
1967 		.hw.init = &(struct clk_init_data){
1968 			.name = "gcc_pcie_1_pipe_clk",
1969 			.ops = &clk_branch2_ops,
1970 		},
1971 	},
1972 };
1973 
1974 static struct clk_branch gcc_pcie_1_slv_axi_clk = {
1975 	.halt_reg = 0x8d014,
1976 	.halt_check = BRANCH_HALT_VOTED,
1977 	.hwcg_reg = 0x8d014,
1978 	.hwcg_bit = 1,
1979 	.clkr = {
1980 		.enable_reg = 0x52004,
1981 		.enable_mask = BIT(26),
1982 		.hw.init = &(struct clk_init_data){
1983 			.name = "gcc_pcie_1_slv_axi_clk",
1984 			.ops = &clk_branch2_ops,
1985 		},
1986 	},
1987 };
1988 
1989 static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = {
1990 	.halt_reg = 0x8d010,
1991 	.halt_check = BRANCH_HALT_VOTED,
1992 	.clkr = {
1993 		.enable_reg = 0x52004,
1994 		.enable_mask = BIT(25),
1995 		.hw.init = &(struct clk_init_data){
1996 			.name = "gcc_pcie_1_slv_q2a_axi_clk",
1997 			.ops = &clk_branch2_ops,
1998 		},
1999 	},
2000 };
2001 
2002 static struct clk_branch gcc_pcie_phy_aux_clk = {
2003 	.halt_reg = 0x6f004,
2004 	.halt_check = BRANCH_HALT,
2005 	.clkr = {
2006 		.enable_reg = 0x6f004,
2007 		.enable_mask = BIT(0),
2008 		.hw.init = &(struct clk_init_data){
2009 			.name = "gcc_pcie_phy_aux_clk",
2010 			.parent_hws = (const struct clk_hw *[]){
2011 				      &gcc_pcie_0_aux_clk_src.clkr.hw },
2012 			.num_parents = 1,
2013 			.flags = CLK_SET_RATE_PARENT,
2014 			.ops = &clk_branch2_ops,
2015 		},
2016 	},
2017 };
2018 
2019 static struct clk_branch gcc_pdm2_clk = {
2020 	.halt_reg = 0x3300c,
2021 	.halt_check = BRANCH_HALT,
2022 	.clkr = {
2023 		.enable_reg = 0x3300c,
2024 		.enable_mask = BIT(0),
2025 		.hw.init = &(struct clk_init_data){
2026 			.name = "gcc_pdm2_clk",
2027 			.parent_hws = (const struct clk_hw *[]){
2028 				      &gcc_pdm2_clk_src.clkr.hw },
2029 			.num_parents = 1,
2030 			.flags = CLK_SET_RATE_PARENT,
2031 			.ops = &clk_branch2_ops,
2032 		},
2033 	},
2034 };
2035 
2036 static struct clk_branch gcc_pdm_ahb_clk = {
2037 	.halt_reg = 0x33004,
2038 	.halt_check = BRANCH_HALT,
2039 	.hwcg_reg = 0x33004,
2040 	.hwcg_bit = 1,
2041 	.clkr = {
2042 		.enable_reg = 0x33004,
2043 		.enable_mask = BIT(0),
2044 		.hw.init = &(struct clk_init_data){
2045 			.name = "gcc_pdm_ahb_clk",
2046 			.ops = &clk_branch2_ops,
2047 		},
2048 	},
2049 };
2050 
2051 static struct clk_branch gcc_pdm_xo4_clk = {
2052 	.halt_reg = 0x33008,
2053 	.halt_check = BRANCH_HALT,
2054 	.clkr = {
2055 		.enable_reg = 0x33008,
2056 		.enable_mask = BIT(0),
2057 		.hw.init = &(struct clk_init_data){
2058 			.name = "gcc_pdm_xo4_clk",
2059 			.ops = &clk_branch2_ops,
2060 		},
2061 	},
2062 };
2063 
2064 static struct clk_branch gcc_prng_ahb_clk = {
2065 	.halt_reg = 0x34004,
2066 	.halt_check = BRANCH_HALT_VOTED,
2067 	.clkr = {
2068 		.enable_reg = 0x52004,
2069 		.enable_mask = BIT(13),
2070 		.hw.init = &(struct clk_init_data){
2071 			.name = "gcc_prng_ahb_clk",
2072 			.ops = &clk_branch2_ops,
2073 		},
2074 	},
2075 };
2076 
2077 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
2078 	.halt_reg = 0xb018,
2079 	.halt_check = BRANCH_HALT,
2080 	.hwcg_reg = 0xb018,
2081 	.hwcg_bit = 1,
2082 	.clkr = {
2083 		.enable_reg = 0xb018,
2084 		.enable_mask = BIT(0),
2085 		.hw.init = &(struct clk_init_data){
2086 			.name = "gcc_qmip_camera_nrt_ahb_clk",
2087 			.ops = &clk_branch2_ops,
2088 		},
2089 	},
2090 };
2091 
2092 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
2093 	.halt_reg = 0xb01c,
2094 	.halt_check = BRANCH_HALT,
2095 	.hwcg_reg = 0xb01c,
2096 	.hwcg_bit = 1,
2097 	.clkr = {
2098 		.enable_reg = 0xb01c,
2099 		.enable_mask = BIT(0),
2100 		.hw.init = &(struct clk_init_data){
2101 			.name = "gcc_qmip_camera_rt_ahb_clk",
2102 			.ops = &clk_branch2_ops,
2103 		},
2104 	},
2105 };
2106 
2107 static struct clk_branch gcc_qmip_disp_ahb_clk = {
2108 	.halt_reg = 0xb020,
2109 	.halt_check = BRANCH_HALT,
2110 	.hwcg_reg = 0xb020,
2111 	.hwcg_bit = 1,
2112 	.clkr = {
2113 		.enable_reg = 0xb020,
2114 		.enable_mask = BIT(0),
2115 		.hw.init = &(struct clk_init_data){
2116 			.name = "gcc_qmip_disp_ahb_clk",
2117 			.ops = &clk_branch2_ops,
2118 		},
2119 	},
2120 };
2121 
2122 static struct clk_branch gcc_qmip_video_cvp_ahb_clk = {
2123 	.halt_reg = 0xb010,
2124 	.halt_check = BRANCH_HALT,
2125 	.hwcg_reg = 0xb010,
2126 	.hwcg_bit = 1,
2127 	.clkr = {
2128 		.enable_reg = 0xb010,
2129 		.enable_mask = BIT(0),
2130 		.hw.init = &(struct clk_init_data){
2131 			.name = "gcc_qmip_video_cvp_ahb_clk",
2132 			.ops = &clk_branch2_ops,
2133 		},
2134 	},
2135 };
2136 
2137 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
2138 	.halt_reg = 0xb014,
2139 	.halt_check = BRANCH_HALT,
2140 	.hwcg_reg = 0xb014,
2141 	.hwcg_bit = 1,
2142 	.clkr = {
2143 		.enable_reg = 0xb014,
2144 		.enable_mask = BIT(0),
2145 		.hw.init = &(struct clk_init_data){
2146 			.name = "gcc_qmip_video_vcodec_ahb_clk",
2147 			.ops = &clk_branch2_ops,
2148 		},
2149 	},
2150 };
2151 
2152 static struct clk_branch gcc_qspi_cnoc_periph_ahb_clk = {
2153 	.halt_reg = 0x4b000,
2154 	.halt_check = BRANCH_HALT,
2155 	.clkr = {
2156 		.enable_reg = 0x4b000,
2157 		.enable_mask = BIT(0),
2158 		.hw.init = &(struct clk_init_data){
2159 			.name = "gcc_qspi_cnoc_periph_ahb_clk",
2160 			.ops = &clk_branch2_ops,
2161 		},
2162 	},
2163 };
2164 
2165 static struct clk_branch gcc_qspi_core_clk = {
2166 	.halt_reg = 0x4b004,
2167 	.halt_check = BRANCH_HALT,
2168 	.clkr = {
2169 		.enable_reg = 0x4b004,
2170 		.enable_mask = BIT(0),
2171 		.hw.init = &(struct clk_init_data){
2172 			.name = "gcc_qspi_core_clk",
2173 			.parent_hws = (const struct clk_hw *[]){
2174 				      &gcc_qspi_core_clk_src.clkr.hw },
2175 			.num_parents = 1,
2176 			.flags = CLK_SET_RATE_PARENT,
2177 			.ops = &clk_branch2_ops,
2178 		},
2179 	},
2180 };
2181 
2182 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
2183 	.halt_reg = 0x17144,
2184 	.halt_check = BRANCH_HALT_VOTED,
2185 	.clkr = {
2186 		.enable_reg = 0x5200c,
2187 		.enable_mask = BIT(10),
2188 		.hw.init = &(struct clk_init_data){
2189 			.name = "gcc_qupv3_wrap0_s0_clk",
2190 			.parent_hws = (const struct clk_hw *[]){
2191 				      &gcc_qupv3_wrap0_s0_clk_src.clkr.hw },
2192 			.num_parents = 1,
2193 			.flags = CLK_SET_RATE_PARENT,
2194 			.ops = &clk_branch2_ops,
2195 		},
2196 	},
2197 };
2198 
2199 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
2200 	.halt_reg = 0x17274,
2201 	.halt_check = BRANCH_HALT_VOTED,
2202 	.clkr = {
2203 		.enable_reg = 0x5200c,
2204 		.enable_mask = BIT(11),
2205 		.hw.init = &(struct clk_init_data){
2206 			.name = "gcc_qupv3_wrap0_s1_clk",
2207 			.parent_hws = (const struct clk_hw *[]){
2208 				      &gcc_qupv3_wrap0_s1_clk_src.clkr.hw },
2209 			.num_parents = 1,
2210 			.flags = CLK_SET_RATE_PARENT,
2211 			.ops = &clk_branch2_ops,
2212 		},
2213 	},
2214 };
2215 
2216 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
2217 	.halt_reg = 0x173a4,
2218 	.halt_check = BRANCH_HALT_VOTED,
2219 	.clkr = {
2220 		.enable_reg = 0x5200c,
2221 		.enable_mask = BIT(12),
2222 		.hw.init = &(struct clk_init_data){
2223 			.name = "gcc_qupv3_wrap0_s2_clk",
2224 			.parent_hws = (const struct clk_hw *[]){
2225 				      &gcc_qupv3_wrap0_s2_clk_src.clkr.hw },
2226 			.num_parents = 1,
2227 			.flags = CLK_SET_RATE_PARENT,
2228 			.ops = &clk_branch2_ops,
2229 		},
2230 	},
2231 };
2232 
2233 static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
2234 	.halt_reg = 0x174d4,
2235 	.halt_check = BRANCH_HALT_VOTED,
2236 	.clkr = {
2237 		.enable_reg = 0x5200c,
2238 		.enable_mask = BIT(13),
2239 		.hw.init = &(struct clk_init_data){
2240 			.name = "gcc_qupv3_wrap0_s3_clk",
2241 			.parent_hws = (const struct clk_hw *[]){
2242 				      &gcc_qupv3_wrap0_s3_clk_src.clkr.hw },
2243 			.num_parents = 1,
2244 			.flags = CLK_SET_RATE_PARENT,
2245 			.ops = &clk_branch2_ops,
2246 		},
2247 	},
2248 };
2249 
2250 static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
2251 	.halt_reg = 0x17604,
2252 	.halt_check = BRANCH_HALT_VOTED,
2253 	.clkr = {
2254 		.enable_reg = 0x5200c,
2255 		.enable_mask = BIT(14),
2256 		.hw.init = &(struct clk_init_data){
2257 			.name = "gcc_qupv3_wrap0_s4_clk",
2258 			.parent_hws = (const struct clk_hw *[]){
2259 				      &gcc_qupv3_wrap0_s4_clk_src.clkr.hw },
2260 			.num_parents = 1,
2261 			.flags = CLK_SET_RATE_PARENT,
2262 			.ops = &clk_branch2_ops,
2263 		},
2264 	},
2265 };
2266 
2267 static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
2268 	.halt_reg = 0x17734,
2269 	.halt_check = BRANCH_HALT_VOTED,
2270 	.clkr = {
2271 		.enable_reg = 0x5200c,
2272 		.enable_mask = BIT(15),
2273 		.hw.init = &(struct clk_init_data){
2274 			.name = "gcc_qupv3_wrap0_s5_clk",
2275 			.parent_hws = (const struct clk_hw *[]){
2276 				      &gcc_qupv3_wrap0_s5_clk_src.clkr.hw },
2277 			.num_parents = 1,
2278 			.flags = CLK_SET_RATE_PARENT,
2279 			.ops = &clk_branch2_ops,
2280 		},
2281 	},
2282 };
2283 
2284 static struct clk_branch gcc_qupv3_wrap0_s6_clk = {
2285 	.halt_reg = 0x17864,
2286 	.halt_check = BRANCH_HALT_VOTED,
2287 	.clkr = {
2288 		.enable_reg = 0x5200c,
2289 		.enable_mask = BIT(16),
2290 		.hw.init = &(struct clk_init_data){
2291 			.name = "gcc_qupv3_wrap0_s6_clk",
2292 			.parent_hws = (const struct clk_hw *[]){
2293 				      &gcc_qupv3_wrap0_s6_clk_src.clkr.hw },
2294 			.num_parents = 1,
2295 			.flags = CLK_SET_RATE_PARENT,
2296 			.ops = &clk_branch2_ops,
2297 		},
2298 	},
2299 };
2300 
2301 static struct clk_branch gcc_qupv3_wrap0_s7_clk = {
2302 	.halt_reg = 0x17994,
2303 	.halt_check = BRANCH_HALT_VOTED,
2304 	.clkr = {
2305 		.enable_reg = 0x5200c,
2306 		.enable_mask = BIT(17),
2307 		.hw.init = &(struct clk_init_data){
2308 			.name = "gcc_qupv3_wrap0_s7_clk",
2309 			.parent_hws = (const struct clk_hw *[]){
2310 				      &gcc_qupv3_wrap0_s7_clk_src.clkr.hw },
2311 			.num_parents = 1,
2312 			.flags = CLK_SET_RATE_PARENT,
2313 			.ops = &clk_branch2_ops,
2314 		},
2315 	},
2316 };
2317 
2318 static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
2319 	.halt_reg = 0x18144,
2320 	.halt_check = BRANCH_HALT_VOTED,
2321 	.clkr = {
2322 		.enable_reg = 0x5200c,
2323 		.enable_mask = BIT(22),
2324 		.hw.init = &(struct clk_init_data){
2325 			.name = "gcc_qupv3_wrap1_s0_clk",
2326 			.parent_hws = (const struct clk_hw *[]){
2327 				      &gcc_qupv3_wrap1_s0_clk_src.clkr.hw },
2328 			.num_parents = 1,
2329 			.flags = CLK_SET_RATE_PARENT,
2330 			.ops = &clk_branch2_ops,
2331 		},
2332 	},
2333 };
2334 
2335 static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
2336 	.halt_reg = 0x18274,
2337 	.halt_check = BRANCH_HALT_VOTED,
2338 	.clkr = {
2339 		.enable_reg = 0x5200c,
2340 		.enable_mask = BIT(23),
2341 		.hw.init = &(struct clk_init_data){
2342 			.name = "gcc_qupv3_wrap1_s1_clk",
2343 			.parent_hws = (const struct clk_hw *[]){
2344 				      &gcc_qupv3_wrap1_s1_clk_src.clkr.hw },
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_qupv3_wrap1_s2_clk = {
2353 	.halt_reg = 0x183a4,
2354 	.halt_check = BRANCH_HALT_VOTED,
2355 	.clkr = {
2356 		.enable_reg = 0x5200c,
2357 		.enable_mask = BIT(24),
2358 		.hw.init = &(struct clk_init_data){
2359 			.name = "gcc_qupv3_wrap1_s2_clk",
2360 			.parent_hws = (const struct clk_hw *[]){
2361 				      &gcc_qupv3_wrap1_s2_clk_src.clkr.hw },
2362 			.num_parents = 1,
2363 			.flags = CLK_SET_RATE_PARENT,
2364 			.ops = &clk_branch2_ops,
2365 		},
2366 	},
2367 };
2368 
2369 static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
2370 	.halt_reg = 0x184d4,
2371 	.halt_check = BRANCH_HALT_VOTED,
2372 	.clkr = {
2373 		.enable_reg = 0x5200c,
2374 		.enable_mask = BIT(25),
2375 		.hw.init = &(struct clk_init_data){
2376 			.name = "gcc_qupv3_wrap1_s3_clk",
2377 			.parent_hws = (const struct clk_hw *[]){
2378 				      &gcc_qupv3_wrap1_s3_clk_src.clkr.hw },
2379 			.num_parents = 1,
2380 			.flags = CLK_SET_RATE_PARENT,
2381 			.ops = &clk_branch2_ops,
2382 		},
2383 	},
2384 };
2385 
2386 static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
2387 	.halt_reg = 0x18604,
2388 	.halt_check = BRANCH_HALT_VOTED,
2389 	.clkr = {
2390 		.enable_reg = 0x5200c,
2391 		.enable_mask = BIT(26),
2392 		.hw.init = &(struct clk_init_data){
2393 			.name = "gcc_qupv3_wrap1_s4_clk",
2394 			.parent_hws = (const struct clk_hw *[]){
2395 				      &gcc_qupv3_wrap1_s4_clk_src.clkr.hw },
2396 			.num_parents = 1,
2397 			.flags = CLK_SET_RATE_PARENT,
2398 			.ops = &clk_branch2_ops,
2399 		},
2400 	},
2401 };
2402 
2403 static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
2404 	.halt_reg = 0x18734,
2405 	.halt_check = BRANCH_HALT_VOTED,
2406 	.clkr = {
2407 		.enable_reg = 0x5200c,
2408 		.enable_mask = BIT(27),
2409 		.hw.init = &(struct clk_init_data){
2410 			.name = "gcc_qupv3_wrap1_s5_clk",
2411 			.parent_hws = (const struct clk_hw *[]){
2412 				      &gcc_qupv3_wrap1_s5_clk_src.clkr.hw },
2413 			.num_parents = 1,
2414 			.flags = CLK_SET_RATE_PARENT,
2415 			.ops = &clk_branch2_ops,
2416 		},
2417 	},
2418 };
2419 
2420 static struct clk_branch gcc_qupv3_wrap2_s0_clk = {
2421 	.halt_reg = 0x1e144,
2422 	.halt_check = BRANCH_HALT_VOTED,
2423 	.clkr = {
2424 		.enable_reg = 0x52014,
2425 		.enable_mask = BIT(4),
2426 		.hw.init = &(struct clk_init_data){
2427 			.name = "gcc_qupv3_wrap2_s0_clk",
2428 			.parent_hws = (const struct clk_hw *[]){
2429 				      &gcc_qupv3_wrap2_s0_clk_src.clkr.hw },
2430 			.num_parents = 1,
2431 			.flags = CLK_SET_RATE_PARENT,
2432 			.ops = &clk_branch2_ops,
2433 		},
2434 	},
2435 };
2436 
2437 static struct clk_branch gcc_qupv3_wrap2_s1_clk = {
2438 	.halt_reg = 0x1e274,
2439 	.halt_check = BRANCH_HALT_VOTED,
2440 	.clkr = {
2441 		.enable_reg = 0x52014,
2442 		.enable_mask = BIT(5),
2443 		.hw.init = &(struct clk_init_data){
2444 			.name = "gcc_qupv3_wrap2_s1_clk",
2445 			.parent_hws = (const struct clk_hw *[]){
2446 				      &gcc_qupv3_wrap2_s1_clk_src.clkr.hw },
2447 			.num_parents = 1,
2448 			.flags = CLK_SET_RATE_PARENT,
2449 			.ops = &clk_branch2_ops,
2450 		},
2451 	},
2452 };
2453 
2454 static struct clk_branch gcc_qupv3_wrap2_s2_clk = {
2455 	.halt_reg = 0x1e3a4,
2456 	.halt_check = BRANCH_HALT_VOTED,
2457 	.clkr = {
2458 		.enable_reg = 0x52014,
2459 		.enable_mask = BIT(6),
2460 		.hw.init = &(struct clk_init_data){
2461 			.name = "gcc_qupv3_wrap2_s2_clk",
2462 			.parent_hws = (const struct clk_hw *[]){
2463 				      &gcc_qupv3_wrap2_s2_clk_src.clkr.hw },
2464 			.num_parents = 1,
2465 			.flags = CLK_SET_RATE_PARENT,
2466 			.ops = &clk_branch2_ops,
2467 		},
2468 	},
2469 };
2470 
2471 static struct clk_branch gcc_qupv3_wrap2_s3_clk = {
2472 	.halt_reg = 0x1e4d4,
2473 	.halt_check = BRANCH_HALT_VOTED,
2474 	.clkr = {
2475 		.enable_reg = 0x52014,
2476 		.enable_mask = BIT(7),
2477 		.hw.init = &(struct clk_init_data){
2478 			.name = "gcc_qupv3_wrap2_s3_clk",
2479 			.parent_hws = (const struct clk_hw *[]){
2480 				      &gcc_qupv3_wrap2_s3_clk_src.clkr.hw },
2481 			.num_parents = 1,
2482 			.flags = CLK_SET_RATE_PARENT,
2483 			.ops = &clk_branch2_ops,
2484 		},
2485 	},
2486 };
2487 
2488 static struct clk_branch gcc_qupv3_wrap2_s4_clk = {
2489 	.halt_reg = 0x1e604,
2490 	.halt_check = BRANCH_HALT_VOTED,
2491 	.clkr = {
2492 		.enable_reg = 0x52014,
2493 		.enable_mask = BIT(8),
2494 		.hw.init = &(struct clk_init_data){
2495 			.name = "gcc_qupv3_wrap2_s4_clk",
2496 			.parent_hws = (const struct clk_hw *[]){
2497 				      &gcc_qupv3_wrap2_s4_clk_src.clkr.hw },
2498 			.num_parents = 1,
2499 			.flags = CLK_SET_RATE_PARENT,
2500 			.ops = &clk_branch2_ops,
2501 		},
2502 	},
2503 };
2504 
2505 static struct clk_branch gcc_qupv3_wrap2_s5_clk = {
2506 	.halt_reg = 0x1e734,
2507 	.halt_check = BRANCH_HALT_VOTED,
2508 	.clkr = {
2509 		.enable_reg = 0x52014,
2510 		.enable_mask = BIT(9),
2511 		.hw.init = &(struct clk_init_data){
2512 			.name = "gcc_qupv3_wrap2_s5_clk",
2513 			.parent_hws = (const struct clk_hw *[]){
2514 				      &gcc_qupv3_wrap2_s5_clk_src.clkr.hw },
2515 			.num_parents = 1,
2516 			.flags = CLK_SET_RATE_PARENT,
2517 			.ops = &clk_branch2_ops,
2518 		},
2519 	},
2520 };
2521 
2522 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
2523 	.halt_reg = 0x17004,
2524 	.halt_check = BRANCH_HALT_VOTED,
2525 	.clkr = {
2526 		.enable_reg = 0x5200c,
2527 		.enable_mask = BIT(6),
2528 		.hw.init = &(struct clk_init_data){
2529 			.name = "gcc_qupv3_wrap_0_m_ahb_clk",
2530 			.ops = &clk_branch2_ops,
2531 		},
2532 	},
2533 };
2534 
2535 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
2536 	.halt_reg = 0x17008,
2537 	.halt_check = BRANCH_HALT_VOTED,
2538 	.hwcg_reg = 0x17008,
2539 	.hwcg_bit = 1,
2540 	.clkr = {
2541 		.enable_reg = 0x5200c,
2542 		.enable_mask = BIT(7),
2543 		.hw.init = &(struct clk_init_data){
2544 			.name = "gcc_qupv3_wrap_0_s_ahb_clk",
2545 			.ops = &clk_branch2_ops,
2546 		},
2547 	},
2548 };
2549 
2550 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
2551 	.halt_reg = 0x18004,
2552 	.halt_check = BRANCH_HALT_VOTED,
2553 	.clkr = {
2554 		.enable_reg = 0x5200c,
2555 		.enable_mask = BIT(20),
2556 		.hw.init = &(struct clk_init_data){
2557 			.name = "gcc_qupv3_wrap_1_m_ahb_clk",
2558 			.ops = &clk_branch2_ops,
2559 		},
2560 	},
2561 };
2562 
2563 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
2564 	.halt_reg = 0x18008,
2565 	.halt_check = BRANCH_HALT_VOTED,
2566 	.hwcg_reg = 0x18008,
2567 	.hwcg_bit = 1,
2568 	.clkr = {
2569 		.enable_reg = 0x5200c,
2570 		.enable_mask = BIT(21),
2571 		.hw.init = &(struct clk_init_data){
2572 			.name = "gcc_qupv3_wrap_1_s_ahb_clk",
2573 			.ops = &clk_branch2_ops,
2574 		},
2575 	},
2576 };
2577 
2578 static struct clk_branch gcc_qupv3_wrap_2_m_ahb_clk = {
2579 	.halt_reg = 0x1e004,
2580 	.halt_check = BRANCH_HALT_VOTED,
2581 	.clkr = {
2582 		.enable_reg = 0x52014,
2583 		.enable_mask = BIT(2),
2584 		.hw.init = &(struct clk_init_data){
2585 			.name = "gcc_qupv3_wrap_2_m_ahb_clk",
2586 			.ops = &clk_branch2_ops,
2587 		},
2588 	},
2589 };
2590 
2591 static struct clk_branch gcc_qupv3_wrap_2_s_ahb_clk = {
2592 	.halt_reg = 0x1e008,
2593 	.halt_check = BRANCH_HALT_VOTED,
2594 	.hwcg_reg = 0x1e008,
2595 	.hwcg_bit = 1,
2596 	.clkr = {
2597 		.enable_reg = 0x52014,
2598 		.enable_mask = BIT(1),
2599 		.hw.init = &(struct clk_init_data){
2600 			.name = "gcc_qupv3_wrap_2_s_ahb_clk",
2601 			.ops = &clk_branch2_ops,
2602 		},
2603 	},
2604 };
2605 
2606 static struct clk_branch gcc_sdcc2_ahb_clk = {
2607 	.halt_reg = 0x14008,
2608 	.halt_check = BRANCH_HALT,
2609 	.clkr = {
2610 		.enable_reg = 0x14008,
2611 		.enable_mask = BIT(0),
2612 		.hw.init = &(struct clk_init_data){
2613 			.name = "gcc_sdcc2_ahb_clk",
2614 			.ops = &clk_branch2_ops,
2615 		},
2616 	},
2617 };
2618 
2619 static struct clk_branch gcc_sdcc2_apps_clk = {
2620 	.halt_reg = 0x14004,
2621 	.halt_check = BRANCH_HALT,
2622 	.clkr = {
2623 		.enable_reg = 0x14004,
2624 		.enable_mask = BIT(0),
2625 		.hw.init = &(struct clk_init_data){
2626 			.name = "gcc_sdcc2_apps_clk",
2627 			.parent_hws = (const struct clk_hw *[]){
2628 				      &gcc_sdcc2_apps_clk_src.clkr.hw },
2629 			.num_parents = 1,
2630 			.flags = CLK_SET_RATE_PARENT,
2631 			.ops = &clk_branch2_ops,
2632 		},
2633 	},
2634 };
2635 
2636 static struct clk_branch gcc_sdcc4_ahb_clk = {
2637 	.halt_reg = 0x16008,
2638 	.halt_check = BRANCH_HALT,
2639 	.clkr = {
2640 		.enable_reg = 0x16008,
2641 		.enable_mask = BIT(0),
2642 		.hw.init = &(struct clk_init_data){
2643 			.name = "gcc_sdcc4_ahb_clk",
2644 			.ops = &clk_branch2_ops,
2645 		},
2646 	},
2647 };
2648 
2649 static struct clk_branch gcc_sdcc4_apps_clk = {
2650 	.halt_reg = 0x16004,
2651 	.halt_check = BRANCH_HALT,
2652 	.clkr = {
2653 		.enable_reg = 0x16004,
2654 		.enable_mask = BIT(0),
2655 		.hw.init = &(struct clk_init_data){
2656 			.name = "gcc_sdcc4_apps_clk",
2657 			.parent_hws = (const struct clk_hw *[]){
2658 				      &gcc_sdcc4_apps_clk_src.clkr.hw },
2659 			.num_parents = 1,
2660 			.flags = CLK_SET_RATE_PARENT,
2661 			.ops = &clk_branch2_ops,
2662 		},
2663 	},
2664 };
2665 
2666 static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {
2667 	.halt_reg = 0x4819c,
2668 	.halt_check = BRANCH_HALT_VOTED,
2669 	.clkr = {
2670 		.enable_reg = 0x52004,
2671 		.enable_mask = BIT(0),
2672 		.hw.init = &(struct clk_init_data){
2673 			.name = "gcc_sys_noc_cpuss_ahb_clk",
2674 			.parent_hws = (const struct clk_hw *[]){
2675 				      &gcc_cpuss_ahb_clk_src.clkr.hw },
2676 			.num_parents = 1,
2677 			/* required for cpuss */
2678 			.flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
2679 			.ops = &clk_branch2_ops,
2680 		},
2681 	},
2682 };
2683 
2684 static struct clk_branch gcc_tsif_ahb_clk = {
2685 	.halt_reg = 0x36004,
2686 	.halt_check = BRANCH_HALT,
2687 	.clkr = {
2688 		.enable_reg = 0x36004,
2689 		.enable_mask = BIT(0),
2690 		.hw.init = &(struct clk_init_data){
2691 			.name = "gcc_tsif_ahb_clk",
2692 			.ops = &clk_branch2_ops,
2693 		},
2694 	},
2695 };
2696 
2697 static struct clk_branch gcc_tsif_inactivity_timers_clk = {
2698 	.halt_reg = 0x3600c,
2699 	.halt_check = BRANCH_HALT,
2700 	.clkr = {
2701 		.enable_reg = 0x3600c,
2702 		.enable_mask = BIT(0),
2703 		.hw.init = &(struct clk_init_data){
2704 			.name = "gcc_tsif_inactivity_timers_clk",
2705 			.ops = &clk_branch2_ops,
2706 		},
2707 	},
2708 };
2709 
2710 static struct clk_branch gcc_tsif_ref_clk = {
2711 	.halt_reg = 0x36008,
2712 	.halt_check = BRANCH_HALT,
2713 	.clkr = {
2714 		.enable_reg = 0x36008,
2715 		.enable_mask = BIT(0),
2716 		.hw.init = &(struct clk_init_data){
2717 			.name = "gcc_tsif_ref_clk",
2718 			.parent_hws = (const struct clk_hw *[]){
2719 				      &gcc_tsif_ref_clk_src.clkr.hw },
2720 			.num_parents = 1,
2721 			.flags = CLK_SET_RATE_PARENT,
2722 			.ops = &clk_branch2_ops,
2723 		},
2724 	},
2725 };
2726 
2727 static struct clk_branch gcc_ufs_card_ahb_clk = {
2728 	.halt_reg = 0x75014,
2729 	.halt_check = BRANCH_HALT,
2730 	.hwcg_reg = 0x75014,
2731 	.hwcg_bit = 1,
2732 	.clkr = {
2733 		.enable_reg = 0x75014,
2734 		.enable_mask = BIT(0),
2735 		.hw.init = &(struct clk_init_data){
2736 			.name = "gcc_ufs_card_ahb_clk",
2737 			.ops = &clk_branch2_ops,
2738 		},
2739 	},
2740 };
2741 
2742 static struct clk_branch gcc_ufs_card_axi_clk = {
2743 	.halt_reg = 0x75010,
2744 	.halt_check = BRANCH_HALT,
2745 	.hwcg_reg = 0x75010,
2746 	.hwcg_bit = 1,
2747 	.clkr = {
2748 		.enable_reg = 0x75010,
2749 		.enable_mask = BIT(0),
2750 		.hw.init = &(struct clk_init_data){
2751 			.name = "gcc_ufs_card_axi_clk",
2752 			.parent_hws = (const struct clk_hw *[]){
2753 				      &gcc_ufs_card_axi_clk_src.clkr.hw },
2754 			.num_parents = 1,
2755 			.flags = CLK_SET_RATE_PARENT,
2756 			.ops = &clk_branch2_ops,
2757 		},
2758 	},
2759 };
2760 
2761 static struct clk_branch gcc_ufs_card_axi_hw_ctl_clk = {
2762 	.halt_reg = 0x75010,
2763 	.halt_check = BRANCH_HALT,
2764 	.hwcg_reg = 0x75010,
2765 	.hwcg_bit = 1,
2766 	.clkr = {
2767 		.enable_reg = 0x75010,
2768 		.enable_mask = BIT(1),
2769 		.hw.init = &(struct clk_init_data){
2770 			.name = "gcc_ufs_card_axi_hw_ctl_clk",
2771 			.parent_hws = (const struct clk_hw *[]){
2772 				      &gcc_ufs_card_axi_clk.clkr.hw },
2773 			.num_parents = 1,
2774 			.flags = CLK_SET_RATE_PARENT,
2775 			.ops = &clk_branch_simple_ops,
2776 		},
2777 	},
2778 };
2779 
2780 static struct clk_branch gcc_ufs_card_clkref_clk = {
2781 	.halt_reg = 0x8c004,
2782 	.halt_check = BRANCH_HALT,
2783 	.clkr = {
2784 		.enable_reg = 0x8c004,
2785 		.enable_mask = BIT(0),
2786 		.hw.init = &(struct clk_init_data){
2787 			.name = "gcc_ufs_card_clkref_clk",
2788 			.ops = &clk_branch2_ops,
2789 		},
2790 	},
2791 };
2792 
2793 static struct clk_branch gcc_ufs_card_ice_core_clk = {
2794 	.halt_reg = 0x7505c,
2795 	.halt_check = BRANCH_HALT,
2796 	.hwcg_reg = 0x7505c,
2797 	.hwcg_bit = 1,
2798 	.clkr = {
2799 		.enable_reg = 0x7505c,
2800 		.enable_mask = BIT(0),
2801 		.hw.init = &(struct clk_init_data){
2802 			.name = "gcc_ufs_card_ice_core_clk",
2803 			.parent_hws = (const struct clk_hw *[]){
2804 				      &gcc_ufs_card_ice_core_clk_src.clkr.hw },
2805 			.num_parents = 1,
2806 			.flags = CLK_SET_RATE_PARENT,
2807 			.ops = &clk_branch2_ops,
2808 		},
2809 	},
2810 };
2811 
2812 static struct clk_branch gcc_ufs_card_ice_core_hw_ctl_clk = {
2813 	.halt_reg = 0x7505c,
2814 	.halt_check = BRANCH_HALT,
2815 	.hwcg_reg = 0x7505c,
2816 	.hwcg_bit = 1,
2817 	.clkr = {
2818 		.enable_reg = 0x7505c,
2819 		.enable_mask = BIT(1),
2820 		.hw.init = &(struct clk_init_data){
2821 			.name = "gcc_ufs_card_ice_core_hw_ctl_clk",
2822 			.parent_hws = (const struct clk_hw *[]){
2823 				      &gcc_ufs_card_ice_core_clk.clkr.hw },
2824 			.num_parents = 1,
2825 			.flags = CLK_SET_RATE_PARENT,
2826 			.ops = &clk_branch_simple_ops,
2827 		},
2828 	},
2829 };
2830 
2831 static struct clk_branch gcc_ufs_card_phy_aux_clk = {
2832 	.halt_reg = 0x75090,
2833 	.halt_check = BRANCH_HALT,
2834 	.hwcg_reg = 0x75090,
2835 	.hwcg_bit = 1,
2836 	.clkr = {
2837 		.enable_reg = 0x75090,
2838 		.enable_mask = BIT(0),
2839 		.hw.init = &(struct clk_init_data){
2840 			.name = "gcc_ufs_card_phy_aux_clk",
2841 			.parent_hws = (const struct clk_hw *[]){
2842 				      &gcc_ufs_card_phy_aux_clk_src.clkr.hw },
2843 			.num_parents = 1,
2844 			.flags = CLK_SET_RATE_PARENT,
2845 			.ops = &clk_branch2_ops,
2846 		},
2847 	},
2848 };
2849 
2850 static struct clk_branch gcc_ufs_card_phy_aux_hw_ctl_clk = {
2851 	.halt_reg = 0x75090,
2852 	.halt_check = BRANCH_HALT,
2853 	.hwcg_reg = 0x75090,
2854 	.hwcg_bit = 1,
2855 	.clkr = {
2856 		.enable_reg = 0x75090,
2857 		.enable_mask = BIT(1),
2858 		.hw.init = &(struct clk_init_data){
2859 			.name = "gcc_ufs_card_phy_aux_hw_ctl_clk",
2860 			.parent_hws = (const struct clk_hw *[]){
2861 				      &gcc_ufs_card_phy_aux_clk.clkr.hw },
2862 			.num_parents = 1,
2863 			.flags = CLK_SET_RATE_PARENT,
2864 			.ops = &clk_branch_simple_ops,
2865 		},
2866 	},
2867 };
2868 
2869 /* external clocks so add BRANCH_HALT_SKIP */
2870 static struct clk_branch gcc_ufs_card_rx_symbol_0_clk = {
2871 	.halt_check = BRANCH_HALT_SKIP,
2872 	.clkr = {
2873 		.enable_reg = 0x7501c,
2874 		.enable_mask = BIT(0),
2875 		.hw.init = &(struct clk_init_data){
2876 			.name = "gcc_ufs_card_rx_symbol_0_clk",
2877 			.ops = &clk_branch2_ops,
2878 		},
2879 	},
2880 };
2881 
2882 /* external clocks so add BRANCH_HALT_SKIP */
2883 static struct clk_branch gcc_ufs_card_rx_symbol_1_clk = {
2884 	.halt_check = BRANCH_HALT_SKIP,
2885 	.clkr = {
2886 		.enable_reg = 0x750ac,
2887 		.enable_mask = BIT(0),
2888 		.hw.init = &(struct clk_init_data){
2889 			.name = "gcc_ufs_card_rx_symbol_1_clk",
2890 			.ops = &clk_branch2_ops,
2891 		},
2892 	},
2893 };
2894 
2895 /* external clocks so add BRANCH_HALT_SKIP */
2896 static struct clk_branch gcc_ufs_card_tx_symbol_0_clk = {
2897 	.halt_check = BRANCH_HALT_SKIP,
2898 	.clkr = {
2899 		.enable_reg = 0x75018,
2900 		.enable_mask = BIT(0),
2901 		.hw.init = &(struct clk_init_data){
2902 			.name = "gcc_ufs_card_tx_symbol_0_clk",
2903 			.ops = &clk_branch2_ops,
2904 		},
2905 	},
2906 };
2907 
2908 static struct clk_branch gcc_ufs_card_unipro_core_clk = {
2909 	.halt_reg = 0x75058,
2910 	.halt_check = BRANCH_HALT,
2911 	.hwcg_reg = 0x75058,
2912 	.hwcg_bit = 1,
2913 	.clkr = {
2914 		.enable_reg = 0x75058,
2915 		.enable_mask = BIT(0),
2916 		.hw.init = &(struct clk_init_data){
2917 			.name = "gcc_ufs_card_unipro_core_clk",
2918 			.parent_hws = (const struct clk_hw *[]){
2919 				&gcc_ufs_card_unipro_core_clk_src.clkr.hw },
2920 			.num_parents = 1,
2921 			.flags = CLK_SET_RATE_PARENT,
2922 			.ops = &clk_branch2_ops,
2923 		},
2924 	},
2925 };
2926 
2927 static struct clk_branch gcc_ufs_card_unipro_core_hw_ctl_clk = {
2928 	.halt_reg = 0x75058,
2929 	.halt_check = BRANCH_HALT,
2930 	.hwcg_reg = 0x75058,
2931 	.hwcg_bit = 1,
2932 	.clkr = {
2933 		.enable_reg = 0x75058,
2934 		.enable_mask = BIT(1),
2935 		.hw.init = &(struct clk_init_data){
2936 			.name = "gcc_ufs_card_unipro_core_hw_ctl_clk",
2937 			.parent_hws = (const struct clk_hw *[]){
2938 				      &gcc_ufs_card_unipro_core_clk.clkr.hw },
2939 			.num_parents = 1,
2940 			.flags = CLK_SET_RATE_PARENT,
2941 			.ops = &clk_branch_simple_ops,
2942 		},
2943 	},
2944 };
2945 
2946 static struct clk_branch gcc_ufs_mem_clkref_clk = {
2947 	.halt_reg = 0x8c000,
2948 	.halt_check = BRANCH_HALT,
2949 	.clkr = {
2950 		.enable_reg = 0x8c000,
2951 		.enable_mask = BIT(0),
2952 		.hw.init = &(struct clk_init_data){
2953 			.name = "gcc_ufs_mem_clkref_clk",
2954 			.ops = &clk_branch2_ops,
2955 		},
2956 	},
2957 };
2958 
2959 static struct clk_branch gcc_ufs_phy_ahb_clk = {
2960 	.halt_reg = 0x77014,
2961 	.halt_check = BRANCH_HALT,
2962 	.hwcg_reg = 0x77014,
2963 	.hwcg_bit = 1,
2964 	.clkr = {
2965 		.enable_reg = 0x77014,
2966 		.enable_mask = BIT(0),
2967 		.hw.init = &(struct clk_init_data){
2968 			.name = "gcc_ufs_phy_ahb_clk",
2969 			.ops = &clk_branch2_ops,
2970 		},
2971 	},
2972 };
2973 
2974 static struct clk_branch gcc_ufs_phy_axi_clk = {
2975 	.halt_reg = 0x77010,
2976 	.halt_check = BRANCH_HALT,
2977 	.hwcg_reg = 0x77010,
2978 	.hwcg_bit = 1,
2979 	.clkr = {
2980 		.enable_reg = 0x77010,
2981 		.enable_mask = BIT(0),
2982 		.hw.init = &(struct clk_init_data){
2983 			.name = "gcc_ufs_phy_axi_clk",
2984 			.parent_hws = (const struct clk_hw *[]){
2985 				&gcc_ufs_phy_axi_clk_src.clkr.hw },
2986 			.num_parents = 1,
2987 			.flags = CLK_SET_RATE_PARENT,
2988 			.ops = &clk_branch2_ops,
2989 		},
2990 	},
2991 };
2992 
2993 static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = {
2994 	.halt_reg = 0x77010,
2995 	.halt_check = BRANCH_HALT,
2996 	.hwcg_reg = 0x77010,
2997 	.hwcg_bit = 1,
2998 	.clkr = {
2999 		.enable_reg = 0x77010,
3000 		.enable_mask = BIT(1),
3001 		.hw.init = &(struct clk_init_data){
3002 			.name = "gcc_ufs_phy_axi_hw_ctl_clk",
3003 			.parent_hws = (const struct clk_hw *[]){
3004 				      &gcc_ufs_phy_axi_clk.clkr.hw },
3005 			.num_parents = 1,
3006 			.flags = CLK_SET_RATE_PARENT,
3007 			.ops = &clk_branch_simple_ops,
3008 		},
3009 	},
3010 };
3011 
3012 static struct clk_branch gcc_ufs_phy_ice_core_clk = {
3013 	.halt_reg = 0x7705c,
3014 	.halt_check = BRANCH_HALT,
3015 	.hwcg_reg = 0x7705c,
3016 	.hwcg_bit = 1,
3017 	.clkr = {
3018 		.enable_reg = 0x7705c,
3019 		.enable_mask = BIT(0),
3020 		.hw.init = &(struct clk_init_data){
3021 			.name = "gcc_ufs_phy_ice_core_clk",
3022 			.parent_hws = (const struct clk_hw *[]){
3023 				      &gcc_ufs_phy_ice_core_clk_src.clkr.hw },
3024 			.num_parents = 1,
3025 			.flags = CLK_SET_RATE_PARENT,
3026 			.ops = &clk_branch2_ops,
3027 		},
3028 	},
3029 };
3030 
3031 static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = {
3032 	.halt_reg = 0x7705c,
3033 	.halt_check = BRANCH_HALT,
3034 	.hwcg_reg = 0x7705c,
3035 	.hwcg_bit = 1,
3036 	.clkr = {
3037 		.enable_reg = 0x7705c,
3038 		.enable_mask = BIT(1),
3039 		.hw.init = &(struct clk_init_data){
3040 			.name = "gcc_ufs_phy_ice_core_hw_ctl_clk",
3041 			.parent_hws = (const struct clk_hw *[]){
3042 				      &gcc_ufs_phy_ice_core_clk.clkr.hw },
3043 			.num_parents = 1,
3044 			.flags = CLK_SET_RATE_PARENT,
3045 			.ops = &clk_branch_simple_ops,
3046 		},
3047 	},
3048 };
3049 
3050 static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
3051 	.halt_reg = 0x77090,
3052 	.halt_check = BRANCH_HALT,
3053 	.hwcg_reg = 0x77090,
3054 	.hwcg_bit = 1,
3055 	.clkr = {
3056 		.enable_reg = 0x77090,
3057 		.enable_mask = BIT(0),
3058 		.hw.init = &(struct clk_init_data){
3059 			.name = "gcc_ufs_phy_phy_aux_clk",
3060 			.parent_hws = (const struct clk_hw *[]){
3061 				      &gcc_ufs_phy_phy_aux_clk_src.clkr.hw },
3062 			.num_parents = 1,
3063 			.flags = CLK_SET_RATE_PARENT,
3064 			.ops = &clk_branch2_ops,
3065 		},
3066 	},
3067 };
3068 
3069 static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = {
3070 	.halt_reg = 0x77090,
3071 	.halt_check = BRANCH_HALT,
3072 	.hwcg_reg = 0x77090,
3073 	.hwcg_bit = 1,
3074 	.clkr = {
3075 		.enable_reg = 0x77090,
3076 		.enable_mask = BIT(1),
3077 		.hw.init = &(struct clk_init_data){
3078 			.name = "gcc_ufs_phy_phy_aux_hw_ctl_clk",
3079 			.parent_hws = (const struct clk_hw *[]){
3080 				      &gcc_ufs_phy_phy_aux_clk.clkr.hw },
3081 			.num_parents = 1,
3082 			.flags = CLK_SET_RATE_PARENT,
3083 			.ops = &clk_branch_simple_ops,
3084 		},
3085 	},
3086 };
3087 
3088 /* external clocks so add BRANCH_HALT_SKIP */
3089 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
3090 	.halt_check = BRANCH_HALT_SKIP,
3091 	.clkr = {
3092 		.enable_reg = 0x7701c,
3093 		.enable_mask = BIT(0),
3094 		.hw.init = &(struct clk_init_data){
3095 			.name = "gcc_ufs_phy_rx_symbol_0_clk",
3096 			.ops = &clk_branch2_ops,
3097 		},
3098 	},
3099 };
3100 
3101 /* external clocks so add BRANCH_HALT_SKIP */
3102 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
3103 	.halt_check = BRANCH_HALT_SKIP,
3104 	.clkr = {
3105 		.enable_reg = 0x770ac,
3106 		.enable_mask = BIT(0),
3107 		.hw.init = &(struct clk_init_data){
3108 			.name = "gcc_ufs_phy_rx_symbol_1_clk",
3109 			.ops = &clk_branch2_ops,
3110 		},
3111 	},
3112 };
3113 
3114 /* external clocks so add BRANCH_HALT_SKIP */
3115 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
3116 	.halt_check = BRANCH_HALT_SKIP,
3117 	.clkr = {
3118 		.enable_reg = 0x77018,
3119 		.enable_mask = BIT(0),
3120 		.hw.init = &(struct clk_init_data){
3121 			.name = "gcc_ufs_phy_tx_symbol_0_clk",
3122 			.ops = &clk_branch2_ops,
3123 		},
3124 	},
3125 };
3126 
3127 static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
3128 	.halt_reg = 0x77058,
3129 	.halt_check = BRANCH_HALT,
3130 	.hwcg_reg = 0x77058,
3131 	.hwcg_bit = 1,
3132 	.clkr = {
3133 		.enable_reg = 0x77058,
3134 		.enable_mask = BIT(0),
3135 		.hw.init = &(struct clk_init_data){
3136 			.name = "gcc_ufs_phy_unipro_core_clk",
3137 			.parent_hws = (const struct clk_hw *[]){
3138 				&gcc_ufs_phy_unipro_core_clk_src.clkr.hw },
3139 			.num_parents = 1,
3140 			.flags = CLK_SET_RATE_PARENT,
3141 			.ops = &clk_branch2_ops,
3142 		},
3143 	},
3144 };
3145 
3146 static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = {
3147 	.halt_reg = 0x77058,
3148 	.halt_check = BRANCH_HALT,
3149 	.hwcg_reg = 0x77058,
3150 	.hwcg_bit = 1,
3151 	.clkr = {
3152 		.enable_reg = 0x77058,
3153 		.enable_mask = BIT(1),
3154 		.hw.init = &(struct clk_init_data){
3155 			.name = "gcc_ufs_phy_unipro_core_hw_ctl_clk",
3156 			.parent_hws = (const struct clk_hw *[]){
3157 				      &gcc_ufs_phy_unipro_core_clk.clkr.hw },
3158 			.num_parents = 1,
3159 			.flags = CLK_SET_RATE_PARENT,
3160 			.ops = &clk_branch_simple_ops,
3161 		},
3162 	},
3163 };
3164 
3165 static struct clk_branch gcc_usb30_prim_master_clk = {
3166 	.halt_reg = 0xf010,
3167 	.halt_check = BRANCH_HALT,
3168 	.clkr = {
3169 		.enable_reg = 0xf010,
3170 		.enable_mask = BIT(0),
3171 		.hw.init = &(struct clk_init_data){
3172 			.name = "gcc_usb30_prim_master_clk",
3173 			.parent_hws = (const struct clk_hw *[]){
3174 				      &gcc_usb30_prim_master_clk_src.clkr.hw },
3175 			.num_parents = 1,
3176 			.flags = CLK_SET_RATE_PARENT,
3177 			.ops = &clk_branch2_ops,
3178 		},
3179 	},
3180 };
3181 
3182 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
3183 	.halt_reg = 0xf018,
3184 	.halt_check = BRANCH_HALT,
3185 	.clkr = {
3186 		.enable_reg = 0xf018,
3187 		.enable_mask = BIT(0),
3188 		.hw.init = &(struct clk_init_data){
3189 			.name = "gcc_usb30_prim_mock_utmi_clk",
3190 			.parent_hws = (const struct clk_hw *[]){
3191 				&gcc_usb30_prim_mock_utmi_clk_src.clkr.hw },
3192 			.num_parents = 1,
3193 			.flags = CLK_SET_RATE_PARENT,
3194 			.ops = &clk_branch2_ops,
3195 		},
3196 	},
3197 };
3198 
3199 static struct clk_branch gcc_usb30_prim_sleep_clk = {
3200 	.halt_reg = 0xf014,
3201 	.halt_check = BRANCH_HALT,
3202 	.clkr = {
3203 		.enable_reg = 0xf014,
3204 		.enable_mask = BIT(0),
3205 		.hw.init = &(struct clk_init_data){
3206 			.name = "gcc_usb30_prim_sleep_clk",
3207 			.ops = &clk_branch2_ops,
3208 		},
3209 	},
3210 };
3211 
3212 static struct clk_branch gcc_usb30_sec_master_clk = {
3213 	.halt_reg = 0x10010,
3214 	.halt_check = BRANCH_HALT,
3215 	.clkr = {
3216 		.enable_reg = 0x10010,
3217 		.enable_mask = BIT(0),
3218 		.hw.init = &(struct clk_init_data){
3219 			.name = "gcc_usb30_sec_master_clk",
3220 			.parent_hws = (const struct clk_hw *[]){
3221 				      &gcc_usb30_sec_master_clk_src.clkr.hw },
3222 			.num_parents = 1,
3223 			.flags = CLK_SET_RATE_PARENT,
3224 			.ops = &clk_branch2_ops,
3225 		},
3226 	},
3227 };
3228 
3229 static struct clk_branch gcc_usb30_sec_mock_utmi_clk = {
3230 	.halt_reg = 0x10018,
3231 	.halt_check = BRANCH_HALT,
3232 	.clkr = {
3233 		.enable_reg = 0x10018,
3234 		.enable_mask = BIT(0),
3235 		.hw.init = &(struct clk_init_data){
3236 			.name = "gcc_usb30_sec_mock_utmi_clk",
3237 			.parent_hws = (const struct clk_hw *[]){
3238 				&gcc_usb30_sec_mock_utmi_clk_src.clkr.hw },
3239 			.num_parents = 1,
3240 			.flags = CLK_SET_RATE_PARENT,
3241 			.ops = &clk_branch2_ops,
3242 		},
3243 	},
3244 };
3245 
3246 static struct clk_branch gcc_usb30_sec_sleep_clk = {
3247 	.halt_reg = 0x10014,
3248 	.halt_check = BRANCH_HALT,
3249 	.clkr = {
3250 		.enable_reg = 0x10014,
3251 		.enable_mask = BIT(0),
3252 		.hw.init = &(struct clk_init_data){
3253 			.name = "gcc_usb30_sec_sleep_clk",
3254 			.ops = &clk_branch2_ops,
3255 		},
3256 	},
3257 };
3258 
3259 static struct clk_branch gcc_usb3_prim_clkref_clk = {
3260 	.halt_reg = 0x8c008,
3261 	.halt_check = BRANCH_HALT,
3262 	.clkr = {
3263 		.enable_reg = 0x8c008,
3264 		.enable_mask = BIT(0),
3265 		.hw.init = &(struct clk_init_data){
3266 			.name = "gcc_usb3_prim_clkref_clk",
3267 			.ops = &clk_branch2_ops,
3268 		},
3269 	},
3270 };
3271 
3272 static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
3273 	.halt_reg = 0xf050,
3274 	.halt_check = BRANCH_HALT,
3275 	.clkr = {
3276 		.enable_reg = 0xf050,
3277 		.enable_mask = BIT(0),
3278 		.hw.init = &(struct clk_init_data){
3279 			.name = "gcc_usb3_prim_phy_aux_clk",
3280 			.parent_hws = (const struct clk_hw *[]){
3281 				      &gcc_usb3_prim_phy_aux_clk_src.clkr.hw },
3282 			.num_parents = 1,
3283 			.flags = CLK_SET_RATE_PARENT,
3284 			.ops = &clk_branch2_ops,
3285 		},
3286 	},
3287 };
3288 
3289 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
3290 	.halt_reg = 0xf054,
3291 	.halt_check = BRANCH_HALT,
3292 	.clkr = {
3293 		.enable_reg = 0xf054,
3294 		.enable_mask = BIT(0),
3295 		.hw.init = &(struct clk_init_data){
3296 			.name = "gcc_usb3_prim_phy_com_aux_clk",
3297 			.parent_hws = (const struct clk_hw *[]){
3298 				      &gcc_usb3_prim_phy_aux_clk_src.clkr.hw },
3299 			.num_parents = 1,
3300 			.flags = CLK_SET_RATE_PARENT,
3301 			.ops = &clk_branch2_ops,
3302 		},
3303 	},
3304 };
3305 
3306 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
3307 	.halt_check = BRANCH_HALT_SKIP,
3308 	.clkr = {
3309 		.enable_reg = 0xf058,
3310 		.enable_mask = BIT(0),
3311 		.hw.init = &(struct clk_init_data){
3312 			.name = "gcc_usb3_prim_phy_pipe_clk",
3313 			.ops = &clk_branch2_ops,
3314 		},
3315 	},
3316 };
3317 
3318 static struct clk_branch gcc_usb3_sec_clkref_clk = {
3319 	.halt_reg = 0x8c028,
3320 	.halt_check = BRANCH_HALT,
3321 	.clkr = {
3322 		.enable_reg = 0x8c028,
3323 		.enable_mask = BIT(0),
3324 		.hw.init = &(struct clk_init_data){
3325 			.name = "gcc_usb3_sec_clkref_clk",
3326 			.ops = &clk_branch2_ops,
3327 		},
3328 	},
3329 };
3330 
3331 static struct clk_branch gcc_usb3_sec_phy_aux_clk = {
3332 	.halt_reg = 0x10050,
3333 	.halt_check = BRANCH_HALT,
3334 	.clkr = {
3335 		.enable_reg = 0x10050,
3336 		.enable_mask = BIT(0),
3337 		.hw.init = &(struct clk_init_data){
3338 			.name = "gcc_usb3_sec_phy_aux_clk",
3339 			.parent_hws = (const struct clk_hw *[]){
3340 				      &gcc_usb3_sec_phy_aux_clk_src.clkr.hw },
3341 			.num_parents = 1,
3342 			.flags = CLK_SET_RATE_PARENT,
3343 			.ops = &clk_branch2_ops,
3344 		},
3345 	},
3346 };
3347 
3348 static struct clk_branch gcc_usb3_sec_phy_com_aux_clk = {
3349 	.halt_reg = 0x10054,
3350 	.halt_check = BRANCH_HALT,
3351 	.clkr = {
3352 		.enable_reg = 0x10054,
3353 		.enable_mask = BIT(0),
3354 		.hw.init = &(struct clk_init_data){
3355 			.name = "gcc_usb3_sec_phy_com_aux_clk",
3356 			.parent_hws = (const struct clk_hw *[]){
3357 				      &gcc_usb3_sec_phy_aux_clk_src.clkr.hw },
3358 			.num_parents = 1,
3359 			.flags = CLK_SET_RATE_PARENT,
3360 			.ops = &clk_branch2_ops,
3361 		},
3362 	},
3363 };
3364 
3365 static struct clk_branch gcc_usb3_sec_phy_pipe_clk = {
3366 	.halt_check = BRANCH_HALT_SKIP,
3367 	.clkr = {
3368 		.enable_reg = 0x10058,
3369 		.enable_mask = BIT(0),
3370 		.hw.init = &(struct clk_init_data){
3371 			.name = "gcc_usb3_sec_phy_pipe_clk",
3372 			.ops = &clk_branch2_ops,
3373 		},
3374 	},
3375 };
3376 
3377 /*
3378  * Clock ON depends on external parent 'config noc', so cant poll
3379  * delay and also mark as crtitical for video boot
3380  */
3381 static struct clk_branch gcc_video_ahb_clk = {
3382 	.halt_reg = 0xb004,
3383 	.halt_check = BRANCH_HALT_DELAY,
3384 	.hwcg_reg = 0xb004,
3385 	.hwcg_bit = 1,
3386 	.clkr = {
3387 		.enable_reg = 0xb004,
3388 		.enable_mask = BIT(0),
3389 		.hw.init = &(struct clk_init_data){
3390 			.name = "gcc_video_ahb_clk",
3391 			.flags = CLK_IS_CRITICAL,
3392 			.ops = &clk_branch2_ops,
3393 		},
3394 	},
3395 };
3396 
3397 static struct clk_branch gcc_video_axi0_clk = {
3398 	.halt_reg = 0xb024,
3399 	.halt_check = BRANCH_HALT,
3400 	.clkr = {
3401 		.enable_reg = 0xb024,
3402 		.enable_mask = BIT(0),
3403 		.hw.init = &(struct clk_init_data){
3404 			.name = "gcc_video_axi0_clk",
3405 			.ops = &clk_branch2_ops,
3406 		},
3407 	},
3408 };
3409 
3410 static struct clk_branch gcc_video_axi1_clk = {
3411 	.halt_reg = 0xb028,
3412 	.halt_check = BRANCH_HALT,
3413 	.clkr = {
3414 		.enable_reg = 0xb028,
3415 		.enable_mask = BIT(0),
3416 		.hw.init = &(struct clk_init_data){
3417 			.name = "gcc_video_axi1_clk",
3418 			.ops = &clk_branch2_ops,
3419 		},
3420 	},
3421 };
3422 
3423 static struct clk_branch gcc_video_axic_clk = {
3424 	.halt_reg = 0xb02c,
3425 	.halt_check = BRANCH_HALT,
3426 	.clkr = {
3427 		.enable_reg = 0xb02c,
3428 		.enable_mask = BIT(0),
3429 		.hw.init = &(struct clk_init_data){
3430 			.name = "gcc_video_axic_clk",
3431 			.ops = &clk_branch2_ops,
3432 		},
3433 	},
3434 };
3435 
3436 /* XO critical input to video, so no need to poll */
3437 static struct clk_branch gcc_video_xo_clk = {
3438 	.halt_reg = 0xb040,
3439 	.halt_check = BRANCH_HALT_DELAY,
3440 	.clkr = {
3441 		.enable_reg = 0xb040,
3442 		.enable_mask = BIT(0),
3443 		.hw.init = &(struct clk_init_data){
3444 			.name = "gcc_video_xo_clk",
3445 			.flags = CLK_IS_CRITICAL,
3446 			.ops = &clk_branch2_ops,
3447 		},
3448 	},
3449 };
3450 
3451 static struct gdsc pcie_0_gdsc = {
3452 	.gdscr = 0x6b004,
3453 	.pd = {
3454 		.name = "pcie_0_gdsc",
3455 	},
3456 	.pwrsts = PWRSTS_OFF_ON,
3457 	.flags = POLL_CFG_GDSCR,
3458 };
3459 
3460 static struct gdsc pcie_1_gdsc = {
3461 	.gdscr = 0x8d004,
3462 	.pd = {
3463 		.name = "pcie_1_gdsc",
3464 	},
3465 	.pwrsts = PWRSTS_OFF_ON,
3466 	.flags = POLL_CFG_GDSCR,
3467 };
3468 
3469 static struct gdsc ufs_card_gdsc = {
3470 	.gdscr = 0x75004,
3471 	.pd = {
3472 		.name = "ufs_card_gdsc",
3473 	},
3474 	.pwrsts = PWRSTS_OFF_ON,
3475 	.flags = POLL_CFG_GDSCR,
3476 };
3477 
3478 static struct gdsc ufs_phy_gdsc = {
3479 	.gdscr = 0x77004,
3480 	.pd = {
3481 		.name = "ufs_phy_gdsc",
3482 	},
3483 	.pwrsts = PWRSTS_OFF_ON,
3484 	.flags = POLL_CFG_GDSCR,
3485 };
3486 
3487 static struct gdsc emac_gdsc = {
3488 	.gdscr = 0x6004,
3489 	.pd = {
3490 		.name = "emac_gdsc",
3491 	},
3492 	.pwrsts = PWRSTS_OFF_ON,
3493 	.flags = POLL_CFG_GDSCR,
3494 };
3495 
3496 static struct gdsc usb30_prim_gdsc = {
3497 	.gdscr = 0xf004,
3498 	.pd = {
3499 		.name = "usb30_prim_gdsc",
3500 	},
3501 	.pwrsts = PWRSTS_OFF_ON,
3502 	.flags = POLL_CFG_GDSCR,
3503 };
3504 
3505 static struct gdsc usb30_sec_gdsc = {
3506 	.gdscr = 0x10004,
3507 	.pd = {
3508 		.name = "usb30_sec_gdsc",
3509 	},
3510 	.pwrsts = PWRSTS_OFF_ON,
3511 	.flags = POLL_CFG_GDSCR,
3512 };
3513 
3514 static struct clk_regmap *gcc_sm8150_clocks[] = {
3515 	[GCC_AGGRE_NOC_PCIE_TBU_CLK] = &gcc_aggre_noc_pcie_tbu_clk.clkr,
3516 	[GCC_AGGRE_UFS_CARD_AXI_CLK] = &gcc_aggre_ufs_card_axi_clk.clkr,
3517 	[GCC_AGGRE_UFS_CARD_AXI_HW_CTL_CLK] =
3518 		&gcc_aggre_ufs_card_axi_hw_ctl_clk.clkr,
3519 	[GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
3520 	[GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] =
3521 		&gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr,
3522 	[GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
3523 	[GCC_AGGRE_USB3_SEC_AXI_CLK] = &gcc_aggre_usb3_sec_axi_clk.clkr,
3524 	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3525 	[GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr,
3526 	[GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,
3527 	[GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr,
3528 	[GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr,
3529 	[GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
3530 	[GCC_CFG_NOC_USB3_SEC_AXI_CLK] = &gcc_cfg_noc_usb3_sec_axi_clk.clkr,
3531 	[GCC_CPUSS_AHB_CLK] = &gcc_cpuss_ahb_clk.clkr,
3532 	[GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr,
3533 	[GCC_CPUSS_DVM_BUS_CLK] = &gcc_cpuss_dvm_bus_clk.clkr,
3534 	[GCC_CPUSS_GNOC_CLK] = &gcc_cpuss_gnoc_clk.clkr,
3535 	[GCC_CPUSS_RBCPR_CLK] = &gcc_cpuss_rbcpr_clk.clkr,
3536 	[GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
3537 	[GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr,
3538 	[GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
3539 	[GCC_DISP_SF_AXI_CLK] = &gcc_disp_sf_axi_clk.clkr,
3540 	[GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr,
3541 	[GCC_EMAC_AXI_CLK] = &gcc_emac_axi_clk.clkr,
3542 	[GCC_EMAC_PTP_CLK] = &gcc_emac_ptp_clk.clkr,
3543 	[GCC_EMAC_PTP_CLK_SRC] = &gcc_emac_ptp_clk_src.clkr,
3544 	[GCC_EMAC_RGMII_CLK] = &gcc_emac_rgmii_clk.clkr,
3545 	[GCC_EMAC_RGMII_CLK_SRC] = &gcc_emac_rgmii_clk_src.clkr,
3546 	[GCC_EMAC_SLV_AHB_CLK] = &gcc_emac_slv_ahb_clk.clkr,
3547 	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3548 	[GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
3549 	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3550 	[GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
3551 	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3552 	[GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
3553 	[GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,
3554 	[GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
3555 	[GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
3556 	[GCC_GPU_IREF_CLK] = &gcc_gpu_iref_clk.clkr,
3557 	[GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
3558 	[GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
3559 	[GCC_NPU_AT_CLK] = &gcc_npu_at_clk.clkr,
3560 	[GCC_NPU_AXI_CLK] = &gcc_npu_axi_clk.clkr,
3561 	[GCC_NPU_CFG_AHB_CLK] = &gcc_npu_cfg_ahb_clk.clkr,
3562 	[GCC_NPU_GPLL0_CLK_SRC] = &gcc_npu_gpll0_clk_src.clkr,
3563 	[GCC_NPU_GPLL0_DIV_CLK_SRC] = &gcc_npu_gpll0_div_clk_src.clkr,
3564 	[GCC_NPU_TRIG_CLK] = &gcc_npu_trig_clk.clkr,
3565 	[GCC_PCIE0_PHY_REFGEN_CLK] = &gcc_pcie0_phy_refgen_clk.clkr,
3566 	[GCC_PCIE1_PHY_REFGEN_CLK] = &gcc_pcie1_phy_refgen_clk.clkr,
3567 	[GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
3568 	[GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
3569 	[GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
3570 	[GCC_PCIE_0_CLKREF_CLK] = &gcc_pcie_0_clkref_clk.clkr,
3571 	[GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
3572 	[GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
3573 	[GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
3574 	[GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
3575 	[GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
3576 	[GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr,
3577 	[GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
3578 	[GCC_PCIE_1_CLKREF_CLK] = &gcc_pcie_1_clkref_clk.clkr,
3579 	[GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
3580 	[GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
3581 	[GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
3582 	[GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr,
3583 	[GCC_PCIE_PHY_AUX_CLK] = &gcc_pcie_phy_aux_clk.clkr,
3584 	[GCC_PCIE_PHY_REFGEN_CLK_SRC] = &gcc_pcie_phy_refgen_clk_src.clkr,
3585 	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3586 	[GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
3587 	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3588 	[GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
3589 	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3590 	[GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
3591 	[GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
3592 	[GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
3593 	[GCC_QMIP_VIDEO_CVP_AHB_CLK] = &gcc_qmip_video_cvp_ahb_clk.clkr,
3594 	[GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
3595 	[GCC_QSPI_CNOC_PERIPH_AHB_CLK] = &gcc_qspi_cnoc_periph_ahb_clk.clkr,
3596 	[GCC_QSPI_CORE_CLK] = &gcc_qspi_core_clk.clkr,
3597 	[GCC_QSPI_CORE_CLK_SRC] = &gcc_qspi_core_clk_src.clkr,
3598 	[GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
3599 	[GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
3600 	[GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
3601 	[GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
3602 	[GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
3603 	[GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
3604 	[GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
3605 	[GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
3606 	[GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
3607 	[GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
3608 	[GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
3609 	[GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
3610 	[GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr,
3611 	[GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr,
3612 	[GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr,
3613 	[GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr,
3614 	[GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
3615 	[GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
3616 	[GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
3617 	[GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
3618 	[GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
3619 	[GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
3620 	[GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
3621 	[GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
3622 	[GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
3623 	[GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
3624 	[GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
3625 	[GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
3626 	[GCC_QUPV3_WRAP2_S0_CLK] = &gcc_qupv3_wrap2_s0_clk.clkr,
3627 	[GCC_QUPV3_WRAP2_S0_CLK_SRC] = &gcc_qupv3_wrap2_s0_clk_src.clkr,
3628 	[GCC_QUPV3_WRAP2_S1_CLK] = &gcc_qupv3_wrap2_s1_clk.clkr,
3629 	[GCC_QUPV3_WRAP2_S1_CLK_SRC] = &gcc_qupv3_wrap2_s1_clk_src.clkr,
3630 	[GCC_QUPV3_WRAP2_S2_CLK] = &gcc_qupv3_wrap2_s2_clk.clkr,
3631 	[GCC_QUPV3_WRAP2_S2_CLK_SRC] = &gcc_qupv3_wrap2_s2_clk_src.clkr,
3632 	[GCC_QUPV3_WRAP2_S3_CLK] = &gcc_qupv3_wrap2_s3_clk.clkr,
3633 	[GCC_QUPV3_WRAP2_S3_CLK_SRC] = &gcc_qupv3_wrap2_s3_clk_src.clkr,
3634 	[GCC_QUPV3_WRAP2_S4_CLK] = &gcc_qupv3_wrap2_s4_clk.clkr,
3635 	[GCC_QUPV3_WRAP2_S4_CLK_SRC] = &gcc_qupv3_wrap2_s4_clk_src.clkr,
3636 	[GCC_QUPV3_WRAP2_S5_CLK] = &gcc_qupv3_wrap2_s5_clk.clkr,
3637 	[GCC_QUPV3_WRAP2_S5_CLK_SRC] = &gcc_qupv3_wrap2_s5_clk_src.clkr,
3638 	[GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
3639 	[GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
3640 	[GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
3641 	[GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
3642 	[GCC_QUPV3_WRAP_2_M_AHB_CLK] = &gcc_qupv3_wrap_2_m_ahb_clk.clkr,
3643 	[GCC_QUPV3_WRAP_2_S_AHB_CLK] = &gcc_qupv3_wrap_2_s_ahb_clk.clkr,
3644 	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3645 	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3646 	[GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
3647 	[GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
3648 	[GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
3649 	[GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr,
3650 	[GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,
3651 	[GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr,
3652 	[GCC_TSIF_INACTIVITY_TIMERS_CLK] = &gcc_tsif_inactivity_timers_clk.clkr,
3653 	[GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
3654 	[GCC_TSIF_REF_CLK_SRC] = &gcc_tsif_ref_clk_src.clkr,
3655 	[GCC_UFS_CARD_AHB_CLK] = &gcc_ufs_card_ahb_clk.clkr,
3656 	[GCC_UFS_CARD_AXI_CLK] = &gcc_ufs_card_axi_clk.clkr,
3657 	[GCC_UFS_CARD_AXI_CLK_SRC] = &gcc_ufs_card_axi_clk_src.clkr,
3658 	[GCC_UFS_CARD_AXI_HW_CTL_CLK] = &gcc_ufs_card_axi_hw_ctl_clk.clkr,
3659 	[GCC_UFS_CARD_CLKREF_CLK] = &gcc_ufs_card_clkref_clk.clkr,
3660 	[GCC_UFS_CARD_ICE_CORE_CLK] = &gcc_ufs_card_ice_core_clk.clkr,
3661 	[GCC_UFS_CARD_ICE_CORE_CLK_SRC] = &gcc_ufs_card_ice_core_clk_src.clkr,
3662 	[GCC_UFS_CARD_ICE_CORE_HW_CTL_CLK] =
3663 		&gcc_ufs_card_ice_core_hw_ctl_clk.clkr,
3664 	[GCC_UFS_CARD_PHY_AUX_CLK] = &gcc_ufs_card_phy_aux_clk.clkr,
3665 	[GCC_UFS_CARD_PHY_AUX_CLK_SRC] = &gcc_ufs_card_phy_aux_clk_src.clkr,
3666 	[GCC_UFS_CARD_PHY_AUX_HW_CTL_CLK] =
3667 		&gcc_ufs_card_phy_aux_hw_ctl_clk.clkr,
3668 	[GCC_UFS_CARD_RX_SYMBOL_0_CLK] = &gcc_ufs_card_rx_symbol_0_clk.clkr,
3669 	[GCC_UFS_CARD_RX_SYMBOL_1_CLK] = &gcc_ufs_card_rx_symbol_1_clk.clkr,
3670 	[GCC_UFS_CARD_TX_SYMBOL_0_CLK] = &gcc_ufs_card_tx_symbol_0_clk.clkr,
3671 	[GCC_UFS_CARD_UNIPRO_CORE_CLK] = &gcc_ufs_card_unipro_core_clk.clkr,
3672 	[GCC_UFS_CARD_UNIPRO_CORE_CLK_SRC] =
3673 		&gcc_ufs_card_unipro_core_clk_src.clkr,
3674 	[GCC_UFS_CARD_UNIPRO_CORE_HW_CTL_CLK] =
3675 		&gcc_ufs_card_unipro_core_hw_ctl_clk.clkr,
3676 	[GCC_UFS_MEM_CLKREF_CLK] = &gcc_ufs_mem_clkref_clk.clkr,
3677 	[GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
3678 	[GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
3679 	[GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
3680 	[GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr,
3681 	[GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
3682 	[GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
3683 	[GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] =
3684 		&gcc_ufs_phy_ice_core_hw_ctl_clk.clkr,
3685 	[GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
3686 	[GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
3687 	[GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr,
3688 	[GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
3689 	[GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
3690 	[GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
3691 	[GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
3692 	[GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] =
3693 		&gcc_ufs_phy_unipro_core_clk_src.clkr,
3694 	[GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] =
3695 		&gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr,
3696 	[GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
3697 	[GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
3698 	[GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
3699 	[GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] =
3700 		&gcc_usb30_prim_mock_utmi_clk_src.clkr,
3701 	[GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
3702 	[GCC_USB30_SEC_MASTER_CLK] = &gcc_usb30_sec_master_clk.clkr,
3703 	[GCC_USB30_SEC_MASTER_CLK_SRC] = &gcc_usb30_sec_master_clk_src.clkr,
3704 	[GCC_USB30_SEC_MOCK_UTMI_CLK] = &gcc_usb30_sec_mock_utmi_clk.clkr,
3705 	[GCC_USB30_SEC_MOCK_UTMI_CLK_SRC] =
3706 		&gcc_usb30_sec_mock_utmi_clk_src.clkr,
3707 	[GCC_USB30_SEC_SLEEP_CLK] = &gcc_usb30_sec_sleep_clk.clkr,
3708 	[GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,
3709 	[GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
3710 	[GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
3711 	[GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
3712 	[GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
3713 	[GCC_USB3_SEC_CLKREF_CLK] = &gcc_usb3_sec_clkref_clk.clkr,
3714 	[GCC_USB3_SEC_PHY_AUX_CLK] = &gcc_usb3_sec_phy_aux_clk.clkr,
3715 	[GCC_USB3_SEC_PHY_AUX_CLK_SRC] = &gcc_usb3_sec_phy_aux_clk_src.clkr,
3716 	[GCC_USB3_SEC_PHY_COM_AUX_CLK] = &gcc_usb3_sec_phy_com_aux_clk.clkr,
3717 	[GCC_USB3_SEC_PHY_PIPE_CLK] = &gcc_usb3_sec_phy_pipe_clk.clkr,
3718 	[GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr,
3719 	[GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
3720 	[GCC_VIDEO_AXI1_CLK] = &gcc_video_axi1_clk.clkr,
3721 	[GCC_VIDEO_AXIC_CLK] = &gcc_video_axic_clk.clkr,
3722 	[GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr,
3723 	[GPLL0] = &gpll0.clkr,
3724 	[GPLL0_OUT_EVEN] = &gpll0_out_even.clkr,
3725 	[GPLL7] = &gpll7.clkr,
3726 	[GPLL9] = &gpll9.clkr,
3727 };
3728 
3729 static const struct qcom_reset_map gcc_sm8150_resets[] = {
3730 	[GCC_EMAC_BCR] = { 0x6000 },
3731 	[GCC_GPU_BCR] = { 0x71000 },
3732 	[GCC_MMSS_BCR] = { 0xb000 },
3733 	[GCC_NPU_BCR] = { 0x4d000 },
3734 	[GCC_PCIE_0_BCR] = { 0x6b000 },
3735 	[GCC_PCIE_0_PHY_BCR] = { 0x6c01c },
3736 	[GCC_PCIE_1_BCR] = { 0x8d000 },
3737 	[GCC_PCIE_1_PHY_BCR] = { 0x8e01c },
3738 	[GCC_PCIE_PHY_BCR] = { 0x6f000 },
3739 	[GCC_PDM_BCR] = { 0x33000 },
3740 	[GCC_PRNG_BCR] = { 0x34000 },
3741 	[GCC_QSPI_BCR] = { 0x24008 },
3742 	[GCC_QUPV3_WRAPPER_0_BCR] = { 0x17000 },
3743 	[GCC_QUPV3_WRAPPER_1_BCR] = { 0x18000 },
3744 	[GCC_QUPV3_WRAPPER_2_BCR] = { 0x1e000 },
3745 	[GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 },
3746 	[GCC_QUSB2PHY_SEC_BCR] = { 0x12004 },
3747 	[GCC_USB3_PHY_PRIM_BCR] = { 0x50000 },
3748 	[GCC_USB3_DP_PHY_PRIM_BCR] = { 0x50008 },
3749 	[GCC_USB3_PHY_SEC_BCR] = { 0x5000c },
3750 	[GCC_USB3PHY_PHY_SEC_BCR] = { 0x50010 },
3751 	[GCC_SDCC2_BCR] = { 0x14000 },
3752 	[GCC_SDCC4_BCR] = { 0x16000 },
3753 	[GCC_TSIF_BCR] = { 0x36000 },
3754 	[GCC_UFS_CARD_BCR] = { 0x75000 },
3755 	[GCC_UFS_PHY_BCR] = { 0x77000 },
3756 	[GCC_USB30_PRIM_BCR] = { 0xf000 },
3757 	[GCC_USB30_SEC_BCR] = { 0x10000 },
3758 	[GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 },
3759 };
3760 
3761 static struct gdsc *gcc_sm8150_gdscs[] = {
3762 	[EMAC_GDSC] = &emac_gdsc,
3763 	[PCIE_0_GDSC] = &pcie_0_gdsc,
3764 	[PCIE_1_GDSC] = &pcie_1_gdsc,
3765 	[UFS_CARD_GDSC] = &ufs_card_gdsc,
3766 	[UFS_PHY_GDSC] = &ufs_phy_gdsc,
3767 	[USB30_PRIM_GDSC] = &usb30_prim_gdsc,
3768 	[USB30_SEC_GDSC] = &usb30_sec_gdsc,
3769 };
3770 
3771 static const struct regmap_config gcc_sm8150_regmap_config = {
3772 	.reg_bits	= 32,
3773 	.reg_stride	= 4,
3774 	.val_bits	= 32,
3775 	.max_register	= 0x9c040,
3776 	.fast_io	= true,
3777 };
3778 
3779 static const struct qcom_cc_desc gcc_sm8150_desc = {
3780 	.config = &gcc_sm8150_regmap_config,
3781 	.clks = gcc_sm8150_clocks,
3782 	.num_clks = ARRAY_SIZE(gcc_sm8150_clocks),
3783 	.resets = gcc_sm8150_resets,
3784 	.num_resets = ARRAY_SIZE(gcc_sm8150_resets),
3785 	.gdscs = gcc_sm8150_gdscs,
3786 	.num_gdscs = ARRAY_SIZE(gcc_sm8150_gdscs),
3787 };
3788 
3789 static const struct of_device_id gcc_sm8150_match_table[] = {
3790 	{ .compatible = "qcom,gcc-sm8150" },
3791 	{ }
3792 };
3793 MODULE_DEVICE_TABLE(of, gcc_sm8150_match_table);
3794 
3795 static int gcc_sm8150_probe(struct platform_device *pdev)
3796 {
3797 	struct regmap *regmap;
3798 
3799 	regmap = qcom_cc_map(pdev, &gcc_sm8150_desc);
3800 	if (IS_ERR(regmap))
3801 		return PTR_ERR(regmap);
3802 
3803 	/* Disable the GPLL0 active input to NPU and GPU via MISC registers */
3804 	regmap_update_bits(regmap, 0x4d110, 0x3, 0x3);
3805 	regmap_update_bits(regmap, 0x71028, 0x3, 0x3);
3806 
3807 	return qcom_cc_really_probe(pdev, &gcc_sm8150_desc, regmap);
3808 }
3809 
3810 static struct platform_driver gcc_sm8150_driver = {
3811 	.probe		= gcc_sm8150_probe,
3812 	.driver		= {
3813 		.name	= "gcc-sm8150",
3814 		.of_match_table = gcc_sm8150_match_table,
3815 	},
3816 };
3817 
3818 static int __init gcc_sm8150_init(void)
3819 {
3820 	return platform_driver_register(&gcc_sm8150_driver);
3821 }
3822 subsys_initcall(gcc_sm8150_init);
3823 
3824 static void __exit gcc_sm8150_exit(void)
3825 {
3826 	platform_driver_unregister(&gcc_sm8150_driver);
3827 }
3828 module_exit(gcc_sm8150_exit);
3829 
3830 MODULE_DESCRIPTION("QTI GCC SM8150 Driver");
3831 MODULE_LICENSE("GPL v2");
3832