1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3 * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
4 */
5
6 #include <linux/clk-provider.h>
7 #include <linux/module.h>
8 #include <linux/of.h>
9 #include <linux/platform_device.h>
10 #include <linux/regmap.h>
11
12 #include <dt-bindings/clock/qcom,hawi-gcc.h>
13 #include <dt-bindings/clock/qcom,maili-gcc.h>
14
15 #include "clk-alpha-pll.h"
16 #include "clk-branch.h"
17 #include "clk-pll.h"
18 #include "clk-rcg.h"
19 #include "clk-regmap.h"
20 #include "clk-regmap-divider.h"
21 #include "clk-regmap-mux.h"
22 #include "clk-regmap-phy-mux.h"
23 #include "common.h"
24 #include "gdsc.h"
25 #include "reset.h"
26
27 enum {
28 DT_BI_TCXO,
29 DT_BI_TCXO_AO,
30 DT_SLEEP_CLK,
31 DT_PCIE_0_PIPE_CLK,
32 DT_PCIE_1_PIPE_CLK,
33 DT_UFS_PHY_RX_SYMBOL_0_CLK,
34 DT_UFS_PHY_RX_SYMBOL_1_CLK,
35 DT_UFS_PHY_TX_SYMBOL_0_CLK,
36 DT_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
37 };
38
39 enum {
40 P_BI_TCXO,
41 P_GCC_GPLL0_OUT_EVEN,
42 P_GCC_GPLL0_OUT_MAIN,
43 P_GCC_GPLL4_OUT_MAIN,
44 P_GCC_GPLL5_OUT_MAIN,
45 P_GCC_GPLL7_OUT_MAIN,
46 P_GCC_GPLL9_OUT_MAIN,
47 P_PCIE_0_PIPE_CLK,
48 P_PCIE_1_PIPE_CLK,
49 P_SLEEP_CLK,
50 P_UFS_PHY_RX_SYMBOL_0_CLK,
51 P_UFS_PHY_RX_SYMBOL_1_CLK,
52 P_UFS_PHY_TX_SYMBOL_0_CLK,
53 P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
54 };
55
56 static struct clk_alpha_pll gcc_gpll0 = {
57 .offset = 0x0,
58 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TAYCAN_EHA_T],
59 .clkr = {
60 .enable_reg = 0x52028,
61 .enable_mask = BIT(0),
62 .hw.init = &(const struct clk_init_data) {
63 .name = "gcc_gpll0",
64 .parent_data = &(const struct clk_parent_data) {
65 .index = DT_BI_TCXO,
66 },
67 .num_parents = 1,
68 .ops = &clk_alpha_pll_fixed_taycan_eha_t_ops,
69 },
70 },
71 };
72
73 static const struct clk_div_table post_div_table_gcc_gpll0_out_even[] = {
74 { 0x1, 2 },
75 { }
76 };
77
78 static struct clk_alpha_pll_postdiv gcc_gpll0_out_even = {
79 .offset = 0x0,
80 .post_div_shift = 10,
81 .post_div_table = post_div_table_gcc_gpll0_out_even,
82 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
83 .width = 4,
84 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TAYCAN_EHA_T],
85 .clkr.hw.init = &(const struct clk_init_data) {
86 .name = "gcc_gpll0_out_even",
87 .parent_hws = (const struct clk_hw*[]) {
88 &gcc_gpll0.clkr.hw,
89 },
90 .num_parents = 1,
91 .ops = &clk_alpha_pll_postdiv_taycan_eha_t_ops,
92 },
93 };
94
95 static struct clk_alpha_pll gcc_gpll4 = {
96 .offset = 0x4000,
97 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TAYCAN_EHA_T],
98 .clkr = {
99 .enable_reg = 0x52028,
100 .enable_mask = BIT(4),
101 .hw.init = &(const struct clk_init_data) {
102 .name = "gcc_gpll4",
103 .parent_data = &(const struct clk_parent_data) {
104 .index = DT_BI_TCXO,
105 },
106 .num_parents = 1,
107 .ops = &clk_alpha_pll_fixed_taycan_eha_t_ops,
108 },
109 },
110 };
111
112 static struct clk_alpha_pll gcc_gpll5 = {
113 .offset = 0x5000,
114 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TAYCAN_EHA_T],
115 .clkr = {
116 .enable_reg = 0x52028,
117 .enable_mask = BIT(5),
118 .hw.init = &(const struct clk_init_data) {
119 .name = "gcc_gpll5",
120 .parent_data = &(const struct clk_parent_data) {
121 .index = DT_BI_TCXO,
122 },
123 .num_parents = 1,
124 .ops = &clk_alpha_pll_fixed_taycan_eha_t_ops,
125 },
126 },
127 };
128
129 static struct clk_alpha_pll gcc_gpll7 = {
130 .offset = 0x7000,
131 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TAYCAN_EHA_T],
132 .clkr = {
133 .enable_reg = 0x52028,
134 .enable_mask = BIT(7),
135 .hw.init = &(const struct clk_init_data) {
136 .name = "gcc_gpll7",
137 .parent_data = &(const struct clk_parent_data) {
138 .index = DT_BI_TCXO,
139 },
140 .num_parents = 1,
141 .ops = &clk_alpha_pll_fixed_taycan_eha_t_ops,
142 },
143 },
144 };
145
146 static struct clk_alpha_pll gcc_gpll9 = {
147 .offset = 0x9000,
148 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TAYCAN_EHA_T],
149 .clkr = {
150 .enable_reg = 0x52028,
151 .enable_mask = BIT(9),
152 .hw.init = &(const struct clk_init_data) {
153 .name = "gcc_gpll9",
154 .parent_data = &(const struct clk_parent_data) {
155 .index = DT_BI_TCXO,
156 },
157 .num_parents = 1,
158 .ops = &clk_alpha_pll_fixed_taycan_eha_t_ops,
159 },
160 },
161 };
162
163 static const struct parent_map gcc_parent_map_0[] = {
164 { P_BI_TCXO, 0 },
165 { P_GCC_GPLL0_OUT_MAIN, 1 },
166 { P_GCC_GPLL0_OUT_EVEN, 6 },
167 };
168
169 static const struct clk_parent_data gcc_parent_data_0[] = {
170 { .index = DT_BI_TCXO },
171 { .hw = &gcc_gpll0.clkr.hw },
172 { .hw = &gcc_gpll0_out_even.clkr.hw },
173 };
174
175 static const struct parent_map gcc_parent_map_1[] = {
176 { P_BI_TCXO, 0 },
177 { P_GCC_GPLL0_OUT_MAIN, 1 },
178 { P_GCC_GPLL7_OUT_MAIN, 2 },
179 { P_GCC_GPLL0_OUT_EVEN, 6 },
180 };
181
182 static const struct clk_parent_data gcc_parent_data_1[] = {
183 { .index = DT_BI_TCXO },
184 { .hw = &gcc_gpll0.clkr.hw },
185 { .hw = &gcc_gpll7.clkr.hw },
186 { .hw = &gcc_gpll0_out_even.clkr.hw },
187 };
188
189 static const struct parent_map gcc_parent_map_2[] = {
190 { P_BI_TCXO, 0 },
191 { P_GCC_GPLL0_OUT_MAIN, 1 },
192 { P_SLEEP_CLK, 5 },
193 { P_GCC_GPLL0_OUT_EVEN, 6 },
194 };
195
196 static const struct clk_parent_data gcc_parent_data_2[] = {
197 { .index = DT_BI_TCXO },
198 { .hw = &gcc_gpll0.clkr.hw },
199 { .index = DT_SLEEP_CLK },
200 { .hw = &gcc_gpll0_out_even.clkr.hw },
201 };
202
203 static const struct parent_map gcc_parent_map_3[] = {
204 { P_BI_TCXO, 0 },
205 };
206
207 static const struct clk_parent_data gcc_parent_data_3[] = {
208 { .index = DT_BI_TCXO },
209 };
210
211 static const struct parent_map gcc_parent_map_4[] = {
212 { P_BI_TCXO, 0 },
213 { P_SLEEP_CLK, 5 },
214 };
215
216 static const struct clk_parent_data gcc_parent_data_4[] = {
217 { .index = DT_BI_TCXO },
218 { .index = DT_SLEEP_CLK },
219 };
220
221 static const struct parent_map gcc_parent_map_5[] = {
222 { P_BI_TCXO, 0 },
223 { P_GCC_GPLL0_OUT_MAIN, 1 },
224 { P_GCC_GPLL5_OUT_MAIN, 3 },
225 { P_GCC_GPLL4_OUT_MAIN, 5 },
226 { P_GCC_GPLL0_OUT_EVEN, 6 },
227 };
228
229 static const struct clk_parent_data gcc_parent_data_5[] = {
230 { .index = DT_BI_TCXO },
231 { .hw = &gcc_gpll0.clkr.hw },
232 { .hw = &gcc_gpll5.clkr.hw },
233 { .hw = &gcc_gpll4.clkr.hw },
234 { .hw = &gcc_gpll0_out_even.clkr.hw },
235 };
236
237 static const struct parent_map gcc_parent_map_8[] = {
238 { P_BI_TCXO, 0 },
239 { P_GCC_GPLL0_OUT_MAIN, 1 },
240 { P_GCC_GPLL9_OUT_MAIN, 2 },
241 { P_GCC_GPLL4_OUT_MAIN, 5 },
242 { P_GCC_GPLL0_OUT_EVEN, 6 },
243 };
244
245 static const struct clk_parent_data gcc_parent_data_8[] = {
246 { .index = DT_BI_TCXO },
247 { .hw = &gcc_gpll0.clkr.hw },
248 { .hw = &gcc_gpll9.clkr.hw },
249 { .hw = &gcc_gpll4.clkr.hw },
250 { .hw = &gcc_gpll0_out_even.clkr.hw },
251 };
252
253 static struct clk_regmap_phy_mux gcc_pcie_0_pipe_clk_src = {
254 .reg = 0x6b0a8,
255 .clkr = {
256 .hw.init = &(const struct clk_init_data) {
257 .name = "gcc_pcie_0_pipe_clk_src",
258 .parent_data = &(const struct clk_parent_data){
259 .index = DT_PCIE_0_PIPE_CLK,
260 },
261 .num_parents = 1,
262 .ops = &clk_regmap_phy_mux_ops,
263 },
264 },
265 };
266
267 static struct clk_regmap_phy_mux gcc_pcie_1_pipe_clk_src = {
268 .reg = 0x670a4,
269 .clkr = {
270 .hw.init = &(const struct clk_init_data) {
271 .name = "gcc_pcie_1_pipe_clk_src",
272 .parent_data = &(const struct clk_parent_data){
273 .index = DT_PCIE_1_PIPE_CLK,
274 },
275 .num_parents = 1,
276 .ops = &clk_regmap_phy_mux_ops,
277 },
278 },
279 };
280
281 static struct clk_regmap_phy_mux gcc_ufs_phy_rx_symbol_0_clk_src = {
282 .reg = 0x77068,
283 .clkr = {
284 .hw.init = &(const struct clk_init_data) {
285 .name = "gcc_ufs_phy_rx_symbol_0_clk_src",
286 .parent_data = &(const struct clk_parent_data){
287 .index = DT_UFS_PHY_RX_SYMBOL_0_CLK,
288 },
289 .num_parents = 1,
290 .ops = &clk_regmap_phy_mux_ops,
291 },
292 },
293 };
294
295 static struct clk_regmap_phy_mux gcc_ufs_phy_rx_symbol_1_clk_src = {
296 .reg = 0x770ec,
297 .clkr = {
298 .hw.init = &(const struct clk_init_data) {
299 .name = "gcc_ufs_phy_rx_symbol_1_clk_src",
300 .parent_data = &(const struct clk_parent_data){
301 .index = DT_UFS_PHY_RX_SYMBOL_1_CLK,
302 },
303 .num_parents = 1,
304 .ops = &clk_regmap_phy_mux_ops,
305 },
306 },
307 };
308
309 static struct clk_regmap_phy_mux gcc_ufs_phy_tx_symbol_0_clk_src = {
310 .reg = 0x77058,
311 .clkr = {
312 .hw.init = &(const struct clk_init_data) {
313 .name = "gcc_ufs_phy_tx_symbol_0_clk_src",
314 .parent_data = &(const struct clk_parent_data){
315 .index = DT_UFS_PHY_TX_SYMBOL_0_CLK,
316 },
317 .num_parents = 1,
318 .ops = &clk_regmap_phy_mux_ops,
319 },
320 },
321 };
322
323 static struct clk_regmap_phy_mux gcc_usb3_prim_phy_pipe_clk_src = {
324 .reg = 0x39074,
325 .clkr = {
326 .hw.init = &(const struct clk_init_data) {
327 .name = "gcc_usb3_prim_phy_pipe_clk_src",
328 .parent_data = &(const struct clk_parent_data){
329 .index = DT_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
330 },
331 .num_parents = 1,
332 .ops = &clk_regmap_phy_mux_ops,
333 },
334 },
335 };
336
337 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
338 F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
339 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
340 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
341 { }
342 };
343
344 static struct clk_rcg2 gcc_gp1_clk_src = {
345 .cmd_rcgr = 0x64004,
346 .mnd_width = 16,
347 .hid_width = 5,
348 .parent_map = gcc_parent_map_2,
349 .freq_tbl = ftbl_gcc_gp1_clk_src,
350 .hw_clk_ctrl = true,
351 .clkr.hw.init = &(const struct clk_init_data) {
352 .name = "gcc_gp1_clk_src",
353 .parent_data = gcc_parent_data_2,
354 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
355 .flags = CLK_SET_RATE_PARENT,
356 .ops = &clk_rcg2_shared_no_init_park_ops,
357 },
358 };
359
360 static struct clk_rcg2 gcc_gp2_clk_src = {
361 .cmd_rcgr = 0x65004,
362 .mnd_width = 16,
363 .hid_width = 5,
364 .parent_map = gcc_parent_map_2,
365 .freq_tbl = ftbl_gcc_gp1_clk_src,
366 .hw_clk_ctrl = true,
367 .clkr.hw.init = &(const struct clk_init_data) {
368 .name = "gcc_gp2_clk_src",
369 .parent_data = gcc_parent_data_2,
370 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
371 .flags = CLK_SET_RATE_PARENT,
372 .ops = &clk_rcg2_shared_no_init_park_ops,
373 },
374 };
375
376 static struct clk_rcg2 gcc_gp3_clk_src = {
377 .cmd_rcgr = 0x66004,
378 .mnd_width = 16,
379 .hid_width = 5,
380 .parent_map = gcc_parent_map_2,
381 .freq_tbl = ftbl_gcc_gp1_clk_src,
382 .hw_clk_ctrl = true,
383 .clkr.hw.init = &(const struct clk_init_data) {
384 .name = "gcc_gp3_clk_src",
385 .parent_data = gcc_parent_data_2,
386 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
387 .flags = CLK_SET_RATE_PARENT,
388 .ops = &clk_rcg2_shared_no_init_park_ops,
389 },
390 };
391
392 static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
393 F(19200000, P_BI_TCXO, 1, 0, 0),
394 { }
395 };
396
397 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
398 .cmd_rcgr = 0x6b0ac,
399 .mnd_width = 16,
400 .hid_width = 5,
401 .parent_map = gcc_parent_map_4,
402 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
403 .hw_clk_ctrl = true,
404 .clkr.hw.init = &(const struct clk_init_data) {
405 .name = "gcc_pcie_0_aux_clk_src",
406 .parent_data = gcc_parent_data_4,
407 .num_parents = ARRAY_SIZE(gcc_parent_data_4),
408 .flags = CLK_SET_RATE_PARENT,
409 .ops = &clk_rcg2_shared_no_init_park_ops,
410 },
411 };
412
413 static struct clk_rcg2 gcc_pcie_0_phy_aux_clk_src = {
414 .cmd_rcgr = 0x6b0c4,
415 .mnd_width = 0,
416 .hid_width = 5,
417 .parent_map = gcc_parent_map_0,
418 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
419 .hw_clk_ctrl = true,
420 .clkr.hw.init = &(const struct clk_init_data) {
421 .name = "gcc_pcie_0_phy_aux_clk_src",
422 .parent_data = gcc_parent_data_0,
423 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
424 .flags = CLK_SET_RATE_PARENT,
425 .ops = &clk_rcg2_shared_no_init_park_ops,
426 },
427 };
428
429 static const struct freq_tbl ftbl_gcc_pcie_0_phy_rchng_clk_src[] = {
430 F(19200000, P_BI_TCXO, 1, 0, 0),
431 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
432 { }
433 };
434
435 static struct clk_rcg2 gcc_pcie_0_phy_rchng_clk_src = {
436 .cmd_rcgr = 0x6b08c,
437 .mnd_width = 0,
438 .hid_width = 5,
439 .parent_map = gcc_parent_map_0,
440 .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
441 .hw_clk_ctrl = true,
442 .clkr.hw.init = &(const struct clk_init_data) {
443 .name = "gcc_pcie_0_phy_rchng_clk_src",
444 .parent_data = gcc_parent_data_0,
445 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
446 .flags = CLK_SET_RATE_PARENT,
447 .ops = &clk_rcg2_shared_no_init_park_ops,
448 },
449 };
450
451 static struct clk_rcg2 gcc_pcie_1_aux_clk_src = {
452 .cmd_rcgr = 0x670a8,
453 .mnd_width = 16,
454 .hid_width = 5,
455 .parent_map = gcc_parent_map_4,
456 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
457 .hw_clk_ctrl = true,
458 .clkr.hw.init = &(const struct clk_init_data) {
459 .name = "gcc_pcie_1_aux_clk_src",
460 .parent_data = gcc_parent_data_4,
461 .num_parents = ARRAY_SIZE(gcc_parent_data_4),
462 .flags = CLK_SET_RATE_PARENT,
463 .ops = &clk_rcg2_shared_no_init_park_ops,
464 },
465 };
466
467 static struct clk_rcg2 gcc_pcie_1_phy_aux_clk_src = {
468 .cmd_rcgr = 0x670c0,
469 .mnd_width = 0,
470 .hid_width = 5,
471 .parent_map = gcc_parent_map_0,
472 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
473 .hw_clk_ctrl = true,
474 .clkr.hw.init = &(const struct clk_init_data) {
475 .name = "gcc_pcie_1_phy_aux_clk_src",
476 .parent_data = gcc_parent_data_0,
477 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
478 .flags = CLK_SET_RATE_PARENT,
479 .ops = &clk_rcg2_shared_no_init_park_ops,
480 },
481 };
482
483 static struct clk_rcg2 gcc_pcie_1_phy_rchng_clk_src = {
484 .cmd_rcgr = 0x67088,
485 .mnd_width = 0,
486 .hid_width = 5,
487 .parent_map = gcc_parent_map_0,
488 .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
489 .hw_clk_ctrl = true,
490 .clkr.hw.init = &(const struct clk_init_data) {
491 .name = "gcc_pcie_1_phy_rchng_clk_src",
492 .parent_data = gcc_parent_data_0,
493 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
494 .flags = CLK_SET_RATE_PARENT,
495 .ops = &clk_rcg2_shared_no_init_park_ops,
496 },
497 };
498
499 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
500 F(60000000, P_GCC_GPLL0_OUT_MAIN, 10, 0, 0),
501 { }
502 };
503
504 static struct clk_rcg2 gcc_pdm2_clk_src = {
505 .cmd_rcgr = 0x33010,
506 .mnd_width = 0,
507 .hid_width = 5,
508 .parent_map = gcc_parent_map_0,
509 .freq_tbl = ftbl_gcc_pdm2_clk_src,
510 .hw_clk_ctrl = true,
511 .clkr.hw.init = &(const struct clk_init_data) {
512 .name = "gcc_pdm2_clk_src",
513 .parent_data = gcc_parent_data_0,
514 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
515 .flags = CLK_SET_RATE_PARENT,
516 .ops = &clk_rcg2_shared_no_init_park_ops,
517 },
518 };
519
520 static struct clk_rcg2 gcc_qupv3_i2c_s0_clk_src = {
521 .cmd_rcgr = 0x17008,
522 .mnd_width = 0,
523 .hid_width = 5,
524 .parent_map = gcc_parent_map_0,
525 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
526 .hw_clk_ctrl = true,
527 .clkr.hw.init = &(const struct clk_init_data) {
528 .name = "gcc_qupv3_i2c_s0_clk_src",
529 .parent_data = gcc_parent_data_0,
530 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
531 .flags = CLK_SET_RATE_PARENT,
532 .ops = &clk_rcg2_shared_no_init_park_ops,
533 },
534 };
535
536 static struct clk_rcg2 gcc_qupv3_i2c_s1_clk_src = {
537 .cmd_rcgr = 0x17024,
538 .mnd_width = 0,
539 .hid_width = 5,
540 .parent_map = gcc_parent_map_0,
541 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
542 .hw_clk_ctrl = true,
543 .clkr.hw.init = &(const struct clk_init_data) {
544 .name = "gcc_qupv3_i2c_s1_clk_src",
545 .parent_data = gcc_parent_data_0,
546 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
547 .flags = CLK_SET_RATE_PARENT,
548 .ops = &clk_rcg2_shared_no_init_park_ops,
549 },
550 };
551
552 static struct clk_rcg2 gcc_qupv3_i2c_s2_clk_src = {
553 .cmd_rcgr = 0x17040,
554 .mnd_width = 0,
555 .hid_width = 5,
556 .parent_map = gcc_parent_map_0,
557 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
558 .hw_clk_ctrl = true,
559 .clkr.hw.init = &(const struct clk_init_data) {
560 .name = "gcc_qupv3_i2c_s2_clk_src",
561 .parent_data = gcc_parent_data_0,
562 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
563 .flags = CLK_SET_RATE_PARENT,
564 .ops = &clk_rcg2_shared_no_init_park_ops,
565 },
566 };
567
568 static struct clk_rcg2 gcc_qupv3_i2c_s3_clk_src = {
569 .cmd_rcgr = 0x1705c,
570 .mnd_width = 0,
571 .hid_width = 5,
572 .parent_map = gcc_parent_map_0,
573 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
574 .hw_clk_ctrl = true,
575 .clkr.hw.init = &(const struct clk_init_data) {
576 .name = "gcc_qupv3_i2c_s3_clk_src",
577 .parent_data = gcc_parent_data_0,
578 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
579 .flags = CLK_SET_RATE_PARENT,
580 .ops = &clk_rcg2_shared_no_init_park_ops,
581 },
582 };
583
584 static struct clk_rcg2 gcc_qupv3_i2c_s4_clk_src = {
585 .cmd_rcgr = 0x17078,
586 .mnd_width = 0,
587 .hid_width = 5,
588 .parent_map = gcc_parent_map_0,
589 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
590 .hw_clk_ctrl = true,
591 .clkr.hw.init = &(const struct clk_init_data) {
592 .name = "gcc_qupv3_i2c_s4_clk_src",
593 .parent_data = gcc_parent_data_0,
594 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
595 .flags = CLK_SET_RATE_PARENT,
596 .ops = &clk_rcg2_shared_no_init_park_ops,
597 },
598 };
599
600 static const struct freq_tbl ftbl_gcc_qupv3_wrap1_qspi_ref_clk_src[] = {
601 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
602 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
603 F(19200000, P_BI_TCXO, 1, 0, 0),
604 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
605 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
606 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
607 F(51200000, P_GCC_GPLL0_OUT_EVEN, 1, 64, 375),
608 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
609 F(66666667, P_GCC_GPLL0_OUT_MAIN, 9, 0, 0),
610 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
611 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
612 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
613 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
614 F(102400000, P_GCC_GPLL0_OUT_EVEN, 1, 128, 375),
615 F(112000000, P_GCC_GPLL0_OUT_EVEN, 1, 28, 75),
616 F(117964800, P_GCC_GPLL0_OUT_EVEN, 1, 6144, 15625),
617 F(120000000, P_GCC_GPLL0_OUT_EVEN, 2.5, 0, 0),
618 F(150000000, P_GCC_GPLL0_OUT_EVEN, 2, 0, 0),
619 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
620 { }
621 };
622
623 static struct clk_init_data gcc_qupv3_wrap1_qspi_ref_clk_src_init = {
624 .name = "gcc_qupv3_wrap1_qspi_ref_clk_src",
625 .parent_data = gcc_parent_data_0,
626 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
627 .flags = CLK_SET_RATE_PARENT,
628 .ops = &clk_rcg2_shared_no_init_park_ops,
629 };
630
631 static struct clk_rcg2 gcc_qupv3_wrap1_qspi_ref_clk_src = {
632 .cmd_rcgr = 0x188c0,
633 .mnd_width = 16,
634 .hid_width = 5,
635 .parent_map = gcc_parent_map_0,
636 .freq_tbl = ftbl_gcc_qupv3_wrap1_qspi_ref_clk_src,
637 .hw_clk_ctrl = true,
638 .clkr.hw.init = &gcc_qupv3_wrap1_qspi_ref_clk_src_init,
639 };
640
641 static const struct freq_tbl ftbl_gcc_qupv3_wrap1_s0_clk_src[] = {
642 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
643 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
644 F(19200000, P_BI_TCXO, 1, 0, 0),
645 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
646 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
647 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
648 F(51200000, P_GCC_GPLL0_OUT_EVEN, 1, 64, 375),
649 F(60000000, P_GCC_GPLL0_OUT_EVEN, 5, 0, 0),
650 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
651 F(66666667, P_GCC_GPLL0_OUT_MAIN, 9, 0, 0),
652 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
653 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
654 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
655 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
656 { }
657 };
658
659 static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
660 .name = "gcc_qupv3_wrap1_s0_clk_src",
661 .parent_data = gcc_parent_data_0,
662 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
663 .flags = CLK_SET_RATE_PARENT,
664 .ops = &clk_rcg2_shared_no_init_park_ops,
665 };
666
667 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
668 .cmd_rcgr = 0x18014,
669 .mnd_width = 16,
670 .hid_width = 5,
671 .parent_map = gcc_parent_map_0,
672 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
673 .hw_clk_ctrl = true,
674 .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
675 };
676
677 static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
678 .name = "gcc_qupv3_wrap1_s1_clk_src",
679 .parent_data = gcc_parent_data_0,
680 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
681 .flags = CLK_SET_RATE_PARENT,
682 .ops = &clk_rcg2_shared_no_init_park_ops,
683 };
684
685 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
686 .cmd_rcgr = 0x18150,
687 .mnd_width = 16,
688 .hid_width = 5,
689 .parent_map = gcc_parent_map_0,
690 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
691 .hw_clk_ctrl = true,
692 .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
693 };
694
695 static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
696 .name = "gcc_qupv3_wrap1_s3_clk_src",
697 .parent_data = gcc_parent_data_0,
698 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
699 .flags = CLK_SET_RATE_PARENT,
700 .ops = &clk_rcg2_shared_no_init_park_ops,
701 };
702
703 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
704 .cmd_rcgr = 0x182a0,
705 .mnd_width = 16,
706 .hid_width = 5,
707 .parent_map = gcc_parent_map_0,
708 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
709 .hw_clk_ctrl = true,
710 .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
711 };
712
713 static const struct freq_tbl ftbl_gcc_qupv3_wrap1_s4_clk_src[] = {
714 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
715 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
716 F(19200000, P_BI_TCXO, 1, 0, 0),
717 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
718 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
719 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
720 F(51200000, P_GCC_GPLL0_OUT_EVEN, 1, 64, 375),
721 F(60000000, P_GCC_GPLL0_OUT_EVEN, 5, 0, 0),
722 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
723 F(66666667, P_GCC_GPLL0_OUT_MAIN, 9, 0, 0),
724 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
725 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
726 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
727 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
728 F(102400000, P_GCC_GPLL0_OUT_EVEN, 1, 128, 375),
729 F(112000000, P_GCC_GPLL0_OUT_EVEN, 1, 28, 75),
730 F(117964800, P_GCC_GPLL0_OUT_EVEN, 1, 6144, 15625),
731 F(120000000, P_GCC_GPLL0_OUT_MAIN, 5, 0, 0),
732 { }
733 };
734
735 static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
736 .name = "gcc_qupv3_wrap1_s4_clk_src",
737 .parent_data = gcc_parent_data_0,
738 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
739 .flags = CLK_SET_RATE_PARENT,
740 .ops = &clk_rcg2_shared_no_init_park_ops,
741 };
742
743 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
744 .cmd_rcgr = 0x183dc,
745 .mnd_width = 16,
746 .hid_width = 5,
747 .parent_map = gcc_parent_map_0,
748 .freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src,
749 .hw_clk_ctrl = true,
750 .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
751 };
752
753 static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
754 .name = "gcc_qupv3_wrap1_s5_clk_src",
755 .parent_data = gcc_parent_data_0,
756 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
757 .flags = CLK_SET_RATE_PARENT,
758 .ops = &clk_rcg2_shared_no_init_park_ops,
759 };
760
761 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
762 .cmd_rcgr = 0x18518,
763 .mnd_width = 16,
764 .hid_width = 5,
765 .parent_map = gcc_parent_map_0,
766 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
767 .hw_clk_ctrl = true,
768 .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
769 };
770
771 static struct clk_init_data gcc_qupv3_wrap1_s6_clk_src_init = {
772 .name = "gcc_qupv3_wrap1_s6_clk_src",
773 .parent_data = gcc_parent_data_0,
774 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
775 .flags = CLK_SET_RATE_PARENT,
776 .ops = &clk_rcg2_shared_no_init_park_ops,
777 };
778
779 static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = {
780 .cmd_rcgr = 0x18654,
781 .mnd_width = 16,
782 .hid_width = 5,
783 .parent_map = gcc_parent_map_0,
784 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
785 .hw_clk_ctrl = true,
786 .clkr.hw.init = &gcc_qupv3_wrap1_s6_clk_src_init,
787 };
788
789 static struct clk_init_data gcc_qupv3_wrap1_s7_clk_src_init = {
790 .name = "gcc_qupv3_wrap1_s7_clk_src",
791 .parent_data = gcc_parent_data_0,
792 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
793 .flags = CLK_SET_RATE_PARENT,
794 .ops = &clk_rcg2_shared_no_init_park_ops,
795 };
796
797 static struct clk_rcg2 gcc_qupv3_wrap1_s7_clk_src = {
798 .cmd_rcgr = 0x18790,
799 .mnd_width = 16,
800 .hid_width = 5,
801 .parent_map = gcc_parent_map_0,
802 .freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src,
803 .hw_clk_ctrl = true,
804 .clkr.hw.init = &gcc_qupv3_wrap1_s7_clk_src_init,
805 };
806
807 static struct clk_init_data gcc_qupv3_wrap2_s0_clk_src_init = {
808 .name = "gcc_qupv3_wrap2_s0_clk_src",
809 .parent_data = gcc_parent_data_1,
810 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
811 .flags = CLK_SET_RATE_PARENT,
812 .ops = &clk_rcg2_shared_no_init_park_ops,
813 };
814
815 static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = {
816 .cmd_rcgr = 0x1e01c,
817 .mnd_width = 16,
818 .hid_width = 5,
819 .parent_map = gcc_parent_map_1,
820 .freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src,
821 .hw_clk_ctrl = true,
822 .clkr.hw.init = &gcc_qupv3_wrap2_s0_clk_src_init,
823 };
824
825 static struct clk_init_data gcc_qupv3_wrap2_s1_clk_src_init = {
826 .name = "gcc_qupv3_wrap2_s1_clk_src",
827 .parent_data = gcc_parent_data_1,
828 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
829 .flags = CLK_SET_RATE_PARENT,
830 .ops = &clk_rcg2_shared_no_init_park_ops,
831 };
832
833 static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = {
834 .cmd_rcgr = 0x1e160,
835 .mnd_width = 16,
836 .hid_width = 5,
837 .parent_map = gcc_parent_map_1,
838 .freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src,
839 .hw_clk_ctrl = true,
840 .clkr.hw.init = &gcc_qupv3_wrap2_s1_clk_src_init,
841 };
842
843 static struct clk_init_data gcc_qupv3_wrap2_s2_clk_src_init = {
844 .name = "gcc_qupv3_wrap2_s2_clk_src",
845 .parent_data = gcc_parent_data_0,
846 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
847 .flags = CLK_SET_RATE_PARENT,
848 .ops = &clk_rcg2_shared_no_init_park_ops,
849 };
850
851 static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src = {
852 .cmd_rcgr = 0x1e29c,
853 .mnd_width = 16,
854 .hid_width = 5,
855 .parent_map = gcc_parent_map_0,
856 .freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src,
857 .hw_clk_ctrl = true,
858 .clkr.hw.init = &gcc_qupv3_wrap2_s2_clk_src_init,
859 };
860
861 static struct clk_init_data gcc_qupv3_wrap2_s3_clk_src_init = {
862 .name = "gcc_qupv3_wrap2_s3_clk_src",
863 .parent_data = gcc_parent_data_0,
864 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
865 .flags = CLK_SET_RATE_PARENT,
866 .ops = &clk_rcg2_shared_no_init_park_ops,
867 };
868
869 static struct clk_rcg2 gcc_qupv3_wrap2_s3_clk_src = {
870 .cmd_rcgr = 0x1e3d8,
871 .mnd_width = 16,
872 .hid_width = 5,
873 .parent_map = gcc_parent_map_0,
874 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
875 .hw_clk_ctrl = true,
876 .clkr.hw.init = &gcc_qupv3_wrap2_s3_clk_src_init,
877 };
878
879 static struct clk_init_data gcc_qupv3_wrap2_s4_clk_src_init = {
880 .name = "gcc_qupv3_wrap2_s4_clk_src",
881 .parent_data = gcc_parent_data_0,
882 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
883 .flags = CLK_SET_RATE_PARENT,
884 .ops = &clk_rcg2_shared_no_init_park_ops,
885 };
886
887 static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = {
888 .cmd_rcgr = 0x1e514,
889 .mnd_width = 16,
890 .hid_width = 5,
891 .parent_map = gcc_parent_map_0,
892 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
893 .hw_clk_ctrl = true,
894 .clkr.hw.init = &gcc_qupv3_wrap2_s4_clk_src_init,
895 };
896
897 static const struct freq_tbl ftbl_gcc_qupv3_wrap3_qspi_ref_clk_src[] = {
898 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
899 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
900 F(19200000, P_BI_TCXO, 1, 0, 0),
901 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
902 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
903 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
904 F(51200000, P_GCC_GPLL0_OUT_EVEN, 1, 64, 375),
905 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
906 F(66666667, P_GCC_GPLL0_OUT_MAIN, 9, 0, 0),
907 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
908 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
909 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
910 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
911 F(102400000, P_GCC_GPLL0_OUT_EVEN, 1, 128, 375),
912 F(112000000, P_GCC_GPLL0_OUT_EVEN, 1, 28, 75),
913 F(117964800, P_GCC_GPLL0_OUT_EVEN, 1, 6144, 15625),
914 F(120000000, P_GCC_GPLL0_OUT_EVEN, 2.5, 0, 0),
915 F(150000000, P_GCC_GPLL0_OUT_EVEN, 2, 0, 0),
916 F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0),
917 { }
918 };
919
920 static struct clk_init_data gcc_qupv3_wrap3_qspi_ref_clk_src_init = {
921 .name = "gcc_qupv3_wrap3_qspi_ref_clk_src",
922 .parent_data = gcc_parent_data_1,
923 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
924 .flags = CLK_SET_RATE_PARENT,
925 .ops = &clk_rcg2_shared_no_init_park_ops,
926 };
927
928 static struct clk_rcg2 gcc_qupv3_wrap3_qspi_ref_clk_src = {
929 .cmd_rcgr = 0xa8650,
930 .mnd_width = 16,
931 .hid_width = 5,
932 .parent_map = gcc_parent_map_1,
933 .freq_tbl = ftbl_gcc_qupv3_wrap3_qspi_ref_clk_src,
934 .hw_clk_ctrl = true,
935 .clkr.hw.init = &gcc_qupv3_wrap3_qspi_ref_clk_src_init,
936 };
937
938 static struct clk_init_data gcc_qupv3_wrap3_s0_clk_src_init = {
939 .name = "gcc_qupv3_wrap3_s0_clk_src",
940 .parent_data = gcc_parent_data_0,
941 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
942 .flags = CLK_SET_RATE_PARENT,
943 .ops = &clk_rcg2_shared_no_init_park_ops,
944 };
945
946 static struct clk_rcg2 gcc_qupv3_wrap3_s0_clk_src = {
947 .cmd_rcgr = 0xa8014,
948 .mnd_width = 16,
949 .hid_width = 5,
950 .parent_map = gcc_parent_map_0,
951 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
952 .hw_clk_ctrl = true,
953 .clkr.hw.init = &gcc_qupv3_wrap3_s0_clk_src_init,
954 };
955
956 static struct clk_init_data gcc_qupv3_wrap3_s2_clk_src_init = {
957 .name = "gcc_qupv3_wrap3_s2_clk_src",
958 .parent_data = gcc_parent_data_0,
959 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
960 .flags = CLK_SET_RATE_PARENT,
961 .ops = &clk_rcg2_shared_no_init_park_ops,
962 };
963
964 static struct clk_rcg2 gcc_qupv3_wrap3_s2_clk_src = {
965 .cmd_rcgr = 0xa8168,
966 .mnd_width = 16,
967 .hid_width = 5,
968 .parent_map = gcc_parent_map_0,
969 .freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src,
970 .hw_clk_ctrl = true,
971 .clkr.hw.init = &gcc_qupv3_wrap3_s2_clk_src_init,
972 };
973
974 static struct clk_init_data gcc_qupv3_wrap3_s3_clk_src_init = {
975 .name = "gcc_qupv3_wrap3_s3_clk_src",
976 .parent_data = gcc_parent_data_0,
977 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
978 .flags = CLK_SET_RATE_PARENT,
979 .ops = &clk_rcg2_shared_no_init_park_ops,
980 };
981
982 static struct clk_rcg2 gcc_qupv3_wrap3_s3_clk_src = {
983 .cmd_rcgr = 0xa82a4,
984 .mnd_width = 16,
985 .hid_width = 5,
986 .parent_map = gcc_parent_map_0,
987 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
988 .hw_clk_ctrl = true,
989 .clkr.hw.init = &gcc_qupv3_wrap3_s3_clk_src_init,
990 };
991
992 static struct clk_init_data gcc_qupv3_wrap3_s4_clk_src_init = {
993 .name = "gcc_qupv3_wrap3_s4_clk_src",
994 .parent_data = gcc_parent_data_0,
995 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
996 .flags = CLK_SET_RATE_PARENT,
997 .ops = &clk_rcg2_shared_no_init_park_ops,
998 };
999
1000 static struct clk_rcg2 gcc_qupv3_wrap3_s4_clk_src = {
1001 .cmd_rcgr = 0xa83e0,
1002 .mnd_width = 16,
1003 .hid_width = 5,
1004 .parent_map = gcc_parent_map_0,
1005 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
1006 .hw_clk_ctrl = true,
1007 .clkr.hw.init = &gcc_qupv3_wrap3_s4_clk_src_init,
1008 };
1009
1010 static struct clk_init_data gcc_qupv3_wrap3_s5_clk_src_init = {
1011 .name = "gcc_qupv3_wrap3_s5_clk_src",
1012 .parent_data = gcc_parent_data_0,
1013 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1014 .flags = CLK_SET_RATE_PARENT,
1015 .ops = &clk_rcg2_shared_no_init_park_ops,
1016 };
1017
1018 static struct clk_rcg2 gcc_qupv3_wrap3_s5_clk_src = {
1019 .cmd_rcgr = 0xa851c,
1020 .mnd_width = 16,
1021 .hid_width = 5,
1022 .parent_map = gcc_parent_map_0,
1023 .freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src,
1024 .hw_clk_ctrl = true,
1025 .clkr.hw.init = &gcc_qupv3_wrap3_s5_clk_src_init,
1026 };
1027
1028 static struct clk_init_data gcc_qupv3_wrap4_s0_clk_src_init = {
1029 .name = "gcc_qupv3_wrap4_s0_clk_src",
1030 .parent_data = gcc_parent_data_1,
1031 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1032 .flags = CLK_SET_RATE_PARENT,
1033 .ops = &clk_rcg2_shared_no_init_park_ops,
1034 };
1035
1036 static struct clk_rcg2 gcc_qupv3_wrap4_s0_clk_src = {
1037 .cmd_rcgr = 0xa9014,
1038 .mnd_width = 16,
1039 .hid_width = 5,
1040 .parent_map = gcc_parent_map_1,
1041 .freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src,
1042 .hw_clk_ctrl = true,
1043 .clkr.hw.init = &gcc_qupv3_wrap4_s0_clk_src_init,
1044 };
1045
1046 static struct clk_init_data gcc_qupv3_wrap4_s1_clk_src_init = {
1047 .name = "gcc_qupv3_wrap4_s1_clk_src",
1048 .parent_data = gcc_parent_data_1,
1049 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1050 .flags = CLK_SET_RATE_PARENT,
1051 .ops = &clk_rcg2_shared_no_init_park_ops,
1052 };
1053
1054 static struct clk_rcg2 gcc_qupv3_wrap4_s1_clk_src = {
1055 .cmd_rcgr = 0xa9150,
1056 .mnd_width = 16,
1057 .hid_width = 5,
1058 .parent_map = gcc_parent_map_1,
1059 .freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src,
1060 .hw_clk_ctrl = true,
1061 .clkr.hw.init = &gcc_qupv3_wrap4_s1_clk_src_init,
1062 };
1063
1064 static struct clk_init_data gcc_qupv3_wrap4_s2_clk_src_init = {
1065 .name = "gcc_qupv3_wrap4_s2_clk_src",
1066 .parent_data = gcc_parent_data_1,
1067 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1068 .flags = CLK_SET_RATE_PARENT,
1069 .ops = &clk_rcg2_shared_no_init_park_ops,
1070 };
1071
1072 static struct clk_rcg2 gcc_qupv3_wrap4_s2_clk_src = {
1073 .cmd_rcgr = 0xa928c,
1074 .mnd_width = 16,
1075 .hid_width = 5,
1076 .parent_map = gcc_parent_map_1,
1077 .freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src,
1078 .hw_clk_ctrl = true,
1079 .clkr.hw.init = &gcc_qupv3_wrap4_s2_clk_src_init,
1080 };
1081
1082 static struct clk_init_data gcc_qupv3_wrap4_s3_clk_src_init = {
1083 .name = "gcc_qupv3_wrap4_s3_clk_src",
1084 .parent_data = gcc_parent_data_1,
1085 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1086 .flags = CLK_SET_RATE_PARENT,
1087 .ops = &clk_rcg2_shared_no_init_park_ops,
1088 };
1089
1090 static struct clk_rcg2 gcc_qupv3_wrap4_s3_clk_src = {
1091 .cmd_rcgr = 0xa93c8,
1092 .mnd_width = 16,
1093 .hid_width = 5,
1094 .parent_map = gcc_parent_map_1,
1095 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
1096 .hw_clk_ctrl = true,
1097 .clkr.hw.init = &gcc_qupv3_wrap4_s3_clk_src_init,
1098 };
1099
1100 static struct clk_init_data gcc_qupv3_wrap4_s4_clk_src_init = {
1101 .name = "gcc_qupv3_wrap4_s4_clk_src",
1102 .parent_data = gcc_parent_data_1,
1103 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1104 .flags = CLK_SET_RATE_PARENT,
1105 .ops = &clk_rcg2_shared_no_init_park_ops,
1106 };
1107
1108 static struct clk_rcg2 gcc_qupv3_wrap4_s4_clk_src = {
1109 .cmd_rcgr = 0xa9504,
1110 .mnd_width = 16,
1111 .hid_width = 5,
1112 .parent_map = gcc_parent_map_1,
1113 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
1114 .hw_clk_ctrl = true,
1115 .clkr.hw.init = &gcc_qupv3_wrap4_s4_clk_src_init,
1116 };
1117
1118 static const struct freq_tbl ftbl_gcc_qupv3_wrap5_qspi_ref_clk_src[] = {
1119 F(150000000, P_GCC_GPLL0_OUT_EVEN, 2, 0, 0),
1120 F(196078431, P_GCC_GPLL0_OUT_EVEN, 1, 100, 153),
1121 F(300000000, P_GCC_GPLL0_OUT_EVEN, 1, 0, 0),
1122 { }
1123 };
1124
1125 static struct clk_init_data gcc_qupv3_wrap5_qspi_ref_clk_src_init = {
1126 .name = "gcc_qupv3_wrap5_qspi_ref_clk_src",
1127 .parent_data = gcc_parent_data_1,
1128 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1129 .flags = CLK_SET_RATE_PARENT,
1130 .ops = &clk_rcg2_shared_no_init_park_ops,
1131 };
1132
1133 static struct clk_rcg2 gcc_qupv3_wrap5_qspi_ref_clk_src = {
1134 .cmd_rcgr = 0xad024,
1135 .mnd_width = 16,
1136 .hid_width = 5,
1137 .parent_map = gcc_parent_map_1,
1138 .freq_tbl = ftbl_gcc_qupv3_wrap5_qspi_ref_clk_src,
1139 .hw_clk_ctrl = true,
1140 .clkr.hw.init = &gcc_qupv3_wrap5_qspi_ref_clk_src_init,
1141 };
1142
1143 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
1144 F(400000, P_BI_TCXO, 12, 1, 4),
1145 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
1146 F(37500000, P_GCC_GPLL0_OUT_EVEN, 8, 0, 0),
1147 F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
1148 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
1149 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
1150 F(202000000, P_GCC_GPLL9_OUT_MAIN, 4, 0, 0),
1151 { }
1152 };
1153
1154 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
1155 .cmd_rcgr = 0x1401c,
1156 .mnd_width = 8,
1157 .hid_width = 5,
1158 .parent_map = gcc_parent_map_8,
1159 .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
1160 .hw_clk_ctrl = true,
1161 .clkr.hw.init = &(const struct clk_init_data) {
1162 .name = "gcc_sdcc2_apps_clk_src",
1163 .parent_data = gcc_parent_data_8,
1164 .num_parents = ARRAY_SIZE(gcc_parent_data_8),
1165 .flags = CLK_SET_RATE_PARENT,
1166 .ops = &clk_rcg2_shared_floor_ops,
1167 },
1168 };
1169
1170 static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = {
1171 F(400000, P_BI_TCXO, 12, 1, 4),
1172 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
1173 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
1174 { }
1175 };
1176
1177 static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {
1178 .cmd_rcgr = 0x1601c,
1179 .mnd_width = 8,
1180 .hid_width = 5,
1181 .parent_map = gcc_parent_map_0,
1182 .freq_tbl = ftbl_gcc_sdcc4_apps_clk_src,
1183 .hw_clk_ctrl = true,
1184 .clkr.hw.init = &(const struct clk_init_data) {
1185 .name = "gcc_sdcc4_apps_clk_src",
1186 .parent_data = gcc_parent_data_0,
1187 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1188 .flags = CLK_SET_RATE_PARENT,
1189 .ops = &clk_rcg2_shared_floor_ops,
1190 },
1191 };
1192
1193 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
1194 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
1195 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
1196 F(225000000, P_GCC_GPLL5_OUT_MAIN, 4, 0, 0),
1197 F(450000000, P_GCC_GPLL5_OUT_MAIN, 2, 0, 0),
1198 { }
1199 };
1200
1201 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
1202 .cmd_rcgr = 0x77034,
1203 .mnd_width = 8,
1204 .hid_width = 5,
1205 .parent_map = gcc_parent_map_5,
1206 .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
1207 .hw_clk_ctrl = true,
1208 .clkr.hw.init = &(const struct clk_init_data) {
1209 .name = "gcc_ufs_phy_axi_clk_src",
1210 .parent_data = gcc_parent_data_5,
1211 .num_parents = ARRAY_SIZE(gcc_parent_data_5),
1212 .flags = CLK_SET_RATE_PARENT,
1213 .ops = &clk_rcg2_shared_ops,
1214 },
1215 };
1216
1217 static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
1218 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
1219 F(225000000, P_GCC_GPLL5_OUT_MAIN, 4, 0, 0),
1220 F(450000000, P_GCC_GPLL5_OUT_MAIN, 2, 0, 0),
1221 { }
1222 };
1223
1224 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
1225 .cmd_rcgr = 0x7708c,
1226 .mnd_width = 0,
1227 .hid_width = 5,
1228 .parent_map = gcc_parent_map_5,
1229 .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
1230 .hw_clk_ctrl = true,
1231 .clkr.hw.init = &(const struct clk_init_data) {
1232 .name = "gcc_ufs_phy_ice_core_clk_src",
1233 .parent_data = gcc_parent_data_5,
1234 .num_parents = ARRAY_SIZE(gcc_parent_data_5),
1235 .flags = CLK_SET_RATE_PARENT,
1236 .ops = &clk_rcg2_shared_ops,
1237 },
1238 };
1239
1240 static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = {
1241 F(9600000, P_BI_TCXO, 2, 0, 0),
1242 F(19200000, P_BI_TCXO, 1, 0, 0),
1243 { }
1244 };
1245
1246 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
1247 .cmd_rcgr = 0x770c0,
1248 .mnd_width = 0,
1249 .hid_width = 5,
1250 .parent_map = gcc_parent_map_3,
1251 .freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src,
1252 .hw_clk_ctrl = true,
1253 .clkr.hw.init = &(const struct clk_init_data) {
1254 .name = "gcc_ufs_phy_phy_aux_clk_src",
1255 .parent_data = gcc_parent_data_3,
1256 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
1257 .flags = CLK_SET_RATE_PARENT,
1258 .ops = &clk_rcg2_shared_ops,
1259 },
1260 };
1261
1262 static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_5_core_clk_src[] = {
1263 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
1264 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
1265 F(201500000, P_GCC_GPLL4_OUT_MAIN, 4, 0, 0),
1266 F(403000000, P_GCC_GPLL4_OUT_MAIN, 2, 0, 0),
1267 { }
1268 };
1269
1270 static struct clk_rcg2 gcc_ufs_phy_unipro_5_core_clk_src = {
1271 .cmd_rcgr = 0x770a4,
1272 .mnd_width = 0,
1273 .hid_width = 5,
1274 .parent_map = gcc_parent_map_5,
1275 .freq_tbl = ftbl_gcc_ufs_phy_unipro_5_core_clk_src,
1276 .hw_clk_ctrl = true,
1277 .clkr.hw.init = &(const struct clk_init_data) {
1278 .name = "gcc_ufs_phy_unipro_5_core_clk_src",
1279 .parent_data = gcc_parent_data_5,
1280 .num_parents = ARRAY_SIZE(gcc_parent_data_5),
1281 .flags = CLK_SET_RATE_PARENT,
1282 .ops = &clk_rcg2_shared_ops,
1283 },
1284 };
1285
1286 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
1287 F(66666667, P_GCC_GPLL0_OUT_EVEN, 4.5, 0, 0),
1288 F(133333333, P_GCC_GPLL0_OUT_MAIN, 4.5, 0, 0),
1289 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
1290 F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0),
1291 { }
1292 };
1293
1294 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1295 .cmd_rcgr = 0x39034,
1296 .mnd_width = 8,
1297 .hid_width = 5,
1298 .parent_map = gcc_parent_map_0,
1299 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1300 .hw_clk_ctrl = true,
1301 .clkr.hw.init = &(const struct clk_init_data) {
1302 .name = "gcc_usb30_prim_master_clk_src",
1303 .parent_data = gcc_parent_data_0,
1304 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1305 .flags = CLK_SET_RATE_PARENT,
1306 .ops = &clk_rcg2_shared_no_init_park_ops,
1307 },
1308 };
1309
1310 static struct clk_regmap_div gcc_qupv3_wrap5_s0_clk_src = {
1311 .reg = 0xad018,
1312 .shift = 0,
1313 .width = 4,
1314 .clkr.hw.init = &(const struct clk_init_data) {
1315 .name = "gcc_qupv3_wrap5_s0_clk_src",
1316 .parent_hws = (const struct clk_hw*[]) {
1317 &gcc_qupv3_wrap5_qspi_ref_clk_src.clkr.hw,
1318 },
1319 .num_parents = 1,
1320 .flags = CLK_SET_RATE_PARENT,
1321 .ops = &clk_regmap_div_ro_ops,
1322 },
1323 };
1324
1325 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1326 .cmd_rcgr = 0x3904c,
1327 .mnd_width = 0,
1328 .hid_width = 5,
1329 .parent_map = gcc_parent_map_0,
1330 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
1331 .hw_clk_ctrl = true,
1332 .clkr.hw.init = &(const struct clk_init_data) {
1333 .name = "gcc_usb30_prim_mock_utmi_clk_src",
1334 .parent_data = gcc_parent_data_0,
1335 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1336 .flags = CLK_SET_RATE_PARENT,
1337 .ops = &clk_rcg2_shared_no_init_park_ops,
1338 },
1339 };
1340
1341 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1342 .cmd_rcgr = 0x39078,
1343 .mnd_width = 0,
1344 .hid_width = 5,
1345 .parent_map = gcc_parent_map_4,
1346 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
1347 .hw_clk_ctrl = true,
1348 .clkr.hw.init = &(const struct clk_init_data) {
1349 .name = "gcc_usb3_prim_phy_aux_clk_src",
1350 .parent_data = gcc_parent_data_4,
1351 .num_parents = ARRAY_SIZE(gcc_parent_data_4),
1352 .flags = CLK_SET_RATE_PARENT,
1353 .ops = &clk_rcg2_shared_no_init_park_ops,
1354 },
1355 };
1356
1357 static struct clk_regmap_div gcc_pcie_0_pipe_div_clk_src = {
1358 .reg = 0x6b0a4,
1359 .shift = 0,
1360 .width = 4,
1361 .clkr.hw.init = &(const struct clk_init_data) {
1362 .name = "gcc_pcie_0_pipe_div_clk_src",
1363 .parent_hws = (const struct clk_hw*[]) {
1364 &gcc_pcie_0_pipe_clk_src.clkr.hw,
1365 },
1366 .num_parents = 1,
1367 .flags = CLK_SET_RATE_PARENT,
1368 .ops = &clk_regmap_div_ro_ops,
1369 },
1370 };
1371
1372 static struct clk_regmap_div gcc_pcie_1_pipe_div_clk_src = {
1373 .reg = 0x670a0,
1374 .shift = 0,
1375 .width = 4,
1376 .clkr.hw.init = &(const struct clk_init_data) {
1377 .name = "gcc_pcie_1_pipe_div_clk_src",
1378 .parent_hws = (const struct clk_hw*[]) {
1379 &gcc_pcie_1_pipe_clk_src.clkr.hw,
1380 },
1381 .num_parents = 1,
1382 .flags = CLK_SET_RATE_PARENT,
1383 .ops = &clk_regmap_div_ro_ops,
1384 },
1385 };
1386
1387 static struct clk_regmap_div gcc_qupv3_wrap1_s2_clk_src = {
1388 .reg = 0x1828c,
1389 .shift = 0,
1390 .width = 4,
1391 .clkr.hw.init = &(const struct clk_init_data) {
1392 .name = "gcc_qupv3_wrap1_s2_clk_src",
1393 .parent_hws = (const struct clk_hw*[]) {
1394 &gcc_qupv3_wrap1_qspi_ref_clk_src.clkr.hw,
1395 },
1396 .num_parents = 1,
1397 .flags = CLK_SET_RATE_PARENT,
1398 .ops = &clk_regmap_div_ro_ops,
1399 },
1400 };
1401
1402 static struct clk_regmap_div gcc_qupv3_wrap3_s1_clk_src = {
1403 .reg = 0xa8154,
1404 .shift = 0,
1405 .width = 4,
1406 .clkr.hw.init = &(const struct clk_init_data) {
1407 .name = "gcc_qupv3_wrap3_s1_clk_src",
1408 .parent_hws = (const struct clk_hw*[]) {
1409 &gcc_qupv3_wrap3_qspi_ref_clk_src.clkr.hw,
1410 },
1411 .num_parents = 1,
1412 .flags = CLK_SET_RATE_PARENT,
1413 .ops = &clk_regmap_div_ro_ops,
1414 },
1415 };
1416
1417 static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {
1418 .reg = 0x39064,
1419 .shift = 0,
1420 .width = 4,
1421 .clkr.hw.init = &(const struct clk_init_data) {
1422 .name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",
1423 .parent_hws = (const struct clk_hw*[]) {
1424 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
1425 },
1426 .num_parents = 1,
1427 .flags = CLK_SET_RATE_PARENT,
1428 .ops = &clk_regmap_div_ro_ops,
1429 },
1430 };
1431
1432 static struct clk_branch gcc_aggre_noc_pcie_axi_clk = {
1433 .halt_reg = 0x10068,
1434 .halt_check = BRANCH_HALT_SKIP,
1435 .hwcg_reg = 0x10068,
1436 .hwcg_bit = 1,
1437 .clkr = {
1438 .enable_reg = 0x52000,
1439 .enable_mask = BIT(24),
1440 .hw.init = &(const struct clk_init_data) {
1441 .name = "gcc_aggre_noc_pcie_axi_clk",
1442 .ops = &clk_branch2_ops,
1443 },
1444 },
1445 };
1446
1447 static struct clk_branch gcc_aggre_stardustnoc_usb3_prim_axi_clk = {
1448 .halt_reg = 0x39094,
1449 .halt_check = BRANCH_HALT_VOTED,
1450 .hwcg_reg = 0x39094,
1451 .hwcg_bit = 1,
1452 .clkr = {
1453 .enable_reg = 0x39094,
1454 .enable_mask = BIT(0),
1455 .hw.init = &(const struct clk_init_data) {
1456 .name = "gcc_aggre_stardustnoc_usb3_prim_axi_clk",
1457 .parent_hws = (const struct clk_hw*[]) {
1458 &gcc_usb30_prim_master_clk_src.clkr.hw,
1459 },
1460 .num_parents = 1,
1461 .flags = CLK_SET_RATE_PARENT,
1462 .ops = &clk_branch2_ops,
1463 },
1464 },
1465 };
1466
1467 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
1468 .halt_reg = 0x770f0,
1469 .halt_check = BRANCH_HALT_VOTED,
1470 .hwcg_reg = 0x770f0,
1471 .hwcg_bit = 1,
1472 .clkr = {
1473 .enable_reg = 0x770f0,
1474 .enable_mask = BIT(0),
1475 .hw.init = &(const struct clk_init_data) {
1476 .name = "gcc_aggre_ufs_phy_axi_clk",
1477 .parent_hws = (const struct clk_hw*[]) {
1478 &gcc_ufs_phy_axi_clk_src.clkr.hw,
1479 },
1480 .num_parents = 1,
1481 .flags = CLK_SET_RATE_PARENT,
1482 .ops = &clk_branch2_ops,
1483 },
1484 },
1485 };
1486
1487 static struct clk_branch gcc_boot_rom_ahb_clk = {
1488 .halt_reg = 0x38004,
1489 .halt_check = BRANCH_HALT_VOTED,
1490 .hwcg_reg = 0x38004,
1491 .hwcg_bit = 1,
1492 .clkr = {
1493 .enable_reg = 0x52010,
1494 .enable_mask = BIT(18),
1495 .hw.init = &(const struct clk_init_data) {
1496 .name = "gcc_boot_rom_ahb_clk",
1497 .ops = &clk_branch2_ops,
1498 },
1499 },
1500 };
1501
1502 static struct clk_branch gcc_camera_hf_axi_clk = {
1503 .halt_reg = 0x26014,
1504 .halt_check = BRANCH_HALT_SKIP,
1505 .hwcg_reg = 0x26014,
1506 .hwcg_bit = 1,
1507 .clkr = {
1508 .enable_reg = 0x26014,
1509 .enable_mask = BIT(0),
1510 .hw.init = &(const struct clk_init_data) {
1511 .name = "gcc_camera_hf_axi_clk",
1512 .ops = &clk_branch2_ops,
1513 },
1514 },
1515 };
1516
1517 static struct clk_branch gcc_camera_sf_axi_clk = {
1518 .halt_reg = 0x2601c,
1519 .halt_check = BRANCH_HALT_SKIP,
1520 .hwcg_reg = 0x2601c,
1521 .hwcg_bit = 1,
1522 .clkr = {
1523 .enable_reg = 0x2601c,
1524 .enable_mask = BIT(0),
1525 .hw.init = &(const struct clk_init_data) {
1526 .name = "gcc_camera_sf_axi_clk",
1527 .ops = &clk_branch2_ops,
1528 },
1529 },
1530 };
1531
1532 static struct clk_branch gcc_cfg_noc_pcie_anoc_ahb_clk = {
1533 .halt_reg = 0x10050,
1534 .halt_check = BRANCH_HALT_SKIP,
1535 .hwcg_reg = 0x10050,
1536 .hwcg_bit = 1,
1537 .clkr = {
1538 .enable_reg = 0x52000,
1539 .enable_mask = BIT(20),
1540 .hw.init = &(const struct clk_init_data) {
1541 .name = "gcc_cfg_noc_pcie_anoc_ahb_clk",
1542 .ops = &clk_branch2_ops,
1543 },
1544 },
1545 };
1546
1547 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1548 .halt_reg = 0x39090,
1549 .halt_check = BRANCH_HALT_VOTED,
1550 .hwcg_reg = 0x39090,
1551 .hwcg_bit = 1,
1552 .clkr = {
1553 .enable_reg = 0x39090,
1554 .enable_mask = BIT(0),
1555 .hw.init = &(const struct clk_init_data) {
1556 .name = "gcc_cfg_noc_usb3_prim_axi_clk",
1557 .parent_hws = (const struct clk_hw*[]) {
1558 &gcc_usb30_prim_master_clk_src.clkr.hw,
1559 },
1560 .num_parents = 1,
1561 .flags = CLK_SET_RATE_PARENT,
1562 .ops = &clk_branch2_ops,
1563 },
1564 },
1565 };
1566
1567 static struct clk_branch gcc_cnoc_pcie_sf_axi_clk = {
1568 .halt_reg = 0x10058,
1569 .halt_check = BRANCH_HALT_VOTED,
1570 .clkr = {
1571 .enable_reg = 0x52008,
1572 .enable_mask = BIT(6),
1573 .hw.init = &(const struct clk_init_data) {
1574 .name = "gcc_cnoc_pcie_sf_axi_clk",
1575 .ops = &clk_branch2_ops,
1576 },
1577 },
1578 };
1579
1580 static struct clk_branch gcc_eva_axi0_clk = {
1581 .halt_reg = 0x9f008,
1582 .halt_check = BRANCH_HALT_SKIP,
1583 .hwcg_reg = 0x9f008,
1584 .hwcg_bit = 1,
1585 .clkr = {
1586 .enable_reg = 0x9f008,
1587 .enable_mask = BIT(0),
1588 .hw.init = &(const struct clk_init_data) {
1589 .name = "gcc_eva_axi0_clk",
1590 .ops = &clk_branch2_ops,
1591 },
1592 },
1593 };
1594
1595 static struct clk_branch gcc_eva_axi0c_clk = {
1596 .halt_reg = 0x9f010,
1597 .halt_check = BRANCH_HALT_SKIP,
1598 .hwcg_reg = 0x9f010,
1599 .hwcg_bit = 1,
1600 .clkr = {
1601 .enable_reg = 0x9f010,
1602 .enable_mask = BIT(0),
1603 .hw.init = &(const struct clk_init_data) {
1604 .name = "gcc_eva_axi0c_clk",
1605 .ops = &clk_branch2_ops,
1606 },
1607 },
1608 };
1609
1610 static struct clk_branch gcc_gp1_clk = {
1611 .halt_reg = 0x64000,
1612 .halt_check = BRANCH_HALT,
1613 .clkr = {
1614 .enable_reg = 0x64000,
1615 .enable_mask = BIT(0),
1616 .hw.init = &(const struct clk_init_data) {
1617 .name = "gcc_gp1_clk",
1618 .parent_hws = (const struct clk_hw*[]) {
1619 &gcc_gp1_clk_src.clkr.hw,
1620 },
1621 .num_parents = 1,
1622 .flags = CLK_SET_RATE_PARENT,
1623 .ops = &clk_branch2_ops,
1624 },
1625 },
1626 };
1627
1628 static struct clk_branch gcc_gp2_clk = {
1629 .halt_reg = 0x65000,
1630 .halt_check = BRANCH_HALT,
1631 .clkr = {
1632 .enable_reg = 0x65000,
1633 .enable_mask = BIT(0),
1634 .hw.init = &(const struct clk_init_data) {
1635 .name = "gcc_gp2_clk",
1636 .parent_hws = (const struct clk_hw*[]) {
1637 &gcc_gp2_clk_src.clkr.hw,
1638 },
1639 .num_parents = 1,
1640 .flags = CLK_SET_RATE_PARENT,
1641 .ops = &clk_branch2_ops,
1642 },
1643 },
1644 };
1645
1646 static struct clk_branch gcc_gp3_clk = {
1647 .halt_reg = 0x66000,
1648 .halt_check = BRANCH_HALT,
1649 .clkr = {
1650 .enable_reg = 0x66000,
1651 .enable_mask = BIT(0),
1652 .hw.init = &(const struct clk_init_data) {
1653 .name = "gcc_gp3_clk",
1654 .parent_hws = (const struct clk_hw*[]) {
1655 &gcc_gp3_clk_src.clkr.hw,
1656 },
1657 .num_parents = 1,
1658 .flags = CLK_SET_RATE_PARENT,
1659 .ops = &clk_branch2_ops,
1660 },
1661 },
1662 };
1663
1664 static struct clk_branch gcc_gpu_gemnoc_gfx_clk = {
1665 .halt_reg = 0x71010,
1666 .halt_check = BRANCH_HALT_VOTED,
1667 .hwcg_reg = 0x71010,
1668 .hwcg_bit = 1,
1669 .clkr = {
1670 .enable_reg = 0x71010,
1671 .enable_mask = BIT(0),
1672 .hw.init = &(const struct clk_init_data) {
1673 .name = "gcc_gpu_gemnoc_gfx_clk",
1674 .ops = &clk_branch2_ops,
1675 },
1676 },
1677 };
1678
1679 static struct clk_branch gcc_gpu_gpll0_clk_src = {
1680 .halt_check = BRANCH_HALT_DELAY,
1681 .clkr = {
1682 .enable_reg = 0x52000,
1683 .enable_mask = BIT(15),
1684 .hw.init = &(const struct clk_init_data) {
1685 .name = "gcc_gpu_gpll0_clk_src",
1686 .parent_hws = (const struct clk_hw*[]) {
1687 &gcc_gpll0.clkr.hw,
1688 },
1689 .num_parents = 1,
1690 .flags = CLK_SET_RATE_PARENT,
1691 .ops = &clk_branch2_ops,
1692 },
1693 },
1694 };
1695
1696 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
1697 .halt_check = BRANCH_HALT_DELAY,
1698 .clkr = {
1699 .enable_reg = 0x52000,
1700 .enable_mask = BIT(16),
1701 .hw.init = &(const struct clk_init_data) {
1702 .name = "gcc_gpu_gpll0_div_clk_src",
1703 .parent_hws = (const struct clk_hw*[]) {
1704 &gcc_gpll0_out_even.clkr.hw,
1705 },
1706 .num_parents = 1,
1707 .flags = CLK_SET_RATE_PARENT,
1708 .ops = &clk_branch2_ops,
1709 },
1710 },
1711 };
1712
1713 static struct clk_branch gcc_gpu_smmu_vote_clk = {
1714 .halt_reg = 0x7d000,
1715 .halt_check = BRANCH_HALT_VOTED,
1716 .clkr = {
1717 .enable_reg = 0x7d000,
1718 .enable_mask = BIT(0),
1719 .hw.init = &(const struct clk_init_data) {
1720 .name = "gcc_gpu_smmu_vote_clk",
1721 .ops = &clk_branch2_ops,
1722 },
1723 },
1724 };
1725
1726 static struct clk_branch gcc_mmu_tcu_vote_clk = {
1727 .halt_reg = 0x7d02c,
1728 .halt_check = BRANCH_HALT_VOTED,
1729 .clkr = {
1730 .enable_reg = 0x7d02c,
1731 .enable_mask = BIT(0),
1732 .hw.init = &(const struct clk_init_data) {
1733 .name = "gcc_mmu_tcu_vote_clk",
1734 .ops = &clk_branch2_ops,
1735 },
1736 },
1737 };
1738
1739 static struct clk_branch gcc_pcie_0_aux_clk = {
1740 .halt_reg = 0x6b044,
1741 .halt_check = BRANCH_HALT_VOTED,
1742 .hwcg_reg = 0x6b044,
1743 .hwcg_bit = 1,
1744 .clkr = {
1745 .enable_reg = 0x52020,
1746 .enable_mask = BIT(4),
1747 .hw.init = &(const struct clk_init_data) {
1748 .name = "gcc_pcie_0_aux_clk",
1749 .parent_hws = (const struct clk_hw*[]) {
1750 &gcc_pcie_0_aux_clk_src.clkr.hw,
1751 },
1752 .num_parents = 1,
1753 .flags = CLK_SET_RATE_PARENT,
1754 .ops = &clk_branch2_ops,
1755 },
1756 },
1757 };
1758
1759 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
1760 .halt_reg = 0x6b040,
1761 .halt_check = BRANCH_HALT_VOTED,
1762 .hwcg_reg = 0x6b040,
1763 .hwcg_bit = 1,
1764 .clkr = {
1765 .enable_reg = 0x52020,
1766 .enable_mask = BIT(3),
1767 .hw.init = &(const struct clk_init_data) {
1768 .name = "gcc_pcie_0_cfg_ahb_clk",
1769 .ops = &clk_branch2_ops,
1770 },
1771 },
1772 };
1773
1774 static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
1775 .halt_reg = 0x6b030,
1776 .halt_check = BRANCH_HALT_SKIP,
1777 .hwcg_reg = 0x6b030,
1778 .hwcg_bit = 1,
1779 .clkr = {
1780 .enable_reg = 0x52020,
1781 .enable_mask = BIT(2),
1782 .hw.init = &(const struct clk_init_data) {
1783 .name = "gcc_pcie_0_mstr_axi_clk",
1784 .ops = &clk_branch2_ops,
1785 },
1786 },
1787 };
1788
1789 static struct clk_branch gcc_pcie_0_phy_aux_clk = {
1790 .halt_reg = 0x6b054,
1791 .halt_check = BRANCH_HALT_VOTED,
1792 .hwcg_reg = 0x6b054,
1793 .hwcg_bit = 1,
1794 .clkr = {
1795 .enable_reg = 0x52020,
1796 .enable_mask = BIT(5),
1797 .hw.init = &(const struct clk_init_data) {
1798 .name = "gcc_pcie_0_phy_aux_clk",
1799 .parent_hws = (const struct clk_hw*[]) {
1800 &gcc_pcie_0_phy_aux_clk_src.clkr.hw,
1801 },
1802 .num_parents = 1,
1803 .flags = CLK_SET_RATE_PARENT,
1804 .ops = &clk_branch2_ops,
1805 },
1806 },
1807 };
1808
1809 static struct clk_branch gcc_pcie_0_phy_rchng_clk = {
1810 .halt_reg = 0x6b084,
1811 .halt_check = BRANCH_HALT_VOTED,
1812 .hwcg_reg = 0x6b084,
1813 .hwcg_bit = 1,
1814 .clkr = {
1815 .enable_reg = 0x52020,
1816 .enable_mask = BIT(8),
1817 .hw.init = &(const struct clk_init_data) {
1818 .name = "gcc_pcie_0_phy_rchng_clk",
1819 .parent_hws = (const struct clk_hw*[]) {
1820 &gcc_pcie_0_phy_rchng_clk_src.clkr.hw,
1821 },
1822 .num_parents = 1,
1823 .flags = CLK_SET_RATE_PARENT,
1824 .ops = &clk_branch2_ops,
1825 },
1826 },
1827 };
1828
1829 static struct clk_branch gcc_pcie_0_pipe_clk = {
1830 .halt_reg = 0x6b074,
1831 .halt_check = BRANCH_HALT_SKIP,
1832 .hwcg_reg = 0x6b074,
1833 .hwcg_bit = 1,
1834 .clkr = {
1835 .enable_reg = 0x52020,
1836 .enable_mask = BIT(7),
1837 .hw.init = &(const struct clk_init_data) {
1838 .name = "gcc_pcie_0_pipe_clk",
1839 .parent_hws = (const struct clk_hw*[]) {
1840 &gcc_pcie_0_pipe_clk_src.clkr.hw,
1841 },
1842 .num_parents = 1,
1843 .flags = CLK_SET_RATE_PARENT,
1844 .ops = &clk_branch2_ops,
1845 },
1846 },
1847 };
1848
1849 static struct clk_branch gcc_pcie_0_pipe_div2_clk = {
1850 .halt_reg = 0x6b064,
1851 .halt_check = BRANCH_HALT_SKIP,
1852 .hwcg_reg = 0x6b064,
1853 .hwcg_bit = 1,
1854 .clkr = {
1855 .enable_reg = 0x52020,
1856 .enable_mask = BIT(6),
1857 .hw.init = &(const struct clk_init_data) {
1858 .name = "gcc_pcie_0_pipe_div2_clk",
1859 .parent_hws = (const struct clk_hw*[]) {
1860 &gcc_pcie_0_pipe_div_clk_src.clkr.hw,
1861 },
1862 .num_parents = 1,
1863 .flags = CLK_SET_RATE_PARENT,
1864 .ops = &clk_branch2_ops,
1865 },
1866 },
1867 };
1868
1869 static struct clk_branch gcc_pcie_0_slv_axi_clk = {
1870 .halt_reg = 0x6b020,
1871 .halt_check = BRANCH_HALT_VOTED,
1872 .hwcg_reg = 0x6b020,
1873 .hwcg_bit = 1,
1874 .clkr = {
1875 .enable_reg = 0x52020,
1876 .enable_mask = BIT(1),
1877 .hw.init = &(const struct clk_init_data) {
1878 .name = "gcc_pcie_0_slv_axi_clk",
1879 .ops = &clk_branch2_ops,
1880 },
1881 },
1882 };
1883
1884 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
1885 .halt_reg = 0x6b01c,
1886 .halt_check = BRANCH_HALT_VOTED,
1887 .hwcg_reg = 0x6b01c,
1888 .hwcg_bit = 1,
1889 .clkr = {
1890 .enable_reg = 0x52020,
1891 .enable_mask = BIT(0),
1892 .hw.init = &(const struct clk_init_data) {
1893 .name = "gcc_pcie_0_slv_q2a_axi_clk",
1894 .ops = &clk_branch2_ops,
1895 },
1896 },
1897 };
1898
1899 static struct clk_branch gcc_pcie_1_aux_clk = {
1900 .halt_reg = 0x67040,
1901 .halt_check = BRANCH_HALT_VOTED,
1902 .clkr = {
1903 .enable_reg = 0x52010,
1904 .enable_mask = BIT(10),
1905 .hw.init = &(const struct clk_init_data) {
1906 .name = "gcc_pcie_1_aux_clk",
1907 .parent_hws = (const struct clk_hw*[]) {
1908 &gcc_pcie_1_aux_clk_src.clkr.hw,
1909 },
1910 .num_parents = 1,
1911 .flags = CLK_SET_RATE_PARENT,
1912 .ops = &clk_branch2_ops,
1913 },
1914 },
1915 };
1916
1917 static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
1918 .halt_reg = 0x6703c,
1919 .halt_check = BRANCH_HALT_VOTED,
1920 .hwcg_reg = 0x6703c,
1921 .hwcg_bit = 1,
1922 .clkr = {
1923 .enable_reg = 0x52010,
1924 .enable_mask = BIT(9),
1925 .hw.init = &(const struct clk_init_data) {
1926 .name = "gcc_pcie_1_cfg_ahb_clk",
1927 .ops = &clk_branch2_ops,
1928 },
1929 },
1930 };
1931
1932 static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
1933 .halt_reg = 0x6702c,
1934 .halt_check = BRANCH_HALT_SKIP,
1935 .hwcg_reg = 0x6702c,
1936 .hwcg_bit = 1,
1937 .clkr = {
1938 .enable_reg = 0x52008,
1939 .enable_mask = BIT(17),
1940 .hw.init = &(const struct clk_init_data) {
1941 .name = "gcc_pcie_1_mstr_axi_clk",
1942 .ops = &clk_branch2_ops,
1943 },
1944 },
1945 };
1946
1947 static struct clk_branch gcc_pcie_1_phy_aux_clk = {
1948 .halt_reg = 0x67050,
1949 .halt_check = BRANCH_HALT_VOTED,
1950 .clkr = {
1951 .enable_reg = 0x52010,
1952 .enable_mask = BIT(14),
1953 .hw.init = &(const struct clk_init_data) {
1954 .name = "gcc_pcie_1_phy_aux_clk",
1955 .parent_hws = (const struct clk_hw*[]) {
1956 &gcc_pcie_1_phy_aux_clk_src.clkr.hw,
1957 },
1958 .num_parents = 1,
1959 .flags = CLK_SET_RATE_PARENT,
1960 .ops = &clk_branch2_ops,
1961 },
1962 },
1963 };
1964
1965 static struct clk_branch gcc_pcie_1_phy_rchng_clk = {
1966 .halt_reg = 0x67080,
1967 .halt_check = BRANCH_HALT_VOTED,
1968 .clkr = {
1969 .enable_reg = 0x52010,
1970 .enable_mask = BIT(26),
1971 .hw.init = &(const struct clk_init_data) {
1972 .name = "gcc_pcie_1_phy_rchng_clk",
1973 .parent_hws = (const struct clk_hw*[]) {
1974 &gcc_pcie_1_phy_rchng_clk_src.clkr.hw,
1975 },
1976 .num_parents = 1,
1977 .flags = CLK_SET_RATE_PARENT,
1978 .ops = &clk_branch2_ops,
1979 },
1980 },
1981 };
1982
1983 static struct clk_branch gcc_pcie_1_pipe_clk = {
1984 .halt_reg = 0x67070,
1985 .halt_check = BRANCH_HALT_SKIP,
1986 .clkr = {
1987 .enable_reg = 0x52010,
1988 .enable_mask = BIT(17),
1989 .hw.init = &(const struct clk_init_data) {
1990 .name = "gcc_pcie_1_pipe_clk",
1991 .parent_hws = (const struct clk_hw*[]) {
1992 &gcc_pcie_1_pipe_clk_src.clkr.hw,
1993 },
1994 .num_parents = 1,
1995 .flags = CLK_SET_RATE_PARENT,
1996 .ops = &clk_branch2_ops,
1997 },
1998 },
1999 };
2000
2001 static struct clk_branch gcc_pcie_1_pipe_div2_clk = {
2002 .halt_reg = 0x67060,
2003 .halt_check = BRANCH_HALT_SKIP,
2004 .clkr = {
2005 .enable_reg = 0x52010,
2006 .enable_mask = BIT(15),
2007 .hw.init = &(const struct clk_init_data) {
2008 .name = "gcc_pcie_1_pipe_div2_clk",
2009 .parent_hws = (const struct clk_hw*[]) {
2010 &gcc_pcie_1_pipe_div_clk_src.clkr.hw,
2011 },
2012 .num_parents = 1,
2013 .flags = CLK_SET_RATE_PARENT,
2014 .ops = &clk_branch2_ops,
2015 },
2016 },
2017 };
2018
2019 static struct clk_branch gcc_pcie_1_slv_axi_clk = {
2020 .halt_reg = 0x6701c,
2021 .halt_check = BRANCH_HALT_VOTED,
2022 .hwcg_reg = 0x6701c,
2023 .hwcg_bit = 1,
2024 .clkr = {
2025 .enable_reg = 0x52008,
2026 .enable_mask = BIT(16),
2027 .hw.init = &(const struct clk_init_data) {
2028 .name = "gcc_pcie_1_slv_axi_clk",
2029 .ops = &clk_branch2_ops,
2030 },
2031 },
2032 };
2033
2034 static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = {
2035 .halt_reg = 0x67018,
2036 .halt_check = BRANCH_HALT_VOTED,
2037 .clkr = {
2038 .enable_reg = 0x52008,
2039 .enable_mask = BIT(15),
2040 .hw.init = &(const struct clk_init_data) {
2041 .name = "gcc_pcie_1_slv_q2a_axi_clk",
2042 .ops = &clk_branch2_ops,
2043 },
2044 },
2045 };
2046
2047 static struct clk_branch gcc_pdm2_clk = {
2048 .halt_reg = 0x3300c,
2049 .halt_check = BRANCH_HALT,
2050 .clkr = {
2051 .enable_reg = 0x3300c,
2052 .enable_mask = BIT(0),
2053 .hw.init = &(const struct clk_init_data) {
2054 .name = "gcc_pdm2_clk",
2055 .parent_hws = (const struct clk_hw*[]) {
2056 &gcc_pdm2_clk_src.clkr.hw,
2057 },
2058 .num_parents = 1,
2059 .flags = CLK_SET_RATE_PARENT,
2060 .ops = &clk_branch2_ops,
2061 },
2062 },
2063 };
2064
2065 static struct clk_branch gcc_pdm_ahb_clk = {
2066 .halt_reg = 0x33004,
2067 .halt_check = BRANCH_HALT_VOTED,
2068 .hwcg_reg = 0x33004,
2069 .hwcg_bit = 1,
2070 .clkr = {
2071 .enable_reg = 0x33004,
2072 .enable_mask = BIT(0),
2073 .hw.init = &(const struct clk_init_data) {
2074 .name = "gcc_pdm_ahb_clk",
2075 .ops = &clk_branch2_ops,
2076 },
2077 },
2078 };
2079
2080 static struct clk_branch gcc_pdm_xo4_clk = {
2081 .halt_reg = 0x33008,
2082 .halt_check = BRANCH_HALT,
2083 .clkr = {
2084 .enable_reg = 0x33008,
2085 .enable_mask = BIT(0),
2086 .hw.init = &(const struct clk_init_data) {
2087 .name = "gcc_pdm_xo4_clk",
2088 .ops = &clk_branch2_ops,
2089 },
2090 },
2091 };
2092
2093 static struct clk_branch gcc_qupv3_i2c_core_clk = {
2094 .halt_reg = 0x23004,
2095 .halt_check = BRANCH_HALT_VOTED,
2096 .clkr = {
2097 .enable_reg = 0x52008,
2098 .enable_mask = BIT(8),
2099 .hw.init = &(const struct clk_init_data) {
2100 .name = "gcc_qupv3_i2c_core_clk",
2101 .ops = &clk_branch2_ops,
2102 },
2103 },
2104 };
2105
2106 static struct clk_branch gcc_qupv3_i2c_s0_clk = {
2107 .halt_reg = 0x17004,
2108 .halt_check = BRANCH_HALT_VOTED,
2109 .clkr = {
2110 .enable_reg = 0x52008,
2111 .enable_mask = BIT(10),
2112 .hw.init = &(const struct clk_init_data) {
2113 .name = "gcc_qupv3_i2c_s0_clk",
2114 .parent_hws = (const struct clk_hw*[]) {
2115 &gcc_qupv3_i2c_s0_clk_src.clkr.hw,
2116 },
2117 .num_parents = 1,
2118 .flags = CLK_SET_RATE_PARENT,
2119 .ops = &clk_branch2_ops,
2120 },
2121 },
2122 };
2123
2124 static struct clk_branch gcc_qupv3_i2c_s1_clk = {
2125 .halt_reg = 0x17020,
2126 .halt_check = BRANCH_HALT_VOTED,
2127 .clkr = {
2128 .enable_reg = 0x52008,
2129 .enable_mask = BIT(11),
2130 .hw.init = &(const struct clk_init_data) {
2131 .name = "gcc_qupv3_i2c_s1_clk",
2132 .parent_hws = (const struct clk_hw*[]) {
2133 &gcc_qupv3_i2c_s1_clk_src.clkr.hw,
2134 },
2135 .num_parents = 1,
2136 .flags = CLK_SET_RATE_PARENT,
2137 .ops = &clk_branch2_ops,
2138 },
2139 },
2140 };
2141
2142 static struct clk_branch gcc_qupv3_i2c_s2_clk = {
2143 .halt_reg = 0x1703c,
2144 .halt_check = BRANCH_HALT_VOTED,
2145 .clkr = {
2146 .enable_reg = 0x52008,
2147 .enable_mask = BIT(12),
2148 .hw.init = &(const struct clk_init_data) {
2149 .name = "gcc_qupv3_i2c_s2_clk",
2150 .parent_hws = (const struct clk_hw*[]) {
2151 &gcc_qupv3_i2c_s2_clk_src.clkr.hw,
2152 },
2153 .num_parents = 1,
2154 .flags = CLK_SET_RATE_PARENT,
2155 .ops = &clk_branch2_ops,
2156 },
2157 },
2158 };
2159
2160 static struct clk_branch gcc_qupv3_i2c_s3_clk = {
2161 .halt_reg = 0x17058,
2162 .halt_check = BRANCH_HALT_VOTED,
2163 .clkr = {
2164 .enable_reg = 0x52008,
2165 .enable_mask = BIT(13),
2166 .hw.init = &(const struct clk_init_data) {
2167 .name = "gcc_qupv3_i2c_s3_clk",
2168 .parent_hws = (const struct clk_hw*[]) {
2169 &gcc_qupv3_i2c_s3_clk_src.clkr.hw,
2170 },
2171 .num_parents = 1,
2172 .flags = CLK_SET_RATE_PARENT,
2173 .ops = &clk_branch2_ops,
2174 },
2175 },
2176 };
2177
2178 static struct clk_branch gcc_qupv3_i2c_s4_clk = {
2179 .halt_reg = 0x17074,
2180 .halt_check = BRANCH_HALT_VOTED,
2181 .clkr = {
2182 .enable_reg = 0x52008,
2183 .enable_mask = BIT(14),
2184 .hw.init = &(const struct clk_init_data) {
2185 .name = "gcc_qupv3_i2c_s4_clk",
2186 .parent_hws = (const struct clk_hw*[]) {
2187 &gcc_qupv3_i2c_s4_clk_src.clkr.hw,
2188 },
2189 .num_parents = 1,
2190 .flags = CLK_SET_RATE_PARENT,
2191 .ops = &clk_branch2_ops,
2192 },
2193 },
2194 };
2195
2196 static struct clk_branch gcc_qupv3_i2c_s_ahb_clk = {
2197 .halt_reg = 0x23000,
2198 .halt_check = BRANCH_HALT_VOTED,
2199 .hwcg_reg = 0x23000,
2200 .hwcg_bit = 1,
2201 .clkr = {
2202 .enable_reg = 0x52008,
2203 .enable_mask = BIT(7),
2204 .hw.init = &(const struct clk_init_data) {
2205 .name = "gcc_qupv3_i2c_s_ahb_clk",
2206 .ops = &clk_branch2_ops,
2207 },
2208 },
2209 };
2210
2211 static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
2212 .halt_reg = 0x2315c,
2213 .halt_check = BRANCH_HALT_VOTED,
2214 .clkr = {
2215 .enable_reg = 0x52008,
2216 .enable_mask = BIT(18),
2217 .hw.init = &(const struct clk_init_data) {
2218 .name = "gcc_qupv3_wrap1_core_2x_clk",
2219 .ops = &clk_branch2_ops,
2220 },
2221 },
2222 };
2223
2224 static struct clk_branch gcc_qupv3_wrap1_core_clk = {
2225 .halt_reg = 0x23148,
2226 .halt_check = BRANCH_HALT_VOTED,
2227 .clkr = {
2228 .enable_reg = 0x52008,
2229 .enable_mask = BIT(19),
2230 .hw.init = &(const struct clk_init_data) {
2231 .name = "gcc_qupv3_wrap1_core_clk",
2232 .ops = &clk_branch2_ops,
2233 },
2234 },
2235 };
2236
2237 static struct clk_branch gcc_qupv3_wrap1_qspi_ref_clk = {
2238 .halt_reg = 0x188bc,
2239 .halt_check = BRANCH_HALT_VOTED,
2240 .clkr = {
2241 .enable_reg = 0x52010,
2242 .enable_mask = BIT(29),
2243 .hw.init = &(const struct clk_init_data) {
2244 .name = "gcc_qupv3_wrap1_qspi_ref_clk",
2245 .parent_hws = (const struct clk_hw*[]) {
2246 &gcc_qupv3_wrap1_qspi_ref_clk_src.clkr.hw,
2247 },
2248 .num_parents = 1,
2249 .flags = CLK_SET_RATE_PARENT,
2250 .ops = &clk_branch2_ops,
2251 },
2252 },
2253 };
2254
2255 static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
2256 .halt_reg = 0x18004,
2257 .halt_check = BRANCH_HALT_VOTED,
2258 .clkr = {
2259 .enable_reg = 0x52008,
2260 .enable_mask = BIT(22),
2261 .hw.init = &(const struct clk_init_data) {
2262 .name = "gcc_qupv3_wrap1_s0_clk",
2263 .parent_hws = (const struct clk_hw*[]) {
2264 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
2265 },
2266 .num_parents = 1,
2267 .flags = CLK_SET_RATE_PARENT,
2268 .ops = &clk_branch2_ops,
2269 },
2270 },
2271 };
2272
2273 static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
2274 .halt_reg = 0x18140,
2275 .halt_check = BRANCH_HALT_VOTED,
2276 .clkr = {
2277 .enable_reg = 0x52008,
2278 .enable_mask = BIT(23),
2279 .hw.init = &(const struct clk_init_data) {
2280 .name = "gcc_qupv3_wrap1_s1_clk",
2281 .parent_hws = (const struct clk_hw*[]) {
2282 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
2283 },
2284 .num_parents = 1,
2285 .flags = CLK_SET_RATE_PARENT,
2286 .ops = &clk_branch2_ops,
2287 },
2288 },
2289 };
2290
2291 static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
2292 .halt_reg = 0x1827c,
2293 .halt_check = BRANCH_HALT_VOTED,
2294 .clkr = {
2295 .enable_reg = 0x52008,
2296 .enable_mask = BIT(24),
2297 .hw.init = &(const struct clk_init_data) {
2298 .name = "gcc_qupv3_wrap1_s2_clk",
2299 .parent_hws = (const struct clk_hw*[]) {
2300 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
2301 },
2302 .num_parents = 1,
2303 .flags = CLK_SET_RATE_PARENT,
2304 .ops = &clk_branch2_ops,
2305 },
2306 },
2307 };
2308
2309 static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
2310 .halt_reg = 0x18290,
2311 .halt_check = BRANCH_HALT_VOTED,
2312 .clkr = {
2313 .enable_reg = 0x52008,
2314 .enable_mask = BIT(25),
2315 .hw.init = &(const struct clk_init_data) {
2316 .name = "gcc_qupv3_wrap1_s3_clk",
2317 .parent_hws = (const struct clk_hw*[]) {
2318 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
2319 },
2320 .num_parents = 1,
2321 .flags = CLK_SET_RATE_PARENT,
2322 .ops = &clk_branch2_ops,
2323 },
2324 },
2325 };
2326
2327 static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
2328 .halt_reg = 0x183cc,
2329 .halt_check = BRANCH_HALT_VOTED,
2330 .clkr = {
2331 .enable_reg = 0x52008,
2332 .enable_mask = BIT(26),
2333 .hw.init = &(const struct clk_init_data) {
2334 .name = "gcc_qupv3_wrap1_s4_clk",
2335 .parent_hws = (const struct clk_hw*[]) {
2336 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
2337 },
2338 .num_parents = 1,
2339 .flags = CLK_SET_RATE_PARENT,
2340 .ops = &clk_branch2_ops,
2341 },
2342 },
2343 };
2344
2345 static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
2346 .halt_reg = 0x18508,
2347 .halt_check = BRANCH_HALT_VOTED,
2348 .clkr = {
2349 .enable_reg = 0x52008,
2350 .enable_mask = BIT(27),
2351 .hw.init = &(const struct clk_init_data) {
2352 .name = "gcc_qupv3_wrap1_s5_clk",
2353 .parent_hws = (const struct clk_hw*[]) {
2354 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
2355 },
2356 .num_parents = 1,
2357 .flags = CLK_SET_RATE_PARENT,
2358 .ops = &clk_branch2_ops,
2359 },
2360 },
2361 };
2362
2363 static struct clk_branch gcc_qupv3_wrap1_s6_clk = {
2364 .halt_reg = 0x18644,
2365 .halt_check = BRANCH_HALT_VOTED,
2366 .clkr = {
2367 .enable_reg = 0x52008,
2368 .enable_mask = BIT(28),
2369 .hw.init = &(const struct clk_init_data) {
2370 .name = "gcc_qupv3_wrap1_s6_clk",
2371 .parent_hws = (const struct clk_hw*[]) {
2372 &gcc_qupv3_wrap1_s6_clk_src.clkr.hw,
2373 },
2374 .num_parents = 1,
2375 .flags = CLK_SET_RATE_PARENT,
2376 .ops = &clk_branch2_ops,
2377 },
2378 },
2379 };
2380
2381 static struct clk_branch gcc_qupv3_wrap1_s7_clk = {
2382 .halt_reg = 0x18780,
2383 .halt_check = BRANCH_HALT_VOTED,
2384 .clkr = {
2385 .enable_reg = 0x52010,
2386 .enable_mask = BIT(16),
2387 .hw.init = &(const struct clk_init_data) {
2388 .name = "gcc_qupv3_wrap1_s7_clk",
2389 .parent_hws = (const struct clk_hw*[]) {
2390 &gcc_qupv3_wrap1_s7_clk_src.clkr.hw,
2391 },
2392 .num_parents = 1,
2393 .flags = CLK_SET_RATE_PARENT,
2394 .ops = &clk_branch2_ops,
2395 },
2396 },
2397 };
2398
2399 static struct clk_branch gcc_qupv3_wrap2_core_2x_clk = {
2400 .halt_reg = 0x232b4,
2401 .halt_check = BRANCH_HALT_VOTED,
2402 .clkr = {
2403 .enable_reg = 0x52010,
2404 .enable_mask = BIT(3),
2405 .hw.init = &(const struct clk_init_data) {
2406 .name = "gcc_qupv3_wrap2_core_2x_clk",
2407 .ops = &clk_branch2_ops,
2408 },
2409 },
2410 };
2411
2412 static struct clk_branch gcc_qupv3_wrap2_core_clk = {
2413 .halt_reg = 0x232a0,
2414 .halt_check = BRANCH_HALT_VOTED,
2415 .clkr = {
2416 .enable_reg = 0x52010,
2417 .enable_mask = BIT(0),
2418 .hw.init = &(const struct clk_init_data) {
2419 .name = "gcc_qupv3_wrap2_core_clk",
2420 .ops = &clk_branch2_ops,
2421 },
2422 },
2423 };
2424
2425 static struct clk_branch gcc_qupv3_wrap2_s0_clk = {
2426 .halt_reg = 0x1e004,
2427 .halt_check = BRANCH_HALT_VOTED,
2428 .clkr = {
2429 .enable_reg = 0x52010,
2430 .enable_mask = BIT(4),
2431 .hw.init = &(const struct clk_init_data) {
2432 .name = "gcc_qupv3_wrap2_s0_clk",
2433 .parent_hws = (const struct clk_hw*[]) {
2434 &gcc_qupv3_wrap2_s0_clk_src.clkr.hw,
2435 },
2436 .num_parents = 1,
2437 .flags = CLK_SET_RATE_PARENT,
2438 .ops = &clk_branch2_ops,
2439 },
2440 },
2441 };
2442
2443 static struct clk_branch gcc_qupv3_wrap2_s1_clk = {
2444 .halt_reg = 0x1e148,
2445 .halt_check = BRANCH_HALT_VOTED,
2446 .clkr = {
2447 .enable_reg = 0x52010,
2448 .enable_mask = BIT(5),
2449 .hw.init = &(const struct clk_init_data) {
2450 .name = "gcc_qupv3_wrap2_s1_clk",
2451 .parent_hws = (const struct clk_hw*[]) {
2452 &gcc_qupv3_wrap2_s1_clk_src.clkr.hw,
2453 },
2454 .num_parents = 1,
2455 .flags = CLK_SET_RATE_PARENT,
2456 .ops = &clk_branch2_ops,
2457 },
2458 },
2459 };
2460
2461 static struct clk_branch gcc_qupv3_wrap2_s2_clk = {
2462 .halt_reg = 0x1e28c,
2463 .halt_check = BRANCH_HALT_VOTED,
2464 .clkr = {
2465 .enable_reg = 0x52010,
2466 .enable_mask = BIT(6),
2467 .hw.init = &(const struct clk_init_data) {
2468 .name = "gcc_qupv3_wrap2_s2_clk",
2469 .parent_hws = (const struct clk_hw*[]) {
2470 &gcc_qupv3_wrap2_s2_clk_src.clkr.hw,
2471 },
2472 .num_parents = 1,
2473 .flags = CLK_SET_RATE_PARENT,
2474 .ops = &clk_branch2_ops,
2475 },
2476 },
2477 };
2478
2479 static struct clk_branch gcc_qupv3_wrap2_s3_clk = {
2480 .halt_reg = 0x1e3c8,
2481 .halt_check = BRANCH_HALT_VOTED,
2482 .clkr = {
2483 .enable_reg = 0x52010,
2484 .enable_mask = BIT(7),
2485 .hw.init = &(const struct clk_init_data) {
2486 .name = "gcc_qupv3_wrap2_s3_clk",
2487 .parent_hws = (const struct clk_hw*[]) {
2488 &gcc_qupv3_wrap2_s3_clk_src.clkr.hw,
2489 },
2490 .num_parents = 1,
2491 .flags = CLK_SET_RATE_PARENT,
2492 .ops = &clk_branch2_ops,
2493 },
2494 },
2495 };
2496
2497 static struct clk_branch gcc_qupv3_wrap2_s4_clk = {
2498 .halt_reg = 0x1e504,
2499 .halt_check = BRANCH_HALT_VOTED,
2500 .clkr = {
2501 .enable_reg = 0x52010,
2502 .enable_mask = BIT(8),
2503 .hw.init = &(const struct clk_init_data) {
2504 .name = "gcc_qupv3_wrap2_s4_clk",
2505 .parent_hws = (const struct clk_hw*[]) {
2506 &gcc_qupv3_wrap2_s4_clk_src.clkr.hw,
2507 },
2508 .num_parents = 1,
2509 .flags = CLK_SET_RATE_PARENT,
2510 .ops = &clk_branch2_ops,
2511 },
2512 },
2513 };
2514
2515 static struct clk_branch gcc_qupv3_wrap3_core_2x_clk = {
2516 .halt_reg = 0x2340c,
2517 .halt_check = BRANCH_HALT_VOTED,
2518 .clkr = {
2519 .enable_reg = 0x52018,
2520 .enable_mask = BIT(11),
2521 .hw.init = &(const struct clk_init_data) {
2522 .name = "gcc_qupv3_wrap3_core_2x_clk",
2523 .ops = &clk_branch2_ops,
2524 },
2525 },
2526 };
2527
2528 static struct clk_branch gcc_qupv3_wrap3_core_clk = {
2529 .halt_reg = 0x233f8,
2530 .halt_check = BRANCH_HALT_VOTED,
2531 .clkr = {
2532 .enable_reg = 0x52018,
2533 .enable_mask = BIT(10),
2534 .hw.init = &(const struct clk_init_data) {
2535 .name = "gcc_qupv3_wrap3_core_clk",
2536 .ops = &clk_branch2_ops,
2537 },
2538 },
2539 };
2540
2541 static struct clk_branch gcc_qupv3_wrap3_qspi_ref_clk = {
2542 .halt_reg = 0xa8648,
2543 .halt_check = BRANCH_HALT_VOTED,
2544 .clkr = {
2545 .enable_reg = 0x52010,
2546 .enable_mask = BIT(25),
2547 .hw.init = &(const struct clk_init_data) {
2548 .name = "gcc_qupv3_wrap3_qspi_ref_clk",
2549 .parent_hws = (const struct clk_hw*[]) {
2550 &gcc_qupv3_wrap3_qspi_ref_clk_src.clkr.hw,
2551 },
2552 .num_parents = 1,
2553 .flags = CLK_SET_RATE_PARENT,
2554 .ops = &clk_branch2_ops,
2555 },
2556 },
2557 };
2558
2559 static struct clk_branch gcc_qupv3_wrap3_s0_clk = {
2560 .halt_reg = 0xa8004,
2561 .halt_check = BRANCH_HALT_VOTED,
2562 .clkr = {
2563 .enable_reg = 0x52018,
2564 .enable_mask = BIT(12),
2565 .hw.init = &(const struct clk_init_data) {
2566 .name = "gcc_qupv3_wrap3_s0_clk",
2567 .parent_hws = (const struct clk_hw*[]) {
2568 &gcc_qupv3_wrap3_s0_clk_src.clkr.hw,
2569 },
2570 .num_parents = 1,
2571 .flags = CLK_SET_RATE_PARENT,
2572 .ops = &clk_branch2_ops,
2573 },
2574 },
2575 };
2576
2577 static struct clk_branch gcc_qupv3_wrap3_s1_clk = {
2578 .halt_reg = 0xa8140,
2579 .halt_check = BRANCH_HALT_VOTED,
2580 .clkr = {
2581 .enable_reg = 0x52018,
2582 .enable_mask = BIT(13),
2583 .hw.init = &(const struct clk_init_data) {
2584 .name = "gcc_qupv3_wrap3_s1_clk",
2585 .parent_hws = (const struct clk_hw*[]) {
2586 &gcc_qupv3_wrap3_s1_clk_src.clkr.hw,
2587 },
2588 .num_parents = 1,
2589 .flags = CLK_SET_RATE_PARENT,
2590 .ops = &clk_branch2_ops,
2591 },
2592 },
2593 };
2594
2595 static struct clk_branch gcc_qupv3_wrap3_s2_clk = {
2596 .halt_reg = 0xa8158,
2597 .halt_check = BRANCH_HALT_VOTED,
2598 .clkr = {
2599 .enable_reg = 0x52018,
2600 .enable_mask = BIT(14),
2601 .hw.init = &(const struct clk_init_data) {
2602 .name = "gcc_qupv3_wrap3_s2_clk",
2603 .parent_hws = (const struct clk_hw*[]) {
2604 &gcc_qupv3_wrap3_s2_clk_src.clkr.hw,
2605 },
2606 .num_parents = 1,
2607 .flags = CLK_SET_RATE_PARENT,
2608 .ops = &clk_branch2_ops,
2609 },
2610 },
2611 };
2612
2613 static struct clk_branch gcc_qupv3_wrap3_s3_clk = {
2614 .halt_reg = 0xa8294,
2615 .halt_check = BRANCH_HALT_VOTED,
2616 .clkr = {
2617 .enable_reg = 0x52018,
2618 .enable_mask = BIT(15),
2619 .hw.init = &(const struct clk_init_data) {
2620 .name = "gcc_qupv3_wrap3_s3_clk",
2621 .parent_hws = (const struct clk_hw*[]) {
2622 &gcc_qupv3_wrap3_s3_clk_src.clkr.hw,
2623 },
2624 .num_parents = 1,
2625 .flags = CLK_SET_RATE_PARENT,
2626 .ops = &clk_branch2_ops,
2627 },
2628 },
2629 };
2630
2631 static struct clk_branch gcc_qupv3_wrap3_s4_clk = {
2632 .halt_reg = 0xa83d0,
2633 .halt_check = BRANCH_HALT_VOTED,
2634 .clkr = {
2635 .enable_reg = 0x52018,
2636 .enable_mask = BIT(16),
2637 .hw.init = &(const struct clk_init_data) {
2638 .name = "gcc_qupv3_wrap3_s4_clk",
2639 .parent_hws = (const struct clk_hw*[]) {
2640 &gcc_qupv3_wrap3_s4_clk_src.clkr.hw,
2641 },
2642 .num_parents = 1,
2643 .flags = CLK_SET_RATE_PARENT,
2644 .ops = &clk_branch2_ops,
2645 },
2646 },
2647 };
2648
2649 static struct clk_branch gcc_qupv3_wrap3_s5_clk = {
2650 .halt_reg = 0xa850c,
2651 .halt_check = BRANCH_HALT_VOTED,
2652 .clkr = {
2653 .enable_reg = 0x52018,
2654 .enable_mask = BIT(17),
2655 .hw.init = &(const struct clk_init_data) {
2656 .name = "gcc_qupv3_wrap3_s5_clk",
2657 .parent_hws = (const struct clk_hw*[]) {
2658 &gcc_qupv3_wrap3_s5_clk_src.clkr.hw,
2659 },
2660 .num_parents = 1,
2661 .flags = CLK_SET_RATE_PARENT,
2662 .ops = &clk_branch2_ops,
2663 },
2664 },
2665 };
2666
2667 static struct clk_branch gcc_qupv3_wrap4_core_2x_clk = {
2668 .halt_reg = 0x23564,
2669 .halt_check = BRANCH_HALT_VOTED,
2670 .clkr = {
2671 .enable_reg = 0x52018,
2672 .enable_mask = BIT(25),
2673 .hw.init = &(const struct clk_init_data) {
2674 .name = "gcc_qupv3_wrap4_core_2x_clk",
2675 .ops = &clk_branch2_ops,
2676 },
2677 },
2678 };
2679
2680 static struct clk_branch gcc_qupv3_wrap4_core_clk = {
2681 .halt_reg = 0x23550,
2682 .halt_check = BRANCH_HALT_VOTED,
2683 .clkr = {
2684 .enable_reg = 0x52018,
2685 .enable_mask = BIT(24),
2686 .hw.init = &(const struct clk_init_data) {
2687 .name = "gcc_qupv3_wrap4_core_clk",
2688 .ops = &clk_branch2_ops,
2689 },
2690 },
2691 };
2692
2693 static struct clk_branch gcc_qupv3_wrap4_s0_clk = {
2694 .halt_reg = 0xa9004,
2695 .halt_check = BRANCH_HALT_VOTED,
2696 .clkr = {
2697 .enable_reg = 0x52018,
2698 .enable_mask = BIT(26),
2699 .hw.init = &(const struct clk_init_data) {
2700 .name = "gcc_qupv3_wrap4_s0_clk",
2701 .parent_hws = (const struct clk_hw*[]) {
2702 &gcc_qupv3_wrap4_s0_clk_src.clkr.hw,
2703 },
2704 .num_parents = 1,
2705 .flags = CLK_SET_RATE_PARENT,
2706 .ops = &clk_branch2_ops,
2707 },
2708 },
2709 };
2710
2711 static struct clk_branch gcc_qupv3_wrap4_s1_clk = {
2712 .halt_reg = 0xa9140,
2713 .halt_check = BRANCH_HALT_VOTED,
2714 .clkr = {
2715 .enable_reg = 0x52018,
2716 .enable_mask = BIT(27),
2717 .hw.init = &(const struct clk_init_data) {
2718 .name = "gcc_qupv3_wrap4_s1_clk",
2719 .parent_hws = (const struct clk_hw*[]) {
2720 &gcc_qupv3_wrap4_s1_clk_src.clkr.hw,
2721 },
2722 .num_parents = 1,
2723 .flags = CLK_SET_RATE_PARENT,
2724 .ops = &clk_branch2_ops,
2725 },
2726 },
2727 };
2728
2729 static struct clk_branch gcc_qupv3_wrap4_s2_clk = {
2730 .halt_reg = 0xa927c,
2731 .halt_check = BRANCH_HALT_VOTED,
2732 .clkr = {
2733 .enable_reg = 0x52018,
2734 .enable_mask = BIT(28),
2735 .hw.init = &(const struct clk_init_data) {
2736 .name = "gcc_qupv3_wrap4_s2_clk",
2737 .parent_hws = (const struct clk_hw*[]) {
2738 &gcc_qupv3_wrap4_s2_clk_src.clkr.hw,
2739 },
2740 .num_parents = 1,
2741 .flags = CLK_SET_RATE_PARENT,
2742 .ops = &clk_branch2_ops,
2743 },
2744 },
2745 };
2746
2747 static struct clk_branch gcc_qupv3_wrap4_s3_clk = {
2748 .halt_reg = 0xa93b8,
2749 .halt_check = BRANCH_HALT_VOTED,
2750 .clkr = {
2751 .enable_reg = 0x52018,
2752 .enable_mask = BIT(29),
2753 .hw.init = &(const struct clk_init_data) {
2754 .name = "gcc_qupv3_wrap4_s3_clk",
2755 .parent_hws = (const struct clk_hw*[]) {
2756 &gcc_qupv3_wrap4_s3_clk_src.clkr.hw,
2757 },
2758 .num_parents = 1,
2759 .flags = CLK_SET_RATE_PARENT,
2760 .ops = &clk_branch2_ops,
2761 },
2762 },
2763 };
2764
2765 static struct clk_branch gcc_qupv3_wrap4_s4_clk = {
2766 .halt_reg = 0xa94f4,
2767 .halt_check = BRANCH_HALT_VOTED,
2768 .clkr = {
2769 .enable_reg = 0x52018,
2770 .enable_mask = BIT(30),
2771 .hw.init = &(const struct clk_init_data) {
2772 .name = "gcc_qupv3_wrap4_s4_clk",
2773 .parent_hws = (const struct clk_hw*[]) {
2774 &gcc_qupv3_wrap4_s4_clk_src.clkr.hw,
2775 },
2776 .num_parents = 1,
2777 .flags = CLK_SET_RATE_PARENT,
2778 .ops = &clk_branch2_ops,
2779 },
2780 },
2781 };
2782
2783 static struct clk_branch gcc_qupv3_wrap5_core_2x_clk = {
2784 .halt_reg = 0x236bc,
2785 .halt_check = BRANCH_HALT_VOTED,
2786 .clkr = {
2787 .enable_reg = 0x52020,
2788 .enable_mask = BIT(16),
2789 .hw.init = &(const struct clk_init_data) {
2790 .name = "gcc_qupv3_wrap5_core_2x_clk",
2791 .ops = &clk_branch2_ops,
2792 },
2793 },
2794 };
2795
2796 static struct clk_branch gcc_qupv3_wrap5_core_clk = {
2797 .halt_reg = 0x236a8,
2798 .halt_check = BRANCH_HALT_VOTED,
2799 .clkr = {
2800 .enable_reg = 0x52020,
2801 .enable_mask = BIT(15),
2802 .hw.init = &(const struct clk_init_data) {
2803 .name = "gcc_qupv3_wrap5_core_clk",
2804 .ops = &clk_branch2_ops,
2805 },
2806 },
2807 };
2808
2809 static struct clk_branch gcc_qupv3_wrap5_qspi_ref_clk = {
2810 .halt_reg = 0xad01c,
2811 .halt_check = BRANCH_HALT_VOTED,
2812 .clkr = {
2813 .enable_reg = 0x52020,
2814 .enable_mask = BIT(18),
2815 .hw.init = &(const struct clk_init_data) {
2816 .name = "gcc_qupv3_wrap5_qspi_ref_clk",
2817 .parent_hws = (const struct clk_hw*[]) {
2818 &gcc_qupv3_wrap5_qspi_ref_clk_src.clkr.hw,
2819 },
2820 .num_parents = 1,
2821 .flags = CLK_SET_RATE_PARENT,
2822 .ops = &clk_branch2_ops,
2823 },
2824 },
2825 };
2826
2827 static struct clk_branch gcc_qupv3_wrap5_s0_clk = {
2828 .halt_reg = 0xad004,
2829 .halt_check = BRANCH_HALT_VOTED,
2830 .clkr = {
2831 .enable_reg = 0x52020,
2832 .enable_mask = BIT(17),
2833 .hw.init = &(const struct clk_init_data) {
2834 .name = "gcc_qupv3_wrap5_s0_clk",
2835 .parent_hws = (const struct clk_hw*[]) {
2836 &gcc_qupv3_wrap5_s0_clk_src.clkr.hw,
2837 },
2838 .num_parents = 1,
2839 .flags = CLK_SET_RATE_PARENT,
2840 .ops = &clk_branch2_ops,
2841 },
2842 },
2843 };
2844
2845 static struct clk_branch gcc_qupv3_wrap_1_m_axi_clk = {
2846 .halt_reg = 0x23140,
2847 .halt_check = BRANCH_HALT_VOTED,
2848 .hwcg_reg = 0x23140,
2849 .hwcg_bit = 1,
2850 .clkr = {
2851 .enable_reg = 0x52008,
2852 .enable_mask = BIT(20),
2853 .hw.init = &(const struct clk_init_data) {
2854 .name = "gcc_qupv3_wrap_1_m_axi_clk",
2855 .ops = &clk_branch2_ops,
2856 },
2857 },
2858 };
2859
2860 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
2861 .halt_reg = 0x23144,
2862 .halt_check = BRANCH_HALT_VOTED,
2863 .hwcg_reg = 0x23144,
2864 .hwcg_bit = 1,
2865 .clkr = {
2866 .enable_reg = 0x52008,
2867 .enable_mask = BIT(21),
2868 .hw.init = &(const struct clk_init_data) {
2869 .name = "gcc_qupv3_wrap_1_s_ahb_clk",
2870 .ops = &clk_branch2_ops,
2871 },
2872 },
2873 };
2874
2875 static struct clk_branch gcc_qupv3_wrap_2_m_ahb_clk = {
2876 .halt_reg = 0x23298,
2877 .halt_check = BRANCH_HALT_VOTED,
2878 .hwcg_reg = 0x23298,
2879 .hwcg_bit = 1,
2880 .clkr = {
2881 .enable_reg = 0x52010,
2882 .enable_mask = BIT(2),
2883 .hw.init = &(const struct clk_init_data) {
2884 .name = "gcc_qupv3_wrap_2_m_ahb_clk",
2885 .ops = &clk_branch2_ops,
2886 },
2887 },
2888 };
2889
2890 static struct clk_branch gcc_qupv3_wrap_2_s_ahb_clk = {
2891 .halt_reg = 0x2329c,
2892 .halt_check = BRANCH_HALT_VOTED,
2893 .hwcg_reg = 0x2329c,
2894 .hwcg_bit = 1,
2895 .clkr = {
2896 .enable_reg = 0x52010,
2897 .enable_mask = BIT(1),
2898 .hw.init = &(const struct clk_init_data) {
2899 .name = "gcc_qupv3_wrap_2_s_ahb_clk",
2900 .ops = &clk_branch2_ops,
2901 },
2902 },
2903 };
2904
2905 static struct clk_branch gcc_qupv3_wrap_3_m_ahb_clk = {
2906 .halt_reg = 0x233f0,
2907 .halt_check = BRANCH_HALT_VOTED,
2908 .hwcg_reg = 0x233f0,
2909 .hwcg_bit = 1,
2910 .clkr = {
2911 .enable_reg = 0x52018,
2912 .enable_mask = BIT(8),
2913 .hw.init = &(const struct clk_init_data) {
2914 .name = "gcc_qupv3_wrap_3_m_ahb_clk",
2915 .ops = &clk_branch2_ops,
2916 },
2917 },
2918 };
2919
2920 static struct clk_branch gcc_qupv3_wrap_3_s_ahb_clk = {
2921 .halt_reg = 0x233f4,
2922 .halt_check = BRANCH_HALT_VOTED,
2923 .hwcg_reg = 0x233f4,
2924 .hwcg_bit = 1,
2925 .clkr = {
2926 .enable_reg = 0x52018,
2927 .enable_mask = BIT(9),
2928 .hw.init = &(const struct clk_init_data) {
2929 .name = "gcc_qupv3_wrap_3_s_ahb_clk",
2930 .ops = &clk_branch2_ops,
2931 },
2932 },
2933 };
2934
2935 static struct clk_branch gcc_qupv3_wrap_4_m_ahb_clk = {
2936 .halt_reg = 0x23548,
2937 .halt_check = BRANCH_HALT_VOTED,
2938 .hwcg_reg = 0x23548,
2939 .hwcg_bit = 1,
2940 .clkr = {
2941 .enable_reg = 0x52018,
2942 .enable_mask = BIT(22),
2943 .hw.init = &(const struct clk_init_data) {
2944 .name = "gcc_qupv3_wrap_4_m_ahb_clk",
2945 .ops = &clk_branch2_ops,
2946 },
2947 },
2948 };
2949
2950 static struct clk_branch gcc_qupv3_wrap_4_s_ahb_clk = {
2951 .halt_reg = 0x2354c,
2952 .halt_check = BRANCH_HALT_VOTED,
2953 .hwcg_reg = 0x2354c,
2954 .hwcg_bit = 1,
2955 .clkr = {
2956 .enable_reg = 0x52018,
2957 .enable_mask = BIT(23),
2958 .hw.init = &(const struct clk_init_data) {
2959 .name = "gcc_qupv3_wrap_4_s_ahb_clk",
2960 .ops = &clk_branch2_ops,
2961 },
2962 },
2963 };
2964
2965 static struct clk_branch gcc_qupv3_wrap_5_m_ahb_clk = {
2966 .halt_reg = 0x236a0,
2967 .halt_check = BRANCH_HALT_VOTED,
2968 .hwcg_reg = 0x236a0,
2969 .hwcg_bit = 1,
2970 .clkr = {
2971 .enable_reg = 0x52020,
2972 .enable_mask = BIT(13),
2973 .hw.init = &(const struct clk_init_data) {
2974 .name = "gcc_qupv3_wrap_5_m_ahb_clk",
2975 .ops = &clk_branch2_ops,
2976 },
2977 },
2978 };
2979
2980 static struct clk_branch gcc_qupv3_wrap_5_s_ahb_clk = {
2981 .halt_reg = 0x236a4,
2982 .halt_check = BRANCH_HALT_VOTED,
2983 .hwcg_reg = 0x236a4,
2984 .hwcg_bit = 1,
2985 .clkr = {
2986 .enable_reg = 0x52020,
2987 .enable_mask = BIT(14),
2988 .hw.init = &(const struct clk_init_data) {
2989 .name = "gcc_qupv3_wrap_5_s_ahb_clk",
2990 .ops = &clk_branch2_ops,
2991 },
2992 },
2993 };
2994
2995 static struct clk_branch gcc_sdcc2_ahb_clk = {
2996 .halt_reg = 0x14014,
2997 .halt_check = BRANCH_HALT,
2998 .clkr = {
2999 .enable_reg = 0x14014,
3000 .enable_mask = BIT(0),
3001 .hw.init = &(const struct clk_init_data) {
3002 .name = "gcc_sdcc2_ahb_clk",
3003 .ops = &clk_branch2_ops,
3004 },
3005 },
3006 };
3007
3008 static struct clk_branch gcc_sdcc2_apps_clk = {
3009 .halt_reg = 0x14004,
3010 .halt_check = BRANCH_HALT,
3011 .clkr = {
3012 .enable_reg = 0x14004,
3013 .enable_mask = BIT(0),
3014 .hw.init = &(const struct clk_init_data) {
3015 .name = "gcc_sdcc2_apps_clk",
3016 .parent_hws = (const struct clk_hw*[]) {
3017 &gcc_sdcc2_apps_clk_src.clkr.hw,
3018 },
3019 .num_parents = 1,
3020 .flags = CLK_SET_RATE_PARENT,
3021 .ops = &clk_branch2_ops,
3022 },
3023 },
3024 };
3025
3026 static struct clk_branch gcc_sdcc4_ahb_clk = {
3027 .halt_reg = 0x16014,
3028 .halt_check = BRANCH_HALT,
3029 .clkr = {
3030 .enable_reg = 0x16014,
3031 .enable_mask = BIT(0),
3032 .hw.init = &(const struct clk_init_data) {
3033 .name = "gcc_sdcc4_ahb_clk",
3034 .ops = &clk_branch2_ops,
3035 },
3036 },
3037 };
3038
3039 static struct clk_branch gcc_sdcc4_apps_clk = {
3040 .halt_reg = 0x16004,
3041 .halt_check = BRANCH_HALT,
3042 .clkr = {
3043 .enable_reg = 0x16004,
3044 .enable_mask = BIT(0),
3045 .hw.init = &(const struct clk_init_data) {
3046 .name = "gcc_sdcc4_apps_clk",
3047 .parent_hws = (const struct clk_hw*[]) {
3048 &gcc_sdcc4_apps_clk_src.clkr.hw,
3049 },
3050 .num_parents = 1,
3051 .flags = CLK_SET_RATE_PARENT,
3052 .ops = &clk_branch2_ops,
3053 },
3054 },
3055 };
3056
3057 static struct clk_branch gcc_ufs_phy_ahb_clk = {
3058 .halt_reg = 0x77028,
3059 .halt_check = BRANCH_HALT_VOTED,
3060 .hwcg_reg = 0x77028,
3061 .hwcg_bit = 1,
3062 .clkr = {
3063 .enable_reg = 0x77028,
3064 .enable_mask = BIT(0),
3065 .hw.init = &(const struct clk_init_data) {
3066 .name = "gcc_ufs_phy_ahb_clk",
3067 .ops = &clk_branch2_ops,
3068 },
3069 },
3070 };
3071
3072 static struct clk_branch gcc_ufs_phy_axi_clk = {
3073 .halt_reg = 0x77018,
3074 .halt_check = BRANCH_HALT_VOTED,
3075 .hwcg_reg = 0x77018,
3076 .hwcg_bit = 1,
3077 .clkr = {
3078 .enable_reg = 0x77018,
3079 .enable_mask = BIT(0),
3080 .hw.init = &(const struct clk_init_data) {
3081 .name = "gcc_ufs_phy_axi_clk",
3082 .parent_hws = (const struct clk_hw*[]) {
3083 &gcc_ufs_phy_axi_clk_src.clkr.hw,
3084 },
3085 .num_parents = 1,
3086 .flags = CLK_SET_RATE_PARENT,
3087 .ops = &clk_branch2_ops,
3088 },
3089 },
3090 };
3091
3092 static struct clk_branch gcc_ufs_phy_ice_core_clk = {
3093 .halt_reg = 0x7707c,
3094 .halt_check = BRANCH_HALT_VOTED,
3095 .hwcg_reg = 0x7707c,
3096 .hwcg_bit = 1,
3097 .clkr = {
3098 .enable_reg = 0x7707c,
3099 .enable_mask = BIT(0),
3100 .hw.init = &(const struct clk_init_data) {
3101 .name = "gcc_ufs_phy_ice_core_clk",
3102 .parent_hws = (const struct clk_hw*[]) {
3103 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
3104 },
3105 .num_parents = 1,
3106 .flags = CLK_SET_RATE_PARENT,
3107 .ops = &clk_branch2_ops,
3108 },
3109 },
3110 };
3111
3112 static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
3113 .halt_reg = 0x770bc,
3114 .halt_check = BRANCH_HALT_VOTED,
3115 .hwcg_reg = 0x770bc,
3116 .hwcg_bit = 1,
3117 .clkr = {
3118 .enable_reg = 0x770bc,
3119 .enable_mask = BIT(0),
3120 .hw.init = &(const struct clk_init_data) {
3121 .name = "gcc_ufs_phy_phy_aux_clk",
3122 .parent_hws = (const struct clk_hw*[]) {
3123 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
3124 },
3125 .num_parents = 1,
3126 .flags = CLK_SET_RATE_PARENT,
3127 .ops = &clk_branch2_ops,
3128 },
3129 },
3130 };
3131
3132 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
3133 .halt_reg = 0x77030,
3134 .halt_check = BRANCH_HALT_DELAY,
3135 .clkr = {
3136 .enable_reg = 0x77030,
3137 .enable_mask = BIT(0),
3138 .hw.init = &(const struct clk_init_data) {
3139 .name = "gcc_ufs_phy_rx_symbol_0_clk",
3140 .parent_hws = (const struct clk_hw*[]) {
3141 &gcc_ufs_phy_rx_symbol_0_clk_src.clkr.hw,
3142 },
3143 .num_parents = 1,
3144 .flags = CLK_SET_RATE_PARENT,
3145 .ops = &clk_branch2_ops,
3146 },
3147 },
3148 };
3149
3150 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
3151 .halt_reg = 0x770d8,
3152 .halt_check = BRANCH_HALT_DELAY,
3153 .clkr = {
3154 .enable_reg = 0x770d8,
3155 .enable_mask = BIT(0),
3156 .hw.init = &(const struct clk_init_data) {
3157 .name = "gcc_ufs_phy_rx_symbol_1_clk",
3158 .parent_hws = (const struct clk_hw*[]) {
3159 &gcc_ufs_phy_rx_symbol_1_clk_src.clkr.hw,
3160 },
3161 .num_parents = 1,
3162 .flags = CLK_SET_RATE_PARENT,
3163 .ops = &clk_branch2_ops,
3164 },
3165 },
3166 };
3167
3168 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
3169 .halt_reg = 0x7702c,
3170 .halt_check = BRANCH_HALT_DELAY,
3171 .clkr = {
3172 .enable_reg = 0x7702c,
3173 .enable_mask = BIT(0),
3174 .hw.init = &(const struct clk_init_data) {
3175 .name = "gcc_ufs_phy_tx_symbol_0_clk",
3176 .parent_hws = (const struct clk_hw*[]) {
3177 &gcc_ufs_phy_tx_symbol_0_clk_src.clkr.hw,
3178 },
3179 .num_parents = 1,
3180 .flags = CLK_SET_RATE_PARENT,
3181 .ops = &clk_branch2_ops,
3182 },
3183 },
3184 };
3185
3186 static struct clk_branch gcc_ufs_phy_unipro_5_core_clk = {
3187 .halt_reg = 0x7706c,
3188 .halt_check = BRANCH_HALT_VOTED,
3189 .hwcg_reg = 0x7706c,
3190 .hwcg_bit = 1,
3191 .clkr = {
3192 .enable_reg = 0x7706c,
3193 .enable_mask = BIT(0),
3194 .hw.init = &(const struct clk_init_data) {
3195 .name = "gcc_ufs_phy_unipro_5_core_clk",
3196 .parent_hws = (const struct clk_hw*[]) {
3197 &gcc_ufs_phy_unipro_5_core_clk_src.clkr.hw,
3198 },
3199 .num_parents = 1,
3200 .flags = CLK_SET_RATE_PARENT,
3201 .ops = &clk_branch2_ops,
3202 },
3203 },
3204 };
3205
3206 static struct clk_branch gcc_usb30_prim_master_clk = {
3207 .halt_reg = 0x39018,
3208 .halt_check = BRANCH_HALT,
3209 .clkr = {
3210 .enable_reg = 0x39018,
3211 .enable_mask = BIT(0),
3212 .hw.init = &(const struct clk_init_data) {
3213 .name = "gcc_usb30_prim_master_clk",
3214 .parent_hws = (const struct clk_hw*[]) {
3215 &gcc_usb30_prim_master_clk_src.clkr.hw,
3216 },
3217 .num_parents = 1,
3218 .flags = CLK_SET_RATE_PARENT,
3219 .ops = &clk_branch2_ops,
3220 },
3221 },
3222 };
3223
3224 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
3225 .halt_reg = 0x3902c,
3226 .halt_check = BRANCH_HALT,
3227 .clkr = {
3228 .enable_reg = 0x3902c,
3229 .enable_mask = BIT(0),
3230 .hw.init = &(const struct clk_init_data) {
3231 .name = "gcc_usb30_prim_mock_utmi_clk",
3232 .parent_hws = (const struct clk_hw*[]) {
3233 &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,
3234 },
3235 .num_parents = 1,
3236 .flags = CLK_SET_RATE_PARENT,
3237 .ops = &clk_branch2_ops,
3238 },
3239 },
3240 };
3241
3242 static struct clk_branch gcc_usb30_prim_sleep_clk = {
3243 .halt_reg = 0x39028,
3244 .halt_check = BRANCH_HALT,
3245 .clkr = {
3246 .enable_reg = 0x39028,
3247 .enable_mask = BIT(0),
3248 .hw.init = &(const struct clk_init_data) {
3249 .name = "gcc_usb30_prim_sleep_clk",
3250 .ops = &clk_branch2_ops,
3251 },
3252 },
3253 };
3254
3255 static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
3256 .halt_reg = 0x39068,
3257 .halt_check = BRANCH_HALT,
3258 .clkr = {
3259 .enable_reg = 0x39068,
3260 .enable_mask = BIT(0),
3261 .hw.init = &(const struct clk_init_data) {
3262 .name = "gcc_usb3_prim_phy_aux_clk",
3263 .parent_hws = (const struct clk_hw*[]) {
3264 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
3265 },
3266 .num_parents = 1,
3267 .flags = CLK_SET_RATE_PARENT,
3268 .ops = &clk_branch2_ops,
3269 },
3270 },
3271 };
3272
3273 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
3274 .halt_reg = 0x3906c,
3275 .halt_check = BRANCH_HALT,
3276 .clkr = {
3277 .enable_reg = 0x3906c,
3278 .enable_mask = BIT(0),
3279 .hw.init = &(const struct clk_init_data) {
3280 .name = "gcc_usb3_prim_phy_com_aux_clk",
3281 .parent_hws = (const struct clk_hw*[]) {
3282 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
3283 },
3284 .num_parents = 1,
3285 .flags = CLK_SET_RATE_PARENT,
3286 .ops = &clk_branch2_ops,
3287 },
3288 },
3289 };
3290
3291 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
3292 .halt_reg = 0x39070,
3293 .halt_check = BRANCH_HALT_DELAY,
3294 .hwcg_reg = 0x39070,
3295 .hwcg_bit = 1,
3296 .clkr = {
3297 .enable_reg = 0x39070,
3298 .enable_mask = BIT(0),
3299 .hw.init = &(const struct clk_init_data) {
3300 .name = "gcc_usb3_prim_phy_pipe_clk",
3301 .parent_hws = (const struct clk_hw*[]) {
3302 &gcc_usb3_prim_phy_pipe_clk_src.clkr.hw,
3303 },
3304 .num_parents = 1,
3305 .flags = CLK_SET_RATE_PARENT,
3306 .ops = &clk_branch2_ops,
3307 },
3308 },
3309 };
3310
3311 static struct clk_branch gcc_video_axi0_clk = {
3312 .halt_reg = 0x32018,
3313 .halt_check = BRANCH_HALT_SKIP,
3314 .hwcg_reg = 0x32018,
3315 .hwcg_bit = 1,
3316 .clkr = {
3317 .enable_reg = 0x32018,
3318 .enable_mask = BIT(0),
3319 .hw.init = &(const struct clk_init_data) {
3320 .name = "gcc_video_axi0_clk",
3321 .ops = &clk_branch2_ops,
3322 },
3323 },
3324 };
3325
3326 static struct clk_branch gcc_video_axi0c_clk = {
3327 .halt_reg = 0x32020,
3328 .halt_check = BRANCH_HALT_SKIP,
3329 .hwcg_reg = 0x32020,
3330 .hwcg_bit = 1,
3331 .clkr = {
3332 .enable_reg = 0x32020,
3333 .enable_mask = BIT(0),
3334 .hw.init = &(const struct clk_init_data) {
3335 .name = "gcc_video_axi0c_clk",
3336 .ops = &clk_branch2_ops,
3337 },
3338 },
3339 };
3340
3341 static struct gdsc gcc_pcie_0_gdsc = {
3342 .gdscr = 0x6b004,
3343 .en_rest_wait_val = 0x2,
3344 .en_few_wait_val = 0x2,
3345 .clk_dis_wait_val = 0xf,
3346 .collapse_ctrl = 0x52154,
3347 .collapse_mask = BIT(0),
3348 .pd = {
3349 .name = "gcc_pcie_0_gdsc",
3350 },
3351 .pwrsts = PWRSTS_OFF_ON,
3352 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | VOTABLE,
3353 };
3354
3355 static struct gdsc gcc_pcie_0_phy_gdsc = {
3356 .gdscr = 0x6c000,
3357 .en_rest_wait_val = 0x2,
3358 .en_few_wait_val = 0x2,
3359 .clk_dis_wait_val = 0x2,
3360 .collapse_ctrl = 0x52154,
3361 .collapse_mask = BIT(1),
3362 .pd = {
3363 .name = "gcc_pcie_0_phy_gdsc",
3364 },
3365 .pwrsts = PWRSTS_OFF_ON,
3366 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | VOTABLE,
3367 };
3368
3369 static struct gdsc gcc_pcie_1_gdsc = {
3370 .gdscr = 0x67004,
3371 .en_rest_wait_val = 0x2,
3372 .en_few_wait_val = 0x2,
3373 .clk_dis_wait_val = 0xf,
3374 .collapse_ctrl = 0x5214c,
3375 .collapse_mask = BIT(2),
3376 .pd = {
3377 .name = "gcc_pcie_1_gdsc",
3378 },
3379 .pwrsts = PWRSTS_OFF_ON,
3380 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | VOTABLE,
3381 };
3382
3383 static struct gdsc gcc_pcie_1_phy_gdsc = {
3384 .gdscr = 0x68000,
3385 .en_rest_wait_val = 0x2,
3386 .en_few_wait_val = 0x2,
3387 .clk_dis_wait_val = 0x2,
3388 .collapse_ctrl = 0x5214c,
3389 .collapse_mask = BIT(3),
3390 .pd = {
3391 .name = "gcc_pcie_1_phy_gdsc",
3392 },
3393 .pwrsts = PWRSTS_OFF_ON,
3394 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | VOTABLE,
3395 };
3396
3397 static struct gdsc gcc_ufs_mem_phy_gdsc = {
3398 .gdscr = 0x9e000,
3399 .en_rest_wait_val = 0x2,
3400 .en_few_wait_val = 0x2,
3401 .clk_dis_wait_val = 0x2,
3402 .pd = {
3403 .name = "gcc_ufs_mem_phy_gdsc",
3404 },
3405 .pwrsts = PWRSTS_OFF_ON,
3406 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3407 };
3408
3409 static struct gdsc gcc_ufs_phy_gdsc = {
3410 .gdscr = 0x77004,
3411 .en_rest_wait_val = 0x2,
3412 .en_few_wait_val = 0x2,
3413 .clk_dis_wait_val = 0xf,
3414 .pd = {
3415 .name = "gcc_ufs_phy_gdsc",
3416 },
3417 .pwrsts = PWRSTS_OFF_ON,
3418 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3419 };
3420
3421 static struct gdsc gcc_usb30_prim_gdsc = {
3422 .gdscr = 0x39004,
3423 .en_rest_wait_val = 0x2,
3424 .en_few_wait_val = 0x2,
3425 .clk_dis_wait_val = 0xf,
3426 .pd = {
3427 .name = "gcc_usb30_prim_gdsc",
3428 },
3429 .pwrsts = PWRSTS_OFF_ON,
3430 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3431 };
3432
3433 static struct gdsc gcc_usb3_phy_gdsc = {
3434 .gdscr = 0x50018,
3435 .en_rest_wait_val = 0x2,
3436 .en_few_wait_val = 0x2,
3437 .clk_dis_wait_val = 0x2,
3438 .pd = {
3439 .name = "gcc_usb3_phy_gdsc",
3440 },
3441 .pwrsts = PWRSTS_OFF_ON,
3442 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3443 };
3444
3445 static struct clk_regmap *gcc_hawi_clocks[] = {
3446 [GCC_AGGRE_NOC_PCIE_AXI_CLK] = &gcc_aggre_noc_pcie_axi_clk.clkr,
3447 [GCC_AGGRE_STARDUSTNOC_USB3_PRIM_AXI_CLK] = &gcc_aggre_stardustnoc_usb3_prim_axi_clk.clkr,
3448 [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
3449 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3450 [GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,
3451 [GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr,
3452 [GCC_CFG_NOC_PCIE_ANOC_AHB_CLK] = &gcc_cfg_noc_pcie_anoc_ahb_clk.clkr,
3453 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
3454 [GCC_CNOC_PCIE_SF_AXI_CLK] = &gcc_cnoc_pcie_sf_axi_clk.clkr,
3455 [GCC_EVA_AXI0_CLK] = &gcc_eva_axi0_clk.clkr,
3456 [GCC_EVA_AXI0C_CLK] = &gcc_eva_axi0c_clk.clkr,
3457 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3458 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
3459 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3460 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
3461 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3462 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
3463 [GCC_GPLL0] = &gcc_gpll0.clkr,
3464 [GCC_GPLL0_OUT_EVEN] = &gcc_gpll0_out_even.clkr,
3465 [GCC_GPLL4] = &gcc_gpll4.clkr,
3466 [GCC_GPLL5] = &gcc_gpll5.clkr,
3467 [GCC_GPLL7] = &gcc_gpll7.clkr,
3468 [GCC_GPLL9] = &gcc_gpll9.clkr,
3469 [GCC_GPU_GEMNOC_GFX_CLK] = &gcc_gpu_gemnoc_gfx_clk.clkr,
3470 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
3471 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
3472 [GCC_GPU_SMMU_VOTE_CLK] = &gcc_gpu_smmu_vote_clk.clkr,
3473 [GCC_MMU_TCU_VOTE_CLK] = &gcc_mmu_tcu_vote_clk.clkr,
3474 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
3475 [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
3476 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
3477 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
3478 [GCC_PCIE_0_PHY_AUX_CLK] = &gcc_pcie_0_phy_aux_clk.clkr,
3479 [GCC_PCIE_0_PHY_AUX_CLK_SRC] = &gcc_pcie_0_phy_aux_clk_src.clkr,
3480 [GCC_PCIE_0_PHY_RCHNG_CLK] = &gcc_pcie_0_phy_rchng_clk.clkr,
3481 [GCC_PCIE_0_PHY_RCHNG_CLK_SRC] = &gcc_pcie_0_phy_rchng_clk_src.clkr,
3482 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
3483 [GCC_PCIE_0_PIPE_CLK_SRC] = &gcc_pcie_0_pipe_clk_src.clkr,
3484 [GCC_PCIE_0_PIPE_DIV2_CLK] = &gcc_pcie_0_pipe_div2_clk.clkr,
3485 [GCC_PCIE_0_PIPE_DIV_CLK_SRC] = &gcc_pcie_0_pipe_div_clk_src.clkr,
3486 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
3487 [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
3488 [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
3489 [GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr,
3490 [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
3491 [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
3492 [GCC_PCIE_1_PHY_AUX_CLK] = &gcc_pcie_1_phy_aux_clk.clkr,
3493 [GCC_PCIE_1_PHY_AUX_CLK_SRC] = &gcc_pcie_1_phy_aux_clk_src.clkr,
3494 [GCC_PCIE_1_PHY_RCHNG_CLK] = &gcc_pcie_1_phy_rchng_clk.clkr,
3495 [GCC_PCIE_1_PHY_RCHNG_CLK_SRC] = &gcc_pcie_1_phy_rchng_clk_src.clkr,
3496 [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
3497 [GCC_PCIE_1_PIPE_CLK_SRC] = &gcc_pcie_1_pipe_clk_src.clkr,
3498 [GCC_PCIE_1_PIPE_DIV2_CLK] = &gcc_pcie_1_pipe_div2_clk.clkr,
3499 [GCC_PCIE_1_PIPE_DIV_CLK_SRC] = &gcc_pcie_1_pipe_div_clk_src.clkr,
3500 [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
3501 [GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr,
3502 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3503 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
3504 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3505 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
3506 [GCC_QUPV3_I2C_CORE_CLK] = &gcc_qupv3_i2c_core_clk.clkr,
3507 [GCC_QUPV3_I2C_S0_CLK] = &gcc_qupv3_i2c_s0_clk.clkr,
3508 [GCC_QUPV3_I2C_S0_CLK_SRC] = &gcc_qupv3_i2c_s0_clk_src.clkr,
3509 [GCC_QUPV3_I2C_S1_CLK] = &gcc_qupv3_i2c_s1_clk.clkr,
3510 [GCC_QUPV3_I2C_S1_CLK_SRC] = &gcc_qupv3_i2c_s1_clk_src.clkr,
3511 [GCC_QUPV3_I2C_S2_CLK] = &gcc_qupv3_i2c_s2_clk.clkr,
3512 [GCC_QUPV3_I2C_S2_CLK_SRC] = &gcc_qupv3_i2c_s2_clk_src.clkr,
3513 [GCC_QUPV3_I2C_S3_CLK] = &gcc_qupv3_i2c_s3_clk.clkr,
3514 [GCC_QUPV3_I2C_S3_CLK_SRC] = &gcc_qupv3_i2c_s3_clk_src.clkr,
3515 [GCC_QUPV3_I2C_S4_CLK] = &gcc_qupv3_i2c_s4_clk.clkr,
3516 [GCC_QUPV3_I2C_S4_CLK_SRC] = &gcc_qupv3_i2c_s4_clk_src.clkr,
3517 [GCC_QUPV3_I2C_S_AHB_CLK] = &gcc_qupv3_i2c_s_ahb_clk.clkr,
3518 [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
3519 [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
3520 [GCC_QUPV3_WRAP1_QSPI_REF_CLK] = &gcc_qupv3_wrap1_qspi_ref_clk.clkr,
3521 [GCC_QUPV3_WRAP1_QSPI_REF_CLK_SRC] = &gcc_qupv3_wrap1_qspi_ref_clk_src.clkr,
3522 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
3523 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
3524 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
3525 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
3526 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
3527 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
3528 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
3529 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
3530 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
3531 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
3532 [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
3533 [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
3534 [GCC_QUPV3_WRAP1_S6_CLK] = &gcc_qupv3_wrap1_s6_clk.clkr,
3535 [GCC_QUPV3_WRAP1_S6_CLK_SRC] = &gcc_qupv3_wrap1_s6_clk_src.clkr,
3536 [GCC_QUPV3_WRAP1_S7_CLK] = &gcc_qupv3_wrap1_s7_clk.clkr,
3537 [GCC_QUPV3_WRAP1_S7_CLK_SRC] = &gcc_qupv3_wrap1_s7_clk_src.clkr,
3538 [GCC_QUPV3_WRAP2_CORE_2X_CLK] = &gcc_qupv3_wrap2_core_2x_clk.clkr,
3539 [GCC_QUPV3_WRAP2_CORE_CLK] = &gcc_qupv3_wrap2_core_clk.clkr,
3540 [GCC_QUPV3_WRAP2_S0_CLK] = &gcc_qupv3_wrap2_s0_clk.clkr,
3541 [GCC_QUPV3_WRAP2_S0_CLK_SRC] = &gcc_qupv3_wrap2_s0_clk_src.clkr,
3542 [GCC_QUPV3_WRAP2_S1_CLK] = &gcc_qupv3_wrap2_s1_clk.clkr,
3543 [GCC_QUPV3_WRAP2_S1_CLK_SRC] = &gcc_qupv3_wrap2_s1_clk_src.clkr,
3544 [GCC_QUPV3_WRAP2_S2_CLK] = &gcc_qupv3_wrap2_s2_clk.clkr,
3545 [GCC_QUPV3_WRAP2_S2_CLK_SRC] = &gcc_qupv3_wrap2_s2_clk_src.clkr,
3546 [GCC_QUPV3_WRAP2_S3_CLK] = &gcc_qupv3_wrap2_s3_clk.clkr,
3547 [GCC_QUPV3_WRAP2_S3_CLK_SRC] = &gcc_qupv3_wrap2_s3_clk_src.clkr,
3548 [GCC_QUPV3_WRAP2_S4_CLK] = &gcc_qupv3_wrap2_s4_clk.clkr,
3549 [GCC_QUPV3_WRAP2_S4_CLK_SRC] = &gcc_qupv3_wrap2_s4_clk_src.clkr,
3550 [GCC_QUPV3_WRAP3_CORE_2X_CLK] = &gcc_qupv3_wrap3_core_2x_clk.clkr,
3551 [GCC_QUPV3_WRAP3_CORE_CLK] = &gcc_qupv3_wrap3_core_clk.clkr,
3552 [GCC_QUPV3_WRAP3_QSPI_REF_CLK] = &gcc_qupv3_wrap3_qspi_ref_clk.clkr,
3553 [GCC_QUPV3_WRAP3_QSPI_REF_CLK_SRC] = &gcc_qupv3_wrap3_qspi_ref_clk_src.clkr,
3554 [GCC_QUPV3_WRAP3_S0_CLK] = &gcc_qupv3_wrap3_s0_clk.clkr,
3555 [GCC_QUPV3_WRAP3_S0_CLK_SRC] = &gcc_qupv3_wrap3_s0_clk_src.clkr,
3556 [GCC_QUPV3_WRAP3_S1_CLK] = &gcc_qupv3_wrap3_s1_clk.clkr,
3557 [GCC_QUPV3_WRAP3_S1_CLK_SRC] = &gcc_qupv3_wrap3_s1_clk_src.clkr,
3558 [GCC_QUPV3_WRAP3_S2_CLK] = &gcc_qupv3_wrap3_s2_clk.clkr,
3559 [GCC_QUPV3_WRAP3_S2_CLK_SRC] = &gcc_qupv3_wrap3_s2_clk_src.clkr,
3560 [GCC_QUPV3_WRAP3_S3_CLK] = &gcc_qupv3_wrap3_s3_clk.clkr,
3561 [GCC_QUPV3_WRAP3_S3_CLK_SRC] = &gcc_qupv3_wrap3_s3_clk_src.clkr,
3562 [GCC_QUPV3_WRAP3_S4_CLK] = &gcc_qupv3_wrap3_s4_clk.clkr,
3563 [GCC_QUPV3_WRAP3_S4_CLK_SRC] = &gcc_qupv3_wrap3_s4_clk_src.clkr,
3564 [GCC_QUPV3_WRAP3_S5_CLK] = &gcc_qupv3_wrap3_s5_clk.clkr,
3565 [GCC_QUPV3_WRAP3_S5_CLK_SRC] = &gcc_qupv3_wrap3_s5_clk_src.clkr,
3566 [GCC_QUPV3_WRAP4_CORE_2X_CLK] = &gcc_qupv3_wrap4_core_2x_clk.clkr,
3567 [GCC_QUPV3_WRAP4_CORE_CLK] = &gcc_qupv3_wrap4_core_clk.clkr,
3568 [GCC_QUPV3_WRAP4_S0_CLK] = &gcc_qupv3_wrap4_s0_clk.clkr,
3569 [GCC_QUPV3_WRAP4_S0_CLK_SRC] = &gcc_qupv3_wrap4_s0_clk_src.clkr,
3570 [GCC_QUPV3_WRAP4_S1_CLK] = &gcc_qupv3_wrap4_s1_clk.clkr,
3571 [GCC_QUPV3_WRAP4_S1_CLK_SRC] = &gcc_qupv3_wrap4_s1_clk_src.clkr,
3572 [GCC_QUPV3_WRAP4_S2_CLK] = &gcc_qupv3_wrap4_s2_clk.clkr,
3573 [GCC_QUPV3_WRAP4_S2_CLK_SRC] = &gcc_qupv3_wrap4_s2_clk_src.clkr,
3574 [GCC_QUPV3_WRAP4_S3_CLK] = &gcc_qupv3_wrap4_s3_clk.clkr,
3575 [GCC_QUPV3_WRAP4_S3_CLK_SRC] = &gcc_qupv3_wrap4_s3_clk_src.clkr,
3576 [GCC_QUPV3_WRAP4_S4_CLK] = &gcc_qupv3_wrap4_s4_clk.clkr,
3577 [GCC_QUPV3_WRAP4_S4_CLK_SRC] = &gcc_qupv3_wrap4_s4_clk_src.clkr,
3578 [GCC_QUPV3_WRAP_1_M_AXI_CLK] = &gcc_qupv3_wrap_1_m_axi_clk.clkr,
3579 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
3580 [GCC_QUPV3_WRAP_2_M_AHB_CLK] = &gcc_qupv3_wrap_2_m_ahb_clk.clkr,
3581 [GCC_QUPV3_WRAP_2_S_AHB_CLK] = &gcc_qupv3_wrap_2_s_ahb_clk.clkr,
3582 [GCC_QUPV3_WRAP_3_M_AHB_CLK] = &gcc_qupv3_wrap_3_m_ahb_clk.clkr,
3583 [GCC_QUPV3_WRAP_3_S_AHB_CLK] = &gcc_qupv3_wrap_3_s_ahb_clk.clkr,
3584 [GCC_QUPV3_WRAP_4_M_AHB_CLK] = &gcc_qupv3_wrap_4_m_ahb_clk.clkr,
3585 [GCC_QUPV3_WRAP_4_S_AHB_CLK] = &gcc_qupv3_wrap_4_s_ahb_clk.clkr,
3586 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3587 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3588 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
3589 [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
3590 [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
3591 [GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr,
3592 [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
3593 [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
3594 [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
3595 [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
3596 [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
3597 [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
3598 [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
3599 [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
3600 [GCC_UFS_PHY_RX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_rx_symbol_0_clk_src.clkr,
3601 [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
3602 [GCC_UFS_PHY_RX_SYMBOL_1_CLK_SRC] = &gcc_ufs_phy_rx_symbol_1_clk_src.clkr,
3603 [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
3604 [GCC_UFS_PHY_TX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_tx_symbol_0_clk_src.clkr,
3605 [GCC_UFS_PHY_UNIPRO_5_CORE_CLK] = &gcc_ufs_phy_unipro_5_core_clk.clkr,
3606 [GCC_UFS_PHY_UNIPRO_5_CORE_CLK_SRC] = &gcc_ufs_phy_unipro_5_core_clk_src.clkr,
3607 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
3608 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
3609 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
3610 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr,
3611 [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,
3612 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
3613 [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
3614 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
3615 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
3616 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
3617 [GCC_USB3_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb3_prim_phy_pipe_clk_src.clkr,
3618 [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
3619 [GCC_VIDEO_AXI0C_CLK] = &gcc_video_axi0c_clk.clkr,
3620 /*
3621 * Maili has more clocks than Hawi. Ensure the array is appropriately
3622 * sized and assign the additional clocks in .probe()
3623 */
3624 [GCC_QUPV3_WRAP_5_S_AHB_CLK] = NULL,
3625 };
3626
3627 static struct gdsc *gcc_hawi_gdscs[] = {
3628 [GCC_PCIE_0_GDSC] = &gcc_pcie_0_gdsc,
3629 [GCC_PCIE_0_PHY_GDSC] = &gcc_pcie_0_phy_gdsc,
3630 [GCC_PCIE_1_GDSC] = &gcc_pcie_1_gdsc,
3631 [GCC_PCIE_1_PHY_GDSC] = &gcc_pcie_1_phy_gdsc,
3632 [GCC_UFS_MEM_PHY_GDSC] = &gcc_ufs_mem_phy_gdsc,
3633 [GCC_UFS_PHY_GDSC] = &gcc_ufs_phy_gdsc,
3634 [GCC_USB30_PRIM_GDSC] = &gcc_usb30_prim_gdsc,
3635 [GCC_USB3_PHY_GDSC] = &gcc_usb3_phy_gdsc,
3636 };
3637
3638 static const struct qcom_reset_map gcc_hawi_resets[] = {
3639 [GCC_CAMERA_BCR] = { 0x26000 },
3640 [GCC_EVA_AXI0_CLK_ARES] = { 0x9f008, 2 },
3641 [GCC_EVA_AXI0C_CLK_ARES] = { 0x9f010, 2 },
3642 [GCC_EVA_BCR] = { 0x9f000 },
3643 [GCC_GPU_BCR] = { 0x71000 },
3644 [GCC_PCIE_0_BCR] = { 0x6b000 },
3645 [GCC_PCIE_0_LINK_DOWN_BCR] = { 0x6c014 },
3646 [GCC_PCIE_0_NOCSR_COM_PHY_BCR] = { 0x6c020 },
3647 [GCC_PCIE_0_PHY_BCR] = { 0x6c01c },
3648 [GCC_PCIE_0_PHY_NOCSR_COM_PHY_BCR] = { 0x6c028 },
3649 [GCC_PCIE_1_BCR] = { 0x67000 },
3650 [GCC_PCIE_1_LINK_DOWN_BCR] = { 0x8e014 },
3651 [GCC_PCIE_1_NOCSR_COM_PHY_BCR] = { 0x8e020 },
3652 [GCC_PCIE_1_PHY_BCR] = { 0x8e01c },
3653 [GCC_PCIE_1_PHY_NOCSR_COM_PHY_BCR] = { 0x8e024 },
3654 [GCC_PCIE_PHY_BCR] = { 0x6f000 },
3655 [GCC_PCIE_PHY_CFG_AHB_BCR] = { 0x6f00c },
3656 [GCC_PCIE_PHY_COM_BCR] = { 0x6f010 },
3657 [GCC_PCIE_RSCC_BCR] = { 0x11000 },
3658 [GCC_PDM_BCR] = { 0x33000 },
3659 [GCC_QUPV3_WRAPPER_1_BCR] = { 0x18000 },
3660 [GCC_QUPV3_WRAPPER_2_BCR] = { 0x1e000 },
3661 [GCC_QUPV3_WRAPPER_3_BCR] = { 0xa8000 },
3662 [GCC_QUPV3_WRAPPER_4_BCR] = { 0xa9000 },
3663 [GCC_QUPV3_WRAPPER_I2C_BCR] = { 0x17000 },
3664 [GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 },
3665 [GCC_QUSB2PHY_SEC_BCR] = { 0x12004 },
3666 [GCC_SDCC2_BCR] = { 0x14000 },
3667 [GCC_SDCC4_BCR] = { 0x16000 },
3668 [GCC_TCSR_PCIE_BCR] = { 0x6f018 },
3669 [GCC_UFS_PHY_BCR] = { 0x77000 },
3670 [GCC_USB30_PRIM_BCR] = { 0x39000 },
3671 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x50008 },
3672 [GCC_USB3_DP_PHY_SEC_BCR] = { 0x50014 },
3673 [GCC_USB3_PHY_PRIM_BCR] = { 0x50000 },
3674 [GCC_USB3_PHY_SEC_BCR] = { 0x5000c },
3675 [GCC_USB3PHY_PHY_PRIM_BCR] = { 0x50004 },
3676 [GCC_USB3PHY_PHY_SEC_BCR] = { 0x50010 },
3677 [GCC_VIDEO_AXI0_CLK_ARES] = { 0x32018, 2 },
3678 [GCC_VIDEO_AXI0C_CLK_ARES] = { 0x32020, 2 },
3679 [GCC_VIDEO_BCR] = { 0x32000 },
3680 [GCC_VIDEO_XO_CLK_ARES] = { 0x32028, 2 },
3681 };
3682
3683 static const u32 gcc_hawi_critical_cbcrs[] = {
3684 0xa0004, /* GCC_CAM_BIST_MCLK_AHB_CLK */
3685 0x26004, /* GCC_CAMERA_AHB_CLK */
3686 0x26028, /* GCC_CAMERA_RSC_CORE_CLK */
3687 0x26024, /* GCC_CAMERA_XO_CLK */
3688 0x9f004, /* GCC_EVA_AHB_CLK */
3689 0x9f018, /* GCC_EVA_XO_CLK */
3690 0x71004, /* GCC_GPU_CFG_AHB_CLK */
3691 0x7101c, /* GCC_GPU_RSC_CORE_CLK */
3692 0x67084, /* GCC_PCIE_1_RSC_CORE_CLK */
3693 0x43014, /* GCC_PCIE_LINK_XO_CLK */
3694 0x6b088, /* GCC_PCIE_RSC_CORE_CLK */
3695 0x52010, /* GCC_PCIE_RSCC_CFG_AHB_CLK */
3696 0x52010, /* GCC_PCIE_RSCC_XO_CLK */
3697 0x32004, /* GCC_VIDEO_AHB_CLK */
3698 0x32028, /* GCC_VIDEO_XO_CLK */
3699 };
3700
3701 static const struct clk_rcg_dfs_data gcc_hawi_dfs_clocks[] = {
3702 DEFINE_RCG_DFS(gcc_qupv3_wrap1_qspi_ref_clk_src),
3703 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
3704 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
3705 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
3706 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
3707 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
3708 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src),
3709 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s7_clk_src),
3710 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s0_clk_src),
3711 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s1_clk_src),
3712 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s2_clk_src),
3713 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s3_clk_src),
3714 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s4_clk_src),
3715 DEFINE_RCG_DFS(gcc_qupv3_wrap3_qspi_ref_clk_src),
3716 DEFINE_RCG_DFS(gcc_qupv3_wrap3_s0_clk_src),
3717 DEFINE_RCG_DFS(gcc_qupv3_wrap3_s2_clk_src),
3718 DEFINE_RCG_DFS(gcc_qupv3_wrap3_s3_clk_src),
3719 DEFINE_RCG_DFS(gcc_qupv3_wrap3_s4_clk_src),
3720 DEFINE_RCG_DFS(gcc_qupv3_wrap3_s5_clk_src),
3721 DEFINE_RCG_DFS(gcc_qupv3_wrap4_s0_clk_src),
3722 DEFINE_RCG_DFS(gcc_qupv3_wrap4_s1_clk_src),
3723 DEFINE_RCG_DFS(gcc_qupv3_wrap4_s2_clk_src),
3724 DEFINE_RCG_DFS(gcc_qupv3_wrap4_s3_clk_src),
3725 DEFINE_RCG_DFS(gcc_qupv3_wrap4_s4_clk_src),
3726 };
3727
3728 static const struct clk_rcg_dfs_data gcc_maili_dfs_clocks[] = {
3729 DEFINE_RCG_DFS(gcc_qupv3_wrap1_qspi_ref_clk_src),
3730 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
3731 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
3732 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
3733 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
3734 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
3735 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src),
3736 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s7_clk_src),
3737 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s0_clk_src),
3738 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s1_clk_src),
3739 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s2_clk_src),
3740 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s3_clk_src),
3741 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s4_clk_src),
3742 DEFINE_RCG_DFS(gcc_qupv3_wrap3_qspi_ref_clk_src),
3743 DEFINE_RCG_DFS(gcc_qupv3_wrap3_s0_clk_src),
3744 DEFINE_RCG_DFS(gcc_qupv3_wrap3_s2_clk_src),
3745 DEFINE_RCG_DFS(gcc_qupv3_wrap3_s3_clk_src),
3746 DEFINE_RCG_DFS(gcc_qupv3_wrap3_s4_clk_src),
3747 DEFINE_RCG_DFS(gcc_qupv3_wrap3_s5_clk_src),
3748 DEFINE_RCG_DFS(gcc_qupv3_wrap4_s0_clk_src),
3749 DEFINE_RCG_DFS(gcc_qupv3_wrap4_s1_clk_src),
3750 DEFINE_RCG_DFS(gcc_qupv3_wrap4_s2_clk_src),
3751 DEFINE_RCG_DFS(gcc_qupv3_wrap4_s3_clk_src),
3752 DEFINE_RCG_DFS(gcc_qupv3_wrap4_s4_clk_src),
3753 DEFINE_RCG_DFS(gcc_qupv3_wrap5_qspi_ref_clk_src),
3754 };
3755
3756 static const struct regmap_config gcc_hawi_regmap_config = {
3757 .reg_bits = 32,
3758 .reg_stride = 4,
3759 .val_bits = 32,
3760 .max_register = 0x1f41f4,
3761 .fast_io = true,
3762 };
3763
clk_hawi_regs_configure(struct device * dev,struct regmap * regmap)3764 static void clk_hawi_regs_configure(struct device *dev, struct regmap *regmap)
3765 {
3766 /* FORCE_MEM_CORE_ON for ufs phy ice core clocks */
3767 qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_ice_core_clk, true);
3768 }
3769
3770 static const struct qcom_cc_driver_data gcc_hawi_driver_data = {
3771 .clk_cbcrs = gcc_hawi_critical_cbcrs,
3772 .num_clk_cbcrs = ARRAY_SIZE(gcc_hawi_critical_cbcrs),
3773 .dfs_rcgs = gcc_hawi_dfs_clocks,
3774 .num_dfs_rcgs = ARRAY_SIZE(gcc_hawi_dfs_clocks),
3775 .clk_regs_configure = clk_hawi_regs_configure,
3776 };
3777
3778 static const struct qcom_cc_desc gcc_hawi_desc = {
3779 .config = &gcc_hawi_regmap_config,
3780 .clks = gcc_hawi_clocks,
3781 .num_clks = ARRAY_SIZE(gcc_hawi_clocks),
3782 .resets = gcc_hawi_resets,
3783 .num_resets = ARRAY_SIZE(gcc_hawi_resets),
3784 .gdscs = gcc_hawi_gdscs,
3785 .num_gdscs = ARRAY_SIZE(gcc_hawi_gdscs),
3786 .use_rpm = true,
3787 .driver_data = &gcc_hawi_driver_data,
3788 };
3789
3790 static const struct qcom_cc_driver_data gcc_maili_driver_data = {
3791 .clk_cbcrs = gcc_hawi_critical_cbcrs,
3792 .num_clk_cbcrs = ARRAY_SIZE(gcc_hawi_critical_cbcrs),
3793 .dfs_rcgs = gcc_maili_dfs_clocks,
3794 .num_dfs_rcgs = ARRAY_SIZE(gcc_maili_dfs_clocks),
3795 .clk_regs_configure = clk_hawi_regs_configure,
3796 };
3797
3798 static const struct qcom_cc_desc gcc_maili_desc = {
3799 .config = &gcc_hawi_regmap_config,
3800 .clks = gcc_hawi_clocks,
3801 .num_clks = ARRAY_SIZE(gcc_hawi_clocks),
3802 .resets = gcc_hawi_resets,
3803 .num_resets = ARRAY_SIZE(gcc_hawi_resets),
3804 .gdscs = gcc_hawi_gdscs,
3805 .num_gdscs = ARRAY_SIZE(gcc_hawi_gdscs),
3806 .use_rpm = true,
3807 .driver_data = &gcc_maili_driver_data,
3808 };
3809
3810 static const struct of_device_id gcc_hawi_match_table[] = {
3811 { .compatible = "qcom,hawi-gcc" },
3812 { .compatible = "qcom,maili-gcc" },
3813 { }
3814 };
3815 MODULE_DEVICE_TABLE(of, gcc_hawi_match_table);
3816
gcc_hawi_probe(struct platform_device * pdev)3817 static int gcc_hawi_probe(struct platform_device *pdev)
3818 {
3819 if (of_device_is_compatible(pdev->dev.of_node, "qcom,maili-gcc")) {
3820 gcc_hawi_clocks[GCC_QUPV3_WRAP5_CORE_2X_CLK] = &gcc_qupv3_wrap5_core_2x_clk.clkr;
3821 gcc_hawi_clocks[GCC_QUPV3_WRAP5_CORE_CLK] = &gcc_qupv3_wrap5_core_clk.clkr;
3822 gcc_hawi_clocks[GCC_QUPV3_WRAP5_QSPI_REF_CLK] = &gcc_qupv3_wrap5_qspi_ref_clk.clkr;
3823 gcc_hawi_clocks[GCC_QUPV3_WRAP5_QSPI_REF_CLK_SRC] =
3824 &gcc_qupv3_wrap5_qspi_ref_clk_src.clkr;
3825 gcc_hawi_clocks[GCC_QUPV3_WRAP5_S0_CLK] = &gcc_qupv3_wrap5_s0_clk.clkr;
3826 gcc_hawi_clocks[GCC_QUPV3_WRAP5_S0_CLK_SRC] = &gcc_qupv3_wrap5_s0_clk_src.clkr;
3827 gcc_hawi_clocks[GCC_QUPV3_WRAP_5_M_AHB_CLK] = &gcc_qupv3_wrap_5_m_ahb_clk.clkr;
3828 gcc_hawi_clocks[GCC_QUPV3_WRAP_5_S_AHB_CLK] = &gcc_qupv3_wrap_5_s_ahb_clk.clkr;
3829
3830 return qcom_cc_probe(pdev, &gcc_maili_desc);
3831 }
3832
3833 return qcom_cc_probe(pdev, &gcc_hawi_desc);
3834 }
3835
3836 static struct platform_driver gcc_hawi_driver = {
3837 .probe = gcc_hawi_probe,
3838 .driver = {
3839 .name = "gcc-hawi",
3840 .of_match_table = gcc_hawi_match_table,
3841 },
3842 };
3843
gcc_hawi_init(void)3844 static int __init gcc_hawi_init(void)
3845 {
3846 return platform_driver_register(&gcc_hawi_driver);
3847 }
3848 subsys_initcall(gcc_hawi_init);
3849
gcc_hawi_exit(void)3850 static void __exit gcc_hawi_exit(void)
3851 {
3852 platform_driver_unregister(&gcc_hawi_driver);
3853 }
3854 module_exit(gcc_hawi_exit);
3855
3856 MODULE_DESCRIPTION("QTI GCC HAWI Driver");
3857 MODULE_LICENSE("GPL");
3858