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