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