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