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