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