1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3 * Copyright (c) 2021-2022, 2024, Qualcomm Innovation Center, Inc. All rights reserved.
4 * Copyright (c) 2023, Linaro Limited
5 */
6
7 #include <linux/clk-provider.h>
8 #include <linux/module.h>
9 #include <linux/of.h>
10 #include <linux/platform_device.h>
11 #include <linux/regmap.h>
12
13 #include <dt-bindings/clock/qcom,sa8775p-gcc.h>
14
15 #include "clk-alpha-pll.h"
16 #include "clk-branch.h"
17 #include "clk-rcg.h"
18 #include "clk-regmap.h"
19 #include "clk-regmap-divider.h"
20 #include "clk-regmap-mux.h"
21 #include "clk-regmap-phy-mux.h"
22 #include "common.h"
23 #include "gdsc.h"
24 #include "reset.h"
25
26 /* Need to match the order of clocks in DT binding */
27 enum {
28 DT_BI_TCXO,
29 DT_SLEEP_CLK,
30 DT_UFS_PHY_RX_SYMBOL_0_CLK,
31 DT_UFS_PHY_RX_SYMBOL_1_CLK,
32 DT_UFS_PHY_TX_SYMBOL_0_CLK,
33 DT_UFS_CARD_RX_SYMBOL_0_CLK,
34 DT_UFS_CARD_RX_SYMBOL_1_CLK,
35 DT_UFS_CARD_TX_SYMBOL_0_CLK,
36 DT_USB3_PHY_WRAPPER_GCC_USB30_PRIM_PIPE_CLK,
37 DT_USB3_PHY_WRAPPER_GCC_USB30_SEC_PIPE_CLK,
38 DT_PCIE_0_PIPE_CLK,
39 DT_PCIE_1_PIPE_CLK,
40 DT_PCIE_PHY_AUX_CLK,
41 DT_RXC0_REF_CLK,
42 DT_RXC1_REF_CLK,
43 };
44
45 enum {
46 P_BI_TCXO,
47 P_GCC_GPLL0_OUT_EVEN,
48 P_GCC_GPLL0_OUT_MAIN,
49 P_GCC_GPLL1_OUT_MAIN,
50 P_GCC_GPLL4_OUT_MAIN,
51 P_GCC_GPLL5_OUT_MAIN,
52 P_GCC_GPLL7_OUT_MAIN,
53 P_GCC_GPLL9_OUT_MAIN,
54 P_PCIE_0_PIPE_CLK,
55 P_PCIE_1_PIPE_CLK,
56 P_PCIE_PHY_AUX_CLK,
57 P_RXC0_REF_CLK,
58 P_RXC1_REF_CLK,
59 P_SLEEP_CLK,
60 P_UFS_CARD_RX_SYMBOL_0_CLK,
61 P_UFS_CARD_RX_SYMBOL_1_CLK,
62 P_UFS_CARD_TX_SYMBOL_0_CLK,
63 P_UFS_PHY_RX_SYMBOL_0_CLK,
64 P_UFS_PHY_RX_SYMBOL_1_CLK,
65 P_UFS_PHY_TX_SYMBOL_0_CLK,
66 P_USB3_PHY_WRAPPER_GCC_USB30_PRIM_PIPE_CLK,
67 P_USB3_PHY_WRAPPER_GCC_USB30_SEC_PIPE_CLK,
68 };
69
70 static const struct clk_parent_data gcc_parent_data_tcxo = { .index = DT_BI_TCXO };
71
72 static struct clk_alpha_pll gcc_gpll0 = {
73 .offset = 0x0,
74 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
75 .clkr = {
76 .enable_reg = 0x4b028,
77 .enable_mask = BIT(0),
78 .hw.init = &(const struct clk_init_data){
79 .name = "gcc_gpll0",
80 .parent_data = &gcc_parent_data_tcxo,
81 .num_parents = 1,
82 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
83 },
84 },
85 };
86
87 static const struct clk_div_table post_div_table_gcc_gpll0_out_even[] = {
88 { 0x1, 2 },
89 { }
90 };
91
92 static struct clk_alpha_pll_postdiv gcc_gpll0_out_even = {
93 .offset = 0x0,
94 .post_div_shift = 10,
95 .post_div_table = post_div_table_gcc_gpll0_out_even,
96 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
97 .width = 4,
98 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
99 .clkr.hw.init = &(const struct clk_init_data){
100 .name = "gcc_gpll0_out_even",
101 .parent_hws = (const struct clk_hw*[]){
102 &gcc_gpll0.clkr.hw,
103 },
104 .num_parents = 1,
105 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
106 },
107 };
108
109 static struct clk_alpha_pll gcc_gpll1 = {
110 .offset = 0x1000,
111 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
112 .clkr = {
113 .enable_reg = 0x4b028,
114 .enable_mask = BIT(1),
115 .hw.init = &(const struct clk_init_data){
116 .name = "gcc_gpll1",
117 .parent_data = &gcc_parent_data_tcxo,
118 .num_parents = 1,
119 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
120 },
121 },
122 };
123
124 static struct clk_alpha_pll gcc_gpll4 = {
125 .offset = 0x4000,
126 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
127 .clkr = {
128 .enable_reg = 0x4b028,
129 .enable_mask = BIT(4),
130 .hw.init = &(const struct clk_init_data){
131 .name = "gcc_gpll4",
132 .parent_data = &gcc_parent_data_tcxo,
133 .num_parents = 1,
134 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
135 },
136 },
137 };
138
139 static struct clk_alpha_pll gcc_gpll5 = {
140 .offset = 0x5000,
141 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
142 .clkr = {
143 .enable_reg = 0x4b028,
144 .enable_mask = BIT(5),
145 .hw.init = &(const struct clk_init_data){
146 .name = "gcc_gpll5",
147 .parent_data = &gcc_parent_data_tcxo,
148 .num_parents = 1,
149 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
150 },
151 },
152 };
153
154 static struct clk_alpha_pll gcc_gpll7 = {
155 .offset = 0x7000,
156 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
157 .clkr = {
158 .enable_reg = 0x4b028,
159 .enable_mask = BIT(7),
160 .hw.init = &(const struct clk_init_data){
161 .name = "gcc_gpll7",
162 .parent_data = &gcc_parent_data_tcxo,
163 .num_parents = 1,
164 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
165 },
166 },
167 };
168
169 static struct clk_alpha_pll gcc_gpll9 = {
170 .offset = 0x9000,
171 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
172 .clkr = {
173 .enable_reg = 0x4b028,
174 .enable_mask = BIT(9),
175 .hw.init = &(const struct clk_init_data){
176 .name = "gcc_gpll9",
177 .parent_data = &gcc_parent_data_tcxo,
178 .num_parents = 1,
179 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
180 },
181 },
182 };
183
184 static const struct parent_map gcc_parent_map_0[] = {
185 { P_BI_TCXO, 0 },
186 { P_GCC_GPLL0_OUT_MAIN, 1 },
187 { P_GCC_GPLL0_OUT_EVEN, 6 },
188 };
189
190 static const struct clk_parent_data gcc_parent_data_0[] = {
191 { .index = DT_BI_TCXO },
192 { .hw = &gcc_gpll0.clkr.hw },
193 { .hw = &gcc_gpll0_out_even.clkr.hw },
194 };
195
196 static const struct parent_map gcc_parent_map_1[] = {
197 { P_BI_TCXO, 0 },
198 { P_GCC_GPLL0_OUT_MAIN, 1 },
199 { P_GCC_GPLL4_OUT_MAIN, 5 },
200 { P_GCC_GPLL0_OUT_EVEN, 6 },
201 };
202
203 static const struct clk_parent_data gcc_parent_data_1[] = {
204 { .index = DT_BI_TCXO },
205 { .hw = &gcc_gpll0.clkr.hw },
206 { .hw = &gcc_gpll4.clkr.hw },
207 { .hw = &gcc_gpll0_out_even.clkr.hw },
208 };
209
210 static const struct parent_map gcc_parent_map_2[] = {
211 { P_BI_TCXO, 0 },
212 { P_GCC_GPLL0_OUT_MAIN, 1 },
213 { P_SLEEP_CLK, 5 },
214 { P_GCC_GPLL0_OUT_EVEN, 6 },
215 };
216
217 static const struct clk_parent_data gcc_parent_data_2[] = {
218 { .index = DT_BI_TCXO },
219 { .hw = &gcc_gpll0.clkr.hw },
220 { .index = DT_SLEEP_CLK },
221 { .hw = &gcc_gpll0_out_even.clkr.hw },
222 };
223
224 static const struct parent_map gcc_parent_map_3[] = {
225 { P_BI_TCXO, 0 },
226 { P_SLEEP_CLK, 5 },
227 };
228
229 static const struct clk_parent_data gcc_parent_data_3[] = {
230 { .index = DT_BI_TCXO },
231 { .index = DT_SLEEP_CLK },
232 };
233
234 static const struct parent_map gcc_parent_map_4[] = {
235 { P_BI_TCXO, 0 },
236 { P_GCC_GPLL0_OUT_MAIN, 1 },
237 { P_GCC_GPLL1_OUT_MAIN, 4 },
238 { P_GCC_GPLL4_OUT_MAIN, 5 },
239 { P_GCC_GPLL0_OUT_EVEN, 6 },
240 };
241
242 static const struct clk_parent_data gcc_parent_data_4[] = {
243 { .index = DT_BI_TCXO },
244 { .hw = &gcc_gpll0.clkr.hw },
245 { .hw = &gcc_gpll1.clkr.hw },
246 { .hw = &gcc_gpll4.clkr.hw },
247 { .hw = &gcc_gpll0_out_even.clkr.hw },
248 };
249
250 static const struct parent_map gcc_parent_map_5[] = {
251 { P_BI_TCXO, 0 },
252 };
253
254 static const struct clk_parent_data gcc_parent_data_5[] = {
255 { .index = DT_BI_TCXO },
256 };
257
258 static const struct parent_map gcc_parent_map_6[] = {
259 { P_BI_TCXO, 0 },
260 { P_GCC_GPLL7_OUT_MAIN, 2 },
261 { P_GCC_GPLL4_OUT_MAIN, 5 },
262 { P_GCC_GPLL0_OUT_EVEN, 6 },
263 };
264
265 static const struct clk_parent_data gcc_parent_data_6[] = {
266 { .index = DT_BI_TCXO },
267 { .hw = &gcc_gpll7.clkr.hw },
268 { .hw = &gcc_gpll4.clkr.hw },
269 { .hw = &gcc_gpll0_out_even.clkr.hw },
270 };
271
272 static const struct parent_map gcc_parent_map_7[] = {
273 { P_BI_TCXO, 0 },
274 { P_GCC_GPLL7_OUT_MAIN, 2 },
275 { P_RXC0_REF_CLK, 3 },
276 { P_GCC_GPLL0_OUT_EVEN, 6 },
277 };
278
279 static const struct clk_parent_data gcc_parent_data_7[] = {
280 { .index = DT_BI_TCXO },
281 { .hw = &gcc_gpll7.clkr.hw },
282 { .index = DT_RXC0_REF_CLK },
283 { .hw = &gcc_gpll0_out_even.clkr.hw },
284 };
285
286 static const struct parent_map gcc_parent_map_8[] = {
287 { P_BI_TCXO, 0 },
288 { P_GCC_GPLL7_OUT_MAIN, 2 },
289 { P_RXC1_REF_CLK, 3 },
290 { P_GCC_GPLL0_OUT_EVEN, 6 },
291 };
292
293 static const struct clk_parent_data gcc_parent_data_8[] = {
294 { .index = DT_BI_TCXO },
295 { .hw = &gcc_gpll7.clkr.hw },
296 { .index = DT_RXC1_REF_CLK },
297 { .hw = &gcc_gpll0_out_even.clkr.hw },
298 };
299
300 static const struct parent_map gcc_parent_map_9[] = {
301 { P_PCIE_PHY_AUX_CLK, 1 },
302 { P_BI_TCXO, 2 },
303 };
304
305 static const struct clk_parent_data gcc_parent_data_9[] = {
306 { .index = DT_PCIE_PHY_AUX_CLK },
307 { .index = DT_BI_TCXO },
308 };
309
310 static const struct parent_map gcc_parent_map_11[] = {
311 { P_PCIE_PHY_AUX_CLK, 1 },
312 { P_BI_TCXO, 2 },
313 };
314
315 static const struct clk_parent_data gcc_parent_data_11[] = {
316 { .index = DT_PCIE_PHY_AUX_CLK },
317 { .index = DT_BI_TCXO },
318 };
319
320 static const struct parent_map gcc_parent_map_13[] = {
321 { P_BI_TCXO, 0 },
322 { P_GCC_GPLL0_OUT_MAIN, 1 },
323 { P_GCC_GPLL9_OUT_MAIN, 2 },
324 { P_GCC_GPLL4_OUT_MAIN, 5 },
325 { P_GCC_GPLL0_OUT_EVEN, 6 },
326 };
327
328 static const struct clk_parent_data gcc_parent_data_13[] = {
329 { .index = DT_BI_TCXO },
330 { .hw = &gcc_gpll0.clkr.hw },
331 { .hw = &gcc_gpll9.clkr.hw },
332 { .hw = &gcc_gpll4.clkr.hw },
333 { .hw = &gcc_gpll0_out_even.clkr.hw },
334 };
335
336 static const struct parent_map gcc_parent_map_14[] = {
337 { P_BI_TCXO, 0 },
338 { P_GCC_GPLL0_OUT_MAIN, 1 },
339 };
340
341 static const struct clk_parent_data gcc_parent_data_14[] = {
342 { .index = DT_BI_TCXO },
343 { .hw = &gcc_gpll0.clkr.hw },
344 };
345
346 static const struct parent_map gcc_parent_map_15[] = {
347 { P_BI_TCXO, 0 },
348 { P_GCC_GPLL7_OUT_MAIN, 2 },
349 { P_GCC_GPLL5_OUT_MAIN, 3 },
350 { P_GCC_GPLL4_OUT_MAIN, 5 },
351 { P_GCC_GPLL0_OUT_EVEN, 6 },
352 };
353
354 static const struct clk_parent_data gcc_parent_data_15[] = {
355 { .index = DT_BI_TCXO },
356 { .hw = &gcc_gpll7.clkr.hw },
357 { .hw = &gcc_gpll5.clkr.hw },
358 { .hw = &gcc_gpll4.clkr.hw },
359 { .hw = &gcc_gpll0_out_even.clkr.hw },
360 };
361
362 static const struct parent_map gcc_parent_map_16[] = {
363 { P_UFS_CARD_RX_SYMBOL_0_CLK, 0 },
364 { P_BI_TCXO, 2 },
365 };
366
367 static const struct clk_parent_data gcc_parent_data_16[] = {
368 { .index = DT_UFS_CARD_RX_SYMBOL_0_CLK },
369 { .index = DT_BI_TCXO },
370 };
371
372 static const struct parent_map gcc_parent_map_17[] = {
373 { P_UFS_CARD_RX_SYMBOL_1_CLK, 0 },
374 { P_BI_TCXO, 2 },
375 };
376
377 static const struct clk_parent_data gcc_parent_data_17[] = {
378 { .index = DT_UFS_CARD_RX_SYMBOL_1_CLK },
379 { .index = DT_BI_TCXO },
380 };
381
382 static const struct parent_map gcc_parent_map_18[] = {
383 { P_UFS_CARD_TX_SYMBOL_0_CLK, 0 },
384 { P_BI_TCXO, 2 },
385 };
386
387 static const struct clk_parent_data gcc_parent_data_18[] = {
388 { .index = DT_UFS_CARD_TX_SYMBOL_0_CLK },
389 { .index = DT_BI_TCXO },
390 };
391
392 static const struct parent_map gcc_parent_map_19[] = {
393 { P_UFS_PHY_RX_SYMBOL_0_CLK, 0 },
394 { P_BI_TCXO, 2 },
395 };
396
397 static const struct clk_parent_data gcc_parent_data_19[] = {
398 { .index = DT_UFS_PHY_RX_SYMBOL_0_CLK },
399 { .index = DT_BI_TCXO },
400 };
401
402 static const struct parent_map gcc_parent_map_20[] = {
403 { P_UFS_PHY_RX_SYMBOL_1_CLK, 0 },
404 { P_BI_TCXO, 2 },
405 };
406
407 static const struct clk_parent_data gcc_parent_data_20[] = {
408 { .index = DT_UFS_PHY_RX_SYMBOL_1_CLK },
409 { .index = DT_BI_TCXO },
410 };
411
412 static const struct parent_map gcc_parent_map_21[] = {
413 { P_UFS_PHY_TX_SYMBOL_0_CLK, 0 },
414 { P_BI_TCXO, 2 },
415 };
416
417 static const struct clk_parent_data gcc_parent_data_21[] = {
418 { .index = DT_UFS_PHY_TX_SYMBOL_0_CLK },
419 { .index = DT_BI_TCXO },
420 };
421
422 static const struct parent_map gcc_parent_map_22[] = {
423 { P_USB3_PHY_WRAPPER_GCC_USB30_PRIM_PIPE_CLK, 0 },
424 { P_BI_TCXO, 2 },
425 };
426
427 static const struct clk_parent_data gcc_parent_data_22[] = {
428 { .index = DT_USB3_PHY_WRAPPER_GCC_USB30_PRIM_PIPE_CLK },
429 { .index = DT_BI_TCXO },
430 };
431
432 static const struct parent_map gcc_parent_map_23[] = {
433 { P_USB3_PHY_WRAPPER_GCC_USB30_SEC_PIPE_CLK, 0 },
434 { P_BI_TCXO, 2 },
435 };
436
437 static const struct clk_parent_data gcc_parent_data_23[] = {
438 { .index = DT_USB3_PHY_WRAPPER_GCC_USB30_SEC_PIPE_CLK },
439 { .index = DT_BI_TCXO },
440 };
441
442 static struct clk_regmap_mux gcc_pcie_0_phy_aux_clk_src = {
443 .reg = 0xa9074,
444 .shift = 0,
445 .width = 2,
446 .parent_map = gcc_parent_map_9,
447 .clkr = {
448 .hw.init = &(const struct clk_init_data){
449 .name = "gcc_pcie_0_phy_aux_clk_src",
450 .parent_data = gcc_parent_data_9,
451 .num_parents = ARRAY_SIZE(gcc_parent_data_9),
452 .ops = &clk_regmap_mux_closest_ops,
453 },
454 },
455 };
456
457 static struct clk_regmap_phy_mux gcc_pcie_0_pipe_clk_src = {
458 .reg = 0xa906c,
459 .clkr = {
460 .hw.init = &(const struct clk_init_data){
461 .name = "gcc_pcie_0_pipe_clk_src",
462 .parent_data = &(const struct clk_parent_data){
463 .index = DT_PCIE_0_PIPE_CLK,
464 },
465 .num_parents = 1,
466 .ops = &clk_regmap_phy_mux_ops,
467 },
468 },
469 };
470
471 static struct clk_regmap_mux gcc_pcie_1_phy_aux_clk_src = {
472 .reg = 0x77074,
473 .shift = 0,
474 .width = 2,
475 .parent_map = gcc_parent_map_11,
476 .clkr = {
477 .hw.init = &(const struct clk_init_data){
478 .name = "gcc_pcie_1_phy_aux_clk_src",
479 .parent_data = gcc_parent_data_11,
480 .num_parents = ARRAY_SIZE(gcc_parent_data_11),
481 .ops = &clk_regmap_mux_closest_ops,
482 },
483 },
484 };
485
486 static struct clk_regmap_phy_mux gcc_pcie_1_pipe_clk_src = {
487 .reg = 0x7706c,
488 .clkr = {
489 .hw.init = &(const struct clk_init_data){
490 .name = "gcc_pcie_1_pipe_clk_src",
491 .parent_data = &(const struct clk_parent_data) {
492 .index = DT_PCIE_1_PIPE_CLK,
493 },
494 .num_parents = 1,
495 .ops = &clk_regmap_phy_mux_ops,
496 },
497 },
498 };
499
500 static struct clk_regmap_mux gcc_ufs_card_rx_symbol_0_clk_src = {
501 .reg = 0x81060,
502 .shift = 0,
503 .width = 2,
504 .parent_map = gcc_parent_map_16,
505 .clkr = {
506 .hw.init = &(const struct clk_init_data){
507 .name = "gcc_ufs_card_rx_symbol_0_clk_src",
508 .parent_data = gcc_parent_data_16,
509 .num_parents = ARRAY_SIZE(gcc_parent_data_16),
510 .ops = &clk_regmap_mux_closest_ops,
511 },
512 },
513 };
514
515 static struct clk_regmap_mux gcc_ufs_card_rx_symbol_1_clk_src = {
516 .reg = 0x810d0,
517 .shift = 0,
518 .width = 2,
519 .parent_map = gcc_parent_map_17,
520 .clkr = {
521 .hw.init = &(const struct clk_init_data){
522 .name = "gcc_ufs_card_rx_symbol_1_clk_src",
523 .parent_data = gcc_parent_data_17,
524 .num_parents = ARRAY_SIZE(gcc_parent_data_17),
525 .ops = &clk_regmap_mux_closest_ops,
526 },
527 },
528 };
529
530 static struct clk_regmap_mux gcc_ufs_card_tx_symbol_0_clk_src = {
531 .reg = 0x81050,
532 .shift = 0,
533 .width = 2,
534 .parent_map = gcc_parent_map_18,
535 .clkr = {
536 .hw.init = &(const struct clk_init_data){
537 .name = "gcc_ufs_card_tx_symbol_0_clk_src",
538 .parent_data = gcc_parent_data_18,
539 .num_parents = ARRAY_SIZE(gcc_parent_data_18),
540 .ops = &clk_regmap_mux_closest_ops,
541 },
542 },
543 };
544
545 static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_0_clk_src = {
546 .reg = 0x83060,
547 .shift = 0,
548 .width = 2,
549 .parent_map = gcc_parent_map_19,
550 .clkr = {
551 .hw.init = &(const struct clk_init_data){
552 .name = "gcc_ufs_phy_rx_symbol_0_clk_src",
553 .parent_data = gcc_parent_data_19,
554 .num_parents = ARRAY_SIZE(gcc_parent_data_19),
555 .ops = &clk_regmap_mux_closest_ops,
556 },
557 },
558 };
559
560 static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_1_clk_src = {
561 .reg = 0x830d0,
562 .shift = 0,
563 .width = 2,
564 .parent_map = gcc_parent_map_20,
565 .clkr = {
566 .hw.init = &(const struct clk_init_data){
567 .name = "gcc_ufs_phy_rx_symbol_1_clk_src",
568 .parent_data = gcc_parent_data_20,
569 .num_parents = ARRAY_SIZE(gcc_parent_data_20),
570 .ops = &clk_regmap_mux_closest_ops,
571 },
572 },
573 };
574
575 static struct clk_regmap_mux gcc_ufs_phy_tx_symbol_0_clk_src = {
576 .reg = 0x83050,
577 .shift = 0,
578 .width = 2,
579 .parent_map = gcc_parent_map_21,
580 .clkr = {
581 .hw.init = &(const struct clk_init_data){
582 .name = "gcc_ufs_phy_tx_symbol_0_clk_src",
583 .parent_data = gcc_parent_data_21,
584 .num_parents = ARRAY_SIZE(gcc_parent_data_21),
585 .ops = &clk_regmap_mux_closest_ops,
586 },
587 },
588 };
589
590 static struct clk_regmap_mux gcc_usb3_prim_phy_pipe_clk_src = {
591 .reg = 0x1b068,
592 .shift = 0,
593 .width = 2,
594 .parent_map = gcc_parent_map_22,
595 .clkr = {
596 .hw.init = &(const struct clk_init_data){
597 .name = "gcc_usb3_prim_phy_pipe_clk_src",
598 .parent_data = gcc_parent_data_22,
599 .num_parents = ARRAY_SIZE(gcc_parent_data_22),
600 .ops = &clk_regmap_mux_closest_ops,
601 },
602 },
603 };
604
605 static struct clk_regmap_mux gcc_usb3_sec_phy_pipe_clk_src = {
606 .reg = 0x2f068,
607 .shift = 0,
608 .width = 2,
609 .parent_map = gcc_parent_map_23,
610 .clkr = {
611 .hw.init = &(const struct clk_init_data){
612 .name = "gcc_usb3_sec_phy_pipe_clk_src",
613 .parent_data = gcc_parent_data_23,
614 .num_parents = ARRAY_SIZE(gcc_parent_data_23),
615 .ops = &clk_regmap_mux_closest_ops,
616 },
617 },
618 };
619
620 static const struct freq_tbl ftbl_gcc_emac0_phy_aux_clk_src[] = {
621 F(19200000, P_BI_TCXO, 1, 0, 0),
622 { }
623 };
624
625 static struct clk_rcg2 gcc_emac0_phy_aux_clk_src = {
626 .cmd_rcgr = 0xb6028,
627 .mnd_width = 0,
628 .hid_width = 5,
629 .parent_map = gcc_parent_map_3,
630 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
631 .clkr.hw.init = &(const struct clk_init_data){
632 .name = "gcc_emac0_phy_aux_clk_src",
633 .parent_data = gcc_parent_data_3,
634 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
635 .ops = &clk_rcg2_shared_ops,
636 },
637 };
638
639 static const struct freq_tbl ftbl_gcc_emac0_ptp_clk_src[] = {
640 F(125000000, P_GCC_GPLL7_OUT_MAIN, 8, 0, 0),
641 F(230400000, P_GCC_GPLL4_OUT_MAIN, 3.5, 0, 0),
642 { }
643 };
644
645 static struct clk_rcg2 gcc_emac0_ptp_clk_src = {
646 .cmd_rcgr = 0xb6060,
647 .mnd_width = 16,
648 .hid_width = 5,
649 .parent_map = gcc_parent_map_6,
650 .freq_tbl = ftbl_gcc_emac0_ptp_clk_src,
651 .clkr.hw.init = &(const struct clk_init_data){
652 .name = "gcc_emac0_ptp_clk_src",
653 .parent_data = gcc_parent_data_6,
654 .num_parents = ARRAY_SIZE(gcc_parent_data_6),
655 .ops = &clk_rcg2_shared_ops,
656 },
657 };
658
659 static const struct freq_tbl ftbl_gcc_emac0_rgmii_clk_src[] = {
660 F(125000000, P_GCC_GPLL7_OUT_MAIN, 8, 0, 0),
661 F(250000000, P_GCC_GPLL7_OUT_MAIN, 4, 0, 0),
662 { }
663 };
664
665 static struct clk_rcg2 gcc_emac0_rgmii_clk_src = {
666 .cmd_rcgr = 0xb6048,
667 .mnd_width = 16,
668 .hid_width = 5,
669 .parent_map = gcc_parent_map_7,
670 .freq_tbl = ftbl_gcc_emac0_rgmii_clk_src,
671 .clkr.hw.init = &(const struct clk_init_data){
672 .name = "gcc_emac0_rgmii_clk_src",
673 .parent_data = gcc_parent_data_7,
674 .num_parents = ARRAY_SIZE(gcc_parent_data_7),
675 .ops = &clk_rcg2_shared_ops,
676 },
677 };
678
679 static struct clk_rcg2 gcc_emac1_phy_aux_clk_src = {
680 .cmd_rcgr = 0xb4028,
681 .mnd_width = 0,
682 .hid_width = 5,
683 .parent_map = gcc_parent_map_3,
684 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
685 .clkr.hw.init = &(const struct clk_init_data){
686 .name = "gcc_emac1_phy_aux_clk_src",
687 .parent_data = gcc_parent_data_3,
688 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
689 .ops = &clk_rcg2_shared_ops,
690 },
691 };
692
693 static struct clk_rcg2 gcc_emac1_ptp_clk_src = {
694 .cmd_rcgr = 0xb4060,
695 .mnd_width = 16,
696 .hid_width = 5,
697 .parent_map = gcc_parent_map_6,
698 .freq_tbl = ftbl_gcc_emac0_ptp_clk_src,
699 .clkr.hw.init = &(const struct clk_init_data){
700 .name = "gcc_emac1_ptp_clk_src",
701 .parent_data = gcc_parent_data_6,
702 .num_parents = ARRAY_SIZE(gcc_parent_data_6),
703 .ops = &clk_rcg2_shared_ops,
704 },
705 };
706
707 static struct clk_rcg2 gcc_emac1_rgmii_clk_src = {
708 .cmd_rcgr = 0xb4048,
709 .mnd_width = 16,
710 .hid_width = 5,
711 .parent_map = gcc_parent_map_8,
712 .freq_tbl = ftbl_gcc_emac0_rgmii_clk_src,
713 .clkr.hw.init = &(const struct clk_init_data){
714 .name = "gcc_emac1_rgmii_clk_src",
715 .parent_data = gcc_parent_data_8,
716 .num_parents = ARRAY_SIZE(gcc_parent_data_8),
717 .ops = &clk_rcg2_shared_ops,
718 },
719 };
720
721 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
722 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
723 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
724 { }
725 };
726
727 static struct clk_rcg2 gcc_gp1_clk_src = {
728 .cmd_rcgr = 0x70004,
729 .mnd_width = 16,
730 .hid_width = 5,
731 .parent_map = gcc_parent_map_2,
732 .freq_tbl = ftbl_gcc_gp1_clk_src,
733 .clkr.hw.init = &(const struct clk_init_data){
734 .name = "gcc_gp1_clk_src",
735 .parent_data = gcc_parent_data_2,
736 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
737 .ops = &clk_rcg2_shared_ops,
738 },
739 };
740
741 static struct clk_rcg2 gcc_gp2_clk_src = {
742 .cmd_rcgr = 0x71004,
743 .mnd_width = 16,
744 .hid_width = 5,
745 .parent_map = gcc_parent_map_2,
746 .freq_tbl = ftbl_gcc_gp1_clk_src,
747 .clkr.hw.init = &(const struct clk_init_data){
748 .name = "gcc_gp2_clk_src",
749 .parent_data = gcc_parent_data_2,
750 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
751 .ops = &clk_rcg2_shared_ops,
752 },
753 };
754
755 static struct clk_rcg2 gcc_gp3_clk_src = {
756 .cmd_rcgr = 0x62004,
757 .mnd_width = 16,
758 .hid_width = 5,
759 .parent_map = gcc_parent_map_2,
760 .freq_tbl = ftbl_gcc_gp1_clk_src,
761 .clkr.hw.init = &(const struct clk_init_data){
762 .name = "gcc_gp3_clk_src",
763 .parent_data = gcc_parent_data_2,
764 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
765 .ops = &clk_rcg2_shared_ops,
766 },
767 };
768
769 static struct clk_rcg2 gcc_gp4_clk_src = {
770 .cmd_rcgr = 0x1e004,
771 .mnd_width = 16,
772 .hid_width = 5,
773 .parent_map = gcc_parent_map_2,
774 .freq_tbl = ftbl_gcc_gp1_clk_src,
775 .clkr.hw.init = &(const struct clk_init_data){
776 .name = "gcc_gp4_clk_src",
777 .parent_data = gcc_parent_data_2,
778 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
779 .ops = &clk_rcg2_shared_ops,
780 },
781 };
782
783 static struct clk_rcg2 gcc_gp5_clk_src = {
784 .cmd_rcgr = 0x1f004,
785 .mnd_width = 16,
786 .hid_width = 5,
787 .parent_map = gcc_parent_map_2,
788 .freq_tbl = ftbl_gcc_gp1_clk_src,
789 .clkr.hw.init = &(const struct clk_init_data){
790 .name = "gcc_gp5_clk_src",
791 .parent_data = gcc_parent_data_2,
792 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
793 .ops = &clk_rcg2_shared_ops,
794 },
795 };
796
797 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
798 .cmd_rcgr = 0xa9078,
799 .mnd_width = 16,
800 .hid_width = 5,
801 .parent_map = gcc_parent_map_3,
802 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
803 .clkr.hw.init = &(const struct clk_init_data){
804 .name = "gcc_pcie_0_aux_clk_src",
805 .parent_data = gcc_parent_data_3,
806 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
807 .ops = &clk_rcg2_shared_ops,
808 },
809 };
810
811 static const struct freq_tbl ftbl_gcc_pcie_0_phy_rchng_clk_src[] = {
812 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
813 { }
814 };
815
816 static struct clk_rcg2 gcc_pcie_0_phy_rchng_clk_src = {
817 .cmd_rcgr = 0xa9054,
818 .mnd_width = 0,
819 .hid_width = 5,
820 .parent_map = gcc_parent_map_0,
821 .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
822 .clkr.hw.init = &(const struct clk_init_data){
823 .name = "gcc_pcie_0_phy_rchng_clk_src",
824 .parent_data = gcc_parent_data_0,
825 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
826 .ops = &clk_rcg2_shared_ops,
827 },
828 };
829
830 static struct clk_rcg2 gcc_pcie_1_aux_clk_src = {
831 .cmd_rcgr = 0x77078,
832 .mnd_width = 16,
833 .hid_width = 5,
834 .parent_map = gcc_parent_map_3,
835 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
836 .clkr.hw.init = &(const struct clk_init_data){
837 .name = "gcc_pcie_1_aux_clk_src",
838 .parent_data = gcc_parent_data_3,
839 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
840 .ops = &clk_rcg2_shared_ops,
841 },
842 };
843
844 static struct clk_rcg2 gcc_pcie_1_phy_rchng_clk_src = {
845 .cmd_rcgr = 0x77054,
846 .mnd_width = 0,
847 .hid_width = 5,
848 .parent_map = gcc_parent_map_0,
849 .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
850 .clkr.hw.init = &(const struct clk_init_data){
851 .name = "gcc_pcie_1_phy_rchng_clk_src",
852 .parent_data = gcc_parent_data_0,
853 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
854 .ops = &clk_rcg2_shared_ops,
855 },
856 };
857
858 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
859 F(60000000, P_GCC_GPLL0_OUT_MAIN, 10, 0, 0),
860 { }
861 };
862
863 static struct clk_rcg2 gcc_pdm2_clk_src = {
864 .cmd_rcgr = 0x3f010,
865 .mnd_width = 0,
866 .hid_width = 5,
867 .parent_map = gcc_parent_map_0,
868 .freq_tbl = ftbl_gcc_pdm2_clk_src,
869 .clkr.hw.init = &(const struct clk_init_data){
870 .name = "gcc_pdm2_clk_src",
871 .parent_data = gcc_parent_data_0,
872 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
873 .ops = &clk_rcg2_shared_ops,
874 },
875 };
876
877 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
878 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
879 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
880 F(19200000, P_BI_TCXO, 1, 0, 0),
881 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
882 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
883 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
884 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
885 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
886 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
887 F(120000000, P_GCC_GPLL0_OUT_MAIN, 5, 0, 0),
888 { }
889 };
890
891 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
892 .name = "gcc_qupv3_wrap0_s0_clk_src",
893 .parent_data = gcc_parent_data_0,
894 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
895 .ops = &clk_rcg2_shared_ops,
896 };
897
898 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
899 .cmd_rcgr = 0x23154,
900 .mnd_width = 16,
901 .hid_width = 5,
902 .parent_map = gcc_parent_map_0,
903 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
904 .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
905 };
906
907 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
908 .name = "gcc_qupv3_wrap0_s1_clk_src",
909 .parent_data = gcc_parent_data_0,
910 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
911 .ops = &clk_rcg2_shared_ops,
912 };
913
914 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
915 .cmd_rcgr = 0x23288,
916 .mnd_width = 16,
917 .hid_width = 5,
918 .parent_map = gcc_parent_map_0,
919 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
920 .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
921 };
922
923 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s2_clk_src[] = {
924 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
925 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
926 F(19200000, P_BI_TCXO, 1, 0, 0),
927 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
928 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
929 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
930 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
931 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
932 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
933 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
934 { }
935 };
936
937 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
938 .name = "gcc_qupv3_wrap0_s2_clk_src",
939 .parent_data = gcc_parent_data_0,
940 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
941 .ops = &clk_rcg2_shared_ops,
942 };
943
944 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
945 .cmd_rcgr = 0x233bc,
946 .mnd_width = 16,
947 .hid_width = 5,
948 .parent_map = gcc_parent_map_0,
949 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
950 .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
951 };
952
953 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
954 .name = "gcc_qupv3_wrap0_s3_clk_src",
955 .parent_data = gcc_parent_data_0,
956 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
957 .ops = &clk_rcg2_shared_ops,
958 };
959
960 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
961 .cmd_rcgr = 0x234f0,
962 .mnd_width = 16,
963 .hid_width = 5,
964 .parent_map = gcc_parent_map_0,
965 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
966 .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
967 };
968
969 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
970 .name = "gcc_qupv3_wrap0_s4_clk_src",
971 .parent_data = gcc_parent_data_1,
972 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
973 .ops = &clk_rcg2_shared_ops,
974 };
975
976 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
977 .cmd_rcgr = 0x23624,
978 .mnd_width = 16,
979 .hid_width = 5,
980 .parent_map = gcc_parent_map_1,
981 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
982 .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
983 };
984
985 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
986 .name = "gcc_qupv3_wrap0_s5_clk_src",
987 .parent_data = gcc_parent_data_0,
988 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
989 .ops = &clk_rcg2_shared_ops,
990 };
991
992 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
993 .cmd_rcgr = 0x23758,
994 .mnd_width = 16,
995 .hid_width = 5,
996 .parent_map = gcc_parent_map_0,
997 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
998 .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
999 };
1000
1001 static struct clk_init_data gcc_qupv3_wrap0_s6_clk_src_init = {
1002 .name = "gcc_qupv3_wrap0_s6_clk_src",
1003 .parent_data = gcc_parent_data_0,
1004 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1005 .ops = &clk_rcg2_shared_ops,
1006 };
1007
1008 static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
1009 .cmd_rcgr = 0x2388c,
1010 .mnd_width = 16,
1011 .hid_width = 5,
1012 .parent_map = gcc_parent_map_0,
1013 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
1014 .clkr.hw.init = &gcc_qupv3_wrap0_s6_clk_src_init,
1015 };
1016
1017 static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
1018 .name = "gcc_qupv3_wrap1_s0_clk_src",
1019 .parent_data = gcc_parent_data_0,
1020 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1021 .ops = &clk_rcg2_shared_ops,
1022 };
1023
1024 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
1025 .cmd_rcgr = 0x24154,
1026 .mnd_width = 16,
1027 .hid_width = 5,
1028 .parent_map = gcc_parent_map_0,
1029 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1030 .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
1031 };
1032
1033 static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
1034 .name = "gcc_qupv3_wrap1_s1_clk_src",
1035 .parent_data = gcc_parent_data_0,
1036 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1037 .ops = &clk_rcg2_shared_ops,
1038 };
1039
1040 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
1041 .cmd_rcgr = 0x24288,
1042 .mnd_width = 16,
1043 .hid_width = 5,
1044 .parent_map = gcc_parent_map_0,
1045 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1046 .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
1047 };
1048
1049 static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {
1050 .name = "gcc_qupv3_wrap1_s2_clk_src",
1051 .parent_data = gcc_parent_data_0,
1052 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1053 .ops = &clk_rcg2_shared_ops,
1054 };
1055
1056 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
1057 .cmd_rcgr = 0x243bc,
1058 .mnd_width = 16,
1059 .hid_width = 5,
1060 .parent_map = gcc_parent_map_0,
1061 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
1062 .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,
1063 };
1064
1065 static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
1066 .name = "gcc_qupv3_wrap1_s3_clk_src",
1067 .parent_data = gcc_parent_data_0,
1068 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1069 .ops = &clk_rcg2_shared_ops,
1070 };
1071
1072 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
1073 .cmd_rcgr = 0x244f0,
1074 .mnd_width = 16,
1075 .hid_width = 5,
1076 .parent_map = gcc_parent_map_0,
1077 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
1078 .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
1079 };
1080
1081 static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
1082 .name = "gcc_qupv3_wrap1_s4_clk_src",
1083 .parent_data = gcc_parent_data_1,
1084 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1085 .ops = &clk_rcg2_shared_ops,
1086 };
1087
1088 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
1089 .cmd_rcgr = 0x24624,
1090 .mnd_width = 16,
1091 .hid_width = 5,
1092 .parent_map = gcc_parent_map_1,
1093 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
1094 .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
1095 };
1096
1097 static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
1098 .name = "gcc_qupv3_wrap1_s5_clk_src",
1099 .parent_data = gcc_parent_data_0,
1100 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1101 .ops = &clk_rcg2_shared_ops,
1102 };
1103
1104 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
1105 .cmd_rcgr = 0x24758,
1106 .mnd_width = 16,
1107 .hid_width = 5,
1108 .parent_map = gcc_parent_map_0,
1109 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
1110 .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
1111 };
1112
1113 static struct clk_init_data gcc_qupv3_wrap1_s6_clk_src_init = {
1114 .name = "gcc_qupv3_wrap1_s6_clk_src",
1115 .parent_data = gcc_parent_data_0,
1116 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1117 .ops = &clk_rcg2_shared_ops,
1118 };
1119
1120 static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = {
1121 .cmd_rcgr = 0x2488c,
1122 .mnd_width = 16,
1123 .hid_width = 5,
1124 .parent_map = gcc_parent_map_0,
1125 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
1126 .clkr.hw.init = &gcc_qupv3_wrap1_s6_clk_src_init,
1127 };
1128
1129 static struct clk_init_data gcc_qupv3_wrap2_s0_clk_src_init = {
1130 .name = "gcc_qupv3_wrap2_s0_clk_src",
1131 .parent_data = gcc_parent_data_1,
1132 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1133 .ops = &clk_rcg2_shared_ops,
1134 };
1135
1136 static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = {
1137 .cmd_rcgr = 0x2a154,
1138 .mnd_width = 16,
1139 .hid_width = 5,
1140 .parent_map = gcc_parent_map_1,
1141 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1142 .clkr.hw.init = &gcc_qupv3_wrap2_s0_clk_src_init,
1143 };
1144
1145 static struct clk_init_data gcc_qupv3_wrap2_s1_clk_src_init = {
1146 .name = "gcc_qupv3_wrap2_s1_clk_src",
1147 .parent_data = gcc_parent_data_1,
1148 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1149 .ops = &clk_rcg2_shared_ops,
1150 };
1151
1152 static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = {
1153 .cmd_rcgr = 0x2a288,
1154 .mnd_width = 16,
1155 .hid_width = 5,
1156 .parent_map = gcc_parent_map_1,
1157 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1158 .clkr.hw.init = &gcc_qupv3_wrap2_s1_clk_src_init,
1159 };
1160
1161 static struct clk_init_data gcc_qupv3_wrap2_s2_clk_src_init = {
1162 .name = "gcc_qupv3_wrap2_s2_clk_src",
1163 .parent_data = gcc_parent_data_1,
1164 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1165 .ops = &clk_rcg2_shared_ops,
1166 };
1167
1168 static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src = {
1169 .cmd_rcgr = 0x2a3bc,
1170 .mnd_width = 16,
1171 .hid_width = 5,
1172 .parent_map = gcc_parent_map_1,
1173 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
1174 .clkr.hw.init = &gcc_qupv3_wrap2_s2_clk_src_init,
1175 };
1176
1177 static struct clk_init_data gcc_qupv3_wrap2_s3_clk_src_init = {
1178 .name = "gcc_qupv3_wrap2_s3_clk_src",
1179 .parent_data = gcc_parent_data_1,
1180 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1181 .ops = &clk_rcg2_shared_ops,
1182 };
1183
1184 static struct clk_rcg2 gcc_qupv3_wrap2_s3_clk_src = {
1185 .cmd_rcgr = 0x2a4f0,
1186 .mnd_width = 16,
1187 .hid_width = 5,
1188 .parent_map = gcc_parent_map_1,
1189 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
1190 .clkr.hw.init = &gcc_qupv3_wrap2_s3_clk_src_init,
1191 };
1192
1193 static struct clk_init_data gcc_qupv3_wrap2_s4_clk_src_init = {
1194 .name = "gcc_qupv3_wrap2_s4_clk_src",
1195 .parent_data = gcc_parent_data_1,
1196 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1197 .ops = &clk_rcg2_shared_ops,
1198 };
1199
1200 static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = {
1201 .cmd_rcgr = 0x2a624,
1202 .mnd_width = 16,
1203 .hid_width = 5,
1204 .parent_map = gcc_parent_map_1,
1205 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
1206 .clkr.hw.init = &gcc_qupv3_wrap2_s4_clk_src_init,
1207 };
1208
1209 static struct clk_init_data gcc_qupv3_wrap2_s5_clk_src_init = {
1210 .name = "gcc_qupv3_wrap2_s5_clk_src",
1211 .parent_data = gcc_parent_data_1,
1212 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1213 .ops = &clk_rcg2_shared_ops,
1214 };
1215
1216 static struct clk_rcg2 gcc_qupv3_wrap2_s5_clk_src = {
1217 .cmd_rcgr = 0x2a758,
1218 .mnd_width = 16,
1219 .hid_width = 5,
1220 .parent_map = gcc_parent_map_1,
1221 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
1222 .clkr.hw.init = &gcc_qupv3_wrap2_s5_clk_src_init,
1223 };
1224
1225 static struct clk_init_data gcc_qupv3_wrap2_s6_clk_src_init = {
1226 .name = "gcc_qupv3_wrap2_s6_clk_src",
1227 .parent_data = gcc_parent_data_1,
1228 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1229 .ops = &clk_rcg2_shared_ops,
1230 };
1231
1232 static struct clk_rcg2 gcc_qupv3_wrap2_s6_clk_src = {
1233 .cmd_rcgr = 0x2a88c,
1234 .mnd_width = 16,
1235 .hid_width = 5,
1236 .parent_map = gcc_parent_map_1,
1237 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
1238 .clkr.hw.init = &gcc_qupv3_wrap2_s6_clk_src_init,
1239 };
1240
1241 static const struct freq_tbl ftbl_gcc_qupv3_wrap3_s0_clk_src[] = {
1242 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
1243 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
1244 F(19200000, P_BI_TCXO, 1, 0, 0),
1245 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
1246 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
1247 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
1248 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
1249 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
1250 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
1251 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
1252 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
1253 F(403200000, P_GCC_GPLL4_OUT_MAIN, 2, 0, 0),
1254 { }
1255 };
1256
1257 static struct clk_init_data gcc_qupv3_wrap3_s0_clk_src_init = {
1258 .name = "gcc_qupv3_wrap3_s0_clk_src",
1259 .parent_data = gcc_parent_data_4,
1260 .num_parents = ARRAY_SIZE(gcc_parent_data_4),
1261 .ops = &clk_rcg2_shared_ops,
1262 };
1263
1264 static struct clk_rcg2 gcc_qupv3_wrap3_s0_clk_src = {
1265 .cmd_rcgr = 0xc4154,
1266 .mnd_width = 16,
1267 .hid_width = 5,
1268 .parent_map = gcc_parent_map_4,
1269 .freq_tbl = ftbl_gcc_qupv3_wrap3_s0_clk_src,
1270 .clkr.hw.init = &gcc_qupv3_wrap3_s0_clk_src_init,
1271 };
1272
1273 static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {
1274 F(144000, P_BI_TCXO, 16, 3, 25),
1275 F(400000, P_BI_TCXO, 12, 1, 4),
1276 F(19200000, P_BI_TCXO, 1, 0, 0),
1277 F(20000000, P_GCC_GPLL0_OUT_EVEN, 5, 1, 3),
1278 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
1279 F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
1280 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
1281 F(192000000, P_GCC_GPLL9_OUT_MAIN, 4, 0, 0),
1282 F(384000000, P_GCC_GPLL9_OUT_MAIN, 2, 0, 0),
1283 { }
1284 };
1285
1286 static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {
1287 .cmd_rcgr = 0x20014,
1288 .mnd_width = 8,
1289 .hid_width = 5,
1290 .parent_map = gcc_parent_map_13,
1291 .freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,
1292 .clkr.hw.init = &(const struct clk_init_data){
1293 .name = "gcc_sdcc1_apps_clk_src",
1294 .parent_data = gcc_parent_data_13,
1295 .num_parents = ARRAY_SIZE(gcc_parent_data_13),
1296 .ops = &clk_rcg2_floor_ops,
1297 },
1298 };
1299
1300 static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = {
1301 F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0),
1302 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
1303 { }
1304 };
1305
1306 static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = {
1307 .cmd_rcgr = 0x2002c,
1308 .mnd_width = 0,
1309 .hid_width = 5,
1310 .parent_map = gcc_parent_map_14,
1311 .freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src,
1312 .clkr.hw.init = &(const struct clk_init_data){
1313 .name = "gcc_sdcc1_ice_core_clk_src",
1314 .parent_data = gcc_parent_data_14,
1315 .num_parents = ARRAY_SIZE(gcc_parent_data_14),
1316 .ops = &clk_rcg2_floor_ops,
1317 },
1318 };
1319
1320 static const struct freq_tbl ftbl_gcc_tscss_cntr_clk_src[] = {
1321 F(15625000, P_GCC_GPLL7_OUT_MAIN, 16, 1, 4),
1322 { }
1323 };
1324
1325 static struct clk_rcg2 gcc_tscss_cntr_clk_src = {
1326 .cmd_rcgr = 0x21008,
1327 .mnd_width = 16,
1328 .hid_width = 5,
1329 .parent_map = gcc_parent_map_15,
1330 .freq_tbl = ftbl_gcc_tscss_cntr_clk_src,
1331 .clkr.hw.init = &(const struct clk_init_data){
1332 .name = "gcc_tscss_cntr_clk_src",
1333 .parent_data = gcc_parent_data_15,
1334 .num_parents = ARRAY_SIZE(gcc_parent_data_15),
1335 .ops = &clk_rcg2_shared_ops,
1336 },
1337 };
1338
1339 static const struct freq_tbl ftbl_gcc_ufs_card_axi_clk_src[] = {
1340 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
1341 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
1342 F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0),
1343 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
1344 F(600000000, P_GCC_GPLL0_OUT_MAIN, 1, 0, 0),
1345 { }
1346 };
1347
1348 static struct clk_rcg2 gcc_ufs_card_axi_clk_src = {
1349 .cmd_rcgr = 0x8102c,
1350 .mnd_width = 8,
1351 .hid_width = 5,
1352 .parent_map = gcc_parent_map_0,
1353 .freq_tbl = ftbl_gcc_ufs_card_axi_clk_src,
1354 .clkr.hw.init = &(const struct clk_init_data){
1355 .name = "gcc_ufs_card_axi_clk_src",
1356 .parent_data = gcc_parent_data_0,
1357 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1358 .ops = &clk_rcg2_shared_ops,
1359 },
1360 };
1361
1362 static const struct freq_tbl ftbl_gcc_ufs_card_ice_core_clk_src[] = {
1363 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
1364 F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0),
1365 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
1366 F(600000000, P_GCC_GPLL0_OUT_MAIN, 1, 0, 0),
1367 { }
1368 };
1369
1370 static struct clk_rcg2 gcc_ufs_card_ice_core_clk_src = {
1371 .cmd_rcgr = 0x81074,
1372 .mnd_width = 0,
1373 .hid_width = 5,
1374 .parent_map = gcc_parent_map_0,
1375 .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
1376 .clkr.hw.init = &(const struct clk_init_data){
1377 .name = "gcc_ufs_card_ice_core_clk_src",
1378 .parent_data = gcc_parent_data_0,
1379 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1380 .ops = &clk_rcg2_shared_ops,
1381 },
1382 };
1383
1384 static struct clk_rcg2 gcc_ufs_card_phy_aux_clk_src = {
1385 .cmd_rcgr = 0x810a8,
1386 .mnd_width = 0,
1387 .hid_width = 5,
1388 .parent_map = gcc_parent_map_5,
1389 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
1390 .clkr.hw.init = &(const struct clk_init_data){
1391 .name = "gcc_ufs_card_phy_aux_clk_src",
1392 .parent_data = gcc_parent_data_5,
1393 .num_parents = ARRAY_SIZE(gcc_parent_data_5),
1394 .ops = &clk_rcg2_shared_ops,
1395 },
1396 };
1397
1398 static struct clk_rcg2 gcc_ufs_card_unipro_core_clk_src = {
1399 .cmd_rcgr = 0x8108c,
1400 .mnd_width = 0,
1401 .hid_width = 5,
1402 .parent_map = gcc_parent_map_0,
1403 .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
1404 .clkr.hw.init = &(const struct clk_init_data){
1405 .name = "gcc_ufs_card_unipro_core_clk_src",
1406 .parent_data = gcc_parent_data_0,
1407 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1408 .ops = &clk_rcg2_shared_ops,
1409 },
1410 };
1411
1412 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
1413 .cmd_rcgr = 0x8302c,
1414 .mnd_width = 8,
1415 .hid_width = 5,
1416 .parent_map = gcc_parent_map_0,
1417 .freq_tbl = ftbl_gcc_ufs_card_axi_clk_src,
1418 .clkr.hw.init = &(const struct clk_init_data){
1419 .name = "gcc_ufs_phy_axi_clk_src",
1420 .parent_data = gcc_parent_data_0,
1421 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1422 .ops = &clk_rcg2_shared_ops,
1423 },
1424 };
1425
1426 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
1427 .cmd_rcgr = 0x83074,
1428 .mnd_width = 0,
1429 .hid_width = 5,
1430 .parent_map = gcc_parent_map_0,
1431 .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
1432 .clkr.hw.init = &(const struct clk_init_data){
1433 .name = "gcc_ufs_phy_ice_core_clk_src",
1434 .parent_data = gcc_parent_data_0,
1435 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1436 .ops = &clk_rcg2_shared_ops,
1437 },
1438 };
1439
1440 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
1441 .cmd_rcgr = 0x830a8,
1442 .mnd_width = 0,
1443 .hid_width = 5,
1444 .parent_map = gcc_parent_map_5,
1445 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
1446 .clkr.hw.init = &(const struct clk_init_data){
1447 .name = "gcc_ufs_phy_phy_aux_clk_src",
1448 .parent_data = gcc_parent_data_5,
1449 .num_parents = ARRAY_SIZE(gcc_parent_data_5),
1450 .ops = &clk_rcg2_shared_ops,
1451 },
1452 };
1453
1454 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
1455 .cmd_rcgr = 0x8308c,
1456 .mnd_width = 0,
1457 .hid_width = 5,
1458 .parent_map = gcc_parent_map_0,
1459 .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
1460 .clkr.hw.init = &(const struct clk_init_data){
1461 .name = "gcc_ufs_phy_unipro_core_clk_src",
1462 .parent_data = gcc_parent_data_0,
1463 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1464 .ops = &clk_rcg2_shared_ops,
1465 },
1466 };
1467
1468 static const struct freq_tbl ftbl_gcc_usb20_master_clk_src[] = {
1469 F(120000000, P_GCC_GPLL0_OUT_MAIN, 5, 0, 0),
1470 { }
1471 };
1472
1473 static struct clk_rcg2 gcc_usb20_master_clk_src = {
1474 .cmd_rcgr = 0x1c028,
1475 .mnd_width = 8,
1476 .hid_width = 5,
1477 .parent_map = gcc_parent_map_0,
1478 .freq_tbl = ftbl_gcc_usb20_master_clk_src,
1479 .clkr.hw.init = &(const struct clk_init_data){
1480 .name = "gcc_usb20_master_clk_src",
1481 .parent_data = gcc_parent_data_0,
1482 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1483 .ops = &clk_rcg2_shared_ops,
1484 },
1485 };
1486
1487 static struct clk_rcg2 gcc_usb20_mock_utmi_clk_src = {
1488 .cmd_rcgr = 0x1c040,
1489 .mnd_width = 0,
1490 .hid_width = 5,
1491 .parent_map = gcc_parent_map_0,
1492 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
1493 .clkr.hw.init = &(const struct clk_init_data){
1494 .name = "gcc_usb20_mock_utmi_clk_src",
1495 .parent_data = gcc_parent_data_0,
1496 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1497 .ops = &clk_rcg2_shared_ops,
1498 },
1499 };
1500
1501 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
1502 F(133333333, P_GCC_GPLL0_OUT_MAIN, 4.5, 0, 0),
1503 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
1504 F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0),
1505 { }
1506 };
1507
1508 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1509 .cmd_rcgr = 0x1b028,
1510 .mnd_width = 8,
1511 .hid_width = 5,
1512 .parent_map = gcc_parent_map_0,
1513 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1514 .clkr.hw.init = &(const struct clk_init_data){
1515 .name = "gcc_usb30_prim_master_clk_src",
1516 .parent_data = gcc_parent_data_0,
1517 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1518 .ops = &clk_rcg2_shared_ops,
1519 },
1520 };
1521
1522 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1523 .cmd_rcgr = 0x1b040,
1524 .mnd_width = 0,
1525 .hid_width = 5,
1526 .parent_map = gcc_parent_map_0,
1527 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
1528 .clkr.hw.init = &(const struct clk_init_data){
1529 .name = "gcc_usb30_prim_mock_utmi_clk_src",
1530 .parent_data = gcc_parent_data_0,
1531 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1532 .ops = &clk_rcg2_shared_ops,
1533 },
1534 };
1535
1536 static struct clk_rcg2 gcc_usb30_sec_master_clk_src = {
1537 .cmd_rcgr = 0x2f028,
1538 .mnd_width = 8,
1539 .hid_width = 5,
1540 .parent_map = gcc_parent_map_0,
1541 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1542 .clkr.hw.init = &(const struct clk_init_data){
1543 .name = "gcc_usb30_sec_master_clk_src",
1544 .parent_data = gcc_parent_data_0,
1545 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1546 .ops = &clk_rcg2_shared_ops,
1547 },
1548 };
1549
1550 static struct clk_rcg2 gcc_usb30_sec_mock_utmi_clk_src = {
1551 .cmd_rcgr = 0x2f040,
1552 .mnd_width = 0,
1553 .hid_width = 5,
1554 .parent_map = gcc_parent_map_0,
1555 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
1556 .clkr.hw.init = &(const struct clk_init_data){
1557 .name = "gcc_usb30_sec_mock_utmi_clk_src",
1558 .parent_data = gcc_parent_data_0,
1559 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1560 .ops = &clk_rcg2_shared_ops,
1561 },
1562 };
1563
1564 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1565 .cmd_rcgr = 0x1b06c,
1566 .mnd_width = 0,
1567 .hid_width = 5,
1568 .parent_map = gcc_parent_map_3,
1569 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
1570 .clkr.hw.init = &(const struct clk_init_data){
1571 .name = "gcc_usb3_prim_phy_aux_clk_src",
1572 .parent_data = gcc_parent_data_3,
1573 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
1574 .ops = &clk_rcg2_shared_ops,
1575 },
1576 };
1577
1578 static struct clk_rcg2 gcc_usb3_sec_phy_aux_clk_src = {
1579 .cmd_rcgr = 0x2f06c,
1580 .mnd_width = 0,
1581 .hid_width = 5,
1582 .parent_map = gcc_parent_map_3,
1583 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
1584 .clkr.hw.init = &(const struct clk_init_data){
1585 .name = "gcc_usb3_sec_phy_aux_clk_src",
1586 .parent_data = gcc_parent_data_3,
1587 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
1588 .ops = &clk_rcg2_shared_ops,
1589 },
1590 };
1591
1592 static struct clk_regmap_div gcc_pcie_0_pipe_div_clk_src = {
1593 .reg = 0xa9070,
1594 .shift = 0,
1595 .width = 4,
1596 .clkr.hw.init = &(const struct clk_init_data) {
1597 .name = "gcc_pcie_0_pipe_div_clk_src",
1598 .parent_hws = (const struct clk_hw*[]){
1599 &gcc_pcie_0_pipe_clk_src.clkr.hw,
1600 },
1601 .num_parents = 1,
1602 .flags = CLK_SET_RATE_PARENT,
1603 .ops = &clk_regmap_div_ro_ops,
1604 },
1605 };
1606
1607 static struct clk_regmap_div gcc_pcie_1_pipe_div_clk_src = {
1608 .reg = 0x77070,
1609 .shift = 0,
1610 .width = 4,
1611 .clkr.hw.init = &(const struct clk_init_data) {
1612 .name = "gcc_pcie_1_pipe_div_clk_src",
1613 .parent_hws = (const struct clk_hw*[]){
1614 &gcc_pcie_1_pipe_clk_src.clkr.hw,
1615 },
1616 .num_parents = 1,
1617 .flags = CLK_SET_RATE_PARENT,
1618 .ops = &clk_regmap_div_ro_ops,
1619 },
1620 };
1621
1622 static struct clk_regmap_div gcc_qupv3_wrap3_s0_div_clk_src = {
1623 .reg = 0xc4284,
1624 .shift = 0,
1625 .width = 4,
1626 .clkr.hw.init = &(const struct clk_init_data) {
1627 .name = "gcc_qupv3_wrap3_s0_div_clk_src",
1628 .parent_hws = (const struct clk_hw*[]){
1629 &gcc_qupv3_wrap3_s0_clk_src.clkr.hw,
1630 },
1631 .num_parents = 1,
1632 .flags = CLK_SET_RATE_PARENT,
1633 .ops = &clk_regmap_div_ro_ops,
1634 },
1635 };
1636
1637 static struct clk_regmap_div gcc_usb20_mock_utmi_postdiv_clk_src = {
1638 .reg = 0x1c058,
1639 .shift = 0,
1640 .width = 4,
1641 .clkr.hw.init = &(const struct clk_init_data) {
1642 .name = "gcc_usb20_mock_utmi_postdiv_clk_src",
1643 .parent_hws = (const struct clk_hw*[]){
1644 &gcc_usb20_mock_utmi_clk_src.clkr.hw,
1645 },
1646 .num_parents = 1,
1647 .flags = CLK_SET_RATE_PARENT,
1648 .ops = &clk_regmap_div_ro_ops,
1649 },
1650 };
1651
1652 static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {
1653 .reg = 0x1b058,
1654 .shift = 0,
1655 .width = 4,
1656 .clkr.hw.init = &(const struct clk_init_data) {
1657 .name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",
1658 .parent_hws = (const struct clk_hw*[]){
1659 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
1660 },
1661 .num_parents = 1,
1662 .flags = CLK_SET_RATE_PARENT,
1663 .ops = &clk_regmap_div_ro_ops,
1664 },
1665 };
1666
1667 static struct clk_regmap_div gcc_usb30_sec_mock_utmi_postdiv_clk_src = {
1668 .reg = 0x2f058,
1669 .shift = 0,
1670 .width = 4,
1671 .clkr.hw.init = &(const struct clk_init_data) {
1672 .name = "gcc_usb30_sec_mock_utmi_postdiv_clk_src",
1673 .parent_hws = (const struct clk_hw*[]){
1674 &gcc_usb30_sec_mock_utmi_clk_src.clkr.hw,
1675 },
1676 .num_parents = 1,
1677 .flags = CLK_SET_RATE_PARENT,
1678 .ops = &clk_regmap_div_ro_ops,
1679 },
1680 };
1681
1682 static struct clk_branch gcc_aggre_noc_qupv3_axi_clk = {
1683 .halt_reg = 0x8e200,
1684 .halt_check = BRANCH_HALT_VOTED,
1685 .hwcg_reg = 0x8e200,
1686 .hwcg_bit = 1,
1687 .clkr = {
1688 .enable_reg = 0x4b000,
1689 .enable_mask = BIT(28),
1690 .hw.init = &(const struct clk_init_data){
1691 .name = "gcc_aggre_noc_qupv3_axi_clk",
1692 .ops = &clk_branch2_ops,
1693 },
1694 },
1695 };
1696
1697 static struct clk_branch gcc_aggre_ufs_card_axi_clk = {
1698 .halt_reg = 0x810d4,
1699 .halt_check = BRANCH_HALT_VOTED,
1700 .hwcg_reg = 0x810d4,
1701 .hwcg_bit = 1,
1702 .clkr = {
1703 .enable_reg = 0x810d4,
1704 .enable_mask = BIT(0),
1705 .hw.init = &(const struct clk_init_data){
1706 .name = "gcc_aggre_ufs_card_axi_clk",
1707 .parent_hws = (const struct clk_hw*[]){
1708 &gcc_ufs_card_axi_clk_src.clkr.hw,
1709 },
1710 .num_parents = 1,
1711 .flags = CLK_SET_RATE_PARENT,
1712 .ops = &clk_branch2_ops,
1713 },
1714 },
1715 };
1716
1717 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
1718 .halt_reg = 0x830d4,
1719 .halt_check = BRANCH_HALT_VOTED,
1720 .hwcg_reg = 0x830d4,
1721 .hwcg_bit = 1,
1722 .clkr = {
1723 .enable_reg = 0x830d4,
1724 .enable_mask = BIT(0),
1725 .hw.init = &(const struct clk_init_data){
1726 .name = "gcc_aggre_ufs_phy_axi_clk",
1727 .parent_hws = (const struct clk_hw*[]){
1728 &gcc_ufs_phy_axi_clk_src.clkr.hw,
1729 },
1730 .num_parents = 1,
1731 .flags = CLK_SET_RATE_PARENT,
1732 .ops = &clk_branch2_ops,
1733 },
1734 },
1735 };
1736
1737 static struct clk_branch gcc_aggre_usb2_prim_axi_clk = {
1738 .halt_reg = 0x1c05c,
1739 .halt_check = BRANCH_HALT_VOTED,
1740 .hwcg_reg = 0x1c05c,
1741 .hwcg_bit = 1,
1742 .clkr = {
1743 .enable_reg = 0x1c05c,
1744 .enable_mask = BIT(0),
1745 .hw.init = &(const struct clk_init_data){
1746 .name = "gcc_aggre_usb2_prim_axi_clk",
1747 .parent_hws = (const struct clk_hw*[]){
1748 &gcc_usb20_master_clk_src.clkr.hw,
1749 },
1750 .num_parents = 1,
1751 .flags = CLK_SET_RATE_PARENT,
1752 .ops = &clk_branch2_ops,
1753 },
1754 },
1755 };
1756
1757 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
1758 .halt_reg = 0x1b084,
1759 .halt_check = BRANCH_HALT_VOTED,
1760 .hwcg_reg = 0x1b084,
1761 .hwcg_bit = 1,
1762 .clkr = {
1763 .enable_reg = 0x1b084,
1764 .enable_mask = BIT(0),
1765 .hw.init = &(const struct clk_init_data){
1766 .name = "gcc_aggre_usb3_prim_axi_clk",
1767 .parent_hws = (const struct clk_hw*[]){
1768 &gcc_usb30_prim_master_clk_src.clkr.hw,
1769 },
1770 .num_parents = 1,
1771 .flags = CLK_SET_RATE_PARENT,
1772 .ops = &clk_branch2_ops,
1773 },
1774 },
1775 };
1776
1777 static struct clk_branch gcc_aggre_usb3_sec_axi_clk = {
1778 .halt_reg = 0x2f088,
1779 .halt_check = BRANCH_HALT_VOTED,
1780 .hwcg_reg = 0x2f088,
1781 .hwcg_bit = 1,
1782 .clkr = {
1783 .enable_reg = 0x2f088,
1784 .enable_mask = BIT(0),
1785 .hw.init = &(const struct clk_init_data){
1786 .name = "gcc_aggre_usb3_sec_axi_clk",
1787 .parent_hws = (const struct clk_hw*[]){
1788 &gcc_usb30_sec_master_clk_src.clkr.hw,
1789 },
1790 .num_parents = 1,
1791 .flags = CLK_SET_RATE_PARENT,
1792 .ops = &clk_branch2_ops,
1793 },
1794 },
1795 };
1796
1797 static struct clk_branch gcc_ahb2phy0_clk = {
1798 .halt_reg = 0x76004,
1799 .halt_check = BRANCH_HALT_VOTED,
1800 .hwcg_reg = 0x76004,
1801 .hwcg_bit = 1,
1802 .clkr = {
1803 .enable_reg = 0x76004,
1804 .enable_mask = BIT(0),
1805 .hw.init = &(const struct clk_init_data){
1806 .name = "gcc_ahb2phy0_clk",
1807 .ops = &clk_branch2_ops,
1808 },
1809 },
1810 };
1811
1812 static struct clk_branch gcc_ahb2phy2_clk = {
1813 .halt_reg = 0x76008,
1814 .halt_check = BRANCH_HALT_VOTED,
1815 .hwcg_reg = 0x76008,
1816 .hwcg_bit = 1,
1817 .clkr = {
1818 .enable_reg = 0x76008,
1819 .enable_mask = BIT(0),
1820 .hw.init = &(const struct clk_init_data){
1821 .name = "gcc_ahb2phy2_clk",
1822 .ops = &clk_branch2_ops,
1823 },
1824 },
1825 };
1826
1827 static struct clk_branch gcc_ahb2phy3_clk = {
1828 .halt_reg = 0x7600c,
1829 .halt_check = BRANCH_HALT_VOTED,
1830 .hwcg_reg = 0x7600c,
1831 .hwcg_bit = 1,
1832 .clkr = {
1833 .enable_reg = 0x7600c,
1834 .enable_mask = BIT(0),
1835 .hw.init = &(const struct clk_init_data){
1836 .name = "gcc_ahb2phy3_clk",
1837 .ops = &clk_branch2_ops,
1838 },
1839 },
1840 };
1841
1842 static struct clk_branch gcc_boot_rom_ahb_clk = {
1843 .halt_reg = 0x44004,
1844 .halt_check = BRANCH_HALT_VOTED,
1845 .hwcg_reg = 0x44004,
1846 .hwcg_bit = 1,
1847 .clkr = {
1848 .enable_reg = 0x4b000,
1849 .enable_mask = BIT(10),
1850 .hw.init = &(const struct clk_init_data){
1851 .name = "gcc_boot_rom_ahb_clk",
1852 .ops = &clk_branch2_ops,
1853 },
1854 },
1855 };
1856
1857 static struct clk_branch gcc_camera_hf_axi_clk = {
1858 .halt_reg = 0x32010,
1859 .halt_check = BRANCH_HALT_SKIP,
1860 .hwcg_reg = 0x32010,
1861 .hwcg_bit = 1,
1862 .clkr = {
1863 .enable_reg = 0x32010,
1864 .enable_mask = BIT(0),
1865 .hw.init = &(const struct clk_init_data){
1866 .name = "gcc_camera_hf_axi_clk",
1867 .ops = &clk_branch2_ops,
1868 },
1869 },
1870 };
1871
1872 static struct clk_branch gcc_camera_sf_axi_clk = {
1873 .halt_reg = 0x32018,
1874 .halt_check = BRANCH_HALT_SKIP,
1875 .hwcg_reg = 0x32018,
1876 .hwcg_bit = 1,
1877 .clkr = {
1878 .enable_reg = 0x32018,
1879 .enable_mask = BIT(0),
1880 .hw.init = &(const struct clk_init_data){
1881 .name = "gcc_camera_sf_axi_clk",
1882 .ops = &clk_branch2_ops,
1883 },
1884 },
1885 };
1886
1887 static struct clk_branch gcc_camera_throttle_xo_clk = {
1888 .halt_reg = 0x32024,
1889 .halt_check = BRANCH_HALT,
1890 .clkr = {
1891 .enable_reg = 0x32024,
1892 .enable_mask = BIT(0),
1893 .hw.init = &(const struct clk_init_data){
1894 .name = "gcc_camera_throttle_xo_clk",
1895 .ops = &clk_branch2_ops,
1896 },
1897 },
1898 };
1899
1900 static struct clk_branch gcc_cfg_noc_usb2_prim_axi_clk = {
1901 .halt_reg = 0x1c060,
1902 .halt_check = BRANCH_HALT_VOTED,
1903 .hwcg_reg = 0x1c060,
1904 .hwcg_bit = 1,
1905 .clkr = {
1906 .enable_reg = 0x1c060,
1907 .enable_mask = BIT(0),
1908 .hw.init = &(const struct clk_init_data){
1909 .name = "gcc_cfg_noc_usb2_prim_axi_clk",
1910 .parent_hws = (const struct clk_hw*[]){
1911 &gcc_usb20_master_clk_src.clkr.hw,
1912 },
1913 .num_parents = 1,
1914 .flags = CLK_SET_RATE_PARENT,
1915 .ops = &clk_branch2_ops,
1916 },
1917 },
1918 };
1919
1920 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1921 .halt_reg = 0x1b088,
1922 .halt_check = BRANCH_HALT_VOTED,
1923 .hwcg_reg = 0x1b088,
1924 .hwcg_bit = 1,
1925 .clkr = {
1926 .enable_reg = 0x1b088,
1927 .enable_mask = BIT(0),
1928 .hw.init = &(const struct clk_init_data){
1929 .name = "gcc_cfg_noc_usb3_prim_axi_clk",
1930 .parent_hws = (const struct clk_hw*[]){
1931 &gcc_usb30_prim_master_clk_src.clkr.hw,
1932 },
1933 .num_parents = 1,
1934 .flags = CLK_SET_RATE_PARENT,
1935 .ops = &clk_branch2_ops,
1936 },
1937 },
1938 };
1939
1940 static struct clk_branch gcc_cfg_noc_usb3_sec_axi_clk = {
1941 .halt_reg = 0x2f084,
1942 .halt_check = BRANCH_HALT_VOTED,
1943 .hwcg_reg = 0x2f084,
1944 .hwcg_bit = 1,
1945 .clkr = {
1946 .enable_reg = 0x2f084,
1947 .enable_mask = BIT(0),
1948 .hw.init = &(const struct clk_init_data){
1949 .name = "gcc_cfg_noc_usb3_sec_axi_clk",
1950 .parent_hws = (const struct clk_hw*[]){
1951 &gcc_usb30_sec_master_clk_src.clkr.hw,
1952 },
1953 .num_parents = 1,
1954 .flags = CLK_SET_RATE_PARENT,
1955 .ops = &clk_branch2_ops,
1956 },
1957 },
1958 };
1959
1960 static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1961 .halt_reg = 0x7d164,
1962 .halt_check = BRANCH_HALT_VOTED,
1963 .hwcg_reg = 0x7d164,
1964 .hwcg_bit = 1,
1965 .clkr = {
1966 .enable_reg = 0x7d164,
1967 .enable_mask = BIT(0),
1968 .hw.init = &(const struct clk_init_data){
1969 .name = "gcc_ddrss_gpu_axi_clk",
1970 .ops = &clk_branch2_aon_ops,
1971 },
1972 },
1973 };
1974
1975 static struct clk_branch gcc_disp1_hf_axi_clk = {
1976 .halt_reg = 0xc7010,
1977 .halt_check = BRANCH_HALT_VOTED,
1978 .hwcg_reg = 0xc7010,
1979 .hwcg_bit = 1,
1980 .clkr = {
1981 .enable_reg = 0xc7010,
1982 .enable_mask = BIT(0),
1983 .hw.init = &(const struct clk_init_data){
1984 .name = "gcc_disp1_hf_axi_clk",
1985 .ops = &clk_branch2_ops,
1986 },
1987 },
1988 };
1989
1990 static struct clk_branch gcc_disp_hf_axi_clk = {
1991 .halt_reg = 0x33010,
1992 .halt_check = BRANCH_HALT_VOTED,
1993 .hwcg_reg = 0x33010,
1994 .hwcg_bit = 1,
1995 .clkr = {
1996 .enable_reg = 0x33010,
1997 .enable_mask = BIT(0),
1998 .hw.init = &(const struct clk_init_data){
1999 .name = "gcc_disp_hf_axi_clk",
2000 .ops = &clk_branch2_ops,
2001 },
2002 },
2003 };
2004
2005 static struct clk_branch gcc_edp_ref_clkref_en = {
2006 .halt_reg = 0x97448,
2007 .halt_check = BRANCH_HALT_DELAY,
2008 .clkr = {
2009 .enable_reg = 0x97448,
2010 .enable_mask = BIT(0),
2011 .hw.init = &(const struct clk_init_data){
2012 .name = "gcc_edp_ref_clkref_en",
2013 .ops = &clk_branch2_ops,
2014 },
2015 },
2016 };
2017
2018 static struct clk_branch gcc_emac0_axi_clk = {
2019 .halt_reg = 0xb6018,
2020 .halt_check = BRANCH_HALT_VOTED,
2021 .hwcg_reg = 0xb6018,
2022 .hwcg_bit = 1,
2023 .clkr = {
2024 .enable_reg = 0xb6018,
2025 .enable_mask = BIT(0),
2026 .hw.init = &(const struct clk_init_data){
2027 .name = "gcc_emac0_axi_clk",
2028 .ops = &clk_branch2_ops,
2029 },
2030 },
2031 };
2032
2033 static struct clk_branch gcc_emac0_phy_aux_clk = {
2034 .halt_reg = 0xb6024,
2035 .halt_check = BRANCH_HALT,
2036 .clkr = {
2037 .enable_reg = 0xb6024,
2038 .enable_mask = BIT(0),
2039 .hw.init = &(const struct clk_init_data){
2040 .name = "gcc_emac0_phy_aux_clk",
2041 .parent_hws = (const struct clk_hw*[]){
2042 &gcc_emac0_phy_aux_clk_src.clkr.hw,
2043 },
2044 .num_parents = 1,
2045 .flags = CLK_SET_RATE_PARENT,
2046 .ops = &clk_branch2_ops,
2047 },
2048 },
2049 };
2050
2051 static struct clk_branch gcc_emac0_ptp_clk = {
2052 .halt_reg = 0xb6040,
2053 .halt_check = BRANCH_HALT,
2054 .clkr = {
2055 .enable_reg = 0xb6040,
2056 .enable_mask = BIT(0),
2057 .hw.init = &(const struct clk_init_data){
2058 .name = "gcc_emac0_ptp_clk",
2059 .parent_hws = (const struct clk_hw*[]){
2060 &gcc_emac0_ptp_clk_src.clkr.hw,
2061 },
2062 .num_parents = 1,
2063 .flags = CLK_SET_RATE_PARENT,
2064 .ops = &clk_branch2_ops,
2065 },
2066 },
2067 };
2068
2069 static struct clk_branch gcc_emac0_rgmii_clk = {
2070 .halt_reg = 0xb6044,
2071 .halt_check = BRANCH_HALT,
2072 .clkr = {
2073 .enable_reg = 0xb6044,
2074 .enable_mask = BIT(0),
2075 .hw.init = &(const struct clk_init_data){
2076 .name = "gcc_emac0_rgmii_clk",
2077 .parent_hws = (const struct clk_hw*[]){
2078 &gcc_emac0_rgmii_clk_src.clkr.hw,
2079 },
2080 .num_parents = 1,
2081 .flags = CLK_SET_RATE_PARENT,
2082 .ops = &clk_branch2_ops,
2083 },
2084 },
2085 };
2086
2087 static struct clk_branch gcc_emac0_slv_ahb_clk = {
2088 .halt_reg = 0xb6020,
2089 .halt_check = BRANCH_HALT_VOTED,
2090 .hwcg_reg = 0xb6020,
2091 .hwcg_bit = 1,
2092 .clkr = {
2093 .enable_reg = 0xb6020,
2094 .enable_mask = BIT(0),
2095 .hw.init = &(const struct clk_init_data){
2096 .name = "gcc_emac0_slv_ahb_clk",
2097 .ops = &clk_branch2_ops,
2098 },
2099 },
2100 };
2101
2102 static struct clk_branch gcc_emac1_axi_clk = {
2103 .halt_reg = 0xb4018,
2104 .halt_check = BRANCH_HALT_VOTED,
2105 .hwcg_reg = 0xb4018,
2106 .hwcg_bit = 1,
2107 .clkr = {
2108 .enable_reg = 0xb4018,
2109 .enable_mask = BIT(0),
2110 .hw.init = &(const struct clk_init_data){
2111 .name = "gcc_emac1_axi_clk",
2112 .ops = &clk_branch2_ops,
2113 },
2114 },
2115 };
2116
2117 static struct clk_branch gcc_emac1_phy_aux_clk = {
2118 .halt_reg = 0xb4024,
2119 .halt_check = BRANCH_HALT,
2120 .clkr = {
2121 .enable_reg = 0xb4024,
2122 .enable_mask = BIT(0),
2123 .hw.init = &(const struct clk_init_data){
2124 .name = "gcc_emac1_phy_aux_clk",
2125 .parent_hws = (const struct clk_hw*[]){
2126 &gcc_emac1_phy_aux_clk_src.clkr.hw,
2127 },
2128 .num_parents = 1,
2129 .flags = CLK_SET_RATE_PARENT,
2130 .ops = &clk_branch2_ops,
2131 },
2132 },
2133 };
2134
2135 static struct clk_branch gcc_emac1_ptp_clk = {
2136 .halt_reg = 0xb4040,
2137 .halt_check = BRANCH_HALT,
2138 .clkr = {
2139 .enable_reg = 0xb4040,
2140 .enable_mask = BIT(0),
2141 .hw.init = &(const struct clk_init_data){
2142 .name = "gcc_emac1_ptp_clk",
2143 .parent_hws = (const struct clk_hw*[]){
2144 &gcc_emac1_ptp_clk_src.clkr.hw,
2145 },
2146 .num_parents = 1,
2147 .flags = CLK_SET_RATE_PARENT,
2148 .ops = &clk_branch2_ops,
2149 },
2150 },
2151 };
2152
2153 static struct clk_branch gcc_emac1_rgmii_clk = {
2154 .halt_reg = 0xb4044,
2155 .halt_check = BRANCH_HALT,
2156 .clkr = {
2157 .enable_reg = 0xb4044,
2158 .enable_mask = BIT(0),
2159 .hw.init = &(const struct clk_init_data){
2160 .name = "gcc_emac1_rgmii_clk",
2161 .parent_hws = (const struct clk_hw*[]){
2162 &gcc_emac1_rgmii_clk_src.clkr.hw,
2163 },
2164 .num_parents = 1,
2165 .flags = CLK_SET_RATE_PARENT,
2166 .ops = &clk_branch2_ops,
2167 },
2168 },
2169 };
2170
2171 static struct clk_branch gcc_emac1_slv_ahb_clk = {
2172 .halt_reg = 0xb4020,
2173 .halt_check = BRANCH_HALT_VOTED,
2174 .hwcg_reg = 0xb4020,
2175 .hwcg_bit = 1,
2176 .clkr = {
2177 .enable_reg = 0xb4020,
2178 .enable_mask = BIT(0),
2179 .hw.init = &(const struct clk_init_data){
2180 .name = "gcc_emac1_slv_ahb_clk",
2181 .ops = &clk_branch2_ops,
2182 },
2183 },
2184 };
2185
2186 static struct clk_branch gcc_gp1_clk = {
2187 .halt_reg = 0x70000,
2188 .halt_check = BRANCH_HALT,
2189 .clkr = {
2190 .enable_reg = 0x70000,
2191 .enable_mask = BIT(0),
2192 .hw.init = &(const struct clk_init_data){
2193 .name = "gcc_gp1_clk",
2194 .parent_hws = (const struct clk_hw*[]){
2195 &gcc_gp1_clk_src.clkr.hw,
2196 },
2197 .num_parents = 1,
2198 .flags = CLK_SET_RATE_PARENT,
2199 .ops = &clk_branch2_ops,
2200 },
2201 },
2202 };
2203
2204 static struct clk_branch gcc_gp2_clk = {
2205 .halt_reg = 0x71000,
2206 .halt_check = BRANCH_HALT,
2207 .clkr = {
2208 .enable_reg = 0x71000,
2209 .enable_mask = BIT(0),
2210 .hw.init = &(const struct clk_init_data){
2211 .name = "gcc_gp2_clk",
2212 .parent_hws = (const struct clk_hw*[]){
2213 &gcc_gp2_clk_src.clkr.hw,
2214 },
2215 .num_parents = 1,
2216 .flags = CLK_SET_RATE_PARENT,
2217 .ops = &clk_branch2_ops,
2218 },
2219 },
2220 };
2221
2222 static struct clk_branch gcc_gp3_clk = {
2223 .halt_reg = 0x62000,
2224 .halt_check = BRANCH_HALT,
2225 .clkr = {
2226 .enable_reg = 0x62000,
2227 .enable_mask = BIT(0),
2228 .hw.init = &(const struct clk_init_data){
2229 .name = "gcc_gp3_clk",
2230 .parent_hws = (const struct clk_hw*[]){
2231 &gcc_gp3_clk_src.clkr.hw,
2232 },
2233 .num_parents = 1,
2234 .flags = CLK_SET_RATE_PARENT,
2235 .ops = &clk_branch2_ops,
2236 },
2237 },
2238 };
2239
2240 static struct clk_branch gcc_gp4_clk = {
2241 .halt_reg = 0x1e000,
2242 .halt_check = BRANCH_HALT,
2243 .clkr = {
2244 .enable_reg = 0x1e000,
2245 .enable_mask = BIT(0),
2246 .hw.init = &(const struct clk_init_data){
2247 .name = "gcc_gp4_clk",
2248 .parent_hws = (const struct clk_hw*[]){
2249 &gcc_gp4_clk_src.clkr.hw,
2250 },
2251 .num_parents = 1,
2252 .flags = CLK_SET_RATE_PARENT,
2253 .ops = &clk_branch2_ops,
2254 },
2255 },
2256 };
2257
2258 static struct clk_branch gcc_gp5_clk = {
2259 .halt_reg = 0x1f000,
2260 .halt_check = BRANCH_HALT,
2261 .clkr = {
2262 .enable_reg = 0x1f000,
2263 .enable_mask = BIT(0),
2264 .hw.init = &(const struct clk_init_data){
2265 .name = "gcc_gp5_clk",
2266 .parent_hws = (const struct clk_hw*[]){
2267 &gcc_gp5_clk_src.clkr.hw,
2268 },
2269 .num_parents = 1,
2270 .flags = CLK_SET_RATE_PARENT,
2271 .ops = &clk_branch2_ops,
2272 },
2273 },
2274 };
2275
2276 static struct clk_branch gcc_gpu_gpll0_clk_src = {
2277 .halt_check = BRANCH_HALT_DELAY,
2278 .clkr = {
2279 .enable_reg = 0x4b000,
2280 .enable_mask = BIT(15),
2281 .hw.init = &(const struct clk_init_data){
2282 .name = "gcc_gpu_gpll0_clk_src",
2283 .parent_hws = (const struct clk_hw*[]){
2284 &gcc_gpll0.clkr.hw,
2285 },
2286 .num_parents = 1,
2287 .flags = CLK_SET_RATE_PARENT,
2288 .ops = &clk_branch2_ops,
2289 },
2290 },
2291 };
2292
2293 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
2294 .halt_check = BRANCH_HALT_DELAY,
2295 .clkr = {
2296 .enable_reg = 0x4b000,
2297 .enable_mask = BIT(16),
2298 .hw.init = &(const struct clk_init_data){
2299 .name = "gcc_gpu_gpll0_div_clk_src",
2300 .parent_hws = (const struct clk_hw*[]){
2301 &gcc_gpll0_out_even.clkr.hw,
2302 },
2303 .num_parents = 1,
2304 .flags = CLK_SET_RATE_PARENT,
2305 .ops = &clk_branch2_ops,
2306 },
2307 },
2308 };
2309
2310 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
2311 .halt_reg = 0x7d010,
2312 .halt_check = BRANCH_HALT_VOTED,
2313 .hwcg_reg = 0x7d010,
2314 .hwcg_bit = 1,
2315 .clkr = {
2316 .enable_reg = 0x7d010,
2317 .enable_mask = BIT(0),
2318 .hw.init = &(const struct clk_init_data){
2319 .name = "gcc_gpu_memnoc_gfx_clk",
2320 .ops = &clk_branch2_aon_ops,
2321 },
2322 },
2323 };
2324
2325 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
2326 .halt_reg = 0x7d01c,
2327 .halt_check = BRANCH_HALT_DELAY,
2328 .clkr = {
2329 .enable_reg = 0x7d01c,
2330 .enable_mask = BIT(0),
2331 .hw.init = &(const struct clk_init_data){
2332 .name = "gcc_gpu_snoc_dvm_gfx_clk",
2333 .ops = &clk_branch2_aon_ops,
2334 },
2335 },
2336 };
2337
2338 static struct clk_branch gcc_gpu_tcu_throttle_ahb_clk = {
2339 .halt_reg = 0x7d008,
2340 .halt_check = BRANCH_HALT_VOTED,
2341 .hwcg_reg = 0x7d008,
2342 .hwcg_bit = 1,
2343 .clkr = {
2344 .enable_reg = 0x7d008,
2345 .enable_mask = BIT(0),
2346 .hw.init = &(const struct clk_init_data){
2347 .name = "gcc_gpu_tcu_throttle_ahb_clk",
2348 .ops = &clk_branch2_ops,
2349 },
2350 },
2351 };
2352
2353 static struct clk_branch gcc_gpu_tcu_throttle_clk = {
2354 .halt_reg = 0x7d014,
2355 .halt_check = BRANCH_HALT_VOTED,
2356 .hwcg_reg = 0x7d014,
2357 .hwcg_bit = 1,
2358 .clkr = {
2359 .enable_reg = 0x7d014,
2360 .enable_mask = BIT(0),
2361 .hw.init = &(const struct clk_init_data){
2362 .name = "gcc_gpu_tcu_throttle_clk",
2363 .ops = &clk_branch2_ops,
2364 },
2365 },
2366 };
2367
2368 static struct clk_branch gcc_pcie_0_aux_clk = {
2369 .halt_reg = 0xa9038,
2370 .halt_check = BRANCH_HALT_VOTED,
2371 .clkr = {
2372 .enable_reg = 0x4b010,
2373 .enable_mask = BIT(16),
2374 .hw.init = &(const struct clk_init_data){
2375 .name = "gcc_pcie_0_aux_clk",
2376 .parent_hws = (const struct clk_hw*[]){
2377 &gcc_pcie_0_aux_clk_src.clkr.hw,
2378 },
2379 .num_parents = 1,
2380 .flags = CLK_SET_RATE_PARENT,
2381 .ops = &clk_branch2_ops,
2382 },
2383 },
2384 };
2385
2386 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
2387 .halt_reg = 0xa902c,
2388 .halt_check = BRANCH_HALT_VOTED,
2389 .hwcg_reg = 0xa902c,
2390 .hwcg_bit = 1,
2391 .clkr = {
2392 .enable_reg = 0x4b010,
2393 .enable_mask = BIT(12),
2394 .hw.init = &(const struct clk_init_data){
2395 .name = "gcc_pcie_0_cfg_ahb_clk",
2396 .ops = &clk_branch2_ops,
2397 },
2398 },
2399 };
2400
2401 static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
2402 .halt_reg = 0xa9024,
2403 .halt_check = BRANCH_HALT_VOTED,
2404 .clkr = {
2405 .enable_reg = 0x4b010,
2406 .enable_mask = BIT(11),
2407 .hw.init = &(const struct clk_init_data){
2408 .name = "gcc_pcie_0_mstr_axi_clk",
2409 .ops = &clk_branch2_ops,
2410 },
2411 },
2412 };
2413
2414 static struct clk_branch gcc_pcie_0_phy_aux_clk = {
2415 .halt_reg = 0xa9030,
2416 .halt_check = BRANCH_HALT_VOTED,
2417 .clkr = {
2418 .enable_reg = 0x4b010,
2419 .enable_mask = BIT(13),
2420 .hw.init = &(const struct clk_init_data){
2421 .name = "gcc_pcie_0_phy_aux_clk",
2422 .parent_hws = (const struct clk_hw*[]){
2423 &gcc_pcie_0_phy_aux_clk_src.clkr.hw,
2424 },
2425 .num_parents = 1,
2426 .flags = CLK_SET_RATE_PARENT,
2427 .ops = &clk_branch2_ops,
2428 },
2429 },
2430 };
2431
2432 static struct clk_branch gcc_pcie_0_phy_rchng_clk = {
2433 .halt_reg = 0xa9050,
2434 .halt_check = BRANCH_HALT_VOTED,
2435 .clkr = {
2436 .enable_reg = 0x4b010,
2437 .enable_mask = BIT(15),
2438 .hw.init = &(const struct clk_init_data){
2439 .name = "gcc_pcie_0_phy_rchng_clk",
2440 .parent_hws = (const struct clk_hw*[]){
2441 &gcc_pcie_0_phy_rchng_clk_src.clkr.hw,
2442 },
2443 .num_parents = 1,
2444 .flags = CLK_SET_RATE_PARENT,
2445 .ops = &clk_branch2_ops,
2446 },
2447 },
2448 };
2449
2450 static struct clk_branch gcc_pcie_0_pipe_clk = {
2451 .halt_reg = 0xa9040,
2452 .halt_check = BRANCH_HALT_SKIP,
2453 .clkr = {
2454 .enable_reg = 0x4b010,
2455 .enable_mask = BIT(14),
2456 .hw.init = &(const struct clk_init_data){
2457 .name = "gcc_pcie_0_pipe_clk",
2458 .parent_hws = (const struct clk_hw*[]){
2459 &gcc_pcie_0_pipe_clk_src.clkr.hw,
2460 },
2461 .num_parents = 1,
2462 .flags = CLK_SET_RATE_PARENT,
2463 .ops = &clk_branch2_ops,
2464 },
2465 },
2466 };
2467
2468 static struct clk_branch gcc_pcie_0_pipediv2_clk = {
2469 .halt_reg = 0xa9048,
2470 .halt_check = BRANCH_HALT_SKIP,
2471 .clkr = {
2472 .enable_reg = 0x4b018,
2473 .enable_mask = BIT(22),
2474 .hw.init = &(const struct clk_init_data){
2475 .name = "gcc_pcie_0_pipediv2_clk",
2476 .parent_hws = (const struct clk_hw*[]){
2477 &gcc_pcie_0_pipe_div_clk_src.clkr.hw,
2478 },
2479 .num_parents = 1,
2480 .flags = CLK_SET_RATE_PARENT,
2481 .ops = &clk_branch2_ops,
2482 },
2483 },
2484 };
2485
2486 static struct clk_branch gcc_pcie_0_slv_axi_clk = {
2487 .halt_reg = 0xa901c,
2488 .halt_check = BRANCH_HALT_VOTED,
2489 .clkr = {
2490 .enable_reg = 0x4b010,
2491 .enable_mask = BIT(10),
2492 .hw.init = &(const struct clk_init_data){
2493 .name = "gcc_pcie_0_slv_axi_clk",
2494 .ops = &clk_branch2_ops,
2495 },
2496 },
2497 };
2498
2499 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
2500 .halt_reg = 0xa9018,
2501 .halt_check = BRANCH_HALT_VOTED,
2502 .clkr = {
2503 .enable_reg = 0x4b018,
2504 .enable_mask = BIT(12),
2505 .hw.init = &(const struct clk_init_data){
2506 .name = "gcc_pcie_0_slv_q2a_axi_clk",
2507 .ops = &clk_branch2_ops,
2508 },
2509 },
2510 };
2511
2512 static struct clk_branch gcc_pcie_1_aux_clk = {
2513 .halt_reg = 0x77038,
2514 .halt_check = BRANCH_HALT_VOTED,
2515 .clkr = {
2516 .enable_reg = 0x4b000,
2517 .enable_mask = BIT(31),
2518 .hw.init = &(const struct clk_init_data){
2519 .name = "gcc_pcie_1_aux_clk",
2520 .parent_hws = (const struct clk_hw*[]){
2521 &gcc_pcie_1_aux_clk_src.clkr.hw,
2522 },
2523 .num_parents = 1,
2524 .flags = CLK_SET_RATE_PARENT,
2525 .ops = &clk_branch2_ops,
2526 },
2527 },
2528 };
2529
2530 static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
2531 .halt_reg = 0x7702c,
2532 .halt_check = BRANCH_HALT_VOTED,
2533 .hwcg_reg = 0x7702c,
2534 .hwcg_bit = 1,
2535 .clkr = {
2536 .enable_reg = 0x4b008,
2537 .enable_mask = BIT(2),
2538 .hw.init = &(const struct clk_init_data){
2539 .name = "gcc_pcie_1_cfg_ahb_clk",
2540 .ops = &clk_branch2_ops,
2541 },
2542 },
2543 };
2544
2545 static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
2546 .halt_reg = 0x77024,
2547 .halt_check = BRANCH_HALT_VOTED,
2548 .clkr = {
2549 .enable_reg = 0x4b008,
2550 .enable_mask = BIT(1),
2551 .hw.init = &(const struct clk_init_data){
2552 .name = "gcc_pcie_1_mstr_axi_clk",
2553 .ops = &clk_branch2_ops,
2554 },
2555 },
2556 };
2557
2558 static struct clk_branch gcc_pcie_1_phy_aux_clk = {
2559 .halt_reg = 0x77030,
2560 .halt_check = BRANCH_HALT_VOTED,
2561 .clkr = {
2562 .enable_reg = 0x4b008,
2563 .enable_mask = BIT(3),
2564 .hw.init = &(const struct clk_init_data){
2565 .name = "gcc_pcie_1_phy_aux_clk",
2566 .parent_hws = (const struct clk_hw*[]){
2567 &gcc_pcie_1_phy_aux_clk_src.clkr.hw,
2568 },
2569 .num_parents = 1,
2570 .flags = CLK_SET_RATE_PARENT,
2571 .ops = &clk_branch2_ops,
2572 },
2573 },
2574 };
2575
2576 static struct clk_branch gcc_pcie_1_phy_rchng_clk = {
2577 .halt_reg = 0x77050,
2578 .halt_check = BRANCH_HALT_VOTED,
2579 .clkr = {
2580 .enable_reg = 0x4b000,
2581 .enable_mask = BIT(22),
2582 .hw.init = &(const struct clk_init_data){
2583 .name = "gcc_pcie_1_phy_rchng_clk",
2584 .parent_hws = (const struct clk_hw*[]){
2585 &gcc_pcie_1_phy_rchng_clk_src.clkr.hw,
2586 },
2587 .num_parents = 1,
2588 .flags = CLK_SET_RATE_PARENT,
2589 .ops = &clk_branch2_ops,
2590 },
2591 },
2592 };
2593
2594 static struct clk_branch gcc_pcie_1_pipe_clk = {
2595 .halt_reg = 0x77040,
2596 .halt_check = BRANCH_HALT_SKIP,
2597 .clkr = {
2598 .enable_reg = 0x4b008,
2599 .enable_mask = BIT(4),
2600 .hw.init = &(const struct clk_init_data){
2601 .name = "gcc_pcie_1_pipe_clk",
2602 .parent_hws = (const struct clk_hw*[]){
2603 &gcc_pcie_1_pipe_clk_src.clkr.hw,
2604 },
2605 .num_parents = 1,
2606 .flags = CLK_SET_RATE_PARENT,
2607 .ops = &clk_branch2_ops,
2608 },
2609 },
2610 };
2611
2612 static struct clk_branch gcc_pcie_1_pipediv2_clk = {
2613 .halt_reg = 0x77048,
2614 .halt_check = BRANCH_HALT_SKIP,
2615 .clkr = {
2616 .enable_reg = 0x4b018,
2617 .enable_mask = BIT(16),
2618 .hw.init = &(const struct clk_init_data){
2619 .name = "gcc_pcie_1_pipediv2_clk",
2620 .parent_hws = (const struct clk_hw*[]){
2621 &gcc_pcie_1_pipe_div_clk_src.clkr.hw,
2622 },
2623 .num_parents = 1,
2624 .flags = CLK_SET_RATE_PARENT,
2625 .ops = &clk_branch2_ops,
2626 },
2627 },
2628 };
2629
2630 static struct clk_branch gcc_pcie_1_slv_axi_clk = {
2631 .halt_reg = 0x7701c,
2632 .halt_check = BRANCH_HALT_VOTED,
2633 .clkr = {
2634 .enable_reg = 0x4b008,
2635 .enable_mask = BIT(0),
2636 .hw.init = &(const struct clk_init_data){
2637 .name = "gcc_pcie_1_slv_axi_clk",
2638 .ops = &clk_branch2_ops,
2639 },
2640 },
2641 };
2642
2643 static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = {
2644 .halt_reg = 0x77018,
2645 .halt_check = BRANCH_HALT_VOTED,
2646 .clkr = {
2647 .enable_reg = 0x4b008,
2648 .enable_mask = BIT(5),
2649 .hw.init = &(const struct clk_init_data){
2650 .name = "gcc_pcie_1_slv_q2a_axi_clk",
2651 .ops = &clk_branch2_ops,
2652 },
2653 },
2654 };
2655
2656 static struct clk_branch gcc_pcie_clkref_en = {
2657 .halt_reg = 0x9746c,
2658 .halt_check = BRANCH_HALT_DELAY,
2659 .clkr = {
2660 .enable_reg = 0x9746c,
2661 .enable_mask = BIT(0),
2662 .hw.init = &(const struct clk_init_data){
2663 .name = "gcc_pcie_clkref_en",
2664 .ops = &clk_branch2_ops,
2665 },
2666 },
2667 };
2668
2669 static struct clk_branch gcc_pcie_throttle_cfg_clk = {
2670 .halt_reg = 0xb2034,
2671 .halt_check = BRANCH_HALT_VOTED,
2672 .clkr = {
2673 .enable_reg = 0x4b020,
2674 .enable_mask = BIT(15),
2675 .hw.init = &(const struct clk_init_data){
2676 .name = "gcc_pcie_throttle_cfg_clk",
2677 .ops = &clk_branch2_ops,
2678 },
2679 },
2680 };
2681
2682 static struct clk_branch gcc_pdm2_clk = {
2683 .halt_reg = 0x3f00c,
2684 .halt_check = BRANCH_HALT,
2685 .clkr = {
2686 .enable_reg = 0x3f00c,
2687 .enable_mask = BIT(0),
2688 .hw.init = &(const struct clk_init_data){
2689 .name = "gcc_pdm2_clk",
2690 .parent_hws = (const struct clk_hw*[]){
2691 &gcc_pdm2_clk_src.clkr.hw,
2692 },
2693 .num_parents = 1,
2694 .flags = CLK_SET_RATE_PARENT,
2695 .ops = &clk_branch2_ops,
2696 },
2697 },
2698 };
2699
2700 static struct clk_branch gcc_pdm_ahb_clk = {
2701 .halt_reg = 0x3f004,
2702 .halt_check = BRANCH_HALT_VOTED,
2703 .hwcg_reg = 0x3f004,
2704 .hwcg_bit = 1,
2705 .clkr = {
2706 .enable_reg = 0x3f004,
2707 .enable_mask = BIT(0),
2708 .hw.init = &(const struct clk_init_data){
2709 .name = "gcc_pdm_ahb_clk",
2710 .ops = &clk_branch2_ops,
2711 },
2712 },
2713 };
2714
2715 static struct clk_branch gcc_pdm_xo4_clk = {
2716 .halt_reg = 0x3f008,
2717 .halt_check = BRANCH_HALT,
2718 .clkr = {
2719 .enable_reg = 0x3f008,
2720 .enable_mask = BIT(0),
2721 .hw.init = &(const struct clk_init_data){
2722 .name = "gcc_pdm_xo4_clk",
2723 .ops = &clk_branch2_ops,
2724 },
2725 },
2726 };
2727
2728 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
2729 .halt_reg = 0x32008,
2730 .halt_check = BRANCH_HALT_VOTED,
2731 .hwcg_reg = 0x32008,
2732 .hwcg_bit = 1,
2733 .clkr = {
2734 .enable_reg = 0x32008,
2735 .enable_mask = BIT(0),
2736 .hw.init = &(const struct clk_init_data){
2737 .name = "gcc_qmip_camera_nrt_ahb_clk",
2738 .ops = &clk_branch2_ops,
2739 },
2740 },
2741 };
2742
2743 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
2744 .halt_reg = 0x3200c,
2745 .halt_check = BRANCH_HALT_VOTED,
2746 .hwcg_reg = 0x3200c,
2747 .hwcg_bit = 1,
2748 .clkr = {
2749 .enable_reg = 0x3200c,
2750 .enable_mask = BIT(0),
2751 .hw.init = &(const struct clk_init_data){
2752 .name = "gcc_qmip_camera_rt_ahb_clk",
2753 .ops = &clk_branch2_ops,
2754 },
2755 },
2756 };
2757
2758 static struct clk_branch gcc_qmip_disp1_ahb_clk = {
2759 .halt_reg = 0xc7008,
2760 .halt_check = BRANCH_HALT_VOTED,
2761 .hwcg_reg = 0xc7008,
2762 .hwcg_bit = 1,
2763 .clkr = {
2764 .enable_reg = 0xc7008,
2765 .enable_mask = BIT(0),
2766 .hw.init = &(const struct clk_init_data){
2767 .name = "gcc_qmip_disp1_ahb_clk",
2768 .ops = &clk_branch2_ops,
2769 },
2770 },
2771 };
2772
2773 static struct clk_branch gcc_qmip_disp1_rot_ahb_clk = {
2774 .halt_reg = 0xc700c,
2775 .halt_check = BRANCH_HALT_VOTED,
2776 .clkr = {
2777 .enable_reg = 0xc700c,
2778 .enable_mask = BIT(0),
2779 .hw.init = &(const struct clk_init_data){
2780 .name = "gcc_qmip_disp1_rot_ahb_clk",
2781 .ops = &clk_branch2_ops,
2782 },
2783 },
2784 };
2785
2786 static struct clk_branch gcc_qmip_disp_ahb_clk = {
2787 .halt_reg = 0x33008,
2788 .halt_check = BRANCH_HALT_VOTED,
2789 .hwcg_reg = 0x33008,
2790 .hwcg_bit = 1,
2791 .clkr = {
2792 .enable_reg = 0x33008,
2793 .enable_mask = BIT(0),
2794 .hw.init = &(const struct clk_init_data){
2795 .name = "gcc_qmip_disp_ahb_clk",
2796 .ops = &clk_branch2_ops,
2797 },
2798 },
2799 };
2800
2801 static struct clk_branch gcc_qmip_disp_rot_ahb_clk = {
2802 .halt_reg = 0x3300c,
2803 .halt_check = BRANCH_HALT_VOTED,
2804 .clkr = {
2805 .enable_reg = 0x3300c,
2806 .enable_mask = BIT(0),
2807 .hw.init = &(const struct clk_init_data){
2808 .name = "gcc_qmip_disp_rot_ahb_clk",
2809 .ops = &clk_branch2_ops,
2810 },
2811 },
2812 };
2813
2814 static struct clk_branch gcc_qmip_video_cvp_ahb_clk = {
2815 .halt_reg = 0x34008,
2816 .halt_check = BRANCH_HALT_VOTED,
2817 .hwcg_reg = 0x34008,
2818 .hwcg_bit = 1,
2819 .clkr = {
2820 .enable_reg = 0x34008,
2821 .enable_mask = BIT(0),
2822 .hw.init = &(const struct clk_init_data){
2823 .name = "gcc_qmip_video_cvp_ahb_clk",
2824 .ops = &clk_branch2_ops,
2825 },
2826 },
2827 };
2828
2829 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
2830 .halt_reg = 0x3400c,
2831 .halt_check = BRANCH_HALT_VOTED,
2832 .hwcg_reg = 0x3400c,
2833 .hwcg_bit = 1,
2834 .clkr = {
2835 .enable_reg = 0x3400c,
2836 .enable_mask = BIT(0),
2837 .hw.init = &(const struct clk_init_data){
2838 .name = "gcc_qmip_video_vcodec_ahb_clk",
2839 .ops = &clk_branch2_ops,
2840 },
2841 },
2842 };
2843
2844 static struct clk_branch gcc_qmip_video_vcpu_ahb_clk = {
2845 .halt_reg = 0x34010,
2846 .halt_check = BRANCH_HALT_VOTED,
2847 .hwcg_reg = 0x34010,
2848 .hwcg_bit = 1,
2849 .clkr = {
2850 .enable_reg = 0x34010,
2851 .enable_mask = BIT(0),
2852 .hw.init = &(const struct clk_init_data){
2853 .name = "gcc_qmip_video_vcpu_ahb_clk",
2854 .ops = &clk_branch2_ops,
2855 },
2856 },
2857 };
2858
2859 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
2860 .halt_reg = 0x23018,
2861 .halt_check = BRANCH_HALT_VOTED,
2862 .clkr = {
2863 .enable_reg = 0x4b008,
2864 .enable_mask = BIT(9),
2865 .hw.init = &(const struct clk_init_data){
2866 .name = "gcc_qupv3_wrap0_core_2x_clk",
2867 .ops = &clk_branch2_ops,
2868 },
2869 },
2870 };
2871
2872 static struct clk_branch gcc_qupv3_wrap0_core_clk = {
2873 .halt_reg = 0x2300c,
2874 .halt_check = BRANCH_HALT_VOTED,
2875 .clkr = {
2876 .enable_reg = 0x4b008,
2877 .enable_mask = BIT(8),
2878 .hw.init = &(const struct clk_init_data){
2879 .name = "gcc_qupv3_wrap0_core_clk",
2880 .ops = &clk_branch2_ops,
2881 },
2882 },
2883 };
2884
2885 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
2886 .halt_reg = 0x2314c,
2887 .halt_check = BRANCH_HALT_VOTED,
2888 .clkr = {
2889 .enable_reg = 0x4b008,
2890 .enable_mask = BIT(10),
2891 .hw.init = &(const struct clk_init_data){
2892 .name = "gcc_qupv3_wrap0_s0_clk",
2893 .parent_hws = (const struct clk_hw*[]){
2894 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
2895 },
2896 .num_parents = 1,
2897 .flags = CLK_SET_RATE_PARENT,
2898 .ops = &clk_branch2_ops,
2899 },
2900 },
2901 };
2902
2903 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
2904 .halt_reg = 0x23280,
2905 .halt_check = BRANCH_HALT_VOTED,
2906 .clkr = {
2907 .enable_reg = 0x4b008,
2908 .enable_mask = BIT(11),
2909 .hw.init = &(const struct clk_init_data){
2910 .name = "gcc_qupv3_wrap0_s1_clk",
2911 .parent_hws = (const struct clk_hw*[]){
2912 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
2913 },
2914 .num_parents = 1,
2915 .flags = CLK_SET_RATE_PARENT,
2916 .ops = &clk_branch2_ops,
2917 },
2918 },
2919 };
2920
2921 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
2922 .halt_reg = 0x233b4,
2923 .halt_check = BRANCH_HALT_VOTED,
2924 .clkr = {
2925 .enable_reg = 0x4b008,
2926 .enable_mask = BIT(12),
2927 .hw.init = &(const struct clk_init_data){
2928 .name = "gcc_qupv3_wrap0_s2_clk",
2929 .parent_hws = (const struct clk_hw*[]){
2930 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
2931 },
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_qupv3_wrap0_s3_clk = {
2940 .halt_reg = 0x234e8,
2941 .halt_check = BRANCH_HALT_VOTED,
2942 .clkr = {
2943 .enable_reg = 0x4b008,
2944 .enable_mask = BIT(13),
2945 .hw.init = &(const struct clk_init_data){
2946 .name = "gcc_qupv3_wrap0_s3_clk",
2947 .parent_hws = (const struct clk_hw*[]){
2948 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
2949 },
2950 .num_parents = 1,
2951 .flags = CLK_SET_RATE_PARENT,
2952 .ops = &clk_branch2_ops,
2953 },
2954 },
2955 };
2956
2957 static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
2958 .halt_reg = 0x2361c,
2959 .halt_check = BRANCH_HALT_VOTED,
2960 .clkr = {
2961 .enable_reg = 0x4b008,
2962 .enable_mask = BIT(14),
2963 .hw.init = &(const struct clk_init_data){
2964 .name = "gcc_qupv3_wrap0_s4_clk",
2965 .parent_hws = (const struct clk_hw*[]){
2966 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
2967 },
2968 .num_parents = 1,
2969 .flags = CLK_SET_RATE_PARENT,
2970 .ops = &clk_branch2_ops,
2971 },
2972 },
2973 };
2974
2975 static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
2976 .halt_reg = 0x23750,
2977 .halt_check = BRANCH_HALT_VOTED,
2978 .clkr = {
2979 .enable_reg = 0x4b008,
2980 .enable_mask = BIT(15),
2981 .hw.init = &(const struct clk_init_data){
2982 .name = "gcc_qupv3_wrap0_s5_clk",
2983 .parent_hws = (const struct clk_hw*[]){
2984 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
2985 },
2986 .num_parents = 1,
2987 .flags = CLK_SET_RATE_PARENT,
2988 .ops = &clk_branch2_ops,
2989 },
2990 },
2991 };
2992
2993 static struct clk_branch gcc_qupv3_wrap0_s6_clk = {
2994 .halt_reg = 0x23884,
2995 .halt_check = BRANCH_HALT_VOTED,
2996 .clkr = {
2997 .enable_reg = 0x4b008,
2998 .enable_mask = BIT(16),
2999 .hw.init = &(const struct clk_init_data){
3000 .name = "gcc_qupv3_wrap0_s6_clk",
3001 .parent_hws = (const struct clk_hw*[]){
3002 &gcc_qupv3_wrap0_s6_clk_src.clkr.hw,
3003 },
3004 .num_parents = 1,
3005 .flags = CLK_SET_RATE_PARENT,
3006 .ops = &clk_branch2_ops,
3007 },
3008 },
3009 };
3010
3011 static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
3012 .halt_reg = 0x24018,
3013 .halt_check = BRANCH_HALT_VOTED,
3014 .clkr = {
3015 .enable_reg = 0x4b008,
3016 .enable_mask = BIT(18),
3017 .hw.init = &(const struct clk_init_data){
3018 .name = "gcc_qupv3_wrap1_core_2x_clk",
3019 .ops = &clk_branch2_ops,
3020 },
3021 },
3022 };
3023
3024 static struct clk_branch gcc_qupv3_wrap1_core_clk = {
3025 .halt_reg = 0x2400c,
3026 .halt_check = BRANCH_HALT_VOTED,
3027 .clkr = {
3028 .enable_reg = 0x4b008,
3029 .enable_mask = BIT(19),
3030 .hw.init = &(const struct clk_init_data){
3031 .name = "gcc_qupv3_wrap1_core_clk",
3032 .ops = &clk_branch2_ops,
3033 },
3034 },
3035 };
3036
3037 static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
3038 .halt_reg = 0x2414c,
3039 .halt_check = BRANCH_HALT_VOTED,
3040 .clkr = {
3041 .enable_reg = 0x4b008,
3042 .enable_mask = BIT(22),
3043 .hw.init = &(const struct clk_init_data){
3044 .name = "gcc_qupv3_wrap1_s0_clk",
3045 .parent_hws = (const struct clk_hw*[]){
3046 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
3047 },
3048 .num_parents = 1,
3049 .flags = CLK_SET_RATE_PARENT,
3050 .ops = &clk_branch2_ops,
3051 },
3052 },
3053 };
3054
3055 static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
3056 .halt_reg = 0x24280,
3057 .halt_check = BRANCH_HALT_VOTED,
3058 .clkr = {
3059 .enable_reg = 0x4b008,
3060 .enable_mask = BIT(23),
3061 .hw.init = &(const struct clk_init_data){
3062 .name = "gcc_qupv3_wrap1_s1_clk",
3063 .parent_hws = (const struct clk_hw*[]){
3064 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
3065 },
3066 .num_parents = 1,
3067 .flags = CLK_SET_RATE_PARENT,
3068 .ops = &clk_branch2_ops,
3069 },
3070 },
3071 };
3072
3073 static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
3074 .halt_reg = 0x243b4,
3075 .halt_check = BRANCH_HALT_VOTED,
3076 .clkr = {
3077 .enable_reg = 0x4b008,
3078 .enable_mask = BIT(24),
3079 .hw.init = &(const struct clk_init_data){
3080 .name = "gcc_qupv3_wrap1_s2_clk",
3081 .parent_hws = (const struct clk_hw*[]){
3082 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
3083 },
3084 .num_parents = 1,
3085 .flags = CLK_SET_RATE_PARENT,
3086 .ops = &clk_branch2_ops,
3087 },
3088 },
3089 };
3090
3091 static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
3092 .halt_reg = 0x244e8,
3093 .halt_check = BRANCH_HALT_VOTED,
3094 .clkr = {
3095 .enable_reg = 0x4b008,
3096 .enable_mask = BIT(25),
3097 .hw.init = &(const struct clk_init_data){
3098 .name = "gcc_qupv3_wrap1_s3_clk",
3099 .parent_hws = (const struct clk_hw*[]){
3100 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
3101 },
3102 .num_parents = 1,
3103 .flags = CLK_SET_RATE_PARENT,
3104 .ops = &clk_branch2_ops,
3105 },
3106 },
3107 };
3108
3109 static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
3110 .halt_reg = 0x2461c,
3111 .halt_check = BRANCH_HALT_VOTED,
3112 .clkr = {
3113 .enable_reg = 0x4b008,
3114 .enable_mask = BIT(26),
3115 .hw.init = &(const struct clk_init_data){
3116 .name = "gcc_qupv3_wrap1_s4_clk",
3117 .parent_hws = (const struct clk_hw*[]){
3118 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
3119 },
3120 .num_parents = 1,
3121 .flags = CLK_SET_RATE_PARENT,
3122 .ops = &clk_branch2_ops,
3123 },
3124 },
3125 };
3126
3127 static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
3128 .halt_reg = 0x24750,
3129 .halt_check = BRANCH_HALT_VOTED,
3130 .clkr = {
3131 .enable_reg = 0x4b008,
3132 .enable_mask = BIT(27),
3133 .hw.init = &(const struct clk_init_data){
3134 .name = "gcc_qupv3_wrap1_s5_clk",
3135 .parent_hws = (const struct clk_hw*[]){
3136 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
3137 },
3138 .num_parents = 1,
3139 .flags = CLK_SET_RATE_PARENT,
3140 .ops = &clk_branch2_ops,
3141 },
3142 },
3143 };
3144
3145 static struct clk_branch gcc_qupv3_wrap1_s6_clk = {
3146 .halt_reg = 0x24884,
3147 .halt_check = BRANCH_HALT_VOTED,
3148 .clkr = {
3149 .enable_reg = 0x4b018,
3150 .enable_mask = BIT(27),
3151 .hw.init = &(const struct clk_init_data){
3152 .name = "gcc_qupv3_wrap1_s6_clk",
3153 .parent_hws = (const struct clk_hw*[]){
3154 &gcc_qupv3_wrap1_s6_clk_src.clkr.hw,
3155 },
3156 .num_parents = 1,
3157 .flags = CLK_SET_RATE_PARENT,
3158 .ops = &clk_branch2_ops,
3159 },
3160 },
3161 };
3162
3163 static struct clk_branch gcc_qupv3_wrap2_core_2x_clk = {
3164 .halt_reg = 0x2a018,
3165 .halt_check = BRANCH_HALT_VOTED,
3166 .clkr = {
3167 .enable_reg = 0x4b010,
3168 .enable_mask = BIT(3),
3169 .hw.init = &(const struct clk_init_data){
3170 .name = "gcc_qupv3_wrap2_core_2x_clk",
3171 .ops = &clk_branch2_ops,
3172 },
3173 },
3174 };
3175
3176 static struct clk_branch gcc_qupv3_wrap2_core_clk = {
3177 .halt_reg = 0x2a00c,
3178 .halt_check = BRANCH_HALT_VOTED,
3179 .clkr = {
3180 .enable_reg = 0x4b010,
3181 .enable_mask = BIT(0),
3182 .hw.init = &(const struct clk_init_data){
3183 .name = "gcc_qupv3_wrap2_core_clk",
3184 .ops = &clk_branch2_ops,
3185 },
3186 },
3187 };
3188
3189 static struct clk_branch gcc_qupv3_wrap2_s0_clk = {
3190 .halt_reg = 0x2a14c,
3191 .halt_check = BRANCH_HALT_VOTED,
3192 .clkr = {
3193 .enable_reg = 0x4b010,
3194 .enable_mask = BIT(4),
3195 .hw.init = &(const struct clk_init_data){
3196 .name = "gcc_qupv3_wrap2_s0_clk",
3197 .parent_hws = (const struct clk_hw*[]){
3198 &gcc_qupv3_wrap2_s0_clk_src.clkr.hw,
3199 },
3200 .num_parents = 1,
3201 .flags = CLK_SET_RATE_PARENT,
3202 .ops = &clk_branch2_ops,
3203 },
3204 },
3205 };
3206
3207 static struct clk_branch gcc_qupv3_wrap2_s1_clk = {
3208 .halt_reg = 0x2a280,
3209 .halt_check = BRANCH_HALT_VOTED,
3210 .clkr = {
3211 .enable_reg = 0x4b010,
3212 .enable_mask = BIT(5),
3213 .hw.init = &(const struct clk_init_data){
3214 .name = "gcc_qupv3_wrap2_s1_clk",
3215 .parent_hws = (const struct clk_hw*[]){
3216 &gcc_qupv3_wrap2_s1_clk_src.clkr.hw,
3217 },
3218 .num_parents = 1,
3219 .flags = CLK_SET_RATE_PARENT,
3220 .ops = &clk_branch2_ops,
3221 },
3222 },
3223 };
3224
3225 static struct clk_branch gcc_qupv3_wrap2_s2_clk = {
3226 .halt_reg = 0x2a3b4,
3227 .halt_check = BRANCH_HALT_VOTED,
3228 .clkr = {
3229 .enable_reg = 0x4b010,
3230 .enable_mask = BIT(6),
3231 .hw.init = &(const struct clk_init_data){
3232 .name = "gcc_qupv3_wrap2_s2_clk",
3233 .parent_hws = (const struct clk_hw*[]){
3234 &gcc_qupv3_wrap2_s2_clk_src.clkr.hw,
3235 },
3236 .num_parents = 1,
3237 .flags = CLK_SET_RATE_PARENT,
3238 .ops = &clk_branch2_ops,
3239 },
3240 },
3241 };
3242
3243 static struct clk_branch gcc_qupv3_wrap2_s3_clk = {
3244 .halt_reg = 0x2a4e8,
3245 .halt_check = BRANCH_HALT_VOTED,
3246 .clkr = {
3247 .enable_reg = 0x4b010,
3248 .enable_mask = BIT(7),
3249 .hw.init = &(const struct clk_init_data){
3250 .name = "gcc_qupv3_wrap2_s3_clk",
3251 .parent_hws = (const struct clk_hw*[]){
3252 &gcc_qupv3_wrap2_s3_clk_src.clkr.hw,
3253 },
3254 .num_parents = 1,
3255 .flags = CLK_SET_RATE_PARENT,
3256 .ops = &clk_branch2_ops,
3257 },
3258 },
3259 };
3260
3261 static struct clk_branch gcc_qupv3_wrap2_s4_clk = {
3262 .halt_reg = 0x2a61c,
3263 .halt_check = BRANCH_HALT_VOTED,
3264 .clkr = {
3265 .enable_reg = 0x4b010,
3266 .enable_mask = BIT(8),
3267 .hw.init = &(const struct clk_init_data){
3268 .name = "gcc_qupv3_wrap2_s4_clk",
3269 .parent_hws = (const struct clk_hw*[]){
3270 &gcc_qupv3_wrap2_s4_clk_src.clkr.hw,
3271 },
3272 .num_parents = 1,
3273 .flags = CLK_SET_RATE_PARENT,
3274 .ops = &clk_branch2_ops,
3275 },
3276 },
3277 };
3278
3279 static struct clk_branch gcc_qupv3_wrap2_s5_clk = {
3280 .halt_reg = 0x2a750,
3281 .halt_check = BRANCH_HALT_VOTED,
3282 .clkr = {
3283 .enable_reg = 0x4b010,
3284 .enable_mask = BIT(9),
3285 .hw.init = &(const struct clk_init_data){
3286 .name = "gcc_qupv3_wrap2_s5_clk",
3287 .parent_hws = (const struct clk_hw*[]){
3288 &gcc_qupv3_wrap2_s5_clk_src.clkr.hw,
3289 },
3290 .num_parents = 1,
3291 .flags = CLK_SET_RATE_PARENT,
3292 .ops = &clk_branch2_ops,
3293 },
3294 },
3295 };
3296
3297 static struct clk_branch gcc_qupv3_wrap2_s6_clk = {
3298 .halt_reg = 0x2a884,
3299 .halt_check = BRANCH_HALT_VOTED,
3300 .clkr = {
3301 .enable_reg = 0x4b018,
3302 .enable_mask = BIT(29),
3303 .hw.init = &(const struct clk_init_data){
3304 .name = "gcc_qupv3_wrap2_s6_clk",
3305 .parent_hws = (const struct clk_hw*[]){
3306 &gcc_qupv3_wrap2_s6_clk_src.clkr.hw,
3307 },
3308 .num_parents = 1,
3309 .flags = CLK_SET_RATE_PARENT,
3310 .ops = &clk_branch2_ops,
3311 },
3312 },
3313 };
3314
3315 static struct clk_branch gcc_qupv3_wrap3_core_2x_clk = {
3316 .halt_reg = 0xc4018,
3317 .halt_check = BRANCH_HALT_VOTED,
3318 .clkr = {
3319 .enable_reg = 0x4b000,
3320 .enable_mask = BIT(24),
3321 .hw.init = &(const struct clk_init_data){
3322 .name = "gcc_qupv3_wrap3_core_2x_clk",
3323 .ops = &clk_branch2_ops,
3324 },
3325 },
3326 };
3327
3328 static struct clk_branch gcc_qupv3_wrap3_core_clk = {
3329 .halt_reg = 0xc400c,
3330 .halt_check = BRANCH_HALT_VOTED,
3331 .clkr = {
3332 .enable_reg = 0x4b000,
3333 .enable_mask = BIT(23),
3334 .hw.init = &(const struct clk_init_data){
3335 .name = "gcc_qupv3_wrap3_core_clk",
3336 .ops = &clk_branch2_ops,
3337 },
3338 },
3339 };
3340
3341 static struct clk_branch gcc_qupv3_wrap3_qspi_clk = {
3342 .halt_reg = 0xc4280,
3343 .halt_check = BRANCH_HALT_VOTED,
3344 .clkr = {
3345 .enable_reg = 0x4b000,
3346 .enable_mask = BIT(26),
3347 .hw.init = &(const struct clk_init_data){
3348 .name = "gcc_qupv3_wrap3_qspi_clk",
3349 .parent_hws = (const struct clk_hw*[]){
3350 &gcc_qupv3_wrap3_s0_clk_src.clkr.hw,
3351 },
3352 .num_parents = 1,
3353 .flags = CLK_SET_RATE_PARENT,
3354 .ops = &clk_branch2_ops,
3355 },
3356 },
3357 };
3358
3359 static struct clk_branch gcc_qupv3_wrap3_s0_clk = {
3360 .halt_reg = 0xc414c,
3361 .halt_check = BRANCH_HALT_VOTED,
3362 .clkr = {
3363 .enable_reg = 0x4b000,
3364 .enable_mask = BIT(25),
3365 .hw.init = &(const struct clk_init_data){
3366 .name = "gcc_qupv3_wrap3_s0_clk",
3367 .parent_hws = (const struct clk_hw*[]){
3368 &gcc_qupv3_wrap3_s0_div_clk_src.clkr.hw,
3369 },
3370 .num_parents = 1,
3371 .flags = CLK_SET_RATE_PARENT,
3372 .ops = &clk_branch2_ops,
3373 },
3374 },
3375 };
3376
3377 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
3378 .halt_reg = 0x23004,
3379 .halt_check = BRANCH_HALT_VOTED,
3380 .hwcg_reg = 0x23004,
3381 .hwcg_bit = 1,
3382 .clkr = {
3383 .enable_reg = 0x4b008,
3384 .enable_mask = BIT(6),
3385 .hw.init = &(const struct clk_init_data){
3386 .name = "gcc_qupv3_wrap_0_m_ahb_clk",
3387 .ops = &clk_branch2_ops,
3388 },
3389 },
3390 };
3391
3392 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
3393 .halt_reg = 0x23008,
3394 .halt_check = BRANCH_HALT_VOTED,
3395 .hwcg_reg = 0x23008,
3396 .hwcg_bit = 1,
3397 .clkr = {
3398 .enable_reg = 0x4b008,
3399 .enable_mask = BIT(7),
3400 .hw.init = &(const struct clk_init_data){
3401 .name = "gcc_qupv3_wrap_0_s_ahb_clk",
3402 .ops = &clk_branch2_ops,
3403 },
3404 },
3405 };
3406
3407 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
3408 .halt_reg = 0x24004,
3409 .halt_check = BRANCH_HALT_VOTED,
3410 .hwcg_reg = 0x24004,
3411 .hwcg_bit = 1,
3412 .clkr = {
3413 .enable_reg = 0x4b008,
3414 .enable_mask = BIT(20),
3415 .hw.init = &(const struct clk_init_data){
3416 .name = "gcc_qupv3_wrap_1_m_ahb_clk",
3417 .ops = &clk_branch2_ops,
3418 },
3419 },
3420 };
3421
3422 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
3423 .halt_reg = 0x24008,
3424 .halt_check = BRANCH_HALT_VOTED,
3425 .hwcg_reg = 0x24008,
3426 .hwcg_bit = 1,
3427 .clkr = {
3428 .enable_reg = 0x4b008,
3429 .enable_mask = BIT(21),
3430 .hw.init = &(const struct clk_init_data){
3431 .name = "gcc_qupv3_wrap_1_s_ahb_clk",
3432 .ops = &clk_branch2_ops,
3433 },
3434 },
3435 };
3436
3437 static struct clk_branch gcc_qupv3_wrap_2_m_ahb_clk = {
3438 .halt_reg = 0x2a004,
3439 .halt_check = BRANCH_HALT_VOTED,
3440 .hwcg_reg = 0x2a004,
3441 .hwcg_bit = 1,
3442 .clkr = {
3443 .enable_reg = 0x4b010,
3444 .enable_mask = BIT(2),
3445 .hw.init = &(const struct clk_init_data){
3446 .name = "gcc_qupv3_wrap_2_m_ahb_clk",
3447 .ops = &clk_branch2_ops,
3448 },
3449 },
3450 };
3451
3452 static struct clk_branch gcc_qupv3_wrap_2_s_ahb_clk = {
3453 .halt_reg = 0x2a008,
3454 .halt_check = BRANCH_HALT_VOTED,
3455 .hwcg_reg = 0x2a008,
3456 .hwcg_bit = 1,
3457 .clkr = {
3458 .enable_reg = 0x4b010,
3459 .enable_mask = BIT(1),
3460 .hw.init = &(const struct clk_init_data){
3461 .name = "gcc_qupv3_wrap_2_s_ahb_clk",
3462 .ops = &clk_branch2_ops,
3463 },
3464 },
3465 };
3466
3467 static struct clk_branch gcc_qupv3_wrap_3_m_ahb_clk = {
3468 .halt_reg = 0xc4004,
3469 .halt_check = BRANCH_HALT_VOTED,
3470 .hwcg_reg = 0xc4004,
3471 .hwcg_bit = 1,
3472 .clkr = {
3473 .enable_reg = 0x4b000,
3474 .enable_mask = BIT(27),
3475 .hw.init = &(const struct clk_init_data){
3476 .name = "gcc_qupv3_wrap_3_m_ahb_clk",
3477 .ops = &clk_branch2_ops,
3478 },
3479 },
3480 };
3481
3482 static struct clk_branch gcc_qupv3_wrap_3_s_ahb_clk = {
3483 .halt_reg = 0xc4008,
3484 .halt_check = BRANCH_HALT_VOTED,
3485 .hwcg_reg = 0xc4008,
3486 .hwcg_bit = 1,
3487 .clkr = {
3488 .enable_reg = 0x4b000,
3489 .enable_mask = BIT(20),
3490 .hw.init = &(const struct clk_init_data){
3491 .name = "gcc_qupv3_wrap_3_s_ahb_clk",
3492 .ops = &clk_branch2_ops,
3493 },
3494 },
3495 };
3496
3497 static struct clk_branch gcc_sdcc1_ahb_clk = {
3498 .halt_reg = 0x2000c,
3499 .halt_check = BRANCH_HALT,
3500 .clkr = {
3501 .enable_reg = 0x2000c,
3502 .enable_mask = BIT(0),
3503 .hw.init = &(const struct clk_init_data){
3504 .name = "gcc_sdcc1_ahb_clk",
3505 .ops = &clk_branch2_ops,
3506 },
3507 },
3508 };
3509
3510 static struct clk_branch gcc_sdcc1_apps_clk = {
3511 .halt_reg = 0x20004,
3512 .halt_check = BRANCH_HALT,
3513 .clkr = {
3514 .enable_reg = 0x20004,
3515 .enable_mask = BIT(0),
3516 .hw.init = &(const struct clk_init_data){
3517 .name = "gcc_sdcc1_apps_clk",
3518 .parent_hws = (const struct clk_hw*[]){
3519 &gcc_sdcc1_apps_clk_src.clkr.hw,
3520 },
3521 .num_parents = 1,
3522 .flags = CLK_SET_RATE_PARENT,
3523 .ops = &clk_branch2_ops,
3524 },
3525 },
3526 };
3527
3528 static struct clk_branch gcc_sdcc1_ice_core_clk = {
3529 .halt_reg = 0x20044,
3530 .halt_check = BRANCH_HALT_VOTED,
3531 .hwcg_reg = 0x20044,
3532 .hwcg_bit = 1,
3533 .clkr = {
3534 .enable_reg = 0x20044,
3535 .enable_mask = BIT(0),
3536 .hw.init = &(const struct clk_init_data){
3537 .name = "gcc_sdcc1_ice_core_clk",
3538 .parent_hws = (const struct clk_hw*[]){
3539 &gcc_sdcc1_ice_core_clk_src.clkr.hw,
3540 },
3541 .num_parents = 1,
3542 .flags = CLK_SET_RATE_PARENT,
3543 .ops = &clk_branch2_ops,
3544 },
3545 },
3546 };
3547
3548 static struct clk_branch gcc_sgmi_clkref_en = {
3549 .halt_reg = 0x9c034,
3550 .halt_check = BRANCH_HALT_DELAY,
3551 .clkr = {
3552 .enable_reg = 0x9c034,
3553 .enable_mask = BIT(0),
3554 .hw.init = &(const struct clk_init_data){
3555 .name = "gcc_sgmi_clkref_en",
3556 .ops = &clk_branch2_ops,
3557 },
3558 },
3559 };
3560
3561 static struct clk_branch gcc_tscss_ahb_clk = {
3562 .halt_reg = 0x21024,
3563 .halt_check = BRANCH_HALT,
3564 .clkr = {
3565 .enable_reg = 0x21024,
3566 .enable_mask = BIT(0),
3567 .hw.init = &(const struct clk_init_data){
3568 .name = "gcc_tscss_ahb_clk",
3569 .ops = &clk_branch2_ops,
3570 },
3571 },
3572 };
3573
3574 static struct clk_branch gcc_tscss_etu_clk = {
3575 .halt_reg = 0x21020,
3576 .halt_check = BRANCH_HALT,
3577 .clkr = {
3578 .enable_reg = 0x21020,
3579 .enable_mask = BIT(0),
3580 .hw.init = &(const struct clk_init_data){
3581 .name = "gcc_tscss_etu_clk",
3582 .ops = &clk_branch2_ops,
3583 },
3584 },
3585 };
3586
3587 static struct clk_branch gcc_tscss_global_cntr_clk = {
3588 .halt_reg = 0x21004,
3589 .halt_check = BRANCH_HALT_VOTED,
3590 .clkr = {
3591 .enable_reg = 0x21004,
3592 .enable_mask = BIT(0),
3593 .hw.init = &(const struct clk_init_data){
3594 .name = "gcc_tscss_global_cntr_clk",
3595 .parent_hws = (const struct clk_hw*[]){
3596 &gcc_tscss_cntr_clk_src.clkr.hw,
3597 },
3598 .num_parents = 1,
3599 .flags = CLK_SET_RATE_PARENT,
3600 .ops = &clk_branch2_ops,
3601 },
3602 },
3603 };
3604
3605 static struct clk_branch gcc_ufs_card_ahb_clk = {
3606 .halt_reg = 0x81020,
3607 .halt_check = BRANCH_HALT_VOTED,
3608 .hwcg_reg = 0x81020,
3609 .hwcg_bit = 1,
3610 .clkr = {
3611 .enable_reg = 0x81020,
3612 .enable_mask = BIT(0),
3613 .hw.init = &(const struct clk_init_data){
3614 .name = "gcc_ufs_card_ahb_clk",
3615 .ops = &clk_branch2_ops,
3616 },
3617 },
3618 };
3619
3620 static struct clk_branch gcc_ufs_card_axi_clk = {
3621 .halt_reg = 0x81018,
3622 .halt_check = BRANCH_HALT_VOTED,
3623 .hwcg_reg = 0x81018,
3624 .hwcg_bit = 1,
3625 .clkr = {
3626 .enable_reg = 0x81018,
3627 .enable_mask = BIT(0),
3628 .hw.init = &(const struct clk_init_data){
3629 .name = "gcc_ufs_card_axi_clk",
3630 .parent_hws = (const struct clk_hw*[]){
3631 &gcc_ufs_card_axi_clk_src.clkr.hw,
3632 },
3633 .num_parents = 1,
3634 .flags = CLK_SET_RATE_PARENT,
3635 .ops = &clk_branch2_ops,
3636 },
3637 },
3638 };
3639
3640 static struct clk_branch gcc_ufs_card_ice_core_clk = {
3641 .halt_reg = 0x8106c,
3642 .halt_check = BRANCH_HALT_VOTED,
3643 .hwcg_reg = 0x8106c,
3644 .hwcg_bit = 1,
3645 .clkr = {
3646 .enable_reg = 0x8106c,
3647 .enable_mask = BIT(0),
3648 .hw.init = &(const struct clk_init_data){
3649 .name = "gcc_ufs_card_ice_core_clk",
3650 .parent_hws = (const struct clk_hw*[]){
3651 &gcc_ufs_card_ice_core_clk_src.clkr.hw,
3652 },
3653 .num_parents = 1,
3654 .flags = CLK_SET_RATE_PARENT,
3655 .ops = &clk_branch2_ops,
3656 },
3657 },
3658 };
3659
3660 static struct clk_branch gcc_ufs_card_phy_aux_clk = {
3661 .halt_reg = 0x810a4,
3662 .halt_check = BRANCH_HALT_VOTED,
3663 .hwcg_reg = 0x810a4,
3664 .hwcg_bit = 1,
3665 .clkr = {
3666 .enable_reg = 0x810a4,
3667 .enable_mask = BIT(0),
3668 .hw.init = &(const struct clk_init_data){
3669 .name = "gcc_ufs_card_phy_aux_clk",
3670 .parent_hws = (const struct clk_hw*[]){
3671 &gcc_ufs_card_phy_aux_clk_src.clkr.hw,
3672 },
3673 .num_parents = 1,
3674 .flags = CLK_SET_RATE_PARENT,
3675 .ops = &clk_branch2_ops,
3676 },
3677 },
3678 };
3679
3680 static struct clk_branch gcc_ufs_card_rx_symbol_0_clk = {
3681 .halt_reg = 0x81028,
3682 .halt_check = BRANCH_HALT_DELAY,
3683 .clkr = {
3684 .enable_reg = 0x81028,
3685 .enable_mask = BIT(0),
3686 .hw.init = &(const struct clk_init_data){
3687 .name = "gcc_ufs_card_rx_symbol_0_clk",
3688 .parent_hws = (const struct clk_hw*[]){
3689 &gcc_ufs_card_rx_symbol_0_clk_src.clkr.hw,
3690 },
3691 .num_parents = 1,
3692 .flags = CLK_SET_RATE_PARENT,
3693 .ops = &clk_branch2_ops,
3694 },
3695 },
3696 };
3697
3698 static struct clk_branch gcc_ufs_card_rx_symbol_1_clk = {
3699 .halt_reg = 0x810c0,
3700 .halt_check = BRANCH_HALT_DELAY,
3701 .clkr = {
3702 .enable_reg = 0x810c0,
3703 .enable_mask = BIT(0),
3704 .hw.init = &(const struct clk_init_data){
3705 .name = "gcc_ufs_card_rx_symbol_1_clk",
3706 .parent_hws = (const struct clk_hw*[]){
3707 &gcc_ufs_card_rx_symbol_1_clk_src.clkr.hw,
3708 },
3709 .num_parents = 1,
3710 .flags = CLK_SET_RATE_PARENT,
3711 .ops = &clk_branch2_ops,
3712 },
3713 },
3714 };
3715
3716 static struct clk_branch gcc_ufs_card_tx_symbol_0_clk = {
3717 .halt_reg = 0x81024,
3718 .halt_check = BRANCH_HALT_DELAY,
3719 .clkr = {
3720 .enable_reg = 0x81024,
3721 .enable_mask = BIT(0),
3722 .hw.init = &(const struct clk_init_data){
3723 .name = "gcc_ufs_card_tx_symbol_0_clk",
3724 .parent_hws = (const struct clk_hw*[]){
3725 &gcc_ufs_card_tx_symbol_0_clk_src.clkr.hw,
3726 },
3727 .num_parents = 1,
3728 .flags = CLK_SET_RATE_PARENT,
3729 .ops = &clk_branch2_ops,
3730 },
3731 },
3732 };
3733
3734 static struct clk_branch gcc_ufs_card_unipro_core_clk = {
3735 .halt_reg = 0x81064,
3736 .halt_check = BRANCH_HALT_VOTED,
3737 .hwcg_reg = 0x81064,
3738 .hwcg_bit = 1,
3739 .clkr = {
3740 .enable_reg = 0x81064,
3741 .enable_mask = BIT(0),
3742 .hw.init = &(const struct clk_init_data){
3743 .name = "gcc_ufs_card_unipro_core_clk",
3744 .parent_hws = (const struct clk_hw*[]){
3745 &gcc_ufs_card_unipro_core_clk_src.clkr.hw,
3746 },
3747 .num_parents = 1,
3748 .flags = CLK_SET_RATE_PARENT,
3749 .ops = &clk_branch2_ops,
3750 },
3751 },
3752 };
3753
3754 static struct clk_branch gcc_ufs_phy_ahb_clk = {
3755 .halt_reg = 0x83020,
3756 .halt_check = BRANCH_HALT_VOTED,
3757 .hwcg_reg = 0x83020,
3758 .hwcg_bit = 1,
3759 .clkr = {
3760 .enable_reg = 0x83020,
3761 .enable_mask = BIT(0),
3762 .hw.init = &(const struct clk_init_data){
3763 .name = "gcc_ufs_phy_ahb_clk",
3764 .ops = &clk_branch2_ops,
3765 },
3766 },
3767 };
3768
3769 static struct clk_branch gcc_ufs_phy_axi_clk = {
3770 .halt_reg = 0x83018,
3771 .halt_check = BRANCH_HALT_VOTED,
3772 .hwcg_reg = 0x83018,
3773 .hwcg_bit = 1,
3774 .clkr = {
3775 .enable_reg = 0x83018,
3776 .enable_mask = BIT(0),
3777 .hw.init = &(const struct clk_init_data){
3778 .name = "gcc_ufs_phy_axi_clk",
3779 .parent_hws = (const struct clk_hw*[]){
3780 &gcc_ufs_phy_axi_clk_src.clkr.hw,
3781 },
3782 .num_parents = 1,
3783 .flags = CLK_SET_RATE_PARENT,
3784 .ops = &clk_branch2_ops,
3785 },
3786 },
3787 };
3788
3789 static struct clk_branch gcc_ufs_phy_ice_core_clk = {
3790 .halt_reg = 0x8306c,
3791 .halt_check = BRANCH_HALT_VOTED,
3792 .hwcg_reg = 0x8306c,
3793 .hwcg_bit = 1,
3794 .clkr = {
3795 .enable_reg = 0x8306c,
3796 .enable_mask = BIT(0),
3797 .hw.init = &(const struct clk_init_data){
3798 .name = "gcc_ufs_phy_ice_core_clk",
3799 .parent_hws = (const struct clk_hw*[]){
3800 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
3801 },
3802 .num_parents = 1,
3803 .flags = CLK_SET_RATE_PARENT,
3804 .ops = &clk_branch2_ops,
3805 },
3806 },
3807 };
3808
3809 static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
3810 .halt_reg = 0x830a4,
3811 .halt_check = BRANCH_HALT_VOTED,
3812 .hwcg_reg = 0x830a4,
3813 .hwcg_bit = 1,
3814 .clkr = {
3815 .enable_reg = 0x830a4,
3816 .enable_mask = BIT(0),
3817 .hw.init = &(const struct clk_init_data){
3818 .name = "gcc_ufs_phy_phy_aux_clk",
3819 .parent_hws = (const struct clk_hw*[]){
3820 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
3821 },
3822 .num_parents = 1,
3823 .flags = CLK_SET_RATE_PARENT,
3824 .ops = &clk_branch2_ops,
3825 },
3826 },
3827 };
3828
3829 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
3830 .halt_reg = 0x83028,
3831 .halt_check = BRANCH_HALT_DELAY,
3832 .clkr = {
3833 .enable_reg = 0x83028,
3834 .enable_mask = BIT(0),
3835 .hw.init = &(const struct clk_init_data){
3836 .name = "gcc_ufs_phy_rx_symbol_0_clk",
3837 .parent_hws = (const struct clk_hw*[]){
3838 &gcc_ufs_phy_rx_symbol_0_clk_src.clkr.hw,
3839 },
3840 .num_parents = 1,
3841 .flags = CLK_SET_RATE_PARENT,
3842 .ops = &clk_branch2_ops,
3843 },
3844 },
3845 };
3846
3847 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
3848 .halt_reg = 0x830c0,
3849 .halt_check = BRANCH_HALT_DELAY,
3850 .clkr = {
3851 .enable_reg = 0x830c0,
3852 .enable_mask = BIT(0),
3853 .hw.init = &(const struct clk_init_data){
3854 .name = "gcc_ufs_phy_rx_symbol_1_clk",
3855 .parent_hws = (const struct clk_hw*[]){
3856 &gcc_ufs_phy_rx_symbol_1_clk_src.clkr.hw,
3857 },
3858 .num_parents = 1,
3859 .flags = CLK_SET_RATE_PARENT,
3860 .ops = &clk_branch2_ops,
3861 },
3862 },
3863 };
3864
3865 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
3866 .halt_reg = 0x83024,
3867 .halt_check = BRANCH_HALT_DELAY,
3868 .clkr = {
3869 .enable_reg = 0x83024,
3870 .enable_mask = BIT(0),
3871 .hw.init = &(const struct clk_init_data){
3872 .name = "gcc_ufs_phy_tx_symbol_0_clk",
3873 .parent_hws = (const struct clk_hw*[]){
3874 &gcc_ufs_phy_tx_symbol_0_clk_src.clkr.hw,
3875 },
3876 .num_parents = 1,
3877 .flags = CLK_SET_RATE_PARENT,
3878 .ops = &clk_branch2_ops,
3879 },
3880 },
3881 };
3882
3883 static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
3884 .halt_reg = 0x83064,
3885 .halt_check = BRANCH_HALT_VOTED,
3886 .hwcg_reg = 0x83064,
3887 .hwcg_bit = 1,
3888 .clkr = {
3889 .enable_reg = 0x83064,
3890 .enable_mask = BIT(0),
3891 .hw.init = &(const struct clk_init_data){
3892 .name = "gcc_ufs_phy_unipro_core_clk",
3893 .parent_hws = (const struct clk_hw*[]){
3894 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
3895 },
3896 .num_parents = 1,
3897 .flags = CLK_SET_RATE_PARENT,
3898 .ops = &clk_branch2_ops,
3899 },
3900 },
3901 };
3902
3903 static struct clk_branch gcc_usb20_master_clk = {
3904 .halt_reg = 0x1c018,
3905 .halt_check = BRANCH_HALT,
3906 .clkr = {
3907 .enable_reg = 0x1c018,
3908 .enable_mask = BIT(0),
3909 .hw.init = &(const struct clk_init_data){
3910 .name = "gcc_usb20_master_clk",
3911 .parent_hws = (const struct clk_hw*[]){
3912 &gcc_usb20_master_clk_src.clkr.hw,
3913 },
3914 .num_parents = 1,
3915 .flags = CLK_SET_RATE_PARENT,
3916 .ops = &clk_branch2_ops,
3917 },
3918 },
3919 };
3920
3921 static struct clk_branch gcc_usb20_mock_utmi_clk = {
3922 .halt_reg = 0x1c024,
3923 .halt_check = BRANCH_HALT,
3924 .clkr = {
3925 .enable_reg = 0x1c024,
3926 .enable_mask = BIT(0),
3927 .hw.init = &(const struct clk_init_data){
3928 .name = "gcc_usb20_mock_utmi_clk",
3929 .parent_hws = (const struct clk_hw*[]){
3930 &gcc_usb20_mock_utmi_postdiv_clk_src.clkr.hw,
3931 },
3932 .num_parents = 1,
3933 .flags = CLK_SET_RATE_PARENT,
3934 .ops = &clk_branch2_ops,
3935 },
3936 },
3937 };
3938
3939 static struct clk_branch gcc_usb20_sleep_clk = {
3940 .halt_reg = 0x1c020,
3941 .halt_check = BRANCH_HALT,
3942 .clkr = {
3943 .enable_reg = 0x1c020,
3944 .enable_mask = BIT(0),
3945 .hw.init = &(const struct clk_init_data){
3946 .name = "gcc_usb20_sleep_clk",
3947 .ops = &clk_branch2_ops,
3948 },
3949 },
3950 };
3951
3952 static struct clk_branch gcc_usb30_prim_master_clk = {
3953 .halt_reg = 0x1b018,
3954 .halt_check = BRANCH_HALT,
3955 .clkr = {
3956 .enable_reg = 0x1b018,
3957 .enable_mask = BIT(0),
3958 .hw.init = &(const struct clk_init_data){
3959 .name = "gcc_usb30_prim_master_clk",
3960 .parent_hws = (const struct clk_hw*[]){
3961 &gcc_usb30_prim_master_clk_src.clkr.hw,
3962 },
3963 .num_parents = 1,
3964 .flags = CLK_SET_RATE_PARENT,
3965 .ops = &clk_branch2_ops,
3966 },
3967 },
3968 };
3969
3970 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
3971 .halt_reg = 0x1b024,
3972 .halt_check = BRANCH_HALT,
3973 .clkr = {
3974 .enable_reg = 0x1b024,
3975 .enable_mask = BIT(0),
3976 .hw.init = &(const struct clk_init_data){
3977 .name = "gcc_usb30_prim_mock_utmi_clk",
3978 .parent_hws = (const struct clk_hw*[]){
3979 &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,
3980 },
3981 .num_parents = 1,
3982 .flags = CLK_SET_RATE_PARENT,
3983 .ops = &clk_branch2_ops,
3984 },
3985 },
3986 };
3987
3988 static struct clk_branch gcc_usb30_prim_sleep_clk = {
3989 .halt_reg = 0x1b020,
3990 .halt_check = BRANCH_HALT,
3991 .clkr = {
3992 .enable_reg = 0x1b020,
3993 .enable_mask = BIT(0),
3994 .hw.init = &(const struct clk_init_data){
3995 .name = "gcc_usb30_prim_sleep_clk",
3996 .ops = &clk_branch2_ops,
3997 },
3998 },
3999 };
4000
4001 static struct clk_branch gcc_usb30_sec_master_clk = {
4002 .halt_reg = 0x2f018,
4003 .halt_check = BRANCH_HALT,
4004 .clkr = {
4005 .enable_reg = 0x2f018,
4006 .enable_mask = BIT(0),
4007 .hw.init = &(const struct clk_init_data){
4008 .name = "gcc_usb30_sec_master_clk",
4009 .parent_hws = (const struct clk_hw*[]){
4010 &gcc_usb30_sec_master_clk_src.clkr.hw,
4011 },
4012 .num_parents = 1,
4013 .flags = CLK_SET_RATE_PARENT,
4014 .ops = &clk_branch2_ops,
4015 },
4016 },
4017 };
4018
4019 static struct clk_branch gcc_usb30_sec_mock_utmi_clk = {
4020 .halt_reg = 0x2f024,
4021 .halt_check = BRANCH_HALT,
4022 .clkr = {
4023 .enable_reg = 0x2f024,
4024 .enable_mask = BIT(0),
4025 .hw.init = &(const struct clk_init_data){
4026 .name = "gcc_usb30_sec_mock_utmi_clk",
4027 .parent_hws = (const struct clk_hw*[]){
4028 &gcc_usb30_sec_mock_utmi_postdiv_clk_src.clkr.hw,
4029 },
4030 .num_parents = 1,
4031 .flags = CLK_SET_RATE_PARENT,
4032 .ops = &clk_branch2_ops,
4033 },
4034 },
4035 };
4036
4037 static struct clk_branch gcc_usb30_sec_sleep_clk = {
4038 .halt_reg = 0x2f020,
4039 .halt_check = BRANCH_HALT,
4040 .clkr = {
4041 .enable_reg = 0x2f020,
4042 .enable_mask = BIT(0),
4043 .hw.init = &(const struct clk_init_data){
4044 .name = "gcc_usb30_sec_sleep_clk",
4045 .ops = &clk_branch2_ops,
4046 },
4047 },
4048 };
4049
4050 static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
4051 .halt_reg = 0x1b05c,
4052 .halt_check = BRANCH_HALT,
4053 .clkr = {
4054 .enable_reg = 0x1b05c,
4055 .enable_mask = BIT(0),
4056 .hw.init = &(const struct clk_init_data){
4057 .name = "gcc_usb3_prim_phy_aux_clk",
4058 .parent_hws = (const struct clk_hw*[]){
4059 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
4060 },
4061 .num_parents = 1,
4062 .flags = CLK_SET_RATE_PARENT,
4063 .ops = &clk_branch2_ops,
4064 },
4065 },
4066 };
4067
4068 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
4069 .halt_reg = 0x1b060,
4070 .halt_check = BRANCH_HALT,
4071 .clkr = {
4072 .enable_reg = 0x1b060,
4073 .enable_mask = BIT(0),
4074 .hw.init = &(const struct clk_init_data){
4075 .name = "gcc_usb3_prim_phy_com_aux_clk",
4076 .parent_hws = (const struct clk_hw*[]){
4077 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
4078 },
4079 .num_parents = 1,
4080 .flags = CLK_SET_RATE_PARENT,
4081 .ops = &clk_branch2_ops,
4082 },
4083 },
4084 };
4085
4086 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
4087 .halt_reg = 0x1b064,
4088 .halt_check = BRANCH_HALT_DELAY,
4089 .hwcg_reg = 0x1b064,
4090 .hwcg_bit = 1,
4091 .clkr = {
4092 .enable_reg = 0x1b064,
4093 .enable_mask = BIT(0),
4094 .hw.init = &(const struct clk_init_data){
4095 .name = "gcc_usb3_prim_phy_pipe_clk",
4096 .parent_hws = (const struct clk_hw*[]){
4097 &gcc_usb3_prim_phy_pipe_clk_src.clkr.hw,
4098 },
4099 .num_parents = 1,
4100 .flags = CLK_SET_RATE_PARENT,
4101 .ops = &clk_branch2_ops,
4102 },
4103 },
4104 };
4105
4106 static struct clk_branch gcc_usb3_sec_phy_aux_clk = {
4107 .halt_reg = 0x2f05c,
4108 .halt_check = BRANCH_HALT,
4109 .clkr = {
4110 .enable_reg = 0x2f05c,
4111 .enable_mask = BIT(0),
4112 .hw.init = &(const struct clk_init_data){
4113 .name = "gcc_usb3_sec_phy_aux_clk",
4114 .parent_hws = (const struct clk_hw*[]){
4115 &gcc_usb3_sec_phy_aux_clk_src.clkr.hw,
4116 },
4117 .num_parents = 1,
4118 .flags = CLK_SET_RATE_PARENT,
4119 .ops = &clk_branch2_ops,
4120 },
4121 },
4122 };
4123
4124 static struct clk_branch gcc_usb3_sec_phy_com_aux_clk = {
4125 .halt_reg = 0x2f060,
4126 .halt_check = BRANCH_HALT,
4127 .clkr = {
4128 .enable_reg = 0x2f060,
4129 .enable_mask = BIT(0),
4130 .hw.init = &(const struct clk_init_data){
4131 .name = "gcc_usb3_sec_phy_com_aux_clk",
4132 .parent_hws = (const struct clk_hw*[]){
4133 &gcc_usb3_sec_phy_aux_clk_src.clkr.hw,
4134 },
4135 .num_parents = 1,
4136 .flags = CLK_SET_RATE_PARENT,
4137 .ops = &clk_branch2_ops,
4138 },
4139 },
4140 };
4141
4142 static struct clk_branch gcc_usb3_sec_phy_pipe_clk = {
4143 .halt_reg = 0x2f064,
4144 .halt_check = BRANCH_HALT_DELAY,
4145 .clkr = {
4146 .enable_reg = 0x2f064,
4147 .enable_mask = BIT(0),
4148 .hw.init = &(const struct clk_init_data){
4149 .name = "gcc_usb3_sec_phy_pipe_clk",
4150 .parent_hws = (const struct clk_hw*[]){
4151 &gcc_usb3_sec_phy_pipe_clk_src.clkr.hw,
4152 },
4153 .num_parents = 1,
4154 .flags = CLK_SET_RATE_PARENT,
4155 .ops = &clk_branch2_ops,
4156 },
4157 },
4158 };
4159
4160 static struct clk_branch gcc_usb_clkref_en = {
4161 .halt_reg = 0x97468,
4162 .halt_check = BRANCH_HALT_DELAY,
4163 .clkr = {
4164 .enable_reg = 0x97468,
4165 .enable_mask = BIT(0),
4166 .hw.init = &(const struct clk_init_data){
4167 .name = "gcc_usb_clkref_en",
4168 .ops = &clk_branch2_ops,
4169 },
4170 },
4171 };
4172
4173 static struct clk_branch gcc_video_axi0_clk = {
4174 .halt_reg = 0x34014,
4175 .halt_check = BRANCH_HALT_VOTED,
4176 .hwcg_reg = 0x34014,
4177 .hwcg_bit = 1,
4178 .clkr = {
4179 .enable_reg = 0x34014,
4180 .enable_mask = BIT(0),
4181 .hw.init = &(const struct clk_init_data){
4182 .name = "gcc_video_axi0_clk",
4183 .ops = &clk_branch2_ops,
4184 },
4185 },
4186 };
4187
4188 static struct clk_branch gcc_video_axi1_clk = {
4189 .halt_reg = 0x3401c,
4190 .halt_check = BRANCH_HALT_VOTED,
4191 .hwcg_reg = 0x3401c,
4192 .hwcg_bit = 1,
4193 .clkr = {
4194 .enable_reg = 0x3401c,
4195 .enable_mask = BIT(0),
4196 .hw.init = &(const struct clk_init_data){
4197 .name = "gcc_video_axi1_clk",
4198 .ops = &clk_branch2_ops,
4199 },
4200 },
4201 };
4202
4203 static struct gdsc pcie_0_gdsc = {
4204 .gdscr = 0xa9004,
4205 .collapse_ctrl = 0x4b104,
4206 .collapse_mask = BIT(0),
4207 .en_rest_wait_val = 0x2,
4208 .en_few_wait_val = 0x2,
4209 .clk_dis_wait_val = 0xf,
4210 .pd = {
4211 .name = "pcie_0_gdsc",
4212 },
4213 .pwrsts = PWRSTS_OFF_ON,
4214 .flags = VOTABLE | RETAIN_FF_ENABLE | POLL_CFG_GDSCR,
4215 };
4216
4217 static struct gdsc pcie_1_gdsc = {
4218 .gdscr = 0x77004,
4219 .collapse_ctrl = 0x4b104,
4220 .collapse_mask = BIT(1),
4221 .en_rest_wait_val = 0x2,
4222 .en_few_wait_val = 0x2,
4223 .clk_dis_wait_val = 0xf,
4224 .pd = {
4225 .name = "pcie_1_gdsc",
4226 },
4227 .pwrsts = PWRSTS_OFF_ON,
4228 .flags = VOTABLE | RETAIN_FF_ENABLE | POLL_CFG_GDSCR,
4229 };
4230
4231 static struct gdsc ufs_card_gdsc = {
4232 .gdscr = 0x81004,
4233 .en_rest_wait_val = 0x2,
4234 .en_few_wait_val = 0x2,
4235 .clk_dis_wait_val = 0xf,
4236 .pd = {
4237 .name = "ufs_card_gdsc",
4238 },
4239 .pwrsts = PWRSTS_OFF_ON,
4240 .flags = RETAIN_FF_ENABLE | POLL_CFG_GDSCR,
4241 };
4242
4243 static struct gdsc ufs_phy_gdsc = {
4244 .gdscr = 0x83004,
4245 .en_rest_wait_val = 0x2,
4246 .en_few_wait_val = 0x2,
4247 .clk_dis_wait_val = 0xf,
4248 .pd = {
4249 .name = "ufs_phy_gdsc",
4250 },
4251 .pwrsts = PWRSTS_OFF_ON,
4252 .flags = RETAIN_FF_ENABLE | POLL_CFG_GDSCR,
4253 };
4254
4255 static struct gdsc usb20_prim_gdsc = {
4256 .gdscr = 0x1c004,
4257 .en_rest_wait_val = 0x2,
4258 .en_few_wait_val = 0x2,
4259 .clk_dis_wait_val = 0xf,
4260 .pd = {
4261 .name = "usb20_prim_gdsc",
4262 },
4263 .pwrsts = PWRSTS_OFF_ON,
4264 .flags = RETAIN_FF_ENABLE | POLL_CFG_GDSCR,
4265 };
4266
4267 static struct gdsc usb30_prim_gdsc = {
4268 .gdscr = 0x1b004,
4269 .en_rest_wait_val = 0x2,
4270 .en_few_wait_val = 0x2,
4271 .clk_dis_wait_val = 0xf,
4272 .pd = {
4273 .name = "usb30_prim_gdsc",
4274 },
4275 .pwrsts = PWRSTS_OFF_ON,
4276 .flags = RETAIN_FF_ENABLE | POLL_CFG_GDSCR,
4277 };
4278
4279 static struct gdsc usb30_sec_gdsc = {
4280 .gdscr = 0x2f004,
4281 .en_rest_wait_val = 0x2,
4282 .en_few_wait_val = 0x2,
4283 .clk_dis_wait_val = 0xf,
4284 .pd = {
4285 .name = "usb30_sec_gdsc",
4286 },
4287 .pwrsts = PWRSTS_OFF_ON,
4288 .flags = RETAIN_FF_ENABLE | POLL_CFG_GDSCR,
4289 };
4290
4291 static struct gdsc emac0_gdsc = {
4292 .gdscr = 0xb6004,
4293 .en_rest_wait_val = 0x2,
4294 .en_few_wait_val = 0x2,
4295 .clk_dis_wait_val = 0xf,
4296 .pd = {
4297 .name = "emac0_gdsc",
4298 },
4299 .pwrsts = PWRSTS_OFF_ON,
4300 .flags = RETAIN_FF_ENABLE | POLL_CFG_GDSCR,
4301 };
4302
4303 static struct gdsc emac1_gdsc = {
4304 .gdscr = 0xb4004,
4305 .en_rest_wait_val = 0x2,
4306 .en_few_wait_val = 0x2,
4307 .clk_dis_wait_val = 0xf,
4308 .pd = {
4309 .name = "emac1_gdsc",
4310 },
4311 .pwrsts = PWRSTS_OFF_ON,
4312 .flags = RETAIN_FF_ENABLE | POLL_CFG_GDSCR,
4313 };
4314
4315 static struct clk_regmap *gcc_sa8775p_clocks[] = {
4316 [GCC_AGGRE_NOC_QUPV3_AXI_CLK] = &gcc_aggre_noc_qupv3_axi_clk.clkr,
4317 [GCC_AGGRE_UFS_CARD_AXI_CLK] = &gcc_aggre_ufs_card_axi_clk.clkr,
4318 [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
4319 [GCC_AGGRE_USB2_PRIM_AXI_CLK] = &gcc_aggre_usb2_prim_axi_clk.clkr,
4320 [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
4321 [GCC_AGGRE_USB3_SEC_AXI_CLK] = &gcc_aggre_usb3_sec_axi_clk.clkr,
4322 [GCC_AHB2PHY0_CLK] = &gcc_ahb2phy0_clk.clkr,
4323 [GCC_AHB2PHY2_CLK] = &gcc_ahb2phy2_clk.clkr,
4324 [GCC_AHB2PHY3_CLK] = &gcc_ahb2phy3_clk.clkr,
4325 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
4326 [GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,
4327 [GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr,
4328 [GCC_CAMERA_THROTTLE_XO_CLK] = &gcc_camera_throttle_xo_clk.clkr,
4329 [GCC_CFG_NOC_USB2_PRIM_AXI_CLK] = &gcc_cfg_noc_usb2_prim_axi_clk.clkr,
4330 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
4331 [GCC_CFG_NOC_USB3_SEC_AXI_CLK] = &gcc_cfg_noc_usb3_sec_axi_clk.clkr,
4332 [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
4333 [GCC_DISP1_HF_AXI_CLK] = &gcc_disp1_hf_axi_clk.clkr,
4334 [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
4335 [GCC_EDP_REF_CLKREF_EN] = &gcc_edp_ref_clkref_en.clkr,
4336 [GCC_EMAC0_AXI_CLK] = &gcc_emac0_axi_clk.clkr,
4337 [GCC_EMAC0_PHY_AUX_CLK] = &gcc_emac0_phy_aux_clk.clkr,
4338 [GCC_EMAC0_PHY_AUX_CLK_SRC] = &gcc_emac0_phy_aux_clk_src.clkr,
4339 [GCC_EMAC0_PTP_CLK] = &gcc_emac0_ptp_clk.clkr,
4340 [GCC_EMAC0_PTP_CLK_SRC] = &gcc_emac0_ptp_clk_src.clkr,
4341 [GCC_EMAC0_RGMII_CLK] = &gcc_emac0_rgmii_clk.clkr,
4342 [GCC_EMAC0_RGMII_CLK_SRC] = &gcc_emac0_rgmii_clk_src.clkr,
4343 [GCC_EMAC0_SLV_AHB_CLK] = &gcc_emac0_slv_ahb_clk.clkr,
4344 [GCC_EMAC1_AXI_CLK] = &gcc_emac1_axi_clk.clkr,
4345 [GCC_EMAC1_PHY_AUX_CLK] = &gcc_emac1_phy_aux_clk.clkr,
4346 [GCC_EMAC1_PHY_AUX_CLK_SRC] = &gcc_emac1_phy_aux_clk_src.clkr,
4347 [GCC_EMAC1_PTP_CLK] = &gcc_emac1_ptp_clk.clkr,
4348 [GCC_EMAC1_PTP_CLK_SRC] = &gcc_emac1_ptp_clk_src.clkr,
4349 [GCC_EMAC1_RGMII_CLK] = &gcc_emac1_rgmii_clk.clkr,
4350 [GCC_EMAC1_RGMII_CLK_SRC] = &gcc_emac1_rgmii_clk_src.clkr,
4351 [GCC_EMAC1_SLV_AHB_CLK] = &gcc_emac1_slv_ahb_clk.clkr,
4352 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
4353 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
4354 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
4355 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
4356 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
4357 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
4358 [GCC_GP4_CLK] = &gcc_gp4_clk.clkr,
4359 [GCC_GP4_CLK_SRC] = &gcc_gp4_clk_src.clkr,
4360 [GCC_GP5_CLK] = &gcc_gp5_clk.clkr,
4361 [GCC_GP5_CLK_SRC] = &gcc_gp5_clk_src.clkr,
4362 [GCC_GPLL0] = &gcc_gpll0.clkr,
4363 [GCC_GPLL0_OUT_EVEN] = &gcc_gpll0_out_even.clkr,
4364 [GCC_GPLL1] = &gcc_gpll1.clkr,
4365 [GCC_GPLL4] = &gcc_gpll4.clkr,
4366 [GCC_GPLL5] = &gcc_gpll5.clkr,
4367 [GCC_GPLL7] = &gcc_gpll7.clkr,
4368 [GCC_GPLL9] = &gcc_gpll9.clkr,
4369 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
4370 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
4371 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
4372 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
4373 [GCC_GPU_TCU_THROTTLE_AHB_CLK] = &gcc_gpu_tcu_throttle_ahb_clk.clkr,
4374 [GCC_GPU_TCU_THROTTLE_CLK] = &gcc_gpu_tcu_throttle_clk.clkr,
4375 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
4376 [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
4377 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
4378 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
4379 [GCC_PCIE_0_PHY_AUX_CLK] = &gcc_pcie_0_phy_aux_clk.clkr,
4380 [GCC_PCIE_0_PHY_AUX_CLK_SRC] = &gcc_pcie_0_phy_aux_clk_src.clkr,
4381 [GCC_PCIE_0_PHY_RCHNG_CLK] = &gcc_pcie_0_phy_rchng_clk.clkr,
4382 [GCC_PCIE_0_PHY_RCHNG_CLK_SRC] = &gcc_pcie_0_phy_rchng_clk_src.clkr,
4383 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
4384 [GCC_PCIE_0_PIPE_CLK_SRC] = &gcc_pcie_0_pipe_clk_src.clkr,
4385 [GCC_PCIE_0_PIPE_DIV_CLK_SRC] = &gcc_pcie_0_pipe_div_clk_src.clkr,
4386 [GCC_PCIE_0_PIPEDIV2_CLK] = &gcc_pcie_0_pipediv2_clk.clkr,
4387 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
4388 [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
4389 [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
4390 [GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr,
4391 [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
4392 [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
4393 [GCC_PCIE_1_PHY_AUX_CLK] = &gcc_pcie_1_phy_aux_clk.clkr,
4394 [GCC_PCIE_1_PHY_AUX_CLK_SRC] = &gcc_pcie_1_phy_aux_clk_src.clkr,
4395 [GCC_PCIE_1_PHY_RCHNG_CLK] = &gcc_pcie_1_phy_rchng_clk.clkr,
4396 [GCC_PCIE_1_PHY_RCHNG_CLK_SRC] = &gcc_pcie_1_phy_rchng_clk_src.clkr,
4397 [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
4398 [GCC_PCIE_1_PIPE_CLK_SRC] = &gcc_pcie_1_pipe_clk_src.clkr,
4399 [GCC_PCIE_1_PIPE_DIV_CLK_SRC] = &gcc_pcie_1_pipe_div_clk_src.clkr,
4400 [GCC_PCIE_1_PIPEDIV2_CLK] = &gcc_pcie_1_pipediv2_clk.clkr,
4401 [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
4402 [GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr,
4403 [GCC_PCIE_CLKREF_EN] = &gcc_pcie_clkref_en.clkr,
4404 [GCC_PCIE_THROTTLE_CFG_CLK] = &gcc_pcie_throttle_cfg_clk.clkr,
4405 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
4406 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
4407 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
4408 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
4409 [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
4410 [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
4411 [GCC_QMIP_DISP1_AHB_CLK] = &gcc_qmip_disp1_ahb_clk.clkr,
4412 [GCC_QMIP_DISP1_ROT_AHB_CLK] = &gcc_qmip_disp1_rot_ahb_clk.clkr,
4413 [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
4414 [GCC_QMIP_DISP_ROT_AHB_CLK] = &gcc_qmip_disp_rot_ahb_clk.clkr,
4415 [GCC_QMIP_VIDEO_CVP_AHB_CLK] = &gcc_qmip_video_cvp_ahb_clk.clkr,
4416 [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
4417 [GCC_QMIP_VIDEO_VCPU_AHB_CLK] = &gcc_qmip_video_vcpu_ahb_clk.clkr,
4418 [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
4419 [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
4420 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
4421 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
4422 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
4423 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
4424 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
4425 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
4426 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
4427 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
4428 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
4429 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
4430 [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
4431 [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
4432 [GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr,
4433 [GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr,
4434 [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
4435 [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
4436 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
4437 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
4438 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
4439 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
4440 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
4441 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
4442 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
4443 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
4444 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
4445 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
4446 [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
4447 [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
4448 [GCC_QUPV3_WRAP1_S6_CLK] = &gcc_qupv3_wrap1_s6_clk.clkr,
4449 [GCC_QUPV3_WRAP1_S6_CLK_SRC] = &gcc_qupv3_wrap1_s6_clk_src.clkr,
4450 [GCC_QUPV3_WRAP2_CORE_2X_CLK] = &gcc_qupv3_wrap2_core_2x_clk.clkr,
4451 [GCC_QUPV3_WRAP2_CORE_CLK] = &gcc_qupv3_wrap2_core_clk.clkr,
4452 [GCC_QUPV3_WRAP2_S0_CLK] = &gcc_qupv3_wrap2_s0_clk.clkr,
4453 [GCC_QUPV3_WRAP2_S0_CLK_SRC] = &gcc_qupv3_wrap2_s0_clk_src.clkr,
4454 [GCC_QUPV3_WRAP2_S1_CLK] = &gcc_qupv3_wrap2_s1_clk.clkr,
4455 [GCC_QUPV3_WRAP2_S1_CLK_SRC] = &gcc_qupv3_wrap2_s1_clk_src.clkr,
4456 [GCC_QUPV3_WRAP2_S2_CLK] = &gcc_qupv3_wrap2_s2_clk.clkr,
4457 [GCC_QUPV3_WRAP2_S2_CLK_SRC] = &gcc_qupv3_wrap2_s2_clk_src.clkr,
4458 [GCC_QUPV3_WRAP2_S3_CLK] = &gcc_qupv3_wrap2_s3_clk.clkr,
4459 [GCC_QUPV3_WRAP2_S3_CLK_SRC] = &gcc_qupv3_wrap2_s3_clk_src.clkr,
4460 [GCC_QUPV3_WRAP2_S4_CLK] = &gcc_qupv3_wrap2_s4_clk.clkr,
4461 [GCC_QUPV3_WRAP2_S4_CLK_SRC] = &gcc_qupv3_wrap2_s4_clk_src.clkr,
4462 [GCC_QUPV3_WRAP2_S5_CLK] = &gcc_qupv3_wrap2_s5_clk.clkr,
4463 [GCC_QUPV3_WRAP2_S5_CLK_SRC] = &gcc_qupv3_wrap2_s5_clk_src.clkr,
4464 [GCC_QUPV3_WRAP2_S6_CLK] = &gcc_qupv3_wrap2_s6_clk.clkr,
4465 [GCC_QUPV3_WRAP2_S6_CLK_SRC] = &gcc_qupv3_wrap2_s6_clk_src.clkr,
4466 [GCC_QUPV3_WRAP3_CORE_2X_CLK] = &gcc_qupv3_wrap3_core_2x_clk.clkr,
4467 [GCC_QUPV3_WRAP3_CORE_CLK] = &gcc_qupv3_wrap3_core_clk.clkr,
4468 [GCC_QUPV3_WRAP3_QSPI_CLK] = &gcc_qupv3_wrap3_qspi_clk.clkr,
4469 [GCC_QUPV3_WRAP3_S0_CLK] = &gcc_qupv3_wrap3_s0_clk.clkr,
4470 [GCC_QUPV3_WRAP3_S0_CLK_SRC] = &gcc_qupv3_wrap3_s0_clk_src.clkr,
4471 [GCC_QUPV3_WRAP3_S0_DIV_CLK_SRC] = &gcc_qupv3_wrap3_s0_div_clk_src.clkr,
4472 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
4473 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
4474 [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
4475 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
4476 [GCC_QUPV3_WRAP_2_M_AHB_CLK] = &gcc_qupv3_wrap_2_m_ahb_clk.clkr,
4477 [GCC_QUPV3_WRAP_2_S_AHB_CLK] = &gcc_qupv3_wrap_2_s_ahb_clk.clkr,
4478 [GCC_QUPV3_WRAP_3_M_AHB_CLK] = &gcc_qupv3_wrap_3_m_ahb_clk.clkr,
4479 [GCC_QUPV3_WRAP_3_S_AHB_CLK] = &gcc_qupv3_wrap_3_s_ahb_clk.clkr,
4480 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
4481 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
4482 [GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,
4483 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
4484 [GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr,
4485 [GCC_SGMI_CLKREF_EN] = &gcc_sgmi_clkref_en.clkr,
4486 [GCC_TSCSS_AHB_CLK] = &gcc_tscss_ahb_clk.clkr,
4487 [GCC_TSCSS_CNTR_CLK_SRC] = &gcc_tscss_cntr_clk_src.clkr,
4488 [GCC_TSCSS_ETU_CLK] = &gcc_tscss_etu_clk.clkr,
4489 [GCC_TSCSS_GLOBAL_CNTR_CLK] = &gcc_tscss_global_cntr_clk.clkr,
4490 [GCC_UFS_CARD_AHB_CLK] = &gcc_ufs_card_ahb_clk.clkr,
4491 [GCC_UFS_CARD_AXI_CLK] = &gcc_ufs_card_axi_clk.clkr,
4492 [GCC_UFS_CARD_AXI_CLK_SRC] = &gcc_ufs_card_axi_clk_src.clkr,
4493 [GCC_UFS_CARD_ICE_CORE_CLK] = &gcc_ufs_card_ice_core_clk.clkr,
4494 [GCC_UFS_CARD_ICE_CORE_CLK_SRC] = &gcc_ufs_card_ice_core_clk_src.clkr,
4495 [GCC_UFS_CARD_PHY_AUX_CLK] = &gcc_ufs_card_phy_aux_clk.clkr,
4496 [GCC_UFS_CARD_PHY_AUX_CLK_SRC] = &gcc_ufs_card_phy_aux_clk_src.clkr,
4497 [GCC_UFS_CARD_RX_SYMBOL_0_CLK] = &gcc_ufs_card_rx_symbol_0_clk.clkr,
4498 [GCC_UFS_CARD_RX_SYMBOL_0_CLK_SRC] = &gcc_ufs_card_rx_symbol_0_clk_src.clkr,
4499 [GCC_UFS_CARD_RX_SYMBOL_1_CLK] = &gcc_ufs_card_rx_symbol_1_clk.clkr,
4500 [GCC_UFS_CARD_RX_SYMBOL_1_CLK_SRC] = &gcc_ufs_card_rx_symbol_1_clk_src.clkr,
4501 [GCC_UFS_CARD_TX_SYMBOL_0_CLK] = &gcc_ufs_card_tx_symbol_0_clk.clkr,
4502 [GCC_UFS_CARD_TX_SYMBOL_0_CLK_SRC] = &gcc_ufs_card_tx_symbol_0_clk_src.clkr,
4503 [GCC_UFS_CARD_UNIPRO_CORE_CLK] = &gcc_ufs_card_unipro_core_clk.clkr,
4504 [GCC_UFS_CARD_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_card_unipro_core_clk_src.clkr,
4505 [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
4506 [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
4507 [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
4508 [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
4509 [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
4510 [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
4511 [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
4512 [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
4513 [GCC_UFS_PHY_RX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_rx_symbol_0_clk_src.clkr,
4514 [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
4515 [GCC_UFS_PHY_RX_SYMBOL_1_CLK_SRC] = &gcc_ufs_phy_rx_symbol_1_clk_src.clkr,
4516 [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
4517 [GCC_UFS_PHY_TX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_tx_symbol_0_clk_src.clkr,
4518 [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
4519 [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_phy_unipro_core_clk_src.clkr,
4520 [GCC_USB20_MASTER_CLK] = &gcc_usb20_master_clk.clkr,
4521 [GCC_USB20_MASTER_CLK_SRC] = &gcc_usb20_master_clk_src.clkr,
4522 [GCC_USB20_MOCK_UTMI_CLK] = &gcc_usb20_mock_utmi_clk.clkr,
4523 [GCC_USB20_MOCK_UTMI_CLK_SRC] = &gcc_usb20_mock_utmi_clk_src.clkr,
4524 [GCC_USB20_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb20_mock_utmi_postdiv_clk_src.clkr,
4525 [GCC_USB20_SLEEP_CLK] = &gcc_usb20_sleep_clk.clkr,
4526 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
4527 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
4528 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
4529 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr,
4530 [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,
4531 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
4532 [GCC_USB30_SEC_MASTER_CLK] = &gcc_usb30_sec_master_clk.clkr,
4533 [GCC_USB30_SEC_MASTER_CLK_SRC] = &gcc_usb30_sec_master_clk_src.clkr,
4534 [GCC_USB30_SEC_MOCK_UTMI_CLK] = &gcc_usb30_sec_mock_utmi_clk.clkr,
4535 [GCC_USB30_SEC_MOCK_UTMI_CLK_SRC] = &gcc_usb30_sec_mock_utmi_clk_src.clkr,
4536 [GCC_USB30_SEC_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_sec_mock_utmi_postdiv_clk_src.clkr,
4537 [GCC_USB30_SEC_SLEEP_CLK] = &gcc_usb30_sec_sleep_clk.clkr,
4538 [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
4539 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
4540 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
4541 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
4542 [GCC_USB3_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb3_prim_phy_pipe_clk_src.clkr,
4543 [GCC_USB3_SEC_PHY_AUX_CLK] = &gcc_usb3_sec_phy_aux_clk.clkr,
4544 [GCC_USB3_SEC_PHY_AUX_CLK_SRC] = &gcc_usb3_sec_phy_aux_clk_src.clkr,
4545 [GCC_USB3_SEC_PHY_COM_AUX_CLK] = &gcc_usb3_sec_phy_com_aux_clk.clkr,
4546 [GCC_USB3_SEC_PHY_PIPE_CLK] = &gcc_usb3_sec_phy_pipe_clk.clkr,
4547 [GCC_USB3_SEC_PHY_PIPE_CLK_SRC] = &gcc_usb3_sec_phy_pipe_clk_src.clkr,
4548 [GCC_USB_CLKREF_EN] = &gcc_usb_clkref_en.clkr,
4549 [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
4550 [GCC_VIDEO_AXI1_CLK] = &gcc_video_axi1_clk.clkr,
4551 };
4552
4553 static const struct qcom_reset_map gcc_sa8775p_resets[] = {
4554 [GCC_CAMERA_BCR] = { 0x32000 },
4555 [GCC_DISPLAY1_BCR] = { 0xc7000 },
4556 [GCC_DISPLAY_BCR] = { 0x33000 },
4557 [GCC_EMAC0_BCR] = { 0xb6000 },
4558 [GCC_EMAC1_BCR] = { 0xb4000 },
4559 [GCC_GPU_BCR] = { 0x7d000 },
4560 [GCC_MMSS_BCR] = { 0x17000 },
4561 [GCC_PCIE_0_BCR] = { 0xa9000 },
4562 [GCC_PCIE_0_LINK_DOWN_BCR] = { 0xbf000 },
4563 [GCC_PCIE_0_NOCSR_COM_PHY_BCR] = { 0xbf008 },
4564 [GCC_PCIE_0_PHY_BCR] = { 0xad144 },
4565 [GCC_PCIE_0_PHY_NOCSR_COM_PHY_BCR] = { 0xbf00c },
4566 [GCC_PCIE_1_BCR] = { 0x77000 },
4567 [GCC_PCIE_1_LINK_DOWN_BCR] = { 0xae084 },
4568 [GCC_PCIE_1_NOCSR_COM_PHY_BCR] = { 0xae090 },
4569 [GCC_PCIE_1_PHY_BCR] = { 0xae08c },
4570 [GCC_PCIE_1_PHY_NOCSR_COM_PHY_BCR] = { 0xae094 },
4571 [GCC_PDM_BCR] = { 0x3f000 },
4572 [GCC_QUPV3_WRAPPER_0_BCR] = { 0x23000 },
4573 [GCC_QUPV3_WRAPPER_1_BCR] = { 0x24000 },
4574 [GCC_QUPV3_WRAPPER_2_BCR] = { 0x2a000 },
4575 [GCC_QUPV3_WRAPPER_3_BCR] = { 0xc4000 },
4576 [GCC_SDCC1_BCR] = { 0x20000 },
4577 [GCC_TSCSS_BCR] = { 0x21000 },
4578 [GCC_UFS_CARD_BCR] = { 0x81000 },
4579 [GCC_UFS_PHY_BCR] = { 0x83000 },
4580 [GCC_USB20_PRIM_BCR] = { 0x1c000 },
4581 [GCC_USB2_PHY_PRIM_BCR] = { 0x5c028 },
4582 [GCC_USB2_PHY_SEC_BCR] = { 0x5c02c },
4583 [GCC_USB30_PRIM_BCR] = { 0x1b000 },
4584 [GCC_USB30_SEC_BCR] = { 0x2f000 },
4585 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x5c008 },
4586 [GCC_USB3_DP_PHY_SEC_BCR] = { 0x5c014 },
4587 [GCC_USB3_PHY_PRIM_BCR] = { 0x5c000 },
4588 [GCC_USB3_PHY_SEC_BCR] = { 0x5c00c },
4589 [GCC_USB3_PHY_TERT_BCR] = { 0x5c030 },
4590 [GCC_USB3_UNIPHY_MP0_BCR] = { 0x5c018 },
4591 [GCC_USB3_UNIPHY_MP1_BCR] = { 0x5c01c },
4592 [GCC_USB3PHY_PHY_PRIM_BCR] = { 0x5c004 },
4593 [GCC_USB3PHY_PHY_SEC_BCR] = { 0x5c010 },
4594 [GCC_USB3UNIPHY_PHY_MP0_BCR] = { 0x5c020 },
4595 [GCC_USB3UNIPHY_PHY_MP1_BCR] = { 0x5c024 },
4596 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x76000 },
4597 [GCC_VIDEO_AXI0_CLK_ARES] = { .reg = 0x34014, .bit = 2, .udelay = 400 },
4598 [GCC_VIDEO_AXI1_CLK_ARES] = { .reg = 0x3401c, .bit = 2, .udelay = 400 },
4599 [GCC_VIDEO_BCR] = { 0x34000 },
4600 };
4601
4602 static struct gdsc *gcc_sa8775p_gdscs[] = {
4603 [PCIE_0_GDSC] = &pcie_0_gdsc,
4604 [PCIE_1_GDSC] = &pcie_1_gdsc,
4605 [UFS_CARD_GDSC] = &ufs_card_gdsc,
4606 [UFS_PHY_GDSC] = &ufs_phy_gdsc,
4607 [USB20_PRIM_GDSC] = &usb20_prim_gdsc,
4608 [USB30_PRIM_GDSC] = &usb30_prim_gdsc,
4609 [USB30_SEC_GDSC] = &usb30_sec_gdsc,
4610 [EMAC0_GDSC] = &emac0_gdsc,
4611 [EMAC1_GDSC] = &emac1_gdsc,
4612 };
4613
4614 static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
4615 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
4616 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
4617 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
4618 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
4619 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
4620 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
4621 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s6_clk_src),
4622 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
4623 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
4624 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),
4625 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
4626 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
4627 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
4628 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src),
4629 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s0_clk_src),
4630 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s1_clk_src),
4631 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s2_clk_src),
4632 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s3_clk_src),
4633 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s4_clk_src),
4634 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s5_clk_src),
4635 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s6_clk_src),
4636 DEFINE_RCG_DFS(gcc_qupv3_wrap3_s0_clk_src),
4637 };
4638
4639 static const struct regmap_config gcc_sa8775p_regmap_config = {
4640 .reg_bits = 32,
4641 .reg_stride = 4,
4642 .val_bits = 32,
4643 .max_register = 0xc7018,
4644 .fast_io = true,
4645 };
4646
4647 static const struct qcom_cc_desc gcc_sa8775p_desc = {
4648 .config = &gcc_sa8775p_regmap_config,
4649 .clks = gcc_sa8775p_clocks,
4650 .num_clks = ARRAY_SIZE(gcc_sa8775p_clocks),
4651 .resets = gcc_sa8775p_resets,
4652 .num_resets = ARRAY_SIZE(gcc_sa8775p_resets),
4653 .gdscs = gcc_sa8775p_gdscs,
4654 .num_gdscs = ARRAY_SIZE(gcc_sa8775p_gdscs),
4655 };
4656
4657 static const struct of_device_id gcc_sa8775p_match_table[] = {
4658 { .compatible = "qcom,sa8775p-gcc" },
4659 { }
4660 };
4661 MODULE_DEVICE_TABLE(of, gcc_sa8775p_match_table);
4662
gcc_sa8775p_probe(struct platform_device * pdev)4663 static int gcc_sa8775p_probe(struct platform_device *pdev)
4664 {
4665 struct regmap *regmap;
4666 int ret;
4667
4668 regmap = qcom_cc_map(pdev, &gcc_sa8775p_desc);
4669 if (IS_ERR(regmap))
4670 return PTR_ERR(regmap);
4671
4672 ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
4673 ARRAY_SIZE(gcc_dfs_clocks));
4674 if (ret)
4675 return ret;
4676
4677 /* Keep some clocks always-on */
4678 qcom_branch_set_clk_en(regmap, 0x32004); /* GCC_CAMERA_AHB_CLK */
4679 qcom_branch_set_clk_en(regmap, 0x32020); /* GCC_CAMERA_XO_CLK */
4680 qcom_branch_set_clk_en(regmap, 0xc7004); /* GCC_DISP1_AHB_CLK */
4681 qcom_branch_set_clk_en(regmap, 0xc7018); /* GCC_DISP1_XO_CLK */
4682 qcom_branch_set_clk_en(regmap, 0x33004); /* GCC_DISP_AHB_CLK */
4683 qcom_branch_set_clk_en(regmap, 0x33018); /* GCC_DISP_XO_CLK */
4684 qcom_branch_set_clk_en(regmap, 0x7d004); /* GCC_GPU_CFG_AHB_CLK */
4685 qcom_branch_set_clk_en(regmap, 0x34004); /* GCC_VIDEO_AHB_CLK */
4686 qcom_branch_set_clk_en(regmap, 0x34024); /* GCC_VIDEO_XO_CLK */
4687
4688 /* FORCE_MEM_CORE_ON for ufs phy ice core clocks */
4689 qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_ice_core_clk, true);
4690
4691 return qcom_cc_really_probe(&pdev->dev, &gcc_sa8775p_desc, regmap);
4692 }
4693
4694 static struct platform_driver gcc_sa8775p_driver = {
4695 .probe = gcc_sa8775p_probe,
4696 .driver = {
4697 .name = "sa8775p-gcc",
4698 .of_match_table = gcc_sa8775p_match_table,
4699 },
4700 };
4701
gcc_sa8775p_init(void)4702 static int __init gcc_sa8775p_init(void)
4703 {
4704 return platform_driver_register(&gcc_sa8775p_driver);
4705 }
4706 core_initcall(gcc_sa8775p_init);
4707
gcc_sa8775p_exit(void)4708 static void __exit gcc_sa8775p_exit(void)
4709 {
4710 platform_driver_unregister(&gcc_sa8775p_driver);
4711 }
4712 module_exit(gcc_sa8775p_exit);
4713
4714 MODULE_DESCRIPTION("Qualcomm SA8775P GCC driver");
4715 MODULE_LICENSE("GPL");
4716