1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright (c) 2021, The Linux Foundation. All rights reserved.
4 * Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
5 * Copyright (c) 2022, Linaro Limited
6 */
7
8#include <linux/clk-provider.h>
9#include <linux/module.h>
10#include <linux/of.h>
11#include <linux/platform_device.h>
12#include <linux/regmap.h>
13
14#include <dt-bindings/clock/qcom,sm8550-gcc.h>
15
16#include "clk-alpha-pll.h"
17#include "clk-branch.h"
18#include "clk-rcg.h"
19#include "clk-regmap.h"
20#include "clk-regmap-divider.h"
21#include "clk-regmap-mux.h"
22#include "clk-regmap-phy-mux.h"
23#include "gdsc.h"
24#include "reset.h"
25
26enum {
27 DT_BI_TCXO,
28 DT_SLEEP_CLK,
29 DT_PCIE_0_PIPE,
30 DT_PCIE_1_PIPE,
31 DT_PCIE_1_PHY_AUX,
32 DT_UFS_PHY_RX_SYMBOL_0,
33 DT_UFS_PHY_RX_SYMBOL_1,
34 DT_UFS_PHY_TX_SYMBOL_0,
35 DT_USB3_PHY_WRAPPER_GCC_USB30_PIPE,
36};
37
38enum {
39 P_BI_TCXO,
40 P_GCC_GPLL0_OUT_EVEN,
41 P_GCC_GPLL0_OUT_MAIN,
42 P_GCC_GPLL4_OUT_MAIN,
43 P_GCC_GPLL7_OUT_MAIN,
44 P_GCC_GPLL9_OUT_MAIN,
45 P_PCIE_0_PIPE_CLK,
46 P_PCIE_1_PHY_AUX_CLK,
47 P_PCIE_1_PIPE_CLK,
48 P_SLEEP_CLK,
49 P_UFS_PHY_RX_SYMBOL_0_CLK,
50 P_UFS_PHY_RX_SYMBOL_1_CLK,
51 P_UFS_PHY_TX_SYMBOL_0_CLK,
52 P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
53};
54
55static struct clk_alpha_pll gcc_gpll0 = {
56 .offset = 0x0,
57 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
58 .clkr = {
59 .enable_reg = 0x52018,
60 .enable_mask = BIT(0),
61 .hw.init = &(struct clk_init_data){
62 .name = "gcc_gpll0",
63 .parent_data = &(const struct clk_parent_data){
64 .index = DT_BI_TCXO,
65 },
66 .num_parents = 1,
67 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
68 },
69 },
70};
71
72static const struct clk_div_table post_div_table_gcc_gpll0_out_even[] = {
73 { 0x1, 2 },
74 { }
75};
76
77static struct clk_alpha_pll_postdiv gcc_gpll0_out_even = {
78 .offset = 0x0,
79 .post_div_shift = 10,
80 .post_div_table = post_div_table_gcc_gpll0_out_even,
81 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
82 .width = 4,
83 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
84 .clkr.hw.init = &(struct clk_init_data){
85 .name = "gcc_gpll0_out_even",
86 .parent_hws = (const struct clk_hw*[]) {
87 &gcc_gpll0.clkr.hw,
88 },
89 .num_parents = 1,
90 .ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
91 },
92};
93
94static struct clk_alpha_pll gcc_gpll4 = {
95 .offset = 0x4000,
96 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
97 .clkr = {
98 .enable_reg = 0x52018,
99 .enable_mask = BIT(4),
100 .hw.init = &(struct clk_init_data){
101 .name = "gcc_gpll4",
102 .parent_data = &(const struct clk_parent_data){
103 .index = DT_BI_TCXO,
104 },
105 .num_parents = 1,
106 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
107 },
108 },
109};
110
111static struct clk_alpha_pll gcc_gpll7 = {
112 .offset = 0x7000,
113 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
114 .clkr = {
115 .enable_reg = 0x52018,
116 .enable_mask = BIT(7),
117 .hw.init = &(struct clk_init_data){
118 .name = "gcc_gpll7",
119 .parent_data = &(const struct clk_parent_data){
120 .index = DT_BI_TCXO,
121 },
122 .num_parents = 1,
123 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
124 },
125 },
126};
127
128static struct clk_alpha_pll gcc_gpll9 = {
129 .offset = 0x9000,
130 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
131 .clkr = {
132 .enable_reg = 0x52018,
133 .enable_mask = BIT(9),
134 .hw.init = &(struct clk_init_data){
135 .name = "gcc_gpll9",
136 .parent_data = &(const struct clk_parent_data){
137 .index = DT_BI_TCXO,
138 },
139 .num_parents = 1,
140 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,
141 },
142 },
143};
144
145static const struct parent_map gcc_parent_map_0[] = {
146 { P_BI_TCXO, 0 },
147 { P_GCC_GPLL0_OUT_MAIN, 1 },
148 { P_GCC_GPLL0_OUT_EVEN, 6 },
149};
150
151static const struct clk_parent_data gcc_parent_data_0[] = {
152 { .index = DT_BI_TCXO },
153 { .hw = &gcc_gpll0.clkr.hw },
154 { .hw = &gcc_gpll0_out_even.clkr.hw },
155};
156
157static const struct parent_map gcc_parent_map_1[] = {
158 { P_BI_TCXO, 0 },
159 { P_GCC_GPLL0_OUT_MAIN, 1 },
160 { P_SLEEP_CLK, 5 },
161 { P_GCC_GPLL0_OUT_EVEN, 6 },
162};
163
164static const struct clk_parent_data gcc_parent_data_1[] = {
165 { .index = DT_BI_TCXO },
166 { .hw = &gcc_gpll0.clkr.hw },
167 { .index = DT_SLEEP_CLK },
168 { .hw = &gcc_gpll0_out_even.clkr.hw },
169};
170
171static const struct parent_map gcc_parent_map_2[] = {
172 { P_BI_TCXO, 0 },
173 { P_SLEEP_CLK, 5 },
174};
175
176static const struct clk_parent_data gcc_parent_data_2[] = {
177 { .index = DT_BI_TCXO },
178 { .index = DT_SLEEP_CLK },
179};
180
181static const struct parent_map gcc_parent_map_3[] = {
182 { P_BI_TCXO, 0 },
183 { P_GCC_GPLL0_OUT_MAIN, 1 },
184 { P_GCC_GPLL4_OUT_MAIN, 5 },
185 { P_GCC_GPLL0_OUT_EVEN, 6 },
186};
187
188static const struct clk_parent_data gcc_parent_data_3[] = {
189 { .index = DT_BI_TCXO },
190 { .hw = &gcc_gpll0.clkr.hw },
191 { .hw = &gcc_gpll4.clkr.hw },
192 { .hw = &gcc_gpll0_out_even.clkr.hw },
193};
194
195static const struct parent_map gcc_parent_map_4[] = {
196 { P_BI_TCXO, 0 },
197};
198
199static const struct clk_parent_data gcc_parent_data_4[] = {
200 { .index = DT_BI_TCXO },
201};
202
203static const struct parent_map gcc_parent_map_6[] = {
204 { P_PCIE_1_PHY_AUX_CLK, 0 },
205 { P_BI_TCXO, 2 },
206};
207
208static const struct clk_parent_data gcc_parent_data_6[] = {
209 { .index = DT_PCIE_1_PHY_AUX },
210 { .index = DT_BI_TCXO },
211};
212
213static const struct parent_map gcc_parent_map_8[] = {
214 { P_BI_TCXO, 0 },
215 { P_GCC_GPLL0_OUT_MAIN, 1 },
216 { P_GCC_GPLL7_OUT_MAIN, 2 },
217 { P_GCC_GPLL0_OUT_EVEN, 6 },
218};
219
220static const struct clk_parent_data gcc_parent_data_8[] = {
221 { .index = DT_BI_TCXO },
222 { .hw = &gcc_gpll0.clkr.hw },
223 { .hw = &gcc_gpll7.clkr.hw },
224 { .hw = &gcc_gpll0_out_even.clkr.hw },
225};
226
227static const struct parent_map gcc_parent_map_9[] = {
228 { P_BI_TCXO, 0 },
229 { P_GCC_GPLL0_OUT_MAIN, 1 },
230 { P_GCC_GPLL9_OUT_MAIN, 2 },
231 { P_GCC_GPLL4_OUT_MAIN, 5 },
232 { P_GCC_GPLL0_OUT_EVEN, 6 },
233};
234
235static const struct clk_parent_data gcc_parent_data_9[] = {
236 { .index = DT_BI_TCXO },
237 { .hw = &gcc_gpll0.clkr.hw },
238 { .hw = &gcc_gpll9.clkr.hw },
239 { .hw = &gcc_gpll4.clkr.hw },
240 { .hw = &gcc_gpll0_out_even.clkr.hw },
241};
242
243static const struct parent_map gcc_parent_map_10[] = {
244 { P_UFS_PHY_RX_SYMBOL_0_CLK, 0 },
245 { P_BI_TCXO, 2 },
246};
247
248static const struct clk_parent_data gcc_parent_data_10[] = {
249 { .index = DT_UFS_PHY_RX_SYMBOL_0 },
250 { .index = DT_BI_TCXO },
251};
252
253static const struct parent_map gcc_parent_map_11[] = {
254 { P_UFS_PHY_RX_SYMBOL_1_CLK, 0 },
255 { P_BI_TCXO, 2 },
256};
257
258static const struct clk_parent_data gcc_parent_data_11[] = {
259 { .index = DT_UFS_PHY_RX_SYMBOL_1 },
260 { .index = DT_BI_TCXO },
261};
262
263static const struct parent_map gcc_parent_map_12[] = {
264 { P_UFS_PHY_TX_SYMBOL_0_CLK, 0 },
265 { P_BI_TCXO, 2 },
266};
267
268static const struct clk_parent_data gcc_parent_data_12[] = {
269 { .index = DT_UFS_PHY_TX_SYMBOL_0 },
270 { .index = DT_BI_TCXO },
271};
272
273static const struct parent_map gcc_parent_map_13[] = {
274 { P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 0 },
275 { P_BI_TCXO, 2 },
276};
277
278static const struct clk_parent_data gcc_parent_data_13[] = {
279 { .index = DT_USB3_PHY_WRAPPER_GCC_USB30_PIPE },
280 { .index = DT_BI_TCXO },
281};
282
283static struct clk_regmap_phy_mux gcc_pcie_0_pipe_clk_src = {
284 .reg = 0x6b070,
285 .clkr = {
286 .hw.init = &(struct clk_init_data){
287 .name = "gcc_pcie_0_pipe_clk_src",
288 .parent_data = &(const struct clk_parent_data){
289 .index = DT_PCIE_0_PIPE,
290 },
291 .num_parents = 1,
292 .ops = &clk_regmap_phy_mux_ops,
293 },
294 },
295};
296
297static struct clk_regmap_mux gcc_pcie_1_phy_aux_clk_src = {
298 .reg = 0x8d094,
299 .shift = 0,
300 .width = 2,
301 .parent_map = gcc_parent_map_6,
302 .clkr = {
303 .hw.init = &(struct clk_init_data){
304 .name = "gcc_pcie_1_phy_aux_clk_src",
305 .parent_data = gcc_parent_data_6,
306 .num_parents = ARRAY_SIZE(gcc_parent_data_6),
307 .ops = &clk_regmap_mux_closest_ops,
308 },
309 },
310};
311
312static struct clk_regmap_phy_mux gcc_pcie_1_pipe_clk_src = {
313 .reg = 0x8d078,
314 .clkr = {
315 .hw.init = &(struct clk_init_data){
316 .name = "gcc_pcie_1_pipe_clk_src",
317 .parent_data = &(const struct clk_parent_data){
318 .index = DT_PCIE_1_PIPE,
319 },
320 .num_parents = 1,
321 .ops = &clk_regmap_phy_mux_ops,
322 },
323 },
324};
325
326static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_0_clk_src = {
327 .reg = 0x77064,
328 .shift = 0,
329 .width = 2,
330 .parent_map = gcc_parent_map_10,
331 .clkr = {
332 .hw.init = &(struct clk_init_data){
333 .name = "gcc_ufs_phy_rx_symbol_0_clk_src",
334 .parent_data = gcc_parent_data_10,
335 .num_parents = ARRAY_SIZE(gcc_parent_data_10),
336 .ops = &clk_regmap_mux_closest_ops,
337 },
338 },
339};
340
341static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_1_clk_src = {
342 .reg = 0x770e0,
343 .shift = 0,
344 .width = 2,
345 .parent_map = gcc_parent_map_11,
346 .clkr = {
347 .hw.init = &(struct clk_init_data){
348 .name = "gcc_ufs_phy_rx_symbol_1_clk_src",
349 .parent_data = gcc_parent_data_11,
350 .num_parents = ARRAY_SIZE(gcc_parent_data_11),
351 .ops = &clk_regmap_mux_closest_ops,
352 },
353 },
354};
355
356static struct clk_regmap_mux gcc_ufs_phy_tx_symbol_0_clk_src = {
357 .reg = 0x77054,
358 .shift = 0,
359 .width = 2,
360 .parent_map = gcc_parent_map_12,
361 .clkr = {
362 .hw.init = &(struct clk_init_data){
363 .name = "gcc_ufs_phy_tx_symbol_0_clk_src",
364 .parent_data = gcc_parent_data_12,
365 .num_parents = ARRAY_SIZE(gcc_parent_data_12),
366 .ops = &clk_regmap_mux_closest_ops,
367 },
368 },
369};
370
371static struct clk_regmap_mux gcc_usb3_prim_phy_pipe_clk_src = {
372 .reg = 0x3906c,
373 .shift = 0,
374 .width = 2,
375 .parent_map = gcc_parent_map_13,
376 .clkr = {
377 .hw.init = &(struct clk_init_data){
378 .name = "gcc_usb3_prim_phy_pipe_clk_src",
379 .parent_data = gcc_parent_data_13,
380 .num_parents = ARRAY_SIZE(gcc_parent_data_13),
381 .ops = &clk_regmap_mux_closest_ops,
382 },
383 },
384};
385
386static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
387 F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
388 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
389 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
390 { }
391};
392
393static struct clk_rcg2 gcc_gp1_clk_src = {
394 .cmd_rcgr = 0x64004,
395 .mnd_width = 16,
396 .hid_width = 5,
397 .parent_map = gcc_parent_map_1,
398 .freq_tbl = ftbl_gcc_gp1_clk_src,
399 .clkr.hw.init = &(struct clk_init_data){
400 .name = "gcc_gp1_clk_src",
401 .parent_data = gcc_parent_data_1,
402 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
403 .flags = CLK_SET_RATE_PARENT,
404 .ops = &clk_rcg2_shared_ops,
405 },
406};
407
408static struct clk_rcg2 gcc_gp2_clk_src = {
409 .cmd_rcgr = 0x65004,
410 .mnd_width = 16,
411 .hid_width = 5,
412 .parent_map = gcc_parent_map_1,
413 .freq_tbl = ftbl_gcc_gp1_clk_src,
414 .clkr.hw.init = &(struct clk_init_data){
415 .name = "gcc_gp2_clk_src",
416 .parent_data = gcc_parent_data_1,
417 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
418 .flags = CLK_SET_RATE_PARENT,
419 .ops = &clk_rcg2_shared_ops,
420 },
421};
422
423static struct clk_rcg2 gcc_gp3_clk_src = {
424 .cmd_rcgr = 0x66004,
425 .mnd_width = 16,
426 .hid_width = 5,
427 .parent_map = gcc_parent_map_1,
428 .freq_tbl = ftbl_gcc_gp1_clk_src,
429 .clkr.hw.init = &(struct clk_init_data){
430 .name = "gcc_gp3_clk_src",
431 .parent_data = gcc_parent_data_1,
432 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
433 .flags = CLK_SET_RATE_PARENT,
434 .ops = &clk_rcg2_shared_ops,
435 },
436};
437
438static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
439 F(19200000, P_BI_TCXO, 1, 0, 0),
440 { }
441};
442
443static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
444 .cmd_rcgr = 0x6b074,
445 .mnd_width = 16,
446 .hid_width = 5,
447 .parent_map = gcc_parent_map_2,
448 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
449 .clkr.hw.init = &(struct clk_init_data){
450 .name = "gcc_pcie_0_aux_clk_src",
451 .parent_data = gcc_parent_data_2,
452 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
453 .flags = CLK_SET_RATE_PARENT,
454 .ops = &clk_rcg2_shared_ops,
455 },
456};
457
458static const struct freq_tbl ftbl_gcc_pcie_0_phy_rchng_clk_src[] = {
459 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
460 { }
461};
462
463static struct clk_rcg2 gcc_pcie_0_phy_rchng_clk_src = {
464 .cmd_rcgr = 0x6b058,
465 .mnd_width = 0,
466 .hid_width = 5,
467 .parent_map = gcc_parent_map_0,
468 .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
469 .clkr.hw.init = &(struct clk_init_data){
470 .name = "gcc_pcie_0_phy_rchng_clk_src",
471 .parent_data = gcc_parent_data_0,
472 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
473 .flags = CLK_SET_RATE_PARENT,
474 .ops = &clk_rcg2_shared_ops,
475 },
476};
477
478static struct clk_rcg2 gcc_pcie_1_aux_clk_src = {
479 .cmd_rcgr = 0x8d07c,
480 .mnd_width = 16,
481 .hid_width = 5,
482 .parent_map = gcc_parent_map_2,
483 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
484 .clkr.hw.init = &(struct clk_init_data){
485 .name = "gcc_pcie_1_aux_clk_src",
486 .parent_data = gcc_parent_data_2,
487 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
488 .flags = CLK_SET_RATE_PARENT,
489 .ops = &clk_rcg2_shared_ops,
490 },
491};
492
493static struct clk_rcg2 gcc_pcie_1_phy_rchng_clk_src = {
494 .cmd_rcgr = 0x8d060,
495 .mnd_width = 0,
496 .hid_width = 5,
497 .parent_map = gcc_parent_map_0,
498 .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
499 .clkr.hw.init = &(struct clk_init_data){
500 .name = "gcc_pcie_1_phy_rchng_clk_src",
501 .parent_data = gcc_parent_data_0,
502 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
503 .flags = CLK_SET_RATE_PARENT,
504 .ops = &clk_rcg2_shared_ops,
505 },
506};
507
508static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
509 F(60000000, P_GCC_GPLL0_OUT_MAIN, 10, 0, 0),
510 { }
511};
512
513static struct clk_rcg2 gcc_pdm2_clk_src = {
514 .cmd_rcgr = 0x33010,
515 .mnd_width = 0,
516 .hid_width = 5,
517 .parent_map = gcc_parent_map_0,
518 .freq_tbl = ftbl_gcc_pdm2_clk_src,
519 .clkr.hw.init = &(struct clk_init_data){
520 .name = "gcc_pdm2_clk_src",
521 .parent_data = gcc_parent_data_0,
522 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
523 .flags = CLK_SET_RATE_PARENT,
524 .ops = &clk_rcg2_shared_ops,
525 },
526};
527
528static struct clk_rcg2 gcc_qupv3_i2c_s0_clk_src = {
529 .cmd_rcgr = 0x17008,
530 .mnd_width = 0,
531 .hid_width = 5,
532 .parent_map = gcc_parent_map_0,
533 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
534 .clkr.hw.init = &(struct clk_init_data){
535 .name = "gcc_qupv3_i2c_s0_clk_src",
536 .parent_data = gcc_parent_data_0,
537 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
538 .flags = CLK_SET_RATE_PARENT,
539 .ops = &clk_rcg2_shared_ops,
540 },
541};
542
543static struct clk_rcg2 gcc_qupv3_i2c_s1_clk_src = {
544 .cmd_rcgr = 0x17024,
545 .mnd_width = 0,
546 .hid_width = 5,
547 .parent_map = gcc_parent_map_0,
548 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
549 .clkr.hw.init = &(struct clk_init_data){
550 .name = "gcc_qupv3_i2c_s1_clk_src",
551 .parent_data = gcc_parent_data_0,
552 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
553 .flags = CLK_SET_RATE_PARENT,
554 .ops = &clk_rcg2_shared_ops,
555 },
556};
557
558static struct clk_rcg2 gcc_qupv3_i2c_s2_clk_src = {
559 .cmd_rcgr = 0x17040,
560 .mnd_width = 0,
561 .hid_width = 5,
562 .parent_map = gcc_parent_map_0,
563 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
564 .clkr.hw.init = &(struct clk_init_data){
565 .name = "gcc_qupv3_i2c_s2_clk_src",
566 .parent_data = gcc_parent_data_0,
567 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
568 .flags = CLK_SET_RATE_PARENT,
569 .ops = &clk_rcg2_shared_ops,
570 },
571};
572
573static struct clk_rcg2 gcc_qupv3_i2c_s3_clk_src = {
574 .cmd_rcgr = 0x1705c,
575 .mnd_width = 0,
576 .hid_width = 5,
577 .parent_map = gcc_parent_map_0,
578 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
579 .clkr.hw.init = &(struct clk_init_data){
580 .name = "gcc_qupv3_i2c_s3_clk_src",
581 .parent_data = gcc_parent_data_0,
582 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
583 .flags = CLK_SET_RATE_PARENT,
584 .ops = &clk_rcg2_shared_ops,
585 },
586};
587
588static struct clk_rcg2 gcc_qupv3_i2c_s4_clk_src = {
589 .cmd_rcgr = 0x17078,
590 .mnd_width = 0,
591 .hid_width = 5,
592 .parent_map = gcc_parent_map_0,
593 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
594 .clkr.hw.init = &(struct clk_init_data){
595 .name = "gcc_qupv3_i2c_s4_clk_src",
596 .parent_data = gcc_parent_data_0,
597 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
598 .flags = CLK_SET_RATE_PARENT,
599 .ops = &clk_rcg2_shared_ops,
600 },
601};
602
603static struct clk_rcg2 gcc_qupv3_i2c_s5_clk_src = {
604 .cmd_rcgr = 0x17094,
605 .mnd_width = 0,
606 .hid_width = 5,
607 .parent_map = gcc_parent_map_0,
608 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
609 .clkr.hw.init = &(struct clk_init_data){
610 .name = "gcc_qupv3_i2c_s5_clk_src",
611 .parent_data = gcc_parent_data_0,
612 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
613 .flags = CLK_SET_RATE_PARENT,
614 .ops = &clk_rcg2_shared_ops,
615 },
616};
617
618static struct clk_rcg2 gcc_qupv3_i2c_s6_clk_src = {
619 .cmd_rcgr = 0x170b0,
620 .mnd_width = 0,
621 .hid_width = 5,
622 .parent_map = gcc_parent_map_0,
623 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
624 .clkr.hw.init = &(struct clk_init_data){
625 .name = "gcc_qupv3_i2c_s6_clk_src",
626 .parent_data = gcc_parent_data_0,
627 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
628 .flags = CLK_SET_RATE_PARENT,
629 .ops = &clk_rcg2_shared_ops,
630 },
631};
632
633static struct clk_rcg2 gcc_qupv3_i2c_s7_clk_src = {
634 .cmd_rcgr = 0x170cc,
635 .mnd_width = 0,
636 .hid_width = 5,
637 .parent_map = gcc_parent_map_0,
638 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
639 .clkr.hw.init = &(struct clk_init_data){
640 .name = "gcc_qupv3_i2c_s7_clk_src",
641 .parent_data = gcc_parent_data_0,
642 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
643 .flags = CLK_SET_RATE_PARENT,
644 .ops = &clk_rcg2_shared_ops,
645 },
646};
647
648static struct clk_rcg2 gcc_qupv3_i2c_s8_clk_src = {
649 .cmd_rcgr = 0x170e8,
650 .mnd_width = 0,
651 .hid_width = 5,
652 .parent_map = gcc_parent_map_0,
653 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
654 .clkr.hw.init = &(struct clk_init_data){
655 .name = "gcc_qupv3_i2c_s8_clk_src",
656 .parent_data = gcc_parent_data_0,
657 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
658 .flags = CLK_SET_RATE_PARENT,
659 .ops = &clk_rcg2_shared_ops,
660 },
661};
662
663static struct clk_rcg2 gcc_qupv3_i2c_s9_clk_src = {
664 .cmd_rcgr = 0x17104,
665 .mnd_width = 0,
666 .hid_width = 5,
667 .parent_map = gcc_parent_map_0,
668 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
669 .clkr.hw.init = &(struct clk_init_data){
670 .name = "gcc_qupv3_i2c_s9_clk_src",
671 .parent_data = gcc_parent_data_0,
672 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
673 .flags = CLK_SET_RATE_PARENT,
674 .ops = &clk_rcg2_shared_ops,
675 },
676};
677
678static const struct freq_tbl ftbl_gcc_qupv3_wrap1_s0_clk_src[] = {
679 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
680 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
681 F(19200000, P_BI_TCXO, 1, 0, 0),
682 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
683 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
684 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
685 F(51200000, P_GCC_GPLL0_OUT_EVEN, 1, 64, 375),
686 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
687 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
688 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
689 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
690 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
691 F(102400000, P_GCC_GPLL0_OUT_EVEN, 1, 128, 375),
692 F(112000000, P_GCC_GPLL0_OUT_EVEN, 1, 28, 75),
693 F(117964800, P_GCC_GPLL0_OUT_EVEN, 1, 6144, 15625),
694 F(120000000, P_GCC_GPLL0_OUT_MAIN, 5, 0, 0),
695 { }
696};
697
698static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
699 .name = "gcc_qupv3_wrap1_s0_clk_src",
700 .parent_data = gcc_parent_data_0,
701 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
702 .flags = CLK_SET_RATE_PARENT,
703 .ops = &clk_rcg2_shared_ops,
704};
705
706static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
707 .cmd_rcgr = 0x18010,
708 .mnd_width = 16,
709 .hid_width = 5,
710 .parent_map = gcc_parent_map_0,
711 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
712 .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
713};
714
715static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
716 .name = "gcc_qupv3_wrap1_s1_clk_src",
717 .parent_data = gcc_parent_data_0,
718 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
719 .flags = CLK_SET_RATE_PARENT,
720 .ops = &clk_rcg2_shared_ops,
721};
722
723static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
724 .cmd_rcgr = 0x18148,
725 .mnd_width = 16,
726 .hid_width = 5,
727 .parent_map = gcc_parent_map_0,
728 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
729 .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
730};
731
732static const struct freq_tbl ftbl_gcc_qupv3_wrap1_s2_clk_src[] = {
733 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
734 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
735 F(19200000, P_BI_TCXO, 1, 0, 0),
736 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
737 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
738 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
739 F(51200000, P_GCC_GPLL0_OUT_EVEN, 1, 64, 375),
740 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
741 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
742 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
743 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
744 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
745 { }
746};
747
748static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {
749 .name = "gcc_qupv3_wrap1_s2_clk_src",
750 .parent_data = gcc_parent_data_0,
751 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
752 .flags = CLK_SET_RATE_PARENT,
753 .ops = &clk_rcg2_shared_ops,
754};
755
756static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
757 .cmd_rcgr = 0x18280,
758 .mnd_width = 16,
759 .hid_width = 5,
760 .parent_map = gcc_parent_map_0,
761 .freq_tbl = ftbl_gcc_qupv3_wrap1_s2_clk_src,
762 .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,
763};
764
765static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
766 .name = "gcc_qupv3_wrap1_s3_clk_src",
767 .parent_data = gcc_parent_data_0,
768 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
769 .flags = CLK_SET_RATE_PARENT,
770 .ops = &clk_rcg2_shared_ops,
771};
772
773static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
774 .cmd_rcgr = 0x183b8,
775 .mnd_width = 16,
776 .hid_width = 5,
777 .parent_map = gcc_parent_map_0,
778 .freq_tbl = ftbl_gcc_qupv3_wrap1_s2_clk_src,
779 .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
780};
781
782static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
783 .name = "gcc_qupv3_wrap1_s4_clk_src",
784 .parent_data = gcc_parent_data_0,
785 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
786 .flags = CLK_SET_RATE_PARENT,
787 .ops = &clk_rcg2_shared_ops,
788};
789
790static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
791 .cmd_rcgr = 0x184f0,
792 .mnd_width = 16,
793 .hid_width = 5,
794 .parent_map = gcc_parent_map_0,
795 .freq_tbl = ftbl_gcc_qupv3_wrap1_s2_clk_src,
796 .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
797};
798
799static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
800 .name = "gcc_qupv3_wrap1_s5_clk_src",
801 .parent_data = gcc_parent_data_0,
802 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
803 .flags = CLK_SET_RATE_PARENT,
804 .ops = &clk_rcg2_shared_ops,
805};
806
807static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
808 .cmd_rcgr = 0x18628,
809 .mnd_width = 16,
810 .hid_width = 5,
811 .parent_map = gcc_parent_map_0,
812 .freq_tbl = ftbl_gcc_qupv3_wrap1_s2_clk_src,
813 .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
814};
815
816static struct clk_init_data gcc_qupv3_wrap1_s6_clk_src_init = {
817 .name = "gcc_qupv3_wrap1_s6_clk_src",
818 .parent_data = gcc_parent_data_0,
819 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
820 .flags = CLK_SET_RATE_PARENT,
821 .ops = &clk_rcg2_shared_ops,
822};
823
824static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = {
825 .cmd_rcgr = 0x18760,
826 .mnd_width = 16,
827 .hid_width = 5,
828 .parent_map = gcc_parent_map_0,
829 .freq_tbl = ftbl_gcc_qupv3_wrap1_s2_clk_src,
830 .clkr.hw.init = &gcc_qupv3_wrap1_s6_clk_src_init,
831};
832
833static struct clk_init_data gcc_qupv3_wrap1_s7_clk_src_init = {
834 .name = "gcc_qupv3_wrap1_s7_clk_src",
835 .parent_data = gcc_parent_data_0,
836 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
837 .flags = CLK_SET_RATE_PARENT,
838 .ops = &clk_rcg2_shared_ops,
839};
840
841static struct clk_rcg2 gcc_qupv3_wrap1_s7_clk_src = {
842 .cmd_rcgr = 0x18898,
843 .mnd_width = 16,
844 .hid_width = 5,
845 .parent_map = gcc_parent_map_0,
846 .freq_tbl = ftbl_gcc_qupv3_wrap1_s2_clk_src,
847 .clkr.hw.init = &gcc_qupv3_wrap1_s7_clk_src_init,
848};
849
850static struct clk_init_data gcc_qupv3_wrap2_s0_clk_src_init = {
851 .name = "gcc_qupv3_wrap2_s0_clk_src",
852 .parent_data = gcc_parent_data_0,
853 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
854 .flags = CLK_SET_RATE_PARENT,
855 .ops = &clk_rcg2_shared_ops,
856};
857
858static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = {
859 .cmd_rcgr = 0x1e010,
860 .mnd_width = 16,
861 .hid_width = 5,
862 .parent_map = gcc_parent_map_0,
863 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
864 .clkr.hw.init = &gcc_qupv3_wrap2_s0_clk_src_init,
865};
866
867static struct clk_init_data gcc_qupv3_wrap2_s1_clk_src_init = {
868 .name = "gcc_qupv3_wrap2_s1_clk_src",
869 .parent_data = gcc_parent_data_0,
870 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
871 .flags = CLK_SET_RATE_PARENT,
872 .ops = &clk_rcg2_shared_ops,
873};
874
875static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = {
876 .cmd_rcgr = 0x1e148,
877 .mnd_width = 16,
878 .hid_width = 5,
879 .parent_map = gcc_parent_map_0,
880 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
881 .clkr.hw.init = &gcc_qupv3_wrap2_s1_clk_src_init,
882};
883
884static struct clk_init_data gcc_qupv3_wrap2_s2_clk_src_init = {
885 .name = "gcc_qupv3_wrap2_s2_clk_src",
886 .parent_data = gcc_parent_data_0,
887 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
888 .flags = CLK_SET_RATE_PARENT,
889 .ops = &clk_rcg2_shared_ops,
890};
891
892static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src = {
893 .cmd_rcgr = 0x1e280,
894 .mnd_width = 16,
895 .hid_width = 5,
896 .parent_map = gcc_parent_map_0,
897 .freq_tbl = ftbl_gcc_qupv3_wrap1_s2_clk_src,
898 .clkr.hw.init = &gcc_qupv3_wrap2_s2_clk_src_init,
899};
900
901static struct clk_init_data gcc_qupv3_wrap2_s3_clk_src_init = {
902 .name = "gcc_qupv3_wrap2_s3_clk_src",
903 .parent_data = gcc_parent_data_0,
904 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
905 .flags = CLK_SET_RATE_PARENT,
906 .ops = &clk_rcg2_shared_ops,
907};
908
909static struct clk_rcg2 gcc_qupv3_wrap2_s3_clk_src = {
910 .cmd_rcgr = 0x1e3b8,
911 .mnd_width = 16,
912 .hid_width = 5,
913 .parent_map = gcc_parent_map_0,
914 .freq_tbl = ftbl_gcc_qupv3_wrap1_s2_clk_src,
915 .clkr.hw.init = &gcc_qupv3_wrap2_s3_clk_src_init,
916};
917
918static struct clk_init_data gcc_qupv3_wrap2_s4_clk_src_init = {
919 .name = "gcc_qupv3_wrap2_s4_clk_src",
920 .parent_data = gcc_parent_data_0,
921 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
922 .flags = CLK_SET_RATE_PARENT,
923 .ops = &clk_rcg2_shared_ops,
924};
925
926static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = {
927 .cmd_rcgr = 0x1e4f0,
928 .mnd_width = 16,
929 .hid_width = 5,
930 .parent_map = gcc_parent_map_0,
931 .freq_tbl = ftbl_gcc_qupv3_wrap1_s2_clk_src,
932 .clkr.hw.init = &gcc_qupv3_wrap2_s4_clk_src_init,
933};
934
935static struct clk_init_data gcc_qupv3_wrap2_s5_clk_src_init = {
936 .name = "gcc_qupv3_wrap2_s5_clk_src",
937 .parent_data = gcc_parent_data_0,
938 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
939 .flags = CLK_SET_RATE_PARENT,
940 .ops = &clk_rcg2_shared_ops,
941};
942
943static struct clk_rcg2 gcc_qupv3_wrap2_s5_clk_src = {
944 .cmd_rcgr = 0x1e628,
945 .mnd_width = 16,
946 .hid_width = 5,
947 .parent_map = gcc_parent_map_0,
948 .freq_tbl = ftbl_gcc_qupv3_wrap1_s2_clk_src,
949 .clkr.hw.init = &gcc_qupv3_wrap2_s5_clk_src_init,
950};
951
952static const struct freq_tbl ftbl_gcc_qupv3_wrap2_s6_clk_src[] = {
953 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
954 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
955 F(19200000, P_BI_TCXO, 1, 0, 0),
956 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
957 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
958 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
959 F(51200000, P_GCC_GPLL0_OUT_EVEN, 1, 64, 375),
960 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
961 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
962 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
963 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
964 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
965 F(102400000, P_GCC_GPLL0_OUT_EVEN, 1, 128, 375),
966 F(112000000, P_GCC_GPLL0_OUT_EVEN, 1, 28, 75),
967 F(117964800, P_GCC_GPLL0_OUT_EVEN, 1, 6144, 15625),
968 F(120000000, P_GCC_GPLL0_OUT_MAIN, 5, 0, 0),
969 F(125000000, P_GCC_GPLL0_OUT_MAIN, 1, 5, 24),
970 { }
971};
972
973static struct clk_init_data gcc_qupv3_wrap2_s6_clk_src_init = {
974 .name = "gcc_qupv3_wrap2_s6_clk_src",
975 .parent_data = gcc_parent_data_8,
976 .num_parents = ARRAY_SIZE(gcc_parent_data_8),
977 .flags = CLK_SET_RATE_PARENT,
978 .ops = &clk_rcg2_shared_ops,
979};
980
981static struct clk_rcg2 gcc_qupv3_wrap2_s6_clk_src = {
982 .cmd_rcgr = 0x1e760,
983 .mnd_width = 16,
984 .hid_width = 5,
985 .parent_map = gcc_parent_map_8,
986 .freq_tbl = ftbl_gcc_qupv3_wrap2_s6_clk_src,
987 .clkr.hw.init = &gcc_qupv3_wrap2_s6_clk_src_init,
988};
989
990static struct clk_init_data gcc_qupv3_wrap2_s7_clk_src_init = {
991 .name = "gcc_qupv3_wrap2_s7_clk_src",
992 .parent_data = gcc_parent_data_0,
993 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
994 .flags = CLK_SET_RATE_PARENT,
995 .ops = &clk_rcg2_shared_ops,
996};
997
998static struct clk_rcg2 gcc_qupv3_wrap2_s7_clk_src = {
999 .cmd_rcgr = 0x1e898,
1000 .mnd_width = 16,
1001 .hid_width = 5,
1002 .parent_map = gcc_parent_map_0,
1003 .freq_tbl = ftbl_gcc_qupv3_wrap1_s2_clk_src,
1004 .clkr.hw.init = &gcc_qupv3_wrap2_s7_clk_src_init,
1005};
1006
1007static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
1008 F(400000, P_BI_TCXO, 12, 1, 4),
1009 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
1010 F(37500000, P_GCC_GPLL0_OUT_EVEN, 8, 0, 0),
1011 F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
1012 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
1013 F(202000000, P_GCC_GPLL9_OUT_MAIN, 4, 0, 0),
1014 { }
1015};
1016
1017static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
1018 .cmd_rcgr = 0x14018,
1019 .mnd_width = 8,
1020 .hid_width = 5,
1021 .parent_map = gcc_parent_map_9,
1022 .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
1023 .clkr.hw.init = &(struct clk_init_data){
1024 .name = "gcc_sdcc2_apps_clk_src",
1025 .parent_data = gcc_parent_data_9,
1026 .num_parents = ARRAY_SIZE(gcc_parent_data_9),
1027 .flags = CLK_SET_RATE_PARENT,
1028 .ops = &clk_rcg2_shared_ops,
1029 },
1030};
1031
1032static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = {
1033 F(400000, P_BI_TCXO, 12, 1, 4),
1034 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
1035 F(37500000, P_GCC_GPLL0_OUT_EVEN, 8, 0, 0),
1036 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
1037 { }
1038};
1039
1040static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {
1041 .cmd_rcgr = 0x16018,
1042 .mnd_width = 8,
1043 .hid_width = 5,
1044 .parent_map = gcc_parent_map_0,
1045 .freq_tbl = ftbl_gcc_sdcc4_apps_clk_src,
1046 .clkr.hw.init = &(struct clk_init_data){
1047 .name = "gcc_sdcc4_apps_clk_src",
1048 .parent_data = gcc_parent_data_0,
1049 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1050 .flags = CLK_SET_RATE_PARENT,
1051 .ops = &clk_rcg2_shared_ops,
1052 },
1053};
1054
1055static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
1056 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
1057 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
1058 F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0),
1059 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
1060 { }
1061};
1062
1063static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
1064 .cmd_rcgr = 0x77030,
1065 .mnd_width = 8,
1066 .hid_width = 5,
1067 .parent_map = gcc_parent_map_0,
1068 .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
1069 .clkr.hw.init = &(struct clk_init_data){
1070 .name = "gcc_ufs_phy_axi_clk_src",
1071 .parent_data = gcc_parent_data_0,
1072 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1073 .flags = CLK_SET_RATE_PARENT,
1074 .ops = &clk_rcg2_shared_ops,
1075 },
1076};
1077
1078static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
1079 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
1080 F(201500000, P_GCC_GPLL4_OUT_MAIN, 4, 0, 0),
1081 F(403000000, P_GCC_GPLL4_OUT_MAIN, 2, 0, 0),
1082 { }
1083};
1084
1085static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
1086 .cmd_rcgr = 0x77080,
1087 .mnd_width = 0,
1088 .hid_width = 5,
1089 .parent_map = gcc_parent_map_3,
1090 .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
1091 .clkr.hw.init = &(struct clk_init_data){
1092 .name = "gcc_ufs_phy_ice_core_clk_src",
1093 .parent_data = gcc_parent_data_3,
1094 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
1095 .flags = CLK_SET_RATE_PARENT,
1096 .ops = &clk_rcg2_shared_ops,
1097 },
1098};
1099
1100static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = {
1101 F(9600000, P_BI_TCXO, 2, 0, 0),
1102 F(19200000, P_BI_TCXO, 1, 0, 0),
1103 { }
1104};
1105
1106static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
1107 .cmd_rcgr = 0x770b4,
1108 .mnd_width = 0,
1109 .hid_width = 5,
1110 .parent_map = gcc_parent_map_4,
1111 .freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src,
1112 .clkr.hw.init = &(struct clk_init_data){
1113 .name = "gcc_ufs_phy_phy_aux_clk_src",
1114 .parent_data = gcc_parent_data_4,
1115 .num_parents = ARRAY_SIZE(gcc_parent_data_4),
1116 .flags = CLK_SET_RATE_PARENT,
1117 .ops = &clk_rcg2_shared_ops,
1118 },
1119};
1120
1121static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_core_clk_src[] = {
1122 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
1123 F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0),
1124 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
1125 { }
1126};
1127
1128static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
1129 .cmd_rcgr = 0x77098,
1130 .mnd_width = 0,
1131 .hid_width = 5,
1132 .parent_map = gcc_parent_map_0,
1133 .freq_tbl = ftbl_gcc_ufs_phy_unipro_core_clk_src,
1134 .clkr.hw.init = &(struct clk_init_data){
1135 .name = "gcc_ufs_phy_unipro_core_clk_src",
1136 .parent_data = gcc_parent_data_0,
1137 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1138 .flags = CLK_SET_RATE_PARENT,
1139 .ops = &clk_rcg2_shared_ops,
1140 },
1141};
1142
1143static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
1144 F(66666667, P_GCC_GPLL0_OUT_EVEN, 4.5, 0, 0),
1145 F(133333333, P_GCC_GPLL0_OUT_MAIN, 4.5, 0, 0),
1146 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
1147 F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0),
1148 { }
1149};
1150
1151static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1152 .cmd_rcgr = 0x3902c,
1153 .mnd_width = 8,
1154 .hid_width = 5,
1155 .parent_map = gcc_parent_map_0,
1156 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1157 .clkr.hw.init = &(struct clk_init_data){
1158 .name = "gcc_usb30_prim_master_clk_src",
1159 .parent_data = gcc_parent_data_0,
1160 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1161 .flags = CLK_SET_RATE_PARENT,
1162 .ops = &clk_rcg2_shared_ops,
1163 },
1164};
1165
1166static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1167 .cmd_rcgr = 0x39044,
1168 .mnd_width = 0,
1169 .hid_width = 5,
1170 .parent_map = gcc_parent_map_0,
1171 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
1172 .clkr.hw.init = &(struct clk_init_data){
1173 .name = "gcc_usb30_prim_mock_utmi_clk_src",
1174 .parent_data = gcc_parent_data_0,
1175 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1176 .flags = CLK_SET_RATE_PARENT,
1177 .ops = &clk_rcg2_shared_ops,
1178 },
1179};
1180
1181static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1182 .cmd_rcgr = 0x39070,
1183 .mnd_width = 0,
1184 .hid_width = 5,
1185 .parent_map = gcc_parent_map_2,
1186 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
1187 .clkr.hw.init = &(struct clk_init_data){
1188 .name = "gcc_usb3_prim_phy_aux_clk_src",
1189 .parent_data = gcc_parent_data_2,
1190 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
1191 .flags = CLK_SET_RATE_PARENT,
1192 .ops = &clk_rcg2_shared_ops,
1193 },
1194};
1195
1196static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {
1197 .reg = 0x3905c,
1198 .shift = 0,
1199 .width = 4,
1200 .clkr.hw.init = &(struct clk_init_data) {
1201 .name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",
1202 .parent_hws = (const struct clk_hw*[]) {
1203 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
1204 },
1205 .num_parents = 1,
1206 .flags = CLK_SET_RATE_PARENT,
1207 .ops = &clk_regmap_div_ro_ops,
1208 },
1209};
1210
1211static struct clk_branch gcc_aggre_noc_pcie_axi_clk = {
1212 .halt_reg = 0x1003c,
1213 .halt_check = BRANCH_HALT_SKIP,
1214 .hwcg_reg = 0x1003c,
1215 .hwcg_bit = 1,
1216 .clkr = {
1217 .enable_reg = 0x52000,
1218 .enable_mask = BIT(12),
1219 .hw.init = &(struct clk_init_data){
1220 .name = "gcc_aggre_noc_pcie_axi_clk",
1221 .ops = &clk_branch2_ops,
1222 },
1223 },
1224};
1225
1226static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
1227 .halt_reg = 0x770e4,
1228 .halt_check = BRANCH_HALT_VOTED,
1229 .hwcg_reg = 0x770e4,
1230 .hwcg_bit = 1,
1231 .clkr = {
1232 .enable_reg = 0x770e4,
1233 .enable_mask = BIT(0),
1234 .hw.init = &(struct clk_init_data){
1235 .name = "gcc_aggre_ufs_phy_axi_clk",
1236 .parent_hws = (const struct clk_hw*[]) {
1237 &gcc_ufs_phy_axi_clk_src.clkr.hw,
1238 },
1239 .num_parents = 1,
1240 .flags = CLK_SET_RATE_PARENT,
1241 .ops = &clk_branch2_ops,
1242 },
1243 },
1244};
1245
1246static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = {
1247 .halt_reg = 0x770e4,
1248 .halt_check = BRANCH_HALT_VOTED,
1249 .hwcg_reg = 0x770e4,
1250 .hwcg_bit = 1,
1251 .clkr = {
1252 .enable_reg = 0x770e4,
1253 .enable_mask = BIT(1),
1254 .hw.init = &(struct clk_init_data){
1255 .name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk",
1256 .parent_hws = (const struct clk_hw*[]) {
1257 &gcc_ufs_phy_axi_clk_src.clkr.hw,
1258 },
1259 .num_parents = 1,
1260 .flags = CLK_SET_RATE_PARENT,
1261 .ops = &clk_branch2_ops,
1262 },
1263 },
1264};
1265
1266static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
1267 .halt_reg = 0x3908c,
1268 .halt_check = BRANCH_HALT_VOTED,
1269 .hwcg_reg = 0x3908c,
1270 .hwcg_bit = 1,
1271 .clkr = {
1272 .enable_reg = 0x3908c,
1273 .enable_mask = BIT(0),
1274 .hw.init = &(struct clk_init_data){
1275 .name = "gcc_aggre_usb3_prim_axi_clk",
1276 .parent_hws = (const struct clk_hw*[]) {
1277 &gcc_usb30_prim_master_clk_src.clkr.hw,
1278 },
1279 .num_parents = 1,
1280 .flags = CLK_SET_RATE_PARENT,
1281 .ops = &clk_branch2_ops,
1282 },
1283 },
1284};
1285
1286static struct clk_branch gcc_boot_rom_ahb_clk = {
1287 .halt_reg = 0x38004,
1288 .halt_check = BRANCH_HALT_VOTED,
1289 .hwcg_reg = 0x38004,
1290 .hwcg_bit = 1,
1291 .clkr = {
1292 .enable_reg = 0x52000,
1293 .enable_mask = BIT(10),
1294 .hw.init = &(struct clk_init_data){
1295 .name = "gcc_boot_rom_ahb_clk",
1296 .ops = &clk_branch2_ops,
1297 },
1298 },
1299};
1300
1301static struct clk_branch gcc_camera_hf_axi_clk = {
1302 .halt_reg = 0x26010,
1303 .halt_check = BRANCH_HALT_SKIP,
1304 .hwcg_reg = 0x26010,
1305 .hwcg_bit = 1,
1306 .clkr = {
1307 .enable_reg = 0x26010,
1308 .enable_mask = BIT(0),
1309 .hw.init = &(struct clk_init_data){
1310 .name = "gcc_camera_hf_axi_clk",
1311 .ops = &clk_branch2_ops,
1312 },
1313 },
1314};
1315
1316static struct clk_branch gcc_camera_sf_axi_clk = {
1317 .halt_reg = 0x2601c,
1318 .halt_check = BRANCH_HALT_SKIP,
1319 .hwcg_reg = 0x2601c,
1320 .hwcg_bit = 1,
1321 .clkr = {
1322 .enable_reg = 0x2601c,
1323 .enable_mask = BIT(0),
1324 .hw.init = &(struct clk_init_data){
1325 .name = "gcc_camera_sf_axi_clk",
1326 .ops = &clk_branch2_ops,
1327 },
1328 },
1329};
1330
1331static struct clk_branch gcc_cfg_noc_pcie_anoc_ahb_clk = {
1332 .halt_reg = 0x10028,
1333 .halt_check = BRANCH_HALT_SKIP,
1334 .hwcg_reg = 0x10028,
1335 .hwcg_bit = 1,
1336 .clkr = {
1337 .enable_reg = 0x52000,
1338 .enable_mask = BIT(20),
1339 .hw.init = &(struct clk_init_data){
1340 .name = "gcc_cfg_noc_pcie_anoc_ahb_clk",
1341 .ops = &clk_branch2_ops,
1342 },
1343 },
1344};
1345
1346static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1347 .halt_reg = 0x39088,
1348 .halt_check = BRANCH_HALT_VOTED,
1349 .hwcg_reg = 0x39088,
1350 .hwcg_bit = 1,
1351 .clkr = {
1352 .enable_reg = 0x39088,
1353 .enable_mask = BIT(0),
1354 .hw.init = &(struct clk_init_data){
1355 .name = "gcc_cfg_noc_usb3_prim_axi_clk",
1356 .parent_hws = (const struct clk_hw*[]) {
1357 &gcc_usb30_prim_master_clk_src.clkr.hw,
1358 },
1359 .num_parents = 1,
1360 .flags = CLK_SET_RATE_PARENT,
1361 .ops = &clk_branch2_ops,
1362 },
1363 },
1364};
1365
1366static struct clk_branch gcc_cnoc_pcie_sf_axi_clk = {
1367 .halt_reg = 0x10030,
1368 .halt_check = BRANCH_HALT_VOTED,
1369 .hwcg_reg = 0x10030,
1370 .hwcg_bit = 1,
1371 .clkr = {
1372 .enable_reg = 0x52008,
1373 .enable_mask = BIT(6),
1374 .hw.init = &(struct clk_init_data){
1375 .name = "gcc_cnoc_pcie_sf_axi_clk",
1376 .ops = &clk_branch2_ops,
1377 },
1378 },
1379};
1380
1381static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1382 .halt_reg = 0x71154,
1383 .halt_check = BRANCH_HALT_SKIP,
1384 .hwcg_reg = 0x71154,
1385 .hwcg_bit = 1,
1386 .clkr = {
1387 .enable_reg = 0x71154,
1388 .enable_mask = BIT(0),
1389 .hw.init = &(struct clk_init_data){
1390 .name = "gcc_ddrss_gpu_axi_clk",
1391 .ops = &clk_branch2_aon_ops,
1392 },
1393 },
1394};
1395
1396static struct clk_branch gcc_ddrss_pcie_sf_qtb_clk = {
1397 .halt_reg = 0x1004c,
1398 .halt_check = BRANCH_HALT_SKIP,
1399 .hwcg_reg = 0x1004c,
1400 .hwcg_bit = 1,
1401 .clkr = {
1402 .enable_reg = 0x52000,
1403 .enable_mask = BIT(19),
1404 .hw.init = &(struct clk_init_data){
1405 .name = "gcc_ddrss_pcie_sf_qtb_clk",
1406 .ops = &clk_branch2_ops,
1407 },
1408 },
1409};
1410
1411static struct clk_branch gcc_disp_hf_axi_clk = {
1412 .halt_reg = 0x2700c,
1413 .halt_check = BRANCH_HALT_SKIP,
1414 .hwcg_reg = 0x2700c,
1415 .hwcg_bit = 1,
1416 .clkr = {
1417 .enable_reg = 0x2700c,
1418 .enable_mask = BIT(0),
1419 .hw.init = &(struct clk_init_data){
1420 .name = "gcc_disp_hf_axi_clk",
1421 .ops = &clk_branch2_ops,
1422 },
1423 },
1424};
1425
1426static struct clk_branch gcc_gp1_clk = {
1427 .halt_reg = 0x64000,
1428 .halt_check = BRANCH_HALT,
1429 .clkr = {
1430 .enable_reg = 0x64000,
1431 .enable_mask = BIT(0),
1432 .hw.init = &(struct clk_init_data){
1433 .name = "gcc_gp1_clk",
1434 .parent_hws = (const struct clk_hw*[]) {
1435 &gcc_gp1_clk_src.clkr.hw,
1436 },
1437 .num_parents = 1,
1438 .flags = CLK_SET_RATE_PARENT,
1439 .ops = &clk_branch2_ops,
1440 },
1441 },
1442};
1443
1444static struct clk_branch gcc_gp2_clk = {
1445 .halt_reg = 0x65000,
1446 .halt_check = BRANCH_HALT,
1447 .clkr = {
1448 .enable_reg = 0x65000,
1449 .enable_mask = BIT(0),
1450 .hw.init = &(struct clk_init_data){
1451 .name = "gcc_gp2_clk",
1452 .parent_hws = (const struct clk_hw*[]) {
1453 &gcc_gp2_clk_src.clkr.hw,
1454 },
1455 .num_parents = 1,
1456 .flags = CLK_SET_RATE_PARENT,
1457 .ops = &clk_branch2_ops,
1458 },
1459 },
1460};
1461
1462static struct clk_branch gcc_gp3_clk = {
1463 .halt_reg = 0x66000,
1464 .halt_check = BRANCH_HALT,
1465 .clkr = {
1466 .enable_reg = 0x66000,
1467 .enable_mask = BIT(0),
1468 .hw.init = &(struct clk_init_data){
1469 .name = "gcc_gp3_clk",
1470 .parent_hws = (const struct clk_hw*[]) {
1471 &gcc_gp3_clk_src.clkr.hw,
1472 },
1473 .num_parents = 1,
1474 .flags = CLK_SET_RATE_PARENT,
1475 .ops = &clk_branch2_ops,
1476 },
1477 },
1478};
1479
1480static struct clk_branch gcc_gpu_gpll0_clk_src = {
1481 .halt_check = BRANCH_HALT_DELAY,
1482 .clkr = {
1483 .enable_reg = 0x52000,
1484 .enable_mask = BIT(15),
1485 .hw.init = &(struct clk_init_data){
1486 .name = "gcc_gpu_gpll0_clk_src",
1487 .parent_hws = (const struct clk_hw*[]) {
1488 &gcc_gpll0.clkr.hw,
1489 },
1490 .num_parents = 1,
1491 .flags = CLK_SET_RATE_PARENT,
1492 .ops = &clk_branch2_ops,
1493 },
1494 },
1495};
1496
1497static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
1498 .halt_check = BRANCH_HALT_DELAY,
1499 .clkr = {
1500 .enable_reg = 0x52000,
1501 .enable_mask = BIT(16),
1502 .hw.init = &(struct clk_init_data){
1503 .name = "gcc_gpu_gpll0_div_clk_src",
1504 .parent_hws = (const struct clk_hw*[]) {
1505 &gcc_gpll0_out_even.clkr.hw,
1506 },
1507 .num_parents = 1,
1508 .flags = CLK_SET_RATE_PARENT,
1509 .ops = &clk_branch2_ops,
1510 },
1511 },
1512};
1513
1514static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
1515 .halt_reg = 0x71010,
1516 .halt_check = BRANCH_HALT_VOTED,
1517 .hwcg_reg = 0x71010,
1518 .hwcg_bit = 1,
1519 .clkr = {
1520 .enable_reg = 0x71010,
1521 .enable_mask = BIT(0),
1522 .hw.init = &(struct clk_init_data){
1523 .name = "gcc_gpu_memnoc_gfx_clk",
1524 .ops = &clk_branch2_ops,
1525 },
1526 },
1527};
1528
1529static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
1530 .halt_reg = 0x71018,
1531 .halt_check = BRANCH_HALT_DELAY,
1532 .clkr = {
1533 .enable_reg = 0x71018,
1534 .enable_mask = BIT(0),
1535 .hw.init = &(struct clk_init_data){
1536 .name = "gcc_gpu_snoc_dvm_gfx_clk",
1537 .ops = &clk_branch2_ops,
1538 },
1539 },
1540};
1541
1542static struct clk_branch gcc_pcie_0_aux_clk = {
1543 .halt_reg = 0x6b03c,
1544 .halt_check = BRANCH_HALT_VOTED,
1545 .clkr = {
1546 .enable_reg = 0x52008,
1547 .enable_mask = BIT(3),
1548 .hw.init = &(struct clk_init_data){
1549 .name = "gcc_pcie_0_aux_clk",
1550 .parent_hws = (const struct clk_hw*[]) {
1551 &gcc_pcie_0_aux_clk_src.clkr.hw,
1552 },
1553 .num_parents = 1,
1554 .flags = CLK_SET_RATE_PARENT,
1555 .ops = &clk_branch2_ops,
1556 },
1557 },
1558};
1559
1560static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
1561 .halt_reg = 0x6b038,
1562 .halt_check = BRANCH_HALT_VOTED,
1563 .hwcg_reg = 0x6b038,
1564 .hwcg_bit = 1,
1565 .clkr = {
1566 .enable_reg = 0x52008,
1567 .enable_mask = BIT(2),
1568 .hw.init = &(struct clk_init_data){
1569 .name = "gcc_pcie_0_cfg_ahb_clk",
1570 .ops = &clk_branch2_ops,
1571 },
1572 },
1573};
1574
1575static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
1576 .halt_reg = 0x6b02c,
1577 .halt_check = BRANCH_HALT_SKIP,
1578 .hwcg_reg = 0x6b02c,
1579 .hwcg_bit = 1,
1580 .clkr = {
1581 .enable_reg = 0x52008,
1582 .enable_mask = BIT(1),
1583 .hw.init = &(struct clk_init_data){
1584 .name = "gcc_pcie_0_mstr_axi_clk",
1585 .ops = &clk_branch2_ops,
1586 },
1587 },
1588};
1589
1590static struct clk_branch gcc_pcie_0_phy_rchng_clk = {
1591 .halt_reg = 0x6b054,
1592 .halt_check = BRANCH_HALT_VOTED,
1593 .clkr = {
1594 .enable_reg = 0x52000,
1595 .enable_mask = BIT(22),
1596 .hw.init = &(struct clk_init_data){
1597 .name = "gcc_pcie_0_phy_rchng_clk",
1598 .parent_hws = (const struct clk_hw*[]) {
1599 &gcc_pcie_0_phy_rchng_clk_src.clkr.hw,
1600 },
1601 .num_parents = 1,
1602 .flags = CLK_SET_RATE_PARENT,
1603 .ops = &clk_branch2_ops,
1604 },
1605 },
1606};
1607
1608static struct clk_branch gcc_pcie_0_pipe_clk = {
1609 .halt_reg = 0x6b048,
1610 .halt_check = BRANCH_HALT_SKIP,
1611 .clkr = {
1612 .enable_reg = 0x52008,
1613 .enable_mask = BIT(4),
1614 .hw.init = &(struct clk_init_data){
1615 .name = "gcc_pcie_0_pipe_clk",
1616 .parent_hws = (const struct clk_hw*[]) {
1617 &gcc_pcie_0_pipe_clk_src.clkr.hw,
1618 },
1619 .num_parents = 1,
1620 .flags = CLK_SET_RATE_PARENT,
1621 .ops = &clk_branch2_ops,
1622 },
1623 },
1624};
1625
1626static struct clk_branch gcc_pcie_0_slv_axi_clk = {
1627 .halt_reg = 0x6b020,
1628 .halt_check = BRANCH_HALT_VOTED,
1629 .hwcg_reg = 0x6b020,
1630 .hwcg_bit = 1,
1631 .clkr = {
1632 .enable_reg = 0x52008,
1633 .enable_mask = BIT(0),
1634 .hw.init = &(struct clk_init_data){
1635 .name = "gcc_pcie_0_slv_axi_clk",
1636 .ops = &clk_branch2_ops,
1637 },
1638 },
1639};
1640
1641static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
1642 .halt_reg = 0x6b01c,
1643 .halt_check = BRANCH_HALT_VOTED,
1644 .clkr = {
1645 .enable_reg = 0x52008,
1646 .enable_mask = BIT(5),
1647 .hw.init = &(struct clk_init_data){
1648 .name = "gcc_pcie_0_slv_q2a_axi_clk",
1649 .ops = &clk_branch2_ops,
1650 },
1651 },
1652};
1653
1654static struct clk_branch gcc_pcie_1_aux_clk = {
1655 .halt_reg = 0x8d038,
1656 .halt_check = BRANCH_HALT_VOTED,
1657 .clkr = {
1658 .enable_reg = 0x52000,
1659 .enable_mask = BIT(29),
1660 .hw.init = &(struct clk_init_data){
1661 .name = "gcc_pcie_1_aux_clk",
1662 .parent_hws = (const struct clk_hw*[]) {
1663 &gcc_pcie_1_aux_clk_src.clkr.hw,
1664 },
1665 .num_parents = 1,
1666 .flags = CLK_SET_RATE_PARENT,
1667 .ops = &clk_branch2_ops,
1668 },
1669 },
1670};
1671
1672static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
1673 .halt_reg = 0x8d034,
1674 .halt_check = BRANCH_HALT_VOTED,
1675 .hwcg_reg = 0x8d034,
1676 .hwcg_bit = 1,
1677 .clkr = {
1678 .enable_reg = 0x52000,
1679 .enable_mask = BIT(28),
1680 .hw.init = &(struct clk_init_data){
1681 .name = "gcc_pcie_1_cfg_ahb_clk",
1682 .ops = &clk_branch2_ops,
1683 },
1684 },
1685};
1686
1687static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
1688 .halt_reg = 0x8d028,
1689 .halt_check = BRANCH_HALT_SKIP,
1690 .hwcg_reg = 0x8d028,
1691 .hwcg_bit = 1,
1692 .clkr = {
1693 .enable_reg = 0x52000,
1694 .enable_mask = BIT(27),
1695 .hw.init = &(struct clk_init_data){
1696 .name = "gcc_pcie_1_mstr_axi_clk",
1697 .ops = &clk_branch2_ops,
1698 },
1699 },
1700};
1701
1702static struct clk_branch gcc_pcie_1_phy_aux_clk = {
1703 .halt_reg = 0x8d044,
1704 .halt_check = BRANCH_HALT_VOTED,
1705 .clkr = {
1706 .enable_reg = 0x52000,
1707 .enable_mask = BIT(24),
1708 .hw.init = &(struct clk_init_data){
1709 .name = "gcc_pcie_1_phy_aux_clk",
1710 .parent_hws = (const struct clk_hw*[]) {
1711 &gcc_pcie_1_phy_aux_clk_src.clkr.hw,
1712 },
1713 .num_parents = 1,
1714 .flags = CLK_SET_RATE_PARENT,
1715 .ops = &clk_branch2_ops,
1716 },
1717 },
1718};
1719
1720static struct clk_branch gcc_pcie_1_phy_rchng_clk = {
1721 .halt_reg = 0x8d05c,
1722 .halt_check = BRANCH_HALT_VOTED,
1723 .clkr = {
1724 .enable_reg = 0x52000,
1725 .enable_mask = BIT(23),
1726 .hw.init = &(struct clk_init_data){
1727 .name = "gcc_pcie_1_phy_rchng_clk",
1728 .parent_hws = (const struct clk_hw*[]) {
1729 &gcc_pcie_1_phy_rchng_clk_src.clkr.hw,
1730 },
1731 .num_parents = 1,
1732 .flags = CLK_SET_RATE_PARENT,
1733 .ops = &clk_branch2_ops,
1734 },
1735 },
1736};
1737
1738static struct clk_branch gcc_pcie_1_pipe_clk = {
1739 .halt_reg = 0x8d050,
1740 .halt_check = BRANCH_HALT_SKIP,
1741 .clkr = {
1742 .enable_reg = 0x52000,
1743 .enable_mask = BIT(30),
1744 .hw.init = &(struct clk_init_data){
1745 .name = "gcc_pcie_1_pipe_clk",
1746 .parent_hws = (const struct clk_hw*[]) {
1747 &gcc_pcie_1_pipe_clk_src.clkr.hw,
1748 },
1749 .num_parents = 1,
1750 .flags = CLK_SET_RATE_PARENT,
1751 .ops = &clk_branch2_ops,
1752 },
1753 },
1754};
1755
1756static struct clk_branch gcc_pcie_1_slv_axi_clk = {
1757 .halt_reg = 0x8d01c,
1758 .halt_check = BRANCH_HALT_VOTED,
1759 .hwcg_reg = 0x8d01c,
1760 .hwcg_bit = 1,
1761 .clkr = {
1762 .enable_reg = 0x52000,
1763 .enable_mask = BIT(26),
1764 .hw.init = &(struct clk_init_data){
1765 .name = "gcc_pcie_1_slv_axi_clk",
1766 .ops = &clk_branch2_ops,
1767 },
1768 },
1769};
1770
1771static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = {
1772 .halt_reg = 0x8d018,
1773 .halt_check = BRANCH_HALT_VOTED,
1774 .clkr = {
1775 .enable_reg = 0x52000,
1776 .enable_mask = BIT(25),
1777 .hw.init = &(struct clk_init_data){
1778 .name = "gcc_pcie_1_slv_q2a_axi_clk",
1779 .ops = &clk_branch2_ops,
1780 },
1781 },
1782};
1783
1784static struct clk_branch gcc_pdm2_clk = {
1785 .halt_reg = 0x3300c,
1786 .halt_check = BRANCH_HALT,
1787 .clkr = {
1788 .enable_reg = 0x3300c,
1789 .enable_mask = BIT(0),
1790 .hw.init = &(struct clk_init_data){
1791 .name = "gcc_pdm2_clk",
1792 .parent_hws = (const struct clk_hw*[]) {
1793 &gcc_pdm2_clk_src.clkr.hw,
1794 },
1795 .num_parents = 1,
1796 .flags = CLK_SET_RATE_PARENT,
1797 .ops = &clk_branch2_ops,
1798 },
1799 },
1800};
1801
1802static struct clk_branch gcc_pdm_ahb_clk = {
1803 .halt_reg = 0x33004,
1804 .halt_check = BRANCH_HALT_VOTED,
1805 .hwcg_reg = 0x33004,
1806 .hwcg_bit = 1,
1807 .clkr = {
1808 .enable_reg = 0x33004,
1809 .enable_mask = BIT(0),
1810 .hw.init = &(struct clk_init_data){
1811 .name = "gcc_pdm_ahb_clk",
1812 .ops = &clk_branch2_ops,
1813 },
1814 },
1815};
1816
1817static struct clk_branch gcc_pdm_xo4_clk = {
1818 .halt_reg = 0x33008,
1819 .halt_check = BRANCH_HALT,
1820 .clkr = {
1821 .enable_reg = 0x33008,
1822 .enable_mask = BIT(0),
1823 .hw.init = &(struct clk_init_data){
1824 .name = "gcc_pdm_xo4_clk",
1825 .ops = &clk_branch2_ops,
1826 },
1827 },
1828};
1829
1830static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
1831 .halt_reg = 0x26008,
1832 .halt_check = BRANCH_HALT_VOTED,
1833 .hwcg_reg = 0x26008,
1834 .hwcg_bit = 1,
1835 .clkr = {
1836 .enable_reg = 0x26008,
1837 .enable_mask = BIT(0),
1838 .hw.init = &(struct clk_init_data){
1839 .name = "gcc_qmip_camera_nrt_ahb_clk",
1840 .ops = &clk_branch2_ops,
1841 },
1842 },
1843};
1844
1845static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
1846 .halt_reg = 0x2600c,
1847 .halt_check = BRANCH_HALT_VOTED,
1848 .hwcg_reg = 0x2600c,
1849 .hwcg_bit = 1,
1850 .clkr = {
1851 .enable_reg = 0x2600c,
1852 .enable_mask = BIT(0),
1853 .hw.init = &(struct clk_init_data){
1854 .name = "gcc_qmip_camera_rt_ahb_clk",
1855 .ops = &clk_branch2_ops,
1856 },
1857 },
1858};
1859
1860static struct clk_branch gcc_qmip_disp_ahb_clk = {
1861 .halt_reg = 0x27008,
1862 .halt_check = BRANCH_HALT_VOTED,
1863 .hwcg_reg = 0x27008,
1864 .hwcg_bit = 1,
1865 .clkr = {
1866 .enable_reg = 0x27008,
1867 .enable_mask = BIT(0),
1868 .hw.init = &(struct clk_init_data){
1869 .name = "gcc_qmip_disp_ahb_clk",
1870 .ops = &clk_branch2_ops,
1871 },
1872 },
1873};
1874
1875static struct clk_branch gcc_qmip_gpu_ahb_clk = {
1876 .halt_reg = 0x71008,
1877 .halt_check = BRANCH_HALT_VOTED,
1878 .hwcg_reg = 0x71008,
1879 .hwcg_bit = 1,
1880 .clkr = {
1881 .enable_reg = 0x71008,
1882 .enable_mask = BIT(0),
1883 .hw.init = &(struct clk_init_data){
1884 .name = "gcc_qmip_gpu_ahb_clk",
1885 .ops = &clk_branch2_ops,
1886 },
1887 },
1888};
1889
1890static struct clk_branch gcc_qmip_pcie_ahb_clk = {
1891 .halt_reg = 0x6b018,
1892 .halt_check = BRANCH_HALT_VOTED,
1893 .hwcg_reg = 0x6b018,
1894 .hwcg_bit = 1,
1895 .clkr = {
1896 .enable_reg = 0x52000,
1897 .enable_mask = BIT(11),
1898 .hw.init = &(struct clk_init_data){
1899 .name = "gcc_qmip_pcie_ahb_clk",
1900 .ops = &clk_branch2_ops,
1901 },
1902 },
1903};
1904
1905static struct clk_branch gcc_qmip_video_cv_cpu_ahb_clk = {
1906 .halt_reg = 0x32014,
1907 .halt_check = BRANCH_HALT_VOTED,
1908 .hwcg_reg = 0x32014,
1909 .hwcg_bit = 1,
1910 .clkr = {
1911 .enable_reg = 0x32014,
1912 .enable_mask = BIT(0),
1913 .hw.init = &(struct clk_init_data){
1914 .name = "gcc_qmip_video_cv_cpu_ahb_clk",
1915 .ops = &clk_branch2_ops,
1916 },
1917 },
1918};
1919
1920static struct clk_branch gcc_qmip_video_cvp_ahb_clk = {
1921 .halt_reg = 0x32008,
1922 .halt_check = BRANCH_HALT_VOTED,
1923 .hwcg_reg = 0x32008,
1924 .hwcg_bit = 1,
1925 .clkr = {
1926 .enable_reg = 0x32008,
1927 .enable_mask = BIT(0),
1928 .hw.init = &(struct clk_init_data){
1929 .name = "gcc_qmip_video_cvp_ahb_clk",
1930 .ops = &clk_branch2_ops,
1931 },
1932 },
1933};
1934
1935static struct clk_branch gcc_qmip_video_v_cpu_ahb_clk = {
1936 .halt_reg = 0x32010,
1937 .halt_check = BRANCH_HALT_VOTED,
1938 .hwcg_reg = 0x32010,
1939 .hwcg_bit = 1,
1940 .clkr = {
1941 .enable_reg = 0x32010,
1942 .enable_mask = BIT(0),
1943 .hw.init = &(struct clk_init_data){
1944 .name = "gcc_qmip_video_v_cpu_ahb_clk",
1945 .ops = &clk_branch2_ops,
1946 },
1947 },
1948};
1949
1950static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
1951 .halt_reg = 0x3200c,
1952 .halt_check = BRANCH_HALT_VOTED,
1953 .hwcg_reg = 0x3200c,
1954 .hwcg_bit = 1,
1955 .clkr = {
1956 .enable_reg = 0x3200c,
1957 .enable_mask = BIT(0),
1958 .hw.init = &(struct clk_init_data){
1959 .name = "gcc_qmip_video_vcodec_ahb_clk",
1960 .ops = &clk_branch2_ops,
1961 },
1962 },
1963};
1964
1965static struct clk_branch gcc_qupv3_i2c_core_clk = {
1966 .halt_reg = 0x23144,
1967 .halt_check = BRANCH_HALT_VOTED,
1968 .clkr = {
1969 .enable_reg = 0x52008,
1970 .enable_mask = BIT(8),
1971 .hw.init = &(struct clk_init_data){
1972 .name = "gcc_qupv3_i2c_core_clk",
1973 .ops = &clk_branch2_ops,
1974 },
1975 },
1976};
1977
1978static struct clk_branch gcc_qupv3_i2c_s0_clk = {
1979 .halt_reg = 0x17004,
1980 .halt_check = BRANCH_HALT_VOTED,
1981 .clkr = {
1982 .enable_reg = 0x52008,
1983 .enable_mask = BIT(10),
1984 .hw.init = &(struct clk_init_data){
1985 .name = "gcc_qupv3_i2c_s0_clk",
1986 .parent_hws = (const struct clk_hw*[]) {
1987 &gcc_qupv3_i2c_s0_clk_src.clkr.hw,
1988 },
1989 .num_parents = 1,
1990 .flags = CLK_SET_RATE_PARENT,
1991 .ops = &clk_branch2_ops,
1992 },
1993 },
1994};
1995
1996static struct clk_branch gcc_qupv3_i2c_s1_clk = {
1997 .halt_reg = 0x17020,
1998 .halt_check = BRANCH_HALT_VOTED,
1999 .clkr = {
2000 .enable_reg = 0x52008,
2001 .enable_mask = BIT(11),
2002 .hw.init = &(struct clk_init_data){
2003 .name = "gcc_qupv3_i2c_s1_clk",
2004 .parent_hws = (const struct clk_hw*[]) {
2005 &gcc_qupv3_i2c_s1_clk_src.clkr.hw,
2006 },
2007 .num_parents = 1,
2008 .flags = CLK_SET_RATE_PARENT,
2009 .ops = &clk_branch2_ops,
2010 },
2011 },
2012};
2013
2014static struct clk_branch gcc_qupv3_i2c_s2_clk = {
2015 .halt_reg = 0x1703c,
2016 .halt_check = BRANCH_HALT_VOTED,
2017 .clkr = {
2018 .enable_reg = 0x52008,
2019 .enable_mask = BIT(12),
2020 .hw.init = &(struct clk_init_data){
2021 .name = "gcc_qupv3_i2c_s2_clk",
2022 .parent_hws = (const struct clk_hw*[]) {
2023 &gcc_qupv3_i2c_s2_clk_src.clkr.hw,
2024 },
2025 .num_parents = 1,
2026 .flags = CLK_SET_RATE_PARENT,
2027 .ops = &clk_branch2_ops,
2028 },
2029 },
2030};
2031
2032static struct clk_branch gcc_qupv3_i2c_s3_clk = {
2033 .halt_reg = 0x17058,
2034 .halt_check = BRANCH_HALT_VOTED,
2035 .clkr = {
2036 .enable_reg = 0x52008,
2037 .enable_mask = BIT(13),
2038 .hw.init = &(struct clk_init_data){
2039 .name = "gcc_qupv3_i2c_s3_clk",
2040 .parent_hws = (const struct clk_hw*[]) {
2041 &gcc_qupv3_i2c_s3_clk_src.clkr.hw,
2042 },
2043 .num_parents = 1,
2044 .flags = CLK_SET_RATE_PARENT,
2045 .ops = &clk_branch2_ops,
2046 },
2047 },
2048};
2049
2050static struct clk_branch gcc_qupv3_i2c_s4_clk = {
2051 .halt_reg = 0x17074,
2052 .halt_check = BRANCH_HALT_VOTED,
2053 .clkr = {
2054 .enable_reg = 0x52008,
2055 .enable_mask = BIT(14),
2056 .hw.init = &(struct clk_init_data){
2057 .name = "gcc_qupv3_i2c_s4_clk",
2058 .parent_hws = (const struct clk_hw*[]) {
2059 &gcc_qupv3_i2c_s4_clk_src.clkr.hw,
2060 },
2061 .num_parents = 1,
2062 .flags = CLK_SET_RATE_PARENT,
2063 .ops = &clk_branch2_ops,
2064 },
2065 },
2066};
2067
2068static struct clk_branch gcc_qupv3_i2c_s5_clk = {
2069 .halt_reg = 0x17090,
2070 .halt_check = BRANCH_HALT_VOTED,
2071 .clkr = {
2072 .enable_reg = 0x52008,
2073 .enable_mask = BIT(15),
2074 .hw.init = &(struct clk_init_data){
2075 .name = "gcc_qupv3_i2c_s5_clk",
2076 .parent_hws = (const struct clk_hw*[]) {
2077 &gcc_qupv3_i2c_s5_clk_src.clkr.hw,
2078 },
2079 .num_parents = 1,
2080 .flags = CLK_SET_RATE_PARENT,
2081 .ops = &clk_branch2_ops,
2082 },
2083 },
2084};
2085
2086static struct clk_branch gcc_qupv3_i2c_s6_clk = {
2087 .halt_reg = 0x170ac,
2088 .halt_check = BRANCH_HALT_VOTED,
2089 .clkr = {
2090 .enable_reg = 0x52008,
2091 .enable_mask = BIT(16),
2092 .hw.init = &(struct clk_init_data){
2093 .name = "gcc_qupv3_i2c_s6_clk",
2094 .parent_hws = (const struct clk_hw*[]) {
2095 &gcc_qupv3_i2c_s6_clk_src.clkr.hw,
2096 },
2097 .num_parents = 1,
2098 .flags = CLK_SET_RATE_PARENT,
2099 .ops = &clk_branch2_ops,
2100 },
2101 },
2102};
2103
2104static struct clk_branch gcc_qupv3_i2c_s7_clk = {
2105 .halt_reg = 0x170c8,
2106 .halt_check = BRANCH_HALT_VOTED,
2107 .clkr = {
2108 .enable_reg = 0x52008,
2109 .enable_mask = BIT(17),
2110 .hw.init = &(struct clk_init_data){
2111 .name = "gcc_qupv3_i2c_s7_clk",
2112 .parent_hws = (const struct clk_hw*[]) {
2113 &gcc_qupv3_i2c_s7_clk_src.clkr.hw,
2114 },
2115 .num_parents = 1,
2116 .flags = CLK_SET_RATE_PARENT,
2117 .ops = &clk_branch2_ops,
2118 },
2119 },
2120};
2121
2122static struct clk_branch gcc_qupv3_i2c_s8_clk = {
2123 .halt_reg = 0x170e4,
2124 .halt_check = BRANCH_HALT_VOTED,
2125 .clkr = {
2126 .enable_reg = 0x52010,
2127 .enable_mask = BIT(14),
2128 .hw.init = &(struct clk_init_data){
2129 .name = "gcc_qupv3_i2c_s8_clk",
2130 .parent_hws = (const struct clk_hw*[]) {
2131 &gcc_qupv3_i2c_s8_clk_src.clkr.hw,
2132 },
2133 .num_parents = 1,
2134 .flags = CLK_SET_RATE_PARENT,
2135 .ops = &clk_branch2_ops,
2136 },
2137 },
2138};
2139
2140static struct clk_branch gcc_qupv3_i2c_s9_clk = {
2141 .halt_reg = 0x17100,
2142 .halt_check = BRANCH_HALT_VOTED,
2143 .clkr = {
2144 .enable_reg = 0x52010,
2145 .enable_mask = BIT(15),
2146 .hw.init = &(struct clk_init_data){
2147 .name = "gcc_qupv3_i2c_s9_clk",
2148 .parent_hws = (const struct clk_hw*[]) {
2149 &gcc_qupv3_i2c_s9_clk_src.clkr.hw,
2150 },
2151 .num_parents = 1,
2152 .flags = CLK_SET_RATE_PARENT,
2153 .ops = &clk_branch2_ops,
2154 },
2155 },
2156};
2157
2158static struct clk_branch gcc_qupv3_i2c_s_ahb_clk = {
2159 .halt_reg = 0x23140,
2160 .halt_check = BRANCH_HALT_VOTED,
2161 .hwcg_reg = 0x23140,
2162 .hwcg_bit = 1,
2163 .clkr = {
2164 .enable_reg = 0x52008,
2165 .enable_mask = BIT(7),
2166 .hw.init = &(struct clk_init_data){
2167 .name = "gcc_qupv3_i2c_s_ahb_clk",
2168 .ops = &clk_branch2_ops,
2169 },
2170 },
2171};
2172
2173static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
2174 .halt_reg = 0x23294,
2175 .halt_check = BRANCH_HALT_VOTED,
2176 .clkr = {
2177 .enable_reg = 0x52008,
2178 .enable_mask = BIT(18),
2179 .hw.init = &(struct clk_init_data){
2180 .name = "gcc_qupv3_wrap1_core_2x_clk",
2181 .ops = &clk_branch2_ops,
2182 },
2183 },
2184};
2185
2186static struct clk_branch gcc_qupv3_wrap1_core_clk = {
2187 .halt_reg = 0x23284,
2188 .halt_check = BRANCH_HALT_VOTED,
2189 .clkr = {
2190 .enable_reg = 0x52008,
2191 .enable_mask = BIT(19),
2192 .hw.init = &(struct clk_init_data){
2193 .name = "gcc_qupv3_wrap1_core_clk",
2194 .ops = &clk_branch2_ops,
2195 },
2196 },
2197};
2198
2199static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
2200 .halt_reg = 0x18004,
2201 .halt_check = BRANCH_HALT_VOTED,
2202 .clkr = {
2203 .enable_reg = 0x52008,
2204 .enable_mask = BIT(22),
2205 .hw.init = &(struct clk_init_data){
2206 .name = "gcc_qupv3_wrap1_s0_clk",
2207 .parent_hws = (const struct clk_hw*[]) {
2208 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
2209 },
2210 .num_parents = 1,
2211 .flags = CLK_SET_RATE_PARENT,
2212 .ops = &clk_branch2_ops,
2213 },
2214 },
2215};
2216
2217static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
2218 .halt_reg = 0x1813c,
2219 .halt_check = BRANCH_HALT_VOTED,
2220 .clkr = {
2221 .enable_reg = 0x52008,
2222 .enable_mask = BIT(23),
2223 .hw.init = &(struct clk_init_data){
2224 .name = "gcc_qupv3_wrap1_s1_clk",
2225 .parent_hws = (const struct clk_hw*[]) {
2226 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
2227 },
2228 .num_parents = 1,
2229 .flags = CLK_SET_RATE_PARENT,
2230 .ops = &clk_branch2_ops,
2231 },
2232 },
2233};
2234
2235static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
2236 .halt_reg = 0x18274,
2237 .halt_check = BRANCH_HALT_VOTED,
2238 .clkr = {
2239 .enable_reg = 0x52008,
2240 .enable_mask = BIT(24),
2241 .hw.init = &(struct clk_init_data){
2242 .name = "gcc_qupv3_wrap1_s2_clk",
2243 .parent_hws = (const struct clk_hw*[]) {
2244 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
2245 },
2246 .num_parents = 1,
2247 .flags = CLK_SET_RATE_PARENT,
2248 .ops = &clk_branch2_ops,
2249 },
2250 },
2251};
2252
2253static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
2254 .halt_reg = 0x183ac,
2255 .halt_check = BRANCH_HALT_VOTED,
2256 .clkr = {
2257 .enable_reg = 0x52008,
2258 .enable_mask = BIT(25),
2259 .hw.init = &(struct clk_init_data){
2260 .name = "gcc_qupv3_wrap1_s3_clk",
2261 .parent_hws = (const struct clk_hw*[]) {
2262 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
2263 },
2264 .num_parents = 1,
2265 .flags = CLK_SET_RATE_PARENT,
2266 .ops = &clk_branch2_ops,
2267 },
2268 },
2269};
2270
2271static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
2272 .halt_reg = 0x184e4,
2273 .halt_check = BRANCH_HALT_VOTED,
2274 .clkr = {
2275 .enable_reg = 0x52008,
2276 .enable_mask = BIT(26),
2277 .hw.init = &(struct clk_init_data){
2278 .name = "gcc_qupv3_wrap1_s4_clk",
2279 .parent_hws = (const struct clk_hw*[]) {
2280 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
2281 },
2282 .num_parents = 1,
2283 .flags = CLK_SET_RATE_PARENT,
2284 .ops = &clk_branch2_ops,
2285 },
2286 },
2287};
2288
2289static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
2290 .halt_reg = 0x1861c,
2291 .halt_check = BRANCH_HALT_VOTED,
2292 .clkr = {
2293 .enable_reg = 0x52008,
2294 .enable_mask = BIT(27),
2295 .hw.init = &(struct clk_init_data){
2296 .name = "gcc_qupv3_wrap1_s5_clk",
2297 .parent_hws = (const struct clk_hw*[]) {
2298 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
2299 },
2300 .num_parents = 1,
2301 .flags = CLK_SET_RATE_PARENT,
2302 .ops = &clk_branch2_ops,
2303 },
2304 },
2305};
2306
2307static struct clk_branch gcc_qupv3_wrap1_s6_clk = {
2308 .halt_reg = 0x18754,
2309 .halt_check = BRANCH_HALT_VOTED,
2310 .clkr = {
2311 .enable_reg = 0x52008,
2312 .enable_mask = BIT(28),
2313 .hw.init = &(struct clk_init_data){
2314 .name = "gcc_qupv3_wrap1_s6_clk",
2315 .parent_hws = (const struct clk_hw*[]) {
2316 &gcc_qupv3_wrap1_s6_clk_src.clkr.hw,
2317 },
2318 .num_parents = 1,
2319 .flags = CLK_SET_RATE_PARENT,
2320 .ops = &clk_branch2_ops,
2321 },
2322 },
2323};
2324
2325static struct clk_branch gcc_qupv3_wrap1_s7_clk = {
2326 .halt_reg = 0x1888c,
2327 .halt_check = BRANCH_HALT_VOTED,
2328 .clkr = {
2329 .enable_reg = 0x52010,
2330 .enable_mask = BIT(16),
2331 .hw.init = &(struct clk_init_data){
2332 .name = "gcc_qupv3_wrap1_s7_clk",
2333 .parent_hws = (const struct clk_hw*[]) {
2334 &gcc_qupv3_wrap1_s7_clk_src.clkr.hw,
2335 },
2336 .num_parents = 1,
2337 .flags = CLK_SET_RATE_PARENT,
2338 .ops = &clk_branch2_ops,
2339 },
2340 },
2341};
2342
2343static struct clk_branch gcc_qupv3_wrap2_core_2x_clk = {
2344 .halt_reg = 0x23004,
2345 .halt_check = BRANCH_HALT_VOTED,
2346 .clkr = {
2347 .enable_reg = 0x52010,
2348 .enable_mask = BIT(3),
2349 .hw.init = &(struct clk_init_data){
2350 .name = "gcc_qupv3_wrap2_core_2x_clk",
2351 .ops = &clk_branch2_ops,
2352 },
2353 },
2354};
2355
2356static struct clk_branch gcc_qupv3_wrap2_core_clk = {
2357 .halt_reg = 0x233d4,
2358 .halt_check = BRANCH_HALT_VOTED,
2359 .clkr = {
2360 .enable_reg = 0x52010,
2361 .enable_mask = BIT(0),
2362 .hw.init = &(struct clk_init_data){
2363 .name = "gcc_qupv3_wrap2_core_clk",
2364 .ops = &clk_branch2_ops,
2365 },
2366 },
2367};
2368
2369static struct clk_branch gcc_qupv3_wrap2_s0_clk = {
2370 .halt_reg = 0x1e004,
2371 .halt_check = BRANCH_HALT_VOTED,
2372 .clkr = {
2373 .enable_reg = 0x52010,
2374 .enable_mask = BIT(4),
2375 .hw.init = &(struct clk_init_data){
2376 .name = "gcc_qupv3_wrap2_s0_clk",
2377 .parent_hws = (const struct clk_hw*[]) {
2378 &gcc_qupv3_wrap2_s0_clk_src.clkr.hw,
2379 },
2380 .num_parents = 1,
2381 .flags = CLK_SET_RATE_PARENT,
2382 .ops = &clk_branch2_ops,
2383 },
2384 },
2385};
2386
2387static struct clk_branch gcc_qupv3_wrap2_s1_clk = {
2388 .halt_reg = 0x1e13c,
2389 .halt_check = BRANCH_HALT_VOTED,
2390 .clkr = {
2391 .enable_reg = 0x52010,
2392 .enable_mask = BIT(5),
2393 .hw.init = &(struct clk_init_data){
2394 .name = "gcc_qupv3_wrap2_s1_clk",
2395 .parent_hws = (const struct clk_hw*[]) {
2396 &gcc_qupv3_wrap2_s1_clk_src.clkr.hw,
2397 },
2398 .num_parents = 1,
2399 .flags = CLK_SET_RATE_PARENT,
2400 .ops = &clk_branch2_ops,
2401 },
2402 },
2403};
2404
2405static struct clk_branch gcc_qupv3_wrap2_s2_clk = {
2406 .halt_reg = 0x1e274,
2407 .halt_check = BRANCH_HALT_VOTED,
2408 .clkr = {
2409 .enable_reg = 0x52010,
2410 .enable_mask = BIT(6),
2411 .hw.init = &(struct clk_init_data){
2412 .name = "gcc_qupv3_wrap2_s2_clk",
2413 .parent_hws = (const struct clk_hw*[]) {
2414 &gcc_qupv3_wrap2_s2_clk_src.clkr.hw,
2415 },
2416 .num_parents = 1,
2417 .flags = CLK_SET_RATE_PARENT,
2418 .ops = &clk_branch2_ops,
2419 },
2420 },
2421};
2422
2423static struct clk_branch gcc_qupv3_wrap2_s3_clk = {
2424 .halt_reg = 0x1e3ac,
2425 .halt_check = BRANCH_HALT_VOTED,
2426 .clkr = {
2427 .enable_reg = 0x52010,
2428 .enable_mask = BIT(7),
2429 .hw.init = &(struct clk_init_data){
2430 .name = "gcc_qupv3_wrap2_s3_clk",
2431 .parent_hws = (const struct clk_hw*[]) {
2432 &gcc_qupv3_wrap2_s3_clk_src.clkr.hw,
2433 },
2434 .num_parents = 1,
2435 .flags = CLK_SET_RATE_PARENT,
2436 .ops = &clk_branch2_ops,
2437 },
2438 },
2439};
2440
2441static struct clk_branch gcc_qupv3_wrap2_s4_clk = {
2442 .halt_reg = 0x1e4e4,
2443 .halt_check = BRANCH_HALT_VOTED,
2444 .clkr = {
2445 .enable_reg = 0x52010,
2446 .enable_mask = BIT(8),
2447 .hw.init = &(struct clk_init_data){
2448 .name = "gcc_qupv3_wrap2_s4_clk",
2449 .parent_hws = (const struct clk_hw*[]) {
2450 &gcc_qupv3_wrap2_s4_clk_src.clkr.hw,
2451 },
2452 .num_parents = 1,
2453 .flags = CLK_SET_RATE_PARENT,
2454 .ops = &clk_branch2_ops,
2455 },
2456 },
2457};
2458
2459static struct clk_branch gcc_qupv3_wrap2_s5_clk = {
2460 .halt_reg = 0x1e61c,
2461 .halt_check = BRANCH_HALT_VOTED,
2462 .clkr = {
2463 .enable_reg = 0x52010,
2464 .enable_mask = BIT(9),
2465 .hw.init = &(struct clk_init_data){
2466 .name = "gcc_qupv3_wrap2_s5_clk",
2467 .parent_hws = (const struct clk_hw*[]) {
2468 &gcc_qupv3_wrap2_s5_clk_src.clkr.hw,
2469 },
2470 .num_parents = 1,
2471 .flags = CLK_SET_RATE_PARENT,
2472 .ops = &clk_branch2_ops,
2473 },
2474 },
2475};
2476
2477static struct clk_branch gcc_qupv3_wrap2_s6_clk = {
2478 .halt_reg = 0x1e754,
2479 .halt_check = BRANCH_HALT_VOTED,
2480 .clkr = {
2481 .enable_reg = 0x52010,
2482 .enable_mask = BIT(10),
2483 .hw.init = &(struct clk_init_data){
2484 .name = "gcc_qupv3_wrap2_s6_clk",
2485 .parent_hws = (const struct clk_hw*[]) {
2486 &gcc_qupv3_wrap2_s6_clk_src.clkr.hw,
2487 },
2488 .num_parents = 1,
2489 .flags = CLK_SET_RATE_PARENT,
2490 .ops = &clk_branch2_ops,
2491 },
2492 },
2493};
2494
2495static struct clk_branch gcc_qupv3_wrap2_s7_clk = {
2496 .halt_reg = 0x1e88c,
2497 .halt_check = BRANCH_HALT_VOTED,
2498 .clkr = {
2499 .enable_reg = 0x52010,
2500 .enable_mask = BIT(17),
2501 .hw.init = &(struct clk_init_data){
2502 .name = "gcc_qupv3_wrap2_s7_clk",
2503 .parent_hws = (const struct clk_hw*[]) {
2504 &gcc_qupv3_wrap2_s7_clk_src.clkr.hw,
2505 },
2506 .num_parents = 1,
2507 .flags = CLK_SET_RATE_PARENT,
2508 .ops = &clk_branch2_ops,
2509 },
2510 },
2511};
2512
2513static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
2514 .halt_reg = 0x2327c,
2515 .halt_check = BRANCH_HALT_VOTED,
2516 .hwcg_reg = 0x2327c,
2517 .hwcg_bit = 1,
2518 .clkr = {
2519 .enable_reg = 0x52008,
2520 .enable_mask = BIT(20),
2521 .hw.init = &(struct clk_init_data){
2522 .name = "gcc_qupv3_wrap_1_m_ahb_clk",
2523 .ops = &clk_branch2_ops,
2524 },
2525 },
2526};
2527
2528static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
2529 .halt_reg = 0x23280,
2530 .halt_check = BRANCH_HALT_VOTED,
2531 .hwcg_reg = 0x23280,
2532 .hwcg_bit = 1,
2533 .clkr = {
2534 .enable_reg = 0x52008,
2535 .enable_mask = BIT(21),
2536 .hw.init = &(struct clk_init_data){
2537 .name = "gcc_qupv3_wrap_1_s_ahb_clk",
2538 .ops = &clk_branch2_ops,
2539 },
2540 },
2541};
2542
2543static struct clk_branch gcc_qupv3_wrap_2_m_ahb_clk = {
2544 .halt_reg = 0x233cc,
2545 .halt_check = BRANCH_HALT_VOTED,
2546 .hwcg_reg = 0x233cc,
2547 .hwcg_bit = 1,
2548 .clkr = {
2549 .enable_reg = 0x52010,
2550 .enable_mask = BIT(2),
2551 .hw.init = &(struct clk_init_data){
2552 .name = "gcc_qupv3_wrap_2_m_ahb_clk",
2553 .ops = &clk_branch2_ops,
2554 },
2555 },
2556};
2557
2558static struct clk_branch gcc_qupv3_wrap_2_s_ahb_clk = {
2559 .halt_reg = 0x233d0,
2560 .halt_check = BRANCH_HALT_VOTED,
2561 .hwcg_reg = 0x233d0,
2562 .hwcg_bit = 1,
2563 .clkr = {
2564 .enable_reg = 0x52010,
2565 .enable_mask = BIT(1),
2566 .hw.init = &(struct clk_init_data){
2567 .name = "gcc_qupv3_wrap_2_s_ahb_clk",
2568 .ops = &clk_branch2_ops,
2569 },
2570 },
2571};
2572
2573static struct clk_branch gcc_sdcc2_ahb_clk = {
2574 .halt_reg = 0x14010,
2575 .halt_check = BRANCH_HALT,
2576 .clkr = {
2577 .enable_reg = 0x14010,
2578 .enable_mask = BIT(0),
2579 .hw.init = &(struct clk_init_data){
2580 .name = "gcc_sdcc2_ahb_clk",
2581 .ops = &clk_branch2_ops,
2582 },
2583 },
2584};
2585
2586static struct clk_branch gcc_sdcc2_apps_clk = {
2587 .halt_reg = 0x14004,
2588 .halt_check = BRANCH_HALT,
2589 .clkr = {
2590 .enable_reg = 0x14004,
2591 .enable_mask = BIT(0),
2592 .hw.init = &(struct clk_init_data){
2593 .name = "gcc_sdcc2_apps_clk",
2594 .parent_hws = (const struct clk_hw*[]) {
2595 &gcc_sdcc2_apps_clk_src.clkr.hw,
2596 },
2597 .num_parents = 1,
2598 .flags = CLK_SET_RATE_PARENT,
2599 .ops = &clk_branch2_ops,
2600 },
2601 },
2602};
2603
2604static struct clk_branch gcc_sdcc4_ahb_clk = {
2605 .halt_reg = 0x16010,
2606 .halt_check = BRANCH_HALT,
2607 .clkr = {
2608 .enable_reg = 0x16010,
2609 .enable_mask = BIT(0),
2610 .hw.init = &(struct clk_init_data){
2611 .name = "gcc_sdcc4_ahb_clk",
2612 .ops = &clk_branch2_ops,
2613 },
2614 },
2615};
2616
2617static struct clk_branch gcc_sdcc4_apps_clk = {
2618 .halt_reg = 0x16004,
2619 .halt_check = BRANCH_HALT,
2620 .clkr = {
2621 .enable_reg = 0x16004,
2622 .enable_mask = BIT(0),
2623 .hw.init = &(struct clk_init_data){
2624 .name = "gcc_sdcc4_apps_clk",
2625 .parent_hws = (const struct clk_hw*[]) {
2626 &gcc_sdcc4_apps_clk_src.clkr.hw,
2627 },
2628 .num_parents = 1,
2629 .flags = CLK_SET_RATE_PARENT,
2630 .ops = &clk_branch2_ops,
2631 },
2632 },
2633};
2634
2635static struct clk_branch gcc_ufs_phy_ahb_clk = {
2636 .halt_reg = 0x77024,
2637 .halt_check = BRANCH_HALT_VOTED,
2638 .hwcg_reg = 0x77024,
2639 .hwcg_bit = 1,
2640 .clkr = {
2641 .enable_reg = 0x77024,
2642 .enable_mask = BIT(0),
2643 .hw.init = &(struct clk_init_data){
2644 .name = "gcc_ufs_phy_ahb_clk",
2645 .ops = &clk_branch2_ops,
2646 },
2647 },
2648};
2649
2650static struct clk_branch gcc_ufs_phy_axi_clk = {
2651 .halt_reg = 0x77018,
2652 .halt_check = BRANCH_HALT_VOTED,
2653 .hwcg_reg = 0x77018,
2654 .hwcg_bit = 1,
2655 .clkr = {
2656 .enable_reg = 0x77018,
2657 .enable_mask = BIT(0),
2658 .hw.init = &(struct clk_init_data){
2659 .name = "gcc_ufs_phy_axi_clk",
2660 .parent_hws = (const struct clk_hw*[]) {
2661 &gcc_ufs_phy_axi_clk_src.clkr.hw,
2662 },
2663 .num_parents = 1,
2664 .flags = CLK_SET_RATE_PARENT,
2665 .ops = &clk_branch2_ops,
2666 },
2667 },
2668};
2669
2670static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = {
2671 .halt_reg = 0x77018,
2672 .halt_check = BRANCH_HALT_VOTED,
2673 .hwcg_reg = 0x77018,
2674 .hwcg_bit = 1,
2675 .clkr = {
2676 .enable_reg = 0x77018,
2677 .enable_mask = BIT(1),
2678 .hw.init = &(struct clk_init_data){
2679 .name = "gcc_ufs_phy_axi_hw_ctl_clk",
2680 .parent_hws = (const struct clk_hw*[]) {
2681 &gcc_ufs_phy_axi_clk_src.clkr.hw,
2682 },
2683 .num_parents = 1,
2684 .flags = CLK_SET_RATE_PARENT,
2685 .ops = &clk_branch2_ops,
2686 },
2687 },
2688};
2689
2690static struct clk_branch gcc_ufs_phy_ice_core_clk = {
2691 .halt_reg = 0x77074,
2692 .halt_check = BRANCH_HALT_VOTED,
2693 .hwcg_reg = 0x77074,
2694 .hwcg_bit = 1,
2695 .clkr = {
2696 .enable_reg = 0x77074,
2697 .enable_mask = BIT(0),
2698 .hw.init = &(struct clk_init_data){
2699 .name = "gcc_ufs_phy_ice_core_clk",
2700 .parent_hws = (const struct clk_hw*[]) {
2701 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
2702 },
2703 .num_parents = 1,
2704 .flags = CLK_SET_RATE_PARENT,
2705 .ops = &clk_branch2_ops,
2706 },
2707 },
2708};
2709
2710static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = {
2711 .halt_reg = 0x77074,
2712 .halt_check = BRANCH_HALT_VOTED,
2713 .hwcg_reg = 0x77074,
2714 .hwcg_bit = 1,
2715 .clkr = {
2716 .enable_reg = 0x77074,
2717 .enable_mask = BIT(1),
2718 .hw.init = &(struct clk_init_data){
2719 .name = "gcc_ufs_phy_ice_core_hw_ctl_clk",
2720 .parent_hws = (const struct clk_hw*[]) {
2721 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
2722 },
2723 .num_parents = 1,
2724 .flags = CLK_SET_RATE_PARENT,
2725 .ops = &clk_branch2_ops,
2726 },
2727 },
2728};
2729
2730static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
2731 .halt_reg = 0x770b0,
2732 .halt_check = BRANCH_HALT_VOTED,
2733 .hwcg_reg = 0x770b0,
2734 .hwcg_bit = 1,
2735 .clkr = {
2736 .enable_reg = 0x770b0,
2737 .enable_mask = BIT(0),
2738 .hw.init = &(struct clk_init_data){
2739 .name = "gcc_ufs_phy_phy_aux_clk",
2740 .parent_hws = (const struct clk_hw*[]) {
2741 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2742 },
2743 .num_parents = 1,
2744 .flags = CLK_SET_RATE_PARENT,
2745 .ops = &clk_branch2_ops,
2746 },
2747 },
2748};
2749
2750static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = {
2751 .halt_reg = 0x770b0,
2752 .halt_check = BRANCH_HALT_VOTED,
2753 .hwcg_reg = 0x770b0,
2754 .hwcg_bit = 1,
2755 .clkr = {
2756 .enable_reg = 0x770b0,
2757 .enable_mask = BIT(1),
2758 .hw.init = &(struct clk_init_data){
2759 .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk",
2760 .parent_hws = (const struct clk_hw*[]) {
2761 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2762 },
2763 .num_parents = 1,
2764 .flags = CLK_SET_RATE_PARENT,
2765 .ops = &clk_branch2_ops,
2766 },
2767 },
2768};
2769
2770static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
2771 .halt_reg = 0x7702c,
2772 .halt_check = BRANCH_HALT_DELAY,
2773 .clkr = {
2774 .enable_reg = 0x7702c,
2775 .enable_mask = BIT(0),
2776 .hw.init = &(struct clk_init_data){
2777 .name = "gcc_ufs_phy_rx_symbol_0_clk",
2778 .parent_hws = (const struct clk_hw*[]) {
2779 &gcc_ufs_phy_rx_symbol_0_clk_src.clkr.hw,
2780 },
2781 .num_parents = 1,
2782 .flags = CLK_SET_RATE_PARENT,
2783 .ops = &clk_branch2_ops,
2784 },
2785 },
2786};
2787
2788static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
2789 .halt_reg = 0x770cc,
2790 .halt_check = BRANCH_HALT_DELAY,
2791 .clkr = {
2792 .enable_reg = 0x770cc,
2793 .enable_mask = BIT(0),
2794 .hw.init = &(struct clk_init_data){
2795 .name = "gcc_ufs_phy_rx_symbol_1_clk",
2796 .parent_hws = (const struct clk_hw*[]) {
2797 &gcc_ufs_phy_rx_symbol_1_clk_src.clkr.hw,
2798 },
2799 .num_parents = 1,
2800 .flags = CLK_SET_RATE_PARENT,
2801 .ops = &clk_branch2_ops,
2802 },
2803 },
2804};
2805
2806static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
2807 .halt_reg = 0x77028,
2808 .halt_check = BRANCH_HALT_DELAY,
2809 .clkr = {
2810 .enable_reg = 0x77028,
2811 .enable_mask = BIT(0),
2812 .hw.init = &(struct clk_init_data){
2813 .name = "gcc_ufs_phy_tx_symbol_0_clk",
2814 .parent_hws = (const struct clk_hw*[]) {
2815 &gcc_ufs_phy_tx_symbol_0_clk_src.clkr.hw,
2816 },
2817 .num_parents = 1,
2818 .flags = CLK_SET_RATE_PARENT,
2819 .ops = &clk_branch2_ops,
2820 },
2821 },
2822};
2823
2824static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
2825 .halt_reg = 0x77068,
2826 .halt_check = BRANCH_HALT_VOTED,
2827 .hwcg_reg = 0x77068,
2828 .hwcg_bit = 1,
2829 .clkr = {
2830 .enable_reg = 0x77068,
2831 .enable_mask = BIT(0),
2832 .hw.init = &(struct clk_init_data){
2833 .name = "gcc_ufs_phy_unipro_core_clk",
2834 .parent_hws = (const struct clk_hw*[]) {
2835 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2836 },
2837 .num_parents = 1,
2838 .flags = CLK_SET_RATE_PARENT,
2839 .ops = &clk_branch2_ops,
2840 },
2841 },
2842};
2843
2844static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = {
2845 .halt_reg = 0x77068,
2846 .halt_check = BRANCH_HALT_VOTED,
2847 .hwcg_reg = 0x77068,
2848 .hwcg_bit = 1,
2849 .clkr = {
2850 .enable_reg = 0x77068,
2851 .enable_mask = BIT(1),
2852 .hw.init = &(struct clk_init_data){
2853 .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk",
2854 .parent_hws = (const struct clk_hw*[]) {
2855 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2856 },
2857 .num_parents = 1,
2858 .flags = CLK_SET_RATE_PARENT,
2859 .ops = &clk_branch2_ops,
2860 },
2861 },
2862};
2863
2864static struct clk_branch gcc_usb30_prim_master_clk = {
2865 .halt_reg = 0x39018,
2866 .halt_check = BRANCH_HALT,
2867 .clkr = {
2868 .enable_reg = 0x39018,
2869 .enable_mask = BIT(0),
2870 .hw.init = &(struct clk_init_data){
2871 .name = "gcc_usb30_prim_master_clk",
2872 .parent_hws = (const struct clk_hw*[]) {
2873 &gcc_usb30_prim_master_clk_src.clkr.hw,
2874 },
2875 .num_parents = 1,
2876 .flags = CLK_SET_RATE_PARENT,
2877 .ops = &clk_branch2_ops,
2878 },
2879 },
2880};
2881
2882static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
2883 .halt_reg = 0x39028,
2884 .halt_check = BRANCH_HALT,
2885 .clkr = {
2886 .enable_reg = 0x39028,
2887 .enable_mask = BIT(0),
2888 .hw.init = &(struct clk_init_data){
2889 .name = "gcc_usb30_prim_mock_utmi_clk",
2890 .parent_hws = (const struct clk_hw*[]) {
2891 &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,
2892 },
2893 .num_parents = 1,
2894 .flags = CLK_SET_RATE_PARENT,
2895 .ops = &clk_branch2_ops,
2896 },
2897 },
2898};
2899
2900static struct clk_branch gcc_usb30_prim_sleep_clk = {
2901 .halt_reg = 0x39024,
2902 .halt_check = BRANCH_HALT,
2903 .clkr = {
2904 .enable_reg = 0x39024,
2905 .enable_mask = BIT(0),
2906 .hw.init = &(struct clk_init_data){
2907 .name = "gcc_usb30_prim_sleep_clk",
2908 .ops = &clk_branch2_ops,
2909 },
2910 },
2911};
2912
2913static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
2914 .halt_reg = 0x39060,
2915 .halt_check = BRANCH_HALT,
2916 .clkr = {
2917 .enable_reg = 0x39060,
2918 .enable_mask = BIT(0),
2919 .hw.init = &(struct clk_init_data){
2920 .name = "gcc_usb3_prim_phy_aux_clk",
2921 .parent_hws = (const struct clk_hw*[]) {
2922 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2923 },
2924 .num_parents = 1,
2925 .flags = CLK_SET_RATE_PARENT,
2926 .ops = &clk_branch2_ops,
2927 },
2928 },
2929};
2930
2931static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
2932 .halt_reg = 0x39064,
2933 .halt_check = BRANCH_HALT,
2934 .clkr = {
2935 .enable_reg = 0x39064,
2936 .enable_mask = BIT(0),
2937 .hw.init = &(struct clk_init_data){
2938 .name = "gcc_usb3_prim_phy_com_aux_clk",
2939 .parent_hws = (const struct clk_hw*[]) {
2940 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2941 },
2942 .num_parents = 1,
2943 .flags = CLK_SET_RATE_PARENT,
2944 .ops = &clk_branch2_ops,
2945 },
2946 },
2947};
2948
2949static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
2950 .halt_reg = 0x39068,
2951 .halt_check = BRANCH_HALT_DELAY,
2952 .hwcg_reg = 0x39068,
2953 .hwcg_bit = 1,
2954 .clkr = {
2955 .enable_reg = 0x39068,
2956 .enable_mask = BIT(0),
2957 .hw.init = &(struct clk_init_data){
2958 .name = "gcc_usb3_prim_phy_pipe_clk",
2959 .parent_hws = (const struct clk_hw*[]) {
2960 &gcc_usb3_prim_phy_pipe_clk_src.clkr.hw,
2961 },
2962 .num_parents = 1,
2963 .flags = CLK_SET_RATE_PARENT,
2964 .ops = &clk_branch2_ops,
2965 },
2966 },
2967};
2968
2969static struct clk_branch gcc_video_axi0_clk = {
2970 .halt_reg = 0x32018,
2971 .halt_check = BRANCH_HALT_SKIP,
2972 .hwcg_reg = 0x32018,
2973 .hwcg_bit = 1,
2974 .clkr = {
2975 .enable_reg = 0x32018,
2976 .enable_mask = BIT(0),
2977 .hw.init = &(struct clk_init_data){
2978 .name = "gcc_video_axi0_clk",
2979 .ops = &clk_branch2_ops,
2980 },
2981 },
2982};
2983
2984static struct clk_branch gcc_video_axi1_clk = {
2985 .halt_reg = 0x32024,
2986 .halt_check = BRANCH_HALT_SKIP,
2987 .hwcg_reg = 0x32024,
2988 .hwcg_bit = 1,
2989 .clkr = {
2990 .enable_reg = 0x32024,
2991 .enable_mask = BIT(0),
2992 .hw.init = &(struct clk_init_data){
2993 .name = "gcc_video_axi1_clk",
2994 .ops = &clk_branch2_ops,
2995 },
2996 },
2997};
2998
2999static struct gdsc pcie_0_gdsc = {
3000 .gdscr = 0x6b004,
3001 .collapse_ctrl = 0x52020,
3002 .collapse_mask = BIT(0),
3003 .pd = {
3004 .name = "pcie_0_gdsc",
3005 },
3006 .pwrsts = PWRSTS_OFF_ON,
3007 .flags = VOTABLE | POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3008};
3009
3010static struct gdsc pcie_0_phy_gdsc = {
3011 .gdscr = 0x6c000,
3012 .collapse_ctrl = 0x52020,
3013 .collapse_mask = BIT(3),
3014 .pd = {
3015 .name = "pcie_0_phy_gdsc",
3016 },
3017 .pwrsts = PWRSTS_OFF_ON,
3018 .flags = VOTABLE | POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3019};
3020
3021static struct gdsc pcie_1_gdsc = {
3022 .gdscr = 0x8d004,
3023 .collapse_ctrl = 0x52020,
3024 .collapse_mask = BIT(1),
3025 .pd = {
3026 .name = "pcie_1_gdsc",
3027 },
3028 .pwrsts = PWRSTS_OFF_ON,
3029 .flags = VOTABLE | POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3030};
3031
3032static struct gdsc pcie_1_phy_gdsc = {
3033 .gdscr = 0x8e000,
3034 .collapse_ctrl = 0x52020,
3035 .collapse_mask = BIT(4),
3036 .pd = {
3037 .name = "pcie_1_phy_gdsc",
3038 },
3039 .pwrsts = PWRSTS_OFF_ON,
3040 .flags = VOTABLE | POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3041};
3042
3043static struct gdsc ufs_phy_gdsc = {
3044 .gdscr = 0x77004,
3045 .pd = {
3046 .name = "ufs_phy_gdsc",
3047 },
3048 .pwrsts = PWRSTS_OFF_ON,
3049 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3050};
3051
3052static struct gdsc ufs_mem_phy_gdsc = {
3053 .gdscr = 0x9e000,
3054 .pd = {
3055 .name = "ufs_mem_phy_gdsc",
3056 },
3057 .pwrsts = PWRSTS_OFF_ON,
3058 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3059};
3060
3061static struct gdsc usb30_prim_gdsc = {
3062 .gdscr = 0x39004,
3063 .pd = {
3064 .name = "usb30_prim_gdsc",
3065 },
3066 .pwrsts = PWRSTS_OFF_ON,
3067 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3068};
3069
3070static struct gdsc usb3_phy_gdsc = {
3071 .gdscr = 0x50018,
3072 .pd = {
3073 .name = "usb3_phy_gdsc",
3074 },
3075 .pwrsts = PWRSTS_OFF_ON,
3076 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
3077};
3078
3079static struct clk_regmap *gcc_sm8550_clocks[] = {
3080 [GCC_AGGRE_NOC_PCIE_AXI_CLK] = &gcc_aggre_noc_pcie_axi_clk.clkr,
3081 [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
3082 [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr,
3083 [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
3084 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3085 [GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,
3086 [GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr,
3087 [GCC_CFG_NOC_PCIE_ANOC_AHB_CLK] = &gcc_cfg_noc_pcie_anoc_ahb_clk.clkr,
3088 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
3089 [GCC_CNOC_PCIE_SF_AXI_CLK] = &gcc_cnoc_pcie_sf_axi_clk.clkr,
3090 [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
3091 [GCC_DDRSS_PCIE_SF_QTB_CLK] = &gcc_ddrss_pcie_sf_qtb_clk.clkr,
3092 [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
3093 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3094 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
3095 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3096 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
3097 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3098 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
3099 [GCC_GPLL0] = &gcc_gpll0.clkr,
3100 [GCC_GPLL0_OUT_EVEN] = &gcc_gpll0_out_even.clkr,
3101 [GCC_GPLL4] = &gcc_gpll4.clkr,
3102 [GCC_GPLL7] = &gcc_gpll7.clkr,
3103 [GCC_GPLL9] = &gcc_gpll9.clkr,
3104 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
3105 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
3106 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
3107 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
3108 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
3109 [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
3110 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
3111 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
3112 [GCC_PCIE_0_PHY_RCHNG_CLK] = &gcc_pcie_0_phy_rchng_clk.clkr,
3113 [GCC_PCIE_0_PHY_RCHNG_CLK_SRC] = &gcc_pcie_0_phy_rchng_clk_src.clkr,
3114 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
3115 [GCC_PCIE_0_PIPE_CLK_SRC] = &gcc_pcie_0_pipe_clk_src.clkr,
3116 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
3117 [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
3118 [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
3119 [GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr,
3120 [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
3121 [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
3122 [GCC_PCIE_1_PHY_AUX_CLK] = &gcc_pcie_1_phy_aux_clk.clkr,
3123 [GCC_PCIE_1_PHY_AUX_CLK_SRC] = &gcc_pcie_1_phy_aux_clk_src.clkr,
3124 [GCC_PCIE_1_PHY_RCHNG_CLK] = &gcc_pcie_1_phy_rchng_clk.clkr,
3125 [GCC_PCIE_1_PHY_RCHNG_CLK_SRC] = &gcc_pcie_1_phy_rchng_clk_src.clkr,
3126 [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
3127 [GCC_PCIE_1_PIPE_CLK_SRC] = &gcc_pcie_1_pipe_clk_src.clkr,
3128 [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
3129 [GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr,
3130 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3131 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
3132 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3133 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
3134 [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
3135 [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
3136 [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
3137 [GCC_QMIP_GPU_AHB_CLK] = &gcc_qmip_gpu_ahb_clk.clkr,
3138 [GCC_QMIP_PCIE_AHB_CLK] = &gcc_qmip_pcie_ahb_clk.clkr,
3139 [GCC_QMIP_VIDEO_CV_CPU_AHB_CLK] = &gcc_qmip_video_cv_cpu_ahb_clk.clkr,
3140 [GCC_QMIP_VIDEO_CVP_AHB_CLK] = &gcc_qmip_video_cvp_ahb_clk.clkr,
3141 [GCC_QMIP_VIDEO_V_CPU_AHB_CLK] = &gcc_qmip_video_v_cpu_ahb_clk.clkr,
3142 [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
3143 [GCC_QUPV3_I2C_CORE_CLK] = &gcc_qupv3_i2c_core_clk.clkr,
3144 [GCC_QUPV3_I2C_S0_CLK] = &gcc_qupv3_i2c_s0_clk.clkr,
3145 [GCC_QUPV3_I2C_S0_CLK_SRC] = &gcc_qupv3_i2c_s0_clk_src.clkr,
3146 [GCC_QUPV3_I2C_S1_CLK] = &gcc_qupv3_i2c_s1_clk.clkr,
3147 [GCC_QUPV3_I2C_S1_CLK_SRC] = &gcc_qupv3_i2c_s1_clk_src.clkr,
3148 [GCC_QUPV3_I2C_S2_CLK] = &gcc_qupv3_i2c_s2_clk.clkr,
3149 [GCC_QUPV3_I2C_S2_CLK_SRC] = &gcc_qupv3_i2c_s2_clk_src.clkr,
3150 [GCC_QUPV3_I2C_S3_CLK] = &gcc_qupv3_i2c_s3_clk.clkr,
3151 [GCC_QUPV3_I2C_S3_CLK_SRC] = &gcc_qupv3_i2c_s3_clk_src.clkr,
3152 [GCC_QUPV3_I2C_S4_CLK] = &gcc_qupv3_i2c_s4_clk.clkr,
3153 [GCC_QUPV3_I2C_S4_CLK_SRC] = &gcc_qupv3_i2c_s4_clk_src.clkr,
3154 [GCC_QUPV3_I2C_S5_CLK] = &gcc_qupv3_i2c_s5_clk.clkr,
3155 [GCC_QUPV3_I2C_S5_CLK_SRC] = &gcc_qupv3_i2c_s5_clk_src.clkr,
3156 [GCC_QUPV3_I2C_S6_CLK] = &gcc_qupv3_i2c_s6_clk.clkr,
3157 [GCC_QUPV3_I2C_S6_CLK_SRC] = &gcc_qupv3_i2c_s6_clk_src.clkr,
3158 [GCC_QUPV3_I2C_S7_CLK] = &gcc_qupv3_i2c_s7_clk.clkr,
3159 [GCC_QUPV3_I2C_S7_CLK_SRC] = &gcc_qupv3_i2c_s7_clk_src.clkr,
3160 [GCC_QUPV3_I2C_S8_CLK] = &gcc_qupv3_i2c_s8_clk.clkr,
3161 [GCC_QUPV3_I2C_S8_CLK_SRC] = &gcc_qupv3_i2c_s8_clk_src.clkr,
3162 [GCC_QUPV3_I2C_S9_CLK] = &gcc_qupv3_i2c_s9_clk.clkr,
3163 [GCC_QUPV3_I2C_S9_CLK_SRC] = &gcc_qupv3_i2c_s9_clk_src.clkr,
3164 [GCC_QUPV3_I2C_S_AHB_CLK] = &gcc_qupv3_i2c_s_ahb_clk.clkr,
3165 [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
3166 [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
3167 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
3168 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
3169 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
3170 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
3171 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
3172 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
3173 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
3174 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
3175 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
3176 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
3177 [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
3178 [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
3179 [GCC_QUPV3_WRAP1_S6_CLK] = &gcc_qupv3_wrap1_s6_clk.clkr,
3180 [GCC_QUPV3_WRAP1_S6_CLK_SRC] = &gcc_qupv3_wrap1_s6_clk_src.clkr,
3181 [GCC_QUPV3_WRAP1_S7_CLK] = &gcc_qupv3_wrap1_s7_clk.clkr,
3182 [GCC_QUPV3_WRAP1_S7_CLK_SRC] = &gcc_qupv3_wrap1_s7_clk_src.clkr,
3183 [GCC_QUPV3_WRAP2_CORE_2X_CLK] = &gcc_qupv3_wrap2_core_2x_clk.clkr,
3184 [GCC_QUPV3_WRAP2_CORE_CLK] = &gcc_qupv3_wrap2_core_clk.clkr,
3185 [GCC_QUPV3_WRAP2_S0_CLK] = &gcc_qupv3_wrap2_s0_clk.clkr,
3186 [GCC_QUPV3_WRAP2_S0_CLK_SRC] = &gcc_qupv3_wrap2_s0_clk_src.clkr,
3187 [GCC_QUPV3_WRAP2_S1_CLK] = &gcc_qupv3_wrap2_s1_clk.clkr,
3188 [GCC_QUPV3_WRAP2_S1_CLK_SRC] = &gcc_qupv3_wrap2_s1_clk_src.clkr,
3189 [GCC_QUPV3_WRAP2_S2_CLK] = &gcc_qupv3_wrap2_s2_clk.clkr,
3190 [GCC_QUPV3_WRAP2_S2_CLK_SRC] = &gcc_qupv3_wrap2_s2_clk_src.clkr,
3191 [GCC_QUPV3_WRAP2_S3_CLK] = &gcc_qupv3_wrap2_s3_clk.clkr,
3192 [GCC_QUPV3_WRAP2_S3_CLK_SRC] = &gcc_qupv3_wrap2_s3_clk_src.clkr,
3193 [GCC_QUPV3_WRAP2_S4_CLK] = &gcc_qupv3_wrap2_s4_clk.clkr,
3194 [GCC_QUPV3_WRAP2_S4_CLK_SRC] = &gcc_qupv3_wrap2_s4_clk_src.clkr,
3195 [GCC_QUPV3_WRAP2_S5_CLK] = &gcc_qupv3_wrap2_s5_clk.clkr,
3196 [GCC_QUPV3_WRAP2_S5_CLK_SRC] = &gcc_qupv3_wrap2_s5_clk_src.clkr,
3197 [GCC_QUPV3_WRAP2_S6_CLK] = &gcc_qupv3_wrap2_s6_clk.clkr,
3198 [GCC_QUPV3_WRAP2_S6_CLK_SRC] = &gcc_qupv3_wrap2_s6_clk_src.clkr,
3199 [GCC_QUPV3_WRAP2_S7_CLK] = &gcc_qupv3_wrap2_s7_clk.clkr,
3200 [GCC_QUPV3_WRAP2_S7_CLK_SRC] = &gcc_qupv3_wrap2_s7_clk_src.clkr,
3201 [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
3202 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
3203 [GCC_QUPV3_WRAP_2_M_AHB_CLK] = &gcc_qupv3_wrap_2_m_ahb_clk.clkr,
3204 [GCC_QUPV3_WRAP_2_S_AHB_CLK] = &gcc_qupv3_wrap_2_s_ahb_clk.clkr,
3205 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3206 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3207 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
3208 [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
3209 [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
3210 [GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr,
3211 [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
3212 [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
3213 [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
3214 [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr,
3215 [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
3216 [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
3217 [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] = &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr,
3218 [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
3219 [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
3220 [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr,
3221 [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
3222 [GCC_UFS_PHY_RX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_rx_symbol_0_clk_src.clkr,
3223 [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
3224 [GCC_UFS_PHY_RX_SYMBOL_1_CLK_SRC] = &gcc_ufs_phy_rx_symbol_1_clk_src.clkr,
3225 [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
3226 [GCC_UFS_PHY_TX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_tx_symbol_0_clk_src.clkr,
3227 [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
3228 [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_phy_unipro_core_clk_src.clkr,
3229 [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] = &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr,
3230 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
3231 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
3232 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
3233 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr,
3234 [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,
3235 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
3236 [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
3237 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
3238 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
3239 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
3240 [GCC_USB3_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb3_prim_phy_pipe_clk_src.clkr,
3241 [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
3242 [GCC_VIDEO_AXI1_CLK] = &gcc_video_axi1_clk.clkr,
3243};
3244
3245static const struct qcom_reset_map gcc_sm8550_resets[] = {
3246 [GCC_CAMERA_BCR] = { 0x26000 },
3247 [GCC_DISPLAY_BCR] = { 0x27000 },
3248 [GCC_GPU_BCR] = { 0x71000 },
3249 [GCC_PCIE_0_BCR] = { 0x6b000 },
3250 [GCC_PCIE_0_LINK_DOWN_BCR] = { 0x6c014 },
3251 [GCC_PCIE_0_NOCSR_COM_PHY_BCR] = { 0x6c020 },
3252 [GCC_PCIE_0_PHY_BCR] = { 0x6c01c },
3253 [GCC_PCIE_0_PHY_NOCSR_COM_PHY_BCR] = { 0x6c028 },
3254 [GCC_PCIE_1_BCR] = { 0x8d000 },
3255 [GCC_PCIE_1_LINK_DOWN_BCR] = { 0x8e014 },
3256 [GCC_PCIE_1_NOCSR_COM_PHY_BCR] = { 0x8e020 },
3257 [GCC_PCIE_1_PHY_BCR] = { 0x8e01c },
3258 [GCC_PCIE_1_PHY_NOCSR_COM_PHY_BCR] = { 0x8e024 },
3259 [GCC_PCIE_PHY_BCR] = { 0x6f000 },
3260 [GCC_PCIE_PHY_CFG_AHB_BCR] = { 0x6f00c },
3261 [GCC_PCIE_PHY_COM_BCR] = { 0x6f010 },
3262 [GCC_PDM_BCR] = { 0x33000 },
3263 [GCC_QUPV3_WRAPPER_1_BCR] = { 0x18000 },
3264 [GCC_QUPV3_WRAPPER_2_BCR] = { 0x1e000 },
3265 [GCC_QUPV3_WRAPPER_I2C_BCR] = { 0x17000 },
3266 [GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 },
3267 [GCC_QUSB2PHY_SEC_BCR] = { 0x12004 },
3268 [GCC_SDCC2_BCR] = { 0x14000 },
3269 [GCC_SDCC4_BCR] = { 0x16000 },
3270 [GCC_UFS_PHY_BCR] = { 0x77000 },
3271 [GCC_USB30_PRIM_BCR] = { 0x39000 },
3272 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x50008 },
3273 [GCC_USB3_DP_PHY_SEC_BCR] = { 0x50014 },
3274 [GCC_USB3_PHY_PRIM_BCR] = { 0x50000 },
3275 [GCC_USB3_PHY_SEC_BCR] = { 0x5000c },
3276 [GCC_USB3PHY_PHY_PRIM_BCR] = { 0x50004 },
3277 [GCC_USB3PHY_PHY_SEC_BCR] = { 0x50010 },
3278 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 },
3279 [GCC_VIDEO_AXI0_CLK_ARES] = { .reg = 0x32018, .bit = 2, .udelay = 1000 },
3280 [GCC_VIDEO_AXI1_CLK_ARES] = { .reg = 0x32024, .bit = 2, .udelay = 1000 },
3281 [GCC_VIDEO_BCR] = { 0x32000 },
3282};
3283
3284static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
3285 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
3286 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
3287 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),
3288 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
3289 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
3290 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
3291 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src),
3292 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s7_clk_src),
3293 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s0_clk_src),
3294 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s1_clk_src),
3295 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s2_clk_src),
3296 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s3_clk_src),
3297 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s4_clk_src),
3298 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s5_clk_src),
3299 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s6_clk_src),
3300 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s7_clk_src),
3301};
3302
3303static struct gdsc *gcc_sm8550_gdscs[] = {
3304 [PCIE_0_GDSC] = &pcie_0_gdsc,
3305 [PCIE_0_PHY_GDSC] = &pcie_0_phy_gdsc,
3306 [PCIE_1_GDSC] = &pcie_1_gdsc,
3307 [PCIE_1_PHY_GDSC] = &pcie_1_phy_gdsc,
3308 [UFS_PHY_GDSC] = &ufs_phy_gdsc,
3309 [UFS_MEM_PHY_GDSC] = &ufs_mem_phy_gdsc,
3310 [USB30_PRIM_GDSC] = &usb30_prim_gdsc,
3311 [USB3_PHY_GDSC] = &usb3_phy_gdsc,
3312};
3313
3314static const struct regmap_config gcc_sm8550_regmap_config = {
3315 .reg_bits = 32,
3316 .reg_stride = 4,
3317 .val_bits = 32,
3318 .max_register = 0x1f41f0,
3319 .fast_io = true,
3320};
3321
3322static const struct qcom_cc_desc gcc_sm8550_desc = {
3323 .config = &gcc_sm8550_regmap_config,
3324 .clks = gcc_sm8550_clocks,
3325 .num_clks = ARRAY_SIZE(gcc_sm8550_clocks),
3326 .resets = gcc_sm8550_resets,
3327 .num_resets = ARRAY_SIZE(gcc_sm8550_resets),
3328 .gdscs = gcc_sm8550_gdscs,
3329 .num_gdscs = ARRAY_SIZE(gcc_sm8550_gdscs),
3330};
3331
3332static const struct of_device_id gcc_sm8550_match_table[] = {
3333 { .compatible = "qcom,sm8550-gcc" },
3334 { }
3335};
3336MODULE_DEVICE_TABLE(of, gcc_sm8550_match_table);
3337
3338static int gcc_sm8550_probe(struct platform_device *pdev)
3339{
3340 struct regmap *regmap;
3341 int ret;
3342
3343 regmap = qcom_cc_map(pdev, desc: &gcc_sm8550_desc);
3344 if (IS_ERR(ptr: regmap))
3345 return PTR_ERR(ptr: regmap);
3346
3347 ret = qcom_cc_register_rcg_dfs(regmap, rcgs: gcc_dfs_clocks,
3348 ARRAY_SIZE(gcc_dfs_clocks));
3349 if (ret)
3350 return ret;
3351
3352 /* FORCE_MEM_CORE_ON for ufs phy ice core clocks */
3353 regmap_update_bits(map: regmap, reg: gcc_ufs_phy_ice_core_clk.halt_reg, BIT(14), BIT(14));
3354
3355 /* Keep some clocks always-on */
3356 qcom_branch_set_clk_en(regmap, cbcr: 0x26004); /* GCC_CAMERA_AHB_CLK */
3357 qcom_branch_set_clk_en(regmap, cbcr: 0x26028); /* GCC_CAMERA_XO_CLK */
3358 qcom_branch_set_clk_en(regmap, cbcr: 0x27004); /* GCC_DISP_AHB_CLK */
3359 qcom_branch_set_clk_en(regmap, cbcr: 0x27018); /* GCC_DISP_XO_CLK */
3360 qcom_branch_set_clk_en(regmap, cbcr: 0x71004); /* GCC_GPU_CFG_AHB_CLK */
3361 qcom_branch_set_clk_en(regmap, cbcr: 0x32004); /* GCC_VIDEO_AHB_CLK */
3362 qcom_branch_set_clk_en(regmap, cbcr: 0x32030); /* GCC_VIDEO_XO_CLK */
3363
3364 /* Clear GDSC_SLEEP_ENA_VOTE to stop votes being auto-removed in sleep. */
3365 regmap_write(map: regmap, reg: 0x52024, val: 0x0);
3366
3367 return qcom_cc_really_probe(pdev, desc: &gcc_sm8550_desc, regmap);
3368}
3369
3370static struct platform_driver gcc_sm8550_driver = {
3371 .probe = gcc_sm8550_probe,
3372 .driver = {
3373 .name = "gcc-sm8550",
3374 .of_match_table = gcc_sm8550_match_table,
3375 },
3376};
3377
3378static int __init gcc_sm8550_init(void)
3379{
3380 return platform_driver_register(&gcc_sm8550_driver);
3381}
3382subsys_initcall(gcc_sm8550_init);
3383
3384static void __exit gcc_sm8550_exit(void)
3385{
3386 platform_driver_unregister(&gcc_sm8550_driver);
3387}
3388module_exit(gcc_sm8550_exit);
3389
3390MODULE_DESCRIPTION("QTI GCC SM8550 Driver");
3391MODULE_LICENSE("GPL");
3392

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