Merge tag 'trace-v5.11-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt...
[linux/fpc-iii.git] / drivers / clk / qcom / gcc-sm8150.c
blob8e9b5b3cceaf7590a879e94f7be7d92098ee4e69
1 // SPDX-License-Identifier: GPL-2.0
2 // Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
4 #include <linux/kernel.h>
5 #include <linux/bitops.h>
6 #include <linux/err.h>
7 #include <linux/platform_device.h>
8 #include <linux/module.h>
9 #include <linux/of.h>
10 #include <linux/of_device.h>
11 #include <linux/clk-provider.h>
12 #include <linux/regmap.h>
13 #include <linux/reset-controller.h>
15 #include <dt-bindings/clock/qcom,gcc-sm8150.h>
17 #include "common.h"
18 #include "clk-alpha-pll.h"
19 #include "clk-branch.h"
20 #include "clk-pll.h"
21 #include "clk-rcg.h"
22 #include "clk-regmap.h"
23 #include "reset.h"
24 #include "gdsc.h"
26 enum {
27 P_BI_TCXO,
28 P_AUD_REF_CLK,
29 P_CORE_BI_PLL_TEST_SE,
30 P_GPLL0_OUT_EVEN,
31 P_GPLL0_OUT_MAIN,
32 P_GPLL7_OUT_MAIN,
33 P_GPLL9_OUT_MAIN,
34 P_SLEEP_CLK,
37 static struct clk_alpha_pll gpll0 = {
38 .offset = 0x0,
39 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
40 .clkr = {
41 .enable_reg = 0x52000,
42 .enable_mask = BIT(0),
43 .hw.init = &(struct clk_init_data){
44 .name = "gpll0",
45 .parent_data = &(const struct clk_parent_data){
46 .fw_name = "bi_tcxo",
47 .name = "bi_tcxo",
49 .num_parents = 1,
50 .ops = &clk_alpha_pll_fixed_trion_ops,
55 static const struct clk_div_table post_div_table_trion_even[] = {
56 { 0x0, 1 },
57 { 0x1, 2 },
58 { 0x3, 4 },
59 { 0x7, 8 },
60 { }
63 static struct clk_alpha_pll_postdiv gpll0_out_even = {
64 .offset = 0x0,
65 .post_div_shift = 8,
66 .post_div_table = post_div_table_trion_even,
67 .num_post_div = ARRAY_SIZE(post_div_table_trion_even),
68 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
69 .width = 4,
70 .clkr.hw.init = &(struct clk_init_data){
71 .name = "gpll0_out_even",
72 .parent_data = &(const struct clk_parent_data){
73 .hw = &gpll0.clkr.hw,
75 .num_parents = 1,
76 .ops = &clk_alpha_pll_postdiv_trion_ops,
80 static struct clk_alpha_pll gpll7 = {
81 .offset = 0x1a000,
82 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
83 .clkr = {
84 .enable_reg = 0x52000,
85 .enable_mask = BIT(7),
86 .hw.init = &(struct clk_init_data){
87 .name = "gpll7",
88 .parent_data = &(const struct clk_parent_data){
89 .fw_name = "bi_tcxo",
90 .name = "bi_tcxo",
92 .num_parents = 1,
93 .ops = &clk_alpha_pll_fixed_trion_ops,
98 static struct clk_alpha_pll gpll9 = {
99 .offset = 0x1c000,
100 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
101 .clkr = {
102 .enable_reg = 0x52000,
103 .enable_mask = BIT(9),
104 .hw.init = &(struct clk_init_data){
105 .name = "gpll9",
106 .parent_data = &(const struct clk_parent_data){
107 .fw_name = "bi_tcxo",
108 .name = "bi_tcxo",
110 .num_parents = 1,
111 .ops = &clk_alpha_pll_fixed_trion_ops,
116 static const struct parent_map gcc_parent_map_0[] = {
117 { P_BI_TCXO, 0 },
118 { P_GPLL0_OUT_MAIN, 1 },
119 { P_GPLL0_OUT_EVEN, 6 },
120 { P_CORE_BI_PLL_TEST_SE, 7 },
123 static const struct clk_parent_data gcc_parents_0[] = {
124 { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
125 { .hw = &gpll0.clkr.hw },
126 { .hw = &gpll0_out_even.clkr.hw },
127 { .fw_name = "core_bi_pll_test_se" },
130 static const struct parent_map gcc_parent_map_1[] = {
131 { P_BI_TCXO, 0 },
132 { P_GPLL0_OUT_MAIN, 1 },
133 { P_SLEEP_CLK, 5 },
134 { P_GPLL0_OUT_EVEN, 6 },
135 { P_CORE_BI_PLL_TEST_SE, 7 },
138 static const struct clk_parent_data gcc_parents_1[] = {
139 { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
140 { .hw = &gpll0.clkr.hw },
141 { .fw_name = "sleep_clk", .name = "sleep_clk" },
142 { .hw = &gpll0_out_even.clkr.hw },
143 { .fw_name = "core_bi_pll_test_se" },
146 static const struct parent_map gcc_parent_map_2[] = {
147 { P_BI_TCXO, 0 },
148 { P_SLEEP_CLK, 5 },
149 { P_CORE_BI_PLL_TEST_SE, 7 },
152 static const struct clk_parent_data gcc_parents_2[] = {
153 { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
154 { .fw_name = "sleep_clk", .name = "sleep_clk" },
155 { .fw_name = "core_bi_pll_test_se" },
158 static const struct parent_map gcc_parent_map_3[] = {
159 { P_BI_TCXO, 0 },
160 { P_GPLL0_OUT_MAIN, 1 },
161 { P_CORE_BI_PLL_TEST_SE, 7 },
164 static const struct clk_parent_data gcc_parents_3[] = {
165 { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
166 { .hw = &gpll0.clkr.hw },
167 { .fw_name = "core_bi_pll_test_se"},
170 static const struct parent_map gcc_parent_map_4[] = {
171 { P_BI_TCXO, 0 },
172 { P_CORE_BI_PLL_TEST_SE, 7 },
175 static const struct clk_parent_data gcc_parents_4[] = {
176 { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
177 { .fw_name = "core_bi_pll_test_se" },
180 static const struct parent_map gcc_parent_map_5[] = {
181 { P_BI_TCXO, 0 },
182 { P_GPLL0_OUT_MAIN, 1 },
183 { P_GPLL7_OUT_MAIN, 3 },
184 { P_GPLL0_OUT_EVEN, 6 },
185 { P_CORE_BI_PLL_TEST_SE, 7 },
188 static const struct clk_parent_data gcc_parents_5[] = {
189 { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
190 { .hw = &gpll0.clkr.hw },
191 { .hw = &gpll7.clkr.hw },
192 { .hw = &gpll0_out_even.clkr.hw },
193 { .fw_name = "core_bi_pll_test_se" },
196 static const struct parent_map gcc_parent_map_6[] = {
197 { P_BI_TCXO, 0 },
198 { P_GPLL0_OUT_MAIN, 1 },
199 { P_GPLL9_OUT_MAIN, 2 },
200 { P_GPLL0_OUT_EVEN, 6 },
201 { P_CORE_BI_PLL_TEST_SE, 7 },
204 static const struct clk_parent_data gcc_parents_6[] = {
205 { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
206 { .hw = &gpll0.clkr.hw },
207 { .hw = &gpll9.clkr.hw },
208 { .hw = &gpll0_out_even.clkr.hw },
209 { .fw_name = "core_bi_pll_test_se" },
212 static const struct parent_map gcc_parent_map_7[] = {
213 { P_BI_TCXO, 0 },
214 { P_GPLL0_OUT_MAIN, 1 },
215 { P_AUD_REF_CLK, 2 },
216 { P_GPLL0_OUT_EVEN, 6 },
217 { P_CORE_BI_PLL_TEST_SE, 7 },
220 static const struct clk_parent_data gcc_parents_7[] = {
221 { .fw_name = "bi_tcxo", .name = "bi_tcxo" },
222 { .hw = &gpll0.clkr.hw },
223 { .fw_name = "aud_ref_clk", .name = "aud_ref_clk" },
224 { .hw = &gpll0_out_even.clkr.hw },
225 { .fw_name = "core_bi_pll_test_se" },
228 static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src[] = {
229 F(19200000, P_BI_TCXO, 1, 0, 0),
230 F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
231 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
235 static struct clk_rcg2 gcc_cpuss_ahb_clk_src = {
236 .cmd_rcgr = 0x48014,
237 .mnd_width = 0,
238 .hid_width = 5,
239 .parent_map = gcc_parent_map_0,
240 .freq_tbl = ftbl_gcc_cpuss_ahb_clk_src,
241 .clkr.hw.init = &(struct clk_init_data){
242 .name = "gcc_cpuss_ahb_clk_src",
243 .parent_data = gcc_parents_0,
244 .num_parents = 4,
245 .flags = CLK_SET_RATE_PARENT,
246 .ops = &clk_rcg2_ops,
250 static const struct freq_tbl ftbl_gcc_emac_ptp_clk_src[] = {
251 F(19200000, P_BI_TCXO, 1, 0, 0),
252 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
253 F(125000000, P_GPLL7_OUT_MAIN, 4, 0, 0),
254 F(250000000, P_GPLL7_OUT_MAIN, 2, 0, 0),
258 static struct clk_rcg2 gcc_emac_ptp_clk_src = {
259 .cmd_rcgr = 0x6038,
260 .mnd_width = 0,
261 .hid_width = 5,
262 .parent_map = gcc_parent_map_5,
263 .freq_tbl = ftbl_gcc_emac_ptp_clk_src,
264 .clkr.hw.init = &(struct clk_init_data){
265 .name = "gcc_emac_ptp_clk_src",
266 .parent_data = gcc_parents_5,
267 .num_parents = 5,
268 .flags = CLK_SET_RATE_PARENT,
269 .ops = &clk_rcg2_ops,
273 static const struct freq_tbl ftbl_gcc_emac_rgmii_clk_src[] = {
274 F(2500000, P_BI_TCXO, 1, 25, 192),
275 F(5000000, P_BI_TCXO, 1, 25, 96),
276 F(19200000, P_BI_TCXO, 1, 0, 0),
277 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
278 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
279 F(125000000, P_GPLL7_OUT_MAIN, 4, 0, 0),
280 F(250000000, P_GPLL7_OUT_MAIN, 2, 0, 0),
284 static struct clk_rcg2 gcc_emac_rgmii_clk_src = {
285 .cmd_rcgr = 0x601c,
286 .mnd_width = 8,
287 .hid_width = 5,
288 .parent_map = gcc_parent_map_5,
289 .freq_tbl = ftbl_gcc_emac_rgmii_clk_src,
290 .clkr.hw.init = &(struct clk_init_data){
291 .name = "gcc_emac_rgmii_clk_src",
292 .parent_data = gcc_parents_5,
293 .num_parents = 5,
294 .flags = CLK_SET_RATE_PARENT,
295 .ops = &clk_rcg2_ops,
299 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
300 F(19200000, P_BI_TCXO, 1, 0, 0),
301 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
302 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
303 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
304 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
308 static struct clk_rcg2 gcc_gp1_clk_src = {
309 .cmd_rcgr = 0x64004,
310 .mnd_width = 8,
311 .hid_width = 5,
312 .parent_map = gcc_parent_map_1,
313 .freq_tbl = ftbl_gcc_gp1_clk_src,
314 .clkr.hw.init = &(struct clk_init_data){
315 .name = "gcc_gp1_clk_src",
316 .parent_data = gcc_parents_1,
317 .num_parents = 5,
318 .flags = CLK_SET_RATE_PARENT,
319 .ops = &clk_rcg2_ops,
323 static struct clk_rcg2 gcc_gp2_clk_src = {
324 .cmd_rcgr = 0x65004,
325 .mnd_width = 8,
326 .hid_width = 5,
327 .parent_map = gcc_parent_map_1,
328 .freq_tbl = ftbl_gcc_gp1_clk_src,
329 .clkr.hw.init = &(struct clk_init_data){
330 .name = "gcc_gp2_clk_src",
331 .parent_data = gcc_parents_1,
332 .num_parents = 5,
333 .flags = CLK_SET_RATE_PARENT,
334 .ops = &clk_rcg2_ops,
338 static struct clk_rcg2 gcc_gp3_clk_src = {
339 .cmd_rcgr = 0x66004,
340 .mnd_width = 8,
341 .hid_width = 5,
342 .parent_map = gcc_parent_map_1,
343 .freq_tbl = ftbl_gcc_gp1_clk_src,
344 .clkr.hw.init = &(struct clk_init_data){
345 .name = "gcc_gp3_clk_src",
346 .parent_data = gcc_parents_1,
347 .num_parents = 5,
348 .flags = CLK_SET_RATE_PARENT,
349 .ops = &clk_rcg2_ops,
353 static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
354 F(9600000, P_BI_TCXO, 2, 0, 0),
355 F(19200000, P_BI_TCXO, 1, 0, 0),
359 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
360 .cmd_rcgr = 0x6b02c,
361 .mnd_width = 16,
362 .hid_width = 5,
363 .parent_map = gcc_parent_map_2,
364 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
365 .clkr.hw.init = &(struct clk_init_data){
366 .name = "gcc_pcie_0_aux_clk_src",
367 .parent_data = gcc_parents_2,
368 .num_parents = 3,
369 .flags = CLK_SET_RATE_PARENT,
370 .ops = &clk_rcg2_ops,
374 static struct clk_rcg2 gcc_pcie_1_aux_clk_src = {
375 .cmd_rcgr = 0x8d02c,
376 .mnd_width = 16,
377 .hid_width = 5,
378 .parent_map = gcc_parent_map_2,
379 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
380 .clkr.hw.init = &(struct clk_init_data){
381 .name = "gcc_pcie_1_aux_clk_src",
382 .parent_data = gcc_parents_2,
383 .num_parents = 3,
384 .flags = CLK_SET_RATE_PARENT,
385 .ops = &clk_rcg2_ops,
389 static const struct freq_tbl ftbl_gcc_pcie_phy_refgen_clk_src[] = {
390 F(19200000, P_BI_TCXO, 1, 0, 0),
391 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
395 static struct clk_rcg2 gcc_pcie_phy_refgen_clk_src = {
396 .cmd_rcgr = 0x6f014,
397 .mnd_width = 0,
398 .hid_width = 5,
399 .parent_map = gcc_parent_map_0,
400 .freq_tbl = ftbl_gcc_pcie_phy_refgen_clk_src,
401 .clkr.hw.init = &(struct clk_init_data){
402 .name = "gcc_pcie_phy_refgen_clk_src",
403 .parent_data = gcc_parents_0,
404 .num_parents = 4,
405 .flags = CLK_SET_RATE_PARENT,
406 .ops = &clk_rcg2_ops,
410 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
411 F(9600000, P_BI_TCXO, 2, 0, 0),
412 F(19200000, P_BI_TCXO, 1, 0, 0),
413 F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
417 static struct clk_rcg2 gcc_pdm2_clk_src = {
418 .cmd_rcgr = 0x33010,
419 .mnd_width = 0,
420 .hid_width = 5,
421 .parent_map = gcc_parent_map_0,
422 .freq_tbl = ftbl_gcc_pdm2_clk_src,
423 .clkr.hw.init = &(struct clk_init_data){
424 .name = "gcc_pdm2_clk_src",
425 .parent_data = gcc_parents_0,
426 .num_parents = 4,
427 .flags = CLK_SET_RATE_PARENT,
428 .ops = &clk_rcg2_ops,
432 static const struct freq_tbl ftbl_gcc_qspi_core_clk_src[] = {
433 F(19200000, P_BI_TCXO, 1, 0, 0),
434 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
435 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
436 F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
440 static struct clk_rcg2 gcc_qspi_core_clk_src = {
441 .cmd_rcgr = 0x4b008,
442 .mnd_width = 0,
443 .hid_width = 5,
444 .parent_map = gcc_parent_map_0,
445 .freq_tbl = ftbl_gcc_qspi_core_clk_src,
446 .clkr.hw.init = &(struct clk_init_data){
447 .name = "gcc_qspi_core_clk_src",
448 .parent_data = gcc_parents_0,
449 .num_parents = 4,
450 .flags = CLK_SET_RATE_PARENT,
451 .ops = &clk_rcg2_ops,
455 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
456 F(7372800, P_GPLL0_OUT_EVEN, 1, 384, 15625),
457 F(14745600, P_GPLL0_OUT_EVEN, 1, 768, 15625),
458 F(19200000, P_BI_TCXO, 1, 0, 0),
459 F(29491200, P_GPLL0_OUT_EVEN, 1, 1536, 15625),
460 F(32000000, P_GPLL0_OUT_EVEN, 1, 8, 75),
461 F(48000000, P_GPLL0_OUT_EVEN, 1, 4, 25),
462 F(64000000, P_GPLL0_OUT_EVEN, 1, 16, 75),
463 F(80000000, P_GPLL0_OUT_EVEN, 1, 4, 15),
464 F(96000000, P_GPLL0_OUT_EVEN, 1, 8, 25),
465 F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
466 F(102400000, P_GPLL0_OUT_EVEN, 1, 128, 375),
467 F(112000000, P_GPLL0_OUT_EVEN, 1, 28, 75),
468 F(117964800, P_GPLL0_OUT_EVEN, 1, 6144, 15625),
469 F(120000000, P_GPLL0_OUT_EVEN, 2.5, 0, 0),
470 F(128000000, P_GPLL0_OUT_MAIN, 1, 16, 75),
474 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
475 .cmd_rcgr = 0x17148,
476 .mnd_width = 16,
477 .hid_width = 5,
478 .parent_map = gcc_parent_map_0,
479 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
480 .clkr.hw.init = &(struct clk_init_data){
481 .name = "gcc_qupv3_wrap0_s0_clk_src",
482 .parent_data = gcc_parents_0,
483 .num_parents = 4,
484 .flags = CLK_SET_RATE_PARENT,
485 .ops = &clk_rcg2_ops,
489 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
490 .cmd_rcgr = 0x17278,
491 .mnd_width = 16,
492 .hid_width = 5,
493 .parent_map = gcc_parent_map_0,
494 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
495 .clkr.hw.init = &(struct clk_init_data){
496 .name = "gcc_qupv3_wrap0_s1_clk_src",
497 .parent_data = gcc_parents_0,
498 .num_parents = 4,
499 .flags = CLK_SET_RATE_PARENT,
500 .ops = &clk_rcg2_ops,
504 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
505 .cmd_rcgr = 0x173a8,
506 .mnd_width = 16,
507 .hid_width = 5,
508 .parent_map = gcc_parent_map_0,
509 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
510 .clkr.hw.init = &(struct clk_init_data){
511 .name = "gcc_qupv3_wrap0_s2_clk_src",
512 .parent_data = gcc_parents_0,
513 .num_parents = 4,
514 .flags = CLK_SET_RATE_PARENT,
515 .ops = &clk_rcg2_ops,
519 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
520 .cmd_rcgr = 0x174d8,
521 .mnd_width = 16,
522 .hid_width = 5,
523 .parent_map = gcc_parent_map_0,
524 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
525 .clkr.hw.init = &(struct clk_init_data){
526 .name = "gcc_qupv3_wrap0_s3_clk_src",
527 .parent_data = gcc_parents_0,
528 .num_parents = 4,
529 .flags = CLK_SET_RATE_PARENT,
530 .ops = &clk_rcg2_ops,
534 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
535 .cmd_rcgr = 0x17608,
536 .mnd_width = 16,
537 .hid_width = 5,
538 .parent_map = gcc_parent_map_0,
539 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
540 .clkr.hw.init = &(struct clk_init_data){
541 .name = "gcc_qupv3_wrap0_s4_clk_src",
542 .parent_data = gcc_parents_0,
543 .num_parents = 4,
544 .flags = CLK_SET_RATE_PARENT,
545 .ops = &clk_rcg2_ops,
549 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
550 .cmd_rcgr = 0x17738,
551 .mnd_width = 16,
552 .hid_width = 5,
553 .parent_map = gcc_parent_map_0,
554 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
555 .clkr.hw.init = &(struct clk_init_data){
556 .name = "gcc_qupv3_wrap0_s5_clk_src",
557 .parent_data = gcc_parents_0,
558 .num_parents = 4,
559 .flags = CLK_SET_RATE_PARENT,
560 .ops = &clk_rcg2_ops,
564 static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
565 .cmd_rcgr = 0x17868,
566 .mnd_width = 16,
567 .hid_width = 5,
568 .parent_map = gcc_parent_map_0,
569 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
570 .clkr.hw.init = &(struct clk_init_data){
571 .name = "gcc_qupv3_wrap0_s6_clk_src",
572 .parent_data = gcc_parents_0,
573 .num_parents = 4,
574 .flags = CLK_SET_RATE_PARENT,
575 .ops = &clk_rcg2_ops,
579 static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = {
580 .cmd_rcgr = 0x17998,
581 .mnd_width = 16,
582 .hid_width = 5,
583 .parent_map = gcc_parent_map_0,
584 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
585 .clkr.hw.init = &(struct clk_init_data){
586 .name = "gcc_qupv3_wrap0_s7_clk_src",
587 .parent_data = gcc_parents_0,
588 .num_parents = 4,
589 .flags = CLK_SET_RATE_PARENT,
590 .ops = &clk_rcg2_ops,
594 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
595 .cmd_rcgr = 0x18148,
596 .mnd_width = 16,
597 .hid_width = 5,
598 .parent_map = gcc_parent_map_0,
599 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
600 .clkr.hw.init = &(struct clk_init_data){
601 .name = "gcc_qupv3_wrap1_s0_clk_src",
602 .parent_data = gcc_parents_0,
603 .num_parents = 4,
604 .flags = CLK_SET_RATE_PARENT,
605 .ops = &clk_rcg2_ops,
609 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
610 .cmd_rcgr = 0x18278,
611 .mnd_width = 16,
612 .hid_width = 5,
613 .parent_map = gcc_parent_map_0,
614 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
615 .clkr.hw.init = &(struct clk_init_data){
616 .name = "gcc_qupv3_wrap1_s1_clk_src",
617 .parent_data = gcc_parents_0,
618 .num_parents = 4,
619 .flags = CLK_SET_RATE_PARENT,
620 .ops = &clk_rcg2_ops,
624 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
625 .cmd_rcgr = 0x183a8,
626 .mnd_width = 16,
627 .hid_width = 5,
628 .parent_map = gcc_parent_map_0,
629 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
630 .clkr.hw.init = &(struct clk_init_data){
631 .name = "gcc_qupv3_wrap1_s2_clk_src",
632 .parent_data = gcc_parents_0,
633 .num_parents = 4,
634 .flags = CLK_SET_RATE_PARENT,
635 .ops = &clk_rcg2_ops,
639 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
640 .cmd_rcgr = 0x184d8,
641 .mnd_width = 16,
642 .hid_width = 5,
643 .parent_map = gcc_parent_map_0,
644 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
645 .clkr.hw.init = &(struct clk_init_data){
646 .name = "gcc_qupv3_wrap1_s3_clk_src",
647 .parent_data = gcc_parents_0,
648 .num_parents = 4,
649 .flags = CLK_SET_RATE_PARENT,
650 .ops = &clk_rcg2_ops,
654 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
655 .cmd_rcgr = 0x18608,
656 .mnd_width = 16,
657 .hid_width = 5,
658 .parent_map = gcc_parent_map_0,
659 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
660 .clkr.hw.init = &(struct clk_init_data){
661 .name = "gcc_qupv3_wrap1_s4_clk_src",
662 .parent_data = gcc_parents_0,
663 .num_parents = 4,
664 .flags = CLK_SET_RATE_PARENT,
665 .ops = &clk_rcg2_ops,
669 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
670 .cmd_rcgr = 0x18738,
671 .mnd_width = 16,
672 .hid_width = 5,
673 .parent_map = gcc_parent_map_0,
674 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
675 .clkr.hw.init = &(struct clk_init_data){
676 .name = "gcc_qupv3_wrap1_s5_clk_src",
677 .parent_data = gcc_parents_0,
678 .num_parents = 4,
679 .flags = CLK_SET_RATE_PARENT,
680 .ops = &clk_rcg2_ops,
684 static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = {
685 .cmd_rcgr = 0x1e148,
686 .mnd_width = 16,
687 .hid_width = 5,
688 .parent_map = gcc_parent_map_0,
689 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
690 .clkr.hw.init = &(struct clk_init_data){
691 .name = "gcc_qupv3_wrap2_s0_clk_src",
692 .parent_data = gcc_parents_0,
693 .num_parents = 4,
694 .flags = CLK_SET_RATE_PARENT,
695 .ops = &clk_rcg2_ops,
699 static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = {
700 .cmd_rcgr = 0x1e278,
701 .mnd_width = 16,
702 .hid_width = 5,
703 .parent_map = gcc_parent_map_0,
704 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
705 .clkr.hw.init = &(struct clk_init_data){
706 .name = "gcc_qupv3_wrap2_s1_clk_src",
707 .parent_data = gcc_parents_0,
708 .num_parents = 4,
709 .flags = CLK_SET_RATE_PARENT,
710 .ops = &clk_rcg2_ops,
714 static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src = {
715 .cmd_rcgr = 0x1e3a8,
716 .mnd_width = 16,
717 .hid_width = 5,
718 .parent_map = gcc_parent_map_0,
719 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
720 .clkr.hw.init = &(struct clk_init_data){
721 .name = "gcc_qupv3_wrap2_s2_clk_src",
722 .parent_data = gcc_parents_0,
723 .num_parents = 4,
724 .flags = CLK_SET_RATE_PARENT,
725 .ops = &clk_rcg2_ops,
729 static struct clk_rcg2 gcc_qupv3_wrap2_s3_clk_src = {
730 .cmd_rcgr = 0x1e4d8,
731 .mnd_width = 16,
732 .hid_width = 5,
733 .parent_map = gcc_parent_map_0,
734 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
735 .clkr.hw.init = &(struct clk_init_data){
736 .name = "gcc_qupv3_wrap2_s3_clk_src",
737 .parent_data = gcc_parents_0,
738 .num_parents = 4,
739 .flags = CLK_SET_RATE_PARENT,
740 .ops = &clk_rcg2_ops,
744 static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = {
745 .cmd_rcgr = 0x1e608,
746 .mnd_width = 16,
747 .hid_width = 5,
748 .parent_map = gcc_parent_map_0,
749 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
750 .clkr.hw.init = &(struct clk_init_data){
751 .name = "gcc_qupv3_wrap2_s4_clk_src",
752 .parent_data = gcc_parents_0,
753 .num_parents = 4,
754 .flags = CLK_SET_RATE_PARENT,
755 .ops = &clk_rcg2_ops,
759 static struct clk_rcg2 gcc_qupv3_wrap2_s5_clk_src = {
760 .cmd_rcgr = 0x1e738,
761 .mnd_width = 16,
762 .hid_width = 5,
763 .parent_map = gcc_parent_map_0,
764 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
765 .clkr.hw.init = &(struct clk_init_data){
766 .name = "gcc_qupv3_wrap2_s5_clk_src",
767 .parent_data = gcc_parents_0,
768 .num_parents = 4,
769 .flags = CLK_SET_RATE_PARENT,
770 .ops = &clk_rcg2_ops,
774 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
775 F(400000, P_BI_TCXO, 12, 1, 4),
776 F(9600000, P_BI_TCXO, 2, 0, 0),
777 F(19200000, P_BI_TCXO, 1, 0, 0),
778 F(25000000, P_GPLL0_OUT_MAIN, 12, 1, 2),
779 F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
780 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
781 F(202000000, P_GPLL9_OUT_MAIN, 4, 0, 0),
785 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
786 .cmd_rcgr = 0x1400c,
787 .mnd_width = 8,
788 .hid_width = 5,
789 .parent_map = gcc_parent_map_6,
790 .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
791 .clkr.hw.init = &(struct clk_init_data){
792 .name = "gcc_sdcc2_apps_clk_src",
793 .parent_data = gcc_parents_6,
794 .num_parents = 5,
795 .flags = CLK_SET_RATE_PARENT,
796 .ops = &clk_rcg2_floor_ops,
800 static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = {
801 F(400000, P_BI_TCXO, 12, 1, 4),
802 F(9600000, P_BI_TCXO, 2, 0, 0),
803 F(19200000, P_BI_TCXO, 1, 0, 0),
804 F(25000000, P_GPLL0_OUT_MAIN, 12, 1, 2),
805 F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
806 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
810 static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {
811 .cmd_rcgr = 0x1600c,
812 .mnd_width = 8,
813 .hid_width = 5,
814 .parent_map = gcc_parent_map_3,
815 .freq_tbl = ftbl_gcc_sdcc4_apps_clk_src,
816 .clkr.hw.init = &(struct clk_init_data){
817 .name = "gcc_sdcc4_apps_clk_src",
818 .parent_data = gcc_parents_3,
819 .num_parents = 3,
820 .flags = CLK_SET_RATE_PARENT,
821 .ops = &clk_rcg2_floor_ops,
825 static const struct freq_tbl ftbl_gcc_tsif_ref_clk_src[] = {
826 F(105495, P_BI_TCXO, 2, 1, 91),
830 static struct clk_rcg2 gcc_tsif_ref_clk_src = {
831 .cmd_rcgr = 0x36010,
832 .mnd_width = 8,
833 .hid_width = 5,
834 .parent_map = gcc_parent_map_7,
835 .freq_tbl = ftbl_gcc_tsif_ref_clk_src,
836 .clkr.hw.init = &(struct clk_init_data){
837 .name = "gcc_tsif_ref_clk_src",
838 .parent_data = gcc_parents_7,
839 .num_parents = 5,
840 .flags = CLK_SET_RATE_PARENT,
841 .ops = &clk_rcg2_ops,
845 static const struct freq_tbl ftbl_gcc_ufs_card_axi_clk_src[] = {
846 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
847 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
848 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
849 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
850 F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
854 static struct clk_rcg2 gcc_ufs_card_axi_clk_src = {
855 .cmd_rcgr = 0x75020,
856 .mnd_width = 8,
857 .hid_width = 5,
858 .parent_map = gcc_parent_map_0,
859 .freq_tbl = ftbl_gcc_ufs_card_axi_clk_src,
860 .clkr.hw.init = &(struct clk_init_data){
861 .name = "gcc_ufs_card_axi_clk_src",
862 .parent_data = gcc_parents_0,
863 .num_parents = 4,
864 .flags = CLK_SET_RATE_PARENT,
865 .ops = &clk_rcg2_ops,
869 static const struct freq_tbl ftbl_gcc_ufs_card_ice_core_clk_src[] = {
870 F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
871 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
872 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
873 F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
877 static struct clk_rcg2 gcc_ufs_card_ice_core_clk_src = {
878 .cmd_rcgr = 0x75060,
879 .mnd_width = 0,
880 .hid_width = 5,
881 .parent_map = gcc_parent_map_0,
882 .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
883 .clkr.hw.init = &(struct clk_init_data){
884 .name = "gcc_ufs_card_ice_core_clk_src",
885 .parent_data = gcc_parents_0,
886 .num_parents = 4,
887 .flags = CLK_SET_RATE_PARENT,
888 .ops = &clk_rcg2_ops,
892 static const struct freq_tbl ftbl_gcc_ufs_card_phy_aux_clk_src[] = {
893 F(19200000, P_BI_TCXO, 1, 0, 0),
897 static struct clk_rcg2 gcc_ufs_card_phy_aux_clk_src = {
898 .cmd_rcgr = 0x75094,
899 .mnd_width = 0,
900 .hid_width = 5,
901 .parent_map = gcc_parent_map_4,
902 .freq_tbl = ftbl_gcc_ufs_card_phy_aux_clk_src,
903 .clkr.hw.init = &(struct clk_init_data){
904 .name = "gcc_ufs_card_phy_aux_clk_src",
905 .parent_data = gcc_parents_4,
906 .num_parents = 2,
907 .flags = CLK_SET_RATE_PARENT,
908 .ops = &clk_rcg2_ops,
912 static const struct freq_tbl ftbl_gcc_ufs_card_unipro_core_clk_src[] = {
913 F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
914 F(75000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
915 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
919 static struct clk_rcg2 gcc_ufs_card_unipro_core_clk_src = {
920 .cmd_rcgr = 0x75078,
921 .mnd_width = 0,
922 .hid_width = 5,
923 .parent_map = gcc_parent_map_0,
924 .freq_tbl = ftbl_gcc_ufs_card_unipro_core_clk_src,
925 .clkr.hw.init = &(struct clk_init_data){
926 .name = "gcc_ufs_card_unipro_core_clk_src",
927 .parent_data = gcc_parents_0,
928 .num_parents = 4,
929 .flags = CLK_SET_RATE_PARENT,
930 .ops = &clk_rcg2_ops,
934 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
935 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
936 F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
937 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
938 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
939 F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
943 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
944 .cmd_rcgr = 0x77020,
945 .mnd_width = 8,
946 .hid_width = 5,
947 .parent_map = gcc_parent_map_0,
948 .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
949 .clkr.hw.init = &(struct clk_init_data){
950 .name = "gcc_ufs_phy_axi_clk_src",
951 .parent_data = gcc_parents_0,
952 .num_parents = 4,
953 .flags = CLK_SET_RATE_PARENT,
954 .ops = &clk_rcg2_ops,
958 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
959 .cmd_rcgr = 0x77060,
960 .mnd_width = 0,
961 .hid_width = 5,
962 .parent_map = gcc_parent_map_0,
963 .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
964 .clkr.hw.init = &(struct clk_init_data){
965 .name = "gcc_ufs_phy_ice_core_clk_src",
966 .parent_data = gcc_parents_0,
967 .num_parents = 4,
968 .flags = CLK_SET_RATE_PARENT,
969 .ops = &clk_rcg2_ops,
973 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
974 .cmd_rcgr = 0x77094,
975 .mnd_width = 0,
976 .hid_width = 5,
977 .parent_map = gcc_parent_map_4,
978 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
979 .clkr.hw.init = &(struct clk_init_data){
980 .name = "gcc_ufs_phy_phy_aux_clk_src",
981 .parent_data = gcc_parents_4,
982 .num_parents = 2,
983 .flags = CLK_SET_RATE_PARENT,
984 .ops = &clk_rcg2_ops,
988 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
989 .cmd_rcgr = 0x77078,
990 .mnd_width = 0,
991 .hid_width = 5,
992 .parent_map = gcc_parent_map_0,
993 .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
994 .clkr.hw.init = &(struct clk_init_data){
995 .name = "gcc_ufs_phy_unipro_core_clk_src",
996 .parent_data = gcc_parents_0,
997 .num_parents = 4,
998 .flags = CLK_SET_RATE_PARENT,
999 .ops = &clk_rcg2_ops,
1003 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
1004 F(33333333, P_GPLL0_OUT_EVEN, 9, 0, 0),
1005 F(66666667, P_GPLL0_OUT_EVEN, 4.5, 0, 0),
1006 F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
1007 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
1008 F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
1012 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1013 .cmd_rcgr = 0xf01c,
1014 .mnd_width = 8,
1015 .hid_width = 5,
1016 .parent_map = gcc_parent_map_0,
1017 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1018 .clkr.hw.init = &(struct clk_init_data){
1019 .name = "gcc_usb30_prim_master_clk_src",
1020 .parent_data = gcc_parents_0,
1021 .num_parents = 4,
1022 .flags = CLK_SET_RATE_PARENT,
1023 .ops = &clk_rcg2_ops,
1027 static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {
1028 F(19200000, P_BI_TCXO, 1, 0, 0),
1029 F(20000000, P_GPLL0_OUT_EVEN, 15, 0, 0),
1030 F(60000000, P_GPLL0_OUT_EVEN, 5, 0, 0),
1034 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1035 .cmd_rcgr = 0xf034,
1036 .mnd_width = 0,
1037 .hid_width = 5,
1038 .parent_map = gcc_parent_map_0,
1039 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1040 .clkr.hw.init = &(struct clk_init_data){
1041 .name = "gcc_usb30_prim_mock_utmi_clk_src",
1042 .parent_data = gcc_parents_0,
1043 .num_parents = 4,
1044 .flags = CLK_SET_RATE_PARENT,
1045 .ops = &clk_rcg2_ops,
1049 static struct clk_rcg2 gcc_usb30_sec_master_clk_src = {
1050 .cmd_rcgr = 0x1001c,
1051 .mnd_width = 8,
1052 .hid_width = 5,
1053 .parent_map = gcc_parent_map_0,
1054 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1055 .clkr.hw.init = &(struct clk_init_data){
1056 .name = "gcc_usb30_sec_master_clk_src",
1057 .parent_data = gcc_parents_0,
1058 .num_parents = 4,
1059 .flags = CLK_SET_RATE_PARENT,
1060 .ops = &clk_rcg2_ops,
1064 static struct clk_rcg2 gcc_usb30_sec_mock_utmi_clk_src = {
1065 .cmd_rcgr = 0x10034,
1066 .mnd_width = 0,
1067 .hid_width = 5,
1068 .parent_map = gcc_parent_map_0,
1069 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1070 .clkr.hw.init = &(struct clk_init_data){
1071 .name = "gcc_usb30_sec_mock_utmi_clk_src",
1072 .parent_data = gcc_parents_0,
1073 .num_parents = 4,
1074 .flags = CLK_SET_RATE_PARENT,
1075 .ops = &clk_rcg2_ops,
1079 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1080 .cmd_rcgr = 0xf060,
1081 .mnd_width = 0,
1082 .hid_width = 5,
1083 .parent_map = gcc_parent_map_2,
1084 .freq_tbl = ftbl_gcc_ufs_card_phy_aux_clk_src,
1085 .clkr.hw.init = &(struct clk_init_data){
1086 .name = "gcc_usb3_prim_phy_aux_clk_src",
1087 .parent_data = gcc_parents_2,
1088 .num_parents = 3,
1089 .flags = CLK_SET_RATE_PARENT,
1090 .ops = &clk_rcg2_ops,
1094 static struct clk_rcg2 gcc_usb3_sec_phy_aux_clk_src = {
1095 .cmd_rcgr = 0x10060,
1096 .mnd_width = 0,
1097 .hid_width = 5,
1098 .parent_map = gcc_parent_map_2,
1099 .freq_tbl = ftbl_gcc_ufs_card_phy_aux_clk_src,
1100 .clkr.hw.init = &(struct clk_init_data){
1101 .name = "gcc_usb3_sec_phy_aux_clk_src",
1102 .parent_data = gcc_parents_2,
1103 .num_parents = 3,
1104 .flags = CLK_SET_RATE_PARENT,
1105 .ops = &clk_rcg2_ops,
1109 static struct clk_branch gcc_aggre_noc_pcie_tbu_clk = {
1110 .halt_reg = 0x90018,
1111 .halt_check = BRANCH_HALT,
1112 .clkr = {
1113 .enable_reg = 0x90018,
1114 .enable_mask = BIT(0),
1115 .hw.init = &(struct clk_init_data){
1116 .name = "gcc_aggre_noc_pcie_tbu_clk",
1117 .ops = &clk_branch2_ops,
1122 static struct clk_branch gcc_aggre_ufs_card_axi_clk = {
1123 .halt_reg = 0x750c0,
1124 .halt_check = BRANCH_HALT,
1125 .hwcg_reg = 0x750c0,
1126 .hwcg_bit = 1,
1127 .clkr = {
1128 .enable_reg = 0x750c0,
1129 .enable_mask = BIT(0),
1130 .hw.init = &(struct clk_init_data){
1131 .name = "gcc_aggre_ufs_card_axi_clk",
1132 .parent_hws = (const struct clk_hw *[]){
1133 &gcc_ufs_card_axi_clk_src.clkr.hw },
1134 .num_parents = 1,
1135 .flags = CLK_SET_RATE_PARENT,
1136 .ops = &clk_branch2_ops,
1141 static struct clk_branch gcc_aggre_ufs_card_axi_hw_ctl_clk = {
1142 .halt_reg = 0x750c0,
1143 .halt_check = BRANCH_HALT,
1144 .hwcg_reg = 0x750c0,
1145 .hwcg_bit = 1,
1146 .clkr = {
1147 .enable_reg = 0x750c0,
1148 .enable_mask = BIT(1),
1149 .hw.init = &(struct clk_init_data){
1150 .name = "gcc_aggre_ufs_card_axi_hw_ctl_clk",
1151 .parent_hws = (const struct clk_hw *[]){
1152 &gcc_aggre_ufs_card_axi_clk.clkr.hw },
1153 .num_parents = 1,
1154 .flags = CLK_SET_RATE_PARENT,
1155 .ops = &clk_branch_simple_ops,
1160 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
1161 .halt_reg = 0x770c0,
1162 .halt_check = BRANCH_HALT,
1163 .hwcg_reg = 0x770c0,
1164 .hwcg_bit = 1,
1165 .clkr = {
1166 .enable_reg = 0x770c0,
1167 .enable_mask = BIT(0),
1168 .hw.init = &(struct clk_init_data){
1169 .name = "gcc_aggre_ufs_phy_axi_clk",
1170 .parent_hws = (const struct clk_hw *[]){
1171 &gcc_ufs_phy_axi_clk_src.clkr.hw },
1172 .num_parents = 1,
1173 .flags = CLK_SET_RATE_PARENT,
1174 .ops = &clk_branch2_ops,
1179 static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = {
1180 .halt_reg = 0x770c0,
1181 .halt_check = BRANCH_HALT,
1182 .hwcg_reg = 0x770c0,
1183 .hwcg_bit = 1,
1184 .clkr = {
1185 .enable_reg = 0x770c0,
1186 .enable_mask = BIT(1),
1187 .hw.init = &(struct clk_init_data){
1188 .name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk",
1189 .parent_hws = (const struct clk_hw *[]){
1190 &gcc_aggre_ufs_phy_axi_clk.clkr.hw },
1191 .num_parents = 1,
1192 .flags = CLK_SET_RATE_PARENT,
1193 .ops = &clk_branch_simple_ops,
1198 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
1199 .halt_reg = 0xf07c,
1200 .halt_check = BRANCH_HALT,
1201 .clkr = {
1202 .enable_reg = 0xf07c,
1203 .enable_mask = BIT(0),
1204 .hw.init = &(struct clk_init_data){
1205 .name = "gcc_aggre_usb3_prim_axi_clk",
1206 .parent_hws = (const struct clk_hw *[]){
1207 &gcc_usb30_prim_master_clk_src.clkr.hw },
1208 .num_parents = 1,
1209 .flags = CLK_SET_RATE_PARENT,
1210 .ops = &clk_branch2_ops,
1215 static struct clk_branch gcc_aggre_usb3_sec_axi_clk = {
1216 .halt_reg = 0x1007c,
1217 .halt_check = BRANCH_HALT,
1218 .clkr = {
1219 .enable_reg = 0x1007c,
1220 .enable_mask = BIT(0),
1221 .hw.init = &(struct clk_init_data){
1222 .name = "gcc_aggre_usb3_sec_axi_clk",
1223 .parent_hws = (const struct clk_hw *[]){
1224 &gcc_usb30_sec_master_clk_src.clkr.hw },
1225 .num_parents = 1,
1226 .flags = CLK_SET_RATE_PARENT,
1227 .ops = &clk_branch2_ops,
1232 static struct clk_branch gcc_boot_rom_ahb_clk = {
1233 .halt_reg = 0x38004,
1234 .halt_check = BRANCH_HALT_VOTED,
1235 .hwcg_reg = 0x38004,
1236 .hwcg_bit = 1,
1237 .clkr = {
1238 .enable_reg = 0x52004,
1239 .enable_mask = BIT(10),
1240 .hw.init = &(struct clk_init_data){
1241 .name = "gcc_boot_rom_ahb_clk",
1242 .ops = &clk_branch2_ops,
1248 * Clock ON depends on external parent 'config noc', so cant poll
1249 * delay and also mark as crtitical for camss boot
1251 static struct clk_branch gcc_camera_ahb_clk = {
1252 .halt_reg = 0xb008,
1253 .halt_check = BRANCH_HALT_DELAY,
1254 .hwcg_reg = 0xb008,
1255 .hwcg_bit = 1,
1256 .clkr = {
1257 .enable_reg = 0xb008,
1258 .enable_mask = BIT(0),
1259 .hw.init = &(struct clk_init_data){
1260 .name = "gcc_camera_ahb_clk",
1261 .flags = CLK_IS_CRITICAL,
1262 .ops = &clk_branch2_ops,
1267 static struct clk_branch gcc_camera_hf_axi_clk = {
1268 .halt_reg = 0xb030,
1269 .halt_check = BRANCH_HALT,
1270 .clkr = {
1271 .enable_reg = 0xb030,
1272 .enable_mask = BIT(0),
1273 .hw.init = &(struct clk_init_data){
1274 .name = "gcc_camera_hf_axi_clk",
1275 .ops = &clk_branch2_ops,
1280 static struct clk_branch gcc_camera_sf_axi_clk = {
1281 .halt_reg = 0xb034,
1282 .halt_check = BRANCH_HALT,
1283 .clkr = {
1284 .enable_reg = 0xb034,
1285 .enable_mask = BIT(0),
1286 .hw.init = &(struct clk_init_data){
1287 .name = "gcc_camera_sf_axi_clk",
1288 .ops = &clk_branch2_ops,
1293 /* XO critical input to camss, so no need to poll */
1294 static struct clk_branch gcc_camera_xo_clk = {
1295 .halt_reg = 0xb044,
1296 .halt_check = BRANCH_HALT_DELAY,
1297 .clkr = {
1298 .enable_reg = 0xb044,
1299 .enable_mask = BIT(0),
1300 .hw.init = &(struct clk_init_data){
1301 .name = "gcc_camera_xo_clk",
1302 .flags = CLK_IS_CRITICAL,
1303 .ops = &clk_branch2_ops,
1308 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1309 .halt_reg = 0xf078,
1310 .halt_check = BRANCH_HALT,
1311 .clkr = {
1312 .enable_reg = 0xf078,
1313 .enable_mask = BIT(0),
1314 .hw.init = &(struct clk_init_data){
1315 .name = "gcc_cfg_noc_usb3_prim_axi_clk",
1316 .parent_hws = (const struct clk_hw *[]){
1317 &gcc_usb30_prim_master_clk_src.clkr.hw },
1318 .num_parents = 1,
1319 .flags = CLK_SET_RATE_PARENT,
1320 .ops = &clk_branch2_ops,
1325 static struct clk_branch gcc_cfg_noc_usb3_sec_axi_clk = {
1326 .halt_reg = 0x10078,
1327 .halt_check = BRANCH_HALT,
1328 .clkr = {
1329 .enable_reg = 0x10078,
1330 .enable_mask = BIT(0),
1331 .hw.init = &(struct clk_init_data){
1332 .name = "gcc_cfg_noc_usb3_sec_axi_clk",
1333 .parent_hws = (const struct clk_hw *[]){
1334 &gcc_usb30_sec_master_clk_src.clkr.hw },
1335 .num_parents = 1,
1336 .flags = CLK_SET_RATE_PARENT,
1337 .ops = &clk_branch2_ops,
1342 static struct clk_branch gcc_cpuss_ahb_clk = {
1343 .halt_reg = 0x48000,
1344 .halt_check = BRANCH_HALT_VOTED,
1345 .clkr = {
1346 .enable_reg = 0x52004,
1347 .enable_mask = BIT(21),
1348 .hw.init = &(struct clk_init_data){
1349 .name = "gcc_cpuss_ahb_clk",
1350 .parent_hws = (const struct clk_hw *[]){
1351 &gcc_cpuss_ahb_clk_src.clkr.hw },
1352 .num_parents = 1,
1353 /* required for cpuss */
1354 .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
1355 .ops = &clk_branch2_ops,
1360 static struct clk_branch gcc_cpuss_dvm_bus_clk = {
1361 .halt_reg = 0x48190,
1362 .halt_check = BRANCH_HALT,
1363 .clkr = {
1364 .enable_reg = 0x48190,
1365 .enable_mask = BIT(0),
1366 .hw.init = &(struct clk_init_data){
1367 .name = "gcc_cpuss_dvm_bus_clk",
1368 /* required for cpuss */
1369 .flags = CLK_IS_CRITICAL,
1370 .ops = &clk_branch2_ops,
1375 static struct clk_branch gcc_cpuss_gnoc_clk = {
1376 .halt_reg = 0x48004,
1377 .halt_check = BRANCH_HALT_VOTED,
1378 .hwcg_reg = 0x48004,
1379 .hwcg_bit = 1,
1380 .clkr = {
1381 .enable_reg = 0x52004,
1382 .enable_mask = BIT(22),
1383 .hw.init = &(struct clk_init_data){
1384 .name = "gcc_cpuss_gnoc_clk",
1385 /* required for cpuss */
1386 .flags = CLK_IS_CRITICAL,
1387 .ops = &clk_branch2_ops,
1392 static struct clk_branch gcc_cpuss_rbcpr_clk = {
1393 .halt_reg = 0x48008,
1394 .halt_check = BRANCH_HALT,
1395 .clkr = {
1396 .enable_reg = 0x48008,
1397 .enable_mask = BIT(0),
1398 .hw.init = &(struct clk_init_data){
1399 .name = "gcc_cpuss_rbcpr_clk",
1400 .ops = &clk_branch2_ops,
1405 static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1406 .halt_reg = 0x71154,
1407 .halt_check = BRANCH_VOTED,
1408 .clkr = {
1409 .enable_reg = 0x71154,
1410 .enable_mask = BIT(0),
1411 .hw.init = &(struct clk_init_data){
1412 .name = "gcc_ddrss_gpu_axi_clk",
1413 .ops = &clk_branch2_ops,
1419 * Clock ON depends on external parent 'config noc', so cant poll
1420 * delay and also mark as crtitical for disp boot
1422 static struct clk_branch gcc_disp_ahb_clk = {
1423 .halt_reg = 0xb00c,
1424 .halt_check = BRANCH_HALT_DELAY,
1425 .hwcg_reg = 0xb00c,
1426 .hwcg_bit = 1,
1427 .clkr = {
1428 .enable_reg = 0xb00c,
1429 .enable_mask = BIT(0),
1430 .hw.init = &(struct clk_init_data){
1431 .name = "gcc_disp_ahb_clk",
1432 .flags = CLK_IS_CRITICAL,
1433 .ops = &clk_branch2_ops,
1438 static struct clk_branch gcc_disp_hf_axi_clk = {
1439 .halt_reg = 0xb038,
1440 .halt_check = BRANCH_HALT,
1441 .clkr = {
1442 .enable_reg = 0xb038,
1443 .enable_mask = BIT(0),
1444 .hw.init = &(struct clk_init_data){
1445 .name = "gcc_disp_hf_axi_clk",
1446 .ops = &clk_branch2_ops,
1451 static struct clk_branch gcc_disp_sf_axi_clk = {
1452 .halt_reg = 0xb03c,
1453 .halt_check = BRANCH_HALT,
1454 .clkr = {
1455 .enable_reg = 0xb03c,
1456 .enable_mask = BIT(0),
1457 .hw.init = &(struct clk_init_data){
1458 .name = "gcc_disp_sf_axi_clk",
1459 .ops = &clk_branch2_ops,
1464 /* XO critical input to disp, so no need to poll */
1465 static struct clk_branch gcc_disp_xo_clk = {
1466 .halt_reg = 0xb048,
1467 .halt_check = BRANCH_HALT_DELAY,
1468 .clkr = {
1469 .enable_reg = 0xb048,
1470 .enable_mask = BIT(0),
1471 .hw.init = &(struct clk_init_data){
1472 .name = "gcc_disp_xo_clk",
1473 .flags = CLK_IS_CRITICAL,
1474 .ops = &clk_branch2_ops,
1479 static struct clk_branch gcc_emac_axi_clk = {
1480 .halt_reg = 0x6010,
1481 .halt_check = BRANCH_HALT,
1482 .clkr = {
1483 .enable_reg = 0x6010,
1484 .enable_mask = BIT(0),
1485 .hw.init = &(struct clk_init_data){
1486 .name = "gcc_emac_axi_clk",
1487 .ops = &clk_branch2_ops,
1492 static struct clk_branch gcc_emac_ptp_clk = {
1493 .halt_reg = 0x6034,
1494 .halt_check = BRANCH_HALT,
1495 .clkr = {
1496 .enable_reg = 0x6034,
1497 .enable_mask = BIT(0),
1498 .hw.init = &(struct clk_init_data){
1499 .name = "gcc_emac_ptp_clk",
1500 .parent_hws = (const struct clk_hw *[]){
1501 &gcc_emac_ptp_clk_src.clkr.hw },
1502 .num_parents = 1,
1503 .flags = CLK_SET_RATE_PARENT,
1504 .ops = &clk_branch2_ops,
1509 static struct clk_branch gcc_emac_rgmii_clk = {
1510 .halt_reg = 0x6018,
1511 .halt_check = BRANCH_HALT,
1512 .clkr = {
1513 .enable_reg = 0x6018,
1514 .enable_mask = BIT(0),
1515 .hw.init = &(struct clk_init_data){
1516 .name = "gcc_emac_rgmii_clk",
1517 .parent_hws = (const struct clk_hw *[]){
1518 &gcc_emac_rgmii_clk_src.clkr.hw },
1519 .num_parents = 1,
1520 .flags = CLK_SET_RATE_PARENT,
1521 .ops = &clk_branch2_ops,
1526 static struct clk_branch gcc_emac_slv_ahb_clk = {
1527 .halt_reg = 0x6014,
1528 .halt_check = BRANCH_HALT,
1529 .hwcg_reg = 0x6014,
1530 .hwcg_bit = 1,
1531 .clkr = {
1532 .enable_reg = 0x6014,
1533 .enable_mask = BIT(0),
1534 .hw.init = &(struct clk_init_data){
1535 .name = "gcc_emac_slv_ahb_clk",
1536 .ops = &clk_branch2_ops,
1541 static struct clk_branch gcc_gp1_clk = {
1542 .halt_reg = 0x64000,
1543 .halt_check = BRANCH_HALT,
1544 .clkr = {
1545 .enable_reg = 0x64000,
1546 .enable_mask = BIT(0),
1547 .hw.init = &(struct clk_init_data){
1548 .name = "gcc_gp1_clk",
1549 .parent_hws = (const struct clk_hw *[]){
1550 &gcc_gp1_clk_src.clkr.hw },
1551 .num_parents = 1,
1552 .flags = CLK_SET_RATE_PARENT,
1553 .ops = &clk_branch2_ops,
1558 static struct clk_branch gcc_gp2_clk = {
1559 .halt_reg = 0x65000,
1560 .halt_check = BRANCH_HALT,
1561 .clkr = {
1562 .enable_reg = 0x65000,
1563 .enable_mask = BIT(0),
1564 .hw.init = &(struct clk_init_data){
1565 .name = "gcc_gp2_clk",
1566 .parent_hws = (const struct clk_hw *[]){
1567 &gcc_gp2_clk_src.clkr.hw },
1568 .num_parents = 1,
1569 .flags = CLK_SET_RATE_PARENT,
1570 .ops = &clk_branch2_ops,
1575 static struct clk_branch gcc_gp3_clk = {
1576 .halt_reg = 0x66000,
1577 .halt_check = BRANCH_HALT,
1578 .clkr = {
1579 .enable_reg = 0x66000,
1580 .enable_mask = BIT(0),
1581 .hw.init = &(struct clk_init_data){
1582 .name = "gcc_gp3_clk",
1583 .parent_hws = (const struct clk_hw *[]){
1584 &gcc_gp3_clk_src.clkr.hw },
1585 .num_parents = 1,
1586 .flags = CLK_SET_RATE_PARENT,
1587 .ops = &clk_branch2_ops,
1592 static struct clk_branch gcc_gpu_cfg_ahb_clk = {
1593 .halt_reg = 0x71004,
1594 .halt_check = BRANCH_HALT,
1595 .hwcg_reg = 0x71004,
1596 .hwcg_bit = 1,
1597 .clkr = {
1598 .enable_reg = 0x71004,
1599 .enable_mask = BIT(0),
1600 .hw.init = &(struct clk_init_data){
1601 .name = "gcc_gpu_cfg_ahb_clk",
1602 /* required for gpu */
1603 .flags = CLK_IS_CRITICAL,
1604 .ops = &clk_branch2_ops,
1609 static struct clk_branch gcc_gpu_gpll0_clk_src = {
1610 .halt_check = BRANCH_HALT_SKIP,
1611 .clkr = {
1612 .enable_reg = 0x52004,
1613 .enable_mask = BIT(15),
1614 .hw.init = &(struct clk_init_data){
1615 .name = "gcc_gpu_gpll0_clk_src",
1616 .parent_hws = (const struct clk_hw *[]){
1617 &gpll0.clkr.hw },
1618 .num_parents = 1,
1619 .flags = CLK_SET_RATE_PARENT,
1620 .ops = &clk_branch2_ops,
1625 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
1626 .halt_check = BRANCH_HALT_SKIP,
1627 .clkr = {
1628 .enable_reg = 0x52004,
1629 .enable_mask = BIT(16),
1630 .hw.init = &(struct clk_init_data){
1631 .name = "gcc_gpu_gpll0_div_clk_src",
1632 .parent_hws = (const struct clk_hw *[]){
1633 &gpll0_out_even.clkr.hw },
1634 .num_parents = 1,
1635 .flags = CLK_SET_RATE_PARENT,
1636 .ops = &clk_branch2_ops,
1641 static struct clk_branch gcc_gpu_iref_clk = {
1642 .halt_reg = 0x8c010,
1643 .halt_check = BRANCH_HALT,
1644 .clkr = {
1645 .enable_reg = 0x8c010,
1646 .enable_mask = BIT(0),
1647 .hw.init = &(struct clk_init_data){
1648 .name = "gcc_gpu_iref_clk",
1649 .ops = &clk_branch2_ops,
1654 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
1655 .halt_reg = 0x7100c,
1656 .halt_check = BRANCH_VOTED,
1657 .clkr = {
1658 .enable_reg = 0x7100c,
1659 .enable_mask = BIT(0),
1660 .hw.init = &(struct clk_init_data){
1661 .name = "gcc_gpu_memnoc_gfx_clk",
1662 .ops = &clk_branch2_ops,
1667 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
1668 .halt_reg = 0x71018,
1669 .halt_check = BRANCH_HALT,
1670 .clkr = {
1671 .enable_reg = 0x71018,
1672 .enable_mask = BIT(0),
1673 .hw.init = &(struct clk_init_data){
1674 .name = "gcc_gpu_snoc_dvm_gfx_clk",
1675 .ops = &clk_branch2_ops,
1680 static struct clk_branch gcc_npu_at_clk = {
1681 .halt_reg = 0x4d010,
1682 .halt_check = BRANCH_VOTED,
1683 .clkr = {
1684 .enable_reg = 0x4d010,
1685 .enable_mask = BIT(0),
1686 .hw.init = &(struct clk_init_data){
1687 .name = "gcc_npu_at_clk",
1688 .ops = &clk_branch2_ops,
1693 static struct clk_branch gcc_npu_axi_clk = {
1694 .halt_reg = 0x4d008,
1695 .halt_check = BRANCH_VOTED,
1696 .clkr = {
1697 .enable_reg = 0x4d008,
1698 .enable_mask = BIT(0),
1699 .hw.init = &(struct clk_init_data){
1700 .name = "gcc_npu_axi_clk",
1701 .ops = &clk_branch2_ops,
1706 static struct clk_branch gcc_npu_cfg_ahb_clk = {
1707 .halt_reg = 0x4d004,
1708 .halt_check = BRANCH_HALT,
1709 .hwcg_reg = 0x4d004,
1710 .hwcg_bit = 1,
1711 .clkr = {
1712 .enable_reg = 0x4d004,
1713 .enable_mask = BIT(0),
1714 .hw.init = &(struct clk_init_data){
1715 .name = "gcc_npu_cfg_ahb_clk",
1716 /* required for npu */
1717 .flags = CLK_IS_CRITICAL,
1718 .ops = &clk_branch2_ops,
1723 static struct clk_branch gcc_npu_gpll0_clk_src = {
1724 .halt_check = BRANCH_HALT_SKIP,
1725 .clkr = {
1726 .enable_reg = 0x52004,
1727 .enable_mask = BIT(18),
1728 .hw.init = &(struct clk_init_data){
1729 .name = "gcc_npu_gpll0_clk_src",
1730 .parent_hws = (const struct clk_hw *[]){
1731 &gpll0.clkr.hw },
1732 .num_parents = 1,
1733 .flags = CLK_SET_RATE_PARENT,
1734 .ops = &clk_branch2_ops,
1739 static struct clk_branch gcc_npu_gpll0_div_clk_src = {
1740 .halt_check = BRANCH_HALT_SKIP,
1741 .clkr = {
1742 .enable_reg = 0x52004,
1743 .enable_mask = BIT(19),
1744 .hw.init = &(struct clk_init_data){
1745 .name = "gcc_npu_gpll0_div_clk_src",
1746 .parent_hws = (const struct clk_hw *[]){
1747 &gpll0_out_even.clkr.hw },
1748 .num_parents = 1,
1749 .flags = CLK_SET_RATE_PARENT,
1750 .ops = &clk_branch2_ops,
1755 static struct clk_branch gcc_npu_trig_clk = {
1756 .halt_reg = 0x4d00c,
1757 .halt_check = BRANCH_VOTED,
1758 .clkr = {
1759 .enable_reg = 0x4d00c,
1760 .enable_mask = BIT(0),
1761 .hw.init = &(struct clk_init_data){
1762 .name = "gcc_npu_trig_clk",
1763 .ops = &clk_branch2_ops,
1768 static struct clk_branch gcc_pcie0_phy_refgen_clk = {
1769 .halt_reg = 0x6f02c,
1770 .halt_check = BRANCH_HALT,
1771 .clkr = {
1772 .enable_reg = 0x6f02c,
1773 .enable_mask = BIT(0),
1774 .hw.init = &(struct clk_init_data){
1775 .name = "gcc_pcie0_phy_refgen_clk",
1776 .parent_hws = (const struct clk_hw *[]){
1777 &gcc_pcie_phy_refgen_clk_src.clkr.hw },
1778 .num_parents = 1,
1779 .flags = CLK_SET_RATE_PARENT,
1780 .ops = &clk_branch2_ops,
1785 static struct clk_branch gcc_pcie1_phy_refgen_clk = {
1786 .halt_reg = 0x6f030,
1787 .halt_check = BRANCH_HALT,
1788 .clkr = {
1789 .enable_reg = 0x6f030,
1790 .enable_mask = BIT(0),
1791 .hw.init = &(struct clk_init_data){
1792 .name = "gcc_pcie1_phy_refgen_clk",
1793 .parent_hws = (const struct clk_hw *[]){
1794 &gcc_pcie_phy_refgen_clk_src.clkr.hw },
1795 .num_parents = 1,
1796 .flags = CLK_SET_RATE_PARENT,
1797 .ops = &clk_branch2_ops,
1802 static struct clk_branch gcc_pcie_0_aux_clk = {
1803 .halt_reg = 0x6b020,
1804 .halt_check = BRANCH_HALT_VOTED,
1805 .clkr = {
1806 .enable_reg = 0x5200c,
1807 .enable_mask = BIT(3),
1808 .hw.init = &(struct clk_init_data){
1809 .name = "gcc_pcie_0_aux_clk",
1810 .parent_hws = (const struct clk_hw *[]){
1811 &gcc_pcie_0_aux_clk_src.clkr.hw },
1812 .num_parents = 1,
1813 .flags = CLK_SET_RATE_PARENT,
1814 .ops = &clk_branch2_ops,
1819 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
1820 .halt_reg = 0x6b01c,
1821 .halt_check = BRANCH_HALT_VOTED,
1822 .hwcg_reg = 0x6b01c,
1823 .hwcg_bit = 1,
1824 .clkr = {
1825 .enable_reg = 0x5200c,
1826 .enable_mask = BIT(2),
1827 .hw.init = &(struct clk_init_data){
1828 .name = "gcc_pcie_0_cfg_ahb_clk",
1829 .ops = &clk_branch2_ops,
1834 static struct clk_branch gcc_pcie_0_clkref_clk = {
1835 .halt_reg = 0x8c00c,
1836 .halt_check = BRANCH_HALT,
1837 .clkr = {
1838 .enable_reg = 0x8c00c,
1839 .enable_mask = BIT(0),
1840 .hw.init = &(struct clk_init_data){
1841 .name = "gcc_pcie_0_clkref_clk",
1842 .ops = &clk_branch2_ops,
1847 static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
1848 .halt_reg = 0x6b018,
1849 .halt_check = BRANCH_HALT_VOTED,
1850 .clkr = {
1851 .enable_reg = 0x5200c,
1852 .enable_mask = BIT(1),
1853 .hw.init = &(struct clk_init_data){
1854 .name = "gcc_pcie_0_mstr_axi_clk",
1855 .ops = &clk_branch2_ops,
1860 /* Clock ON depends on external parent 'PIPE' clock, so dont poll */
1861 static struct clk_branch gcc_pcie_0_pipe_clk = {
1862 .halt_reg = 0x6b024,
1863 .halt_check = BRANCH_HALT_DELAY,
1864 .clkr = {
1865 .enable_reg = 0x5200c,
1866 .enable_mask = BIT(4),
1867 .hw.init = &(struct clk_init_data){
1868 .name = "gcc_pcie_0_pipe_clk",
1869 .ops = &clk_branch2_ops,
1874 static struct clk_branch gcc_pcie_0_slv_axi_clk = {
1875 .halt_reg = 0x6b014,
1876 .halt_check = BRANCH_HALT_VOTED,
1877 .hwcg_reg = 0x6b014,
1878 .hwcg_bit = 1,
1879 .clkr = {
1880 .enable_reg = 0x5200c,
1881 .enable_mask = BIT(0),
1882 .hw.init = &(struct clk_init_data){
1883 .name = "gcc_pcie_0_slv_axi_clk",
1884 .ops = &clk_branch2_ops,
1889 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
1890 .halt_reg = 0x6b010,
1891 .halt_check = BRANCH_HALT_VOTED,
1892 .clkr = {
1893 .enable_reg = 0x5200c,
1894 .enable_mask = BIT(5),
1895 .hw.init = &(struct clk_init_data){
1896 .name = "gcc_pcie_0_slv_q2a_axi_clk",
1897 .ops = &clk_branch2_ops,
1902 static struct clk_branch gcc_pcie_1_aux_clk = {
1903 .halt_reg = 0x8d020,
1904 .halt_check = BRANCH_HALT_VOTED,
1905 .clkr = {
1906 .enable_reg = 0x52004,
1907 .enable_mask = BIT(29),
1908 .hw.init = &(struct clk_init_data){
1909 .name = "gcc_pcie_1_aux_clk",
1910 .parent_hws = (const struct clk_hw *[]){
1911 &gcc_pcie_1_aux_clk_src.clkr.hw },
1912 .num_parents = 1,
1913 .flags = CLK_SET_RATE_PARENT,
1914 .ops = &clk_branch2_ops,
1919 static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
1920 .halt_reg = 0x8d01c,
1921 .halt_check = BRANCH_HALT_VOTED,
1922 .hwcg_reg = 0x8d01c,
1923 .hwcg_bit = 1,
1924 .clkr = {
1925 .enable_reg = 0x52004,
1926 .enable_mask = BIT(28),
1927 .hw.init = &(struct clk_init_data){
1928 .name = "gcc_pcie_1_cfg_ahb_clk",
1929 .ops = &clk_branch2_ops,
1934 static struct clk_branch gcc_pcie_1_clkref_clk = {
1935 .halt_reg = 0x8c02c,
1936 .halt_check = BRANCH_HALT,
1937 .clkr = {
1938 .enable_reg = 0x8c02c,
1939 .enable_mask = BIT(0),
1940 .hw.init = &(struct clk_init_data){
1941 .name = "gcc_pcie_1_clkref_clk",
1942 .ops = &clk_branch2_ops,
1947 static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
1948 .halt_reg = 0x8d018,
1949 .halt_check = BRANCH_HALT_VOTED,
1950 .clkr = {
1951 .enable_reg = 0x52004,
1952 .enable_mask = BIT(27),
1953 .hw.init = &(struct clk_init_data){
1954 .name = "gcc_pcie_1_mstr_axi_clk",
1955 .ops = &clk_branch2_ops,
1960 /* Clock ON depends on external parent 'PIPE' clock, so dont poll */
1961 static struct clk_branch gcc_pcie_1_pipe_clk = {
1962 .halt_reg = 0x8d024,
1963 .halt_check = BRANCH_HALT_DELAY,
1964 .clkr = {
1965 .enable_reg = 0x52004,
1966 .enable_mask = BIT(30),
1967 .hw.init = &(struct clk_init_data){
1968 .name = "gcc_pcie_1_pipe_clk",
1969 .ops = &clk_branch2_ops,
1974 static struct clk_branch gcc_pcie_1_slv_axi_clk = {
1975 .halt_reg = 0x8d014,
1976 .halt_check = BRANCH_HALT_VOTED,
1977 .hwcg_reg = 0x8d014,
1978 .hwcg_bit = 1,
1979 .clkr = {
1980 .enable_reg = 0x52004,
1981 .enable_mask = BIT(26),
1982 .hw.init = &(struct clk_init_data){
1983 .name = "gcc_pcie_1_slv_axi_clk",
1984 .ops = &clk_branch2_ops,
1989 static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = {
1990 .halt_reg = 0x8d010,
1991 .halt_check = BRANCH_HALT_VOTED,
1992 .clkr = {
1993 .enable_reg = 0x52004,
1994 .enable_mask = BIT(25),
1995 .hw.init = &(struct clk_init_data){
1996 .name = "gcc_pcie_1_slv_q2a_axi_clk",
1997 .ops = &clk_branch2_ops,
2002 static struct clk_branch gcc_pcie_phy_aux_clk = {
2003 .halt_reg = 0x6f004,
2004 .halt_check = BRANCH_HALT,
2005 .clkr = {
2006 .enable_reg = 0x6f004,
2007 .enable_mask = BIT(0),
2008 .hw.init = &(struct clk_init_data){
2009 .name = "gcc_pcie_phy_aux_clk",
2010 .parent_hws = (const struct clk_hw *[]){
2011 &gcc_pcie_0_aux_clk_src.clkr.hw },
2012 .num_parents = 1,
2013 .flags = CLK_SET_RATE_PARENT,
2014 .ops = &clk_branch2_ops,
2019 static struct clk_branch gcc_pdm2_clk = {
2020 .halt_reg = 0x3300c,
2021 .halt_check = BRANCH_HALT,
2022 .clkr = {
2023 .enable_reg = 0x3300c,
2024 .enable_mask = BIT(0),
2025 .hw.init = &(struct clk_init_data){
2026 .name = "gcc_pdm2_clk",
2027 .parent_hws = (const struct clk_hw *[]){
2028 &gcc_pdm2_clk_src.clkr.hw },
2029 .num_parents = 1,
2030 .flags = CLK_SET_RATE_PARENT,
2031 .ops = &clk_branch2_ops,
2036 static struct clk_branch gcc_pdm_ahb_clk = {
2037 .halt_reg = 0x33004,
2038 .halt_check = BRANCH_HALT,
2039 .hwcg_reg = 0x33004,
2040 .hwcg_bit = 1,
2041 .clkr = {
2042 .enable_reg = 0x33004,
2043 .enable_mask = BIT(0),
2044 .hw.init = &(struct clk_init_data){
2045 .name = "gcc_pdm_ahb_clk",
2046 .ops = &clk_branch2_ops,
2051 static struct clk_branch gcc_pdm_xo4_clk = {
2052 .halt_reg = 0x33008,
2053 .halt_check = BRANCH_HALT,
2054 .clkr = {
2055 .enable_reg = 0x33008,
2056 .enable_mask = BIT(0),
2057 .hw.init = &(struct clk_init_data){
2058 .name = "gcc_pdm_xo4_clk",
2059 .ops = &clk_branch2_ops,
2064 static struct clk_branch gcc_prng_ahb_clk = {
2065 .halt_reg = 0x34004,
2066 .halt_check = BRANCH_HALT_VOTED,
2067 .clkr = {
2068 .enable_reg = 0x52004,
2069 .enable_mask = BIT(13),
2070 .hw.init = &(struct clk_init_data){
2071 .name = "gcc_prng_ahb_clk",
2072 .ops = &clk_branch2_ops,
2077 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
2078 .halt_reg = 0xb018,
2079 .halt_check = BRANCH_HALT,
2080 .hwcg_reg = 0xb018,
2081 .hwcg_bit = 1,
2082 .clkr = {
2083 .enable_reg = 0xb018,
2084 .enable_mask = BIT(0),
2085 .hw.init = &(struct clk_init_data){
2086 .name = "gcc_qmip_camera_nrt_ahb_clk",
2087 .ops = &clk_branch2_ops,
2092 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
2093 .halt_reg = 0xb01c,
2094 .halt_check = BRANCH_HALT,
2095 .hwcg_reg = 0xb01c,
2096 .hwcg_bit = 1,
2097 .clkr = {
2098 .enable_reg = 0xb01c,
2099 .enable_mask = BIT(0),
2100 .hw.init = &(struct clk_init_data){
2101 .name = "gcc_qmip_camera_rt_ahb_clk",
2102 .ops = &clk_branch2_ops,
2107 static struct clk_branch gcc_qmip_disp_ahb_clk = {
2108 .halt_reg = 0xb020,
2109 .halt_check = BRANCH_HALT,
2110 .hwcg_reg = 0xb020,
2111 .hwcg_bit = 1,
2112 .clkr = {
2113 .enable_reg = 0xb020,
2114 .enable_mask = BIT(0),
2115 .hw.init = &(struct clk_init_data){
2116 .name = "gcc_qmip_disp_ahb_clk",
2117 .ops = &clk_branch2_ops,
2122 static struct clk_branch gcc_qmip_video_cvp_ahb_clk = {
2123 .halt_reg = 0xb010,
2124 .halt_check = BRANCH_HALT,
2125 .hwcg_reg = 0xb010,
2126 .hwcg_bit = 1,
2127 .clkr = {
2128 .enable_reg = 0xb010,
2129 .enable_mask = BIT(0),
2130 .hw.init = &(struct clk_init_data){
2131 .name = "gcc_qmip_video_cvp_ahb_clk",
2132 .ops = &clk_branch2_ops,
2137 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
2138 .halt_reg = 0xb014,
2139 .halt_check = BRANCH_HALT,
2140 .hwcg_reg = 0xb014,
2141 .hwcg_bit = 1,
2142 .clkr = {
2143 .enable_reg = 0xb014,
2144 .enable_mask = BIT(0),
2145 .hw.init = &(struct clk_init_data){
2146 .name = "gcc_qmip_video_vcodec_ahb_clk",
2147 .ops = &clk_branch2_ops,
2152 static struct clk_branch gcc_qspi_cnoc_periph_ahb_clk = {
2153 .halt_reg = 0x4b000,
2154 .halt_check = BRANCH_HALT,
2155 .clkr = {
2156 .enable_reg = 0x4b000,
2157 .enable_mask = BIT(0),
2158 .hw.init = &(struct clk_init_data){
2159 .name = "gcc_qspi_cnoc_periph_ahb_clk",
2160 .ops = &clk_branch2_ops,
2165 static struct clk_branch gcc_qspi_core_clk = {
2166 .halt_reg = 0x4b004,
2167 .halt_check = BRANCH_HALT,
2168 .clkr = {
2169 .enable_reg = 0x4b004,
2170 .enable_mask = BIT(0),
2171 .hw.init = &(struct clk_init_data){
2172 .name = "gcc_qspi_core_clk",
2173 .parent_hws = (const struct clk_hw *[]){
2174 &gcc_qspi_core_clk_src.clkr.hw },
2175 .num_parents = 1,
2176 .flags = CLK_SET_RATE_PARENT,
2177 .ops = &clk_branch2_ops,
2182 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
2183 .halt_reg = 0x17144,
2184 .halt_check = BRANCH_HALT_VOTED,
2185 .clkr = {
2186 .enable_reg = 0x5200c,
2187 .enable_mask = BIT(10),
2188 .hw.init = &(struct clk_init_data){
2189 .name = "gcc_qupv3_wrap0_s0_clk",
2190 .parent_hws = (const struct clk_hw *[]){
2191 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw },
2192 .num_parents = 1,
2193 .flags = CLK_SET_RATE_PARENT,
2194 .ops = &clk_branch2_ops,
2199 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
2200 .halt_reg = 0x17274,
2201 .halt_check = BRANCH_HALT_VOTED,
2202 .clkr = {
2203 .enable_reg = 0x5200c,
2204 .enable_mask = BIT(11),
2205 .hw.init = &(struct clk_init_data){
2206 .name = "gcc_qupv3_wrap0_s1_clk",
2207 .parent_hws = (const struct clk_hw *[]){
2208 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw },
2209 .num_parents = 1,
2210 .flags = CLK_SET_RATE_PARENT,
2211 .ops = &clk_branch2_ops,
2216 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
2217 .halt_reg = 0x173a4,
2218 .halt_check = BRANCH_HALT_VOTED,
2219 .clkr = {
2220 .enable_reg = 0x5200c,
2221 .enable_mask = BIT(12),
2222 .hw.init = &(struct clk_init_data){
2223 .name = "gcc_qupv3_wrap0_s2_clk",
2224 .parent_hws = (const struct clk_hw *[]){
2225 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw },
2226 .num_parents = 1,
2227 .flags = CLK_SET_RATE_PARENT,
2228 .ops = &clk_branch2_ops,
2233 static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
2234 .halt_reg = 0x174d4,
2235 .halt_check = BRANCH_HALT_VOTED,
2236 .clkr = {
2237 .enable_reg = 0x5200c,
2238 .enable_mask = BIT(13),
2239 .hw.init = &(struct clk_init_data){
2240 .name = "gcc_qupv3_wrap0_s3_clk",
2241 .parent_hws = (const struct clk_hw *[]){
2242 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw },
2243 .num_parents = 1,
2244 .flags = CLK_SET_RATE_PARENT,
2245 .ops = &clk_branch2_ops,
2250 static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
2251 .halt_reg = 0x17604,
2252 .halt_check = BRANCH_HALT_VOTED,
2253 .clkr = {
2254 .enable_reg = 0x5200c,
2255 .enable_mask = BIT(14),
2256 .hw.init = &(struct clk_init_data){
2257 .name = "gcc_qupv3_wrap0_s4_clk",
2258 .parent_hws = (const struct clk_hw *[]){
2259 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw },
2260 .num_parents = 1,
2261 .flags = CLK_SET_RATE_PARENT,
2262 .ops = &clk_branch2_ops,
2267 static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
2268 .halt_reg = 0x17734,
2269 .halt_check = BRANCH_HALT_VOTED,
2270 .clkr = {
2271 .enable_reg = 0x5200c,
2272 .enable_mask = BIT(15),
2273 .hw.init = &(struct clk_init_data){
2274 .name = "gcc_qupv3_wrap0_s5_clk",
2275 .parent_hws = (const struct clk_hw *[]){
2276 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw },
2277 .num_parents = 1,
2278 .flags = CLK_SET_RATE_PARENT,
2279 .ops = &clk_branch2_ops,
2284 static struct clk_branch gcc_qupv3_wrap0_s6_clk = {
2285 .halt_reg = 0x17864,
2286 .halt_check = BRANCH_HALT_VOTED,
2287 .clkr = {
2288 .enable_reg = 0x5200c,
2289 .enable_mask = BIT(16),
2290 .hw.init = &(struct clk_init_data){
2291 .name = "gcc_qupv3_wrap0_s6_clk",
2292 .parent_hws = (const struct clk_hw *[]){
2293 &gcc_qupv3_wrap0_s6_clk_src.clkr.hw },
2294 .num_parents = 1,
2295 .flags = CLK_SET_RATE_PARENT,
2296 .ops = &clk_branch2_ops,
2301 static struct clk_branch gcc_qupv3_wrap0_s7_clk = {
2302 .halt_reg = 0x17994,
2303 .halt_check = BRANCH_HALT_VOTED,
2304 .clkr = {
2305 .enable_reg = 0x5200c,
2306 .enable_mask = BIT(17),
2307 .hw.init = &(struct clk_init_data){
2308 .name = "gcc_qupv3_wrap0_s7_clk",
2309 .parent_hws = (const struct clk_hw *[]){
2310 &gcc_qupv3_wrap0_s7_clk_src.clkr.hw },
2311 .num_parents = 1,
2312 .flags = CLK_SET_RATE_PARENT,
2313 .ops = &clk_branch2_ops,
2318 static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
2319 .halt_reg = 0x18144,
2320 .halt_check = BRANCH_HALT_VOTED,
2321 .clkr = {
2322 .enable_reg = 0x5200c,
2323 .enable_mask = BIT(22),
2324 .hw.init = &(struct clk_init_data){
2325 .name = "gcc_qupv3_wrap1_s0_clk",
2326 .parent_hws = (const struct clk_hw *[]){
2327 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw },
2328 .num_parents = 1,
2329 .flags = CLK_SET_RATE_PARENT,
2330 .ops = &clk_branch2_ops,
2335 static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
2336 .halt_reg = 0x18274,
2337 .halt_check = BRANCH_HALT_VOTED,
2338 .clkr = {
2339 .enable_reg = 0x5200c,
2340 .enable_mask = BIT(23),
2341 .hw.init = &(struct clk_init_data){
2342 .name = "gcc_qupv3_wrap1_s1_clk",
2343 .parent_hws = (const struct clk_hw *[]){
2344 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw },
2345 .num_parents = 1,
2346 .flags = CLK_SET_RATE_PARENT,
2347 .ops = &clk_branch2_ops,
2352 static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
2353 .halt_reg = 0x183a4,
2354 .halt_check = BRANCH_HALT_VOTED,
2355 .clkr = {
2356 .enable_reg = 0x5200c,
2357 .enable_mask = BIT(24),
2358 .hw.init = &(struct clk_init_data){
2359 .name = "gcc_qupv3_wrap1_s2_clk",
2360 .parent_hws = (const struct clk_hw *[]){
2361 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw },
2362 .num_parents = 1,
2363 .flags = CLK_SET_RATE_PARENT,
2364 .ops = &clk_branch2_ops,
2369 static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
2370 .halt_reg = 0x184d4,
2371 .halt_check = BRANCH_HALT_VOTED,
2372 .clkr = {
2373 .enable_reg = 0x5200c,
2374 .enable_mask = BIT(25),
2375 .hw.init = &(struct clk_init_data){
2376 .name = "gcc_qupv3_wrap1_s3_clk",
2377 .parent_hws = (const struct clk_hw *[]){
2378 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw },
2379 .num_parents = 1,
2380 .flags = CLK_SET_RATE_PARENT,
2381 .ops = &clk_branch2_ops,
2386 static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
2387 .halt_reg = 0x18604,
2388 .halt_check = BRANCH_HALT_VOTED,
2389 .clkr = {
2390 .enable_reg = 0x5200c,
2391 .enable_mask = BIT(26),
2392 .hw.init = &(struct clk_init_data){
2393 .name = "gcc_qupv3_wrap1_s4_clk",
2394 .parent_hws = (const struct clk_hw *[]){
2395 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw },
2396 .num_parents = 1,
2397 .flags = CLK_SET_RATE_PARENT,
2398 .ops = &clk_branch2_ops,
2403 static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
2404 .halt_reg = 0x18734,
2405 .halt_check = BRANCH_HALT_VOTED,
2406 .clkr = {
2407 .enable_reg = 0x5200c,
2408 .enable_mask = BIT(27),
2409 .hw.init = &(struct clk_init_data){
2410 .name = "gcc_qupv3_wrap1_s5_clk",
2411 .parent_hws = (const struct clk_hw *[]){
2412 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw },
2413 .num_parents = 1,
2414 .flags = CLK_SET_RATE_PARENT,
2415 .ops = &clk_branch2_ops,
2420 static struct clk_branch gcc_qupv3_wrap2_s0_clk = {
2421 .halt_reg = 0x1e144,
2422 .halt_check = BRANCH_HALT_VOTED,
2423 .clkr = {
2424 .enable_reg = 0x52014,
2425 .enable_mask = BIT(4),
2426 .hw.init = &(struct clk_init_data){
2427 .name = "gcc_qupv3_wrap2_s0_clk",
2428 .parent_hws = (const struct clk_hw *[]){
2429 &gcc_qupv3_wrap2_s0_clk_src.clkr.hw },
2430 .num_parents = 1,
2431 .flags = CLK_SET_RATE_PARENT,
2432 .ops = &clk_branch2_ops,
2437 static struct clk_branch gcc_qupv3_wrap2_s1_clk = {
2438 .halt_reg = 0x1e274,
2439 .halt_check = BRANCH_HALT_VOTED,
2440 .clkr = {
2441 .enable_reg = 0x52014,
2442 .enable_mask = BIT(5),
2443 .hw.init = &(struct clk_init_data){
2444 .name = "gcc_qupv3_wrap2_s1_clk",
2445 .parent_hws = (const struct clk_hw *[]){
2446 &gcc_qupv3_wrap2_s1_clk_src.clkr.hw },
2447 .num_parents = 1,
2448 .flags = CLK_SET_RATE_PARENT,
2449 .ops = &clk_branch2_ops,
2454 static struct clk_branch gcc_qupv3_wrap2_s2_clk = {
2455 .halt_reg = 0x1e3a4,
2456 .halt_check = BRANCH_HALT_VOTED,
2457 .clkr = {
2458 .enable_reg = 0x52014,
2459 .enable_mask = BIT(6),
2460 .hw.init = &(struct clk_init_data){
2461 .name = "gcc_qupv3_wrap2_s2_clk",
2462 .parent_hws = (const struct clk_hw *[]){
2463 &gcc_qupv3_wrap2_s2_clk_src.clkr.hw },
2464 .num_parents = 1,
2465 .flags = CLK_SET_RATE_PARENT,
2466 .ops = &clk_branch2_ops,
2471 static struct clk_branch gcc_qupv3_wrap2_s3_clk = {
2472 .halt_reg = 0x1e4d4,
2473 .halt_check = BRANCH_HALT_VOTED,
2474 .clkr = {
2475 .enable_reg = 0x52014,
2476 .enable_mask = BIT(7),
2477 .hw.init = &(struct clk_init_data){
2478 .name = "gcc_qupv3_wrap2_s3_clk",
2479 .parent_hws = (const struct clk_hw *[]){
2480 &gcc_qupv3_wrap2_s3_clk_src.clkr.hw },
2481 .num_parents = 1,
2482 .flags = CLK_SET_RATE_PARENT,
2483 .ops = &clk_branch2_ops,
2488 static struct clk_branch gcc_qupv3_wrap2_s4_clk = {
2489 .halt_reg = 0x1e604,
2490 .halt_check = BRANCH_HALT_VOTED,
2491 .clkr = {
2492 .enable_reg = 0x52014,
2493 .enable_mask = BIT(8),
2494 .hw.init = &(struct clk_init_data){
2495 .name = "gcc_qupv3_wrap2_s4_clk",
2496 .parent_hws = (const struct clk_hw *[]){
2497 &gcc_qupv3_wrap2_s4_clk_src.clkr.hw },
2498 .num_parents = 1,
2499 .flags = CLK_SET_RATE_PARENT,
2500 .ops = &clk_branch2_ops,
2505 static struct clk_branch gcc_qupv3_wrap2_s5_clk = {
2506 .halt_reg = 0x1e734,
2507 .halt_check = BRANCH_HALT_VOTED,
2508 .clkr = {
2509 .enable_reg = 0x52014,
2510 .enable_mask = BIT(9),
2511 .hw.init = &(struct clk_init_data){
2512 .name = "gcc_qupv3_wrap2_s5_clk",
2513 .parent_hws = (const struct clk_hw *[]){
2514 &gcc_qupv3_wrap2_s5_clk_src.clkr.hw },
2515 .num_parents = 1,
2516 .flags = CLK_SET_RATE_PARENT,
2517 .ops = &clk_branch2_ops,
2522 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
2523 .halt_reg = 0x17004,
2524 .halt_check = BRANCH_HALT_VOTED,
2525 .clkr = {
2526 .enable_reg = 0x5200c,
2527 .enable_mask = BIT(6),
2528 .hw.init = &(struct clk_init_data){
2529 .name = "gcc_qupv3_wrap_0_m_ahb_clk",
2530 .ops = &clk_branch2_ops,
2535 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
2536 .halt_reg = 0x17008,
2537 .halt_check = BRANCH_HALT_VOTED,
2538 .hwcg_reg = 0x17008,
2539 .hwcg_bit = 1,
2540 .clkr = {
2541 .enable_reg = 0x5200c,
2542 .enable_mask = BIT(7),
2543 .hw.init = &(struct clk_init_data){
2544 .name = "gcc_qupv3_wrap_0_s_ahb_clk",
2545 .ops = &clk_branch2_ops,
2550 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
2551 .halt_reg = 0x18004,
2552 .halt_check = BRANCH_HALT_VOTED,
2553 .clkr = {
2554 .enable_reg = 0x5200c,
2555 .enable_mask = BIT(20),
2556 .hw.init = &(struct clk_init_data){
2557 .name = "gcc_qupv3_wrap_1_m_ahb_clk",
2558 .ops = &clk_branch2_ops,
2563 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
2564 .halt_reg = 0x18008,
2565 .halt_check = BRANCH_HALT_VOTED,
2566 .hwcg_reg = 0x18008,
2567 .hwcg_bit = 1,
2568 .clkr = {
2569 .enable_reg = 0x5200c,
2570 .enable_mask = BIT(21),
2571 .hw.init = &(struct clk_init_data){
2572 .name = "gcc_qupv3_wrap_1_s_ahb_clk",
2573 .ops = &clk_branch2_ops,
2578 static struct clk_branch gcc_qupv3_wrap_2_m_ahb_clk = {
2579 .halt_reg = 0x1e004,
2580 .halt_check = BRANCH_HALT_VOTED,
2581 .clkr = {
2582 .enable_reg = 0x52014,
2583 .enable_mask = BIT(2),
2584 .hw.init = &(struct clk_init_data){
2585 .name = "gcc_qupv3_wrap_2_m_ahb_clk",
2586 .ops = &clk_branch2_ops,
2591 static struct clk_branch gcc_qupv3_wrap_2_s_ahb_clk = {
2592 .halt_reg = 0x1e008,
2593 .halt_check = BRANCH_HALT_VOTED,
2594 .hwcg_reg = 0x1e008,
2595 .hwcg_bit = 1,
2596 .clkr = {
2597 .enable_reg = 0x52014,
2598 .enable_mask = BIT(1),
2599 .hw.init = &(struct clk_init_data){
2600 .name = "gcc_qupv3_wrap_2_s_ahb_clk",
2601 .ops = &clk_branch2_ops,
2606 static struct clk_branch gcc_sdcc2_ahb_clk = {
2607 .halt_reg = 0x14008,
2608 .halt_check = BRANCH_HALT,
2609 .clkr = {
2610 .enable_reg = 0x14008,
2611 .enable_mask = BIT(0),
2612 .hw.init = &(struct clk_init_data){
2613 .name = "gcc_sdcc2_ahb_clk",
2614 .ops = &clk_branch2_ops,
2619 static struct clk_branch gcc_sdcc2_apps_clk = {
2620 .halt_reg = 0x14004,
2621 .halt_check = BRANCH_HALT,
2622 .clkr = {
2623 .enable_reg = 0x14004,
2624 .enable_mask = BIT(0),
2625 .hw.init = &(struct clk_init_data){
2626 .name = "gcc_sdcc2_apps_clk",
2627 .parent_hws = (const struct clk_hw *[]){
2628 &gcc_sdcc2_apps_clk_src.clkr.hw },
2629 .num_parents = 1,
2630 .flags = CLK_SET_RATE_PARENT,
2631 .ops = &clk_branch2_ops,
2636 static struct clk_branch gcc_sdcc4_ahb_clk = {
2637 .halt_reg = 0x16008,
2638 .halt_check = BRANCH_HALT,
2639 .clkr = {
2640 .enable_reg = 0x16008,
2641 .enable_mask = BIT(0),
2642 .hw.init = &(struct clk_init_data){
2643 .name = "gcc_sdcc4_ahb_clk",
2644 .ops = &clk_branch2_ops,
2649 static struct clk_branch gcc_sdcc4_apps_clk = {
2650 .halt_reg = 0x16004,
2651 .halt_check = BRANCH_HALT,
2652 .clkr = {
2653 .enable_reg = 0x16004,
2654 .enable_mask = BIT(0),
2655 .hw.init = &(struct clk_init_data){
2656 .name = "gcc_sdcc4_apps_clk",
2657 .parent_hws = (const struct clk_hw *[]){
2658 &gcc_sdcc4_apps_clk_src.clkr.hw },
2659 .num_parents = 1,
2660 .flags = CLK_SET_RATE_PARENT,
2661 .ops = &clk_branch2_ops,
2666 static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {
2667 .halt_reg = 0x4819c,
2668 .halt_check = BRANCH_HALT_VOTED,
2669 .clkr = {
2670 .enable_reg = 0x52004,
2671 .enable_mask = BIT(0),
2672 .hw.init = &(struct clk_init_data){
2673 .name = "gcc_sys_noc_cpuss_ahb_clk",
2674 .parent_hws = (const struct clk_hw *[]){
2675 &gcc_cpuss_ahb_clk_src.clkr.hw },
2676 .num_parents = 1,
2677 /* required for cpuss */
2678 .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
2679 .ops = &clk_branch2_ops,
2684 static struct clk_branch gcc_tsif_ahb_clk = {
2685 .halt_reg = 0x36004,
2686 .halt_check = BRANCH_HALT,
2687 .clkr = {
2688 .enable_reg = 0x36004,
2689 .enable_mask = BIT(0),
2690 .hw.init = &(struct clk_init_data){
2691 .name = "gcc_tsif_ahb_clk",
2692 .ops = &clk_branch2_ops,
2697 static struct clk_branch gcc_tsif_inactivity_timers_clk = {
2698 .halt_reg = 0x3600c,
2699 .halt_check = BRANCH_HALT,
2700 .clkr = {
2701 .enable_reg = 0x3600c,
2702 .enable_mask = BIT(0),
2703 .hw.init = &(struct clk_init_data){
2704 .name = "gcc_tsif_inactivity_timers_clk",
2705 .ops = &clk_branch2_ops,
2710 static struct clk_branch gcc_tsif_ref_clk = {
2711 .halt_reg = 0x36008,
2712 .halt_check = BRANCH_HALT,
2713 .clkr = {
2714 .enable_reg = 0x36008,
2715 .enable_mask = BIT(0),
2716 .hw.init = &(struct clk_init_data){
2717 .name = "gcc_tsif_ref_clk",
2718 .parent_hws = (const struct clk_hw *[]){
2719 &gcc_tsif_ref_clk_src.clkr.hw },
2720 .num_parents = 1,
2721 .flags = CLK_SET_RATE_PARENT,
2722 .ops = &clk_branch2_ops,
2727 static struct clk_branch gcc_ufs_card_ahb_clk = {
2728 .halt_reg = 0x75014,
2729 .halt_check = BRANCH_HALT,
2730 .hwcg_reg = 0x75014,
2731 .hwcg_bit = 1,
2732 .clkr = {
2733 .enable_reg = 0x75014,
2734 .enable_mask = BIT(0),
2735 .hw.init = &(struct clk_init_data){
2736 .name = "gcc_ufs_card_ahb_clk",
2737 .ops = &clk_branch2_ops,
2742 static struct clk_branch gcc_ufs_card_axi_clk = {
2743 .halt_reg = 0x75010,
2744 .halt_check = BRANCH_HALT,
2745 .hwcg_reg = 0x75010,
2746 .hwcg_bit = 1,
2747 .clkr = {
2748 .enable_reg = 0x75010,
2749 .enable_mask = BIT(0),
2750 .hw.init = &(struct clk_init_data){
2751 .name = "gcc_ufs_card_axi_clk",
2752 .parent_hws = (const struct clk_hw *[]){
2753 &gcc_ufs_card_axi_clk_src.clkr.hw },
2754 .num_parents = 1,
2755 .flags = CLK_SET_RATE_PARENT,
2756 .ops = &clk_branch2_ops,
2761 static struct clk_branch gcc_ufs_card_axi_hw_ctl_clk = {
2762 .halt_reg = 0x75010,
2763 .halt_check = BRANCH_HALT,
2764 .hwcg_reg = 0x75010,
2765 .hwcg_bit = 1,
2766 .clkr = {
2767 .enable_reg = 0x75010,
2768 .enable_mask = BIT(1),
2769 .hw.init = &(struct clk_init_data){
2770 .name = "gcc_ufs_card_axi_hw_ctl_clk",
2771 .parent_hws = (const struct clk_hw *[]){
2772 &gcc_ufs_card_axi_clk.clkr.hw },
2773 .num_parents = 1,
2774 .flags = CLK_SET_RATE_PARENT,
2775 .ops = &clk_branch_simple_ops,
2780 static struct clk_branch gcc_ufs_card_clkref_clk = {
2781 .halt_reg = 0x8c004,
2782 .halt_check = BRANCH_HALT,
2783 .clkr = {
2784 .enable_reg = 0x8c004,
2785 .enable_mask = BIT(0),
2786 .hw.init = &(struct clk_init_data){
2787 .name = "gcc_ufs_card_clkref_clk",
2788 .ops = &clk_branch2_ops,
2793 static struct clk_branch gcc_ufs_card_ice_core_clk = {
2794 .halt_reg = 0x7505c,
2795 .halt_check = BRANCH_HALT,
2796 .hwcg_reg = 0x7505c,
2797 .hwcg_bit = 1,
2798 .clkr = {
2799 .enable_reg = 0x7505c,
2800 .enable_mask = BIT(0),
2801 .hw.init = &(struct clk_init_data){
2802 .name = "gcc_ufs_card_ice_core_clk",
2803 .parent_hws = (const struct clk_hw *[]){
2804 &gcc_ufs_card_ice_core_clk_src.clkr.hw },
2805 .num_parents = 1,
2806 .flags = CLK_SET_RATE_PARENT,
2807 .ops = &clk_branch2_ops,
2812 static struct clk_branch gcc_ufs_card_ice_core_hw_ctl_clk = {
2813 .halt_reg = 0x7505c,
2814 .halt_check = BRANCH_HALT,
2815 .hwcg_reg = 0x7505c,
2816 .hwcg_bit = 1,
2817 .clkr = {
2818 .enable_reg = 0x7505c,
2819 .enable_mask = BIT(1),
2820 .hw.init = &(struct clk_init_data){
2821 .name = "gcc_ufs_card_ice_core_hw_ctl_clk",
2822 .parent_hws = (const struct clk_hw *[]){
2823 &gcc_ufs_card_ice_core_clk.clkr.hw },
2824 .num_parents = 1,
2825 .flags = CLK_SET_RATE_PARENT,
2826 .ops = &clk_branch_simple_ops,
2831 static struct clk_branch gcc_ufs_card_phy_aux_clk = {
2832 .halt_reg = 0x75090,
2833 .halt_check = BRANCH_HALT,
2834 .hwcg_reg = 0x75090,
2835 .hwcg_bit = 1,
2836 .clkr = {
2837 .enable_reg = 0x75090,
2838 .enable_mask = BIT(0),
2839 .hw.init = &(struct clk_init_data){
2840 .name = "gcc_ufs_card_phy_aux_clk",
2841 .parent_hws = (const struct clk_hw *[]){
2842 &gcc_ufs_card_phy_aux_clk_src.clkr.hw },
2843 .num_parents = 1,
2844 .flags = CLK_SET_RATE_PARENT,
2845 .ops = &clk_branch2_ops,
2850 static struct clk_branch gcc_ufs_card_phy_aux_hw_ctl_clk = {
2851 .halt_reg = 0x75090,
2852 .halt_check = BRANCH_HALT,
2853 .hwcg_reg = 0x75090,
2854 .hwcg_bit = 1,
2855 .clkr = {
2856 .enable_reg = 0x75090,
2857 .enable_mask = BIT(1),
2858 .hw.init = &(struct clk_init_data){
2859 .name = "gcc_ufs_card_phy_aux_hw_ctl_clk",
2860 .parent_hws = (const struct clk_hw *[]){
2861 &gcc_ufs_card_phy_aux_clk.clkr.hw },
2862 .num_parents = 1,
2863 .flags = CLK_SET_RATE_PARENT,
2864 .ops = &clk_branch_simple_ops,
2869 /* external clocks so add BRANCH_HALT_SKIP */
2870 static struct clk_branch gcc_ufs_card_rx_symbol_0_clk = {
2871 .halt_check = BRANCH_HALT_SKIP,
2872 .clkr = {
2873 .enable_reg = 0x7501c,
2874 .enable_mask = BIT(0),
2875 .hw.init = &(struct clk_init_data){
2876 .name = "gcc_ufs_card_rx_symbol_0_clk",
2877 .ops = &clk_branch2_ops,
2882 /* external clocks so add BRANCH_HALT_SKIP */
2883 static struct clk_branch gcc_ufs_card_rx_symbol_1_clk = {
2884 .halt_check = BRANCH_HALT_SKIP,
2885 .clkr = {
2886 .enable_reg = 0x750ac,
2887 .enable_mask = BIT(0),
2888 .hw.init = &(struct clk_init_data){
2889 .name = "gcc_ufs_card_rx_symbol_1_clk",
2890 .ops = &clk_branch2_ops,
2895 /* external clocks so add BRANCH_HALT_SKIP */
2896 static struct clk_branch gcc_ufs_card_tx_symbol_0_clk = {
2897 .halt_check = BRANCH_HALT_SKIP,
2898 .clkr = {
2899 .enable_reg = 0x75018,
2900 .enable_mask = BIT(0),
2901 .hw.init = &(struct clk_init_data){
2902 .name = "gcc_ufs_card_tx_symbol_0_clk",
2903 .ops = &clk_branch2_ops,
2908 static struct clk_branch gcc_ufs_card_unipro_core_clk = {
2909 .halt_reg = 0x75058,
2910 .halt_check = BRANCH_HALT,
2911 .hwcg_reg = 0x75058,
2912 .hwcg_bit = 1,
2913 .clkr = {
2914 .enable_reg = 0x75058,
2915 .enable_mask = BIT(0),
2916 .hw.init = &(struct clk_init_data){
2917 .name = "gcc_ufs_card_unipro_core_clk",
2918 .parent_hws = (const struct clk_hw *[]){
2919 &gcc_ufs_card_unipro_core_clk_src.clkr.hw },
2920 .num_parents = 1,
2921 .flags = CLK_SET_RATE_PARENT,
2922 .ops = &clk_branch2_ops,
2927 static struct clk_branch gcc_ufs_card_unipro_core_hw_ctl_clk = {
2928 .halt_reg = 0x75058,
2929 .halt_check = BRANCH_HALT,
2930 .hwcg_reg = 0x75058,
2931 .hwcg_bit = 1,
2932 .clkr = {
2933 .enable_reg = 0x75058,
2934 .enable_mask = BIT(1),
2935 .hw.init = &(struct clk_init_data){
2936 .name = "gcc_ufs_card_unipro_core_hw_ctl_clk",
2937 .parent_hws = (const struct clk_hw *[]){
2938 &gcc_ufs_card_unipro_core_clk.clkr.hw },
2939 .num_parents = 1,
2940 .flags = CLK_SET_RATE_PARENT,
2941 .ops = &clk_branch_simple_ops,
2946 static struct clk_branch gcc_ufs_mem_clkref_clk = {
2947 .halt_reg = 0x8c000,
2948 .halt_check = BRANCH_HALT,
2949 .clkr = {
2950 .enable_reg = 0x8c000,
2951 .enable_mask = BIT(0),
2952 .hw.init = &(struct clk_init_data){
2953 .name = "gcc_ufs_mem_clkref_clk",
2954 .ops = &clk_branch2_ops,
2959 static struct clk_branch gcc_ufs_phy_ahb_clk = {
2960 .halt_reg = 0x77014,
2961 .halt_check = BRANCH_HALT,
2962 .hwcg_reg = 0x77014,
2963 .hwcg_bit = 1,
2964 .clkr = {
2965 .enable_reg = 0x77014,
2966 .enable_mask = BIT(0),
2967 .hw.init = &(struct clk_init_data){
2968 .name = "gcc_ufs_phy_ahb_clk",
2969 .ops = &clk_branch2_ops,
2974 static struct clk_branch gcc_ufs_phy_axi_clk = {
2975 .halt_reg = 0x77010,
2976 .halt_check = BRANCH_HALT,
2977 .hwcg_reg = 0x77010,
2978 .hwcg_bit = 1,
2979 .clkr = {
2980 .enable_reg = 0x77010,
2981 .enable_mask = BIT(0),
2982 .hw.init = &(struct clk_init_data){
2983 .name = "gcc_ufs_phy_axi_clk",
2984 .parent_hws = (const struct clk_hw *[]){
2985 &gcc_ufs_phy_axi_clk_src.clkr.hw },
2986 .num_parents = 1,
2987 .flags = CLK_SET_RATE_PARENT,
2988 .ops = &clk_branch2_ops,
2993 static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = {
2994 .halt_reg = 0x77010,
2995 .halt_check = BRANCH_HALT,
2996 .hwcg_reg = 0x77010,
2997 .hwcg_bit = 1,
2998 .clkr = {
2999 .enable_reg = 0x77010,
3000 .enable_mask = BIT(1),
3001 .hw.init = &(struct clk_init_data){
3002 .name = "gcc_ufs_phy_axi_hw_ctl_clk",
3003 .parent_hws = (const struct clk_hw *[]){
3004 &gcc_ufs_phy_axi_clk.clkr.hw },
3005 .num_parents = 1,
3006 .flags = CLK_SET_RATE_PARENT,
3007 .ops = &clk_branch_simple_ops,
3012 static struct clk_branch gcc_ufs_phy_ice_core_clk = {
3013 .halt_reg = 0x7705c,
3014 .halt_check = BRANCH_HALT,
3015 .hwcg_reg = 0x7705c,
3016 .hwcg_bit = 1,
3017 .clkr = {
3018 .enable_reg = 0x7705c,
3019 .enable_mask = BIT(0),
3020 .hw.init = &(struct clk_init_data){
3021 .name = "gcc_ufs_phy_ice_core_clk",
3022 .parent_hws = (const struct clk_hw *[]){
3023 &gcc_ufs_phy_ice_core_clk_src.clkr.hw },
3024 .num_parents = 1,
3025 .flags = CLK_SET_RATE_PARENT,
3026 .ops = &clk_branch2_ops,
3031 static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = {
3032 .halt_reg = 0x7705c,
3033 .halt_check = BRANCH_HALT,
3034 .hwcg_reg = 0x7705c,
3035 .hwcg_bit = 1,
3036 .clkr = {
3037 .enable_reg = 0x7705c,
3038 .enable_mask = BIT(1),
3039 .hw.init = &(struct clk_init_data){
3040 .name = "gcc_ufs_phy_ice_core_hw_ctl_clk",
3041 .parent_hws = (const struct clk_hw *[]){
3042 &gcc_ufs_phy_ice_core_clk.clkr.hw },
3043 .num_parents = 1,
3044 .flags = CLK_SET_RATE_PARENT,
3045 .ops = &clk_branch_simple_ops,
3050 static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
3051 .halt_reg = 0x77090,
3052 .halt_check = BRANCH_HALT,
3053 .hwcg_reg = 0x77090,
3054 .hwcg_bit = 1,
3055 .clkr = {
3056 .enable_reg = 0x77090,
3057 .enable_mask = BIT(0),
3058 .hw.init = &(struct clk_init_data){
3059 .name = "gcc_ufs_phy_phy_aux_clk",
3060 .parent_hws = (const struct clk_hw *[]){
3061 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw },
3062 .num_parents = 1,
3063 .flags = CLK_SET_RATE_PARENT,
3064 .ops = &clk_branch2_ops,
3069 static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = {
3070 .halt_reg = 0x77090,
3071 .halt_check = BRANCH_HALT,
3072 .hwcg_reg = 0x77090,
3073 .hwcg_bit = 1,
3074 .clkr = {
3075 .enable_reg = 0x77090,
3076 .enable_mask = BIT(1),
3077 .hw.init = &(struct clk_init_data){
3078 .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk",
3079 .parent_hws = (const struct clk_hw *[]){
3080 &gcc_ufs_phy_phy_aux_clk.clkr.hw },
3081 .num_parents = 1,
3082 .flags = CLK_SET_RATE_PARENT,
3083 .ops = &clk_branch_simple_ops,
3088 /* external clocks so add BRANCH_HALT_SKIP */
3089 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
3090 .halt_check = BRANCH_HALT_SKIP,
3091 .clkr = {
3092 .enable_reg = 0x7701c,
3093 .enable_mask = BIT(0),
3094 .hw.init = &(struct clk_init_data){
3095 .name = "gcc_ufs_phy_rx_symbol_0_clk",
3096 .ops = &clk_branch2_ops,
3101 /* external clocks so add BRANCH_HALT_SKIP */
3102 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
3103 .halt_check = BRANCH_HALT_SKIP,
3104 .clkr = {
3105 .enable_reg = 0x770ac,
3106 .enable_mask = BIT(0),
3107 .hw.init = &(struct clk_init_data){
3108 .name = "gcc_ufs_phy_rx_symbol_1_clk",
3109 .ops = &clk_branch2_ops,
3114 /* external clocks so add BRANCH_HALT_SKIP */
3115 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
3116 .halt_check = BRANCH_HALT_SKIP,
3117 .clkr = {
3118 .enable_reg = 0x77018,
3119 .enable_mask = BIT(0),
3120 .hw.init = &(struct clk_init_data){
3121 .name = "gcc_ufs_phy_tx_symbol_0_clk",
3122 .ops = &clk_branch2_ops,
3127 static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
3128 .halt_reg = 0x77058,
3129 .halt_check = BRANCH_HALT,
3130 .hwcg_reg = 0x77058,
3131 .hwcg_bit = 1,
3132 .clkr = {
3133 .enable_reg = 0x77058,
3134 .enable_mask = BIT(0),
3135 .hw.init = &(struct clk_init_data){
3136 .name = "gcc_ufs_phy_unipro_core_clk",
3137 .parent_hws = (const struct clk_hw *[]){
3138 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw },
3139 .num_parents = 1,
3140 .flags = CLK_SET_RATE_PARENT,
3141 .ops = &clk_branch2_ops,
3146 static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = {
3147 .halt_reg = 0x77058,
3148 .halt_check = BRANCH_HALT,
3149 .hwcg_reg = 0x77058,
3150 .hwcg_bit = 1,
3151 .clkr = {
3152 .enable_reg = 0x77058,
3153 .enable_mask = BIT(1),
3154 .hw.init = &(struct clk_init_data){
3155 .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk",
3156 .parent_hws = (const struct clk_hw *[]){
3157 &gcc_ufs_phy_unipro_core_clk.clkr.hw },
3158 .num_parents = 1,
3159 .flags = CLK_SET_RATE_PARENT,
3160 .ops = &clk_branch_simple_ops,
3165 static struct clk_branch gcc_usb30_prim_master_clk = {
3166 .halt_reg = 0xf010,
3167 .halt_check = BRANCH_HALT,
3168 .clkr = {
3169 .enable_reg = 0xf010,
3170 .enable_mask = BIT(0),
3171 .hw.init = &(struct clk_init_data){
3172 .name = "gcc_usb30_prim_master_clk",
3173 .parent_hws = (const struct clk_hw *[]){
3174 &gcc_usb30_prim_master_clk_src.clkr.hw },
3175 .num_parents = 1,
3176 .flags = CLK_SET_RATE_PARENT,
3177 .ops = &clk_branch2_ops,
3182 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
3183 .halt_reg = 0xf018,
3184 .halt_check = BRANCH_HALT,
3185 .clkr = {
3186 .enable_reg = 0xf018,
3187 .enable_mask = BIT(0),
3188 .hw.init = &(struct clk_init_data){
3189 .name = "gcc_usb30_prim_mock_utmi_clk",
3190 .parent_hws = (const struct clk_hw *[]){
3191 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw },
3192 .num_parents = 1,
3193 .flags = CLK_SET_RATE_PARENT,
3194 .ops = &clk_branch2_ops,
3199 static struct clk_branch gcc_usb30_prim_sleep_clk = {
3200 .halt_reg = 0xf014,
3201 .halt_check = BRANCH_HALT,
3202 .clkr = {
3203 .enable_reg = 0xf014,
3204 .enable_mask = BIT(0),
3205 .hw.init = &(struct clk_init_data){
3206 .name = "gcc_usb30_prim_sleep_clk",
3207 .ops = &clk_branch2_ops,
3212 static struct clk_branch gcc_usb30_sec_master_clk = {
3213 .halt_reg = 0x10010,
3214 .halt_check = BRANCH_HALT,
3215 .clkr = {
3216 .enable_reg = 0x10010,
3217 .enable_mask = BIT(0),
3218 .hw.init = &(struct clk_init_data){
3219 .name = "gcc_usb30_sec_master_clk",
3220 .parent_hws = (const struct clk_hw *[]){
3221 &gcc_usb30_sec_master_clk_src.clkr.hw },
3222 .num_parents = 1,
3223 .flags = CLK_SET_RATE_PARENT,
3224 .ops = &clk_branch2_ops,
3229 static struct clk_branch gcc_usb30_sec_mock_utmi_clk = {
3230 .halt_reg = 0x10018,
3231 .halt_check = BRANCH_HALT,
3232 .clkr = {
3233 .enable_reg = 0x10018,
3234 .enable_mask = BIT(0),
3235 .hw.init = &(struct clk_init_data){
3236 .name = "gcc_usb30_sec_mock_utmi_clk",
3237 .parent_hws = (const struct clk_hw *[]){
3238 &gcc_usb30_sec_mock_utmi_clk_src.clkr.hw },
3239 .num_parents = 1,
3240 .flags = CLK_SET_RATE_PARENT,
3241 .ops = &clk_branch2_ops,
3246 static struct clk_branch gcc_usb30_sec_sleep_clk = {
3247 .halt_reg = 0x10014,
3248 .halt_check = BRANCH_HALT,
3249 .clkr = {
3250 .enable_reg = 0x10014,
3251 .enable_mask = BIT(0),
3252 .hw.init = &(struct clk_init_data){
3253 .name = "gcc_usb30_sec_sleep_clk",
3254 .ops = &clk_branch2_ops,
3259 static struct clk_branch gcc_usb3_prim_clkref_clk = {
3260 .halt_reg = 0x8c008,
3261 .halt_check = BRANCH_HALT,
3262 .clkr = {
3263 .enable_reg = 0x8c008,
3264 .enable_mask = BIT(0),
3265 .hw.init = &(struct clk_init_data){
3266 .name = "gcc_usb3_prim_clkref_clk",
3267 .ops = &clk_branch2_ops,
3272 static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
3273 .halt_reg = 0xf050,
3274 .halt_check = BRANCH_HALT,
3275 .clkr = {
3276 .enable_reg = 0xf050,
3277 .enable_mask = BIT(0),
3278 .hw.init = &(struct clk_init_data){
3279 .name = "gcc_usb3_prim_phy_aux_clk",
3280 .parent_hws = (const struct clk_hw *[]){
3281 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw },
3282 .num_parents = 1,
3283 .flags = CLK_SET_RATE_PARENT,
3284 .ops = &clk_branch2_ops,
3289 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
3290 .halt_reg = 0xf054,
3291 .halt_check = BRANCH_HALT,
3292 .clkr = {
3293 .enable_reg = 0xf054,
3294 .enable_mask = BIT(0),
3295 .hw.init = &(struct clk_init_data){
3296 .name = "gcc_usb3_prim_phy_com_aux_clk",
3297 .parent_hws = (const struct clk_hw *[]){
3298 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw },
3299 .num_parents = 1,
3300 .flags = CLK_SET_RATE_PARENT,
3301 .ops = &clk_branch2_ops,
3306 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
3307 .halt_check = BRANCH_HALT_SKIP,
3308 .clkr = {
3309 .enable_reg = 0xf058,
3310 .enable_mask = BIT(0),
3311 .hw.init = &(struct clk_init_data){
3312 .name = "gcc_usb3_prim_phy_pipe_clk",
3313 .ops = &clk_branch2_ops,
3318 static struct clk_branch gcc_usb3_sec_clkref_clk = {
3319 .halt_reg = 0x8c028,
3320 .halt_check = BRANCH_HALT,
3321 .clkr = {
3322 .enable_reg = 0x8c028,
3323 .enable_mask = BIT(0),
3324 .hw.init = &(struct clk_init_data){
3325 .name = "gcc_usb3_sec_clkref_clk",
3326 .ops = &clk_branch2_ops,
3331 static struct clk_branch gcc_usb3_sec_phy_aux_clk = {
3332 .halt_reg = 0x10050,
3333 .halt_check = BRANCH_HALT,
3334 .clkr = {
3335 .enable_reg = 0x10050,
3336 .enable_mask = BIT(0),
3337 .hw.init = &(struct clk_init_data){
3338 .name = "gcc_usb3_sec_phy_aux_clk",
3339 .parent_hws = (const struct clk_hw *[]){
3340 &gcc_usb3_sec_phy_aux_clk_src.clkr.hw },
3341 .num_parents = 1,
3342 .flags = CLK_SET_RATE_PARENT,
3343 .ops = &clk_branch2_ops,
3348 static struct clk_branch gcc_usb3_sec_phy_com_aux_clk = {
3349 .halt_reg = 0x10054,
3350 .halt_check = BRANCH_HALT,
3351 .clkr = {
3352 .enable_reg = 0x10054,
3353 .enable_mask = BIT(0),
3354 .hw.init = &(struct clk_init_data){
3355 .name = "gcc_usb3_sec_phy_com_aux_clk",
3356 .parent_hws = (const struct clk_hw *[]){
3357 &gcc_usb3_sec_phy_aux_clk_src.clkr.hw },
3358 .num_parents = 1,
3359 .flags = CLK_SET_RATE_PARENT,
3360 .ops = &clk_branch2_ops,
3365 static struct clk_branch gcc_usb3_sec_phy_pipe_clk = {
3366 .halt_check = BRANCH_HALT_SKIP,
3367 .clkr = {
3368 .enable_reg = 0x10058,
3369 .enable_mask = BIT(0),
3370 .hw.init = &(struct clk_init_data){
3371 .name = "gcc_usb3_sec_phy_pipe_clk",
3372 .ops = &clk_branch2_ops,
3378 * Clock ON depends on external parent 'config noc', so cant poll
3379 * delay and also mark as crtitical for video boot
3381 static struct clk_branch gcc_video_ahb_clk = {
3382 .halt_reg = 0xb004,
3383 .halt_check = BRANCH_HALT_DELAY,
3384 .hwcg_reg = 0xb004,
3385 .hwcg_bit = 1,
3386 .clkr = {
3387 .enable_reg = 0xb004,
3388 .enable_mask = BIT(0),
3389 .hw.init = &(struct clk_init_data){
3390 .name = "gcc_video_ahb_clk",
3391 .flags = CLK_IS_CRITICAL,
3392 .ops = &clk_branch2_ops,
3397 static struct clk_branch gcc_video_axi0_clk = {
3398 .halt_reg = 0xb024,
3399 .halt_check = BRANCH_HALT,
3400 .clkr = {
3401 .enable_reg = 0xb024,
3402 .enable_mask = BIT(0),
3403 .hw.init = &(struct clk_init_data){
3404 .name = "gcc_video_axi0_clk",
3405 .ops = &clk_branch2_ops,
3410 static struct clk_branch gcc_video_axi1_clk = {
3411 .halt_reg = 0xb028,
3412 .halt_check = BRANCH_HALT,
3413 .clkr = {
3414 .enable_reg = 0xb028,
3415 .enable_mask = BIT(0),
3416 .hw.init = &(struct clk_init_data){
3417 .name = "gcc_video_axi1_clk",
3418 .ops = &clk_branch2_ops,
3423 static struct clk_branch gcc_video_axic_clk = {
3424 .halt_reg = 0xb02c,
3425 .halt_check = BRANCH_HALT,
3426 .clkr = {
3427 .enable_reg = 0xb02c,
3428 .enable_mask = BIT(0),
3429 .hw.init = &(struct clk_init_data){
3430 .name = "gcc_video_axic_clk",
3431 .ops = &clk_branch2_ops,
3436 /* XO critical input to video, so no need to poll */
3437 static struct clk_branch gcc_video_xo_clk = {
3438 .halt_reg = 0xb040,
3439 .halt_check = BRANCH_HALT_DELAY,
3440 .clkr = {
3441 .enable_reg = 0xb040,
3442 .enable_mask = BIT(0),
3443 .hw.init = &(struct clk_init_data){
3444 .name = "gcc_video_xo_clk",
3445 .flags = CLK_IS_CRITICAL,
3446 .ops = &clk_branch2_ops,
3451 static struct gdsc usb30_prim_gdsc = {
3452 .gdscr = 0xf004,
3453 .pd = {
3454 .name = "usb30_prim_gdsc",
3456 .pwrsts = PWRSTS_OFF_ON,
3457 .flags = POLL_CFG_GDSCR,
3460 static struct gdsc usb30_sec_gdsc = {
3461 .gdscr = 0x10004,
3462 .pd = {
3463 .name = "usb30_sec_gdsc",
3465 .pwrsts = PWRSTS_OFF_ON,
3466 .flags = POLL_CFG_GDSCR,
3469 static struct clk_regmap *gcc_sm8150_clocks[] = {
3470 [GCC_AGGRE_NOC_PCIE_TBU_CLK] = &gcc_aggre_noc_pcie_tbu_clk.clkr,
3471 [GCC_AGGRE_UFS_CARD_AXI_CLK] = &gcc_aggre_ufs_card_axi_clk.clkr,
3472 [GCC_AGGRE_UFS_CARD_AXI_HW_CTL_CLK] =
3473 &gcc_aggre_ufs_card_axi_hw_ctl_clk.clkr,
3474 [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
3475 [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] =
3476 &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr,
3477 [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
3478 [GCC_AGGRE_USB3_SEC_AXI_CLK] = &gcc_aggre_usb3_sec_axi_clk.clkr,
3479 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3480 [GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr,
3481 [GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,
3482 [GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr,
3483 [GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr,
3484 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
3485 [GCC_CFG_NOC_USB3_SEC_AXI_CLK] = &gcc_cfg_noc_usb3_sec_axi_clk.clkr,
3486 [GCC_CPUSS_AHB_CLK] = &gcc_cpuss_ahb_clk.clkr,
3487 [GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr,
3488 [GCC_CPUSS_DVM_BUS_CLK] = &gcc_cpuss_dvm_bus_clk.clkr,
3489 [GCC_CPUSS_GNOC_CLK] = &gcc_cpuss_gnoc_clk.clkr,
3490 [GCC_CPUSS_RBCPR_CLK] = &gcc_cpuss_rbcpr_clk.clkr,
3491 [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
3492 [GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr,
3493 [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
3494 [GCC_DISP_SF_AXI_CLK] = &gcc_disp_sf_axi_clk.clkr,
3495 [GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr,
3496 [GCC_EMAC_AXI_CLK] = &gcc_emac_axi_clk.clkr,
3497 [GCC_EMAC_PTP_CLK] = &gcc_emac_ptp_clk.clkr,
3498 [GCC_EMAC_PTP_CLK_SRC] = &gcc_emac_ptp_clk_src.clkr,
3499 [GCC_EMAC_RGMII_CLK] = &gcc_emac_rgmii_clk.clkr,
3500 [GCC_EMAC_RGMII_CLK_SRC] = &gcc_emac_rgmii_clk_src.clkr,
3501 [GCC_EMAC_SLV_AHB_CLK] = &gcc_emac_slv_ahb_clk.clkr,
3502 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3503 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
3504 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3505 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
3506 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3507 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
3508 [GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,
3509 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
3510 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
3511 [GCC_GPU_IREF_CLK] = &gcc_gpu_iref_clk.clkr,
3512 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
3513 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
3514 [GCC_NPU_AT_CLK] = &gcc_npu_at_clk.clkr,
3515 [GCC_NPU_AXI_CLK] = &gcc_npu_axi_clk.clkr,
3516 [GCC_NPU_CFG_AHB_CLK] = &gcc_npu_cfg_ahb_clk.clkr,
3517 [GCC_NPU_GPLL0_CLK_SRC] = &gcc_npu_gpll0_clk_src.clkr,
3518 [GCC_NPU_GPLL0_DIV_CLK_SRC] = &gcc_npu_gpll0_div_clk_src.clkr,
3519 [GCC_NPU_TRIG_CLK] = &gcc_npu_trig_clk.clkr,
3520 [GCC_PCIE0_PHY_REFGEN_CLK] = &gcc_pcie0_phy_refgen_clk.clkr,
3521 [GCC_PCIE1_PHY_REFGEN_CLK] = &gcc_pcie1_phy_refgen_clk.clkr,
3522 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
3523 [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
3524 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
3525 [GCC_PCIE_0_CLKREF_CLK] = &gcc_pcie_0_clkref_clk.clkr,
3526 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
3527 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
3528 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
3529 [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
3530 [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
3531 [GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr,
3532 [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
3533 [GCC_PCIE_1_CLKREF_CLK] = &gcc_pcie_1_clkref_clk.clkr,
3534 [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
3535 [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
3536 [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
3537 [GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr,
3538 [GCC_PCIE_PHY_AUX_CLK] = &gcc_pcie_phy_aux_clk.clkr,
3539 [GCC_PCIE_PHY_REFGEN_CLK_SRC] = &gcc_pcie_phy_refgen_clk_src.clkr,
3540 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3541 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
3542 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3543 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
3544 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3545 [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
3546 [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
3547 [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
3548 [GCC_QMIP_VIDEO_CVP_AHB_CLK] = &gcc_qmip_video_cvp_ahb_clk.clkr,
3549 [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
3550 [GCC_QSPI_CNOC_PERIPH_AHB_CLK] = &gcc_qspi_cnoc_periph_ahb_clk.clkr,
3551 [GCC_QSPI_CORE_CLK] = &gcc_qspi_core_clk.clkr,
3552 [GCC_QSPI_CORE_CLK_SRC] = &gcc_qspi_core_clk_src.clkr,
3553 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
3554 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
3555 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
3556 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
3557 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
3558 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
3559 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
3560 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
3561 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
3562 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
3563 [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
3564 [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
3565 [GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr,
3566 [GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr,
3567 [GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr,
3568 [GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr,
3569 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
3570 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
3571 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
3572 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
3573 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
3574 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
3575 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
3576 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
3577 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
3578 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
3579 [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
3580 [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
3581 [GCC_QUPV3_WRAP2_S0_CLK] = &gcc_qupv3_wrap2_s0_clk.clkr,
3582 [GCC_QUPV3_WRAP2_S0_CLK_SRC] = &gcc_qupv3_wrap2_s0_clk_src.clkr,
3583 [GCC_QUPV3_WRAP2_S1_CLK] = &gcc_qupv3_wrap2_s1_clk.clkr,
3584 [GCC_QUPV3_WRAP2_S1_CLK_SRC] = &gcc_qupv3_wrap2_s1_clk_src.clkr,
3585 [GCC_QUPV3_WRAP2_S2_CLK] = &gcc_qupv3_wrap2_s2_clk.clkr,
3586 [GCC_QUPV3_WRAP2_S2_CLK_SRC] = &gcc_qupv3_wrap2_s2_clk_src.clkr,
3587 [GCC_QUPV3_WRAP2_S3_CLK] = &gcc_qupv3_wrap2_s3_clk.clkr,
3588 [GCC_QUPV3_WRAP2_S3_CLK_SRC] = &gcc_qupv3_wrap2_s3_clk_src.clkr,
3589 [GCC_QUPV3_WRAP2_S4_CLK] = &gcc_qupv3_wrap2_s4_clk.clkr,
3590 [GCC_QUPV3_WRAP2_S4_CLK_SRC] = &gcc_qupv3_wrap2_s4_clk_src.clkr,
3591 [GCC_QUPV3_WRAP2_S5_CLK] = &gcc_qupv3_wrap2_s5_clk.clkr,
3592 [GCC_QUPV3_WRAP2_S5_CLK_SRC] = &gcc_qupv3_wrap2_s5_clk_src.clkr,
3593 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
3594 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
3595 [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
3596 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
3597 [GCC_QUPV3_WRAP_2_M_AHB_CLK] = &gcc_qupv3_wrap_2_m_ahb_clk.clkr,
3598 [GCC_QUPV3_WRAP_2_S_AHB_CLK] = &gcc_qupv3_wrap_2_s_ahb_clk.clkr,
3599 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3600 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3601 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
3602 [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
3603 [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
3604 [GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr,
3605 [GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,
3606 [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr,
3607 [GCC_TSIF_INACTIVITY_TIMERS_CLK] = &gcc_tsif_inactivity_timers_clk.clkr,
3608 [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
3609 [GCC_TSIF_REF_CLK_SRC] = &gcc_tsif_ref_clk_src.clkr,
3610 [GCC_UFS_CARD_AHB_CLK] = &gcc_ufs_card_ahb_clk.clkr,
3611 [GCC_UFS_CARD_AXI_CLK] = &gcc_ufs_card_axi_clk.clkr,
3612 [GCC_UFS_CARD_AXI_CLK_SRC] = &gcc_ufs_card_axi_clk_src.clkr,
3613 [GCC_UFS_CARD_AXI_HW_CTL_CLK] = &gcc_ufs_card_axi_hw_ctl_clk.clkr,
3614 [GCC_UFS_CARD_CLKREF_CLK] = &gcc_ufs_card_clkref_clk.clkr,
3615 [GCC_UFS_CARD_ICE_CORE_CLK] = &gcc_ufs_card_ice_core_clk.clkr,
3616 [GCC_UFS_CARD_ICE_CORE_CLK_SRC] = &gcc_ufs_card_ice_core_clk_src.clkr,
3617 [GCC_UFS_CARD_ICE_CORE_HW_CTL_CLK] =
3618 &gcc_ufs_card_ice_core_hw_ctl_clk.clkr,
3619 [GCC_UFS_CARD_PHY_AUX_CLK] = &gcc_ufs_card_phy_aux_clk.clkr,
3620 [GCC_UFS_CARD_PHY_AUX_CLK_SRC] = &gcc_ufs_card_phy_aux_clk_src.clkr,
3621 [GCC_UFS_CARD_PHY_AUX_HW_CTL_CLK] =
3622 &gcc_ufs_card_phy_aux_hw_ctl_clk.clkr,
3623 [GCC_UFS_CARD_RX_SYMBOL_0_CLK] = &gcc_ufs_card_rx_symbol_0_clk.clkr,
3624 [GCC_UFS_CARD_RX_SYMBOL_1_CLK] = &gcc_ufs_card_rx_symbol_1_clk.clkr,
3625 [GCC_UFS_CARD_TX_SYMBOL_0_CLK] = &gcc_ufs_card_tx_symbol_0_clk.clkr,
3626 [GCC_UFS_CARD_UNIPRO_CORE_CLK] = &gcc_ufs_card_unipro_core_clk.clkr,
3627 [GCC_UFS_CARD_UNIPRO_CORE_CLK_SRC] =
3628 &gcc_ufs_card_unipro_core_clk_src.clkr,
3629 [GCC_UFS_CARD_UNIPRO_CORE_HW_CTL_CLK] =
3630 &gcc_ufs_card_unipro_core_hw_ctl_clk.clkr,
3631 [GCC_UFS_MEM_CLKREF_CLK] = &gcc_ufs_mem_clkref_clk.clkr,
3632 [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
3633 [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
3634 [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
3635 [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr,
3636 [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
3637 [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
3638 [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] =
3639 &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr,
3640 [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
3641 [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
3642 [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr,
3643 [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
3644 [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
3645 [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
3646 [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
3647 [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] =
3648 &gcc_ufs_phy_unipro_core_clk_src.clkr,
3649 [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] =
3650 &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr,
3651 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
3652 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
3653 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
3654 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] =
3655 &gcc_usb30_prim_mock_utmi_clk_src.clkr,
3656 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
3657 [GCC_USB30_SEC_MASTER_CLK] = &gcc_usb30_sec_master_clk.clkr,
3658 [GCC_USB30_SEC_MASTER_CLK_SRC] = &gcc_usb30_sec_master_clk_src.clkr,
3659 [GCC_USB30_SEC_MOCK_UTMI_CLK] = &gcc_usb30_sec_mock_utmi_clk.clkr,
3660 [GCC_USB30_SEC_MOCK_UTMI_CLK_SRC] =
3661 &gcc_usb30_sec_mock_utmi_clk_src.clkr,
3662 [GCC_USB30_SEC_SLEEP_CLK] = &gcc_usb30_sec_sleep_clk.clkr,
3663 [GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,
3664 [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
3665 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
3666 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
3667 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
3668 [GCC_USB3_SEC_CLKREF_CLK] = &gcc_usb3_sec_clkref_clk.clkr,
3669 [GCC_USB3_SEC_PHY_AUX_CLK] = &gcc_usb3_sec_phy_aux_clk.clkr,
3670 [GCC_USB3_SEC_PHY_AUX_CLK_SRC] = &gcc_usb3_sec_phy_aux_clk_src.clkr,
3671 [GCC_USB3_SEC_PHY_COM_AUX_CLK] = &gcc_usb3_sec_phy_com_aux_clk.clkr,
3672 [GCC_USB3_SEC_PHY_PIPE_CLK] = &gcc_usb3_sec_phy_pipe_clk.clkr,
3673 [GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr,
3674 [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
3675 [GCC_VIDEO_AXI1_CLK] = &gcc_video_axi1_clk.clkr,
3676 [GCC_VIDEO_AXIC_CLK] = &gcc_video_axic_clk.clkr,
3677 [GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr,
3678 [GPLL0] = &gpll0.clkr,
3679 [GPLL0_OUT_EVEN] = &gpll0_out_even.clkr,
3680 [GPLL7] = &gpll7.clkr,
3681 [GPLL9] = &gpll9.clkr,
3684 static const struct qcom_reset_map gcc_sm8150_resets[] = {
3685 [GCC_EMAC_BCR] = { 0x6000 },
3686 [GCC_GPU_BCR] = { 0x71000 },
3687 [GCC_MMSS_BCR] = { 0xb000 },
3688 [GCC_NPU_BCR] = { 0x4d000 },
3689 [GCC_PCIE_0_BCR] = { 0x6b000 },
3690 [GCC_PCIE_0_PHY_BCR] = { 0x6c01c },
3691 [GCC_PCIE_1_BCR] = { 0x8d000 },
3692 [GCC_PCIE_1_PHY_BCR] = { 0x8e01c },
3693 [GCC_PCIE_PHY_BCR] = { 0x6f000 },
3694 [GCC_PDM_BCR] = { 0x33000 },
3695 [GCC_PRNG_BCR] = { 0x34000 },
3696 [GCC_QSPI_BCR] = { 0x24008 },
3697 [GCC_QUPV3_WRAPPER_0_BCR] = { 0x17000 },
3698 [GCC_QUPV3_WRAPPER_1_BCR] = { 0x18000 },
3699 [GCC_QUPV3_WRAPPER_2_BCR] = { 0x1e000 },
3700 [GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 },
3701 [GCC_QUSB2PHY_SEC_BCR] = { 0x12004 },
3702 [GCC_USB3_PHY_PRIM_BCR] = { 0x50000 },
3703 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x50008 },
3704 [GCC_USB3_PHY_SEC_BCR] = { 0x5000c },
3705 [GCC_USB3PHY_PHY_SEC_BCR] = { 0x50010 },
3706 [GCC_SDCC2_BCR] = { 0x14000 },
3707 [GCC_SDCC4_BCR] = { 0x16000 },
3708 [GCC_TSIF_BCR] = { 0x36000 },
3709 [GCC_UFS_CARD_BCR] = { 0x75000 },
3710 [GCC_UFS_PHY_BCR] = { 0x77000 },
3711 [GCC_USB30_PRIM_BCR] = { 0xf000 },
3712 [GCC_USB30_SEC_BCR] = { 0x10000 },
3713 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 },
3716 static struct gdsc *gcc_sm8150_gdscs[] = {
3717 [USB30_PRIM_GDSC] = &usb30_prim_gdsc,
3718 [USB30_SEC_GDSC] = &usb30_sec_gdsc,
3721 static const struct regmap_config gcc_sm8150_regmap_config = {
3722 .reg_bits = 32,
3723 .reg_stride = 4,
3724 .val_bits = 32,
3725 .max_register = 0x9c040,
3726 .fast_io = true,
3729 static const struct qcom_cc_desc gcc_sm8150_desc = {
3730 .config = &gcc_sm8150_regmap_config,
3731 .clks = gcc_sm8150_clocks,
3732 .num_clks = ARRAY_SIZE(gcc_sm8150_clocks),
3733 .resets = gcc_sm8150_resets,
3734 .num_resets = ARRAY_SIZE(gcc_sm8150_resets),
3735 .gdscs = gcc_sm8150_gdscs,
3736 .num_gdscs = ARRAY_SIZE(gcc_sm8150_gdscs),
3739 static const struct of_device_id gcc_sm8150_match_table[] = {
3740 { .compatible = "qcom,gcc-sm8150" },
3743 MODULE_DEVICE_TABLE(of, gcc_sm8150_match_table);
3745 static int gcc_sm8150_probe(struct platform_device *pdev)
3747 struct regmap *regmap;
3749 regmap = qcom_cc_map(pdev, &gcc_sm8150_desc);
3750 if (IS_ERR(regmap))
3751 return PTR_ERR(regmap);
3753 /* Disable the GPLL0 active input to NPU and GPU via MISC registers */
3754 regmap_update_bits(regmap, 0x4d110, 0x3, 0x3);
3755 regmap_update_bits(regmap, 0x71028, 0x3, 0x3);
3757 return qcom_cc_really_probe(pdev, &gcc_sm8150_desc, regmap);
3760 static struct platform_driver gcc_sm8150_driver = {
3761 .probe = gcc_sm8150_probe,
3762 .driver = {
3763 .name = "gcc-sm8150",
3764 .of_match_table = gcc_sm8150_match_table,
3768 static int __init gcc_sm8150_init(void)
3770 return platform_driver_register(&gcc_sm8150_driver);
3772 subsys_initcall(gcc_sm8150_init);
3774 static void __exit gcc_sm8150_exit(void)
3776 platform_driver_unregister(&gcc_sm8150_driver);
3778 module_exit(gcc_sm8150_exit);
3780 MODULE_DESCRIPTION("QTI GCC SM8150 Driver");
3781 MODULE_LICENSE("GPL v2");