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

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