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