clk: qcom: apss-ipq-pll: refactor the driver to accommodate different PLL types
[linux-block.git] / drivers / clk / qcom / gcc-sm7150.c
CommitLineData
a808d58d
DT
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
4 * Copyright (c) 2023, Danila Tikhonov <danila@jiaxyga.com>
5 * Copyright (c) 2023, David Wronek <davidwronek@gmail.com>
6 */
7
8#include <linux/clk-provider.h>
9#include <linux/err.h>
10#include <linux/kernel.h>
11#include <linux/module.h>
12#include <linux/of.h>
13#include <linux/of_device.h>
14#include <linux/regmap.h>
15
16#include <dt-bindings/clock/qcom,sm7150-gcc.h>
17
18#include "clk-alpha-pll.h"
19#include "clk-branch.h"
20#include "clk-rcg.h"
21#include "clk-regmap.h"
22#include "common.h"
23#include "gdsc.h"
24#include "reset.h"
25
26enum {
27 DT_BI_TCXO,
28 DT_BI_TCXO_AO,
29 DT_SLEEP_CLK
30};
31
32enum {
33 P_BI_TCXO,
34 P_GPLL0_OUT_EVEN,
35 P_GPLL0_OUT_MAIN,
36 P_GPLL6_OUT_MAIN,
37 P_GPLL7_OUT_MAIN,
38 P_SLEEP_CLK,
39};
40
41static struct clk_alpha_pll gpll0 = {
42 .offset = 0x0,
43 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
44 .clkr = {
45 .enable_reg = 0x52000,
46 .enable_mask = BIT(0),
47 .hw.init = &(struct clk_init_data){
48 .name = "gpll0",
49 .parent_data = &(const struct clk_parent_data){
50 .index = DT_BI_TCXO,
51 },
52 .num_parents = 1,
53 .ops = &clk_alpha_pll_fixed_fabia_ops,
54 },
55 },
56};
57
58static const struct clk_div_table post_div_table_fabia_even[] = {
59 { 0x0, 1 },
60 { 0x1, 2 },
61 { 0x3, 4 },
62 { 0x7, 8 },
63 { }
64};
65
66static struct clk_alpha_pll_postdiv gpll0_out_even = {
67 .offset = 0x0,
68 .post_div_shift = 8,
69 .post_div_table = post_div_table_fabia_even,
70 .num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
71 .width = 4,
72 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
73 .clkr.hw.init = &(struct clk_init_data){
74 .name = "gpll0_out_even",
75 .parent_hws = (const struct clk_hw*[]){
76 &gpll0.clkr.hw,
77 },
78 .num_parents = 1,
79 .ops = &clk_alpha_pll_postdiv_fabia_ops,
80 },
81};
82
83static struct clk_fixed_factor gcc_pll0_main_div_cdiv = {
84 .mult = 1,
85 .div = 2,
86 .hw.init = &(struct clk_init_data){
87 .name = "gcc_pll0_main_div_cdiv",
88 .parent_hws = (const struct clk_hw*[]){
89 &gpll0.clkr.hw,
90 },
91 .num_parents = 1,
92 .ops = &clk_fixed_factor_ops,
93 },
94};
95
96static struct clk_alpha_pll gpll6 = {
97 .offset = 0x13000,
98 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
99 .clkr = {
100 .enable_reg = 0x52000,
101 .enable_mask = BIT(6),
102 .hw.init = &(struct clk_init_data){
103 .name = "gpll6",
104 .parent_data = &(const struct clk_parent_data){
105 .index = DT_BI_TCXO,
106 },
107 .num_parents = 1,
108 .ops = &clk_alpha_pll_fixed_fabia_ops,
109 },
110 },
111};
112
113static struct clk_alpha_pll gpll7 = {
114 .offset = 0x27000,
115 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
116 .clkr = {
117 .enable_reg = 0x52000,
118 .enable_mask = BIT(7),
119 .hw.init = &(struct clk_init_data){
120 .name = "gpll7",
121 .parent_data = &(const struct clk_parent_data){
122 .index = DT_BI_TCXO,
123 },
124 .num_parents = 1,
125 .ops = &clk_alpha_pll_fixed_fabia_ops,
126 },
127 },
128};
129
130static const struct parent_map gcc_parent_map_0[] = {
131 { P_BI_TCXO, 0 },
132 { P_GPLL0_OUT_MAIN, 1 },
133 { P_GPLL0_OUT_EVEN, 6 },
134};
135
136static const struct clk_parent_data gcc_parent_data_0[] = {
137 { .index = DT_BI_TCXO },
138 { .hw = &gpll0.clkr.hw },
139 { .hw = &gpll0_out_even.clkr.hw },
140};
141static const struct clk_parent_data gcc_parent_data_0_ao[] = {
142 { .index = DT_BI_TCXO_AO },
143 { .hw = &gpll0.clkr.hw },
144 { .hw = &gpll0_out_even.clkr.hw },
145};
146
147static const struct parent_map gcc_parent_map_1[] = {
148 { P_BI_TCXO, 0 },
149 { P_GPLL0_OUT_MAIN, 1 },
150 { P_SLEEP_CLK, 5 },
151 { P_GPLL0_OUT_EVEN, 6 },
152};
153
154static const struct clk_parent_data gcc_parent_data_1[] = {
155 { .index = DT_BI_TCXO },
156 { .hw = &gpll0.clkr.hw },
157 { .index = DT_SLEEP_CLK },
158 { .hw = &gpll0_out_even.clkr.hw },
159};
160
161static const struct parent_map gcc_parent_map_2[] = {
162 { P_BI_TCXO, 0 },
163 { P_GPLL0_OUT_MAIN, 1 },
164};
165
166static const struct clk_parent_data gcc_parent_data_2[] = {
167 { .index = DT_BI_TCXO },
168 { .hw = &gpll0.clkr.hw },
169};
170
171static const struct clk_parent_data gcc_parent_data_2_ao[] = {
172 { .index = DT_BI_TCXO_AO },
173 { .hw = &gpll0.clkr.hw },
174};
175
176static const struct parent_map gcc_parent_map_3[] = {
177 { P_BI_TCXO, 0 },
178 { P_SLEEP_CLK, 5 },
179};
180
181static const struct clk_parent_data gcc_parent_data_3[] = {
182 { .index = DT_BI_TCXO },
183 { .index = DT_SLEEP_CLK },
184};
185
186static const struct parent_map gcc_parent_map_4[] = {
187 { P_BI_TCXO, 0 },
188};
189
190static const struct clk_parent_data gcc_parent_data_4[] = {
191 { .index = DT_BI_TCXO },
192};
193
194static const struct parent_map gcc_parent_map_5[] = {
195 { P_BI_TCXO, 0 },
196 { P_GPLL0_OUT_MAIN, 1 },
197 { P_GPLL6_OUT_MAIN, 2 },
198 { P_GPLL0_OUT_EVEN, 6 },
199};
200
201static const struct clk_parent_data gcc_parent_data_5[] = {
202 { .index = DT_BI_TCXO },
203 { .hw = &gpll0.clkr.hw },
204 { .hw = &gpll6.clkr.hw },
205 { .hw = &gpll0_out_even.clkr.hw },
206};
207
208static const struct parent_map gcc_parent_map_6[] = {
209 { P_BI_TCXO, 0 },
210 { P_GPLL0_OUT_MAIN, 1 },
211 { P_GPLL7_OUT_MAIN, 3 },
212 { P_GPLL0_OUT_EVEN, 6 },
213};
214
215static const struct clk_parent_data gcc_parent_data_6[] = {
216 { .index = DT_BI_TCXO },
217 { .hw = &gpll0.clkr.hw },
218 { .hw = &gpll7.clkr.hw },
219 { .hw = &gpll0_out_even.clkr.hw },
220};
221
222static const struct parent_map gcc_parent_map_7[] = {
223 { P_BI_TCXO, 0 },
224 { P_GPLL0_OUT_MAIN, 1 },
225 { P_GPLL0_OUT_EVEN, 6 },
226};
227
228static const struct clk_parent_data gcc_parent_data_7[] = {
229 { .index = DT_BI_TCXO },
230 { .hw = &gpll0.clkr.hw },
231 { .hw = &gpll0_out_even.clkr.hw },
232};
233
234static const struct parent_map gcc_parent_map_8[] = {
235 { P_BI_TCXO, 0 },
236 { P_GPLL0_OUT_MAIN, 1 },
237};
238
239static const struct clk_parent_data gcc_parent_data_8[] = {
240 { .index = DT_BI_TCXO },
241 { .hw = &gpll0.clkr.hw },
242};
243
244static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src[] = {
245 F(19200000, P_BI_TCXO, 1, 0, 0),
246 { }
247};
248
249static struct clk_rcg2 gcc_cpuss_ahb_clk_src = {
250 .cmd_rcgr = 0x48014,
251 .mnd_width = 0,
252 .hid_width = 5,
253 .parent_map = gcc_parent_map_0,
254 .freq_tbl = ftbl_gcc_cpuss_ahb_clk_src,
255 .clkr.hw.init = &(struct clk_init_data){
256 .name = "gcc_cpuss_ahb_clk_src",
257 .parent_data = gcc_parent_data_0_ao,
258 .num_parents = ARRAY_SIZE(gcc_parent_data_0_ao),
259 .flags = CLK_SET_RATE_PARENT,
260 .ops = &clk_rcg2_ops,
261 },
262};
263
264static const struct freq_tbl ftbl_gcc_cpuss_rbcpr_clk_src[] = {
265 F(19200000, P_BI_TCXO, 1, 0, 0),
266 { }
267};
268
269static struct clk_rcg2 gcc_cpuss_rbcpr_clk_src = {
270 .cmd_rcgr = 0x4815c,
271 .mnd_width = 0,
272 .hid_width = 5,
273 .parent_map = gcc_parent_map_2,
274 .freq_tbl = ftbl_gcc_cpuss_rbcpr_clk_src,
275 .clkr.hw.init = &(struct clk_init_data){
276 .name = "gcc_cpuss_rbcpr_clk_src",
277 .parent_data = gcc_parent_data_2_ao,
278 .num_parents = ARRAY_SIZE(gcc_parent_data_2_ao),
279 .ops = &clk_rcg2_ops,
280 },
281};
282
283static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
284 F(19200000, P_BI_TCXO, 1, 0, 0),
285 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
286 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
287 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
288 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
289 { }
290};
291
292static struct clk_rcg2 gcc_gp1_clk_src = {
293 .cmd_rcgr = 0x64004,
294 .mnd_width = 8,
295 .hid_width = 5,
296 .parent_map = gcc_parent_map_1,
297 .freq_tbl = ftbl_gcc_gp1_clk_src,
298 .clkr.hw.init = &(struct clk_init_data){
299 .name = "gcc_gp1_clk_src",
300 .parent_data = gcc_parent_data_1,
301 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
302 .ops = &clk_rcg2_ops,
303 },
304};
305
306static struct clk_rcg2 gcc_gp2_clk_src = {
307 .cmd_rcgr = 0x65004,
308 .mnd_width = 8,
309 .hid_width = 5,
310 .parent_map = gcc_parent_map_1,
311 .freq_tbl = ftbl_gcc_gp1_clk_src,
312 .clkr.hw.init = &(struct clk_init_data){
313 .name = "gcc_gp2_clk_src",
314 .parent_data = gcc_parent_data_1,
315 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
316 .ops = &clk_rcg2_ops,
317 },
318};
319
320static struct clk_rcg2 gcc_gp3_clk_src = {
321 .cmd_rcgr = 0x66004,
322 .mnd_width = 8,
323 .hid_width = 5,
324 .parent_map = gcc_parent_map_1,
325 .freq_tbl = ftbl_gcc_gp1_clk_src,
326 .clkr.hw.init = &(struct clk_init_data){
327 .name = "gcc_gp3_clk_src",
328 .parent_data = gcc_parent_data_1,
329 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
330 .ops = &clk_rcg2_ops,
331 },
332};
333
334static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
335 F(9600000, P_BI_TCXO, 2, 0, 0),
336 F(19200000, P_BI_TCXO, 1, 0, 0),
337 { }
338};
339
340static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
341 .cmd_rcgr = 0x6b028,
342 .mnd_width = 16,
343 .hid_width = 5,
344 .parent_map = gcc_parent_map_3,
345 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
346 .clkr.hw.init = &(struct clk_init_data){
347 .name = "gcc_pcie_0_aux_clk_src",
348 .parent_data = gcc_parent_data_3,
349 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
350 .ops = &clk_rcg2_ops,
351 },
352};
353
354static const struct freq_tbl ftbl_gcc_pcie_phy_refgen_clk_src[] = {
355 F(19200000, P_BI_TCXO, 1, 0, 0),
356 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
357 { }
358};
359
360static struct clk_rcg2 gcc_pcie_phy_refgen_clk_src = {
361 .cmd_rcgr = 0x6f014,
362 .mnd_width = 0,
363 .hid_width = 5,
364 .parent_map = gcc_parent_map_0,
365 .freq_tbl = ftbl_gcc_pcie_phy_refgen_clk_src,
366 .clkr.hw.init = &(struct clk_init_data){
367 .name = "gcc_pcie_phy_refgen_clk_src",
368 .parent_data = gcc_parent_data_0,
369 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
370 .ops = &clk_rcg2_ops,
371 },
372};
373
374static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
375 F(19200000, P_BI_TCXO, 1, 0, 0),
376 F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
377 { }
378};
379
380static struct clk_rcg2 gcc_pdm2_clk_src = {
381 .cmd_rcgr = 0x33010,
382 .mnd_width = 0,
383 .hid_width = 5,
384 .parent_map = gcc_parent_map_0,
385 .freq_tbl = ftbl_gcc_pdm2_clk_src,
386 .clkr.hw.init = &(struct clk_init_data){
387 .name = "gcc_pdm2_clk_src",
388 .parent_data = gcc_parent_data_0,
389 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
390 .ops = &clk_rcg2_ops,
391 },
392};
393
394static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
395 F(7372800, P_GPLL0_OUT_EVEN, 1, 384, 15625),
396 F(14745600, P_GPLL0_OUT_EVEN, 1, 768, 15625),
397 F(19200000, P_BI_TCXO, 1, 0, 0),
398 F(29491200, P_GPLL0_OUT_EVEN, 1, 1536, 15625),
399 F(32000000, P_GPLL0_OUT_EVEN, 1, 8, 75),
400 F(48000000, P_GPLL0_OUT_EVEN, 1, 4, 25),
401 F(64000000, P_GPLL0_OUT_EVEN, 1, 16, 75),
402 F(80000000, P_GPLL0_OUT_EVEN, 1, 4, 15),
403 F(96000000, P_GPLL0_OUT_EVEN, 1, 8, 25),
404 F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
405 F(102400000, P_GPLL0_OUT_EVEN, 1, 128, 375),
406 F(112000000, P_GPLL0_OUT_EVEN, 1, 28, 75),
407 F(117964800, P_GPLL0_OUT_EVEN, 1, 6144, 15625),
408 F(120000000, P_GPLL0_OUT_EVEN, 2.5, 0, 0),
409 F(128000000, P_GPLL0_OUT_MAIN, 1, 16, 75),
410 { }
411};
412
413static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
414 .name = "gcc_qupv3_wrap0_s0_clk_src",
415 .parent_data = gcc_parent_data_0,
416 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
417 .ops = &clk_rcg2_ops,
418};
419
420static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
421 .cmd_rcgr = 0x17034,
422 .mnd_width = 16,
423 .hid_width = 5,
424 .parent_map = gcc_parent_map_0,
425 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
426 .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
427};
428
429static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
430 .name = "gcc_qupv3_wrap0_s1_clk_src",
431 .parent_data = gcc_parent_data_0,
432 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
433 .ops = &clk_rcg2_ops,
434};
435
436static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
437 .cmd_rcgr = 0x17164,
438 .mnd_width = 16,
439 .hid_width = 5,
440 .parent_map = gcc_parent_map_0,
441 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
442 .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
443};
444
445static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
446 .name = "gcc_qupv3_wrap0_s2_clk_src",
447 .parent_data = gcc_parent_data_0,
448 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
449 .ops = &clk_rcg2_ops,
450};
451
452static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
453 .cmd_rcgr = 0x17294,
454 .mnd_width = 16,
455 .hid_width = 5,
456 .parent_map = gcc_parent_map_0,
457 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
458 .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
459};
460
461static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
462 .name = "gcc_qupv3_wrap0_s3_clk_src",
463 .parent_data = gcc_parent_data_0,
464 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
465 .ops = &clk_rcg2_ops,
466};
467
468static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
469 .cmd_rcgr = 0x173c4,
470 .mnd_width = 16,
471 .hid_width = 5,
472 .parent_map = gcc_parent_map_0,
473 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
474 .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
475};
476
477static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
478 .name = "gcc_qupv3_wrap0_s4_clk_src",
479 .parent_data = gcc_parent_data_0,
480 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
481 .ops = &clk_rcg2_ops,
482};
483
484static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
485 .cmd_rcgr = 0x174f4,
486 .mnd_width = 16,
487 .hid_width = 5,
488 .parent_map = gcc_parent_map_0,
489 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
490 .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
491};
492
493static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
494 .name = "gcc_qupv3_wrap0_s5_clk_src",
495 .parent_data = gcc_parent_data_0,
496 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
497 .ops = &clk_rcg2_ops,
498};
499
500static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
501 .cmd_rcgr = 0x17624,
502 .mnd_width = 16,
503 .hid_width = 5,
504 .parent_map = gcc_parent_map_0,
505 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
506 .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
507};
508
509static struct clk_init_data gcc_qupv3_wrap0_s6_clk_src_init = {
510 .name = "gcc_qupv3_wrap0_s6_clk_src",
511 .parent_data = gcc_parent_data_0,
512 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
513 .flags = CLK_SET_RATE_PARENT,
514 .ops = &clk_rcg2_ops,
515};
516
517static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
518 .cmd_rcgr = 0x17754,
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 = &gcc_qupv3_wrap0_s6_clk_src_init,
524};
525
526static struct clk_init_data gcc_qupv3_wrap0_s7_clk_src_init = {
527 .name = "gcc_qupv3_wrap0_s7_clk_src",
528 .parent_data = gcc_parent_data_0,
529 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
530 .flags = CLK_SET_RATE_PARENT,
531 .ops = &clk_rcg2_ops,
532};
533
534static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = {
535 .cmd_rcgr = 0x17884,
536 .mnd_width = 16,
537 .hid_width = 5,
538 .parent_map = gcc_parent_map_0,
539 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
540 .clkr.hw.init = &gcc_qupv3_wrap0_s7_clk_src_init,
541};
542
543static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
544 .name = "gcc_qupv3_wrap1_s0_clk_src",
545 .parent_data = gcc_parent_data_0,
546 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
547 .ops = &clk_rcg2_ops,
548};
549
550static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
551 .cmd_rcgr = 0x18018,
552 .mnd_width = 16,
553 .hid_width = 5,
554 .parent_map = gcc_parent_map_0,
555 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
556 .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
557};
558
559static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
560 .name = "gcc_qupv3_wrap1_s1_clk_src",
561 .parent_data = gcc_parent_data_0,
562 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
563 .ops = &clk_rcg2_ops,
564};
565
566static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
567 .cmd_rcgr = 0x18148,
568 .mnd_width = 16,
569 .hid_width = 5,
570 .parent_map = gcc_parent_map_0,
571 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
572 .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
573};
574
575static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {
576 .name = "gcc_qupv3_wrap1_s2_clk_src",
577 .parent_data = gcc_parent_data_0,
578 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
579 .ops = &clk_rcg2_ops,
580};
581
582static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
583 .cmd_rcgr = 0x18278,
584 .mnd_width = 16,
585 .hid_width = 5,
586 .parent_map = gcc_parent_map_0,
587 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
588 .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,
589};
590
591static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
592 .name = "gcc_qupv3_wrap1_s3_clk_src",
593 .parent_data = gcc_parent_data_0,
594 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
595 .ops = &clk_rcg2_ops,
596};
597
598static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
599 .cmd_rcgr = 0x183a8,
600 .mnd_width = 16,
601 .hid_width = 5,
602 .parent_map = gcc_parent_map_0,
603 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
604 .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
605};
606
607static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
608 .name = "gcc_qupv3_wrap1_s4_clk_src",
609 .parent_data = gcc_parent_data_0,
610 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
611 .ops = &clk_rcg2_ops,
612};
613
614static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
615 .cmd_rcgr = 0x184d8,
616 .mnd_width = 16,
617 .hid_width = 5,
618 .parent_map = gcc_parent_map_0,
619 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
620 .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
621};
622
623static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
624 .name = "gcc_qupv3_wrap1_s5_clk_src",
625 .parent_data = gcc_parent_data_0,
626 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
627 .ops = &clk_rcg2_ops,
628};
629
630static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
631 .cmd_rcgr = 0x18608,
632 .mnd_width = 16,
633 .hid_width = 5,
634 .parent_map = gcc_parent_map_0,
635 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
636 .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
637};
638
639static struct clk_init_data gcc_qupv3_wrap1_s6_clk_src_init = {
640 .name = "gcc_qupv3_wrap1_s6_clk_src",
641 .parent_data = gcc_parent_data_0,
642 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
643 .ops = &clk_rcg2_ops,
644};
645
646static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = {
647 .cmd_rcgr = 0x18738,
648 .mnd_width = 16,
649 .hid_width = 5,
650 .parent_map = gcc_parent_map_0,
651 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
652 .clkr.hw.init = &gcc_qupv3_wrap1_s6_clk_src_init,
653};
654
655static struct clk_init_data gcc_qupv3_wrap1_s7_clk_src_init = {
656 .name = "gcc_qupv3_wrap1_s7_clk_src",
657 .parent_data = gcc_parent_data_0,
658 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
659 .ops = &clk_rcg2_ops,
660};
661
662static struct clk_rcg2 gcc_qupv3_wrap1_s7_clk_src = {
663 .cmd_rcgr = 0x18868,
664 .mnd_width = 16,
665 .hid_width = 5,
666 .parent_map = gcc_parent_map_0,
667 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
668 .clkr.hw.init = &gcc_qupv3_wrap1_s7_clk_src_init,
669};
670
671static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {
672 F(144000, P_BI_TCXO, 16, 3, 25),
673 F(400000, P_BI_TCXO, 12, 1, 4),
674 F(19200000, P_BI_TCXO, 1, 0, 0),
675 F(20000000, P_GPLL0_OUT_EVEN, 5, 1, 3),
676 F(25000000, P_GPLL0_OUT_EVEN, 6, 1, 2),
677 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
678 F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
679 F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0),
680 F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0),
681 { }
682};
683
684static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {
685 .cmd_rcgr = 0x12028,
686 .mnd_width = 8,
687 .hid_width = 5,
688 .parent_map = gcc_parent_map_5,
689 .freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,
690 .clkr.hw.init = &(struct clk_init_data){
691 .name = "gcc_sdcc1_apps_clk_src",
692 .parent_data = gcc_parent_data_5,
693 .num_parents = ARRAY_SIZE(gcc_parent_data_5),
694 .ops = &clk_rcg2_floor_ops,
695 },
696};
697
698static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = {
699 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
700 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
701 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
702 F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
703 { }
704};
705
706static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = {
707 .cmd_rcgr = 0x12010,
708 .mnd_width = 0,
709 .hid_width = 5,
710 .parent_map = gcc_parent_map_0,
711 .freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src,
712 .clkr.hw.init = &(struct clk_init_data){
713 .name = "gcc_sdcc1_ice_core_clk_src",
714 .parent_data = gcc_parent_data_0,
715 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
716 .ops = &clk_rcg2_ops,
717 },
718};
719
720static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
721 F(400000, P_BI_TCXO, 12, 1, 4),
722 F(9600000, P_BI_TCXO, 2, 0, 0),
723 F(19200000, P_BI_TCXO, 1, 0, 0),
724 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
725 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
726 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
727 F(208000000, P_GPLL7_OUT_MAIN, 4, 0, 0),
728 { }
729};
730
731static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
732 .cmd_rcgr = 0x1400c,
733 .mnd_width = 8,
734 .hid_width = 5,
735 .parent_map = gcc_parent_map_6,
736 .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
737 .clkr.hw.init = &(struct clk_init_data){
738 .name = "gcc_sdcc2_apps_clk_src",
739 .parent_data = gcc_parent_data_6,
740 .num_parents = ARRAY_SIZE(gcc_parent_data_6),
741 .ops = &clk_rcg2_floor_ops,
742 },
743};
744
745static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = {
746 F(400000, P_BI_TCXO, 12, 1, 4),
747 F(9600000, P_BI_TCXO, 2, 0, 0),
748 F(19200000, P_BI_TCXO, 1, 0, 0),
749 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
750 F(33333333, P_GPLL0_OUT_EVEN, 9, 0, 0),
751 F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
752 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
753 { }
754};
755
756static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {
757 .cmd_rcgr = 0x1600c,
758 .mnd_width = 8,
759 .hid_width = 5,
760 .parent_map = gcc_parent_map_0,
761 .freq_tbl = ftbl_gcc_sdcc4_apps_clk_src,
762 .clkr.hw.init = &(struct clk_init_data){
763 .name = "gcc_sdcc4_apps_clk_src",
764 .parent_data = gcc_parent_data_0,
765 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
766 .ops = &clk_rcg2_floor_ops,
767 },
768};
769
770static const struct freq_tbl ftbl_gcc_tsif_ref_clk_src[] = {
771 F(105495, P_BI_TCXO, 2, 1, 91),
772 { }
773};
774
775static struct clk_rcg2 gcc_tsif_ref_clk_src = {
776 .cmd_rcgr = 0x36010,
777 .mnd_width = 8,
778 .hid_width = 5,
779 .parent_map = gcc_parent_map_7,
780 .freq_tbl = ftbl_gcc_tsif_ref_clk_src,
781 .clkr.hw.init = &(struct clk_init_data){
782 .name = "gcc_tsif_ref_clk_src",
783 .parent_data = gcc_parent_data_7,
784 .num_parents = ARRAY_SIZE(gcc_parent_data_7),
785 .ops = &clk_rcg2_ops,
786 },
787};
788
789static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
790 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
791 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
792 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
793 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
794 F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
795 { }
796};
797
798static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
799 .cmd_rcgr = 0x77020,
800 .mnd_width = 8,
801 .hid_width = 5,
802 .parent_map = gcc_parent_map_0,
803 .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
804 .clkr.hw.init = &(struct clk_init_data){
805 .name = "gcc_ufs_phy_axi_clk_src",
806 .parent_data = gcc_parent_data_0,
807 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
808 .ops = &clk_rcg2_ops,
809 },
810};
811
812static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
813 F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
814 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
815 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
816 F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
817 { }
818};
819
820static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
821 .cmd_rcgr = 0x77048,
822 .mnd_width = 0,
823 .hid_width = 5,
824 .parent_map = gcc_parent_map_0,
825 .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
826 .clkr.hw.init = &(struct clk_init_data){
827 .name = "gcc_ufs_phy_ice_core_clk_src",
828 .parent_data = gcc_parent_data_0,
829 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
830 .ops = &clk_rcg2_ops,
831 },
832};
833
834static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
835 .cmd_rcgr = 0x77098,
836 .mnd_width = 0,
837 .hid_width = 5,
838 .parent_map = gcc_parent_map_4,
839 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
840 .clkr.hw.init = &(struct clk_init_data){
841 .name = "gcc_ufs_phy_phy_aux_clk_src",
842 .parent_data = gcc_parent_data_4,
843 .num_parents = ARRAY_SIZE(gcc_parent_data_4),
844 .ops = &clk_rcg2_ops,
845 },
846};
847
848static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_core_clk_src[] = {
849 F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
850 F(75000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
851 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
852 { }
853};
854
855static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
856 .cmd_rcgr = 0x77060,
857 .mnd_width = 0,
858 .hid_width = 5,
859 .parent_map = gcc_parent_map_0,
860 .freq_tbl = ftbl_gcc_ufs_phy_unipro_core_clk_src,
861 .clkr.hw.init = &(struct clk_init_data){
862 .name = "gcc_ufs_phy_unipro_core_clk_src",
863 .parent_data = gcc_parent_data_0,
864 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
865 .ops = &clk_rcg2_ops,
866 },
867};
868
869static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
870 F(66666667, P_GPLL0_OUT_EVEN, 4.5, 0, 0),
871 F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
872 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
873 F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
874 { }
875};
876
877static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
878 .cmd_rcgr = 0xf01c,
879 .mnd_width = 8,
880 .hid_width = 5,
881 .parent_map = gcc_parent_map_0,
882 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
883 .clkr.hw.init = &(struct clk_init_data){
884 .name = "gcc_usb30_prim_master_clk_src",
885 .parent_data = gcc_parent_data_0,
886 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
887 .ops = &clk_rcg2_ops,
888 },
889};
890
891static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {
892 F(19200000, P_BI_TCXO, 1, 0, 0),
893 F(20000000, P_GPLL0_OUT_EVEN, 15, 0, 0),
894 F(40000000, P_GPLL0_OUT_EVEN, 7.5, 0, 0),
895 F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
896 { }
897};
898
899static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
900 .cmd_rcgr = 0xf034,
901 .mnd_width = 0,
902 .hid_width = 5,
903 .parent_map = gcc_parent_map_0,
904 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
905 .clkr.hw.init = &(struct clk_init_data){
906 .name = "gcc_usb30_prim_mock_utmi_clk_src",
907 .parent_data = gcc_parent_data_0,
908 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
909 .ops = &clk_rcg2_ops,
910 },
911};
912
913static const struct freq_tbl ftbl_gcc_usb3_prim_phy_aux_clk_src[] = {
914 F(19200000, P_BI_TCXO, 1, 0, 0),
915 { }
916};
917
918static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
919 .cmd_rcgr = 0xf060,
920 .mnd_width = 0,
921 .hid_width = 5,
922 .parent_map = gcc_parent_map_3,
923 .freq_tbl = ftbl_gcc_usb3_prim_phy_aux_clk_src,
924 .clkr.hw.init = &(struct clk_init_data){
925 .name = "gcc_usb3_prim_phy_aux_clk_src",
926 .parent_data = gcc_parent_data_3,
927 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
928 .ops = &clk_rcg2_ops,
929 },
930};
931
932static struct clk_rcg2 gcc_vs_ctrl_clk_src = {
933 .cmd_rcgr = 0x7a030,
934 .mnd_width = 0,
935 .hid_width = 5,
936 .parent_map = gcc_parent_map_2,
937 .freq_tbl = ftbl_gcc_usb3_prim_phy_aux_clk_src,
938 .clkr.hw.init = &(struct clk_init_data){
939 .name = "gcc_vs_ctrl_clk_src",
940 .parent_data = gcc_parent_data_2,
941 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
942 .ops = &clk_rcg2_ops,
943 },
944};
945
946static const struct freq_tbl ftbl_gcc_vsensor_clk_src[] = {
947 F(19200000, P_BI_TCXO, 1, 0, 0),
948 F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
949 F(600000000, P_GPLL0_OUT_MAIN, 1, 0, 0),
950 { }
951};
952
953static struct clk_rcg2 gcc_vsensor_clk_src = {
954 .cmd_rcgr = 0x7a018,
955 .mnd_width = 0,
956 .hid_width = 5,
957 .parent_map = gcc_parent_map_8,
958 .freq_tbl = ftbl_gcc_vsensor_clk_src,
959 .clkr.hw.init = &(struct clk_init_data){
960 .name = "gcc_vsensor_clk_src",
961 .parent_data = gcc_parent_data_8,
962 .num_parents = ARRAY_SIZE(gcc_parent_data_8),
963 .ops = &clk_rcg2_ops,
964 },
965};
966
967static struct clk_branch gcc_aggre_noc_pcie_tbu_clk = {
968 .halt_reg = 0x2800c,
969 .halt_check = BRANCH_HALT,
970 .clkr = {
971 .enable_reg = 0x2800c,
972 .enable_mask = BIT(0),
973 .hw.init = &(struct clk_init_data){
974 .name = "gcc_aggre_noc_pcie_tbu_clk",
975 .ops = &clk_branch2_ops,
976 },
977 },
978};
979
980static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
981 .halt_reg = 0x82024,
982 .halt_check = BRANCH_HALT,
983 .hwcg_reg = 0x82024,
984 .hwcg_bit = 1,
985 .clkr = {
986 .enable_reg = 0x82024,
987 .enable_mask = BIT(0),
988 .hw.init = &(struct clk_init_data){
989 .name = "gcc_aggre_ufs_phy_axi_clk",
990 .parent_hws = (const struct clk_hw*[]){
991 &gcc_ufs_phy_axi_clk_src.clkr.hw,
992 },
993 .num_parents = 1,
994 .flags = CLK_SET_RATE_PARENT,
995 .ops = &clk_branch2_ops,
996 },
997 },
998};
999
1000static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = {
1001 .halt_reg = 0x82024,
1002 .halt_check = BRANCH_HALT,
1003 .hwcg_reg = 0x82024,
1004 .hwcg_bit = 1,
1005 .clkr = {
1006 .enable_reg = 0x82024,
1007 .enable_mask = BIT(1),
1008 .hw.init = &(struct clk_init_data){
1009 .name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk",
1010 .parent_hws = (const struct clk_hw*[]){
1011 &gcc_aggre_ufs_phy_axi_clk.clkr.hw,
1012 },
1013 .num_parents = 1,
1014 .flags = CLK_SET_RATE_PARENT,
1015 .ops = &clk_branch_simple_ops,
1016 },
1017 },
1018};
1019
1020static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
1021 .halt_reg = 0x8201c,
1022 .halt_check = BRANCH_HALT,
1023 .clkr = {
1024 .enable_reg = 0x8201c,
1025 .enable_mask = BIT(0),
1026 .hw.init = &(struct clk_init_data){
1027 .name = "gcc_aggre_usb3_prim_axi_clk",
1028 .parent_hws = (const struct clk_hw*[]){
1029 &gcc_usb30_prim_master_clk_src.clkr.hw,
1030 },
1031 .num_parents = 1,
1032 .flags = CLK_SET_RATE_PARENT,
1033 .ops = &clk_branch2_ops,
1034 },
1035 },
1036};
1037
1038static struct clk_branch gcc_apc_vs_clk = {
1039 .halt_reg = 0x7a050,
1040 .halt_check = BRANCH_HALT,
1041 .clkr = {
1042 .enable_reg = 0x7a050,
1043 .enable_mask = BIT(0),
1044 .hw.init = &(struct clk_init_data){
1045 .name = "gcc_apc_vs_clk",
1046 .parent_hws = (const struct clk_hw*[]){
1047 &gcc_vsensor_clk_src.clkr.hw,
1048 },
1049 .num_parents = 1,
1050 .flags = CLK_SET_RATE_PARENT,
1051 .ops = &clk_branch2_ops,
1052 },
1053 },
1054};
1055
1056static struct clk_branch gcc_boot_rom_ahb_clk = {
1057 .halt_reg = 0x38004,
1058 .halt_check = BRANCH_HALT_VOTED,
1059 .hwcg_reg = 0x38004,
1060 .hwcg_bit = 1,
1061 .clkr = {
1062 .enable_reg = 0x52004,
1063 .enable_mask = BIT(10),
1064 .hw.init = &(struct clk_init_data){
1065 .name = "gcc_boot_rom_ahb_clk",
1066 .ops = &clk_branch2_ops,
1067 },
1068 },
1069};
1070
1071static struct clk_branch gcc_camera_hf_axi_clk = {
1072 .halt_reg = 0xb020,
1073 .halt_check = BRANCH_HALT,
1074 .clkr = {
1075 .enable_reg = 0xb020,
1076 .enable_mask = BIT(0),
1077 .hw.init = &(struct clk_init_data){
1078 .name = "gcc_camera_hf_axi_clk",
1079 .ops = &clk_branch2_ops,
1080 },
1081 },
1082};
1083
1084static struct clk_branch gcc_camera_sf_axi_clk = {
1085 .halt_reg = 0xb06c,
1086 .halt_check = BRANCH_HALT,
1087 .clkr = {
1088 .enable_reg = 0xb06c,
1089 .enable_mask = BIT(0),
1090 .hw.init = &(struct clk_init_data){
1091 .name = "gcc_camera_sf_axi_clk",
1092 .ops = &clk_branch2_ops,
1093 },
1094 },
1095};
1096
1097static struct clk_branch gcc_ce1_ahb_clk = {
1098 .halt_reg = 0x4100c,
1099 .halt_check = BRANCH_HALT_VOTED,
1100 .hwcg_reg = 0x4100c,
1101 .hwcg_bit = 1,
1102 .clkr = {
1103 .enable_reg = 0x52004,
1104 .enable_mask = BIT(3),
1105 .hw.init = &(struct clk_init_data){
1106 .name = "gcc_ce1_ahb_clk",
1107 .ops = &clk_branch2_ops,
1108 },
1109 },
1110};
1111
1112static struct clk_branch gcc_ce1_axi_clk = {
1113 .halt_reg = 0x41008,
1114 .halt_check = BRANCH_HALT_VOTED,
1115 .clkr = {
1116 .enable_reg = 0x52004,
1117 .enable_mask = BIT(4),
1118 .hw.init = &(struct clk_init_data){
1119 .name = "gcc_ce1_axi_clk",
1120 .ops = &clk_branch2_ops,
1121 },
1122 },
1123};
1124
1125static struct clk_branch gcc_ce1_clk = {
1126 .halt_reg = 0x41004,
1127 .halt_check = BRANCH_HALT_VOTED,
1128 .clkr = {
1129 .enable_reg = 0x52004,
1130 .enable_mask = BIT(5),
1131 .hw.init = &(struct clk_init_data){
1132 .name = "gcc_ce1_clk",
1133 .ops = &clk_branch2_ops,
1134 },
1135 },
1136};
1137
1138static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1139 .halt_reg = 0x502c,
1140 .halt_check = BRANCH_HALT,
1141 .clkr = {
1142 .enable_reg = 0x502c,
1143 .enable_mask = BIT(0),
1144 .hw.init = &(struct clk_init_data){
1145 .name = "gcc_cfg_noc_usb3_prim_axi_clk",
1146 .parent_hws = (const struct clk_hw*[]){
1147 &gcc_usb30_prim_master_clk_src.clkr.hw,
1148 },
1149 .num_parents = 1,
1150 .flags = CLK_SET_RATE_PARENT,
1151 .ops = &clk_branch2_ops,
1152 },
1153 },
1154};
1155
1156static struct clk_branch gcc_cpuss_ahb_clk = {
1157 .halt_reg = 0x48000,
1158 .halt_check = BRANCH_HALT_VOTED,
1159 .clkr = {
1160 .enable_reg = 0x52004,
1161 .enable_mask = BIT(21),
1162 .hw.init = &(struct clk_init_data){
1163 .name = "gcc_cpuss_ahb_clk",
1164 .parent_hws = (const struct clk_hw*[]){
1165 &gcc_cpuss_ahb_clk_src.clkr.hw,
1166 },
1167 .num_parents = 1,
1168 .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
1169 .ops = &clk_branch2_ops,
1170 },
1171 },
1172};
1173
1174static struct clk_branch gcc_cpuss_rbcpr_clk = {
1175 .halt_reg = 0x48008,
1176 .halt_check = BRANCH_HALT,
1177 .clkr = {
1178 .enable_reg = 0x48008,
1179 .enable_mask = BIT(0),
1180 .hw.init = &(struct clk_init_data){
1181 .name = "gcc_cpuss_rbcpr_clk",
1182 .parent_hws = (const struct clk_hw*[]){
1183 &gcc_cpuss_rbcpr_clk_src.clkr.hw,
1184 },
1185 .num_parents = 1,
1186 .flags = CLK_SET_RATE_PARENT,
1187 .ops = &clk_branch2_ops,
1188 },
1189 },
1190};
1191
1192static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1193 .halt_reg = 0x4452c,
1194 .halt_check = BRANCH_VOTED,
1195 .clkr = {
1196 .enable_reg = 0x4452c,
1197 .enable_mask = BIT(0),
1198 .hw.init = &(struct clk_init_data){
1199 .name = "gcc_ddrss_gpu_axi_clk",
1200 .ops = &clk_branch2_ops,
1201 },
1202 },
1203};
1204
1205
1206static struct clk_branch gcc_disp_gpll0_clk_src = {
1207 .halt_check = BRANCH_HALT_DELAY,
1208 .clkr = {
1209 .enable_reg = 0x52004,
1210 .enable_mask = BIT(18),
1211 .hw.init = &(struct clk_init_data){
1212 .name = "gcc_disp_gpll0_clk_src",
1213 .parent_hws = (const struct clk_hw*[]){
1214 &gpll0.clkr.hw,
1215 },
1216 .num_parents = 1,
1217 .ops = &clk_branch2_aon_ops,
1218 },
1219 },
1220};
1221
1222static struct clk_branch gcc_disp_gpll0_div_clk_src = {
1223 .halt_check = BRANCH_HALT_DELAY,
1224 .clkr = {
1225 .enable_reg = 0x52004,
1226 .enable_mask = BIT(19),
1227 .hw.init = &(struct clk_init_data){
1228 .name = "gcc_disp_gpll0_div_clk_src",
1229 .parent_hws = (const struct clk_hw*[]){
1230 &gcc_pll0_main_div_cdiv.hw,
1231 },
1232 .num_parents = 1,
1233 .ops = &clk_branch2_ops,
1234 },
1235 },
1236};
1237
1238static struct clk_branch gcc_disp_hf_axi_clk = {
1239 .halt_reg = 0xb024,
1240 .halt_check = BRANCH_HALT,
1241 .clkr = {
1242 .enable_reg = 0xb024,
1243 .enable_mask = BIT(0),
1244 .hw.init = &(struct clk_init_data){
1245 .name = "gcc_disp_hf_axi_clk",
1246 .ops = &clk_branch2_ops,
1247 },
1248 },
1249};
1250
1251static struct clk_branch gcc_disp_sf_axi_clk = {
1252 .halt_reg = 0xb070,
1253 .halt_check = BRANCH_HALT,
1254 .clkr = {
1255 .enable_reg = 0xb070,
1256 .enable_mask = BIT(0),
1257 .hw.init = &(struct clk_init_data){
1258 .name = "gcc_disp_sf_axi_clk",
1259 .ops = &clk_branch2_ops,
1260 },
1261 },
1262};
1263
1264
1265static struct clk_branch gcc_gp1_clk = {
1266 .halt_reg = 0x64000,
1267 .halt_check = BRANCH_HALT,
1268 .clkr = {
1269 .enable_reg = 0x64000,
1270 .enable_mask = BIT(0),
1271 .hw.init = &(struct clk_init_data){
1272 .name = "gcc_gp1_clk",
1273 .parent_hws = (const struct clk_hw*[]){
1274 &gcc_gp1_clk_src.clkr.hw,
1275 },
1276 .num_parents = 1,
1277 .flags = CLK_SET_RATE_PARENT,
1278 .ops = &clk_branch2_ops,
1279 },
1280 },
1281};
1282
1283static struct clk_branch gcc_gp2_clk = {
1284 .halt_reg = 0x65000,
1285 .halt_check = BRANCH_HALT,
1286 .clkr = {
1287 .enable_reg = 0x65000,
1288 .enable_mask = BIT(0),
1289 .hw.init = &(struct clk_init_data){
1290 .name = "gcc_gp2_clk",
1291 .parent_hws = (const struct clk_hw*[]){
1292 &gcc_gp2_clk_src.clkr.hw,
1293 },
1294 .num_parents = 1,
1295 .flags = CLK_SET_RATE_PARENT,
1296 .ops = &clk_branch2_ops,
1297 },
1298 },
1299};
1300
1301static struct clk_branch gcc_gp3_clk = {
1302 .halt_reg = 0x66000,
1303 .halt_check = BRANCH_HALT,
1304 .clkr = {
1305 .enable_reg = 0x66000,
1306 .enable_mask = BIT(0),
1307 .hw.init = &(struct clk_init_data){
1308 .name = "gcc_gp3_clk",
1309 .parent_hws = (const struct clk_hw*[]){
1310 &gcc_gp3_clk_src.clkr.hw,
1311 },
1312 .num_parents = 1,
1313 .flags = CLK_SET_RATE_PARENT,
1314 .ops = &clk_branch2_ops,
1315 },
1316 },
1317};
1318
1319static struct clk_branch gcc_gpu_gpll0_clk_src = {
1320 .halt_check = BRANCH_HALT_DELAY,
1321 .clkr = {
1322 .enable_reg = 0x52004,
1323 .enable_mask = BIT(15),
1324 .hw.init = &(struct clk_init_data){
1325 .name = "gcc_gpu_gpll0_clk_src",
1326 .parent_hws = (const struct clk_hw*[]){
1327 &gpll0.clkr.hw,
1328 },
1329 .num_parents = 1,
1330 .ops = &clk_branch2_ops,
1331 },
1332 },
1333};
1334
1335static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
1336 .halt_check = BRANCH_HALT_DELAY,
1337 .clkr = {
1338 .enable_reg = 0x52004,
1339 .enable_mask = BIT(16),
1340 .hw.init = &(struct clk_init_data){
1341 .name = "gcc_gpu_gpll0_div_clk_src",
1342 .parent_hws = (const struct clk_hw*[]){
1343 &gcc_pll0_main_div_cdiv.hw,
1344 },
1345 .num_parents = 1,
1346 .ops = &clk_branch2_ops,
1347 },
1348 },
1349};
1350
1351static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
1352 .halt_reg = 0x7100c,
1353 .halt_check = BRANCH_VOTED,
1354 .clkr = {
1355 .enable_reg = 0x7100c,
1356 .enable_mask = BIT(0),
1357 .hw.init = &(struct clk_init_data){
1358 .name = "gcc_gpu_memnoc_gfx_clk",
1359 .ops = &clk_branch2_ops,
1360 },
1361 },
1362};
1363
1364static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
1365 .halt_reg = 0x71018,
1366 .halt_check = BRANCH_HALT,
1367 .clkr = {
1368 .enable_reg = 0x71018,
1369 .enable_mask = BIT(0),
1370 .hw.init = &(struct clk_init_data){
1371 .name = "gcc_gpu_snoc_dvm_gfx_clk",
1372 .ops = &clk_branch2_ops,
1373 },
1374 },
1375};
1376
1377static struct clk_branch gcc_gpu_vs_clk = {
1378 .halt_reg = 0x7a04c,
1379 .halt_check = BRANCH_HALT,
1380 .clkr = {
1381 .enable_reg = 0x7a04c,
1382 .enable_mask = BIT(0),
1383 .hw.init = &(struct clk_init_data){
1384 .name = "gcc_gpu_vs_clk",
1385 .parent_hws = (const struct clk_hw*[]){
1386 &gcc_vsensor_clk_src.clkr.hw,
1387 },
1388 .num_parents = 1,
1389 .flags = CLK_SET_RATE_PARENT,
1390 .ops = &clk_branch2_ops,
1391 },
1392 },
1393};
1394
1395static struct clk_branch gcc_npu_axi_clk = {
1396 .halt_reg = 0x4d008,
1397 .halt_check = BRANCH_HALT,
1398 .clkr = {
1399 .enable_reg = 0x4d008,
1400 .enable_mask = BIT(0),
1401 .hw.init = &(struct clk_init_data){
1402 .name = "gcc_npu_axi_clk",
1403 .ops = &clk_branch2_ops,
1404 },
1405 },
1406};
1407
1408static struct clk_branch gcc_npu_cfg_ahb_clk = {
1409 .halt_reg = 0x4d004,
1410 .halt_check = BRANCH_HALT,
1411 .hwcg_reg = 0x4d004,
1412 .hwcg_bit = 1,
1413 .clkr = {
1414 .enable_reg = 0x4d004,
1415 .enable_mask = BIT(0),
1416 .hw.init = &(struct clk_init_data){
1417 .name = "gcc_npu_cfg_ahb_clk",
1418 .flags = CLK_IS_CRITICAL,
1419 .ops = &clk_branch2_ops,
1420 },
1421 },
1422};
1423
1424static struct clk_branch gcc_npu_gpll0_clk_src = {
1425 .halt_check = BRANCH_HALT_DELAY,
1426 .clkr = {
1427 .enable_reg = 0x52004,
1428 .enable_mask = BIT(25),
1429 .hw.init = &(struct clk_init_data){
1430 .name = "gcc_npu_gpll0_clk_src",
1431 .parent_hws = (const struct clk_hw*[]){
1432 &gpll0.clkr.hw,
1433 },
1434 .num_parents = 1,
1435 .ops = &clk_branch2_ops,
1436 },
1437 },
1438};
1439
1440static struct clk_branch gcc_npu_gpll0_div_clk_src = {
1441 .halt_check = BRANCH_HALT_DELAY,
1442 .clkr = {
1443 .enable_reg = 0x52004,
1444 .enable_mask = BIT(26),
1445 .hw.init = &(struct clk_init_data){
1446 .name = "gcc_npu_gpll0_div_clk_src",
1447 .parent_hws = (const struct clk_hw*[]){
1448 &gcc_pll0_main_div_cdiv.hw,
1449 },
1450 .num_parents = 1,
1451 .flags = CLK_SET_RATE_PARENT,
1452 .ops = &clk_branch2_ops,
1453 },
1454 },
1455};
1456
1457static struct clk_branch gcc_pcie_0_aux_clk = {
1458 .halt_reg = 0x6b01c,
1459 .halt_check = BRANCH_HALT_VOTED,
1460 .clkr = {
1461 .enable_reg = 0x5200c,
1462 .enable_mask = BIT(3),
1463 .hw.init = &(struct clk_init_data){
1464 .name = "gcc_pcie_0_aux_clk",
1465 .parent_hws = (const struct clk_hw*[]){
1466 &gcc_pcie_0_aux_clk_src.clkr.hw,
1467 },
1468 .num_parents = 1,
1469 .flags = CLK_SET_RATE_PARENT,
1470 .ops = &clk_branch2_ops,
1471 },
1472 },
1473};
1474
1475static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
1476 .halt_reg = 0x6b018,
1477 .halt_check = BRANCH_HALT_VOTED,
1478 .hwcg_reg = 0x6b018,
1479 .hwcg_bit = 1,
1480 .clkr = {
1481 .enable_reg = 0x5200c,
1482 .enable_mask = BIT(2),
1483 .hw.init = &(struct clk_init_data){
1484 .name = "gcc_pcie_0_cfg_ahb_clk",
1485 .ops = &clk_branch2_ops,
1486 },
1487 },
1488};
1489
1490static struct clk_branch gcc_pcie_0_clkref_clk = {
1491 .halt_reg = 0x8c008,
1492 .halt_check = BRANCH_HALT,
1493 .clkr = {
1494 .enable_reg = 0x8c008,
1495 .enable_mask = BIT(0),
1496 .hw.init = &(struct clk_init_data){
1497 .name = "gcc_pcie_0_clkref_clk",
1498 .ops = &clk_branch2_ops,
1499 },
1500 },
1501};
1502
1503static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
1504 .halt_reg = 0x6b014,
1505 .halt_check = BRANCH_HALT_VOTED,
1506 .clkr = {
1507 .enable_reg = 0x5200c,
1508 .enable_mask = BIT(1),
1509 .hw.init = &(struct clk_init_data){
1510 .name = "gcc_pcie_0_mstr_axi_clk",
1511 .ops = &clk_branch2_ops,
1512 },
1513 },
1514};
1515
1516static struct clk_branch gcc_pcie_0_pipe_clk = {
1517 .halt_reg = 0x6b020,
1518 .halt_check = BRANCH_HALT_SKIP,
1519 .clkr = {
1520 .enable_reg = 0x5200c,
1521 .enable_mask = BIT(4),
1522 .hw.init = &(struct clk_init_data){
1523 .name = "gcc_pcie_0_pipe_clk",
1524 .ops = &clk_branch2_ops,
1525 },
1526 },
1527};
1528
1529static struct clk_branch gcc_pcie_0_slv_axi_clk = {
1530 .halt_reg = 0x6b010,
1531 .halt_check = BRANCH_HALT_VOTED,
1532 .hwcg_reg = 0x6b010,
1533 .hwcg_bit = 1,
1534 .clkr = {
1535 .enable_reg = 0x5200c,
1536 .enable_mask = BIT(0),
1537 .hw.init = &(struct clk_init_data){
1538 .name = "gcc_pcie_0_slv_axi_clk",
1539 .ops = &clk_branch2_ops,
1540 },
1541 },
1542};
1543
1544static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
1545 .halt_reg = 0x6b00c,
1546 .halt_check = BRANCH_HALT_VOTED,
1547 .clkr = {
1548 .enable_reg = 0x5200c,
1549 .enable_mask = BIT(5),
1550 .hw.init = &(struct clk_init_data){
1551 .name = "gcc_pcie_0_slv_q2a_axi_clk",
1552 .ops = &clk_branch2_ops,
1553 },
1554 },
1555};
1556
1557static struct clk_branch gcc_pcie_phy_aux_clk = {
1558 .halt_reg = 0x6f004,
1559 .halt_check = BRANCH_HALT,
1560 .clkr = {
1561 .enable_reg = 0x6f004,
1562 .enable_mask = BIT(0),
1563 .hw.init = &(struct clk_init_data){
1564 .name = "gcc_pcie_phy_aux_clk",
1565 .parent_hws = (const struct clk_hw*[]){
1566 &gcc_pcie_0_aux_clk_src.clkr.hw,
1567 },
1568 .num_parents = 1,
1569 .flags = CLK_SET_RATE_PARENT,
1570 .ops = &clk_branch2_ops,
1571 },
1572 },
1573};
1574
1575static struct clk_branch gcc_pcie_phy_refgen_clk = {
1576 .halt_reg = 0x6f02c,
1577 .halt_check = BRANCH_HALT,
1578 .clkr = {
1579 .enable_reg = 0x6f02c,
1580 .enable_mask = BIT(0),
1581 .hw.init = &(struct clk_init_data){
1582 .name = "gcc_pcie_phy_refgen_clk",
1583 .parent_hws = (const struct clk_hw*[]){
1584 &gcc_pcie_phy_refgen_clk_src.clkr.hw,
1585 },
1586 .num_parents = 1,
1587 .flags = CLK_SET_RATE_PARENT,
1588 .ops = &clk_branch2_ops,
1589 },
1590 },
1591};
1592
1593static struct clk_branch gcc_pdm2_clk = {
1594 .halt_reg = 0x3300c,
1595 .halt_check = BRANCH_HALT,
1596 .clkr = {
1597 .enable_reg = 0x3300c,
1598 .enable_mask = BIT(0),
1599 .hw.init = &(struct clk_init_data){
1600 .name = "gcc_pdm2_clk",
1601 .parent_hws = (const struct clk_hw*[]){
1602 &gcc_pdm2_clk_src.clkr.hw,
1603 },
1604 .num_parents = 1,
1605 .flags = CLK_SET_RATE_PARENT,
1606 .ops = &clk_branch2_ops,
1607 },
1608 },
1609};
1610
1611static struct clk_branch gcc_pdm_ahb_clk = {
1612 .halt_reg = 0x33004,
1613 .halt_check = BRANCH_HALT,
1614 .hwcg_reg = 0x33004,
1615 .hwcg_bit = 1,
1616 .clkr = {
1617 .enable_reg = 0x33004,
1618 .enable_mask = BIT(0),
1619 .hw.init = &(struct clk_init_data){
1620 .name = "gcc_pdm_ahb_clk",
1621 .ops = &clk_branch2_ops,
1622 },
1623 },
1624};
1625
1626static struct clk_branch gcc_pdm_xo4_clk = {
1627 .halt_reg = 0x33008,
1628 .halt_check = BRANCH_HALT,
1629 .clkr = {
1630 .enable_reg = 0x33008,
1631 .enable_mask = BIT(0),
1632 .hw.init = &(struct clk_init_data){
1633 .name = "gcc_pdm_xo4_clk",
1634 .ops = &clk_branch2_ops,
1635 },
1636 },
1637};
1638
1639static struct clk_branch gcc_prng_ahb_clk = {
1640 .halt_reg = 0x34004,
1641 .halt_check = BRANCH_HALT_VOTED,
1642 .hwcg_reg = 0x34004,
1643 .hwcg_bit = 1,
1644 .clkr = {
1645 .enable_reg = 0x52004,
1646 .enable_mask = BIT(13),
1647 .hw.init = &(struct clk_init_data){
1648 .name = "gcc_prng_ahb_clk",
1649 .ops = &clk_branch2_ops,
1650 },
1651 },
1652};
1653
1654static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
1655 .halt_reg = 0x17014,
1656 .halt_check = BRANCH_HALT_VOTED,
1657 .clkr = {
1658 .enable_reg = 0x5200c,
1659 .enable_mask = BIT(9),
1660 .hw.init = &(struct clk_init_data){
1661 .name = "gcc_qupv3_wrap0_core_2x_clk",
1662 .ops = &clk_branch2_ops,
1663 },
1664 },
1665};
1666
1667static struct clk_branch gcc_qupv3_wrap0_core_clk = {
1668 .halt_reg = 0x1700c,
1669 .halt_check = BRANCH_HALT_VOTED,
1670 .clkr = {
1671 .enable_reg = 0x5200c,
1672 .enable_mask = BIT(8),
1673 .hw.init = &(struct clk_init_data){
1674 .name = "gcc_qupv3_wrap0_core_clk",
1675 .ops = &clk_branch2_ops,
1676 },
1677 },
1678};
1679
1680static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
1681 .halt_reg = 0x17030,
1682 .halt_check = BRANCH_HALT_VOTED,
1683 .clkr = {
1684 .enable_reg = 0x5200c,
1685 .enable_mask = BIT(10),
1686 .hw.init = &(struct clk_init_data){
1687 .name = "gcc_qupv3_wrap0_s0_clk",
1688 .parent_hws = (const struct clk_hw*[]){
1689 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
1690 },
1691 .num_parents = 1,
1692 .flags = CLK_SET_RATE_PARENT,
1693 .ops = &clk_branch2_ops,
1694 },
1695 },
1696};
1697
1698static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
1699 .halt_reg = 0x17160,
1700 .halt_check = BRANCH_HALT_VOTED,
1701 .clkr = {
1702 .enable_reg = 0x5200c,
1703 .enable_mask = BIT(11),
1704 .hw.init = &(struct clk_init_data){
1705 .name = "gcc_qupv3_wrap0_s1_clk",
1706 .parent_hws = (const struct clk_hw*[]){
1707 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
1708 },
1709 .num_parents = 1,
1710 .flags = CLK_SET_RATE_PARENT,
1711 .ops = &clk_branch2_ops,
1712 },
1713 },
1714};
1715
1716static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
1717 .halt_reg = 0x17290,
1718 .halt_check = BRANCH_HALT_VOTED,
1719 .clkr = {
1720 .enable_reg = 0x5200c,
1721 .enable_mask = BIT(12),
1722 .hw.init = &(struct clk_init_data){
1723 .name = "gcc_qupv3_wrap0_s2_clk",
1724 .parent_hws = (const struct clk_hw*[]){
1725 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
1726 },
1727 .num_parents = 1,
1728 .flags = CLK_SET_RATE_PARENT,
1729 .ops = &clk_branch2_ops,
1730 },
1731 },
1732};
1733
1734static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
1735 .halt_reg = 0x173c0,
1736 .halt_check = BRANCH_HALT_VOTED,
1737 .clkr = {
1738 .enable_reg = 0x5200c,
1739 .enable_mask = BIT(13),
1740 .hw.init = &(struct clk_init_data){
1741 .name = "gcc_qupv3_wrap0_s3_clk",
1742 .parent_hws = (const struct clk_hw*[]){
1743 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
1744 },
1745 .num_parents = 1,
1746 .flags = CLK_SET_RATE_PARENT,
1747 .ops = &clk_branch2_ops,
1748 },
1749 },
1750};
1751
1752static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
1753 .halt_reg = 0x174f0,
1754 .halt_check = BRANCH_HALT_VOTED,
1755 .clkr = {
1756 .enable_reg = 0x5200c,
1757 .enable_mask = BIT(14),
1758 .hw.init = &(struct clk_init_data){
1759 .name = "gcc_qupv3_wrap0_s4_clk",
1760 .parent_hws = (const struct clk_hw*[]){
1761 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
1762 },
1763 .num_parents = 1,
1764 .flags = CLK_SET_RATE_PARENT,
1765 .ops = &clk_branch2_ops,
1766 },
1767 },
1768};
1769
1770static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
1771 .halt_reg = 0x17620,
1772 .halt_check = BRANCH_HALT_VOTED,
1773 .clkr = {
1774 .enable_reg = 0x5200c,
1775 .enable_mask = BIT(15),
1776 .hw.init = &(struct clk_init_data){
1777 .name = "gcc_qupv3_wrap0_s5_clk",
1778 .parent_hws = (const struct clk_hw*[]){
1779 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
1780 },
1781 .num_parents = 1,
1782 .flags = CLK_SET_RATE_PARENT,
1783 .ops = &clk_branch2_ops,
1784 },
1785 },
1786};
1787
1788static struct clk_branch gcc_qupv3_wrap0_s6_clk = {
1789 .halt_reg = 0x17750,
1790 .halt_check = BRANCH_HALT_VOTED,
1791 .clkr = {
1792 .enable_reg = 0x5200c,
1793 .enable_mask = BIT(16),
1794 .hw.init = &(struct clk_init_data){
1795 .name = "gcc_qupv3_wrap0_s6_clk",
1796 .parent_hws = (const struct clk_hw*[]){
1797 &gcc_qupv3_wrap0_s6_clk_src.clkr.hw,
1798 },
1799 .num_parents = 1,
1800 .flags = CLK_SET_RATE_PARENT,
1801 .ops = &clk_branch2_ops,
1802 },
1803 },
1804};
1805
1806static struct clk_branch gcc_qupv3_wrap0_s7_clk = {
1807 .halt_reg = 0x17880,
1808 .halt_check = BRANCH_HALT_VOTED,
1809 .clkr = {
1810 .enable_reg = 0x5200c,
1811 .enable_mask = BIT(17),
1812 .hw.init = &(struct clk_init_data){
1813 .name = "gcc_qupv3_wrap0_s7_clk",
1814 .parent_hws = (const struct clk_hw*[]){
1815 &gcc_qupv3_wrap0_s7_clk_src.clkr.hw,
1816 },
1817 .num_parents = 1,
1818 .flags = CLK_SET_RATE_PARENT,
1819 .ops = &clk_branch2_ops,
1820 },
1821 },
1822};
1823
1824static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
1825 .halt_reg = 0x18004,
1826 .halt_check = BRANCH_HALT_VOTED,
1827 .clkr = {
1828 .enable_reg = 0x5200c,
1829 .enable_mask = BIT(18),
1830 .hw.init = &(struct clk_init_data){
1831 .name = "gcc_qupv3_wrap1_core_2x_clk",
1832 .ops = &clk_branch2_ops,
1833 },
1834 },
1835};
1836
1837static struct clk_branch gcc_qupv3_wrap1_core_clk = {
1838 .halt_reg = 0x18008,
1839 .halt_check = BRANCH_HALT_VOTED,
1840 .clkr = {
1841 .enable_reg = 0x5200c,
1842 .enable_mask = BIT(19),
1843 .hw.init = &(struct clk_init_data){
1844 .name = "gcc_qupv3_wrap1_core_clk",
1845 .ops = &clk_branch2_ops,
1846 },
1847 },
1848};
1849
1850static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
1851 .halt_reg = 0x18014,
1852 .halt_check = BRANCH_HALT_VOTED,
1853 .clkr = {
1854 .enable_reg = 0x5200c,
1855 .enable_mask = BIT(22),
1856 .hw.init = &(struct clk_init_data){
1857 .name = "gcc_qupv3_wrap1_s0_clk",
1858 .parent_hws = (const struct clk_hw*[]){
1859 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
1860 },
1861 .num_parents = 1,
1862 .flags = CLK_SET_RATE_PARENT,
1863 .ops = &clk_branch2_ops,
1864 },
1865 },
1866};
1867
1868static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
1869 .halt_reg = 0x18144,
1870 .halt_check = BRANCH_HALT_VOTED,
1871 .clkr = {
1872 .enable_reg = 0x5200c,
1873 .enable_mask = BIT(23),
1874 .hw.init = &(struct clk_init_data){
1875 .name = "gcc_qupv3_wrap1_s1_clk",
1876 .parent_hws = (const struct clk_hw*[]){
1877 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
1878 },
1879 .num_parents = 1,
1880 .flags = CLK_SET_RATE_PARENT,
1881 .ops = &clk_branch2_ops,
1882 },
1883 },
1884};
1885
1886static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
1887 .halt_reg = 0x18274,
1888 .halt_check = BRANCH_HALT_VOTED,
1889 .clkr = {
1890 .enable_reg = 0x5200c,
1891 .enable_mask = BIT(24),
1892 .hw.init = &(struct clk_init_data){
1893 .name = "gcc_qupv3_wrap1_s2_clk",
1894 .parent_hws = (const struct clk_hw*[]){
1895 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
1896 },
1897 .num_parents = 1,
1898 .flags = CLK_SET_RATE_PARENT,
1899 .ops = &clk_branch2_ops,
1900 },
1901 },
1902};
1903
1904static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
1905 .halt_reg = 0x183a4,
1906 .halt_check = BRANCH_HALT_VOTED,
1907 .clkr = {
1908 .enable_reg = 0x5200c,
1909 .enable_mask = BIT(25),
1910 .hw.init = &(struct clk_init_data){
1911 .name = "gcc_qupv3_wrap1_s3_clk",
1912 .parent_hws = (const struct clk_hw*[]){
1913 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
1914 },
1915 .num_parents = 1,
1916 .flags = CLK_SET_RATE_PARENT,
1917 .ops = &clk_branch2_ops,
1918 },
1919 },
1920};
1921
1922static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
1923 .halt_reg = 0x184d4,
1924 .halt_check = BRANCH_HALT_VOTED,
1925 .clkr = {
1926 .enable_reg = 0x5200c,
1927 .enable_mask = BIT(26),
1928 .hw.init = &(struct clk_init_data){
1929 .name = "gcc_qupv3_wrap1_s4_clk",
1930 .parent_hws = (const struct clk_hw*[]){
1931 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
1932 },
1933 .num_parents = 1,
1934 .flags = CLK_SET_RATE_PARENT,
1935 .ops = &clk_branch2_ops,
1936 },
1937 },
1938};
1939
1940static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
1941 .halt_reg = 0x18604,
1942 .halt_check = BRANCH_HALT_VOTED,
1943 .clkr = {
1944 .enable_reg = 0x5200c,
1945 .enable_mask = BIT(27),
1946 .hw.init = &(struct clk_init_data){
1947 .name = "gcc_qupv3_wrap1_s5_clk",
1948 .parent_hws = (const struct clk_hw*[]){
1949 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
1950 },
1951 .num_parents = 1,
1952 .flags = CLK_SET_RATE_PARENT,
1953 .ops = &clk_branch2_ops,
1954 },
1955 },
1956};
1957
1958static struct clk_branch gcc_qupv3_wrap1_s6_clk = {
1959 .halt_reg = 0x18734,
1960 .halt_check = BRANCH_HALT_VOTED,
1961 .clkr = {
1962 .enable_reg = 0x5200c,
1963 .enable_mask = BIT(28),
1964 .hw.init = &(struct clk_init_data){
1965 .name = "gcc_qupv3_wrap1_s6_clk",
1966 .parent_hws = (const struct clk_hw*[]){
1967 &gcc_qupv3_wrap1_s6_clk_src.clkr.hw,
1968 },
1969 .num_parents = 1,
1970 .flags = CLK_SET_RATE_PARENT,
1971 .ops = &clk_branch2_ops,
1972 },
1973 },
1974};
1975
1976static struct clk_branch gcc_qupv3_wrap1_s7_clk = {
1977 .halt_reg = 0x18864,
1978 .halt_check = BRANCH_HALT_VOTED,
1979 .clkr = {
1980 .enable_reg = 0x5200c,
1981 .enable_mask = BIT(29),
1982 .hw.init = &(struct clk_init_data){
1983 .name = "gcc_qupv3_wrap1_s7_clk",
1984 .parent_hws = (const struct clk_hw*[]){
1985 &gcc_qupv3_wrap1_s7_clk_src.clkr.hw,
1986 },
1987 .num_parents = 1,
1988 .flags = CLK_SET_RATE_PARENT,
1989 .ops = &clk_branch2_ops,
1990 },
1991 },
1992};
1993
1994static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
1995 .halt_reg = 0x17004,
1996 .halt_check = BRANCH_HALT_VOTED,
1997 .clkr = {
1998 .enable_reg = 0x5200c,
1999 .enable_mask = BIT(6),
2000 .hw.init = &(struct clk_init_data){
2001 .name = "gcc_qupv3_wrap_0_m_ahb_clk",
2002 .ops = &clk_branch2_ops,
2003 },
2004 },
2005};
2006
2007static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
2008 .halt_reg = 0x17008,
2009 .halt_check = BRANCH_HALT_VOTED,
2010 .hwcg_reg = 0x17008,
2011 .hwcg_bit = 1,
2012 .clkr = {
2013 .enable_reg = 0x5200c,
2014 .enable_mask = BIT(7),
2015 .hw.init = &(struct clk_init_data){
2016 .name = "gcc_qupv3_wrap_0_s_ahb_clk",
2017 .ops = &clk_branch2_ops,
2018 },
2019 },
2020};
2021
2022static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
2023 .halt_reg = 0x1800c,
2024 .halt_check = BRANCH_HALT_VOTED,
2025 .clkr = {
2026 .enable_reg = 0x5200c,
2027 .enable_mask = BIT(20),
2028 .hw.init = &(struct clk_init_data){
2029 .name = "gcc_qupv3_wrap_1_m_ahb_clk",
2030 .ops = &clk_branch2_ops,
2031 },
2032 },
2033};
2034
2035static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
2036 .halt_reg = 0x18010,
2037 .halt_check = BRANCH_HALT_VOTED,
2038 .hwcg_reg = 0x18010,
2039 .hwcg_bit = 1,
2040 .clkr = {
2041 .enable_reg = 0x5200c,
2042 .enable_mask = BIT(21),
2043 .hw.init = &(struct clk_init_data){
2044 .name = "gcc_qupv3_wrap_1_s_ahb_clk",
2045 .ops = &clk_branch2_ops,
2046 },
2047 },
2048};
2049
2050static struct clk_branch gcc_sdcc1_ahb_clk = {
2051 .halt_reg = 0x12008,
2052 .halt_check = BRANCH_HALT,
2053 .clkr = {
2054 .enable_reg = 0x12008,
2055 .enable_mask = BIT(0),
2056 .hw.init = &(struct clk_init_data){
2057 .name = "gcc_sdcc1_ahb_clk",
2058 .ops = &clk_branch2_ops,
2059 },
2060 },
2061};
2062
2063static struct clk_branch gcc_sdcc1_apps_clk = {
2064 .halt_reg = 0x1200c,
2065 .halt_check = BRANCH_HALT,
2066 .clkr = {
2067 .enable_reg = 0x1200c,
2068 .enable_mask = BIT(0),
2069 .hw.init = &(struct clk_init_data){
2070 .name = "gcc_sdcc1_apps_clk",
2071 .parent_hws = (const struct clk_hw*[]){
2072 &gcc_sdcc1_apps_clk_src.clkr.hw,
2073 },
2074 .num_parents = 1,
2075 .flags = CLK_SET_RATE_PARENT,
2076 .ops = &clk_branch2_ops,
2077 },
2078 },
2079};
2080
2081static struct clk_branch gcc_sdcc1_ice_core_clk = {
2082 .halt_reg = 0x12040,
2083 .halt_check = BRANCH_HALT,
2084 .clkr = {
2085 .enable_reg = 0x12040,
2086 .enable_mask = BIT(0),
2087 .hw.init = &(struct clk_init_data){
2088 .name = "gcc_sdcc1_ice_core_clk",
2089 .parent_hws = (const struct clk_hw*[]){
2090 &gcc_sdcc1_ice_core_clk_src.clkr.hw,
2091 },
2092 .num_parents = 1,
2093 .flags = CLK_SET_RATE_PARENT,
2094 .ops = &clk_branch2_ops,
2095 },
2096 },
2097};
2098
2099static struct clk_branch gcc_sdcc2_ahb_clk = {
2100 .halt_reg = 0x14008,
2101 .halt_check = BRANCH_HALT,
2102 .clkr = {
2103 .enable_reg = 0x14008,
2104 .enable_mask = BIT(0),
2105 .hw.init = &(struct clk_init_data){
2106 .name = "gcc_sdcc2_ahb_clk",
2107 .ops = &clk_branch2_ops,
2108 },
2109 },
2110};
2111
2112static struct clk_branch gcc_sdcc2_apps_clk = {
2113 .halt_reg = 0x14004,
2114 .halt_check = BRANCH_HALT,
2115 .clkr = {
2116 .enable_reg = 0x14004,
2117 .enable_mask = BIT(0),
2118 .hw.init = &(struct clk_init_data){
2119 .name = "gcc_sdcc2_apps_clk",
2120 .parent_hws = (const struct clk_hw*[]){
2121 &gcc_sdcc2_apps_clk_src.clkr.hw,
2122 },
2123 .num_parents = 1,
2124 .flags = CLK_SET_RATE_PARENT,
2125 .ops = &clk_branch2_ops,
2126 },
2127 },
2128};
2129
2130static struct clk_branch gcc_sdcc4_ahb_clk = {
2131 .halt_reg = 0x16008,
2132 .halt_check = BRANCH_HALT,
2133 .clkr = {
2134 .enable_reg = 0x16008,
2135 .enable_mask = BIT(0),
2136 .hw.init = &(struct clk_init_data){
2137 .name = "gcc_sdcc4_ahb_clk",
2138 .ops = &clk_branch2_ops,
2139 },
2140 },
2141};
2142
2143static struct clk_branch gcc_sdcc4_apps_clk = {
2144 .halt_reg = 0x16004,
2145 .halt_check = BRANCH_HALT,
2146 .clkr = {
2147 .enable_reg = 0x16004,
2148 .enable_mask = BIT(0),
2149 .hw.init = &(struct clk_init_data){
2150 .name = "gcc_sdcc4_apps_clk",
2151 .parent_hws = (const struct clk_hw*[]){
2152 &gcc_sdcc4_apps_clk_src.clkr.hw,
2153 },
2154 .num_parents = 1,
2155 .flags = CLK_SET_RATE_PARENT,
2156 .ops = &clk_branch2_ops,
2157 },
2158 },
2159};
2160
2161static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {
2162 .halt_reg = 0x4144,
2163 .halt_check = BRANCH_HALT_VOTED,
2164 .clkr = {
2165 .enable_reg = 0x52004,
2166 .enable_mask = BIT(0),
2167 .hw.init = &(struct clk_init_data){
2168 .name = "gcc_sys_noc_cpuss_ahb_clk",
2169 .parent_hws = (const struct clk_hw*[]){
2170 &gcc_cpuss_ahb_clk_src.clkr.hw,
2171 },
2172 .num_parents = 1,
2173 .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
2174 .ops = &clk_branch2_ops,
2175 },
2176 },
2177};
2178
2179static struct clk_branch gcc_tsif_ahb_clk = {
2180 .halt_reg = 0x36004,
2181 .halt_check = BRANCH_HALT,
2182 .clkr = {
2183 .enable_reg = 0x36004,
2184 .enable_mask = BIT(0),
2185 .hw.init = &(struct clk_init_data){
2186 .name = "gcc_tsif_ahb_clk",
2187 .ops = &clk_branch2_ops,
2188 },
2189 },
2190};
2191
2192static struct clk_branch gcc_tsif_inactivity_timers_clk = {
2193 .halt_reg = 0x3600c,
2194 .halt_check = BRANCH_HALT,
2195 .clkr = {
2196 .enable_reg = 0x3600c,
2197 .enable_mask = BIT(0),
2198 .hw.init = &(struct clk_init_data){
2199 .name = "gcc_tsif_inactivity_timers_clk",
2200 .ops = &clk_branch2_ops,
2201 },
2202 },
2203};
2204
2205static struct clk_branch gcc_tsif_ref_clk = {
2206 .halt_reg = 0x36008,
2207 .halt_check = BRANCH_HALT,
2208 .clkr = {
2209 .enable_reg = 0x36008,
2210 .enable_mask = BIT(0),
2211 .hw.init = &(struct clk_init_data){
2212 .name = "gcc_tsif_ref_clk",
2213 .parent_hws = (const struct clk_hw*[]){
2214 &gcc_tsif_ref_clk_src.clkr.hw,
2215 },
2216 .num_parents = 1,
2217 .flags = CLK_SET_RATE_PARENT,
2218 .ops = &clk_branch2_ops,
2219 },
2220 },
2221};
2222
2223static struct clk_branch gcc_ufs_mem_clkref_clk = {
2224 .halt_reg = 0x8c000,
2225 .halt_check = BRANCH_HALT,
2226 .clkr = {
2227 .enable_reg = 0x8c000,
2228 .enable_mask = BIT(0),
2229 .hw.init = &(struct clk_init_data){
2230 .name = "gcc_ufs_mem_clkref_clk",
2231 .ops = &clk_branch2_ops,
2232 },
2233 },
2234};
2235
2236static struct clk_branch gcc_ufs_phy_ahb_clk = {
2237 .halt_reg = 0x77014,
2238 .halt_check = BRANCH_HALT,
2239 .hwcg_reg = 0x77014,
2240 .hwcg_bit = 1,
2241 .clkr = {
2242 .enable_reg = 0x77014,
2243 .enable_mask = BIT(0),
2244 .hw.init = &(struct clk_init_data){
2245 .name = "gcc_ufs_phy_ahb_clk",
2246 .ops = &clk_branch2_ops,
2247 },
2248 },
2249};
2250
2251static struct clk_branch gcc_ufs_phy_axi_clk = {
2252 .halt_reg = 0x77038,
2253 .halt_check = BRANCH_HALT,
2254 .hwcg_reg = 0x77038,
2255 .hwcg_bit = 1,
2256 .clkr = {
2257 .enable_reg = 0x77038,
2258 .enable_mask = BIT(0),
2259 .hw.init = &(struct clk_init_data){
2260 .name = "gcc_ufs_phy_axi_clk",
2261 .parent_hws = (const struct clk_hw*[]){
2262 &gcc_ufs_phy_axi_clk_src.clkr.hw,
2263 },
2264 .num_parents = 1,
2265 .flags = CLK_SET_RATE_PARENT,
2266 .ops = &clk_branch2_ops,
2267 },
2268 },
2269};
2270
2271static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = {
2272 .halt_reg = 0x77038,
2273 .halt_check = BRANCH_HALT,
2274 .hwcg_reg = 0x77038,
2275 .hwcg_bit = 1,
2276 .clkr = {
2277 .enable_reg = 0x77038,
2278 .enable_mask = BIT(1),
2279 .hw.init = &(struct clk_init_data){
2280 .name = "gcc_ufs_phy_axi_hw_ctl_clk",
2281 .parent_hws = (const struct clk_hw*[]){
2282 &gcc_ufs_phy_axi_clk.clkr.hw,
2283 },
2284 .num_parents = 1,
2285 .flags = CLK_SET_RATE_PARENT,
2286 .ops = &clk_branch_simple_ops,
2287 },
2288 },
2289};
2290
2291static struct clk_branch gcc_ufs_phy_ice_core_clk = {
2292 .halt_reg = 0x77090,
2293 .halt_check = BRANCH_HALT,
2294 .hwcg_reg = 0x77090,
2295 .hwcg_bit = 1,
2296 .clkr = {
2297 .enable_reg = 0x77090,
2298 .enable_mask = BIT(0),
2299 .hw.init = &(struct clk_init_data){
2300 .name = "gcc_ufs_phy_ice_core_clk",
2301 .parent_hws = (const struct clk_hw*[]){
2302 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
2303 },
2304 .num_parents = 1,
2305 .flags = CLK_SET_RATE_PARENT,
2306 .ops = &clk_branch2_ops,
2307 },
2308 },
2309};
2310
2311static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = {
2312 .halt_reg = 0x77090,
2313 .halt_check = BRANCH_HALT,
2314 .hwcg_reg = 0x77090,
2315 .hwcg_bit = 1,
2316 .clkr = {
2317 .enable_reg = 0x77090,
2318 .enable_mask = BIT(1),
2319 .hw.init = &(struct clk_init_data){
2320 .name = "gcc_ufs_phy_ice_core_hw_ctl_clk",
2321 .parent_hws = (const struct clk_hw*[]){
2322 &gcc_ufs_phy_ice_core_clk.clkr.hw,
2323 },
2324 .num_parents = 1,
2325 .flags = CLK_SET_RATE_PARENT,
2326 .ops = &clk_branch_simple_ops,
2327 },
2328 },
2329};
2330
2331static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
2332 .halt_reg = 0x77094,
2333 .halt_check = BRANCH_HALT,
2334 .hwcg_reg = 0x77094,
2335 .hwcg_bit = 1,
2336 .clkr = {
2337 .enable_reg = 0x77094,
2338 .enable_mask = BIT(0),
2339 .hw.init = &(struct clk_init_data){
2340 .name = "gcc_ufs_phy_phy_aux_clk",
2341 .parent_hws = (const struct clk_hw*[]){
2342 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2343 },
2344 .num_parents = 1,
2345 .flags = CLK_SET_RATE_PARENT,
2346 .ops = &clk_branch2_ops,
2347 },
2348 },
2349};
2350
2351static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = {
2352 .halt_reg = 0x77094,
2353 .halt_check = BRANCH_HALT,
2354 .hwcg_reg = 0x77094,
2355 .hwcg_bit = 1,
2356 .clkr = {
2357 .enable_reg = 0x77094,
2358 .enable_mask = BIT(1),
2359 .hw.init = &(struct clk_init_data){
2360 .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk",
2361 .parent_hws = (const struct clk_hw*[]){
2362 &gcc_ufs_phy_phy_aux_clk.clkr.hw,
2363 },
2364 .num_parents = 1,
2365 .flags = CLK_SET_RATE_PARENT,
2366 .ops = &clk_branch_simple_ops,
2367 },
2368 },
2369};
2370
2371static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
2372 .halt_reg = 0x7701c,
2373 .halt_check = BRANCH_HALT_SKIP,
2374 .clkr = {
2375 .enable_reg = 0x7701c,
2376 .enable_mask = BIT(0),
2377 .hw.init = &(struct clk_init_data){
2378 .name = "gcc_ufs_phy_rx_symbol_0_clk",
2379 .ops = &clk_branch2_ops,
2380 },
2381 },
2382};
2383
2384static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
2385 .halt_reg = 0x77018,
2386 .halt_check = BRANCH_HALT_SKIP,
2387 .clkr = {
2388 .enable_reg = 0x77018,
2389 .enable_mask = BIT(0),
2390 .hw.init = &(struct clk_init_data){
2391 .name = "gcc_ufs_phy_tx_symbol_0_clk",
2392 .ops = &clk_branch2_ops,
2393 },
2394 },
2395};
2396
2397static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
2398 .halt_reg = 0x7708c,
2399 .halt_check = BRANCH_HALT,
2400 .hwcg_reg = 0x7708c,
2401 .hwcg_bit = 1,
2402 .clkr = {
2403 .enable_reg = 0x7708c,
2404 .enable_mask = BIT(0),
2405 .hw.init = &(struct clk_init_data){
2406 .name = "gcc_ufs_phy_unipro_core_clk",
2407 .parent_hws = (const struct clk_hw*[]){
2408 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2409 },
2410 .num_parents = 1,
2411 .flags = CLK_SET_RATE_PARENT,
2412 .ops = &clk_branch2_ops,
2413 },
2414 },
2415};
2416
2417static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = {
2418 .halt_reg = 0x7708c,
2419 .halt_check = BRANCH_HALT,
2420 .hwcg_reg = 0x7708c,
2421 .hwcg_bit = 1,
2422 .clkr = {
2423 .enable_reg = 0x7708c,
2424 .enable_mask = BIT(1),
2425 .hw.init = &(struct clk_init_data){
2426 .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk",
2427 .parent_hws = (const struct clk_hw*[]){
2428 &gcc_ufs_phy_unipro_core_clk.clkr.hw,
2429 },
2430 .num_parents = 1,
2431 .flags = CLK_SET_RATE_PARENT,
2432 .ops = &clk_branch_simple_ops,
2433 },
2434 },
2435};
2436
2437static struct clk_branch gcc_usb30_prim_master_clk = {
2438 .halt_reg = 0xf010,
2439 .halt_check = BRANCH_HALT,
2440 .clkr = {
2441 .enable_reg = 0xf010,
2442 .enable_mask = BIT(0),
2443 .hw.init = &(struct clk_init_data){
2444 .name = "gcc_usb30_prim_master_clk",
2445 .parent_hws = (const struct clk_hw*[]){
2446 &gcc_usb30_prim_master_clk_src.clkr.hw,
2447 },
2448 .num_parents = 1,
2449 .flags = CLK_SET_RATE_PARENT,
2450 .ops = &clk_branch2_ops,
2451 },
2452 },
2453};
2454
2455static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
2456 .halt_reg = 0xf018,
2457 .halt_check = BRANCH_HALT,
2458 .clkr = {
2459 .enable_reg = 0xf018,
2460 .enable_mask = BIT(0),
2461 .hw.init = &(struct clk_init_data){
2462 .name = "gcc_usb30_prim_mock_utmi_clk",
2463 .parent_hws = (const struct clk_hw*[]){
2464 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
2465 },
2466 .num_parents = 1,
2467 .flags = CLK_SET_RATE_PARENT,
2468 .ops = &clk_branch2_ops,
2469 },
2470 },
2471};
2472
2473static struct clk_branch gcc_usb30_prim_sleep_clk = {
2474 .halt_reg = 0xf014,
2475 .halt_check = BRANCH_HALT,
2476 .clkr = {
2477 .enable_reg = 0xf014,
2478 .enable_mask = BIT(0),
2479 .hw.init = &(struct clk_init_data){
2480 .name = "gcc_usb30_prim_sleep_clk",
2481 .ops = &clk_branch2_ops,
2482 },
2483 },
2484};
2485
2486static struct clk_branch gcc_usb3_prim_clkref_clk = {
2487 .halt_reg = 0x8c010,
2488 .halt_check = BRANCH_HALT,
2489 .clkr = {
2490 .enable_reg = 0x8c010,
2491 .enable_mask = BIT(0),
2492 .hw.init = &(struct clk_init_data){
2493 .name = "gcc_usb3_prim_clkref_clk",
2494 .ops = &clk_branch2_ops,
2495 },
2496 },
2497};
2498
2499static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
2500 .halt_reg = 0xf050,
2501 .halt_check = BRANCH_HALT,
2502 .clkr = {
2503 .enable_reg = 0xf050,
2504 .enable_mask = BIT(0),
2505 .hw.init = &(struct clk_init_data){
2506 .name = "gcc_usb3_prim_phy_aux_clk",
2507 .parent_hws = (const struct clk_hw*[]){
2508 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2509 },
2510 .num_parents = 1,
2511 .flags = CLK_SET_RATE_PARENT,
2512 .ops = &clk_branch2_ops,
2513 },
2514 },
2515};
2516
2517static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
2518 .halt_reg = 0xf054,
2519 .halt_check = BRANCH_HALT,
2520 .clkr = {
2521 .enable_reg = 0xf054,
2522 .enable_mask = BIT(0),
2523 .hw.init = &(struct clk_init_data){
2524 .name = "gcc_usb3_prim_phy_com_aux_clk",
2525 .parent_hws = (const struct clk_hw*[]){
2526 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2527 },
2528 .num_parents = 1,
2529 .flags = CLK_SET_RATE_PARENT,
2530 .ops = &clk_branch2_ops,
2531 },
2532 },
2533};
2534
2535static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
2536 .halt_check = BRANCH_HALT_SKIP,
2537 .clkr = {
2538 .enable_reg = 0xf058,
2539 .enable_mask = BIT(0),
2540 .hw.init = &(struct clk_init_data){
2541 .name = "gcc_usb3_prim_phy_pipe_clk",
2542 .ops = &clk_branch2_ops,
2543 },
2544 },
2545};
2546
2547static struct clk_branch gcc_usb_phy_cfg_ahb2phy_clk = {
2548 .halt_reg = 0x6a004,
2549 .halt_check = BRANCH_HALT,
2550 .hwcg_reg = 0x6a004,
2551 .hwcg_bit = 1,
2552 .clkr = {
2553 .enable_reg = 0x6a004,
2554 .enable_mask = BIT(0),
2555 .hw.init = &(struct clk_init_data){
2556 .name = "gcc_usb_phy_cfg_ahb2phy_clk",
2557 .ops = &clk_branch2_ops,
2558 },
2559 },
2560};
2561
2562static struct clk_branch gcc_vdda_vs_clk = {
2563 .halt_reg = 0x7a00c,
2564 .halt_check = BRANCH_HALT,
2565 .clkr = {
2566 .enable_reg = 0x7a00c,
2567 .enable_mask = BIT(0),
2568 .hw.init = &(struct clk_init_data){
2569 .name = "gcc_vdda_vs_clk",
2570 .parent_hws = (const struct clk_hw*[]){
2571 &gcc_vsensor_clk_src.clkr.hw,
2572 },
2573 .num_parents = 1,
2574 .flags = CLK_SET_RATE_PARENT,
2575 .ops = &clk_branch2_ops,
2576 },
2577 },
2578};
2579
2580static struct clk_branch gcc_vddcx_vs_clk = {
2581 .halt_reg = 0x7a004,
2582 .halt_check = BRANCH_HALT,
2583 .clkr = {
2584 .enable_reg = 0x7a004,
2585 .enable_mask = BIT(0),
2586 .hw.init = &(struct clk_init_data){
2587 .name = "gcc_vddcx_vs_clk",
2588 .parent_hws = (const struct clk_hw*[]){
2589 &gcc_vsensor_clk_src.clkr.hw,
2590 },
2591 .num_parents = 1,
2592 .flags = CLK_SET_RATE_PARENT,
2593 .ops = &clk_branch2_ops,
2594 },
2595 },
2596};
2597
2598static struct clk_branch gcc_vddmx_vs_clk = {
2599 .halt_reg = 0x7a008,
2600 .halt_check = BRANCH_HALT,
2601 .clkr = {
2602 .enable_reg = 0x7a008,
2603 .enable_mask = BIT(0),
2604 .hw.init = &(struct clk_init_data){
2605 .name = "gcc_vddmx_vs_clk",
2606 .parent_hws = (const struct clk_hw*[]){
2607 &gcc_vsensor_clk_src.clkr.hw,
2608 },
2609 .num_parents = 1,
2610 .flags = CLK_SET_RATE_PARENT,
2611 .ops = &clk_branch2_ops,
2612 },
2613 },
2614};
2615
2616
2617static struct clk_branch gcc_video_axi_clk = {
2618 .halt_reg = 0xb01c,
2619 .halt_check = BRANCH_HALT,
2620 .clkr = {
2621 .enable_reg = 0xb01c,
2622 .enable_mask = BIT(0),
2623 .hw.init = &(struct clk_init_data){
2624 .name = "gcc_video_axi_clk",
2625 .ops = &clk_branch2_ops,
2626 },
2627 },
2628};
2629
2630static struct clk_branch gcc_vs_ctrl_ahb_clk = {
2631 .halt_reg = 0x7a014,
2632 .halt_check = BRANCH_HALT,
2633 .hwcg_reg = 0x7a014,
2634 .hwcg_bit = 1,
2635 .clkr = {
2636 .enable_reg = 0x7a014,
2637 .enable_mask = BIT(0),
2638 .hw.init = &(struct clk_init_data){
2639 .name = "gcc_vs_ctrl_ahb_clk",
2640 .ops = &clk_branch2_ops,
2641 },
2642 },
2643};
2644
2645static struct clk_branch gcc_vs_ctrl_clk = {
2646 .halt_reg = 0x7a010,
2647 .halt_check = BRANCH_HALT,
2648 .clkr = {
2649 .enable_reg = 0x7a010,
2650 .enable_mask = BIT(0),
2651 .hw.init = &(struct clk_init_data){
2652 .name = "gcc_vs_ctrl_clk",
2653 .parent_hws = (const struct clk_hw*[]){
2654 &gcc_vs_ctrl_clk_src.clkr.hw,
2655 },
2656 .num_parents = 1,
2657 .flags = CLK_SET_RATE_PARENT,
2658 .ops = &clk_branch2_ops,
2659 },
2660 },
2661};
2662
2663static struct gdsc pcie_0_gdsc = {
2664 .gdscr = 0x6b004,
2665 .pd = {
2666 .name = "pcie_0_gdsc",
2667 },
2668 .pwrsts = PWRSTS_OFF_ON,
2669};
2670
2671static struct gdsc ufs_phy_gdsc = {
2672 .gdscr = 0x77004,
2673 .pd = {
2674 .name = "ufs_phy_gdsc",
2675 },
2676 .pwrsts = PWRSTS_OFF_ON,
2677};
2678
2679static struct gdsc usb30_prim_gdsc = {
2680 .gdscr = 0xf004,
2681 .pd = {
2682 .name = "usb30_prim_gdsc",
2683 },
2684 .pwrsts = PWRSTS_OFF_ON,
2685};
2686
2687static struct gdsc hlos1_vote_aggre_noc_mmu_audio_tbu_gdsc = {
2688 .gdscr = 0x7d030,
2689 .pd = {
2690 .name = "hlos1_vote_aggre_noc_mmu_audio_tbu_gdsc",
2691 },
2692 .pwrsts = PWRSTS_OFF_ON,
2693 .flags = VOTABLE,
2694};
2695
2696static struct gdsc hlos1_vote_aggre_noc_mmu_pcie_tbu_gdsc = {
2697 .gdscr = 0x7d03c,
2698 .pd = {
2699 .name = "hlos1_vote_aggre_noc_mmu_pcie_tbu_gdsc",
2700 },
2701 .pwrsts = PWRSTS_OFF_ON,
2702 .flags = VOTABLE,
2703};
2704
2705static struct gdsc hlos1_vote_aggre_noc_mmu_tbu1_gdsc = {
2706 .gdscr = 0x7d034,
2707 .pd = {
2708 .name = "hlos1_vote_aggre_noc_mmu_tbu1_gdsc",
2709 },
2710 .pwrsts = PWRSTS_OFF_ON,
2711 .flags = VOTABLE,
2712};
2713
2714static struct gdsc hlos1_vote_aggre_noc_mmu_tbu2_gdsc = {
2715 .gdscr = 0x7d038,
2716 .pd = {
2717 .name = "hlos1_vote_aggre_noc_mmu_tbu2_gdsc",
2718 },
2719 .pwrsts = PWRSTS_OFF_ON,
2720 .flags = VOTABLE,
2721};
2722
2723static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc = {
2724 .gdscr = 0x7d040,
2725 .pd = {
2726 .name = "hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc",
2727 },
2728 .pwrsts = PWRSTS_OFF_ON,
2729 .flags = VOTABLE,
2730};
2731
2732static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc = {
2733 .gdscr = 0x7d048,
2734 .pd = {
2735 .name = "hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc",
2736 },
2737 .pwrsts = PWRSTS_OFF_ON,
2738 .flags = VOTABLE,
2739};
2740
2741static struct gdsc hlos1_vote_mmnoc_mmu_tbu_sf_gdsc = {
2742 .gdscr = 0x7d044,
2743 .pd = {
2744 .name = "hlos1_vote_mmnoc_mmu_tbu_sf_gdsc",
2745 },
2746 .pwrsts = PWRSTS_OFF_ON,
2747 .flags = VOTABLE,
2748};
2749
2750static struct clk_hw *gcc_sm7150_hws[] = {
2751 [GCC_GPLL0_MAIN_DIV_CDIV] = &gcc_pll0_main_div_cdiv.hw,
2752};
2753
2754static struct clk_regmap *gcc_sm7150_clocks[] = {
2755 [GCC_AGGRE_NOC_PCIE_TBU_CLK] = &gcc_aggre_noc_pcie_tbu_clk.clkr,
2756 [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
2757 [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] =
2758 &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr,
2759 [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
2760 [GCC_APC_VS_CLK] = &gcc_apc_vs_clk.clkr,
2761 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2762 [GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,
2763 [GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr,
2764 [GCC_CE1_AHB_CLK] = &gcc_ce1_ahb_clk.clkr,
2765 [GCC_CE1_AXI_CLK] = &gcc_ce1_axi_clk.clkr,
2766 [GCC_CE1_CLK] = &gcc_ce1_clk.clkr,
2767 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
2768 [GCC_CPUSS_AHB_CLK] = &gcc_cpuss_ahb_clk.clkr,
2769 [GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr,
2770 [GCC_CPUSS_RBCPR_CLK] = &gcc_cpuss_rbcpr_clk.clkr,
2771 [GCC_CPUSS_RBCPR_CLK_SRC] = &gcc_cpuss_rbcpr_clk_src.clkr,
2772 [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
2773 [GCC_DISP_GPLL0_CLK_SRC] = &gcc_disp_gpll0_clk_src.clkr,
2774 [GCC_DISP_GPLL0_DIV_CLK_SRC] = &gcc_disp_gpll0_div_clk_src.clkr,
2775 [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
2776 [GCC_DISP_SF_AXI_CLK] = &gcc_disp_sf_axi_clk.clkr,
2777 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2778 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
2779 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2780 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
2781 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2782 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
2783 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
2784 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
2785 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
2786 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
2787 [GCC_GPU_VS_CLK] = &gcc_gpu_vs_clk.clkr,
2788 [GCC_NPU_AXI_CLK] = &gcc_npu_axi_clk.clkr,
2789 [GCC_NPU_CFG_AHB_CLK] = &gcc_npu_cfg_ahb_clk.clkr,
2790 [GCC_NPU_GPLL0_CLK_SRC] = &gcc_npu_gpll0_clk_src.clkr,
2791 [GCC_NPU_GPLL0_DIV_CLK_SRC] = &gcc_npu_gpll0_div_clk_src.clkr,
2792 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
2793 [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
2794 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
2795 [GCC_PCIE_0_CLKREF_CLK] = &gcc_pcie_0_clkref_clk.clkr,
2796 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
2797 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
2798 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
2799 [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
2800 [GCC_PCIE_PHY_AUX_CLK] = &gcc_pcie_phy_aux_clk.clkr,
2801 [GCC_PCIE_PHY_REFGEN_CLK] = &gcc_pcie_phy_refgen_clk.clkr,
2802 [GCC_PCIE_PHY_REFGEN_CLK_SRC] = &gcc_pcie_phy_refgen_clk_src.clkr,
2803 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2804 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
2805 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2806 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
2807 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
2808 [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
2809 [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
2810 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
2811 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
2812 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
2813 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
2814 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
2815 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
2816 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
2817 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
2818 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
2819 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
2820 [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
2821 [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
2822 [GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr,
2823 [GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr,
2824 [GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr,
2825 [GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr,
2826 [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
2827 [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
2828 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
2829 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
2830 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
2831 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
2832 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
2833 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
2834 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
2835 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
2836 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
2837 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
2838 [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
2839 [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
2840 [GCC_QUPV3_WRAP1_S6_CLK] = &gcc_qupv3_wrap1_s6_clk.clkr,
2841 [GCC_QUPV3_WRAP1_S6_CLK_SRC] = &gcc_qupv3_wrap1_s6_clk_src.clkr,
2842 [GCC_QUPV3_WRAP1_S7_CLK] = &gcc_qupv3_wrap1_s7_clk.clkr,
2843 [GCC_QUPV3_WRAP1_S7_CLK_SRC] = &gcc_qupv3_wrap1_s7_clk_src.clkr,
2844 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
2845 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
2846 [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
2847 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
2848 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2849 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2850 [GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,
2851 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
2852 [GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr,
2853 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2854 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2855 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
2856 [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
2857 [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
2858 [GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr,
2859 [GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,
2860 [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr,
2861 [GCC_TSIF_INACTIVITY_TIMERS_CLK] = &gcc_tsif_inactivity_timers_clk.clkr,
2862 [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
2863 [GCC_TSIF_REF_CLK_SRC] = &gcc_tsif_ref_clk_src.clkr,
2864 [GCC_UFS_MEM_CLKREF_CLK] = &gcc_ufs_mem_clkref_clk.clkr,
2865 [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
2866 [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
2867 [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
2868 [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr,
2869 [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
2870 [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
2871 [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] =
2872 &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr,
2873 [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
2874 [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
2875 [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr,
2876 [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
2877 [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
2878 [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
2879 [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] =
2880 &gcc_ufs_phy_unipro_core_clk_src.clkr,
2881 [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] =
2882 &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr,
2883 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
2884 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
2885 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
2886 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] =
2887 &gcc_usb30_prim_mock_utmi_clk_src.clkr,
2888 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
2889 [GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,
2890 [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
2891 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
2892 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
2893 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
2894 [GCC_USB_PHY_CFG_AHB2PHY_CLK] = &gcc_usb_phy_cfg_ahb2phy_clk.clkr,
2895 [GCC_VDDA_VS_CLK] = &gcc_vdda_vs_clk.clkr,
2896 [GCC_VDDCX_VS_CLK] = &gcc_vddcx_vs_clk.clkr,
2897 [GCC_VDDMX_VS_CLK] = &gcc_vddmx_vs_clk.clkr,
2898 [GCC_VIDEO_AXI_CLK] = &gcc_video_axi_clk.clkr,
2899 [GCC_VS_CTRL_AHB_CLK] = &gcc_vs_ctrl_ahb_clk.clkr,
2900 [GCC_VS_CTRL_CLK] = &gcc_vs_ctrl_clk.clkr,
2901 [GCC_VS_CTRL_CLK_SRC] = &gcc_vs_ctrl_clk_src.clkr,
2902 [GCC_VSENSOR_CLK_SRC] = &gcc_vsensor_clk_src.clkr,
2903 [GPLL0] = &gpll0.clkr,
2904 [GPLL0_OUT_EVEN] = &gpll0_out_even.clkr,
2905 [GPLL6] = &gpll6.clkr,
2906 [GPLL7] = &gpll7.clkr,
2907};
2908
2909static const struct qcom_reset_map gcc_sm7150_resets[] = {
2910 [GCC_PCIE_0_BCR] = { 0x6b000 },
2911 [GCC_PCIE_PHY_BCR] = { 0x6f000 },
2912 [GCC_PCIE_PHY_COM_BCR] = { 0x6f010 },
2913 [GCC_UFS_PHY_BCR] = { 0x77000 },
2914 [GCC_USB30_PRIM_BCR] = { 0xf000 },
2915 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x50008 },
2916 [GCC_USB3_DP_PHY_SEC_BCR] = { 0x50014 },
2917 [GCC_USB3_PHY_PRIM_BCR] = { 0x50000 },
2918 [GCC_USB3_PHY_SEC_BCR] = { 0x5000c },
2919 [GCC_QUSB2PHY_PRIM_BCR] = { 0x26000 },
2920 [GCC_VIDEO_AXI_CLK_BCR] = { 0xb01c, 2 },
2921};
2922
2923static const struct clk_rcg_dfs_data gcc_sm7150_dfs_desc[] = {
2924 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
2925 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
2926 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
2927 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
2928 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
2929 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
2930 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s6_clk_src),
2931 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s7_clk_src),
2932 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
2933 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
2934 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),
2935 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
2936 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
2937 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
2938 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src),
2939 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s7_clk_src),
2940};
2941
2942static struct gdsc *gcc_sm7150_gdscs[] = {
2943 [PCIE_0_GDSC] = &pcie_0_gdsc,
2944 [UFS_PHY_GDSC] = &ufs_phy_gdsc,
2945 [USB30_PRIM_GDSC] = &usb30_prim_gdsc,
2946 [HLOS1_VOTE_AGGRE_NOC_MMU_AUDIO_TBU_GDSC] =
2947 &hlos1_vote_aggre_noc_mmu_audio_tbu_gdsc,
2948 [HLOS1_VOTE_AGGRE_NOC_MMU_PCIE_TBU_GDSC] =
2949 &hlos1_vote_aggre_noc_mmu_pcie_tbu_gdsc,
2950 [HLOS1_VOTE_AGGRE_NOC_MMU_TBU1_GDSC] =
2951 &hlos1_vote_aggre_noc_mmu_tbu1_gdsc,
2952 [HLOS1_VOTE_AGGRE_NOC_MMU_TBU2_GDSC] =
2953 &hlos1_vote_aggre_noc_mmu_tbu2_gdsc,
2954 [HLOS1_VOTE_MMNOC_MMU_TBU_HF0_GDSC] =
2955 &hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc,
2956 [HLOS1_VOTE_MMNOC_MMU_TBU_HF1_GDSC] =
2957 &hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc,
2958 [HLOS1_VOTE_MMNOC_MMU_TBU_SF_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_sf_gdsc,
2959};
2960
2961static const struct regmap_config gcc_sm7150_regmap_config = {
2962 .reg_bits = 32,
2963 .reg_stride = 4,
2964 .val_bits = 32,
2965 .max_register = 0x1820b0,
2966 .fast_io = true,
2967};
2968
2969static const struct qcom_cc_desc gcc_sm7150_desc = {
2970 .config = &gcc_sm7150_regmap_config,
2971 .clk_hws = gcc_sm7150_hws,
2972 .num_clk_hws = ARRAY_SIZE(gcc_sm7150_hws),
2973 .clks = gcc_sm7150_clocks,
2974 .num_clks = ARRAY_SIZE(gcc_sm7150_clocks),
2975 .resets = gcc_sm7150_resets,
2976 .num_resets = ARRAY_SIZE(gcc_sm7150_resets),
2977 .gdscs = gcc_sm7150_gdscs,
2978 .num_gdscs = ARRAY_SIZE(gcc_sm7150_gdscs),
2979};
2980
2981static const struct of_device_id gcc_sm7150_match_table[] = {
2982 { .compatible = "qcom,sm7150-gcc" },
2983 { }
2984};
2985MODULE_DEVICE_TABLE(of, gcc_sm7150_match_table);
2986
2987static int gcc_sm7150_probe(struct platform_device *pdev)
2988{
2989 struct regmap *regmap;
2990 int ret;
2991
2992 regmap = qcom_cc_map(pdev, &gcc_sm7150_desc);
2993 if (IS_ERR(regmap))
2994 return PTR_ERR(regmap);
2995
2996 /*
2997 * Disable the GPLL0 active input to MM blocks, NPU
2998 * and GPU via MISC registers.
2999 */
3000 regmap_update_bits(regmap, 0x09ffc, 0x3, 0x3);
3001 regmap_update_bits(regmap, 0x4d110, 0x3, 0x3);
3002 regmap_update_bits(regmap, 0x71028, 0x3, 0x3);
3003
3004 /*
3005 * Keep the critical clocks always-ON
3006 * GCC_CPUSS_GNOC_CLK, GCC_VIDEO_AHB_CLK, GCC_CAMERA_AHB_CLK,
3007 * GCC_DISP_AHB_CLK, GCC_CAMERA_XO_CLK, GCC_VIDEO_XO_CLK,
3008 * GCC_DISP_XO_CLK, GCC_GPU_CFG_AHB_CLK
3009 */
3010 regmap_update_bits(regmap, 0x48004, BIT(0), BIT(0));
3011 regmap_update_bits(regmap, 0x0b004, BIT(0), BIT(0));
3012 regmap_update_bits(regmap, 0x0b008, BIT(0), BIT(0));
3013 regmap_update_bits(regmap, 0x0b00c, BIT(0), BIT(0));
3014 regmap_update_bits(regmap, 0x0b02c, BIT(0), BIT(0));
3015 regmap_update_bits(regmap, 0x0b028, BIT(0), BIT(0));
3016 regmap_update_bits(regmap, 0x0b030, BIT(0), BIT(0));
3017 regmap_update_bits(regmap, 0x71004, BIT(0), BIT(0));
3018
3019 ret = qcom_cc_register_rcg_dfs(regmap, gcc_sm7150_dfs_desc,
3020 ARRAY_SIZE(gcc_sm7150_dfs_desc));
3021 if (ret)
3022 return ret;
3023
3024 return qcom_cc_really_probe(pdev, &gcc_sm7150_desc, regmap);
3025}
3026
3027static struct platform_driver gcc_sm7150_driver = {
3028 .probe = gcc_sm7150_probe,
3029 .driver = {
3030 .name = "gcc-sm7150",
3031 .of_match_table = gcc_sm7150_match_table,
3032 },
3033};
3034
3035static int __init gcc_sm7150_init(void)
3036{
3037 return platform_driver_register(&gcc_sm7150_driver);
3038}
3039subsys_initcall(gcc_sm7150_init);
3040
3041static void __exit gcc_sm7150_exit(void)
3042{
3043 platform_driver_unregister(&gcc_sm7150_driver);
3044}
3045module_exit(gcc_sm7150_exit);
3046
3047MODULE_DESCRIPTION("Qualcomm SM7150 Global Clock Controller");
3048MODULE_LICENSE("GPL");