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