1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright (c) 2022-2023, Qualcomm Innovation Center, Inc. All rights reserved.
4 */
5
6#include <linux/clk-provider.h>
7#include <linux/module.h>
8#include <linux/of.h>
9#include <linux/platform_device.h>
10#include <linux/regmap.h>
11
12#include <dt-bindings/clock/qcom,qdu1000-gcc.h>
13
14#include "clk-alpha-pll.h"
15#include "clk-branch.h"
16#include "clk-rcg.h"
17#include "clk-regmap.h"
18#include "clk-regmap-divider.h"
19#include "clk-regmap-mux.h"
20#include "clk-regmap-phy-mux.h"
21#include "gdsc.h"
22#include "reset.h"
23
24enum {
25 P_BI_TCXO,
26 P_GCC_GPLL0_OUT_EVEN,
27 P_GCC_GPLL0_OUT_MAIN,
28 P_GCC_GPLL1_OUT_MAIN,
29 P_GCC_GPLL2_OUT_MAIN,
30 P_GCC_GPLL3_OUT_MAIN,
31 P_GCC_GPLL4_OUT_MAIN,
32 P_GCC_GPLL5_OUT_MAIN,
33 P_GCC_GPLL6_OUT_MAIN,
34 P_GCC_GPLL7_OUT_MAIN,
35 P_GCC_GPLL8_OUT_MAIN,
36 P_PCIE_0_PHY_AUX_CLK,
37 P_PCIE_0_PIPE_CLK,
38 P_SLEEP_CLK,
39 P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
40};
41
42enum {
43 DT_TCXO_IDX,
44 DT_SLEEP_CLK_IDX,
45 DT_PCIE_0_PIPE_CLK_IDX,
46 DT_PCIE_0_PHY_AUX_CLK_IDX,
47 DT_USB3_PHY_WRAPPER_PIPE_CLK_IDX,
48};
49
50static struct clk_alpha_pll gcc_gpll0 = {
51 .offset = 0x0,
52 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
53 .clkr = {
54 .enable_reg = 0x62018,
55 .enable_mask = BIT(0),
56 .hw.init = &(const struct clk_init_data) {
57 .name = "gcc_gpll0",
58 .parent_data = &(const struct clk_parent_data) {
59 .index = DT_TCXO_IDX,
60 },
61 .num_parents = 1,
62 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
63 },
64 },
65};
66
67static const struct clk_div_table post_div_table_gcc_gpll0_out_even[] = {
68 { 0x1, 2 }
69};
70
71static struct clk_alpha_pll_postdiv gcc_gpll0_out_even = {
72 .offset = 0x0,
73 .post_div_shift = 10,
74 .post_div_table = post_div_table_gcc_gpll0_out_even,
75 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
76 .width = 4,
77 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
78 .clkr.hw.init = &(const struct clk_init_data) {
79 .name = "gcc_gpll0_out_even",
80 .parent_hws = (const struct clk_hw*[]) {
81 &gcc_gpll0.clkr.hw,
82 },
83 .num_parents = 1,
84 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
85 },
86};
87
88static struct clk_alpha_pll gcc_gpll1 = {
89 .offset = 0x1000,
90 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
91 .clkr = {
92 .enable_reg = 0x62018,
93 .enable_mask = BIT(1),
94 .hw.init = &(const struct clk_init_data) {
95 .name = "gcc_gpll1",
96 .parent_data = &(const struct clk_parent_data) {
97 .index = DT_TCXO_IDX,
98 },
99 .num_parents = 1,
100 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
101 },
102 },
103};
104
105static struct clk_alpha_pll_postdiv gcc_gpll1_out_even = {
106 .offset = 0x1000,
107 .post_div_shift = 10,
108 .post_div_table = post_div_table_gcc_gpll0_out_even,
109 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
110 .width = 4,
111 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
112 .clkr.hw.init = &(const struct clk_init_data) {
113 .name = "gcc_gpll1_out_even",
114 .parent_hws = (const struct clk_hw*[]) {
115 &gcc_gpll1.clkr.hw,
116 },
117 .num_parents = 1,
118 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
119 },
120};
121
122static struct clk_alpha_pll gcc_gpll2 = {
123 .offset = 0x2000,
124 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
125 .clkr = {
126 .enable_reg = 0x62018,
127 .enable_mask = BIT(2),
128 .hw.init = &(const struct clk_init_data) {
129 .name = "gcc_gpll2",
130 .parent_data = &(const struct clk_parent_data) {
131 .index = DT_TCXO_IDX,
132 },
133 .num_parents = 1,
134 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
135 },
136 },
137};
138
139static struct clk_alpha_pll_postdiv gcc_gpll2_out_even = {
140 .offset = 0x2000,
141 .post_div_shift = 10,
142 .post_div_table = post_div_table_gcc_gpll0_out_even,
143 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
144 .width = 4,
145 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
146 .clkr.hw.init = &(const struct clk_init_data) {
147 .name = "gcc_gpll2_out_even",
148 .parent_hws = (const struct clk_hw*[]) {
149 &gcc_gpll2.clkr.hw,
150 },
151 .num_parents = 1,
152 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
153 },
154};
155
156static struct clk_alpha_pll gcc_gpll3 = {
157 .offset = 0x3000,
158 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
159 .clkr = {
160 .enable_reg = 0x62018,
161 .enable_mask = BIT(3),
162 .hw.init = &(const struct clk_init_data) {
163 .name = "gcc_gpll3",
164 .parent_data = &(const struct clk_parent_data) {
165 .index = DT_TCXO_IDX,
166 },
167 .num_parents = 1,
168 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
169 },
170 },
171};
172
173static struct clk_alpha_pll gcc_gpll4 = {
174 .offset = 0x4000,
175 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
176 .clkr = {
177 .enable_reg = 0x62018,
178 .enable_mask = BIT(4),
179 .hw.init = &(const struct clk_init_data) {
180 .name = "gcc_gpll4",
181 .parent_data = &(const struct clk_parent_data) {
182 .index = DT_TCXO_IDX,
183 },
184 .num_parents = 1,
185 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
186 },
187 },
188};
189
190static struct clk_alpha_pll gcc_gpll5 = {
191 .offset = 0x5000,
192 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
193 .clkr = {
194 .enable_reg = 0x62018,
195 .enable_mask = BIT(5),
196 .hw.init = &(const struct clk_init_data) {
197 .name = "gcc_gpll5",
198 .parent_data = &(const struct clk_parent_data) {
199 .index = DT_TCXO_IDX,
200 },
201 .num_parents = 1,
202 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
203 },
204 },
205};
206
207static struct clk_alpha_pll_postdiv gcc_gpll5_out_even = {
208 .offset = 0x5000,
209 .post_div_shift = 10,
210 .post_div_table = post_div_table_gcc_gpll0_out_even,
211 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
212 .width = 4,
213 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
214 .clkr.hw.init = &(const struct clk_init_data) {
215 .name = "gcc_gpll5_out_even",
216 .parent_hws = (const struct clk_hw*[]) {
217 &gcc_gpll5.clkr.hw,
218 },
219 .num_parents = 1,
220 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
221 },
222};
223
224static struct clk_alpha_pll gcc_gpll6 = {
225 .offset = 0x6000,
226 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
227 .clkr = {
228 .enable_reg = 0x62018,
229 .enable_mask = BIT(6),
230 .hw.init = &(const struct clk_init_data) {
231 .name = "gcc_gpll6",
232 .parent_data = &(const struct clk_parent_data) {
233 .index = DT_TCXO_IDX,
234 },
235 .num_parents = 1,
236 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
237 },
238 },
239};
240
241static struct clk_alpha_pll gcc_gpll7 = {
242 .offset = 0x7000,
243 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
244 .clkr = {
245 .enable_reg = 0x62018,
246 .enable_mask = BIT(7),
247 .hw.init = &(const struct clk_init_data) {
248 .name = "gcc_gpll7",
249 .parent_data = &(const struct clk_parent_data) {
250 .index = DT_TCXO_IDX,
251 },
252 .num_parents = 1,
253 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
254 },
255 },
256};
257
258static struct clk_alpha_pll gcc_gpll8 = {
259 .offset = 0x8000,
260 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
261 .clkr = {
262 .enable_reg = 0x62018,
263 .enable_mask = BIT(8),
264 .hw.init = &(const struct clk_init_data) {
265 .name = "gcc_gpll8",
266 .parent_data = &(const struct clk_parent_data) {
267 .index = DT_TCXO_IDX,
268 },
269 .num_parents = 1,
270 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
271 },
272 },
273};
274
275static const struct parent_map gcc_parent_map_0[] = {
276 { P_BI_TCXO, 0 },
277 { P_GCC_GPLL0_OUT_MAIN, 1 },
278 { P_GCC_GPLL0_OUT_EVEN, 6 },
279};
280
281static const struct clk_parent_data gcc_parent_data_0[] = {
282 { .index = DT_TCXO_IDX },
283 { .hw = &gcc_gpll0.clkr.hw },
284 { .hw = &gcc_gpll0_out_even.clkr.hw },
285};
286
287static const struct parent_map gcc_parent_map_1[] = {
288 { P_BI_TCXO, 0 },
289 { P_GCC_GPLL0_OUT_MAIN, 1 },
290 { P_SLEEP_CLK, 5 },
291 { P_GCC_GPLL0_OUT_EVEN, 6 },
292};
293
294static const struct clk_parent_data gcc_parent_data_1[] = {
295 { .index = DT_TCXO_IDX },
296 { .hw = &gcc_gpll0.clkr.hw },
297 { .index = DT_SLEEP_CLK_IDX },
298 { .hw = &gcc_gpll0_out_even.clkr.hw },
299};
300
301static const struct parent_map gcc_parent_map_2[] = {
302 { P_BI_TCXO, 0 },
303 { P_GCC_GPLL0_OUT_MAIN, 1 },
304 { P_GCC_GPLL5_OUT_MAIN, 3 },
305 { P_GCC_GPLL4_OUT_MAIN, 5 },
306};
307
308static const struct clk_parent_data gcc_parent_data_2[] = {
309 { .index = DT_TCXO_IDX },
310 { .hw = &gcc_gpll0.clkr.hw },
311 { .hw = &gcc_gpll5.clkr.hw },
312 { .hw = &gcc_gpll4.clkr.hw },
313};
314
315static const struct parent_map gcc_parent_map_3[] = {
316 { P_BI_TCXO, 0 },
317 { P_SLEEP_CLK, 5 },
318};
319
320static const struct clk_parent_data gcc_parent_data_3[] = {
321 { .index = DT_TCXO_IDX },
322 { .index = DT_SLEEP_CLK_IDX },
323};
324
325static const struct parent_map gcc_parent_map_4[] = {
326 { P_BI_TCXO, 0 },
327 { P_GCC_GPLL0_OUT_MAIN, 1 },
328 { P_GCC_GPLL2_OUT_MAIN, 2 },
329 { P_GCC_GPLL5_OUT_MAIN, 3 },
330 { P_GCC_GPLL1_OUT_MAIN, 4 },
331 { P_GCC_GPLL4_OUT_MAIN, 5 },
332 { P_GCC_GPLL3_OUT_MAIN, 6 },
333};
334
335static const struct clk_parent_data gcc_parent_data_4[] = {
336 { .index = DT_TCXO_IDX },
337 { .hw = &gcc_gpll0.clkr.hw },
338 { .hw = &gcc_gpll2.clkr.hw },
339 { .hw = &gcc_gpll5.clkr.hw },
340 { .hw = &gcc_gpll1.clkr.hw },
341 { .hw = &gcc_gpll4.clkr.hw },
342 { .hw = &gcc_gpll3.clkr.hw },
343};
344
345static const struct parent_map gcc_parent_map_5[] = {
346 { P_BI_TCXO, 0 },
347 { P_GCC_GPLL0_OUT_MAIN, 1 },
348 { P_GCC_GPLL2_OUT_MAIN, 2 },
349 { P_GCC_GPLL6_OUT_MAIN, 3 },
350 { P_GCC_GPLL1_OUT_MAIN, 4 },
351 { P_GCC_GPLL4_OUT_MAIN, 5 },
352 { P_GCC_GPLL3_OUT_MAIN, 6 },
353};
354
355static const struct clk_parent_data gcc_parent_data_5[] = {
356 { .index = DT_TCXO_IDX },
357 { .hw = &gcc_gpll0.clkr.hw },
358 { .hw = &gcc_gpll2.clkr.hw },
359 { .hw = &gcc_gpll6.clkr.hw },
360 { .hw = &gcc_gpll1.clkr.hw },
361 { .hw = &gcc_gpll4.clkr.hw },
362 { .hw = &gcc_gpll3.clkr.hw },
363};
364
365static const struct parent_map gcc_parent_map_6[] = {
366 { P_PCIE_0_PHY_AUX_CLK, 0 },
367 { P_BI_TCXO, 2 },
368};
369
370static const struct clk_parent_data gcc_parent_data_6[] = {
371 { .index = DT_PCIE_0_PHY_AUX_CLK_IDX },
372 { .index = DT_TCXO_IDX },
373};
374
375static const struct parent_map gcc_parent_map_8[] = {
376 { P_BI_TCXO, 0 },
377 { P_GCC_GPLL0_OUT_MAIN, 1 },
378 { P_GCC_GPLL8_OUT_MAIN, 2 },
379 { P_GCC_GPLL5_OUT_MAIN, 3 },
380 { P_GCC_GPLL4_OUT_MAIN, 5 },
381};
382
383static const struct clk_parent_data gcc_parent_data_8[] = {
384 { .index = DT_TCXO_IDX },
385 { .hw = &gcc_gpll0.clkr.hw },
386 { .hw = &gcc_gpll8.clkr.hw },
387 { .hw = &gcc_gpll5.clkr.hw },
388 { .hw = &gcc_gpll4.clkr.hw },
389};
390
391static const struct parent_map gcc_parent_map_9[] = {
392 { P_BI_TCXO, 0 },
393 { P_GCC_GPLL0_OUT_MAIN, 1 },
394 { P_GCC_GPLL2_OUT_MAIN, 2 },
395 { P_GCC_GPLL5_OUT_MAIN, 3 },
396 { P_GCC_GPLL7_OUT_MAIN, 4 },
397 { P_GCC_GPLL4_OUT_MAIN, 5 },
398};
399
400static const struct clk_parent_data gcc_parent_data_9[] = {
401 { .index = DT_TCXO_IDX },
402 { .hw = &gcc_gpll0.clkr.hw },
403 { .hw = &gcc_gpll2.clkr.hw },
404 { .hw = &gcc_gpll5.clkr.hw },
405 { .hw = &gcc_gpll7.clkr.hw },
406 { .hw = &gcc_gpll4.clkr.hw },
407};
408
409static const struct parent_map gcc_parent_map_10[] = {
410 { P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 0 },
411 { P_BI_TCXO, 2 },
412};
413
414static const struct clk_parent_data gcc_parent_data_10[] = {
415 { .index = DT_USB3_PHY_WRAPPER_PIPE_CLK_IDX },
416 { .index = DT_TCXO_IDX },
417};
418
419static struct clk_regmap_mux gcc_pcie_0_phy_aux_clk_src = {
420 .reg = 0x9d080,
421 .shift = 0,
422 .width = 2,
423 .parent_map = gcc_parent_map_6,
424 .clkr = {
425 .hw.init = &(const struct clk_init_data) {
426 .name = "gcc_pcie_0_phy_aux_clk_src",
427 .parent_data = gcc_parent_data_6,
428 .num_parents = ARRAY_SIZE(gcc_parent_data_6),
429 .ops = &clk_regmap_mux_closest_ops,
430 },
431 },
432};
433
434static struct clk_regmap_phy_mux gcc_pcie_0_pipe_clk_src = {
435 .reg = 0x9d064,
436 .clkr = {
437 .hw.init = &(const struct clk_init_data) {
438 .name = "gcc_pcie_0_pipe_clk_src",
439 .parent_data = &(const struct clk_parent_data){
440 .index = DT_PCIE_0_PIPE_CLK_IDX,
441 },
442 .num_parents = 1,
443 .ops = &clk_regmap_phy_mux_ops,
444 },
445 },
446};
447
448static struct clk_regmap_mux gcc_usb3_prim_phy_pipe_clk_src = {
449 .reg = 0x4906c,
450 .shift = 0,
451 .width = 2,
452 .parent_map = gcc_parent_map_10,
453 .clkr = {
454 .hw.init = &(const struct clk_init_data) {
455 .name = "gcc_usb3_prim_phy_pipe_clk_src",
456 .parent_data = gcc_parent_data_10,
457 .num_parents = ARRAY_SIZE(gcc_parent_data_10),
458 .ops = &clk_regmap_mux_closest_ops,
459 },
460 },
461};
462
463static const struct freq_tbl ftbl_gcc_aggre_noc_ecpri_dma_clk_src[] = {
464 F(466500000, P_GCC_GPLL5_OUT_MAIN, 2, 0, 0),
465 F(500000000, P_GCC_GPLL2_OUT_MAIN, 2, 0, 0),
466 { }
467};
468
469static struct clk_rcg2 gcc_aggre_noc_ecpri_dma_clk_src = {
470 .cmd_rcgr = 0x92020,
471 .mnd_width = 0,
472 .hid_width = 5,
473 .parent_map = gcc_parent_map_4,
474 .freq_tbl = ftbl_gcc_aggre_noc_ecpri_dma_clk_src,
475 .clkr.hw.init = &(const struct clk_init_data) {
476 .name = "gcc_aggre_noc_ecpri_dma_clk_src",
477 .parent_data = gcc_parent_data_4,
478 .num_parents = ARRAY_SIZE(gcc_parent_data_4),
479 .ops = &clk_rcg2_shared_ops,
480 },
481};
482
483static const struct freq_tbl ftbl_gcc_aggre_noc_ecpri_gsi_clk_src[] = {
484 F(250000000, P_GCC_GPLL2_OUT_MAIN, 4, 0, 0),
485 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
486 { }
487};
488
489static struct clk_rcg2 gcc_aggre_noc_ecpri_gsi_clk_src = {
490 .cmd_rcgr = 0x92038,
491 .mnd_width = 0,
492 .hid_width = 5,
493 .parent_map = gcc_parent_map_5,
494 .freq_tbl = ftbl_gcc_aggre_noc_ecpri_gsi_clk_src,
495 .clkr.hw.init = &(const struct clk_init_data) {
496 .name = "gcc_aggre_noc_ecpri_gsi_clk_src",
497 .parent_data = gcc_parent_data_5,
498 .num_parents = ARRAY_SIZE(gcc_parent_data_5),
499 .ops = &clk_rcg2_shared_ops,
500 },
501};
502
503static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
504 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
505 { }
506};
507
508static struct clk_rcg2 gcc_gp1_clk_src = {
509 .cmd_rcgr = 0x74004,
510 .mnd_width = 16,
511 .hid_width = 5,
512 .parent_map = gcc_parent_map_1,
513 .freq_tbl = ftbl_gcc_gp1_clk_src,
514 .clkr.hw.init = &(const struct clk_init_data) {
515 .name = "gcc_gp1_clk_src",
516 .parent_data = gcc_parent_data_1,
517 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
518 .ops = &clk_rcg2_shared_ops,
519 },
520};
521
522static struct clk_rcg2 gcc_gp2_clk_src = {
523 .cmd_rcgr = 0x75004,
524 .mnd_width = 16,
525 .hid_width = 5,
526 .parent_map = gcc_parent_map_1,
527 .freq_tbl = ftbl_gcc_gp1_clk_src,
528 .clkr.hw.init = &(const struct clk_init_data) {
529 .name = "gcc_gp2_clk_src",
530 .parent_data = gcc_parent_data_1,
531 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
532 .ops = &clk_rcg2_shared_ops,
533 },
534};
535
536static struct clk_rcg2 gcc_gp3_clk_src = {
537 .cmd_rcgr = 0x76004,
538 .mnd_width = 16,
539 .hid_width = 5,
540 .parent_map = gcc_parent_map_1,
541 .freq_tbl = ftbl_gcc_gp1_clk_src,
542 .clkr.hw.init = &(const struct clk_init_data) {
543 .name = "gcc_gp3_clk_src",
544 .parent_data = gcc_parent_data_1,
545 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
546 .ops = &clk_rcg2_shared_ops,
547 },
548};
549
550static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
551 F(19200000, P_BI_TCXO, 1, 0, 0),
552 { }
553};
554
555static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
556 .cmd_rcgr = 0x9d068,
557 .mnd_width = 16,
558 .hid_width = 5,
559 .parent_map = gcc_parent_map_3,
560 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
561 .clkr.hw.init = &(const struct clk_init_data) {
562 .name = "gcc_pcie_0_aux_clk_src",
563 .parent_data = gcc_parent_data_3,
564 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
565 .ops = &clk_rcg2_shared_ops,
566 },
567};
568
569static const struct freq_tbl ftbl_gcc_pcie_0_phy_rchng_clk_src[] = {
570 F(19200000, P_BI_TCXO, 1, 0, 0),
571 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
572 { }
573};
574
575static struct clk_rcg2 gcc_pcie_0_phy_rchng_clk_src = {
576 .cmd_rcgr = 0x9d04c,
577 .mnd_width = 0,
578 .hid_width = 5,
579 .parent_map = gcc_parent_map_0,
580 .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
581 .clkr.hw.init = &(const struct clk_init_data) {
582 .name = "gcc_pcie_0_phy_rchng_clk_src",
583 .parent_data = gcc_parent_data_0,
584 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
585 .ops = &clk_rcg2_shared_ops,
586 },
587};
588
589static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
590 F(60000000, P_GCC_GPLL0_OUT_MAIN, 10, 0, 0),
591 { }
592};
593
594static struct clk_rcg2 gcc_pdm2_clk_src = {
595 .cmd_rcgr = 0x43010,
596 .mnd_width = 0,
597 .hid_width = 5,
598 .parent_map = gcc_parent_map_0,
599 .freq_tbl = ftbl_gcc_pdm2_clk_src,
600 .clkr.hw.init = &(const struct clk_init_data) {
601 .name = "gcc_pdm2_clk_src",
602 .parent_data = gcc_parent_data_0,
603 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
604 .ops = &clk_rcg2_shared_ops,
605 },
606};
607
608static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
609 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
610 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
611 F(19200000, P_BI_TCXO, 1, 0, 0),
612 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
613 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
614 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
615 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
616 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
617 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
618 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
619 { }
620};
621
622static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
623 .name = "gcc_qupv3_wrap0_s0_clk_src",
624 .parent_data = gcc_parent_data_0,
625 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
626 .ops = &clk_rcg2_shared_ops,
627};
628
629static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
630 .cmd_rcgr = 0x27154,
631 .mnd_width = 16,
632 .hid_width = 5,
633 .parent_map = gcc_parent_map_0,
634 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
635 .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
636};
637
638static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
639 .name = "gcc_qupv3_wrap0_s1_clk_src",
640 .parent_data = gcc_parent_data_0,
641 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
642 .ops = &clk_rcg2_shared_ops,
643};
644
645static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
646 .cmd_rcgr = 0x27288,
647 .mnd_width = 16,
648 .hid_width = 5,
649 .parent_map = gcc_parent_map_0,
650 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
651 .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
652};
653
654static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
655 .name = "gcc_qupv3_wrap0_s2_clk_src",
656 .parent_data = gcc_parent_data_0,
657 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
658 .ops = &clk_rcg2_shared_ops,
659};
660
661static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
662 .cmd_rcgr = 0x273bc,
663 .mnd_width = 16,
664 .hid_width = 5,
665 .parent_map = gcc_parent_map_0,
666 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
667 .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
668};
669
670static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
671 .name = "gcc_qupv3_wrap0_s3_clk_src",
672 .parent_data = gcc_parent_data_0,
673 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
674 .ops = &clk_rcg2_shared_ops,
675};
676
677static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
678 .cmd_rcgr = 0x274f0,
679 .mnd_width = 16,
680 .hid_width = 5,
681 .parent_map = gcc_parent_map_0,
682 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
683 .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
684};
685
686static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
687 .name = "gcc_qupv3_wrap0_s4_clk_src",
688 .parent_data = gcc_parent_data_0,
689 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
690 .ops = &clk_rcg2_shared_ops,
691};
692
693static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
694 .cmd_rcgr = 0x27624,
695 .mnd_width = 16,
696 .hid_width = 5,
697 .parent_map = gcc_parent_map_0,
698 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
699 .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
700};
701
702static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s5_clk_src[] = {
703 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
704 { }
705};
706
707static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
708 .name = "gcc_qupv3_wrap0_s5_clk_src",
709 .parent_data = gcc_parent_data_0,
710 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
711 .ops = &clk_rcg2_shared_ops,
712};
713
714static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
715 .cmd_rcgr = 0x27758,
716 .mnd_width = 16,
717 .hid_width = 5,
718 .parent_map = gcc_parent_map_0,
719 .freq_tbl = ftbl_gcc_qupv3_wrap0_s5_clk_src,
720 .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
721};
722
723static struct clk_init_data gcc_qupv3_wrap0_s6_clk_src_init = {
724 .name = "gcc_qupv3_wrap0_s6_clk_src",
725 .parent_data = gcc_parent_data_0,
726 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
727 .ops = &clk_rcg2_shared_ops,
728};
729
730static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
731 .cmd_rcgr = 0x2788c,
732 .mnd_width = 16,
733 .hid_width = 5,
734 .parent_map = gcc_parent_map_0,
735 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
736 .clkr.hw.init = &gcc_qupv3_wrap0_s6_clk_src_init,
737};
738
739static struct clk_init_data gcc_qupv3_wrap0_s7_clk_src_init = {
740 .name = "gcc_qupv3_wrap0_s7_clk_src",
741 .parent_data = gcc_parent_data_0,
742 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
743 .ops = &clk_rcg2_shared_ops,
744};
745
746static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = {
747 .cmd_rcgr = 0x279c0,
748 .mnd_width = 16,
749 .hid_width = 5,
750 .parent_map = gcc_parent_map_0,
751 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
752 .clkr.hw.init = &gcc_qupv3_wrap0_s7_clk_src_init,
753};
754
755static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
756 .name = "gcc_qupv3_wrap1_s0_clk_src",
757 .parent_data = gcc_parent_data_0,
758 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
759 .ops = &clk_rcg2_shared_ops,
760};
761
762static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
763 .cmd_rcgr = 0x28154,
764 .mnd_width = 16,
765 .hid_width = 5,
766 .parent_map = gcc_parent_map_0,
767 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
768 .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
769};
770
771static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
772 .name = "gcc_qupv3_wrap1_s1_clk_src",
773 .parent_data = gcc_parent_data_0,
774 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
775 .ops = &clk_rcg2_shared_ops,
776};
777
778static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
779 .cmd_rcgr = 0x28288,
780 .mnd_width = 16,
781 .hid_width = 5,
782 .parent_map = gcc_parent_map_0,
783 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
784 .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
785};
786
787static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {
788 .name = "gcc_qupv3_wrap1_s2_clk_src",
789 .parent_data = gcc_parent_data_0,
790 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
791 .ops = &clk_rcg2_shared_ops,
792};
793
794static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
795 .cmd_rcgr = 0x283bc,
796 .mnd_width = 16,
797 .hid_width = 5,
798 .parent_map = gcc_parent_map_0,
799 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
800 .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,
801};
802
803static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
804 .name = "gcc_qupv3_wrap1_s3_clk_src",
805 .parent_data = gcc_parent_data_0,
806 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
807 .ops = &clk_rcg2_shared_ops,
808};
809
810static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
811 .cmd_rcgr = 0x284f0,
812 .mnd_width = 16,
813 .hid_width = 5,
814 .parent_map = gcc_parent_map_0,
815 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
816 .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
817};
818
819static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
820 .name = "gcc_qupv3_wrap1_s4_clk_src",
821 .parent_data = gcc_parent_data_0,
822 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
823 .ops = &clk_rcg2_shared_ops,
824};
825
826static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
827 .cmd_rcgr = 0x28624,
828 .mnd_width = 16,
829 .hid_width = 5,
830 .parent_map = gcc_parent_map_0,
831 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
832 .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
833};
834
835static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
836 .name = "gcc_qupv3_wrap1_s5_clk_src",
837 .parent_data = gcc_parent_data_0,
838 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
839 .ops = &clk_rcg2_shared_ops,
840};
841
842static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
843 .cmd_rcgr = 0x28758,
844 .mnd_width = 16,
845 .hid_width = 5,
846 .parent_map = gcc_parent_map_0,
847 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
848 .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
849};
850
851static struct clk_init_data gcc_qupv3_wrap1_s6_clk_src_init = {
852 .name = "gcc_qupv3_wrap1_s6_clk_src",
853 .parent_data = gcc_parent_data_0,
854 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
855 .ops = &clk_rcg2_shared_ops,
856};
857
858static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = {
859 .cmd_rcgr = 0x2888c,
860 .mnd_width = 16,
861 .hid_width = 5,
862 .parent_map = gcc_parent_map_0,
863 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
864 .clkr.hw.init = &gcc_qupv3_wrap1_s6_clk_src_init,
865};
866
867static struct clk_init_data gcc_qupv3_wrap1_s7_clk_src_init = {
868 .name = "gcc_qupv3_wrap1_s7_clk_src",
869 .parent_data = gcc_parent_data_0,
870 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
871 .ops = &clk_rcg2_shared_ops,
872};
873
874static struct clk_rcg2 gcc_qupv3_wrap1_s7_clk_src = {
875 .cmd_rcgr = 0x289c0,
876 .mnd_width = 16,
877 .hid_width = 5,
878 .parent_map = gcc_parent_map_0,
879 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
880 .clkr.hw.init = &gcc_qupv3_wrap1_s7_clk_src_init,
881};
882
883static const struct freq_tbl ftbl_gcc_sdcc5_apps_clk_src[] = {
884 F(144000, P_BI_TCXO, 16, 3, 25),
885 F(400000, P_BI_TCXO, 12, 1, 4),
886 F(19200000, P_BI_TCXO, 1, 0, 0),
887 F(20000000, P_GCC_GPLL0_OUT_MAIN, 10, 1, 3),
888 F(25000000, P_GCC_GPLL0_OUT_MAIN, 12, 1, 2),
889 F(50000000, P_GCC_GPLL0_OUT_MAIN, 12, 0, 0),
890 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
891 F(192000000, P_GCC_GPLL8_OUT_MAIN, 4, 0, 0),
892 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
893 F(384000000, P_GCC_GPLL8_OUT_MAIN, 2, 0, 0),
894 { }
895};
896
897static struct clk_rcg2 gcc_sdcc5_apps_clk_src = {
898 .cmd_rcgr = 0x3b034,
899 .mnd_width = 8,
900 .hid_width = 5,
901 .parent_map = gcc_parent_map_8,
902 .freq_tbl = ftbl_gcc_sdcc5_apps_clk_src,
903 .clkr.hw.init = &(const struct clk_init_data) {
904 .name = "gcc_sdcc5_apps_clk_src",
905 .parent_data = gcc_parent_data_8,
906 .num_parents = ARRAY_SIZE(gcc_parent_data_8),
907 .ops = &clk_rcg2_floor_ops,
908 },
909};
910
911static const struct freq_tbl ftbl_gcc_sdcc5_ice_core_clk_src[] = {
912 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
913 { }
914};
915
916static struct clk_rcg2 gcc_sdcc5_ice_core_clk_src = {
917 .cmd_rcgr = 0x3b01c,
918 .mnd_width = 0,
919 .hid_width = 5,
920 .parent_map = gcc_parent_map_2,
921 .freq_tbl = ftbl_gcc_sdcc5_ice_core_clk_src,
922 .clkr.hw.init = &(const struct clk_init_data) {
923 .name = "gcc_sdcc5_ice_core_clk_src",
924 .parent_data = gcc_parent_data_2,
925 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
926 .ops = &clk_rcg2_floor_ops,
927 },
928};
929
930static struct clk_rcg2 gcc_sm_bus_xo_clk_src = {
931 .cmd_rcgr = 0x5b00c,
932 .mnd_width = 0,
933 .hid_width = 5,
934 .parent_map = gcc_parent_map_2,
935 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
936 .clkr.hw.init = &(const struct clk_init_data) {
937 .name = "gcc_sm_bus_xo_clk_src",
938 .parent_data = gcc_parent_data_2,
939 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
940 .ops = &clk_rcg2_shared_ops,
941 },
942};
943
944static const struct freq_tbl ftbl_gcc_tsc_clk_src[] = {
945 F(500000000, P_GCC_GPLL7_OUT_MAIN, 2, 0, 0),
946 { }
947};
948
949static struct clk_rcg2 gcc_tsc_clk_src = {
950 .cmd_rcgr = 0x57010,
951 .mnd_width = 0,
952 .hid_width = 5,
953 .parent_map = gcc_parent_map_9,
954 .freq_tbl = ftbl_gcc_tsc_clk_src,
955 .clkr.hw.init = &(const struct clk_init_data) {
956 .name = "gcc_tsc_clk_src",
957 .parent_data = gcc_parent_data_9,
958 .num_parents = ARRAY_SIZE(gcc_parent_data_9),
959 .ops = &clk_rcg2_shared_ops,
960 },
961};
962
963static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
964 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
965 F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0),
966 { }
967};
968
969static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
970 .cmd_rcgr = 0x49028,
971 .mnd_width = 8,
972 .hid_width = 5,
973 .parent_map = gcc_parent_map_0,
974 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
975 .clkr.hw.init = &(const struct clk_init_data) {
976 .name = "gcc_usb30_prim_master_clk_src",
977 .parent_data = gcc_parent_data_0,
978 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
979 .ops = &clk_rcg2_shared_ops,
980 },
981};
982
983static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
984 .cmd_rcgr = 0x49044,
985 .mnd_width = 0,
986 .hid_width = 5,
987 .parent_map = gcc_parent_map_0,
988 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
989 .clkr.hw.init = &(const struct clk_init_data) {
990 .name = "gcc_usb30_prim_mock_utmi_clk_src",
991 .parent_data = gcc_parent_data_0,
992 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
993 .ops = &clk_rcg2_shared_ops,
994 },
995};
996
997static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
998 .cmd_rcgr = 0x49070,
999 .mnd_width = 0,
1000 .hid_width = 5,
1001 .parent_map = gcc_parent_map_3,
1002 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
1003 .clkr.hw.init = &(const struct clk_init_data) {
1004 .name = "gcc_usb3_prim_phy_aux_clk_src",
1005 .parent_data = gcc_parent_data_3,
1006 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
1007 .ops = &clk_rcg2_shared_ops,
1008 },
1009};
1010
1011static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {
1012 .reg = 0x4905c,
1013 .shift = 0,
1014 .width = 4,
1015 .clkr.hw.init = &(const struct clk_init_data) {
1016 .name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",
1017 .parent_hws = (const struct clk_hw*[]) {
1018 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
1019 },
1020 .num_parents = 1,
1021 .flags = CLK_SET_RATE_PARENT,
1022 .ops = &clk_regmap_div_ro_ops,
1023 },
1024};
1025
1026static struct clk_branch gcc_aggre_noc_ecpri_dma_clk = {
1027 .halt_reg = 0x92008,
1028 .halt_check = BRANCH_HALT_VOTED,
1029 .hwcg_reg = 0x92008,
1030 .hwcg_bit = 1,
1031 .clkr = {
1032 .enable_reg = 0x92008,
1033 .enable_mask = BIT(0),
1034 .hw.init = &(const struct clk_init_data) {
1035 .name = "gcc_aggre_noc_ecpri_dma_clk",
1036 .parent_hws = (const struct clk_hw*[]) {
1037 &gcc_aggre_noc_ecpri_dma_clk_src.clkr.hw,
1038 },
1039 .num_parents = 1,
1040 .flags = CLK_SET_RATE_PARENT,
1041 .ops = &clk_branch2_ops,
1042 },
1043 },
1044};
1045
1046static struct clk_branch gcc_aggre_noc_ecpri_gsi_clk = {
1047 .halt_reg = 0x9201c,
1048 .halt_check = BRANCH_HALT_VOTED,
1049 .hwcg_reg = 0x9201c,
1050 .hwcg_bit = 1,
1051 .clkr = {
1052 .enable_reg = 0x9201c,
1053 .enable_mask = BIT(0),
1054 .hw.init = &(const struct clk_init_data) {
1055 .name = "gcc_aggre_noc_ecpri_gsi_clk",
1056 .parent_hws = (const struct clk_hw*[]) {
1057 &gcc_aggre_noc_ecpri_gsi_clk_src.clkr.hw,
1058 },
1059 .num_parents = 1,
1060 .flags = CLK_SET_RATE_PARENT,
1061 .ops = &clk_branch2_ops,
1062 },
1063 },
1064};
1065
1066static struct clk_branch gcc_boot_rom_ahb_clk = {
1067 .halt_reg = 0x48004,
1068 .halt_check = BRANCH_HALT_VOTED,
1069 .hwcg_reg = 0x48004,
1070 .hwcg_bit = 1,
1071 .clkr = {
1072 .enable_reg = 0x62000,
1073 .enable_mask = BIT(10),
1074 .hw.init = &(const struct clk_init_data) {
1075 .name = "gcc_boot_rom_ahb_clk",
1076 .ops = &clk_branch2_ops,
1077 },
1078 },
1079};
1080
1081static struct clk_branch gcc_cfg_noc_ecpri_cc_ahb_clk = {
1082 .halt_reg = 0x3e004,
1083 .halt_check = BRANCH_HALT_VOTED,
1084 .hwcg_reg = 0x3e004,
1085 .hwcg_bit = 1,
1086 .clkr = {
1087 .enable_reg = 0x3e004,
1088 .enable_mask = BIT(0),
1089 .hw.init = &(const struct clk_init_data) {
1090 .name = "gcc_cfg_noc_ecpri_cc_ahb_clk",
1091 .ops = &clk_branch2_ops,
1092 },
1093 },
1094};
1095
1096static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1097 .halt_reg = 0x8401c,
1098 .halt_check = BRANCH_HALT_VOTED,
1099 .hwcg_reg = 0x8401c,
1100 .hwcg_bit = 1,
1101 .clkr = {
1102 .enable_reg = 0x8401c,
1103 .enable_mask = BIT(0),
1104 .hw.init = &(const struct clk_init_data) {
1105 .name = "gcc_cfg_noc_usb3_prim_axi_clk",
1106 .parent_hws = (const struct clk_hw*[]) {
1107 &gcc_usb30_prim_master_clk_src.clkr.hw,
1108 },
1109 .num_parents = 1,
1110 .flags = CLK_SET_RATE_PARENT,
1111 .ops = &clk_branch2_ops,
1112 },
1113 },
1114};
1115
1116static struct clk_branch gcc_ddrss_ecpri_dma_clk = {
1117 .halt_reg = 0x54030,
1118 .halt_check = BRANCH_HALT_VOTED,
1119 .hwcg_reg = 0x54030,
1120 .hwcg_bit = 1,
1121 .clkr = {
1122 .enable_reg = 0x54030,
1123 .enable_mask = BIT(0),
1124 .hw.init = &(const struct clk_init_data) {
1125 .name = "gcc_ddrss_ecpri_dma_clk",
1126 .parent_hws = (const struct clk_hw*[]) {
1127 &gcc_aggre_noc_ecpri_dma_clk_src.clkr.hw,
1128 },
1129 .num_parents = 1,
1130 .flags = CLK_SET_RATE_PARENT,
1131 .ops = &clk_branch2_aon_ops,
1132 },
1133 },
1134};
1135
1136static struct clk_branch gcc_ddrss_ecpri_gsi_clk = {
1137 .halt_reg = 0x54298,
1138 .halt_check = BRANCH_HALT_VOTED,
1139 .hwcg_reg = 0x54298,
1140 .hwcg_bit = 1,
1141 .clkr = {
1142 .enable_reg = 0x54298,
1143 .enable_mask = BIT(0),
1144 .hw.init = &(const struct clk_init_data) {
1145 .name = "gcc_ddrss_ecpri_gsi_clk",
1146 .parent_hws = (const struct clk_hw*[]) {
1147 &gcc_aggre_noc_ecpri_gsi_clk_src.clkr.hw,
1148 },
1149 .num_parents = 1,
1150 .flags = CLK_SET_RATE_PARENT,
1151 .ops = &clk_branch2_aon_ops,
1152 },
1153 },
1154};
1155
1156static struct clk_branch gcc_ecpri_ahb_clk = {
1157 .halt_reg = 0x3a008,
1158 .halt_check = BRANCH_HALT_VOTED,
1159 .hwcg_reg = 0x3a008,
1160 .hwcg_bit = 1,
1161 .clkr = {
1162 .enable_reg = 0x3a008,
1163 .enable_mask = BIT(0),
1164 .hw.init = &(const struct clk_init_data) {
1165 .name = "gcc_ecpri_ahb_clk",
1166 .ops = &clk_branch2_ops,
1167 },
1168 },
1169};
1170
1171static struct clk_branch gcc_ecpri_cc_gpll0_clk_src = {
1172 .halt_check = BRANCH_HALT_DELAY,
1173 .clkr = {
1174 .enable_reg = 0x62010,
1175 .enable_mask = BIT(0),
1176 .hw.init = &(const struct clk_init_data) {
1177 .name = "gcc_ecpri_cc_gpll0_clk_src",
1178 .parent_hws = (const struct clk_hw*[]) {
1179 &gcc_gpll0.clkr.hw,
1180 },
1181 .num_parents = 1,
1182 .flags = CLK_SET_RATE_PARENT,
1183 .ops = &clk_branch2_ops,
1184 },
1185 },
1186};
1187
1188static struct clk_branch gcc_ecpri_cc_gpll1_even_clk_src = {
1189 .halt_check = BRANCH_HALT_DELAY,
1190 .clkr = {
1191 .enable_reg = 0x62010,
1192 .enable_mask = BIT(1),
1193 .hw.init = &(const struct clk_init_data) {
1194 .name = "gcc_ecpri_cc_gpll1_even_clk_src",
1195 .parent_hws = (const struct clk_hw*[]) {
1196 &gcc_gpll1_out_even.clkr.hw,
1197 },
1198 .num_parents = 1,
1199 .flags = CLK_SET_RATE_PARENT,
1200 .ops = &clk_branch2_ops,
1201 },
1202 },
1203};
1204
1205static struct clk_branch gcc_ecpri_cc_gpll2_even_clk_src = {
1206 .halt_check = BRANCH_HALT_DELAY,
1207 .clkr = {
1208 .enable_reg = 0x62010,
1209 .enable_mask = BIT(2),
1210 .hw.init = &(const struct clk_init_data) {
1211 .name = "gcc_ecpri_cc_gpll2_even_clk_src",
1212 .parent_hws = (const struct clk_hw*[]) {
1213 &gcc_gpll2_out_even.clkr.hw,
1214 },
1215 .num_parents = 1,
1216 .flags = CLK_SET_RATE_PARENT,
1217 .ops = &clk_branch2_ops,
1218 },
1219 },
1220};
1221
1222static struct clk_branch gcc_ecpri_cc_gpll3_clk_src = {
1223 .halt_check = BRANCH_HALT_DELAY,
1224 .clkr = {
1225 .enable_reg = 0x62010,
1226 .enable_mask = BIT(3),
1227 .hw.init = &(const struct clk_init_data) {
1228 .name = "gcc_ecpri_cc_gpll3_clk_src",
1229 .parent_hws = (const struct clk_hw*[]) {
1230 &gcc_gpll3.clkr.hw,
1231 },
1232 .num_parents = 1,
1233 .flags = CLK_SET_RATE_PARENT,
1234 .ops = &clk_branch2_ops,
1235 },
1236 },
1237};
1238
1239static struct clk_branch gcc_ecpri_cc_gpll4_clk_src = {
1240 .halt_check = BRANCH_HALT_DELAY,
1241 .clkr = {
1242 .enable_reg = 0x62010,
1243 .enable_mask = BIT(4),
1244 .hw.init = &(const struct clk_init_data) {
1245 .name = "gcc_ecpri_cc_gpll4_clk_src",
1246 .parent_hws = (const struct clk_hw*[]) {
1247 &gcc_gpll4.clkr.hw,
1248 },
1249 .num_parents = 1,
1250 .flags = CLK_SET_RATE_PARENT,
1251 .ops = &clk_branch2_ops,
1252 },
1253 },
1254};
1255
1256static struct clk_branch gcc_ecpri_cc_gpll5_even_clk_src = {
1257 .halt_check = BRANCH_HALT_DELAY,
1258 .clkr = {
1259 .enable_reg = 0x62010,
1260 .enable_mask = BIT(5),
1261 .hw.init = &(const struct clk_init_data) {
1262 .name = "gcc_ecpri_cc_gpll5_even_clk_src",
1263 .parent_hws = (const struct clk_hw*[]) {
1264 &gcc_gpll5_out_even.clkr.hw,
1265 },
1266 .num_parents = 1,
1267 .flags = CLK_SET_RATE_PARENT,
1268 .ops = &clk_branch2_ops,
1269 },
1270 },
1271};
1272
1273static struct clk_branch gcc_ecpri_xo_clk = {
1274 .halt_reg = 0x3a004,
1275 .halt_check = BRANCH_HALT,
1276 .clkr = {
1277 .enable_reg = 0x3a004,
1278 .enable_mask = BIT(0),
1279 .hw.init = &(const struct clk_init_data) {
1280 .name = "gcc_ecpri_xo_clk",
1281 .ops = &clk_branch2_ops,
1282 },
1283 },
1284};
1285
1286static struct clk_branch gcc_eth_100g_c2c_hm_apb_clk = {
1287 .halt_reg = 0x39010,
1288 .halt_check = BRANCH_HALT,
1289 .clkr = {
1290 .enable_reg = 0x39010,
1291 .enable_mask = BIT(0),
1292 .hw.init = &(const struct clk_init_data) {
1293 .name = "gcc_eth_100g_c2c_hm_apb_clk",
1294 .ops = &clk_branch2_ops,
1295 },
1296 },
1297};
1298
1299static struct clk_branch gcc_eth_100g_fh_hm_apb_0_clk = {
1300 .halt_reg = 0x39004,
1301 .halt_check = BRANCH_HALT,
1302 .clkr = {
1303 .enable_reg = 0x39004,
1304 .enable_mask = BIT(0),
1305 .hw.init = &(const struct clk_init_data) {
1306 .name = "gcc_eth_100g_fh_hm_apb_0_clk",
1307 .ops = &clk_branch2_ops,
1308 },
1309 },
1310};
1311
1312static struct clk_branch gcc_eth_100g_fh_hm_apb_1_clk = {
1313 .halt_reg = 0x39008,
1314 .halt_check = BRANCH_HALT,
1315 .clkr = {
1316 .enable_reg = 0x39008,
1317 .enable_mask = BIT(0),
1318 .hw.init = &(const struct clk_init_data) {
1319 .name = "gcc_eth_100g_fh_hm_apb_1_clk",
1320 .ops = &clk_branch2_ops,
1321 },
1322 },
1323};
1324
1325static struct clk_branch gcc_eth_100g_fh_hm_apb_2_clk = {
1326 .halt_reg = 0x3900c,
1327 .halt_check = BRANCH_HALT,
1328 .clkr = {
1329 .enable_reg = 0x3900c,
1330 .enable_mask = BIT(0),
1331 .hw.init = &(const struct clk_init_data) {
1332 .name = "gcc_eth_100g_fh_hm_apb_2_clk",
1333 .ops = &clk_branch2_ops,
1334 },
1335 },
1336};
1337
1338static struct clk_branch gcc_eth_dbg_c2c_hm_apb_clk = {
1339 .halt_reg = 0x39014,
1340 .halt_check = BRANCH_HALT,
1341 .clkr = {
1342 .enable_reg = 0x39014,
1343 .enable_mask = BIT(0),
1344 .hw.init = &(const struct clk_init_data) {
1345 .name = "gcc_eth_dbg_c2c_hm_apb_clk",
1346 .ops = &clk_branch2_ops,
1347 },
1348 },
1349};
1350
1351static struct clk_branch gcc_eth_dbg_snoc_axi_clk = {
1352 .halt_reg = 0x3901c,
1353 .halt_check = BRANCH_HALT_VOTED,
1354 .hwcg_reg = 0x3901c,
1355 .hwcg_bit = 1,
1356 .clkr = {
1357 .enable_reg = 0x3901c,
1358 .enable_mask = BIT(0),
1359 .hw.init = &(const struct clk_init_data) {
1360 .name = "gcc_eth_dbg_snoc_axi_clk",
1361 .ops = &clk_branch2_ops,
1362 },
1363 },
1364};
1365
1366static struct clk_branch gcc_gemnoc_pcie_qx_clk = {
1367 .halt_reg = 0x5402c,
1368 .halt_check = BRANCH_HALT_VOTED,
1369 .hwcg_reg = 0x5402c,
1370 .hwcg_bit = 1,
1371 .clkr = {
1372 .enable_reg = 0x62008,
1373 .enable_mask = BIT(0),
1374 .hw.init = &(const struct clk_init_data) {
1375 .name = "gcc_gemnoc_pcie_qx_clk",
1376 .ops = &clk_branch2_aon_ops,
1377 },
1378 },
1379};
1380
1381static struct clk_branch gcc_gp1_clk = {
1382 .halt_reg = 0x74000,
1383 .halt_check = BRANCH_HALT,
1384 .clkr = {
1385 .enable_reg = 0x74000,
1386 .enable_mask = BIT(0),
1387 .hw.init = &(const struct clk_init_data) {
1388 .name = "gcc_gp1_clk",
1389 .parent_hws = (const struct clk_hw*[]) {
1390 &gcc_gp1_clk_src.clkr.hw,
1391 },
1392 .num_parents = 1,
1393 .flags = CLK_SET_RATE_PARENT,
1394 .ops = &clk_branch2_ops,
1395 },
1396 },
1397};
1398
1399static struct clk_branch gcc_gp2_clk = {
1400 .halt_reg = 0x75000,
1401 .halt_check = BRANCH_HALT,
1402 .clkr = {
1403 .enable_reg = 0x75000,
1404 .enable_mask = BIT(0),
1405 .hw.init = &(const struct clk_init_data) {
1406 .name = "gcc_gp2_clk",
1407 .parent_hws = (const struct clk_hw*[]) {
1408 &gcc_gp2_clk_src.clkr.hw,
1409 },
1410 .num_parents = 1,
1411 .flags = CLK_SET_RATE_PARENT,
1412 .ops = &clk_branch2_ops,
1413 },
1414 },
1415};
1416
1417static struct clk_branch gcc_gp3_clk = {
1418 .halt_reg = 0x76000,
1419 .halt_check = BRANCH_HALT,
1420 .clkr = {
1421 .enable_reg = 0x76000,
1422 .enable_mask = BIT(0),
1423 .hw.init = &(const struct clk_init_data) {
1424 .name = "gcc_gp3_clk",
1425 .parent_hws = (const struct clk_hw*[]) {
1426 &gcc_gp3_clk_src.clkr.hw,
1427 },
1428 .num_parents = 1,
1429 .flags = CLK_SET_RATE_PARENT,
1430 .ops = &clk_branch2_ops,
1431 },
1432 },
1433};
1434
1435static struct clk_branch gcc_pcie_0_aux_clk = {
1436 .halt_reg = 0x9d030,
1437 .halt_check = BRANCH_HALT_VOTED,
1438 .hwcg_reg = 0x9d030,
1439 .hwcg_bit = 1,
1440 .clkr = {
1441 .enable_reg = 0x62000,
1442 .enable_mask = BIT(29),
1443 .hw.init = &(const struct clk_init_data) {
1444 .name = "gcc_pcie_0_aux_clk",
1445 .parent_hws = (const struct clk_hw*[]) {
1446 &gcc_pcie_0_aux_clk_src.clkr.hw,
1447 },
1448 .num_parents = 1,
1449 .flags = CLK_SET_RATE_PARENT,
1450 .ops = &clk_branch2_ops,
1451 },
1452 },
1453};
1454
1455static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
1456 .halt_reg = 0x9d02c,
1457 .halt_check = BRANCH_HALT_VOTED,
1458 .hwcg_reg = 0x9d02c,
1459 .hwcg_bit = 1,
1460 .clkr = {
1461 .enable_reg = 0x62000,
1462 .enable_mask = BIT(28),
1463 .hw.init = &(const struct clk_init_data) {
1464 .name = "gcc_pcie_0_cfg_ahb_clk",
1465 .ops = &clk_branch2_ops,
1466 },
1467 },
1468};
1469
1470static struct clk_branch gcc_pcie_0_clkref_en = {
1471 .halt_reg = 0x9c004,
1472 .halt_check = BRANCH_HALT,
1473 .clkr = {
1474 .enable_reg = 0x9c004,
1475 .enable_mask = BIT(0),
1476 .hw.init = &(const struct clk_init_data) {
1477 .name = "gcc_pcie_0_clkref_en",
1478 .ops = &clk_branch2_ops,
1479 },
1480 },
1481};
1482
1483static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
1484 .halt_reg = 0x9d024,
1485 .halt_check = BRANCH_HALT_SKIP,
1486 .hwcg_reg = 0x9d024,
1487 .hwcg_bit = 1,
1488 .clkr = {
1489 .enable_reg = 0x62000,
1490 .enable_mask = BIT(27),
1491 .hw.init = &(const struct clk_init_data) {
1492 .name = "gcc_pcie_0_mstr_axi_clk",
1493 .ops = &clk_branch2_ops,
1494 },
1495 },
1496};
1497
1498static struct clk_branch gcc_pcie_0_phy_aux_clk = {
1499 .halt_reg = 0x9d038,
1500 .halt_check = BRANCH_HALT_VOTED,
1501 .hwcg_reg = 0x9d038,
1502 .hwcg_bit = 1,
1503 .clkr = {
1504 .enable_reg = 0x62000,
1505 .enable_mask = BIT(24),
1506 .hw.init = &(const struct clk_init_data) {
1507 .name = "gcc_pcie_0_phy_aux_clk",
1508 .parent_hws = (const struct clk_hw*[]) {
1509 &gcc_pcie_0_phy_aux_clk_src.clkr.hw,
1510 },
1511 .num_parents = 1,
1512 .flags = CLK_SET_RATE_PARENT,
1513 .ops = &clk_branch2_ops,
1514 },
1515 },
1516};
1517
1518static struct clk_branch gcc_pcie_0_phy_rchng_clk = {
1519 .halt_reg = 0x9d048,
1520 .halt_check = BRANCH_HALT_VOTED,
1521 .hwcg_reg = 0x9d048,
1522 .hwcg_bit = 1,
1523 .clkr = {
1524 .enable_reg = 0x62000,
1525 .enable_mask = BIT(23),
1526 .hw.init = &(const struct clk_init_data) {
1527 .name = "gcc_pcie_0_phy_rchng_clk",
1528 .parent_hws = (const struct clk_hw*[]) {
1529 &gcc_pcie_0_phy_rchng_clk_src.clkr.hw,
1530 },
1531 .num_parents = 1,
1532 .flags = CLK_SET_RATE_PARENT,
1533 .ops = &clk_branch2_ops,
1534 },
1535 },
1536};
1537
1538static struct clk_branch gcc_pcie_0_pipe_clk = {
1539 .halt_reg = 0x9d040,
1540 .halt_check = BRANCH_HALT_VOTED,
1541 .hwcg_reg = 0x9d040,
1542 .hwcg_bit = 1,
1543 .clkr = {
1544 .enable_reg = 0x62000,
1545 .enable_mask = BIT(30),
1546 .hw.init = &(const struct clk_init_data) {
1547 .name = "gcc_pcie_0_pipe_clk",
1548 .parent_hws = (const struct clk_hw*[]) {
1549 &gcc_pcie_0_pipe_clk_src.clkr.hw,
1550 },
1551 .num_parents = 1,
1552 .flags = CLK_SET_RATE_PARENT,
1553 .ops = &clk_branch2_ops,
1554 },
1555 },
1556};
1557
1558static struct clk_branch gcc_pcie_0_slv_axi_clk = {
1559 .halt_reg = 0x9d01c,
1560 .halt_check = BRANCH_HALT_VOTED,
1561 .hwcg_reg = 0x9d01c,
1562 .hwcg_bit = 1,
1563 .clkr = {
1564 .enable_reg = 0x62000,
1565 .enable_mask = BIT(26),
1566 .hw.init = &(const struct clk_init_data) {
1567 .name = "gcc_pcie_0_slv_axi_clk",
1568 .ops = &clk_branch2_ops,
1569 },
1570 },
1571};
1572
1573static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
1574 .halt_reg = 0x9d018,
1575 .halt_check = BRANCH_HALT_VOTED,
1576 .hwcg_reg = 0x9d018,
1577 .hwcg_bit = 1,
1578 .clkr = {
1579 .enable_reg = 0x62000,
1580 .enable_mask = BIT(25),
1581 .hw.init = &(const struct clk_init_data) {
1582 .name = "gcc_pcie_0_slv_q2a_axi_clk",
1583 .ops = &clk_branch2_ops,
1584 },
1585 },
1586};
1587
1588static struct clk_branch gcc_pdm2_clk = {
1589 .halt_reg = 0x4300c,
1590 .halt_check = BRANCH_HALT,
1591 .clkr = {
1592 .enable_reg = 0x4300c,
1593 .enable_mask = BIT(0),
1594 .hw.init = &(const struct clk_init_data) {
1595 .name = "gcc_pdm2_clk",
1596 .parent_hws = (const struct clk_hw*[]) {
1597 &gcc_pdm2_clk_src.clkr.hw,
1598 },
1599 .num_parents = 1,
1600 .flags = CLK_SET_RATE_PARENT,
1601 .ops = &clk_branch2_ops,
1602 },
1603 },
1604};
1605
1606static struct clk_branch gcc_pdm_ahb_clk = {
1607 .halt_reg = 0x43004,
1608 .halt_check = BRANCH_HALT_VOTED,
1609 .hwcg_reg = 0x43004,
1610 .hwcg_bit = 1,
1611 .clkr = {
1612 .enable_reg = 0x43004,
1613 .enable_mask = BIT(0),
1614 .hw.init = &(const struct clk_init_data) {
1615 .name = "gcc_pdm_ahb_clk",
1616 .ops = &clk_branch2_ops,
1617 },
1618 },
1619};
1620
1621static struct clk_branch gcc_pdm_xo4_clk = {
1622 .halt_reg = 0x43008,
1623 .halt_check = BRANCH_HALT,
1624 .clkr = {
1625 .enable_reg = 0x43008,
1626 .enable_mask = BIT(0),
1627 .hw.init = &(const struct clk_init_data) {
1628 .name = "gcc_pdm_xo4_clk",
1629 .ops = &clk_branch2_ops,
1630 },
1631 },
1632};
1633
1634static struct clk_branch gcc_qmip_anoc_pcie_clk = {
1635 .halt_reg = 0x84044,
1636 .halt_check = BRANCH_HALT_VOTED,
1637 .hwcg_reg = 0x84044,
1638 .hwcg_bit = 1,
1639 .clkr = {
1640 .enable_reg = 0x84044,
1641 .enable_mask = BIT(0),
1642 .hw.init = &(const struct clk_init_data) {
1643 .name = "gcc_qmip_anoc_pcie_clk",
1644 .ops = &clk_branch2_ops,
1645 },
1646 },
1647};
1648
1649static struct clk_branch gcc_qmip_ecpri_dma0_clk = {
1650 .halt_reg = 0x84038,
1651 .halt_check = BRANCH_HALT_VOTED,
1652 .hwcg_reg = 0x84038,
1653 .hwcg_bit = 1,
1654 .clkr = {
1655 .enable_reg = 0x84038,
1656 .enable_mask = BIT(0),
1657 .hw.init = &(const struct clk_init_data) {
1658 .name = "gcc_qmip_ecpri_dma0_clk",
1659 .ops = &clk_branch2_ops,
1660 },
1661 },
1662};
1663
1664static struct clk_branch gcc_qmip_ecpri_dma1_clk = {
1665 .halt_reg = 0x8403c,
1666 .halt_check = BRANCH_HALT_VOTED,
1667 .hwcg_reg = 0x8403c,
1668 .hwcg_bit = 1,
1669 .clkr = {
1670 .enable_reg = 0x8403c,
1671 .enable_mask = BIT(0),
1672 .hw.init = &(const struct clk_init_data) {
1673 .name = "gcc_qmip_ecpri_dma1_clk",
1674 .ops = &clk_branch2_ops,
1675 },
1676 },
1677};
1678
1679static struct clk_branch gcc_qmip_ecpri_gsi_clk = {
1680 .halt_reg = 0x84040,
1681 .halt_check = BRANCH_HALT_VOTED,
1682 .hwcg_reg = 0x84040,
1683 .hwcg_bit = 1,
1684 .clkr = {
1685 .enable_reg = 0x84040,
1686 .enable_mask = BIT(0),
1687 .hw.init = &(const struct clk_init_data) {
1688 .name = "gcc_qmip_ecpri_gsi_clk",
1689 .ops = &clk_branch2_ops,
1690 },
1691 },
1692};
1693
1694static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
1695 .halt_reg = 0x27018,
1696 .halt_check = BRANCH_HALT_VOTED,
1697 .clkr = {
1698 .enable_reg = 0x62008,
1699 .enable_mask = BIT(9),
1700 .hw.init = &(const struct clk_init_data) {
1701 .name = "gcc_qupv3_wrap0_core_2x_clk",
1702 .ops = &clk_branch2_ops,
1703 },
1704 },
1705};
1706
1707static struct clk_branch gcc_qupv3_wrap0_core_clk = {
1708 .halt_reg = 0x2700c,
1709 .halt_check = BRANCH_HALT_VOTED,
1710 .clkr = {
1711 .enable_reg = 0x62008,
1712 .enable_mask = BIT(8),
1713 .hw.init = &(const struct clk_init_data) {
1714 .name = "gcc_qupv3_wrap0_core_clk",
1715 .ops = &clk_branch2_ops,
1716 },
1717 },
1718};
1719
1720static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
1721 .halt_reg = 0x2714c,
1722 .halt_check = BRANCH_HALT_VOTED,
1723 .clkr = {
1724 .enable_reg = 0x62008,
1725 .enable_mask = BIT(10),
1726 .hw.init = &(const struct clk_init_data) {
1727 .name = "gcc_qupv3_wrap0_s0_clk",
1728 .parent_hws = (const struct clk_hw*[]) {
1729 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
1730 },
1731 .num_parents = 1,
1732 .flags = CLK_SET_RATE_PARENT,
1733 .ops = &clk_branch2_ops,
1734 },
1735 },
1736};
1737
1738static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
1739 .halt_reg = 0x27280,
1740 .halt_check = BRANCH_HALT_VOTED,
1741 .clkr = {
1742 .enable_reg = 0x62008,
1743 .enable_mask = BIT(11),
1744 .hw.init = &(const struct clk_init_data) {
1745 .name = "gcc_qupv3_wrap0_s1_clk",
1746 .parent_hws = (const struct clk_hw*[]) {
1747 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
1748 },
1749 .num_parents = 1,
1750 .flags = CLK_SET_RATE_PARENT,
1751 .ops = &clk_branch2_ops,
1752 },
1753 },
1754};
1755
1756static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
1757 .halt_reg = 0x273b4,
1758 .halt_check = BRANCH_HALT_VOTED,
1759 .clkr = {
1760 .enable_reg = 0x62008,
1761 .enable_mask = BIT(12),
1762 .hw.init = &(const struct clk_init_data) {
1763 .name = "gcc_qupv3_wrap0_s2_clk",
1764 .parent_hws = (const struct clk_hw*[]) {
1765 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
1766 },
1767 .num_parents = 1,
1768 .flags = CLK_SET_RATE_PARENT,
1769 .ops = &clk_branch2_ops,
1770 },
1771 },
1772};
1773
1774static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
1775 .halt_reg = 0x274e8,
1776 .halt_check = BRANCH_HALT_VOTED,
1777 .clkr = {
1778 .enable_reg = 0x62008,
1779 .enable_mask = BIT(13),
1780 .hw.init = &(const struct clk_init_data) {
1781 .name = "gcc_qupv3_wrap0_s3_clk",
1782 .parent_hws = (const struct clk_hw*[]) {
1783 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
1784 },
1785 .num_parents = 1,
1786 .flags = CLK_SET_RATE_PARENT,
1787 .ops = &clk_branch2_ops,
1788 },
1789 },
1790};
1791
1792static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
1793 .halt_reg = 0x2761c,
1794 .halt_check = BRANCH_HALT_VOTED,
1795 .clkr = {
1796 .enable_reg = 0x62008,
1797 .enable_mask = BIT(14),
1798 .hw.init = &(const struct clk_init_data) {
1799 .name = "gcc_qupv3_wrap0_s4_clk",
1800 .parent_hws = (const struct clk_hw*[]) {
1801 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
1802 },
1803 .num_parents = 1,
1804 .flags = CLK_SET_RATE_PARENT,
1805 .ops = &clk_branch2_ops,
1806 },
1807 },
1808};
1809
1810static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
1811 .halt_reg = 0x27750,
1812 .halt_check = BRANCH_HALT_VOTED,
1813 .clkr = {
1814 .enable_reg = 0x62008,
1815 .enable_mask = BIT(15),
1816 .hw.init = &(const struct clk_init_data) {
1817 .name = "gcc_qupv3_wrap0_s5_clk",
1818 .parent_hws = (const struct clk_hw*[]) {
1819 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
1820 },
1821 .num_parents = 1,
1822 .flags = CLK_SET_RATE_PARENT,
1823 .ops = &clk_branch2_ops,
1824 },
1825 },
1826};
1827
1828static struct clk_branch gcc_qupv3_wrap0_s6_clk = {
1829 .halt_reg = 0x27884,
1830 .halt_check = BRANCH_HALT_VOTED,
1831 .clkr = {
1832 .enable_reg = 0x62008,
1833 .enable_mask = BIT(16),
1834 .hw.init = &(const struct clk_init_data) {
1835 .name = "gcc_qupv3_wrap0_s6_clk",
1836 .parent_hws = (const struct clk_hw*[]) {
1837 &gcc_qupv3_wrap0_s6_clk_src.clkr.hw,
1838 },
1839 .num_parents = 1,
1840 .flags = CLK_SET_RATE_PARENT,
1841 .ops = &clk_branch2_ops,
1842 },
1843 },
1844};
1845
1846static struct clk_branch gcc_qupv3_wrap0_s7_clk = {
1847 .halt_reg = 0x279b8,
1848 .halt_check = BRANCH_HALT_VOTED,
1849 .clkr = {
1850 .enable_reg = 0x62008,
1851 .enable_mask = BIT(17),
1852 .hw.init = &(const struct clk_init_data) {
1853 .name = "gcc_qupv3_wrap0_s7_clk",
1854 .parent_hws = (const struct clk_hw*[]) {
1855 &gcc_qupv3_wrap0_s7_clk_src.clkr.hw,
1856 },
1857 .num_parents = 1,
1858 .flags = CLK_SET_RATE_PARENT,
1859 .ops = &clk_branch2_ops,
1860 },
1861 },
1862};
1863
1864static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
1865 .halt_reg = 0x28018,
1866 .halt_check = BRANCH_HALT_VOTED,
1867 .clkr = {
1868 .enable_reg = 0x62008,
1869 .enable_mask = BIT(18),
1870 .hw.init = &(const struct clk_init_data) {
1871 .name = "gcc_qupv3_wrap1_core_2x_clk",
1872 .ops = &clk_branch2_ops,
1873 },
1874 },
1875};
1876
1877static struct clk_branch gcc_qupv3_wrap1_core_clk = {
1878 .halt_reg = 0x2800c,
1879 .halt_check = BRANCH_HALT_VOTED,
1880 .clkr = {
1881 .enable_reg = 0x62008,
1882 .enable_mask = BIT(19),
1883 .hw.init = &(const struct clk_init_data) {
1884 .name = "gcc_qupv3_wrap1_core_clk",
1885 .ops = &clk_branch2_ops,
1886 },
1887 },
1888};
1889
1890static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
1891 .halt_reg = 0x2814c,
1892 .halt_check = BRANCH_HALT_VOTED,
1893 .clkr = {
1894 .enable_reg = 0x62008,
1895 .enable_mask = BIT(22),
1896 .hw.init = &(const struct clk_init_data) {
1897 .name = "gcc_qupv3_wrap1_s0_clk",
1898 .parent_hws = (const struct clk_hw*[]) {
1899 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
1900 },
1901 .num_parents = 1,
1902 .flags = CLK_SET_RATE_PARENT,
1903 .ops = &clk_branch2_ops,
1904 },
1905 },
1906};
1907
1908static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
1909 .halt_reg = 0x28280,
1910 .halt_check = BRANCH_HALT_VOTED,
1911 .clkr = {
1912 .enable_reg = 0x62008,
1913 .enable_mask = BIT(23),
1914 .hw.init = &(const struct clk_init_data) {
1915 .name = "gcc_qupv3_wrap1_s1_clk",
1916 .parent_hws = (const struct clk_hw*[]) {
1917 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
1918 },
1919 .num_parents = 1,
1920 .flags = CLK_SET_RATE_PARENT,
1921 .ops = &clk_branch2_ops,
1922 },
1923 },
1924};
1925
1926static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
1927 .halt_reg = 0x283b4,
1928 .halt_check = BRANCH_HALT_VOTED,
1929 .clkr = {
1930 .enable_reg = 0x62008,
1931 .enable_mask = BIT(24),
1932 .hw.init = &(const struct clk_init_data) {
1933 .name = "gcc_qupv3_wrap1_s2_clk",
1934 .parent_hws = (const struct clk_hw*[]) {
1935 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
1936 },
1937 .num_parents = 1,
1938 .flags = CLK_SET_RATE_PARENT,
1939 .ops = &clk_branch2_ops,
1940 },
1941 },
1942};
1943
1944static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
1945 .halt_reg = 0x284e8,
1946 .halt_check = BRANCH_HALT_VOTED,
1947 .clkr = {
1948 .enable_reg = 0x62008,
1949 .enable_mask = BIT(25),
1950 .hw.init = &(const struct clk_init_data) {
1951 .name = "gcc_qupv3_wrap1_s3_clk",
1952 .parent_hws = (const struct clk_hw*[]) {
1953 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
1954 },
1955 .num_parents = 1,
1956 .flags = CLK_SET_RATE_PARENT,
1957 .ops = &clk_branch2_ops,
1958 },
1959 },
1960};
1961
1962static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
1963 .halt_reg = 0x2861c,
1964 .halt_check = BRANCH_HALT_VOTED,
1965 .clkr = {
1966 .enable_reg = 0x62008,
1967 .enable_mask = BIT(26),
1968 .hw.init = &(const struct clk_init_data) {
1969 .name = "gcc_qupv3_wrap1_s4_clk",
1970 .parent_hws = (const struct clk_hw*[]) {
1971 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
1972 },
1973 .num_parents = 1,
1974 .flags = CLK_SET_RATE_PARENT,
1975 .ops = &clk_branch2_ops,
1976 },
1977 },
1978};
1979
1980static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
1981 .halt_reg = 0x28750,
1982 .halt_check = BRANCH_HALT_VOTED,
1983 .clkr = {
1984 .enable_reg = 0x62008,
1985 .enable_mask = BIT(27),
1986 .hw.init = &(const struct clk_init_data) {
1987 .name = "gcc_qupv3_wrap1_s5_clk",
1988 .parent_hws = (const struct clk_hw*[]) {
1989 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
1990 },
1991 .num_parents = 1,
1992 .flags = CLK_SET_RATE_PARENT,
1993 .ops = &clk_branch2_ops,
1994 },
1995 },
1996};
1997
1998static struct clk_branch gcc_qupv3_wrap1_s6_clk = {
1999 .halt_reg = 0x28884,
2000 .halt_check = BRANCH_HALT_VOTED,
2001 .clkr = {
2002 .enable_reg = 0x62008,
2003 .enable_mask = BIT(28),
2004 .hw.init = &(const struct clk_init_data) {
2005 .name = "gcc_qupv3_wrap1_s6_clk",
2006 .parent_hws = (const struct clk_hw*[]) {
2007 &gcc_qupv3_wrap1_s6_clk_src.clkr.hw,
2008 },
2009 .num_parents = 1,
2010 .flags = CLK_SET_RATE_PARENT,
2011 .ops = &clk_branch2_ops,
2012 },
2013 },
2014};
2015
2016static struct clk_branch gcc_qupv3_wrap1_s7_clk = {
2017 .halt_reg = 0x289b8,
2018 .halt_check = BRANCH_HALT_VOTED,
2019 .clkr = {
2020 .enable_reg = 0x62008,
2021 .enable_mask = BIT(29),
2022 .hw.init = &(const struct clk_init_data) {
2023 .name = "gcc_qupv3_wrap1_s7_clk",
2024 .parent_hws = (const struct clk_hw*[]) {
2025 &gcc_qupv3_wrap1_s7_clk_src.clkr.hw,
2026 },
2027 .num_parents = 1,
2028 .flags = CLK_SET_RATE_PARENT,
2029 .ops = &clk_branch2_ops,
2030 },
2031 },
2032};
2033
2034static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
2035 .halt_reg = 0x27004,
2036 .halt_check = BRANCH_HALT_VOTED,
2037 .hwcg_reg = 0x27004,
2038 .hwcg_bit = 1,
2039 .clkr = {
2040 .enable_reg = 0x62008,
2041 .enable_mask = BIT(6),
2042 .hw.init = &(const struct clk_init_data) {
2043 .name = "gcc_qupv3_wrap_0_m_ahb_clk",
2044 .ops = &clk_branch2_ops,
2045 },
2046 },
2047};
2048
2049static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
2050 .halt_reg = 0x27008,
2051 .halt_check = BRANCH_HALT_VOTED,
2052 .hwcg_reg = 0x27008,
2053 .hwcg_bit = 1,
2054 .clkr = {
2055 .enable_reg = 0x62008,
2056 .enable_mask = BIT(7),
2057 .hw.init = &(const struct clk_init_data) {
2058 .name = "gcc_qupv3_wrap_0_s_ahb_clk",
2059 .ops = &clk_branch2_ops,
2060 },
2061 },
2062};
2063
2064static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
2065 .halt_reg = 0x28004,
2066 .halt_check = BRANCH_HALT_VOTED,
2067 .hwcg_reg = 0x28004,
2068 .hwcg_bit = 1,
2069 .clkr = {
2070 .enable_reg = 0x62008,
2071 .enable_mask = BIT(20),
2072 .hw.init = &(const struct clk_init_data) {
2073 .name = "gcc_qupv3_wrap_1_m_ahb_clk",
2074 .ops = &clk_branch2_ops,
2075 },
2076 },
2077};
2078
2079static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
2080 .halt_reg = 0x28008,
2081 .halt_check = BRANCH_HALT_VOTED,
2082 .hwcg_reg = 0x28008,
2083 .hwcg_bit = 1,
2084 .clkr = {
2085 .enable_reg = 0x62008,
2086 .enable_mask = BIT(21),
2087 .hw.init = &(const struct clk_init_data) {
2088 .name = "gcc_qupv3_wrap_1_s_ahb_clk",
2089 .ops = &clk_branch2_ops,
2090 },
2091 },
2092};
2093
2094static struct clk_branch gcc_sdcc5_ahb_clk = {
2095 .halt_reg = 0x3b00c,
2096 .halt_check = BRANCH_HALT,
2097 .clkr = {
2098 .enable_reg = 0x3b00c,
2099 .enable_mask = BIT(0),
2100 .hw.init = &(const struct clk_init_data) {
2101 .name = "gcc_sdcc5_ahb_clk",
2102 .ops = &clk_branch2_ops,
2103 },
2104 },
2105};
2106
2107static struct clk_branch gcc_sdcc5_apps_clk = {
2108 .halt_reg = 0x3b004,
2109 .halt_check = BRANCH_HALT,
2110 .clkr = {
2111 .enable_reg = 0x3b004,
2112 .enable_mask = BIT(0),
2113 .hw.init = &(const struct clk_init_data) {
2114 .name = "gcc_sdcc5_apps_clk",
2115 .parent_hws = (const struct clk_hw*[]) {
2116 &gcc_sdcc5_apps_clk_src.clkr.hw,
2117 },
2118 .num_parents = 1,
2119 .flags = CLK_SET_RATE_PARENT,
2120 .ops = &clk_branch2_ops,
2121 },
2122 },
2123};
2124
2125static struct clk_branch gcc_sdcc5_ice_core_clk = {
2126 .halt_reg = 0x3b010,
2127 .halt_check = BRANCH_HALT,
2128 .clkr = {
2129 .enable_reg = 0x3b010,
2130 .enable_mask = BIT(0),
2131 .hw.init = &(const struct clk_init_data) {
2132 .name = "gcc_sdcc5_ice_core_clk",
2133 .parent_hws = (const struct clk_hw*[]) {
2134 &gcc_sdcc5_ice_core_clk_src.clkr.hw,
2135 },
2136 .num_parents = 1,
2137 .flags = CLK_SET_RATE_PARENT,
2138 .ops = &clk_branch2_ops,
2139 },
2140 },
2141};
2142
2143static struct clk_branch gcc_sm_bus_ahb_clk = {
2144 .halt_reg = 0x5b004,
2145 .halt_check = BRANCH_HALT,
2146 .clkr = {
2147 .enable_reg = 0x5b004,
2148 .enable_mask = BIT(0),
2149 .hw.init = &(const struct clk_init_data) {
2150 .name = "gcc_sm_bus_ahb_clk",
2151 .ops = &clk_branch2_ops,
2152 },
2153 },
2154};
2155
2156static struct clk_branch gcc_sm_bus_xo_clk = {
2157 .halt_reg = 0x5b008,
2158 .halt_check = BRANCH_HALT,
2159 .clkr = {
2160 .enable_reg = 0x5b008,
2161 .enable_mask = BIT(0),
2162 .hw.init = &(const struct clk_init_data) {
2163 .name = "gcc_sm_bus_xo_clk",
2164 .parent_hws = (const struct clk_hw*[]) {
2165 &gcc_sm_bus_xo_clk_src.clkr.hw,
2166 },
2167 .num_parents = 1,
2168 .flags = CLK_SET_RATE_PARENT,
2169 .ops = &clk_branch2_ops,
2170 },
2171 },
2172};
2173
2174static struct clk_branch gcc_snoc_cnoc_gemnoc_pcie_qx_clk = {
2175 .halt_reg = 0x9200c,
2176 .halt_check = BRANCH_HALT_SKIP,
2177 .hwcg_reg = 0x9200c,
2178 .hwcg_bit = 1,
2179 .clkr = {
2180 .enable_reg = 0x62000,
2181 .enable_mask = BIT(11),
2182 .hw.init = &(const struct clk_init_data) {
2183 .name = "gcc_snoc_cnoc_gemnoc_pcie_qx_clk",
2184 .ops = &clk_branch2_ops,
2185 },
2186 },
2187};
2188
2189static struct clk_branch gcc_snoc_cnoc_gemnoc_pcie_south_qx_clk = {
2190 .halt_reg = 0x92010,
2191 .halt_check = BRANCH_HALT_SKIP,
2192 .hwcg_reg = 0x92010,
2193 .hwcg_bit = 1,
2194 .clkr = {
2195 .enable_reg = 0x62000,
2196 .enable_mask = BIT(12),
2197 .hw.init = &(const struct clk_init_data) {
2198 .name = "gcc_snoc_cnoc_gemnoc_pcie_south_qx_clk",
2199 .ops = &clk_branch2_ops,
2200 },
2201 },
2202};
2203
2204static struct clk_branch gcc_snoc_cnoc_pcie_qx_clk = {
2205 .halt_reg = 0x84030,
2206 .halt_check = BRANCH_HALT,
2207 .clkr = {
2208 .enable_reg = 0x84030,
2209 .enable_mask = BIT(0),
2210 .hw.init = &(const struct clk_init_data) {
2211 .name = "gcc_snoc_cnoc_pcie_qx_clk",
2212 .ops = &clk_branch2_ops,
2213 },
2214 },
2215};
2216
2217static struct clk_branch gcc_snoc_pcie_sf_center_qx_clk = {
2218 .halt_reg = 0x92014,
2219 .halt_check = BRANCH_HALT_SKIP,
2220 .hwcg_reg = 0x92014,
2221 .hwcg_bit = 1,
2222 .clkr = {
2223 .enable_reg = 0x62000,
2224 .enable_mask = BIT(19),
2225 .hw.init = &(const struct clk_init_data) {
2226 .name = "gcc_snoc_pcie_sf_center_qx_clk",
2227 .ops = &clk_branch2_ops,
2228 },
2229 },
2230};
2231
2232static struct clk_branch gcc_snoc_pcie_sf_south_qx_clk = {
2233 .halt_reg = 0x92018,
2234 .halt_check = BRANCH_HALT_SKIP,
2235 .hwcg_reg = 0x92018,
2236 .hwcg_bit = 1,
2237 .clkr = {
2238 .enable_reg = 0x62000,
2239 .enable_mask = BIT(22),
2240 .hw.init = &(const struct clk_init_data) {
2241 .name = "gcc_snoc_pcie_sf_south_qx_clk",
2242 .ops = &clk_branch2_ops,
2243 },
2244 },
2245};
2246
2247static struct clk_branch gcc_tsc_cfg_ahb_clk = {
2248 .halt_reg = 0x5700c,
2249 .halt_check = BRANCH_HALT,
2250 .clkr = {
2251 .enable_reg = 0x5700c,
2252 .enable_mask = BIT(0),
2253 .hw.init = &(const struct clk_init_data) {
2254 .name = "gcc_tsc_cfg_ahb_clk",
2255 .ops = &clk_branch2_ops,
2256 },
2257 },
2258};
2259
2260static struct clk_branch gcc_tsc_cntr_clk = {
2261 .halt_reg = 0x57004,
2262 .halt_check = BRANCH_HALT,
2263 .clkr = {
2264 .enable_reg = 0x57004,
2265 .enable_mask = BIT(0),
2266 .hw.init = &(const struct clk_init_data) {
2267 .name = "gcc_tsc_cntr_clk",
2268 .parent_hws = (const struct clk_hw*[]) {
2269 &gcc_tsc_clk_src.clkr.hw,
2270 },
2271 .num_parents = 1,
2272 .flags = CLK_SET_RATE_PARENT,
2273 .ops = &clk_branch2_ops,
2274 },
2275 },
2276};
2277
2278static struct clk_branch gcc_tsc_etu_clk = {
2279 .halt_reg = 0x57008,
2280 .halt_check = BRANCH_HALT,
2281 .clkr = {
2282 .enable_reg = 0x57008,
2283 .enable_mask = BIT(0),
2284 .hw.init = &(const struct clk_init_data) {
2285 .name = "gcc_tsc_etu_clk",
2286 .parent_hws = (const struct clk_hw*[]) {
2287 &gcc_tsc_clk_src.clkr.hw,
2288 },
2289 .num_parents = 1,
2290 .flags = CLK_SET_RATE_PARENT,
2291 .ops = &clk_branch2_ops,
2292 },
2293 },
2294};
2295
2296static struct clk_branch gcc_usb2_clkref_en = {
2297 .halt_reg = 0x9c008,
2298 .halt_check = BRANCH_HALT,
2299 .clkr = {
2300 .enable_reg = 0x9c008,
2301 .enable_mask = BIT(0),
2302 .hw.init = &(const struct clk_init_data) {
2303 .name = "gcc_usb2_clkref_en",
2304 .ops = &clk_branch2_ops,
2305 },
2306 },
2307};
2308
2309static struct clk_branch gcc_usb30_prim_master_clk = {
2310 .halt_reg = 0x49018,
2311 .halt_check = BRANCH_HALT,
2312 .clkr = {
2313 .enable_reg = 0x49018,
2314 .enable_mask = BIT(0),
2315 .hw.init = &(const struct clk_init_data) {
2316 .name = "gcc_usb30_prim_master_clk",
2317 .parent_hws = (const struct clk_hw*[]) {
2318 &gcc_usb30_prim_master_clk_src.clkr.hw,
2319 },
2320 .num_parents = 1,
2321 .flags = CLK_SET_RATE_PARENT,
2322 .ops = &clk_branch2_ops,
2323 },
2324 },
2325};
2326
2327static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
2328 .halt_reg = 0x49024,
2329 .halt_check = BRANCH_HALT,
2330 .clkr = {
2331 .enable_reg = 0x49024,
2332 .enable_mask = BIT(0),
2333 .hw.init = &(const struct clk_init_data) {
2334 .name = "gcc_usb30_prim_mock_utmi_clk",
2335 .parent_hws = (const struct clk_hw*[]) {
2336 &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,
2337 },
2338 .num_parents = 1,
2339 .flags = CLK_SET_RATE_PARENT,
2340 .ops = &clk_branch2_ops,
2341 },
2342 },
2343};
2344
2345static struct clk_branch gcc_usb30_prim_sleep_clk = {
2346 .halt_reg = 0x49020,
2347 .halt_check = BRANCH_HALT,
2348 .clkr = {
2349 .enable_reg = 0x49020,
2350 .enable_mask = BIT(0),
2351 .hw.init = &(const struct clk_init_data) {
2352 .name = "gcc_usb30_prim_sleep_clk",
2353 .ops = &clk_branch2_ops,
2354 },
2355 },
2356};
2357
2358static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
2359 .halt_reg = 0x49060,
2360 .halt_check = BRANCH_HALT,
2361 .clkr = {
2362 .enable_reg = 0x49060,
2363 .enable_mask = BIT(0),
2364 .hw.init = &(const struct clk_init_data) {
2365 .name = "gcc_usb3_prim_phy_aux_clk",
2366 .parent_hws = (const struct clk_hw*[]) {
2367 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2368 },
2369 .num_parents = 1,
2370 .flags = CLK_SET_RATE_PARENT,
2371 .ops = &clk_branch2_ops,
2372 },
2373 },
2374};
2375
2376static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
2377 .halt_reg = 0x49064,
2378 .halt_check = BRANCH_HALT,
2379 .clkr = {
2380 .enable_reg = 0x49064,
2381 .enable_mask = BIT(0),
2382 .hw.init = &(const struct clk_init_data) {
2383 .name = "gcc_usb3_prim_phy_com_aux_clk",
2384 .parent_hws = (const struct clk_hw*[]) {
2385 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2386 },
2387 .num_parents = 1,
2388 .flags = CLK_SET_RATE_PARENT,
2389 .ops = &clk_branch2_ops,
2390 },
2391 },
2392};
2393
2394static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
2395 .halt_reg = 0x49068,
2396 .halt_check = BRANCH_HALT_DELAY,
2397 .hwcg_reg = 0x49068,
2398 .hwcg_bit = 1,
2399 .clkr = {
2400 .enable_reg = 0x49068,
2401 .enable_mask = BIT(0),
2402 .hw.init = &(const struct clk_init_data) {
2403 .name = "gcc_usb3_prim_phy_pipe_clk",
2404 .parent_hws = (const struct clk_hw*[]) {
2405 &gcc_usb3_prim_phy_pipe_clk_src.clkr.hw,
2406 },
2407 .num_parents = 1,
2408 .flags = CLK_SET_RATE_PARENT,
2409 .ops = &clk_branch2_ops,
2410 },
2411 },
2412};
2413
2414static struct gdsc pcie_0_gdsc = {
2415 .gdscr = 0x9d004,
2416 .en_rest_wait_val = 0x2,
2417 .en_few_wait_val = 0x2,
2418 .clk_dis_wait_val = 0xf,
2419 .pd = {
2420 .name = "gcc_pcie_0_gdsc",
2421 },
2422 .pwrsts = PWRSTS_OFF_ON,
2423};
2424
2425static struct gdsc pcie_0_phy_gdsc = {
2426 .gdscr = 0x7c004,
2427 .en_rest_wait_val = 0x2,
2428 .en_few_wait_val = 0x2,
2429 .clk_dis_wait_val = 0x2,
2430 .pd = {
2431 .name = "gcc_pcie_0_phy_gdsc",
2432 },
2433 .pwrsts = PWRSTS_OFF_ON,
2434};
2435
2436static struct gdsc usb30_prim_gdsc = {
2437 .gdscr = 0x49004,
2438 .en_rest_wait_val = 0x2,
2439 .en_few_wait_val = 0x2,
2440 .clk_dis_wait_val = 0xf,
2441 .pd = {
2442 .name = "gcc_usb30_prim_gdsc",
2443 },
2444 .pwrsts = PWRSTS_OFF_ON,
2445};
2446
2447static struct clk_regmap *gcc_qdu1000_clocks[] = {
2448 [GCC_AGGRE_NOC_ECPRI_DMA_CLK] = &gcc_aggre_noc_ecpri_dma_clk.clkr,
2449 [GCC_AGGRE_NOC_ECPRI_DMA_CLK_SRC] = &gcc_aggre_noc_ecpri_dma_clk_src.clkr,
2450 [GCC_AGGRE_NOC_ECPRI_GSI_CLK_SRC] = &gcc_aggre_noc_ecpri_gsi_clk_src.clkr,
2451 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2452 [GCC_CFG_NOC_ECPRI_CC_AHB_CLK] = &gcc_cfg_noc_ecpri_cc_ahb_clk.clkr,
2453 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
2454 [GCC_DDRSS_ECPRI_DMA_CLK] = &gcc_ddrss_ecpri_dma_clk.clkr,
2455 [GCC_ECPRI_AHB_CLK] = &gcc_ecpri_ahb_clk.clkr,
2456 [GCC_ECPRI_CC_GPLL0_CLK_SRC] = &gcc_ecpri_cc_gpll0_clk_src.clkr,
2457 [GCC_ECPRI_CC_GPLL1_EVEN_CLK_SRC] = &gcc_ecpri_cc_gpll1_even_clk_src.clkr,
2458 [GCC_ECPRI_CC_GPLL2_EVEN_CLK_SRC] = &gcc_ecpri_cc_gpll2_even_clk_src.clkr,
2459 [GCC_ECPRI_CC_GPLL3_CLK_SRC] = &gcc_ecpri_cc_gpll3_clk_src.clkr,
2460 [GCC_ECPRI_CC_GPLL4_CLK_SRC] = &gcc_ecpri_cc_gpll4_clk_src.clkr,
2461 [GCC_ECPRI_CC_GPLL5_EVEN_CLK_SRC] = &gcc_ecpri_cc_gpll5_even_clk_src.clkr,
2462 [GCC_ECPRI_XO_CLK] = &gcc_ecpri_xo_clk.clkr,
2463 [GCC_ETH_DBG_SNOC_AXI_CLK] = &gcc_eth_dbg_snoc_axi_clk.clkr,
2464 [GCC_GEMNOC_PCIE_QX_CLK] = &gcc_gemnoc_pcie_qx_clk.clkr,
2465 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2466 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
2467 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2468 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
2469 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2470 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
2471 [GCC_GPLL0] = &gcc_gpll0.clkr,
2472 [GCC_GPLL0_OUT_EVEN] = &gcc_gpll0_out_even.clkr,
2473 [GCC_GPLL1] = &gcc_gpll1.clkr,
2474 [GCC_GPLL2] = &gcc_gpll2.clkr,
2475 [GCC_GPLL2_OUT_EVEN] = &gcc_gpll2_out_even.clkr,
2476 [GCC_GPLL3] = &gcc_gpll3.clkr,
2477 [GCC_GPLL4] = &gcc_gpll4.clkr,
2478 [GCC_GPLL5] = &gcc_gpll5.clkr,
2479 [GCC_GPLL5_OUT_EVEN] = &gcc_gpll5_out_even.clkr,
2480 [GCC_GPLL6] = &gcc_gpll6.clkr,
2481 [GCC_GPLL7] = &gcc_gpll7.clkr,
2482 [GCC_GPLL8] = &gcc_gpll8.clkr,
2483 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
2484 [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
2485 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
2486 [GCC_PCIE_0_CLKREF_EN] = &gcc_pcie_0_clkref_en.clkr,
2487 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
2488 [GCC_PCIE_0_PHY_AUX_CLK] = &gcc_pcie_0_phy_aux_clk.clkr,
2489 [GCC_PCIE_0_PHY_RCHNG_CLK] = &gcc_pcie_0_phy_rchng_clk.clkr,
2490 [GCC_PCIE_0_PHY_RCHNG_CLK_SRC] = &gcc_pcie_0_phy_rchng_clk_src.clkr,
2491 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
2492 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
2493 [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
2494 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2495 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
2496 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2497 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
2498 [GCC_QMIP_ANOC_PCIE_CLK] = &gcc_qmip_anoc_pcie_clk.clkr,
2499 [GCC_QMIP_ECPRI_DMA0_CLK] = &gcc_qmip_ecpri_dma0_clk.clkr,
2500 [GCC_QMIP_ECPRI_DMA1_CLK] = &gcc_qmip_ecpri_dma1_clk.clkr,
2501 [GCC_QMIP_ECPRI_GSI_CLK] = &gcc_qmip_ecpri_gsi_clk.clkr,
2502 [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
2503 [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
2504 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
2505 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
2506 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
2507 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
2508 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
2509 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
2510 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
2511 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
2512 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
2513 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
2514 [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
2515 [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
2516 [GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr,
2517 [GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr,
2518 [GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr,
2519 [GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr,
2520 [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
2521 [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
2522 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
2523 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
2524 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
2525 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
2526 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
2527 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
2528 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
2529 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
2530 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
2531 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
2532 [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
2533 [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
2534 [GCC_QUPV3_WRAP1_S6_CLK] = &gcc_qupv3_wrap1_s6_clk.clkr,
2535 [GCC_QUPV3_WRAP1_S6_CLK_SRC] = &gcc_qupv3_wrap1_s6_clk_src.clkr,
2536 [GCC_QUPV3_WRAP1_S7_CLK] = &gcc_qupv3_wrap1_s7_clk.clkr,
2537 [GCC_QUPV3_WRAP1_S7_CLK_SRC] = &gcc_qupv3_wrap1_s7_clk_src.clkr,
2538 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
2539 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
2540 [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
2541 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
2542 [GCC_SDCC5_AHB_CLK] = &gcc_sdcc5_ahb_clk.clkr,
2543 [GCC_SDCC5_APPS_CLK] = &gcc_sdcc5_apps_clk.clkr,
2544 [GCC_SDCC5_APPS_CLK_SRC] = &gcc_sdcc5_apps_clk_src.clkr,
2545 [GCC_SDCC5_ICE_CORE_CLK] = &gcc_sdcc5_ice_core_clk.clkr,
2546 [GCC_SDCC5_ICE_CORE_CLK_SRC] = &gcc_sdcc5_ice_core_clk_src.clkr,
2547 [GCC_SM_BUS_AHB_CLK] = &gcc_sm_bus_ahb_clk.clkr,
2548 [GCC_SM_BUS_XO_CLK] = &gcc_sm_bus_xo_clk.clkr,
2549 [GCC_SM_BUS_XO_CLK_SRC] = &gcc_sm_bus_xo_clk_src.clkr,
2550 [GCC_SNOC_CNOC_GEMNOC_PCIE_QX_CLK] = &gcc_snoc_cnoc_gemnoc_pcie_qx_clk.clkr,
2551 [GCC_SNOC_CNOC_GEMNOC_PCIE_SOUTH_QX_CLK] = &gcc_snoc_cnoc_gemnoc_pcie_south_qx_clk.clkr,
2552 [GCC_SNOC_CNOC_PCIE_QX_CLK] = &gcc_snoc_cnoc_pcie_qx_clk.clkr,
2553 [GCC_SNOC_PCIE_SF_CENTER_QX_CLK] = &gcc_snoc_pcie_sf_center_qx_clk.clkr,
2554 [GCC_SNOC_PCIE_SF_SOUTH_QX_CLK] = &gcc_snoc_pcie_sf_south_qx_clk.clkr,
2555 [GCC_TSC_CFG_AHB_CLK] = &gcc_tsc_cfg_ahb_clk.clkr,
2556 [GCC_TSC_CLK_SRC] = &gcc_tsc_clk_src.clkr,
2557 [GCC_TSC_CNTR_CLK] = &gcc_tsc_cntr_clk.clkr,
2558 [GCC_TSC_ETU_CLK] = &gcc_tsc_etu_clk.clkr,
2559 [GCC_USB2_CLKREF_EN] = &gcc_usb2_clkref_en.clkr,
2560 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
2561 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
2562 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
2563 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr,
2564 [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,
2565 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
2566 [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
2567 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
2568 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
2569 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
2570 [GCC_USB3_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb3_prim_phy_pipe_clk_src.clkr,
2571 [GCC_ETH_100G_C2C_HM_APB_CLK] = &gcc_eth_100g_c2c_hm_apb_clk.clkr,
2572 [GCC_ETH_100G_FH_HM_APB_0_CLK] = &gcc_eth_100g_fh_hm_apb_0_clk.clkr,
2573 [GCC_ETH_100G_FH_HM_APB_1_CLK] = &gcc_eth_100g_fh_hm_apb_1_clk.clkr,
2574 [GCC_ETH_100G_FH_HM_APB_2_CLK] = &gcc_eth_100g_fh_hm_apb_2_clk.clkr,
2575 [GCC_ETH_DBG_C2C_HM_APB_CLK] = &gcc_eth_dbg_c2c_hm_apb_clk.clkr,
2576 [GCC_AGGRE_NOC_ECPRI_GSI_CLK] = &gcc_aggre_noc_ecpri_gsi_clk.clkr,
2577 [GCC_PCIE_0_PHY_AUX_CLK_SRC] = &gcc_pcie_0_phy_aux_clk_src.clkr,
2578 [GCC_PCIE_0_PIPE_CLK_SRC] = &gcc_pcie_0_pipe_clk_src.clkr,
2579 [GCC_GPLL1_OUT_EVEN] = &gcc_gpll1_out_even.clkr,
2580 [GCC_DDRSS_ECPRI_GSI_CLK] = &gcc_ddrss_ecpri_gsi_clk.clkr,
2581};
2582
2583static struct gdsc *gcc_qdu1000_gdscs[] = {
2584 [PCIE_0_GDSC] = &pcie_0_gdsc,
2585 [PCIE_0_PHY_GDSC] = &pcie_0_phy_gdsc,
2586 [USB30_PRIM_GDSC] = &usb30_prim_gdsc,
2587};
2588
2589static const struct qcom_reset_map gcc_qdu1000_resets[] = {
2590 [GCC_ECPRI_CC_BCR] = { 0x3e000 },
2591 [GCC_ECPRI_SS_BCR] = { 0x3a000 },
2592 [GCC_ETH_WRAPPER_BCR] = { 0x39000 },
2593 [GCC_PCIE_0_BCR] = { 0x9d000 },
2594 [GCC_PCIE_0_LINK_DOWN_BCR] = { 0x9e014 },
2595 [GCC_PCIE_0_NOCSR_COM_PHY_BCR] = { 0x9e020 },
2596 [GCC_PCIE_0_PHY_BCR] = { 0x7c000 },
2597 [GCC_PCIE_0_PHY_NOCSR_COM_PHY_BCR] = { 0x9e000 },
2598 [GCC_PCIE_PHY_CFG_AHB_BCR] = { 0x7f00c },
2599 [GCC_PCIE_PHY_COM_BCR] = { 0x7f010 },
2600 [GCC_PDM_BCR] = { 0x43000 },
2601 [GCC_QUPV3_WRAPPER_0_BCR] = { 0x27000 },
2602 [GCC_QUPV3_WRAPPER_1_BCR] = { 0x28000 },
2603 [GCC_QUSB2PHY_PRIM_BCR] = { 0x22000 },
2604 [GCC_QUSB2PHY_SEC_BCR] = { 0x22004 },
2605 [GCC_SDCC5_BCR] = { 0x3b000 },
2606 [GCC_TSC_BCR] = { 0x57000 },
2607 [GCC_USB30_PRIM_BCR] = { 0x49000 },
2608 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x60008 },
2609 [GCC_USB3_DP_PHY_SEC_BCR] = { 0x60014 },
2610 [GCC_USB3_PHY_PRIM_BCR] = { 0x60000 },
2611 [GCC_USB3_PHY_SEC_BCR] = { 0x6000c },
2612 [GCC_USB3PHY_PHY_PRIM_BCR] = { 0x60004 },
2613 [GCC_USB3PHY_PHY_SEC_BCR] = { 0x60010 },
2614 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x7a000 },
2615};
2616
2617static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
2618 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
2619 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
2620 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
2621 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
2622 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
2623 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
2624 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s6_clk_src),
2625 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s7_clk_src),
2626 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
2627 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
2628 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),
2629 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
2630 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
2631 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
2632 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src),
2633 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s7_clk_src),
2634};
2635
2636static const struct regmap_config gcc_qdu1000_regmap_config = {
2637 .reg_bits = 32,
2638 .reg_stride = 4,
2639 .val_bits = 32,
2640 .max_register = 0x1f41f0,
2641 .fast_io = true,
2642};
2643
2644static const struct qcom_cc_desc gcc_qdu1000_desc = {
2645 .config = &gcc_qdu1000_regmap_config,
2646 .clks = gcc_qdu1000_clocks,
2647 .num_clks = ARRAY_SIZE(gcc_qdu1000_clocks),
2648 .resets = gcc_qdu1000_resets,
2649 .num_resets = ARRAY_SIZE(gcc_qdu1000_resets),
2650 .gdscs = gcc_qdu1000_gdscs,
2651 .num_gdscs = ARRAY_SIZE(gcc_qdu1000_gdscs),
2652};
2653
2654static const struct of_device_id gcc_qdu1000_match_table[] = {
2655 { .compatible = "qcom,qdu1000-gcc" },
2656 { }
2657};
2658MODULE_DEVICE_TABLE(of, gcc_qdu1000_match_table);
2659
2660static int gcc_qdu1000_probe(struct platform_device *pdev)
2661{
2662 struct regmap *regmap;
2663 int ret;
2664
2665 regmap = qcom_cc_map(pdev, desc: &gcc_qdu1000_desc);
2666 if (IS_ERR(ptr: regmap))
2667 return PTR_ERR(ptr: regmap);
2668
2669 /* Update FORCE_MEM_CORE_ON for gcc_pcie_0_mstr_axi_clk */
2670 regmap_update_bits(map: regmap, reg: 0x9d024, BIT(14), BIT(14));
2671
2672 ret = qcom_cc_register_rcg_dfs(regmap, rcgs: gcc_dfs_clocks,
2673 ARRAY_SIZE(gcc_dfs_clocks));
2674 if (ret)
2675 return ret;
2676
2677 ret = qcom_cc_really_probe(pdev, desc: &gcc_qdu1000_desc, regmap);
2678 if (ret)
2679 return dev_err_probe(dev: &pdev->dev, err: ret, fmt: "Failed to register GCC clocks\n");
2680
2681 return ret;
2682}
2683
2684static struct platform_driver gcc_qdu1000_driver = {
2685 .probe = gcc_qdu1000_probe,
2686 .driver = {
2687 .name = "gcc-qdu1000",
2688 .of_match_table = gcc_qdu1000_match_table,
2689 },
2690};
2691
2692static int __init gcc_qdu1000_init(void)
2693{
2694 return platform_driver_register(&gcc_qdu1000_driver);
2695}
2696subsys_initcall(gcc_qdu1000_init);
2697
2698static void __exit gcc_qdu1000_exit(void)
2699{
2700 platform_driver_unregister(&gcc_qdu1000_driver);
2701}
2702module_exit(gcc_qdu1000_exit);
2703
2704MODULE_DESCRIPTION("QTI GCC QDU1000 Driver");
2705MODULE_LICENSE("GPL");
2706

source code of linux/drivers/clk/qcom/gcc-qdu1000.c