1
2
3
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/of_device.h>
13#include <linux/clk-provider.h>
14#include <linux/regmap.h>
15#include <linux/reset-controller.h>
16
17#include <dt-bindings/clock/qcom,gcc-msm8996.h>
18
19#include "common.h"
20#include "clk-regmap.h"
21#include "clk-alpha-pll.h"
22#include "clk-rcg.h"
23#include "clk-branch.h"
24#include "reset.h"
25#include "gdsc.h"
26
27enum {
28 P_XO,
29 P_GPLL0,
30 P_GPLL2,
31 P_GPLL3,
32 P_GPLL1,
33 P_GPLL2_EARLY,
34 P_GPLL0_EARLY_DIV,
35 P_SLEEP_CLK,
36 P_GPLL4,
37 P_AUD_REF_CLK,
38 P_GPLL1_EARLY_DIV
39};
40
41static const struct parent_map gcc_sleep_clk_map[] = {
42 { P_SLEEP_CLK, 5 }
43};
44
45static const char * const gcc_sleep_clk[] = {
46 "sleep_clk"
47};
48
49static const struct parent_map gcc_xo_gpll0_map[] = {
50 { P_XO, 0 },
51 { P_GPLL0, 1 }
52};
53
54static const char * const gcc_xo_gpll0[] = {
55 "xo",
56 "gpll0"
57};
58
59static const struct parent_map gcc_xo_sleep_clk_map[] = {
60 { P_XO, 0 },
61 { P_SLEEP_CLK, 5 }
62};
63
64static const char * const gcc_xo_sleep_clk[] = {
65 "xo",
66 "sleep_clk"
67};
68
69static const struct parent_map gcc_xo_gpll0_gpll0_early_div_map[] = {
70 { P_XO, 0 },
71 { P_GPLL0, 1 },
72 { P_GPLL0_EARLY_DIV, 6 }
73};
74
75static const char * const gcc_xo_gpll0_gpll0_early_div[] = {
76 "xo",
77 "gpll0",
78 "gpll0_early_div"
79};
80
81static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {
82 { P_XO, 0 },
83 { P_GPLL0, 1 },
84 { P_GPLL4, 5 }
85};
86
87static const char * const gcc_xo_gpll0_gpll4[] = {
88 "xo",
89 "gpll0",
90 "gpll4"
91};
92
93static const struct parent_map gcc_xo_gpll0_aud_ref_clk_map[] = {
94 { P_XO, 0 },
95 { P_GPLL0, 1 },
96 { P_AUD_REF_CLK, 2 }
97};
98
99static const char * const gcc_xo_gpll0_aud_ref_clk[] = {
100 "xo",
101 "gpll0",
102 "aud_ref_clk"
103};
104
105static const struct parent_map gcc_xo_gpll0_sleep_clk_gpll0_early_div_map[] = {
106 { P_XO, 0 },
107 { P_GPLL0, 1 },
108 { P_SLEEP_CLK, 5 },
109 { P_GPLL0_EARLY_DIV, 6 }
110};
111
112static const char * const gcc_xo_gpll0_sleep_clk_gpll0_early_div[] = {
113 "xo",
114 "gpll0",
115 "sleep_clk",
116 "gpll0_early_div"
117};
118
119static const struct parent_map gcc_xo_gpll0_gpll4_gpll0_early_div_map[] = {
120 { P_XO, 0 },
121 { P_GPLL0, 1 },
122 { P_GPLL4, 5 },
123 { P_GPLL0_EARLY_DIV, 6 }
124};
125
126static const char * const gcc_xo_gpll0_gpll4_gpll0_early_div[] = {
127 "xo",
128 "gpll0",
129 "gpll4",
130 "gpll0_early_div"
131};
132
133static const struct parent_map gcc_xo_gpll0_gpll2_gpll3_gpll0_early_div_map[] = {
134 { P_XO, 0 },
135 { P_GPLL0, 1 },
136 { P_GPLL2, 2 },
137 { P_GPLL3, 3 },
138 { P_GPLL0_EARLY_DIV, 6 }
139};
140
141static const char * const gcc_xo_gpll0_gpll2_gpll3_gpll0_early_div[] = {
142 "xo",
143 "gpll0",
144 "gpll2",
145 "gpll3",
146 "gpll0_early_div"
147};
148
149static const struct parent_map gcc_xo_gpll0_gpll1_early_div_gpll1_gpll4_gpll0_early_div_map[] = {
150 { P_XO, 0 },
151 { P_GPLL0, 1 },
152 { P_GPLL1_EARLY_DIV, 3 },
153 { P_GPLL1, 4 },
154 { P_GPLL4, 5 },
155 { P_GPLL0_EARLY_DIV, 6 }
156};
157
158static const char * const gcc_xo_gpll0_gpll1_early_div_gpll1_gpll4_gpll0_early_div[] = {
159 "xo",
160 "gpll0",
161 "gpll1_early_div",
162 "gpll1",
163 "gpll4",
164 "gpll0_early_div"
165};
166
167static const struct parent_map gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll2_early_gpll0_early_div_map[] = {
168 { P_XO, 0 },
169 { P_GPLL0, 1 },
170 { P_GPLL2, 2 },
171 { P_GPLL3, 3 },
172 { P_GPLL1, 4 },
173 { P_GPLL2_EARLY, 5 },
174 { P_GPLL0_EARLY_DIV, 6 }
175};
176
177static const char * const gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll2_early_gpll0_early_div[] = {
178 "xo",
179 "gpll0",
180 "gpll2",
181 "gpll3",
182 "gpll1",
183 "gpll2_early",
184 "gpll0_early_div"
185};
186
187static const struct parent_map gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll4_gpll0_early_div_map[] = {
188 { P_XO, 0 },
189 { P_GPLL0, 1 },
190 { P_GPLL2, 2 },
191 { P_GPLL3, 3 },
192 { P_GPLL1, 4 },
193 { P_GPLL4, 5 },
194 { P_GPLL0_EARLY_DIV, 6 }
195};
196
197static const char * const gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll4_gpll0_early_div[] = {
198 "xo",
199 "gpll0",
200 "gpll2",
201 "gpll3",
202 "gpll1",
203 "gpll4",
204 "gpll0_early_div"
205};
206
207static struct clk_fixed_factor xo = {
208 .mult = 1,
209 .div = 1,
210 .hw.init = &(struct clk_init_data){
211 .name = "xo",
212 .parent_names = (const char *[]){ "xo_board" },
213 .num_parents = 1,
214 .ops = &clk_fixed_factor_ops,
215 },
216};
217
218static struct clk_alpha_pll gpll0_early = {
219 .offset = 0x00000,
220 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
221 .clkr = {
222 .enable_reg = 0x52000,
223 .enable_mask = BIT(0),
224 .hw.init = &(struct clk_init_data){
225 .name = "gpll0_early",
226 .parent_names = (const char *[]){ "xo" },
227 .num_parents = 1,
228 .ops = &clk_alpha_pll_ops,
229 },
230 },
231};
232
233static struct clk_fixed_factor gpll0_early_div = {
234 .mult = 1,
235 .div = 2,
236 .hw.init = &(struct clk_init_data){
237 .name = "gpll0_early_div",
238 .parent_names = (const char *[]){ "gpll0_early" },
239 .num_parents = 1,
240 .ops = &clk_fixed_factor_ops,
241 },
242};
243
244static struct clk_alpha_pll_postdiv gpll0 = {
245 .offset = 0x00000,
246 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
247 .clkr.hw.init = &(struct clk_init_data){
248 .name = "gpll0",
249 .parent_names = (const char *[]){ "gpll0_early" },
250 .num_parents = 1,
251 .ops = &clk_alpha_pll_postdiv_ops,
252 },
253};
254
255static struct clk_branch gcc_mmss_gpll0_div_clk = {
256 .halt_check = BRANCH_HALT_DELAY,
257 .clkr = {
258 .enable_reg = 0x5200c,
259 .enable_mask = BIT(0),
260 .hw.init = &(struct clk_init_data){
261 .name = "gcc_mmss_gpll0_div_clk",
262 .parent_names = (const char *[]){ "gpll0" },
263 .num_parents = 1,
264 .flags = CLK_SET_RATE_PARENT,
265 .ops = &clk_branch2_ops,
266 },
267 },
268};
269
270static struct clk_branch gcc_mss_gpll0_div_clk = {
271 .halt_check = BRANCH_HALT_DELAY,
272 .clkr = {
273 .enable_reg = 0x5200c,
274 .enable_mask = BIT(2),
275 .hw.init = &(struct clk_init_data){
276 .name = "gcc_mss_gpll0_div_clk",
277 .parent_names = (const char *[]){ "gpll0" },
278 .num_parents = 1,
279 .flags = CLK_SET_RATE_PARENT,
280 .ops = &clk_branch2_ops
281 },
282 },
283};
284
285static struct clk_alpha_pll gpll4_early = {
286 .offset = 0x77000,
287 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
288 .clkr = {
289 .enable_reg = 0x52000,
290 .enable_mask = BIT(4),
291 .hw.init = &(struct clk_init_data){
292 .name = "gpll4_early",
293 .parent_names = (const char *[]){ "xo" },
294 .num_parents = 1,
295 .ops = &clk_alpha_pll_ops,
296 },
297 },
298};
299
300static struct clk_alpha_pll_postdiv gpll4 = {
301 .offset = 0x77000,
302 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
303 .clkr.hw.init = &(struct clk_init_data){
304 .name = "gpll4",
305 .parent_names = (const char *[]){ "gpll4_early" },
306 .num_parents = 1,
307 .ops = &clk_alpha_pll_postdiv_ops,
308 },
309};
310
311static const struct freq_tbl ftbl_system_noc_clk_src[] = {
312 F(19200000, P_XO, 1, 0, 0),
313 F(50000000, P_GPLL0_EARLY_DIV, 6, 0, 0),
314 F(100000000, P_GPLL0, 6, 0, 0),
315 F(150000000, P_GPLL0, 4, 0, 0),
316 F(200000000, P_GPLL0, 3, 0, 0),
317 F(240000000, P_GPLL0, 2.5, 0, 0),
318 { }
319};
320
321static struct clk_rcg2 system_noc_clk_src = {
322 .cmd_rcgr = 0x0401c,
323 .hid_width = 5,
324 .parent_map = gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll2_early_gpll0_early_div_map,
325 .freq_tbl = ftbl_system_noc_clk_src,
326 .clkr.hw.init = &(struct clk_init_data){
327 .name = "system_noc_clk_src",
328 .parent_names = gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll2_early_gpll0_early_div,
329 .num_parents = 7,
330 .ops = &clk_rcg2_ops,
331 },
332};
333
334static const struct freq_tbl ftbl_config_noc_clk_src[] = {
335 F(19200000, P_XO, 1, 0, 0),
336 F(37500000, P_GPLL0, 16, 0, 0),
337 F(75000000, P_GPLL0, 8, 0, 0),
338 { }
339};
340
341static struct clk_rcg2 config_noc_clk_src = {
342 .cmd_rcgr = 0x0500c,
343 .hid_width = 5,
344 .parent_map = gcc_xo_gpll0_map,
345 .freq_tbl = ftbl_config_noc_clk_src,
346 .clkr.hw.init = &(struct clk_init_data){
347 .name = "config_noc_clk_src",
348 .parent_names = gcc_xo_gpll0,
349 .num_parents = 2,
350 .ops = &clk_rcg2_ops,
351 },
352};
353
354static const struct freq_tbl ftbl_periph_noc_clk_src[] = {
355 F(19200000, P_XO, 1, 0, 0),
356 F(37500000, P_GPLL0, 16, 0, 0),
357 F(50000000, P_GPLL0, 12, 0, 0),
358 F(75000000, P_GPLL0, 8, 0, 0),
359 F(100000000, P_GPLL0, 6, 0, 0),
360 { }
361};
362
363static struct clk_rcg2 periph_noc_clk_src = {
364 .cmd_rcgr = 0x06014,
365 .hid_width = 5,
366 .parent_map = gcc_xo_gpll0_map,
367 .freq_tbl = ftbl_periph_noc_clk_src,
368 .clkr.hw.init = &(struct clk_init_data){
369 .name = "periph_noc_clk_src",
370 .parent_names = gcc_xo_gpll0,
371 .num_parents = 2,
372 .ops = &clk_rcg2_ops,
373 },
374};
375
376static const struct freq_tbl ftbl_usb30_master_clk_src[] = {
377 F(19200000, P_XO, 1, 0, 0),
378 F(120000000, P_GPLL0, 5, 0, 0),
379 F(150000000, P_GPLL0, 4, 0, 0),
380 { }
381};
382
383static struct clk_rcg2 usb30_master_clk_src = {
384 .cmd_rcgr = 0x0f014,
385 .mnd_width = 8,
386 .hid_width = 5,
387 .parent_map = gcc_xo_gpll0_gpll0_early_div_map,
388 .freq_tbl = ftbl_usb30_master_clk_src,
389 .clkr.hw.init = &(struct clk_init_data){
390 .name = "usb30_master_clk_src",
391 .parent_names = gcc_xo_gpll0_gpll0_early_div,
392 .num_parents = 3,
393 .ops = &clk_rcg2_ops,
394 },
395};
396
397static const struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = {
398 F(19200000, P_XO, 1, 0, 0),
399 { }
400};
401
402static struct clk_rcg2 usb30_mock_utmi_clk_src = {
403 .cmd_rcgr = 0x0f028,
404 .hid_width = 5,
405 .parent_map = gcc_xo_gpll0_gpll0_early_div_map,
406 .freq_tbl = ftbl_usb30_mock_utmi_clk_src,
407 .clkr.hw.init = &(struct clk_init_data){
408 .name = "usb30_mock_utmi_clk_src",
409 .parent_names = gcc_xo_gpll0_gpll0_early_div,
410 .num_parents = 3,
411 .ops = &clk_rcg2_ops,
412 },
413};
414
415static const struct freq_tbl ftbl_usb3_phy_aux_clk_src[] = {
416 F(1200000, P_XO, 16, 0, 0),
417 { }
418};
419
420static struct clk_rcg2 usb3_phy_aux_clk_src = {
421 .cmd_rcgr = 0x5000c,
422 .hid_width = 5,
423 .parent_map = gcc_xo_sleep_clk_map,
424 .freq_tbl = ftbl_usb3_phy_aux_clk_src,
425 .clkr.hw.init = &(struct clk_init_data){
426 .name = "usb3_phy_aux_clk_src",
427 .parent_names = gcc_xo_sleep_clk,
428 .num_parents = 2,
429 .ops = &clk_rcg2_ops,
430 },
431};
432
433static const struct freq_tbl ftbl_usb20_master_clk_src[] = {
434 F(120000000, P_GPLL0, 5, 0, 0),
435 { }
436};
437
438static struct clk_rcg2 usb20_master_clk_src = {
439 .cmd_rcgr = 0x12010,
440 .mnd_width = 8,
441 .hid_width = 5,
442 .parent_map = gcc_xo_gpll0_gpll0_early_div_map,
443 .freq_tbl = ftbl_usb20_master_clk_src,
444 .clkr.hw.init = &(struct clk_init_data){
445 .name = "usb20_master_clk_src",
446 .parent_names = gcc_xo_gpll0_gpll0_early_div,
447 .num_parents = 3,
448 .ops = &clk_rcg2_ops,
449 },
450};
451
452static struct clk_rcg2 usb20_mock_utmi_clk_src = {
453 .cmd_rcgr = 0x12024,
454 .hid_width = 5,
455 .parent_map = gcc_xo_gpll0_gpll0_early_div_map,
456 .freq_tbl = ftbl_usb30_mock_utmi_clk_src,
457 .clkr.hw.init = &(struct clk_init_data){
458 .name = "usb20_mock_utmi_clk_src",
459 .parent_names = gcc_xo_gpll0_gpll0_early_div,
460 .num_parents = 3,
461 .ops = &clk_rcg2_ops,
462 },
463};
464
465static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
466 F(144000, P_XO, 16, 3, 25),
467 F(400000, P_XO, 12, 1, 4),
468 F(20000000, P_GPLL0, 15, 1, 2),
469 F(25000000, P_GPLL0, 12, 1, 2),
470 F(50000000, P_GPLL0, 12, 0, 0),
471 F(96000000, P_GPLL4, 4, 0, 0),
472 F(192000000, P_GPLL4, 2, 0, 0),
473 F(384000000, P_GPLL4, 1, 0, 0),
474 { }
475};
476
477static struct clk_rcg2 sdcc1_apps_clk_src = {
478 .cmd_rcgr = 0x13010,
479 .mnd_width = 8,
480 .hid_width = 5,
481 .parent_map = gcc_xo_gpll0_gpll4_gpll0_early_div_map,
482 .freq_tbl = ftbl_sdcc1_apps_clk_src,
483 .clkr.hw.init = &(struct clk_init_data){
484 .name = "sdcc1_apps_clk_src",
485 .parent_names = gcc_xo_gpll0_gpll4_gpll0_early_div,
486 .num_parents = 4,
487 .ops = &clk_rcg2_floor_ops,
488 },
489};
490
491static struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = {
492 F(19200000, P_XO, 1, 0, 0),
493 F(150000000, P_GPLL0, 4, 0, 0),
494 F(300000000, P_GPLL0, 2, 0, 0),
495 { }
496};
497
498static struct clk_rcg2 sdcc1_ice_core_clk_src = {
499 .cmd_rcgr = 0x13024,
500 .hid_width = 5,
501 .parent_map = gcc_xo_gpll0_gpll4_gpll0_early_div_map,
502 .freq_tbl = ftbl_sdcc1_ice_core_clk_src,
503 .clkr.hw.init = &(struct clk_init_data){
504 .name = "sdcc1_ice_core_clk_src",
505 .parent_names = gcc_xo_gpll0_gpll4_gpll0_early_div,
506 .num_parents = 4,
507 .ops = &clk_rcg2_ops,
508 },
509};
510
511static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = {
512 F(144000, P_XO, 16, 3, 25),
513 F(400000, P_XO, 12, 1, 4),
514 F(20000000, P_GPLL0, 15, 1, 2),
515 F(25000000, P_GPLL0, 12, 1, 2),
516 F(50000000, P_GPLL0, 12, 0, 0),
517 F(100000000, P_GPLL0, 6, 0, 0),
518 F(200000000, P_GPLL0, 3, 0, 0),
519 { }
520};
521
522static struct clk_rcg2 sdcc2_apps_clk_src = {
523 .cmd_rcgr = 0x14010,
524 .mnd_width = 8,
525 .hid_width = 5,
526 .parent_map = gcc_xo_gpll0_gpll4_map,
527 .freq_tbl = ftbl_sdcc2_apps_clk_src,
528 .clkr.hw.init = &(struct clk_init_data){
529 .name = "sdcc2_apps_clk_src",
530 .parent_names = gcc_xo_gpll0_gpll4,
531 .num_parents = 3,
532 .ops = &clk_rcg2_floor_ops,
533 },
534};
535
536static struct clk_rcg2 sdcc3_apps_clk_src = {
537 .cmd_rcgr = 0x15010,
538 .mnd_width = 8,
539 .hid_width = 5,
540 .parent_map = gcc_xo_gpll0_gpll4_map,
541 .freq_tbl = ftbl_sdcc2_apps_clk_src,
542 .clkr.hw.init = &(struct clk_init_data){
543 .name = "sdcc3_apps_clk_src",
544 .parent_names = gcc_xo_gpll0_gpll4,
545 .num_parents = 3,
546 .ops = &clk_rcg2_floor_ops,
547 },
548};
549
550static const struct freq_tbl ftbl_sdcc4_apps_clk_src[] = {
551 F(144000, P_XO, 16, 3, 25),
552 F(400000, P_XO, 12, 1, 4),
553 F(20000000, P_GPLL0, 15, 1, 2),
554 F(25000000, P_GPLL0, 12, 1, 2),
555 F(50000000, P_GPLL0, 12, 0, 0),
556 F(100000000, P_GPLL0, 6, 0, 0),
557 { }
558};
559
560static struct clk_rcg2 sdcc4_apps_clk_src = {
561 .cmd_rcgr = 0x16010,
562 .mnd_width = 8,
563 .hid_width = 5,
564 .parent_map = gcc_xo_gpll0_map,
565 .freq_tbl = ftbl_sdcc4_apps_clk_src,
566 .clkr.hw.init = &(struct clk_init_data){
567 .name = "sdcc4_apps_clk_src",
568 .parent_names = gcc_xo_gpll0,
569 .num_parents = 2,
570 .ops = &clk_rcg2_floor_ops,
571 },
572};
573
574static const struct freq_tbl ftbl_blsp1_qup1_spi_apps_clk_src[] = {
575 F(960000, P_XO, 10, 1, 2),
576 F(4800000, P_XO, 4, 0, 0),
577 F(9600000, P_XO, 2, 0, 0),
578 F(15000000, P_GPLL0, 10, 1, 4),
579 F(19200000, P_XO, 1, 0, 0),
580 F(25000000, P_GPLL0, 12, 1, 2),
581 F(50000000, P_GPLL0, 12, 0, 0),
582 { }
583};
584
585static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
586 .cmd_rcgr = 0x1900c,
587 .mnd_width = 8,
588 .hid_width = 5,
589 .parent_map = gcc_xo_gpll0_map,
590 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
591 .clkr.hw.init = &(struct clk_init_data){
592 .name = "blsp1_qup1_spi_apps_clk_src",
593 .parent_names = gcc_xo_gpll0,
594 .num_parents = 2,
595 .ops = &clk_rcg2_ops,
596 },
597};
598
599static const struct freq_tbl ftbl_blsp1_qup1_i2c_apps_clk_src[] = {
600 F(19200000, P_XO, 1, 0, 0),
601 F(50000000, P_GPLL0, 12, 0, 0),
602 { }
603};
604
605static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
606 .cmd_rcgr = 0x19020,
607 .hid_width = 5,
608 .parent_map = gcc_xo_gpll0_map,
609 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
610 .clkr.hw.init = &(struct clk_init_data){
611 .name = "blsp1_qup1_i2c_apps_clk_src",
612 .parent_names = gcc_xo_gpll0,
613 .num_parents = 2,
614 .ops = &clk_rcg2_ops,
615 },
616};
617
618static const struct freq_tbl ftbl_blsp1_uart1_apps_clk_src[] = {
619 F(3686400, P_GPLL0, 1, 96, 15625),
620 F(7372800, P_GPLL0, 1, 192, 15625),
621 F(14745600, P_GPLL0, 1, 384, 15625),
622 F(16000000, P_GPLL0, 5, 2, 15),
623 F(19200000, P_XO, 1, 0, 0),
624 F(24000000, P_GPLL0, 5, 1, 5),
625 F(32000000, P_GPLL0, 1, 4, 75),
626 F(40000000, P_GPLL0, 15, 0, 0),
627 F(46400000, P_GPLL0, 1, 29, 375),
628 F(48000000, P_GPLL0, 12.5, 0, 0),
629 F(51200000, P_GPLL0, 1, 32, 375),
630 F(56000000, P_GPLL0, 1, 7, 75),
631 F(58982400, P_GPLL0, 1, 1536, 15625),
632 F(60000000, P_GPLL0, 10, 0, 0),
633 F(63157895, P_GPLL0, 9.5, 0, 0),
634 { }
635};
636
637static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
638 .cmd_rcgr = 0x1a00c,
639 .mnd_width = 16,
640 .hid_width = 5,
641 .parent_map = gcc_xo_gpll0_map,
642 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
643 .clkr.hw.init = &(struct clk_init_data){
644 .name = "blsp1_uart1_apps_clk_src",
645 .parent_names = gcc_xo_gpll0,
646 .num_parents = 2,
647 .ops = &clk_rcg2_ops,
648 },
649};
650
651static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
652 .cmd_rcgr = 0x1b00c,
653 .mnd_width = 8,
654 .hid_width = 5,
655 .parent_map = gcc_xo_gpll0_map,
656 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
657 .clkr.hw.init = &(struct clk_init_data){
658 .name = "blsp1_qup2_spi_apps_clk_src",
659 .parent_names = gcc_xo_gpll0,
660 .num_parents = 2,
661 .ops = &clk_rcg2_ops,
662 },
663};
664
665static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
666 .cmd_rcgr = 0x1b020,
667 .hid_width = 5,
668 .parent_map = gcc_xo_gpll0_map,
669 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
670 .clkr.hw.init = &(struct clk_init_data){
671 .name = "blsp1_qup2_i2c_apps_clk_src",
672 .parent_names = gcc_xo_gpll0,
673 .num_parents = 2,
674 .ops = &clk_rcg2_ops,
675 },
676};
677
678static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
679 .cmd_rcgr = 0x1c00c,
680 .mnd_width = 16,
681 .hid_width = 5,
682 .parent_map = gcc_xo_gpll0_map,
683 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
684 .clkr.hw.init = &(struct clk_init_data){
685 .name = "blsp1_uart2_apps_clk_src",
686 .parent_names = gcc_xo_gpll0,
687 .num_parents = 2,
688 .ops = &clk_rcg2_ops,
689 },
690};
691
692static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
693 .cmd_rcgr = 0x1d00c,
694 .mnd_width = 8,
695 .hid_width = 5,
696 .parent_map = gcc_xo_gpll0_map,
697 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
698 .clkr.hw.init = &(struct clk_init_data){
699 .name = "blsp1_qup3_spi_apps_clk_src",
700 .parent_names = gcc_xo_gpll0,
701 .num_parents = 2,
702 .ops = &clk_rcg2_ops,
703 },
704};
705
706static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
707 .cmd_rcgr = 0x1d020,
708 .hid_width = 5,
709 .parent_map = gcc_xo_gpll0_map,
710 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
711 .clkr.hw.init = &(struct clk_init_data){
712 .name = "blsp1_qup3_i2c_apps_clk_src",
713 .parent_names = gcc_xo_gpll0,
714 .num_parents = 2,
715 .ops = &clk_rcg2_ops,
716 },
717};
718
719static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
720 .cmd_rcgr = 0x1e00c,
721 .mnd_width = 16,
722 .hid_width = 5,
723 .parent_map = gcc_xo_gpll0_map,
724 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
725 .clkr.hw.init = &(struct clk_init_data){
726 .name = "blsp1_uart3_apps_clk_src",
727 .parent_names = gcc_xo_gpll0,
728 .num_parents = 2,
729 .ops = &clk_rcg2_ops,
730 },
731};
732
733static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
734 .cmd_rcgr = 0x1f00c,
735 .mnd_width = 8,
736 .hid_width = 5,
737 .parent_map = gcc_xo_gpll0_map,
738 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
739 .clkr.hw.init = &(struct clk_init_data){
740 .name = "blsp1_qup4_spi_apps_clk_src",
741 .parent_names = gcc_xo_gpll0,
742 .num_parents = 2,
743 .ops = &clk_rcg2_ops,
744 },
745};
746
747static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
748 .cmd_rcgr = 0x1f020,
749 .hid_width = 5,
750 .parent_map = gcc_xo_gpll0_map,
751 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
752 .clkr.hw.init = &(struct clk_init_data){
753 .name = "blsp1_qup4_i2c_apps_clk_src",
754 .parent_names = gcc_xo_gpll0,
755 .num_parents = 2,
756 .ops = &clk_rcg2_ops,
757 },
758};
759
760static struct clk_rcg2 blsp1_uart4_apps_clk_src = {
761 .cmd_rcgr = 0x2000c,
762 .mnd_width = 16,
763 .hid_width = 5,
764 .parent_map = gcc_xo_gpll0_map,
765 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
766 .clkr.hw.init = &(struct clk_init_data){
767 .name = "blsp1_uart4_apps_clk_src",
768 .parent_names = gcc_xo_gpll0,
769 .num_parents = 2,
770 .ops = &clk_rcg2_ops,
771 },
772};
773
774static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
775 .cmd_rcgr = 0x2100c,
776 .mnd_width = 8,
777 .hid_width = 5,
778 .parent_map = gcc_xo_gpll0_map,
779 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
780 .clkr.hw.init = &(struct clk_init_data){
781 .name = "blsp1_qup5_spi_apps_clk_src",
782 .parent_names = gcc_xo_gpll0,
783 .num_parents = 2,
784 .ops = &clk_rcg2_ops,
785 },
786};
787
788static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
789 .cmd_rcgr = 0x21020,
790 .hid_width = 5,
791 .parent_map = gcc_xo_gpll0_map,
792 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
793 .clkr.hw.init = &(struct clk_init_data){
794 .name = "blsp1_qup5_i2c_apps_clk_src",
795 .parent_names = gcc_xo_gpll0,
796 .num_parents = 2,
797 .ops = &clk_rcg2_ops,
798 },
799};
800
801static struct clk_rcg2 blsp1_uart5_apps_clk_src = {
802 .cmd_rcgr = 0x2200c,
803 .mnd_width = 16,
804 .hid_width = 5,
805 .parent_map = gcc_xo_gpll0_map,
806 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
807 .clkr.hw.init = &(struct clk_init_data){
808 .name = "blsp1_uart5_apps_clk_src",
809 .parent_names = gcc_xo_gpll0,
810 .num_parents = 2,
811 .ops = &clk_rcg2_ops,
812 },
813};
814
815static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
816 .cmd_rcgr = 0x2300c,
817 .mnd_width = 8,
818 .hid_width = 5,
819 .parent_map = gcc_xo_gpll0_map,
820 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
821 .clkr.hw.init = &(struct clk_init_data){
822 .name = "blsp1_qup6_spi_apps_clk_src",
823 .parent_names = gcc_xo_gpll0,
824 .num_parents = 2,
825 .ops = &clk_rcg2_ops,
826 },
827};
828
829static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
830 .cmd_rcgr = 0x23020,
831 .hid_width = 5,
832 .parent_map = gcc_xo_gpll0_map,
833 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
834 .clkr.hw.init = &(struct clk_init_data){
835 .name = "blsp1_qup6_i2c_apps_clk_src",
836 .parent_names = gcc_xo_gpll0,
837 .num_parents = 2,
838 .ops = &clk_rcg2_ops,
839 },
840};
841
842static struct clk_rcg2 blsp1_uart6_apps_clk_src = {
843 .cmd_rcgr = 0x2400c,
844 .mnd_width = 16,
845 .hid_width = 5,
846 .parent_map = gcc_xo_gpll0_map,
847 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
848 .clkr.hw.init = &(struct clk_init_data){
849 .name = "blsp1_uart6_apps_clk_src",
850 .parent_names = gcc_xo_gpll0,
851 .num_parents = 2,
852 .ops = &clk_rcg2_ops,
853 },
854};
855
856static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
857 .cmd_rcgr = 0x2600c,
858 .mnd_width = 8,
859 .hid_width = 5,
860 .parent_map = gcc_xo_gpll0_map,
861 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
862 .clkr.hw.init = &(struct clk_init_data){
863 .name = "blsp2_qup1_spi_apps_clk_src",
864 .parent_names = gcc_xo_gpll0,
865 .num_parents = 2,
866 .ops = &clk_rcg2_ops,
867 },
868};
869
870static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
871 .cmd_rcgr = 0x26020,
872 .hid_width = 5,
873 .parent_map = gcc_xo_gpll0_map,
874 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
875 .clkr.hw.init = &(struct clk_init_data){
876 .name = "blsp2_qup1_i2c_apps_clk_src",
877 .parent_names = gcc_xo_gpll0,
878 .num_parents = 2,
879 .ops = &clk_rcg2_ops,
880 },
881};
882
883static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
884 .cmd_rcgr = 0x2700c,
885 .mnd_width = 16,
886 .hid_width = 5,
887 .parent_map = gcc_xo_gpll0_map,
888 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
889 .clkr.hw.init = &(struct clk_init_data){
890 .name = "blsp2_uart1_apps_clk_src",
891 .parent_names = gcc_xo_gpll0,
892 .num_parents = 2,
893 .ops = &clk_rcg2_ops,
894 },
895};
896
897static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
898 .cmd_rcgr = 0x2800c,
899 .mnd_width = 8,
900 .hid_width = 5,
901 .parent_map = gcc_xo_gpll0_map,
902 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
903 .clkr.hw.init = &(struct clk_init_data){
904 .name = "blsp2_qup2_spi_apps_clk_src",
905 .parent_names = gcc_xo_gpll0,
906 .num_parents = 2,
907 .ops = &clk_rcg2_ops,
908 },
909};
910
911static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
912 .cmd_rcgr = 0x28020,
913 .hid_width = 5,
914 .parent_map = gcc_xo_gpll0_map,
915 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
916 .clkr.hw.init = &(struct clk_init_data){
917 .name = "blsp2_qup2_i2c_apps_clk_src",
918 .parent_names = gcc_xo_gpll0,
919 .num_parents = 2,
920 .ops = &clk_rcg2_ops,
921 },
922};
923
924static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
925 .cmd_rcgr = 0x2900c,
926 .mnd_width = 16,
927 .hid_width = 5,
928 .parent_map = gcc_xo_gpll0_map,
929 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
930 .clkr.hw.init = &(struct clk_init_data){
931 .name = "blsp2_uart2_apps_clk_src",
932 .parent_names = gcc_xo_gpll0,
933 .num_parents = 2,
934 .ops = &clk_rcg2_ops,
935 },
936};
937
938static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
939 .cmd_rcgr = 0x2a00c,
940 .mnd_width = 8,
941 .hid_width = 5,
942 .parent_map = gcc_xo_gpll0_map,
943 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
944 .clkr.hw.init = &(struct clk_init_data){
945 .name = "blsp2_qup3_spi_apps_clk_src",
946 .parent_names = gcc_xo_gpll0,
947 .num_parents = 2,
948 .ops = &clk_rcg2_ops,
949 },
950};
951
952static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
953 .cmd_rcgr = 0x2a020,
954 .hid_width = 5,
955 .parent_map = gcc_xo_gpll0_map,
956 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
957 .clkr.hw.init = &(struct clk_init_data){
958 .name = "blsp2_qup3_i2c_apps_clk_src",
959 .parent_names = gcc_xo_gpll0,
960 .num_parents = 2,
961 .ops = &clk_rcg2_ops,
962 },
963};
964
965static struct clk_rcg2 blsp2_uart3_apps_clk_src = {
966 .cmd_rcgr = 0x2b00c,
967 .mnd_width = 16,
968 .hid_width = 5,
969 .parent_map = gcc_xo_gpll0_map,
970 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
971 .clkr.hw.init = &(struct clk_init_data){
972 .name = "blsp2_uart3_apps_clk_src",
973 .parent_names = gcc_xo_gpll0,
974 .num_parents = 2,
975 .ops = &clk_rcg2_ops,
976 },
977};
978
979static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
980 .cmd_rcgr = 0x2c00c,
981 .mnd_width = 8,
982 .hid_width = 5,
983 .parent_map = gcc_xo_gpll0_map,
984 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
985 .clkr.hw.init = &(struct clk_init_data){
986 .name = "blsp2_qup4_spi_apps_clk_src",
987 .parent_names = gcc_xo_gpll0,
988 .num_parents = 2,
989 .ops = &clk_rcg2_ops,
990 },
991};
992
993static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
994 .cmd_rcgr = 0x2c020,
995 .hid_width = 5,
996 .parent_map = gcc_xo_gpll0_map,
997 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
998 .clkr.hw.init = &(struct clk_init_data){
999 .name = "blsp2_qup4_i2c_apps_clk_src",
1000 .parent_names = gcc_xo_gpll0,
1001 .num_parents = 2,
1002 .ops = &clk_rcg2_ops,
1003 },
1004};
1005
1006static struct clk_rcg2 blsp2_uart4_apps_clk_src = {
1007 .cmd_rcgr = 0x2d00c,
1008 .mnd_width = 16,
1009 .hid_width = 5,
1010 .parent_map = gcc_xo_gpll0_map,
1011 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
1012 .clkr.hw.init = &(struct clk_init_data){
1013 .name = "blsp2_uart4_apps_clk_src",
1014 .parent_names = gcc_xo_gpll0,
1015 .num_parents = 2,
1016 .ops = &clk_rcg2_ops,
1017 },
1018};
1019
1020static struct clk_rcg2 blsp2_qup5_spi_apps_clk_src = {
1021 .cmd_rcgr = 0x2e00c,
1022 .mnd_width = 8,
1023 .hid_width = 5,
1024 .parent_map = gcc_xo_gpll0_map,
1025 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
1026 .clkr.hw.init = &(struct clk_init_data){
1027 .name = "blsp2_qup5_spi_apps_clk_src",
1028 .parent_names = gcc_xo_gpll0,
1029 .num_parents = 2,
1030 .ops = &clk_rcg2_ops,
1031 },
1032};
1033
1034static struct clk_rcg2 blsp2_qup5_i2c_apps_clk_src = {
1035 .cmd_rcgr = 0x2e020,
1036 .hid_width = 5,
1037 .parent_map = gcc_xo_gpll0_map,
1038 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
1039 .clkr.hw.init = &(struct clk_init_data){
1040 .name = "blsp2_qup5_i2c_apps_clk_src",
1041 .parent_names = gcc_xo_gpll0,
1042 .num_parents = 2,
1043 .ops = &clk_rcg2_ops,
1044 },
1045};
1046
1047static struct clk_rcg2 blsp2_uart5_apps_clk_src = {
1048 .cmd_rcgr = 0x2f00c,
1049 .mnd_width = 16,
1050 .hid_width = 5,
1051 .parent_map = gcc_xo_gpll0_map,
1052 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
1053 .clkr.hw.init = &(struct clk_init_data){
1054 .name = "blsp2_uart5_apps_clk_src",
1055 .parent_names = gcc_xo_gpll0,
1056 .num_parents = 2,
1057 .ops = &clk_rcg2_ops,
1058 },
1059};
1060
1061static struct clk_rcg2 blsp2_qup6_spi_apps_clk_src = {
1062 .cmd_rcgr = 0x3000c,
1063 .mnd_width = 8,
1064 .hid_width = 5,
1065 .parent_map = gcc_xo_gpll0_map,
1066 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
1067 .clkr.hw.init = &(struct clk_init_data){
1068 .name = "blsp2_qup6_spi_apps_clk_src",
1069 .parent_names = gcc_xo_gpll0,
1070 .num_parents = 2,
1071 .ops = &clk_rcg2_ops,
1072 },
1073};
1074
1075static struct clk_rcg2 blsp2_qup6_i2c_apps_clk_src = {
1076 .cmd_rcgr = 0x30020,
1077 .hid_width = 5,
1078 .parent_map = gcc_xo_gpll0_map,
1079 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
1080 .clkr.hw.init = &(struct clk_init_data){
1081 .name = "blsp2_qup6_i2c_apps_clk_src",
1082 .parent_names = gcc_xo_gpll0,
1083 .num_parents = 2,
1084 .ops = &clk_rcg2_ops,
1085 },
1086};
1087
1088static struct clk_rcg2 blsp2_uart6_apps_clk_src = {
1089 .cmd_rcgr = 0x3100c,
1090 .mnd_width = 16,
1091 .hid_width = 5,
1092 .parent_map = gcc_xo_gpll0_map,
1093 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
1094 .clkr.hw.init = &(struct clk_init_data){
1095 .name = "blsp2_uart6_apps_clk_src",
1096 .parent_names = gcc_xo_gpll0,
1097 .num_parents = 2,
1098 .ops = &clk_rcg2_ops,
1099 },
1100};
1101
1102static const struct freq_tbl ftbl_pdm2_clk_src[] = {
1103 F(60000000, P_GPLL0, 10, 0, 0),
1104 { }
1105};
1106
1107static struct clk_rcg2 pdm2_clk_src = {
1108 .cmd_rcgr = 0x33010,
1109 .hid_width = 5,
1110 .parent_map = gcc_xo_gpll0_map,
1111 .freq_tbl = ftbl_pdm2_clk_src,
1112 .clkr.hw.init = &(struct clk_init_data){
1113 .name = "pdm2_clk_src",
1114 .parent_names = gcc_xo_gpll0,
1115 .num_parents = 2,
1116 .ops = &clk_rcg2_ops,
1117 },
1118};
1119
1120static const struct freq_tbl ftbl_tsif_ref_clk_src[] = {
1121 F(105495, P_XO, 1, 1, 182),
1122 { }
1123};
1124
1125static struct clk_rcg2 tsif_ref_clk_src = {
1126 .cmd_rcgr = 0x36010,
1127 .mnd_width = 8,
1128 .hid_width = 5,
1129 .parent_map = gcc_xo_gpll0_aud_ref_clk_map,
1130 .freq_tbl = ftbl_tsif_ref_clk_src,
1131 .clkr.hw.init = &(struct clk_init_data){
1132 .name = "tsif_ref_clk_src",
1133 .parent_names = gcc_xo_gpll0_aud_ref_clk,
1134 .num_parents = 3,
1135 .ops = &clk_rcg2_ops,
1136 },
1137};
1138
1139static struct clk_rcg2 gcc_sleep_clk_src = {
1140 .cmd_rcgr = 0x43014,
1141 .hid_width = 5,
1142 .parent_map = gcc_sleep_clk_map,
1143 .clkr.hw.init = &(struct clk_init_data){
1144 .name = "gcc_sleep_clk_src",
1145 .parent_names = gcc_sleep_clk,
1146 .num_parents = 1,
1147 .ops = &clk_rcg2_ops,
1148 },
1149};
1150
1151static struct clk_rcg2 hmss_rbcpr_clk_src = {
1152 .cmd_rcgr = 0x48040,
1153 .hid_width = 5,
1154 .parent_map = gcc_xo_gpll0_map,
1155 .freq_tbl = ftbl_usb30_mock_utmi_clk_src,
1156 .clkr.hw.init = &(struct clk_init_data){
1157 .name = "hmss_rbcpr_clk_src",
1158 .parent_names = gcc_xo_gpll0,
1159 .num_parents = 2,
1160 .ops = &clk_rcg2_ops,
1161 },
1162};
1163
1164static struct clk_rcg2 hmss_gpll0_clk_src = {
1165 .cmd_rcgr = 0x48058,
1166 .hid_width = 5,
1167 .parent_map = gcc_xo_gpll0_map,
1168 .clkr.hw.init = &(struct clk_init_data){
1169 .name = "hmss_gpll0_clk_src",
1170 .parent_names = gcc_xo_gpll0,
1171 .num_parents = 2,
1172 .ops = &clk_rcg2_ops,
1173 },
1174};
1175
1176static const struct freq_tbl ftbl_gp1_clk_src[] = {
1177 F(19200000, P_XO, 1, 0, 0),
1178 F(100000000, P_GPLL0, 6, 0, 0),
1179 F(200000000, P_GPLL0, 3, 0, 0),
1180 { }
1181};
1182
1183static struct clk_rcg2 gp1_clk_src = {
1184 .cmd_rcgr = 0x64004,
1185 .mnd_width = 8,
1186 .hid_width = 5,
1187 .parent_map = gcc_xo_gpll0_sleep_clk_gpll0_early_div_map,
1188 .freq_tbl = ftbl_gp1_clk_src,
1189 .clkr.hw.init = &(struct clk_init_data){
1190 .name = "gp1_clk_src",
1191 .parent_names = gcc_xo_gpll0_sleep_clk_gpll0_early_div,
1192 .num_parents = 4,
1193 .ops = &clk_rcg2_ops,
1194 },
1195};
1196
1197static struct clk_rcg2 gp2_clk_src = {
1198 .cmd_rcgr = 0x65004,
1199 .mnd_width = 8,
1200 .hid_width = 5,
1201 .parent_map = gcc_xo_gpll0_sleep_clk_gpll0_early_div_map,
1202 .freq_tbl = ftbl_gp1_clk_src,
1203 .clkr.hw.init = &(struct clk_init_data){
1204 .name = "gp2_clk_src",
1205 .parent_names = gcc_xo_gpll0_sleep_clk_gpll0_early_div,
1206 .num_parents = 4,
1207 .ops = &clk_rcg2_ops,
1208 },
1209};
1210
1211static struct clk_rcg2 gp3_clk_src = {
1212 .cmd_rcgr = 0x66004,
1213 .mnd_width = 8,
1214 .hid_width = 5,
1215 .parent_map = gcc_xo_gpll0_sleep_clk_gpll0_early_div_map,
1216 .freq_tbl = ftbl_gp1_clk_src,
1217 .clkr.hw.init = &(struct clk_init_data){
1218 .name = "gp3_clk_src",
1219 .parent_names = gcc_xo_gpll0_sleep_clk_gpll0_early_div,
1220 .num_parents = 4,
1221 .ops = &clk_rcg2_ops,
1222 },
1223};
1224
1225static const struct freq_tbl ftbl_pcie_aux_clk_src[] = {
1226 F(1010526, P_XO, 1, 1, 19),
1227 { }
1228};
1229
1230static struct clk_rcg2 pcie_aux_clk_src = {
1231 .cmd_rcgr = 0x6c000,
1232 .mnd_width = 16,
1233 .hid_width = 5,
1234 .parent_map = gcc_xo_sleep_clk_map,
1235 .freq_tbl = ftbl_pcie_aux_clk_src,
1236 .clkr.hw.init = &(struct clk_init_data){
1237 .name = "pcie_aux_clk_src",
1238 .parent_names = gcc_xo_sleep_clk,
1239 .num_parents = 2,
1240 .ops = &clk_rcg2_ops,
1241 },
1242};
1243
1244static const struct freq_tbl ftbl_ufs_axi_clk_src[] = {
1245 F(100000000, P_GPLL0, 6, 0, 0),
1246 F(200000000, P_GPLL0, 3, 0, 0),
1247 F(240000000, P_GPLL0, 2.5, 0, 0),
1248 { }
1249};
1250
1251static struct clk_rcg2 ufs_axi_clk_src = {
1252 .cmd_rcgr = 0x75024,
1253 .mnd_width = 8,
1254 .hid_width = 5,
1255 .parent_map = gcc_xo_gpll0_map,
1256 .freq_tbl = ftbl_ufs_axi_clk_src,
1257 .clkr.hw.init = &(struct clk_init_data){
1258 .name = "ufs_axi_clk_src",
1259 .parent_names = gcc_xo_gpll0,
1260 .num_parents = 2,
1261 .ops = &clk_rcg2_ops,
1262 },
1263};
1264
1265static const struct freq_tbl ftbl_ufs_ice_core_clk_src[] = {
1266 F(19200000, P_XO, 1, 0, 0),
1267 F(150000000, P_GPLL0, 4, 0, 0),
1268 F(300000000, P_GPLL0, 2, 0, 0),
1269 { }
1270};
1271
1272static struct clk_rcg2 ufs_ice_core_clk_src = {
1273 .cmd_rcgr = 0x76014,
1274 .hid_width = 5,
1275 .parent_map = gcc_xo_gpll0_map,
1276 .freq_tbl = ftbl_ufs_ice_core_clk_src,
1277 .clkr.hw.init = &(struct clk_init_data){
1278 .name = "ufs_ice_core_clk_src",
1279 .parent_names = gcc_xo_gpll0,
1280 .num_parents = 2,
1281 .ops = &clk_rcg2_ops,
1282 },
1283};
1284
1285static const struct freq_tbl ftbl_qspi_ser_clk_src[] = {
1286 F(75000000, P_GPLL0, 8, 0, 0),
1287 F(150000000, P_GPLL0, 4, 0, 0),
1288 F(256000000, P_GPLL4, 1.5, 0, 0),
1289 F(300000000, P_GPLL0, 2, 0, 0),
1290 { }
1291};
1292
1293static struct clk_rcg2 qspi_ser_clk_src = {
1294 .cmd_rcgr = 0x8b00c,
1295 .hid_width = 5,
1296 .parent_map = gcc_xo_gpll0_gpll1_early_div_gpll1_gpll4_gpll0_early_div_map,
1297 .freq_tbl = ftbl_qspi_ser_clk_src,
1298 .clkr.hw.init = &(struct clk_init_data){
1299 .name = "qspi_ser_clk_src",
1300 .parent_names = gcc_xo_gpll0_gpll1_early_div_gpll1_gpll4_gpll0_early_div,
1301 .num_parents = 6,
1302 .ops = &clk_rcg2_ops,
1303 },
1304};
1305
1306static struct clk_branch gcc_sys_noc_usb3_axi_clk = {
1307 .halt_reg = 0x0f03c,
1308 .clkr = {
1309 .enable_reg = 0x0f03c,
1310 .enable_mask = BIT(0),
1311 .hw.init = &(struct clk_init_data){
1312 .name = "gcc_sys_noc_usb3_axi_clk",
1313 .parent_names = (const char *[]){ "usb30_master_clk_src" },
1314 .num_parents = 1,
1315 .flags = CLK_SET_RATE_PARENT,
1316 .ops = &clk_branch2_ops,
1317 },
1318 },
1319};
1320
1321static struct clk_branch gcc_sys_noc_ufs_axi_clk = {
1322 .halt_reg = 0x75038,
1323 .clkr = {
1324 .enable_reg = 0x75038,
1325 .enable_mask = BIT(0),
1326 .hw.init = &(struct clk_init_data){
1327 .name = "gcc_sys_noc_ufs_axi_clk",
1328 .parent_names = (const char *[]){ "ufs_axi_clk_src" },
1329 .num_parents = 1,
1330 .flags = CLK_SET_RATE_PARENT,
1331 .ops = &clk_branch2_ops,
1332 },
1333 },
1334};
1335
1336static struct clk_branch gcc_periph_noc_usb20_ahb_clk = {
1337 .halt_reg = 0x6010,
1338 .clkr = {
1339 .enable_reg = 0x6010,
1340 .enable_mask = BIT(0),
1341 .hw.init = &(struct clk_init_data){
1342 .name = "gcc_periph_noc_usb20_ahb_clk",
1343 .parent_names = (const char *[]){ "usb20_master_clk_src" },
1344 .num_parents = 1,
1345 .flags = CLK_SET_RATE_PARENT,
1346 .ops = &clk_branch2_ops,
1347 },
1348 },
1349};
1350
1351static struct clk_branch gcc_mmss_noc_cfg_ahb_clk = {
1352 .halt_reg = 0x9008,
1353 .clkr = {
1354 .enable_reg = 0x9008,
1355 .enable_mask = BIT(0),
1356 .hw.init = &(struct clk_init_data){
1357 .name = "gcc_mmss_noc_cfg_ahb_clk",
1358 .parent_names = (const char *[]){ "config_noc_clk_src" },
1359 .num_parents = 1,
1360 .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
1361 .ops = &clk_branch2_ops,
1362 },
1363 },
1364};
1365
1366static struct clk_branch gcc_mmss_bimc_gfx_clk = {
1367 .halt_reg = 0x9010,
1368 .clkr = {
1369 .enable_reg = 0x9010,
1370 .enable_mask = BIT(0),
1371 .hw.init = &(struct clk_init_data){
1372 .name = "gcc_mmss_bimc_gfx_clk",
1373 .flags = CLK_SET_RATE_PARENT,
1374 .ops = &clk_branch2_ops,
1375 },
1376 },
1377};
1378
1379static struct clk_branch gcc_usb30_master_clk = {
1380 .halt_reg = 0x0f008,
1381 .clkr = {
1382 .enable_reg = 0x0f008,
1383 .enable_mask = BIT(0),
1384 .hw.init = &(struct clk_init_data){
1385 .name = "gcc_usb30_master_clk",
1386 .parent_names = (const char *[]){ "usb30_master_clk_src" },
1387 .num_parents = 1,
1388 .flags = CLK_SET_RATE_PARENT,
1389 .ops = &clk_branch2_ops,
1390 },
1391 },
1392};
1393
1394static struct clk_branch gcc_usb30_sleep_clk = {
1395 .halt_reg = 0x0f00c,
1396 .clkr = {
1397 .enable_reg = 0x0f00c,
1398 .enable_mask = BIT(0),
1399 .hw.init = &(struct clk_init_data){
1400 .name = "gcc_usb30_sleep_clk",
1401 .parent_names = (const char *[]){ "gcc_sleep_clk_src" },
1402 .num_parents = 1,
1403 .flags = CLK_SET_RATE_PARENT,
1404 .ops = &clk_branch2_ops,
1405 },
1406 },
1407};
1408
1409static struct clk_branch gcc_usb30_mock_utmi_clk = {
1410 .halt_reg = 0x0f010,
1411 .clkr = {
1412 .enable_reg = 0x0f010,
1413 .enable_mask = BIT(0),
1414 .hw.init = &(struct clk_init_data){
1415 .name = "gcc_usb30_mock_utmi_clk",
1416 .parent_names = (const char *[]){ "usb30_mock_utmi_clk_src" },
1417 .num_parents = 1,
1418 .flags = CLK_SET_RATE_PARENT,
1419 .ops = &clk_branch2_ops,
1420 },
1421 },
1422};
1423
1424static struct clk_branch gcc_usb3_phy_aux_clk = {
1425 .halt_reg = 0x50000,
1426 .clkr = {
1427 .enable_reg = 0x50000,
1428 .enable_mask = BIT(0),
1429 .hw.init = &(struct clk_init_data){
1430 .name = "gcc_usb3_phy_aux_clk",
1431 .parent_names = (const char *[]){ "usb3_phy_aux_clk_src" },
1432 .num_parents = 1,
1433 .flags = CLK_SET_RATE_PARENT,
1434 .ops = &clk_branch2_ops,
1435 },
1436 },
1437};
1438
1439static struct clk_branch gcc_usb3_phy_pipe_clk = {
1440 .halt_reg = 0x50004,
1441 .halt_check = BRANCH_HALT_SKIP,
1442 .clkr = {
1443 .enable_reg = 0x50004,
1444 .enable_mask = BIT(0),
1445 .hw.init = &(struct clk_init_data){
1446 .name = "gcc_usb3_phy_pipe_clk",
1447 .parent_names = (const char *[]){ "usb3_phy_pipe_clk_src" },
1448 .num_parents = 1,
1449 .flags = CLK_SET_RATE_PARENT,
1450 .ops = &clk_branch2_ops,
1451 },
1452 },
1453};
1454
1455static struct clk_branch gcc_usb20_master_clk = {
1456 .halt_reg = 0x12004,
1457 .clkr = {
1458 .enable_reg = 0x12004,
1459 .enable_mask = BIT(0),
1460 .hw.init = &(struct clk_init_data){
1461 .name = "gcc_usb20_master_clk",
1462 .parent_names = (const char *[]){ "usb20_master_clk_src" },
1463 .num_parents = 1,
1464 .flags = CLK_SET_RATE_PARENT,
1465 .ops = &clk_branch2_ops,
1466 },
1467 },
1468};
1469
1470static struct clk_branch gcc_usb20_sleep_clk = {
1471 .halt_reg = 0x12008,
1472 .clkr = {
1473 .enable_reg = 0x12008,
1474 .enable_mask = BIT(0),
1475 .hw.init = &(struct clk_init_data){
1476 .name = "gcc_usb20_sleep_clk",
1477 .parent_names = (const char *[]){ "gcc_sleep_clk_src" },
1478 .num_parents = 1,
1479 .flags = CLK_SET_RATE_PARENT,
1480 .ops = &clk_branch2_ops,
1481 },
1482 },
1483};
1484
1485static struct clk_branch gcc_usb20_mock_utmi_clk = {
1486 .halt_reg = 0x1200c,
1487 .clkr = {
1488 .enable_reg = 0x1200c,
1489 .enable_mask = BIT(0),
1490 .hw.init = &(struct clk_init_data){
1491 .name = "gcc_usb20_mock_utmi_clk",
1492 .parent_names = (const char *[]){ "usb20_mock_utmi_clk_src" },
1493 .num_parents = 1,
1494 .flags = CLK_SET_RATE_PARENT,
1495 .ops = &clk_branch2_ops,
1496 },
1497 },
1498};
1499
1500static struct clk_branch gcc_usb_phy_cfg_ahb2phy_clk = {
1501 .halt_reg = 0x6a004,
1502 .clkr = {
1503 .enable_reg = 0x6a004,
1504 .enable_mask = BIT(0),
1505 .hw.init = &(struct clk_init_data){
1506 .name = "gcc_usb_phy_cfg_ahb2phy_clk",
1507 .parent_names = (const char *[]){ "periph_noc_clk_src" },
1508 .num_parents = 1,
1509 .flags = CLK_SET_RATE_PARENT,
1510 .ops = &clk_branch2_ops,
1511 },
1512 },
1513};
1514
1515static struct clk_branch gcc_sdcc1_apps_clk = {
1516 .halt_reg = 0x13004,
1517 .clkr = {
1518 .enable_reg = 0x13004,
1519 .enable_mask = BIT(0),
1520 .hw.init = &(struct clk_init_data){
1521 .name = "gcc_sdcc1_apps_clk",
1522 .parent_names = (const char *[]){ "sdcc1_apps_clk_src" },
1523 .num_parents = 1,
1524 .flags = CLK_SET_RATE_PARENT,
1525 .ops = &clk_branch2_ops,
1526 },
1527 },
1528};
1529
1530static struct clk_branch gcc_sdcc1_ahb_clk = {
1531 .halt_reg = 0x13008,
1532 .clkr = {
1533 .enable_reg = 0x13008,
1534 .enable_mask = BIT(0),
1535 .hw.init = &(struct clk_init_data){
1536 .name = "gcc_sdcc1_ahb_clk",
1537 .parent_names = (const char *[]){ "periph_noc_clk_src" },
1538 .num_parents = 1,
1539 .flags = CLK_SET_RATE_PARENT,
1540 .ops = &clk_branch2_ops,
1541 },
1542 },
1543};
1544
1545static struct clk_branch gcc_sdcc1_ice_core_clk = {
1546 .halt_reg = 0x13038,
1547 .clkr = {
1548 .enable_reg = 0x13038,
1549 .enable_mask = BIT(0),
1550 .hw.init = &(struct clk_init_data){
1551 .name = "gcc_sdcc1_ice_core_clk",
1552 .parent_names = (const char *[]){ "sdcc1_ice_core_clk_src" },
1553 .num_parents = 1,
1554 .flags = CLK_SET_RATE_PARENT,
1555 .ops = &clk_branch2_ops,
1556 },
1557 },
1558};
1559
1560static struct clk_branch gcc_sdcc2_apps_clk = {
1561 .halt_reg = 0x14004,
1562 .clkr = {
1563 .enable_reg = 0x14004,
1564 .enable_mask = BIT(0),
1565 .hw.init = &(struct clk_init_data){
1566 .name = "gcc_sdcc2_apps_clk",
1567 .parent_names = (const char *[]){ "sdcc2_apps_clk_src" },
1568 .num_parents = 1,
1569 .flags = CLK_SET_RATE_PARENT,
1570 .ops = &clk_branch2_ops,
1571 },
1572 },
1573};
1574
1575static struct clk_branch gcc_sdcc2_ahb_clk = {
1576 .halt_reg = 0x14008,
1577 .clkr = {
1578 .enable_reg = 0x14008,
1579 .enable_mask = BIT(0),
1580 .hw.init = &(struct clk_init_data){
1581 .name = "gcc_sdcc2_ahb_clk",
1582 .parent_names = (const char *[]){ "periph_noc_clk_src" },
1583 .num_parents = 1,
1584 .flags = CLK_SET_RATE_PARENT,
1585 .ops = &clk_branch2_ops,
1586 },
1587 },
1588};
1589
1590static struct clk_branch gcc_sdcc3_apps_clk = {
1591 .halt_reg = 0x15004,
1592 .clkr = {
1593 .enable_reg = 0x15004,
1594 .enable_mask = BIT(0),
1595 .hw.init = &(struct clk_init_data){
1596 .name = "gcc_sdcc3_apps_clk",
1597 .parent_names = (const char *[]){ "sdcc3_apps_clk_src" },
1598 .num_parents = 1,
1599 .flags = CLK_SET_RATE_PARENT,
1600 .ops = &clk_branch2_ops,
1601 },
1602 },
1603};
1604
1605static struct clk_branch gcc_sdcc3_ahb_clk = {
1606 .halt_reg = 0x15008,
1607 .clkr = {
1608 .enable_reg = 0x15008,
1609 .enable_mask = BIT(0),
1610 .hw.init = &(struct clk_init_data){
1611 .name = "gcc_sdcc3_ahb_clk",
1612 .parent_names = (const char *[]){ "periph_noc_clk_src" },
1613 .num_parents = 1,
1614 .flags = CLK_SET_RATE_PARENT,
1615 .ops = &clk_branch2_ops,
1616 },
1617 },
1618};
1619
1620static struct clk_branch gcc_sdcc4_apps_clk = {
1621 .halt_reg = 0x16004,
1622 .clkr = {
1623 .enable_reg = 0x16004,
1624 .enable_mask = BIT(0),
1625 .hw.init = &(struct clk_init_data){
1626 .name = "gcc_sdcc4_apps_clk",
1627 .parent_names = (const char *[]){ "sdcc4_apps_clk_src" },
1628 .num_parents = 1,
1629 .flags = CLK_SET_RATE_PARENT,
1630 .ops = &clk_branch2_ops,
1631 },
1632 },
1633};
1634
1635static struct clk_branch gcc_sdcc4_ahb_clk = {
1636 .halt_reg = 0x16008,
1637 .clkr = {
1638 .enable_reg = 0x16008,
1639 .enable_mask = BIT(0),
1640 .hw.init = &(struct clk_init_data){
1641 .name = "gcc_sdcc4_ahb_clk",
1642 .parent_names = (const char *[]){ "periph_noc_clk_src" },
1643 .num_parents = 1,
1644 .flags = CLK_SET_RATE_PARENT,
1645 .ops = &clk_branch2_ops,
1646 },
1647 },
1648};
1649
1650static struct clk_branch gcc_blsp1_ahb_clk = {
1651 .halt_reg = 0x17004,
1652 .halt_check = BRANCH_HALT_VOTED,
1653 .clkr = {
1654 .enable_reg = 0x52004,
1655 .enable_mask = BIT(17),
1656 .hw.init = &(struct clk_init_data){
1657 .name = "gcc_blsp1_ahb_clk",
1658 .parent_names = (const char *[]){ "periph_noc_clk_src" },
1659 .num_parents = 1,
1660 .flags = CLK_SET_RATE_PARENT,
1661 .ops = &clk_branch2_ops,
1662 },
1663 },
1664};
1665
1666static struct clk_branch gcc_blsp1_sleep_clk = {
1667 .halt_reg = 0x17008,
1668 .halt_check = BRANCH_HALT_VOTED,
1669 .clkr = {
1670 .enable_reg = 0x52004,
1671 .enable_mask = BIT(16),
1672 .hw.init = &(struct clk_init_data){
1673 .name = "gcc_blsp1_sleep_clk",
1674 .parent_names = (const char *[]){ "gcc_sleep_clk_src" },
1675 .num_parents = 1,
1676 .flags = CLK_SET_RATE_PARENT,
1677 .ops = &clk_branch2_ops,
1678 },
1679 },
1680};
1681
1682static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1683 .halt_reg = 0x19004,
1684 .clkr = {
1685 .enable_reg = 0x19004,
1686 .enable_mask = BIT(0),
1687 .hw.init = &(struct clk_init_data){
1688 .name = "gcc_blsp1_qup1_spi_apps_clk",
1689 .parent_names = (const char *[]){ "blsp1_qup1_spi_apps_clk_src" },
1690 .num_parents = 1,
1691 .flags = CLK_SET_RATE_PARENT,
1692 .ops = &clk_branch2_ops,
1693 },
1694 },
1695};
1696
1697static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1698 .halt_reg = 0x19008,
1699 .clkr = {
1700 .enable_reg = 0x19008,
1701 .enable_mask = BIT(0),
1702 .hw.init = &(struct clk_init_data){
1703 .name = "gcc_blsp1_qup1_i2c_apps_clk",
1704 .parent_names = (const char *[]){ "blsp1_qup1_i2c_apps_clk_src" },
1705 .num_parents = 1,
1706 .flags = CLK_SET_RATE_PARENT,
1707 .ops = &clk_branch2_ops,
1708 },
1709 },
1710};
1711
1712static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1713 .halt_reg = 0x1a004,
1714 .clkr = {
1715 .enable_reg = 0x1a004,
1716 .enable_mask = BIT(0),
1717 .hw.init = &(struct clk_init_data){
1718 .name = "gcc_blsp1_uart1_apps_clk",
1719 .parent_names = (const char *[]){ "blsp1_uart1_apps_clk_src" },
1720 .num_parents = 1,
1721 .flags = CLK_SET_RATE_PARENT,
1722 .ops = &clk_branch2_ops,
1723 },
1724 },
1725};
1726
1727static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1728 .halt_reg = 0x1b004,
1729 .clkr = {
1730 .enable_reg = 0x1b004,
1731 .enable_mask = BIT(0),
1732 .hw.init = &(struct clk_init_data){
1733 .name = "gcc_blsp1_qup2_spi_apps_clk",
1734 .parent_names = (const char *[]){ "blsp1_qup2_spi_apps_clk_src" },
1735 .num_parents = 1,
1736 .flags = CLK_SET_RATE_PARENT,
1737 .ops = &clk_branch2_ops,
1738 },
1739 },
1740};
1741
1742static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1743 .halt_reg = 0x1b008,
1744 .clkr = {
1745 .enable_reg = 0x1b008,
1746 .enable_mask = BIT(0),
1747 .hw.init = &(struct clk_init_data){
1748 .name = "gcc_blsp1_qup2_i2c_apps_clk",
1749 .parent_names = (const char *[]){ "blsp1_qup2_i2c_apps_clk_src" },
1750 .num_parents = 1,
1751 .flags = CLK_SET_RATE_PARENT,
1752 .ops = &clk_branch2_ops,
1753 },
1754 },
1755};
1756
1757static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1758 .halt_reg = 0x1c004,
1759 .clkr = {
1760 .enable_reg = 0x1c004,
1761 .enable_mask = BIT(0),
1762 .hw.init = &(struct clk_init_data){
1763 .name = "gcc_blsp1_uart2_apps_clk",
1764 .parent_names = (const char *[]){ "blsp1_uart2_apps_clk_src" },
1765 .num_parents = 1,
1766 .flags = CLK_SET_RATE_PARENT,
1767 .ops = &clk_branch2_ops,
1768 },
1769 },
1770};
1771
1772static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1773 .halt_reg = 0x1d004,
1774 .clkr = {
1775 .enable_reg = 0x1d004,
1776 .enable_mask = BIT(0),
1777 .hw.init = &(struct clk_init_data){
1778 .name = "gcc_blsp1_qup3_spi_apps_clk",
1779 .parent_names = (const char *[]){ "blsp1_qup3_spi_apps_clk_src" },
1780 .num_parents = 1,
1781 .flags = CLK_SET_RATE_PARENT,
1782 .ops = &clk_branch2_ops,
1783 },
1784 },
1785};
1786
1787static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1788 .halt_reg = 0x1d008,
1789 .clkr = {
1790 .enable_reg = 0x1d008,
1791 .enable_mask = BIT(0),
1792 .hw.init = &(struct clk_init_data){
1793 .name = "gcc_blsp1_qup3_i2c_apps_clk",
1794 .parent_names = (const char *[]){ "blsp1_qup3_i2c_apps_clk_src" },
1795 .num_parents = 1,
1796 .flags = CLK_SET_RATE_PARENT,
1797 .ops = &clk_branch2_ops,
1798 },
1799 },
1800};
1801
1802static struct clk_branch gcc_blsp1_uart3_apps_clk = {
1803 .halt_reg = 0x1e004,
1804 .clkr = {
1805 .enable_reg = 0x1e004,
1806 .enable_mask = BIT(0),
1807 .hw.init = &(struct clk_init_data){
1808 .name = "gcc_blsp1_uart3_apps_clk",
1809 .parent_names = (const char *[]){ "blsp1_uart3_apps_clk_src" },
1810 .num_parents = 1,
1811 .flags = CLK_SET_RATE_PARENT,
1812 .ops = &clk_branch2_ops,
1813 },
1814 },
1815};
1816
1817static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1818 .halt_reg = 0x1f004,
1819 .clkr = {
1820 .enable_reg = 0x1f004,
1821 .enable_mask = BIT(0),
1822 .hw.init = &(struct clk_init_data){
1823 .name = "gcc_blsp1_qup4_spi_apps_clk",
1824 .parent_names = (const char *[]){ "blsp1_qup4_spi_apps_clk_src" },
1825 .num_parents = 1,
1826 .flags = CLK_SET_RATE_PARENT,
1827 .ops = &clk_branch2_ops,
1828 },
1829 },
1830};
1831
1832static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1833 .halt_reg = 0x1f008,
1834 .clkr = {
1835 .enable_reg = 0x1f008,
1836 .enable_mask = BIT(0),
1837 .hw.init = &(struct clk_init_data){
1838 .name = "gcc_blsp1_qup4_i2c_apps_clk",
1839 .parent_names = (const char *[]){ "blsp1_qup4_i2c_apps_clk_src" },
1840 .num_parents = 1,
1841 .flags = CLK_SET_RATE_PARENT,
1842 .ops = &clk_branch2_ops,
1843 },
1844 },
1845};
1846
1847static struct clk_branch gcc_blsp1_uart4_apps_clk = {
1848 .halt_reg = 0x20004,
1849 .clkr = {
1850 .enable_reg = 0x20004,
1851 .enable_mask = BIT(0),
1852 .hw.init = &(struct clk_init_data){
1853 .name = "gcc_blsp1_uart4_apps_clk",
1854 .parent_names = (const char *[]){ "blsp1_uart4_apps_clk_src" },
1855 .num_parents = 1,
1856 .flags = CLK_SET_RATE_PARENT,
1857 .ops = &clk_branch2_ops,
1858 },
1859 },
1860};
1861
1862static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
1863 .halt_reg = 0x21004,
1864 .clkr = {
1865 .enable_reg = 0x21004,
1866 .enable_mask = BIT(0),
1867 .hw.init = &(struct clk_init_data){
1868 .name = "gcc_blsp1_qup5_spi_apps_clk",
1869 .parent_names = (const char *[]){ "blsp1_qup5_spi_apps_clk_src" },
1870 .num_parents = 1,
1871 .flags = CLK_SET_RATE_PARENT,
1872 .ops = &clk_branch2_ops,
1873 },
1874 },
1875};
1876
1877static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
1878 .halt_reg = 0x21008,
1879 .clkr = {
1880 .enable_reg = 0x21008,
1881 .enable_mask = BIT(0),
1882 .hw.init = &(struct clk_init_data){
1883 .name = "gcc_blsp1_qup5_i2c_apps_clk",
1884 .parent_names = (const char *[]){ "blsp1_qup5_i2c_apps_clk_src" },
1885 .num_parents = 1,
1886 .flags = CLK_SET_RATE_PARENT,
1887 .ops = &clk_branch2_ops,
1888 },
1889 },
1890};
1891
1892static struct clk_branch gcc_blsp1_uart5_apps_clk = {
1893 .halt_reg = 0x22004,
1894 .clkr = {
1895 .enable_reg = 0x22004,
1896 .enable_mask = BIT(0),
1897 .hw.init = &(struct clk_init_data){
1898 .name = "gcc_blsp1_uart5_apps_clk",
1899 .parent_names = (const char *[]){ "blsp1_uart5_apps_clk_src" },
1900 .num_parents = 1,
1901 .flags = CLK_SET_RATE_PARENT,
1902 .ops = &clk_branch2_ops,
1903 },
1904 },
1905};
1906
1907static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
1908 .halt_reg = 0x23004,
1909 .clkr = {
1910 .enable_reg = 0x23004,
1911 .enable_mask = BIT(0),
1912 .hw.init = &(struct clk_init_data){
1913 .name = "gcc_blsp1_qup6_spi_apps_clk",
1914 .parent_names = (const char *[]){ "blsp1_qup6_spi_apps_clk_src" },
1915 .num_parents = 1,
1916 .flags = CLK_SET_RATE_PARENT,
1917 .ops = &clk_branch2_ops,
1918 },
1919 },
1920};
1921
1922static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
1923 .halt_reg = 0x23008,
1924 .clkr = {
1925 .enable_reg = 0x23008,
1926 .enable_mask = BIT(0),
1927 .hw.init = &(struct clk_init_data){
1928 .name = "gcc_blsp1_qup6_i2c_apps_clk",
1929 .parent_names = (const char *[]){ "blsp1_qup6_i2c_apps_clk_src" },
1930 .num_parents = 1,
1931 .flags = CLK_SET_RATE_PARENT,
1932 .ops = &clk_branch2_ops,
1933 },
1934 },
1935};
1936
1937static struct clk_branch gcc_blsp1_uart6_apps_clk = {
1938 .halt_reg = 0x24004,
1939 .clkr = {
1940 .enable_reg = 0x24004,
1941 .enable_mask = BIT(0),
1942 .hw.init = &(struct clk_init_data){
1943 .name = "gcc_blsp1_uart6_apps_clk",
1944 .parent_names = (const char *[]){ "blsp1_uart6_apps_clk_src" },
1945 .num_parents = 1,
1946 .flags = CLK_SET_RATE_PARENT,
1947 .ops = &clk_branch2_ops,
1948 },
1949 },
1950};
1951
1952static struct clk_branch gcc_blsp2_ahb_clk = {
1953 .halt_reg = 0x25004,
1954 .halt_check = BRANCH_HALT_VOTED,
1955 .clkr = {
1956 .enable_reg = 0x52004,
1957 .enable_mask = BIT(15),
1958 .hw.init = &(struct clk_init_data){
1959 .name = "gcc_blsp2_ahb_clk",
1960 .parent_names = (const char *[]){ "periph_noc_clk_src" },
1961 .num_parents = 1,
1962 .flags = CLK_SET_RATE_PARENT,
1963 .ops = &clk_branch2_ops,
1964 },
1965 },
1966};
1967
1968static struct clk_branch gcc_blsp2_sleep_clk = {
1969 .halt_reg = 0x25008,
1970 .halt_check = BRANCH_HALT_VOTED,
1971 .clkr = {
1972 .enable_reg = 0x52004,
1973 .enable_mask = BIT(14),
1974 .hw.init = &(struct clk_init_data){
1975 .name = "gcc_blsp2_sleep_clk",
1976 .parent_names = (const char *[]){ "gcc_sleep_clk_src" },
1977 .num_parents = 1,
1978 .flags = CLK_SET_RATE_PARENT,
1979 .ops = &clk_branch2_ops,
1980 },
1981 },
1982};
1983
1984static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
1985 .halt_reg = 0x26004,
1986 .clkr = {
1987 .enable_reg = 0x26004,
1988 .enable_mask = BIT(0),
1989 .hw.init = &(struct clk_init_data){
1990 .name = "gcc_blsp2_qup1_spi_apps_clk",
1991 .parent_names = (const char *[]){ "blsp2_qup1_spi_apps_clk_src" },
1992 .num_parents = 1,
1993 .flags = CLK_SET_RATE_PARENT,
1994 .ops = &clk_branch2_ops,
1995 },
1996 },
1997};
1998
1999static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
2000 .halt_reg = 0x26008,
2001 .clkr = {
2002 .enable_reg = 0x26008,
2003 .enable_mask = BIT(0),
2004 .hw.init = &(struct clk_init_data){
2005 .name = "gcc_blsp2_qup1_i2c_apps_clk",
2006 .parent_names = (const char *[]){ "blsp2_qup1_i2c_apps_clk_src" },
2007 .num_parents = 1,
2008 .flags = CLK_SET_RATE_PARENT,
2009 .ops = &clk_branch2_ops,
2010 },
2011 },
2012};
2013
2014static struct clk_branch gcc_blsp2_uart1_apps_clk = {
2015 .halt_reg = 0x27004,
2016 .clkr = {
2017 .enable_reg = 0x27004,
2018 .enable_mask = BIT(0),
2019 .hw.init = &(struct clk_init_data){
2020 .name = "gcc_blsp2_uart1_apps_clk",
2021 .parent_names = (const char *[]){ "blsp2_uart1_apps_clk_src" },
2022 .num_parents = 1,
2023 .flags = CLK_SET_RATE_PARENT,
2024 .ops = &clk_branch2_ops,
2025 },
2026 },
2027};
2028
2029static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
2030 .halt_reg = 0x28004,
2031 .clkr = {
2032 .enable_reg = 0x28004,
2033 .enable_mask = BIT(0),
2034 .hw.init = &(struct clk_init_data){
2035 .name = "gcc_blsp2_qup2_spi_apps_clk",
2036 .parent_names = (const char *[]){ "blsp2_qup2_spi_apps_clk_src" },
2037 .num_parents = 1,
2038 .flags = CLK_SET_RATE_PARENT,
2039 .ops = &clk_branch2_ops,
2040 },
2041 },
2042};
2043
2044static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
2045 .halt_reg = 0x28008,
2046 .clkr = {
2047 .enable_reg = 0x28008,
2048 .enable_mask = BIT(0),
2049 .hw.init = &(struct clk_init_data){
2050 .name = "gcc_blsp2_qup2_i2c_apps_clk",
2051 .parent_names = (const char *[]){ "blsp2_qup2_i2c_apps_clk_src" },
2052 .num_parents = 1,
2053 .flags = CLK_SET_RATE_PARENT,
2054 .ops = &clk_branch2_ops,
2055 },
2056 },
2057};
2058
2059static struct clk_branch gcc_blsp2_uart2_apps_clk = {
2060 .halt_reg = 0x29004,
2061 .clkr = {
2062 .enable_reg = 0x29004,
2063 .enable_mask = BIT(0),
2064 .hw.init = &(struct clk_init_data){
2065 .name = "gcc_blsp2_uart2_apps_clk",
2066 .parent_names = (const char *[]){ "blsp2_uart2_apps_clk_src" },
2067 .num_parents = 1,
2068 .flags = CLK_SET_RATE_PARENT,
2069 .ops = &clk_branch2_ops,
2070 },
2071 },
2072};
2073
2074static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
2075 .halt_reg = 0x2a004,
2076 .clkr = {
2077 .enable_reg = 0x2a004,
2078 .enable_mask = BIT(0),
2079 .hw.init = &(struct clk_init_data){
2080 .name = "gcc_blsp2_qup3_spi_apps_clk",
2081 .parent_names = (const char *[]){ "blsp2_qup3_spi_apps_clk_src" },
2082 .num_parents = 1,
2083 .flags = CLK_SET_RATE_PARENT,
2084 .ops = &clk_branch2_ops,
2085 },
2086 },
2087};
2088
2089static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
2090 .halt_reg = 0x2a008,
2091 .clkr = {
2092 .enable_reg = 0x2a008,
2093 .enable_mask = BIT(0),
2094 .hw.init = &(struct clk_init_data){
2095 .name = "gcc_blsp2_qup3_i2c_apps_clk",
2096 .parent_names = (const char *[]){ "blsp2_qup3_i2c_apps_clk_src" },
2097 .num_parents = 1,
2098 .flags = CLK_SET_RATE_PARENT,
2099 .ops = &clk_branch2_ops,
2100 },
2101 },
2102};
2103
2104static struct clk_branch gcc_blsp2_uart3_apps_clk = {
2105 .halt_reg = 0x2b004,
2106 .clkr = {
2107 .enable_reg = 0x2b004,
2108 .enable_mask = BIT(0),
2109 .hw.init = &(struct clk_init_data){
2110 .name = "gcc_blsp2_uart3_apps_clk",
2111 .parent_names = (const char *[]){ "blsp2_uart3_apps_clk_src" },
2112 .num_parents = 1,
2113 .flags = CLK_SET_RATE_PARENT,
2114 .ops = &clk_branch2_ops,
2115 },
2116 },
2117};
2118
2119static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
2120 .halt_reg = 0x2c004,
2121 .clkr = {
2122 .enable_reg = 0x2c004,
2123 .enable_mask = BIT(0),
2124 .hw.init = &(struct clk_init_data){
2125 .name = "gcc_blsp2_qup4_spi_apps_clk",
2126 .parent_names = (const char *[]){ "blsp2_qup4_spi_apps_clk_src" },
2127 .num_parents = 1,
2128 .flags = CLK_SET_RATE_PARENT,
2129 .ops = &clk_branch2_ops,
2130 },
2131 },
2132};
2133
2134static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
2135 .halt_reg = 0x2c008,
2136 .clkr = {
2137 .enable_reg = 0x2c008,
2138 .enable_mask = BIT(0),
2139 .hw.init = &(struct clk_init_data){
2140 .name = "gcc_blsp2_qup4_i2c_apps_clk",
2141 .parent_names = (const char *[]){ "blsp2_qup4_i2c_apps_clk_src" },
2142 .num_parents = 1,
2143 .flags = CLK_SET_RATE_PARENT,
2144 .ops = &clk_branch2_ops,
2145 },
2146 },
2147};
2148
2149static struct clk_branch gcc_blsp2_uart4_apps_clk = {
2150 .halt_reg = 0x2d004,
2151 .clkr = {
2152 .enable_reg = 0x2d004,
2153 .enable_mask = BIT(0),
2154 .hw.init = &(struct clk_init_data){
2155 .name = "gcc_blsp2_uart4_apps_clk",
2156 .parent_names = (const char *[]){ "blsp2_uart4_apps_clk_src" },
2157 .num_parents = 1,
2158 .flags = CLK_SET_RATE_PARENT,
2159 .ops = &clk_branch2_ops,
2160 },
2161 },
2162};
2163
2164static struct clk_branch gcc_blsp2_qup5_spi_apps_clk = {
2165 .halt_reg = 0x2e004,
2166 .clkr = {
2167 .enable_reg = 0x2e004,
2168 .enable_mask = BIT(0),
2169 .hw.init = &(struct clk_init_data){
2170 .name = "gcc_blsp2_qup5_spi_apps_clk",
2171 .parent_names = (const char *[]){ "blsp2_qup5_spi_apps_clk_src" },
2172 .num_parents = 1,
2173 .flags = CLK_SET_RATE_PARENT,
2174 .ops = &clk_branch2_ops,
2175 },
2176 },
2177};
2178
2179static struct clk_branch gcc_blsp2_qup5_i2c_apps_clk = {
2180 .halt_reg = 0x2e008,
2181 .clkr = {
2182 .enable_reg = 0x2e008,
2183 .enable_mask = BIT(0),
2184 .hw.init = &(struct clk_init_data){
2185 .name = "gcc_blsp2_qup5_i2c_apps_clk",
2186 .parent_names = (const char *[]){ "blsp2_qup5_i2c_apps_clk_src" },
2187 .num_parents = 1,
2188 .flags = CLK_SET_RATE_PARENT,
2189 .ops = &clk_branch2_ops,
2190 },
2191 },
2192};
2193
2194static struct clk_branch gcc_blsp2_uart5_apps_clk = {
2195 .halt_reg = 0x2f004,
2196 .clkr = {
2197 .enable_reg = 0x2f004,
2198 .enable_mask = BIT(0),
2199 .hw.init = &(struct clk_init_data){
2200 .name = "gcc_blsp2_uart5_apps_clk",
2201 .parent_names = (const char *[]){ "blsp2_uart5_apps_clk_src" },
2202 .num_parents = 1,
2203 .flags = CLK_SET_RATE_PARENT,
2204 .ops = &clk_branch2_ops,
2205 },
2206 },
2207};
2208
2209static struct clk_branch gcc_blsp2_qup6_spi_apps_clk = {
2210 .halt_reg = 0x30004,
2211 .clkr = {
2212 .enable_reg = 0x30004,
2213 .enable_mask = BIT(0),
2214 .hw.init = &(struct clk_init_data){
2215 .name = "gcc_blsp2_qup6_spi_apps_clk",
2216 .parent_names = (const char *[]){ "blsp2_qup6_spi_apps_clk_src" },
2217 .num_parents = 1,
2218 .flags = CLK_SET_RATE_PARENT,
2219 .ops = &clk_branch2_ops,
2220 },
2221 },
2222};
2223
2224static struct clk_branch gcc_blsp2_qup6_i2c_apps_clk = {
2225 .halt_reg = 0x30008,
2226 .clkr = {
2227 .enable_reg = 0x30008,
2228 .enable_mask = BIT(0),
2229 .hw.init = &(struct clk_init_data){
2230 .name = "gcc_blsp2_qup6_i2c_apps_clk",
2231 .parent_names = (const char *[]){ "blsp2_qup6_i2c_apps_clk_src" },
2232 .num_parents = 1,
2233 .flags = CLK_SET_RATE_PARENT,
2234 .ops = &clk_branch2_ops,
2235 },
2236 },
2237};
2238
2239static struct clk_branch gcc_blsp2_uart6_apps_clk = {
2240 .halt_reg = 0x31004,
2241 .clkr = {
2242 .enable_reg = 0x31004,
2243 .enable_mask = BIT(0),
2244 .hw.init = &(struct clk_init_data){
2245 .name = "gcc_blsp2_uart6_apps_clk",
2246 .parent_names = (const char *[]){ "blsp2_uart6_apps_clk_src" },
2247 .num_parents = 1,
2248 .flags = CLK_SET_RATE_PARENT,
2249 .ops = &clk_branch2_ops,
2250 },
2251 },
2252};
2253
2254static struct clk_branch gcc_pdm_ahb_clk = {
2255 .halt_reg = 0x33004,
2256 .clkr = {
2257 .enable_reg = 0x33004,
2258 .enable_mask = BIT(0),
2259 .hw.init = &(struct clk_init_data){
2260 .name = "gcc_pdm_ahb_clk",
2261 .parent_names = (const char *[]){ "periph_noc_clk_src" },
2262 .num_parents = 1,
2263 .flags = CLK_SET_RATE_PARENT,
2264 .ops = &clk_branch2_ops,
2265 },
2266 },
2267};
2268
2269static struct clk_branch gcc_pdm2_clk = {
2270 .halt_reg = 0x3300c,
2271 .clkr = {
2272 .enable_reg = 0x3300c,
2273 .enable_mask = BIT(0),
2274 .hw.init = &(struct clk_init_data){
2275 .name = "gcc_pdm2_clk",
2276 .parent_names = (const char *[]){ "pdm2_clk_src" },
2277 .num_parents = 1,
2278 .flags = CLK_SET_RATE_PARENT,
2279 .ops = &clk_branch2_ops,
2280 },
2281 },
2282};
2283
2284static struct clk_branch gcc_prng_ahb_clk = {
2285 .halt_reg = 0x34004,
2286 .halt_check = BRANCH_HALT_VOTED,
2287 .clkr = {
2288 .enable_reg = 0x52004,
2289 .enable_mask = BIT(13),
2290 .hw.init = &(struct clk_init_data){
2291 .name = "gcc_prng_ahb_clk",
2292 .parent_names = (const char *[]){ "config_noc_clk_src" },
2293 .num_parents = 1,
2294 .flags = CLK_SET_RATE_PARENT,
2295 .ops = &clk_branch2_ops,
2296 },
2297 },
2298};
2299
2300static struct clk_branch gcc_tsif_ahb_clk = {
2301 .halt_reg = 0x36004,
2302 .clkr = {
2303 .enable_reg = 0x36004,
2304 .enable_mask = BIT(0),
2305 .hw.init = &(struct clk_init_data){
2306 .name = "gcc_tsif_ahb_clk",
2307 .parent_names = (const char *[]){ "periph_noc_clk_src" },
2308 .num_parents = 1,
2309 .flags = CLK_SET_RATE_PARENT,
2310 .ops = &clk_branch2_ops,
2311 },
2312 },
2313};
2314
2315static struct clk_branch gcc_tsif_ref_clk = {
2316 .halt_reg = 0x36008,
2317 .clkr = {
2318 .enable_reg = 0x36008,
2319 .enable_mask = BIT(0),
2320 .hw.init = &(struct clk_init_data){
2321 .name = "gcc_tsif_ref_clk",
2322 .parent_names = (const char *[]){ "tsif_ref_clk_src" },
2323 .num_parents = 1,
2324 .flags = CLK_SET_RATE_PARENT,
2325 .ops = &clk_branch2_ops,
2326 },
2327 },
2328};
2329
2330static struct clk_branch gcc_tsif_inactivity_timers_clk = {
2331 .halt_reg = 0x3600c,
2332 .clkr = {
2333 .enable_reg = 0x3600c,
2334 .enable_mask = BIT(0),
2335 .hw.init = &(struct clk_init_data){
2336 .name = "gcc_tsif_inactivity_timers_clk",
2337 .parent_names = (const char *[]){ "gcc_sleep_clk_src" },
2338 .num_parents = 1,
2339 .flags = CLK_SET_RATE_PARENT,
2340 .ops = &clk_branch2_ops,
2341 },
2342 },
2343};
2344
2345static struct clk_branch gcc_boot_rom_ahb_clk = {
2346 .halt_reg = 0x38004,
2347 .halt_check = BRANCH_HALT_VOTED,
2348 .clkr = {
2349 .enable_reg = 0x52004,
2350 .enable_mask = BIT(10),
2351 .hw.init = &(struct clk_init_data){
2352 .name = "gcc_boot_rom_ahb_clk",
2353 .parent_names = (const char *[]){ "config_noc_clk_src" },
2354 .num_parents = 1,
2355 .flags = CLK_SET_RATE_PARENT,
2356 .ops = &clk_branch2_ops,
2357 },
2358 },
2359};
2360
2361static struct clk_branch gcc_bimc_gfx_clk = {
2362 .halt_reg = 0x46018,
2363 .clkr = {
2364 .enable_reg = 0x46018,
2365 .enable_mask = BIT(0),
2366 .hw.init = &(struct clk_init_data){
2367 .name = "gcc_bimc_gfx_clk",
2368 .flags = CLK_SET_RATE_PARENT,
2369 .ops = &clk_branch2_ops,
2370 },
2371 },
2372};
2373
2374static struct clk_branch gcc_hmss_rbcpr_clk = {
2375 .halt_reg = 0x4800c,
2376 .clkr = {
2377 .enable_reg = 0x4800c,
2378 .enable_mask = BIT(0),
2379 .hw.init = &(struct clk_init_data){
2380 .name = "gcc_hmss_rbcpr_clk",
2381 .parent_names = (const char *[]){ "hmss_rbcpr_clk_src" },
2382 .num_parents = 1,
2383 .flags = CLK_SET_RATE_PARENT,
2384 .ops = &clk_branch2_ops,
2385 },
2386 },
2387};
2388
2389static struct clk_branch gcc_gp1_clk = {
2390 .halt_reg = 0x64000,
2391 .clkr = {
2392 .enable_reg = 0x64000,
2393 .enable_mask = BIT(0),
2394 .hw.init = &(struct clk_init_data){
2395 .name = "gcc_gp1_clk",
2396 .parent_names = (const char *[]){ "gp1_clk_src" },
2397 .num_parents = 1,
2398 .flags = CLK_SET_RATE_PARENT,
2399 .ops = &clk_branch2_ops,
2400 },
2401 },
2402};
2403
2404static struct clk_branch gcc_gp2_clk = {
2405 .halt_reg = 0x65000,
2406 .clkr = {
2407 .enable_reg = 0x65000,
2408 .enable_mask = BIT(0),
2409 .hw.init = &(struct clk_init_data){
2410 .name = "gcc_gp2_clk",
2411 .parent_names = (const char *[]){ "gp2_clk_src" },
2412 .num_parents = 1,
2413 .flags = CLK_SET_RATE_PARENT,
2414 .ops = &clk_branch2_ops,
2415 },
2416 },
2417};
2418
2419static struct clk_branch gcc_gp3_clk = {
2420 .halt_reg = 0x66000,
2421 .clkr = {
2422 .enable_reg = 0x66000,
2423 .enable_mask = BIT(0),
2424 .hw.init = &(struct clk_init_data){
2425 .name = "gcc_gp3_clk",
2426 .parent_names = (const char *[]){ "gp3_clk_src" },
2427 .num_parents = 1,
2428 .flags = CLK_SET_RATE_PARENT,
2429 .ops = &clk_branch2_ops,
2430 },
2431 },
2432};
2433
2434static struct clk_branch gcc_pcie_0_slv_axi_clk = {
2435 .halt_reg = 0x6b008,
2436 .clkr = {
2437 .enable_reg = 0x6b008,
2438 .enable_mask = BIT(0),
2439 .hw.init = &(struct clk_init_data){
2440 .name = "gcc_pcie_0_slv_axi_clk",
2441 .parent_names = (const char *[]){ "system_noc_clk_src" },
2442 .num_parents = 1,
2443 .flags = CLK_SET_RATE_PARENT,
2444 .ops = &clk_branch2_ops,
2445 },
2446 },
2447};
2448
2449static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
2450 .halt_reg = 0x6b00c,
2451 .clkr = {
2452 .enable_reg = 0x6b00c,
2453 .enable_mask = BIT(0),
2454 .hw.init = &(struct clk_init_data){
2455 .name = "gcc_pcie_0_mstr_axi_clk",
2456 .parent_names = (const char *[]){ "system_noc_clk_src" },
2457 .num_parents = 1,
2458 .flags = CLK_SET_RATE_PARENT,
2459 .ops = &clk_branch2_ops,
2460 },
2461 },
2462};
2463
2464static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
2465 .halt_reg = 0x6b010,
2466 .clkr = {
2467 .enable_reg = 0x6b010,
2468 .enable_mask = BIT(0),
2469 .hw.init = &(struct clk_init_data){
2470 .name = "gcc_pcie_0_cfg_ahb_clk",
2471 .parent_names = (const char *[]){ "config_noc_clk_src" },
2472 .num_parents = 1,
2473 .flags = CLK_SET_RATE_PARENT,
2474 .ops = &clk_branch2_ops,
2475 },
2476 },
2477};
2478
2479static struct clk_branch gcc_pcie_0_aux_clk = {
2480 .halt_reg = 0x6b014,
2481 .clkr = {
2482 .enable_reg = 0x6b014,
2483 .enable_mask = BIT(0),
2484 .hw.init = &(struct clk_init_data){
2485 .name = "gcc_pcie_0_aux_clk",
2486 .parent_names = (const char *[]){ "pcie_aux_clk_src" },
2487 .num_parents = 1,
2488 .flags = CLK_SET_RATE_PARENT,
2489 .ops = &clk_branch2_ops,
2490 },
2491 },
2492};
2493
2494static struct clk_branch gcc_pcie_0_pipe_clk = {
2495 .halt_reg = 0x6b018,
2496 .halt_check = BRANCH_HALT_SKIP,
2497 .clkr = {
2498 .enable_reg = 0x6b018,
2499 .enable_mask = BIT(0),
2500 .hw.init = &(struct clk_init_data){
2501 .name = "gcc_pcie_0_pipe_clk",
2502 .parent_names = (const char *[]){ "pcie_0_pipe_clk_src" },
2503 .num_parents = 1,
2504 .flags = CLK_SET_RATE_PARENT,
2505 .ops = &clk_branch2_ops,
2506 },
2507 },
2508};
2509
2510static struct clk_branch gcc_pcie_1_slv_axi_clk = {
2511 .halt_reg = 0x6d008,
2512 .clkr = {
2513 .enable_reg = 0x6d008,
2514 .enable_mask = BIT(0),
2515 .hw.init = &(struct clk_init_data){
2516 .name = "gcc_pcie_1_slv_axi_clk",
2517 .parent_names = (const char *[]){ "system_noc_clk_src" },
2518 .num_parents = 1,
2519 .flags = CLK_SET_RATE_PARENT,
2520 .ops = &clk_branch2_ops,
2521 },
2522 },
2523};
2524
2525static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
2526 .halt_reg = 0x6d00c,
2527 .clkr = {
2528 .enable_reg = 0x6d00c,
2529 .enable_mask = BIT(0),
2530 .hw.init = &(struct clk_init_data){
2531 .name = "gcc_pcie_1_mstr_axi_clk",
2532 .parent_names = (const char *[]){ "system_noc_clk_src" },
2533 .num_parents = 1,
2534 .flags = CLK_SET_RATE_PARENT,
2535 .ops = &clk_branch2_ops,
2536 },
2537 },
2538};
2539
2540static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
2541 .halt_reg = 0x6d010,
2542 .clkr = {
2543 .enable_reg = 0x6d010,
2544 .enable_mask = BIT(0),
2545 .hw.init = &(struct clk_init_data){
2546 .name = "gcc_pcie_1_cfg_ahb_clk",
2547 .parent_names = (const char *[]){ "config_noc_clk_src" },
2548 .num_parents = 1,
2549 .flags = CLK_SET_RATE_PARENT,
2550 .ops = &clk_branch2_ops,
2551 },
2552 },
2553};
2554
2555static struct clk_branch gcc_pcie_1_aux_clk = {
2556 .halt_reg = 0x6d014,
2557 .clkr = {
2558 .enable_reg = 0x6d014,
2559 .enable_mask = BIT(0),
2560 .hw.init = &(struct clk_init_data){
2561 .name = "gcc_pcie_1_aux_clk",
2562 .parent_names = (const char *[]){ "pcie_aux_clk_src" },
2563 .num_parents = 1,
2564 .flags = CLK_SET_RATE_PARENT,
2565 .ops = &clk_branch2_ops,
2566 },
2567 },
2568};
2569
2570static struct clk_branch gcc_pcie_1_pipe_clk = {
2571 .halt_reg = 0x6d018,
2572 .halt_check = BRANCH_HALT_SKIP,
2573 .clkr = {
2574 .enable_reg = 0x6d018,
2575 .enable_mask = BIT(0),
2576 .hw.init = &(struct clk_init_data){
2577 .name = "gcc_pcie_1_pipe_clk",
2578 .parent_names = (const char *[]){ "pcie_1_pipe_clk_src" },
2579 .num_parents = 1,
2580 .flags = CLK_SET_RATE_PARENT,
2581 .ops = &clk_branch2_ops,
2582 },
2583 },
2584};
2585
2586static struct clk_branch gcc_pcie_2_slv_axi_clk = {
2587 .halt_reg = 0x6e008,
2588 .clkr = {
2589 .enable_reg = 0x6e008,
2590 .enable_mask = BIT(0),
2591 .hw.init = &(struct clk_init_data){
2592 .name = "gcc_pcie_2_slv_axi_clk",
2593 .parent_names = (const char *[]){ "system_noc_clk_src" },
2594 .num_parents = 1,
2595 .flags = CLK_SET_RATE_PARENT,
2596 .ops = &clk_branch2_ops,
2597 },
2598 },
2599};
2600
2601static struct clk_branch gcc_pcie_2_mstr_axi_clk = {
2602 .halt_reg = 0x6e00c,
2603 .clkr = {
2604 .enable_reg = 0x6e00c,
2605 .enable_mask = BIT(0),
2606 .hw.init = &(struct clk_init_data){
2607 .name = "gcc_pcie_2_mstr_axi_clk",
2608 .parent_names = (const char *[]){ "system_noc_clk_src" },
2609 .num_parents = 1,
2610 .flags = CLK_SET_RATE_PARENT,
2611 .ops = &clk_branch2_ops,
2612 },
2613 },
2614};
2615
2616static struct clk_branch gcc_pcie_2_cfg_ahb_clk = {
2617 .halt_reg = 0x6e010,
2618 .clkr = {
2619 .enable_reg = 0x6e010,
2620 .enable_mask = BIT(0),
2621 .hw.init = &(struct clk_init_data){
2622 .name = "gcc_pcie_2_cfg_ahb_clk",
2623 .parent_names = (const char *[]){ "config_noc_clk_src" },
2624 .num_parents = 1,
2625 .flags = CLK_SET_RATE_PARENT,
2626 .ops = &clk_branch2_ops,
2627 },
2628 },
2629};
2630
2631static struct clk_branch gcc_pcie_2_aux_clk = {
2632 .halt_reg = 0x6e014,
2633 .clkr = {
2634 .enable_reg = 0x6e014,
2635 .enable_mask = BIT(0),
2636 .hw.init = &(struct clk_init_data){
2637 .name = "gcc_pcie_2_aux_clk",
2638 .parent_names = (const char *[]){ "pcie_aux_clk_src" },
2639 .num_parents = 1,
2640 .flags = CLK_SET_RATE_PARENT,
2641 .ops = &clk_branch2_ops,
2642 },
2643 },
2644};
2645
2646static struct clk_branch gcc_pcie_2_pipe_clk = {
2647 .halt_reg = 0x6e018,
2648 .halt_check = BRANCH_HALT_SKIP,
2649 .clkr = {
2650 .enable_reg = 0x6e018,
2651 .enable_mask = BIT(0),
2652 .hw.init = &(struct clk_init_data){
2653 .name = "gcc_pcie_2_pipe_clk",
2654 .parent_names = (const char *[]){ "pcie_2_pipe_clk_src" },
2655 .num_parents = 1,
2656 .flags = CLK_SET_RATE_PARENT,
2657 .ops = &clk_branch2_ops,
2658 },
2659 },
2660};
2661
2662static struct clk_branch gcc_pcie_phy_cfg_ahb_clk = {
2663 .halt_reg = 0x6f004,
2664 .clkr = {
2665 .enable_reg = 0x6f004,
2666 .enable_mask = BIT(0),
2667 .hw.init = &(struct clk_init_data){
2668 .name = "gcc_pcie_phy_cfg_ahb_clk",
2669 .parent_names = (const char *[]){ "config_noc_clk_src" },
2670 .num_parents = 1,
2671 .flags = CLK_SET_RATE_PARENT,
2672 .ops = &clk_branch2_ops,
2673 },
2674 },
2675};
2676
2677static struct clk_branch gcc_pcie_phy_aux_clk = {
2678 .halt_reg = 0x6f008,
2679 .clkr = {
2680 .enable_reg = 0x6f008,
2681 .enable_mask = BIT(0),
2682 .hw.init = &(struct clk_init_data){
2683 .name = "gcc_pcie_phy_aux_clk",
2684 .parent_names = (const char *[]){ "pcie_aux_clk_src" },
2685 .num_parents = 1,
2686 .flags = CLK_SET_RATE_PARENT,
2687 .ops = &clk_branch2_ops,
2688 },
2689 },
2690};
2691
2692static struct clk_branch gcc_ufs_axi_clk = {
2693 .halt_reg = 0x75008,
2694 .clkr = {
2695 .enable_reg = 0x75008,
2696 .enable_mask = BIT(0),
2697 .hw.init = &(struct clk_init_data){
2698 .name = "gcc_ufs_axi_clk",
2699 .parent_names = (const char *[]){ "ufs_axi_clk_src" },
2700 .num_parents = 1,
2701 .flags = CLK_SET_RATE_PARENT,
2702 .ops = &clk_branch2_ops,
2703 },
2704 },
2705};
2706
2707static struct clk_branch gcc_ufs_ahb_clk = {
2708 .halt_reg = 0x7500c,
2709 .clkr = {
2710 .enable_reg = 0x7500c,
2711 .enable_mask = BIT(0),
2712 .hw.init = &(struct clk_init_data){
2713 .name = "gcc_ufs_ahb_clk",
2714 .parent_names = (const char *[]){ "config_noc_clk_src" },
2715 .num_parents = 1,
2716 .flags = CLK_SET_RATE_PARENT,
2717 .ops = &clk_branch2_ops,
2718 },
2719 },
2720};
2721
2722static struct clk_fixed_factor ufs_tx_cfg_clk_src = {
2723 .mult = 1,
2724 .div = 16,
2725 .hw.init = &(struct clk_init_data){
2726 .name = "ufs_tx_cfg_clk_src",
2727 .parent_names = (const char *[]){ "ufs_axi_clk_src" },
2728 .num_parents = 1,
2729 .flags = CLK_SET_RATE_PARENT,
2730 .ops = &clk_fixed_factor_ops,
2731 },
2732};
2733
2734static struct clk_branch gcc_ufs_tx_cfg_clk = {
2735 .halt_reg = 0x75010,
2736 .clkr = {
2737 .enable_reg = 0x75010,
2738 .enable_mask = BIT(0),
2739 .hw.init = &(struct clk_init_data){
2740 .name = "gcc_ufs_tx_cfg_clk",
2741 .parent_names = (const char *[]){ "ufs_tx_cfg_clk_src" },
2742 .num_parents = 1,
2743 .flags = CLK_SET_RATE_PARENT,
2744 .ops = &clk_branch2_ops,
2745 },
2746 },
2747};
2748
2749static struct clk_fixed_factor ufs_rx_cfg_clk_src = {
2750 .mult = 1,
2751 .div = 16,
2752 .hw.init = &(struct clk_init_data){
2753 .name = "ufs_rx_cfg_clk_src",
2754 .parent_names = (const char *[]){ "ufs_axi_clk_src" },
2755 .num_parents = 1,
2756 .flags = CLK_SET_RATE_PARENT,
2757 .ops = &clk_fixed_factor_ops,
2758 },
2759};
2760
2761static struct clk_branch gcc_hlos1_vote_lpass_core_smmu_clk = {
2762 .halt_reg = 0x7d010,
2763 .halt_check = BRANCH_HALT_VOTED,
2764 .clkr = {
2765 .enable_reg = 0x7d010,
2766 .enable_mask = BIT(0),
2767 .hw.init = &(struct clk_init_data){
2768 .name = "hlos1_vote_lpass_core_smmu_clk",
2769 .ops = &clk_branch2_ops,
2770 },
2771 },
2772};
2773
2774static struct clk_branch gcc_hlos1_vote_lpass_adsp_smmu_clk = {
2775 .halt_reg = 0x7d014,
2776 .halt_check = BRANCH_HALT_VOTED,
2777 .clkr = {
2778 .enable_reg = 0x7d014,
2779 .enable_mask = BIT(0),
2780 .hw.init = &(struct clk_init_data){
2781 .name = "hlos1_vote_lpass_adsp_smmu_clk",
2782 .ops = &clk_branch2_ops,
2783 },
2784 },
2785};
2786
2787static struct clk_branch gcc_ufs_rx_cfg_clk = {
2788 .halt_reg = 0x75014,
2789 .clkr = {
2790 .enable_reg = 0x75014,
2791 .enable_mask = BIT(0),
2792 .hw.init = &(struct clk_init_data){
2793 .name = "gcc_ufs_rx_cfg_clk",
2794 .parent_names = (const char *[]){ "ufs_rx_cfg_clk_src" },
2795 .num_parents = 1,
2796 .flags = CLK_SET_RATE_PARENT,
2797 .ops = &clk_branch2_ops,
2798 },
2799 },
2800};
2801
2802static struct clk_branch gcc_ufs_tx_symbol_0_clk = {
2803 .halt_reg = 0x75018,
2804 .halt_check = BRANCH_HALT_SKIP,
2805 .clkr = {
2806 .enable_reg = 0x75018,
2807 .enable_mask = BIT(0),
2808 .hw.init = &(struct clk_init_data){
2809 .name = "gcc_ufs_tx_symbol_0_clk",
2810 .parent_names = (const char *[]){ "ufs_tx_symbol_0_clk_src" },
2811 .num_parents = 1,
2812 .flags = CLK_SET_RATE_PARENT,
2813 .ops = &clk_branch2_ops,
2814 },
2815 },
2816};
2817
2818static struct clk_branch gcc_ufs_rx_symbol_0_clk = {
2819 .halt_reg = 0x7501c,
2820 .halt_check = BRANCH_HALT_SKIP,
2821 .clkr = {
2822 .enable_reg = 0x7501c,
2823 .enable_mask = BIT(0),
2824 .hw.init = &(struct clk_init_data){
2825 .name = "gcc_ufs_rx_symbol_0_clk",
2826 .parent_names = (const char *[]){ "ufs_rx_symbol_0_clk_src" },
2827 .num_parents = 1,
2828 .flags = CLK_SET_RATE_PARENT,
2829 .ops = &clk_branch2_ops,
2830 },
2831 },
2832};
2833
2834static struct clk_branch gcc_ufs_rx_symbol_1_clk = {
2835 .halt_reg = 0x75020,
2836 .halt_check = BRANCH_HALT_SKIP,
2837 .clkr = {
2838 .enable_reg = 0x75020,
2839 .enable_mask = BIT(0),
2840 .hw.init = &(struct clk_init_data){
2841 .name = "gcc_ufs_rx_symbol_1_clk",
2842 .parent_names = (const char *[]){ "ufs_rx_symbol_1_clk_src" },
2843 .num_parents = 1,
2844 .flags = CLK_SET_RATE_PARENT,
2845 .ops = &clk_branch2_ops,
2846 },
2847 },
2848};
2849
2850static struct clk_fixed_factor ufs_ice_core_postdiv_clk_src = {
2851 .mult = 1,
2852 .div = 2,
2853 .hw.init = &(struct clk_init_data){
2854 .name = "ufs_ice_core_postdiv_clk_src",
2855 .parent_names = (const char *[]){ "ufs_ice_core_clk_src" },
2856 .num_parents = 1,
2857 .flags = CLK_SET_RATE_PARENT,
2858 .ops = &clk_fixed_factor_ops,
2859 },
2860};
2861
2862static struct clk_branch gcc_ufs_unipro_core_clk = {
2863 .halt_reg = 0x7600c,
2864 .clkr = {
2865 .enable_reg = 0x7600c,
2866 .enable_mask = BIT(0),
2867 .hw.init = &(struct clk_init_data){
2868 .name = "gcc_ufs_unipro_core_clk",
2869 .parent_names = (const char *[]){ "ufs_ice_core_postdiv_clk_src" },
2870 .num_parents = 1,
2871 .flags = CLK_SET_RATE_PARENT,
2872 .ops = &clk_branch2_ops,
2873 },
2874 },
2875};
2876
2877static struct clk_branch gcc_ufs_ice_core_clk = {
2878 .halt_reg = 0x76010,
2879 .clkr = {
2880 .enable_reg = 0x76010,
2881 .enable_mask = BIT(0),
2882 .hw.init = &(struct clk_init_data){
2883 .name = "gcc_ufs_ice_core_clk",
2884 .parent_names = (const char *[]){ "ufs_ice_core_clk_src" },
2885 .num_parents = 1,
2886 .flags = CLK_SET_RATE_PARENT,
2887 .ops = &clk_branch2_ops,
2888 },
2889 },
2890};
2891
2892static struct clk_branch gcc_ufs_sys_clk_core_clk = {
2893 .halt_check = BRANCH_HALT_DELAY,
2894 .clkr = {
2895 .enable_reg = 0x76030,
2896 .enable_mask = BIT(0),
2897 .hw.init = &(struct clk_init_data){
2898 .name = "gcc_ufs_sys_clk_core_clk",
2899 .ops = &clk_branch2_ops,
2900 },
2901 },
2902};
2903
2904static struct clk_branch gcc_ufs_tx_symbol_clk_core_clk = {
2905 .halt_check = BRANCH_HALT_DELAY,
2906 .clkr = {
2907 .enable_reg = 0x76034,
2908 .enable_mask = BIT(0),
2909 .hw.init = &(struct clk_init_data){
2910 .name = "gcc_ufs_tx_symbol_clk_core_clk",
2911 .ops = &clk_branch2_ops,
2912 },
2913 },
2914};
2915
2916static struct clk_branch gcc_aggre0_snoc_axi_clk = {
2917 .halt_reg = 0x81008,
2918 .clkr = {
2919 .enable_reg = 0x81008,
2920 .enable_mask = BIT(0),
2921 .hw.init = &(struct clk_init_data){
2922 .name = "gcc_aggre0_snoc_axi_clk",
2923 .parent_names = (const char *[]){ "system_noc_clk_src" },
2924 .num_parents = 1,
2925 .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
2926 .ops = &clk_branch2_ops,
2927 },
2928 },
2929};
2930
2931static struct clk_branch gcc_aggre0_cnoc_ahb_clk = {
2932 .halt_reg = 0x8100c,
2933 .clkr = {
2934 .enable_reg = 0x8100c,
2935 .enable_mask = BIT(0),
2936 .hw.init = &(struct clk_init_data){
2937 .name = "gcc_aggre0_cnoc_ahb_clk",
2938 .parent_names = (const char *[]){ "config_noc_clk_src" },
2939 .num_parents = 1,
2940 .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
2941 .ops = &clk_branch2_ops,
2942 },
2943 },
2944};
2945
2946static struct clk_branch gcc_smmu_aggre0_axi_clk = {
2947 .halt_reg = 0x81014,
2948 .clkr = {
2949 .enable_reg = 0x81014,
2950 .enable_mask = BIT(0),
2951 .hw.init = &(struct clk_init_data){
2952 .name = "gcc_smmu_aggre0_axi_clk",
2953 .parent_names = (const char *[]){ "system_noc_clk_src" },
2954 .num_parents = 1,
2955 .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
2956 .ops = &clk_branch2_ops,
2957 },
2958 },
2959};
2960
2961static struct clk_branch gcc_smmu_aggre0_ahb_clk = {
2962 .halt_reg = 0x81018,
2963 .clkr = {
2964 .enable_reg = 0x81018,
2965 .enable_mask = BIT(0),
2966 .hw.init = &(struct clk_init_data){
2967 .name = "gcc_smmu_aggre0_ahb_clk",
2968 .parent_names = (const char *[]){ "config_noc_clk_src" },
2969 .num_parents = 1,
2970 .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
2971 .ops = &clk_branch2_ops,
2972 },
2973 },
2974};
2975
2976static struct clk_branch gcc_aggre1_pnoc_ahb_clk = {
2977 .halt_reg = 0x82014,
2978 .clkr = {
2979 .enable_reg = 0x82014,
2980 .enable_mask = BIT(0),
2981 .hw.init = &(struct clk_init_data){
2982 .name = "gcc_aggre1_pnoc_ahb_clk",
2983 .parent_names = (const char *[]){ "periph_noc_clk_src" },
2984 .num_parents = 1,
2985 .ops = &clk_branch2_ops,
2986 },
2987 },
2988};
2989
2990static struct clk_branch gcc_aggre2_ufs_axi_clk = {
2991 .halt_reg = 0x83014,
2992 .clkr = {
2993 .enable_reg = 0x83014,
2994 .enable_mask = BIT(0),
2995 .hw.init = &(struct clk_init_data){
2996 .name = "gcc_aggre2_ufs_axi_clk",
2997 .parent_names = (const char *[]){ "ufs_axi_clk_src" },
2998 .num_parents = 1,
2999 .flags = CLK_SET_RATE_PARENT,
3000 .ops = &clk_branch2_ops,
3001 },
3002 },
3003};
3004
3005static struct clk_branch gcc_aggre2_usb3_axi_clk = {
3006 .halt_reg = 0x83018,
3007 .clkr = {
3008 .enable_reg = 0x83018,
3009 .enable_mask = BIT(0),
3010 .hw.init = &(struct clk_init_data){
3011 .name = "gcc_aggre2_usb3_axi_clk",
3012 .parent_names = (const char *[]){ "usb30_master_clk_src" },
3013 .num_parents = 1,
3014 .flags = CLK_SET_RATE_PARENT,
3015 .ops = &clk_branch2_ops,
3016 },
3017 },
3018};
3019
3020static struct clk_branch gcc_dcc_ahb_clk = {
3021 .halt_reg = 0x84004,
3022 .clkr = {
3023 .enable_reg = 0x84004,
3024 .enable_mask = BIT(0),
3025 .hw.init = &(struct clk_init_data){
3026 .name = "gcc_dcc_ahb_clk",
3027 .parent_names = (const char *[]){ "config_noc_clk_src" },
3028 .num_parents = 1,
3029 .ops = &clk_branch2_ops,
3030 },
3031 },
3032};
3033
3034static struct clk_branch gcc_aggre0_noc_mpu_cfg_ahb_clk = {
3035 .halt_reg = 0x85000,
3036 .clkr = {
3037 .enable_reg = 0x85000,
3038 .enable_mask = BIT(0),
3039 .hw.init = &(struct clk_init_data){
3040 .name = "gcc_aggre0_noc_mpu_cfg_ahb_clk",
3041 .parent_names = (const char *[]){ "config_noc_clk_src" },
3042 .num_parents = 1,
3043 .ops = &clk_branch2_ops,
3044 },
3045 },
3046};
3047
3048static struct clk_branch gcc_qspi_ahb_clk = {
3049 .halt_reg = 0x8b004,
3050 .clkr = {
3051 .enable_reg = 0x8b004,
3052 .enable_mask = BIT(0),
3053 .hw.init = &(struct clk_init_data){
3054 .name = "gcc_qspi_ahb_clk",
3055 .parent_names = (const char *[]){ "periph_noc_clk_src" },
3056 .num_parents = 1,
3057 .flags = CLK_SET_RATE_PARENT,
3058 .ops = &clk_branch2_ops,
3059 },
3060 },
3061};
3062
3063static struct clk_branch gcc_qspi_ser_clk = {
3064 .halt_reg = 0x8b008,
3065 .clkr = {
3066 .enable_reg = 0x8b008,
3067 .enable_mask = BIT(0),
3068 .hw.init = &(struct clk_init_data){
3069 .name = "gcc_qspi_ser_clk",
3070 .parent_names = (const char *[]){ "qspi_ser_clk_src" },
3071 .num_parents = 1,
3072 .flags = CLK_SET_RATE_PARENT,
3073 .ops = &clk_branch2_ops,
3074 },
3075 },
3076};
3077
3078static struct clk_branch gcc_usb3_clkref_clk = {
3079 .halt_reg = 0x8800C,
3080 .clkr = {
3081 .enable_reg = 0x8800C,
3082 .enable_mask = BIT(0),
3083 .hw.init = &(struct clk_init_data){
3084 .name = "gcc_usb3_clkref_clk",
3085 .parent_names = (const char *[]){ "xo" },
3086 .num_parents = 1,
3087 .ops = &clk_branch2_ops,
3088 },
3089 },
3090};
3091
3092static struct clk_branch gcc_hdmi_clkref_clk = {
3093 .halt_reg = 0x88000,
3094 .clkr = {
3095 .enable_reg = 0x88000,
3096 .enable_mask = BIT(0),
3097 .hw.init = &(struct clk_init_data){
3098 .name = "gcc_hdmi_clkref_clk",
3099 .parent_names = (const char *[]){ "xo" },
3100 .num_parents = 1,
3101 .ops = &clk_branch2_ops,
3102 },
3103 },
3104};
3105
3106static struct clk_branch gcc_edp_clkref_clk = {
3107 .halt_reg = 0x88004,
3108 .clkr = {
3109 .enable_reg = 0x88004,
3110 .enable_mask = BIT(0),
3111 .hw.init = &(struct clk_init_data){
3112 .name = "gcc_edp_clkref_clk",
3113 .parent_names = (const char *[]){ "xo" },
3114 .num_parents = 1,
3115 .ops = &clk_branch2_ops,
3116 },
3117 },
3118};
3119
3120static struct clk_branch gcc_ufs_clkref_clk = {
3121 .halt_reg = 0x88008,
3122 .clkr = {
3123 .enable_reg = 0x88008,
3124 .enable_mask = BIT(0),
3125 .hw.init = &(struct clk_init_data){
3126 .name = "gcc_ufs_clkref_clk",
3127 .parent_names = (const char *[]){ "xo" },
3128 .num_parents = 1,
3129 .ops = &clk_branch2_ops,
3130 },
3131 },
3132};
3133
3134static struct clk_branch gcc_pcie_clkref_clk = {
3135 .halt_reg = 0x88010,
3136 .clkr = {
3137 .enable_reg = 0x88010,
3138 .enable_mask = BIT(0),
3139 .hw.init = &(struct clk_init_data){
3140 .name = "gcc_pcie_clkref_clk",
3141 .parent_names = (const char *[]){ "xo" },
3142 .num_parents = 1,
3143 .ops = &clk_branch2_ops,
3144 },
3145 },
3146};
3147
3148static struct clk_branch gcc_rx2_usb2_clkref_clk = {
3149 .halt_reg = 0x88014,
3150 .clkr = {
3151 .enable_reg = 0x88014,
3152 .enable_mask = BIT(0),
3153 .hw.init = &(struct clk_init_data){
3154 .name = "gcc_rx2_usb2_clkref_clk",
3155 .parent_names = (const char *[]){ "xo" },
3156 .num_parents = 1,
3157 .ops = &clk_branch2_ops,
3158 },
3159 },
3160};
3161
3162static struct clk_branch gcc_rx1_usb2_clkref_clk = {
3163 .halt_reg = 0x88018,
3164 .clkr = {
3165 .enable_reg = 0x88018,
3166 .enable_mask = BIT(0),
3167 .hw.init = &(struct clk_init_data){
3168 .name = "gcc_rx1_usb2_clkref_clk",
3169 .parent_names = (const char *[]){ "xo" },
3170 .num_parents = 1,
3171 .ops = &clk_branch2_ops,
3172 },
3173 },
3174};
3175
3176static struct clk_branch gcc_mss_cfg_ahb_clk = {
3177 .halt_reg = 0x8a000,
3178 .clkr = {
3179 .enable_reg = 0x8a000,
3180 .enable_mask = BIT(0),
3181 .hw.init = &(struct clk_init_data){
3182 .name = "gcc_mss_cfg_ahb_clk",
3183 .parent_names = (const char *[]){ "config_noc_clk_src" },
3184 .num_parents = 1,
3185 .ops = &clk_branch2_ops,
3186 },
3187 },
3188};
3189
3190static struct clk_branch gcc_mss_mnoc_bimc_axi_clk = {
3191 .halt_reg = 0x8a004,
3192 .clkr = {
3193 .enable_reg = 0x8a004,
3194 .enable_mask = BIT(0),
3195 .hw.init = &(struct clk_init_data){
3196 .name = "gcc_mss_mnoc_bimc_axi_clk",
3197 .parent_names = (const char *[]){ "system_noc_clk_src" },
3198 .num_parents = 1,
3199 .ops = &clk_branch2_ops,
3200 },
3201 },
3202};
3203
3204static struct clk_branch gcc_mss_snoc_axi_clk = {
3205 .halt_reg = 0x8a024,
3206 .clkr = {
3207 .enable_reg = 0x8a024,
3208 .enable_mask = BIT(0),
3209 .hw.init = &(struct clk_init_data){
3210 .name = "gcc_mss_snoc_axi_clk",
3211 .parent_names = (const char *[]){ "system_noc_clk_src" },
3212 .num_parents = 1,
3213 .ops = &clk_branch2_ops,
3214 },
3215 },
3216};
3217
3218static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
3219 .halt_reg = 0x8a028,
3220 .clkr = {
3221 .enable_reg = 0x8a028,
3222 .enable_mask = BIT(0),
3223 .hw.init = &(struct clk_init_data){
3224 .name = "gcc_mss_q6_bimc_axi_clk",
3225 .parent_names = (const char *[]){ "system_noc_clk_src" },
3226 .num_parents = 1,
3227 .ops = &clk_branch2_ops,
3228 },
3229 },
3230};
3231
3232static struct clk_hw *gcc_msm8996_hws[] = {
3233 &xo.hw,
3234 &gpll0_early_div.hw,
3235 &ufs_tx_cfg_clk_src.hw,
3236 &ufs_rx_cfg_clk_src.hw,
3237 &ufs_ice_core_postdiv_clk_src.hw,
3238};
3239
3240static struct gdsc aggre0_noc_gdsc = {
3241 .gdscr = 0x81004,
3242 .gds_hw_ctrl = 0x81028,
3243 .pd = {
3244 .name = "aggre0_noc",
3245 },
3246 .pwrsts = PWRSTS_OFF_ON,
3247 .flags = VOTABLE | ALWAYS_ON,
3248};
3249
3250static struct gdsc hlos1_vote_aggre0_noc_gdsc = {
3251 .gdscr = 0x7d024,
3252 .pd = {
3253 .name = "hlos1_vote_aggre0_noc",
3254 },
3255 .pwrsts = PWRSTS_OFF_ON,
3256 .flags = VOTABLE,
3257};
3258
3259static struct gdsc hlos1_vote_lpass_adsp_gdsc = {
3260 .gdscr = 0x7d034,
3261 .pd = {
3262 .name = "hlos1_vote_lpass_adsp",
3263 },
3264 .pwrsts = PWRSTS_OFF_ON,
3265 .flags = VOTABLE,
3266};
3267
3268static struct gdsc hlos1_vote_lpass_core_gdsc = {
3269 .gdscr = 0x7d038,
3270 .pd = {
3271 .name = "hlos1_vote_lpass_core",
3272 },
3273 .pwrsts = PWRSTS_OFF_ON,
3274 .flags = VOTABLE,
3275};
3276
3277static struct gdsc usb30_gdsc = {
3278 .gdscr = 0xf004,
3279 .pd = {
3280 .name = "usb30",
3281 },
3282 .pwrsts = PWRSTS_OFF_ON,
3283};
3284
3285static struct gdsc pcie0_gdsc = {
3286 .gdscr = 0x6b004,
3287 .pd = {
3288 .name = "pcie0",
3289 },
3290 .pwrsts = PWRSTS_OFF_ON,
3291};
3292
3293static struct gdsc pcie1_gdsc = {
3294 .gdscr = 0x6d004,
3295 .pd = {
3296 .name = "pcie1",
3297 },
3298 .pwrsts = PWRSTS_OFF_ON,
3299};
3300
3301static struct gdsc pcie2_gdsc = {
3302 .gdscr = 0x6e004,
3303 .pd = {
3304 .name = "pcie2",
3305 },
3306 .pwrsts = PWRSTS_OFF_ON,
3307};
3308
3309static struct gdsc ufs_gdsc = {
3310 .gdscr = 0x75004,
3311 .pd = {
3312 .name = "ufs",
3313 },
3314 .pwrsts = PWRSTS_OFF_ON,
3315};
3316
3317static struct clk_regmap *gcc_msm8996_clocks[] = {
3318 [GPLL0_EARLY] = &gpll0_early.clkr,
3319 [GPLL0] = &gpll0.clkr,
3320 [GPLL4_EARLY] = &gpll4_early.clkr,
3321 [GPLL4] = &gpll4.clkr,
3322 [SYSTEM_NOC_CLK_SRC] = &system_noc_clk_src.clkr,
3323 [CONFIG_NOC_CLK_SRC] = &config_noc_clk_src.clkr,
3324 [PERIPH_NOC_CLK_SRC] = &periph_noc_clk_src.clkr,
3325 [USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
3326 [USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
3327 [USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr,
3328 [USB20_MASTER_CLK_SRC] = &usb20_master_clk_src.clkr,
3329 [USB20_MOCK_UTMI_CLK_SRC] = &usb20_mock_utmi_clk_src.clkr,
3330 [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
3331 [SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
3332 [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
3333 [SDCC3_APPS_CLK_SRC] = &sdcc3_apps_clk_src.clkr,
3334 [SDCC4_APPS_CLK_SRC] = &sdcc4_apps_clk_src.clkr,
3335 [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
3336 [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
3337 [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
3338 [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
3339 [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
3340 [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
3341 [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
3342 [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
3343 [BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
3344 [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
3345 [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
3346 [BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
3347 [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
3348 [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
3349 [BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
3350 [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
3351 [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
3352 [BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
3353 [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
3354 [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
3355 [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
3356 [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
3357 [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
3358 [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
3359 [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
3360 [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
3361 [BLSP2_UART3_APPS_CLK_SRC] = &blsp2_uart3_apps_clk_src.clkr,
3362 [BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
3363 [BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
3364 [BLSP2_UART4_APPS_CLK_SRC] = &blsp2_uart4_apps_clk_src.clkr,
3365 [BLSP2_QUP5_SPI_APPS_CLK_SRC] = &blsp2_qup5_spi_apps_clk_src.clkr,
3366 [BLSP2_QUP5_I2C_APPS_CLK_SRC] = &blsp2_qup5_i2c_apps_clk_src.clkr,
3367 [BLSP2_UART5_APPS_CLK_SRC] = &blsp2_uart5_apps_clk_src.clkr,
3368 [BLSP2_QUP6_SPI_APPS_CLK_SRC] = &blsp2_qup6_spi_apps_clk_src.clkr,
3369 [BLSP2_QUP6_I2C_APPS_CLK_SRC] = &blsp2_qup6_i2c_apps_clk_src.clkr,
3370 [BLSP2_UART6_APPS_CLK_SRC] = &blsp2_uart6_apps_clk_src.clkr,
3371 [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
3372 [TSIF_REF_CLK_SRC] = &tsif_ref_clk_src.clkr,
3373 [GCC_SLEEP_CLK_SRC] = &gcc_sleep_clk_src.clkr,
3374 [HMSS_RBCPR_CLK_SRC] = &hmss_rbcpr_clk_src.clkr,
3375 [HMSS_GPLL0_CLK_SRC] = &hmss_gpll0_clk_src.clkr,
3376 [GP1_CLK_SRC] = &gp1_clk_src.clkr,
3377 [GP2_CLK_SRC] = &gp2_clk_src.clkr,
3378 [GP3_CLK_SRC] = &gp3_clk_src.clkr,
3379 [PCIE_AUX_CLK_SRC] = &pcie_aux_clk_src.clkr,
3380 [UFS_AXI_CLK_SRC] = &ufs_axi_clk_src.clkr,
3381 [UFS_ICE_CORE_CLK_SRC] = &ufs_ice_core_clk_src.clkr,
3382 [QSPI_SER_CLK_SRC] = &qspi_ser_clk_src.clkr,
3383 [GCC_SYS_NOC_USB3_AXI_CLK] = &gcc_sys_noc_usb3_axi_clk.clkr,
3384 [GCC_SYS_NOC_UFS_AXI_CLK] = &gcc_sys_noc_ufs_axi_clk.clkr,
3385 [GCC_PERIPH_NOC_USB20_AHB_CLK] = &gcc_periph_noc_usb20_ahb_clk.clkr,
3386 [GCC_MMSS_NOC_CFG_AHB_CLK] = &gcc_mmss_noc_cfg_ahb_clk.clkr,
3387 [GCC_MMSS_BIMC_GFX_CLK] = &gcc_mmss_bimc_gfx_clk.clkr,
3388 [GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
3389 [GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,
3390 [GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
3391 [GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr,
3392 [GCC_USB3_PHY_PIPE_CLK] = &gcc_usb3_phy_pipe_clk.clkr,
3393 [GCC_USB20_MASTER_CLK] = &gcc_usb20_master_clk.clkr,
3394 [GCC_USB20_SLEEP_CLK] = &gcc_usb20_sleep_clk.clkr,
3395 [GCC_USB20_MOCK_UTMI_CLK] = &gcc_usb20_mock_utmi_clk.clkr,
3396 [GCC_USB_PHY_CFG_AHB2PHY_CLK] = &gcc_usb_phy_cfg_ahb2phy_clk.clkr,
3397 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
3398 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
3399 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
3400 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3401 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3402 [GCC_SDCC3_APPS_CLK] = &gcc_sdcc3_apps_clk.clkr,
3403 [GCC_SDCC3_AHB_CLK] = &gcc_sdcc3_ahb_clk.clkr,
3404 [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
3405 [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
3406 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
3407 [GCC_BLSP1_SLEEP_CLK] = &gcc_blsp1_sleep_clk.clkr,
3408 [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
3409 [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
3410 [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
3411 [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
3412 [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
3413 [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
3414 [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
3415 [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
3416 [GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
3417 [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
3418 [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
3419 [GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
3420 [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
3421 [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
3422 [GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
3423 [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
3424 [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
3425 [GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
3426 [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
3427 [GCC_BLSP2_SLEEP_CLK] = &gcc_blsp2_sleep_clk.clkr,
3428 [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
3429 [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
3430 [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
3431 [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
3432 [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
3433 [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
3434 [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
3435 [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
3436 [GCC_BLSP2_UART3_APPS_CLK] = &gcc_blsp2_uart3_apps_clk.clkr,
3437 [GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
3438 [GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
3439 [GCC_BLSP2_UART4_APPS_CLK] = &gcc_blsp2_uart4_apps_clk.clkr,
3440 [GCC_BLSP2_QUP5_SPI_APPS_CLK] = &gcc_blsp2_qup5_spi_apps_clk.clkr,
3441 [GCC_BLSP2_QUP5_I2C_APPS_CLK] = &gcc_blsp2_qup5_i2c_apps_clk.clkr,
3442 [GCC_BLSP2_UART5_APPS_CLK] = &gcc_blsp2_uart5_apps_clk.clkr,
3443 [GCC_BLSP2_QUP6_SPI_APPS_CLK] = &gcc_blsp2_qup6_spi_apps_clk.clkr,
3444 [GCC_BLSP2_QUP6_I2C_APPS_CLK] = &gcc_blsp2_qup6_i2c_apps_clk.clkr,
3445 [GCC_BLSP2_UART6_APPS_CLK] = &gcc_blsp2_uart6_apps_clk.clkr,
3446 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3447 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3448 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3449 [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr,
3450 [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
3451 [GCC_TSIF_INACTIVITY_TIMERS_CLK] = &gcc_tsif_inactivity_timers_clk.clkr,
3452 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3453 [GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
3454 [GCC_HMSS_RBCPR_CLK] = &gcc_hmss_rbcpr_clk.clkr,
3455 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3456 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3457 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3458 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
3459 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
3460 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
3461 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
3462 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
3463 [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
3464 [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
3465 [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
3466 [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
3467 [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
3468 [GCC_PCIE_2_SLV_AXI_CLK] = &gcc_pcie_2_slv_axi_clk.clkr,
3469 [GCC_PCIE_2_MSTR_AXI_CLK] = &gcc_pcie_2_mstr_axi_clk.clkr,
3470 [GCC_PCIE_2_CFG_AHB_CLK] = &gcc_pcie_2_cfg_ahb_clk.clkr,
3471 [GCC_PCIE_2_AUX_CLK] = &gcc_pcie_2_aux_clk.clkr,
3472 [GCC_PCIE_2_PIPE_CLK] = &gcc_pcie_2_pipe_clk.clkr,
3473 [GCC_PCIE_PHY_CFG_AHB_CLK] = &gcc_pcie_phy_cfg_ahb_clk.clkr,
3474 [GCC_PCIE_PHY_AUX_CLK] = &gcc_pcie_phy_aux_clk.clkr,
3475 [GCC_UFS_AXI_CLK] = &gcc_ufs_axi_clk.clkr,
3476 [GCC_UFS_AHB_CLK] = &gcc_ufs_ahb_clk.clkr,
3477 [GCC_UFS_TX_CFG_CLK] = &gcc_ufs_tx_cfg_clk.clkr,
3478 [GCC_UFS_RX_CFG_CLK] = &gcc_ufs_rx_cfg_clk.clkr,
3479 [GCC_HLOS1_VOTE_LPASS_CORE_SMMU_CLK] = &gcc_hlos1_vote_lpass_core_smmu_clk.clkr,
3480 [GCC_HLOS1_VOTE_LPASS_ADSP_SMMU_CLK] = &gcc_hlos1_vote_lpass_adsp_smmu_clk.clkr,
3481 [GCC_UFS_TX_SYMBOL_0_CLK] = &gcc_ufs_tx_symbol_0_clk.clkr,
3482 [GCC_UFS_RX_SYMBOL_0_CLK] = &gcc_ufs_rx_symbol_0_clk.clkr,
3483 [GCC_UFS_RX_SYMBOL_1_CLK] = &gcc_ufs_rx_symbol_1_clk.clkr,
3484 [GCC_UFS_UNIPRO_CORE_CLK] = &gcc_ufs_unipro_core_clk.clkr,
3485 [GCC_UFS_ICE_CORE_CLK] = &gcc_ufs_ice_core_clk.clkr,
3486 [GCC_UFS_SYS_CLK_CORE_CLK] = &gcc_ufs_sys_clk_core_clk.clkr,
3487 [GCC_UFS_TX_SYMBOL_CLK_CORE_CLK] = &gcc_ufs_tx_symbol_clk_core_clk.clkr,
3488 [GCC_AGGRE0_SNOC_AXI_CLK] = &gcc_aggre0_snoc_axi_clk.clkr,
3489 [GCC_AGGRE0_CNOC_AHB_CLK] = &gcc_aggre0_cnoc_ahb_clk.clkr,
3490 [GCC_SMMU_AGGRE0_AXI_CLK] = &gcc_smmu_aggre0_axi_clk.clkr,
3491 [GCC_SMMU_AGGRE0_AHB_CLK] = &gcc_smmu_aggre0_ahb_clk.clkr,
3492 [GCC_AGGRE1_PNOC_AHB_CLK] = &gcc_aggre1_pnoc_ahb_clk.clkr,
3493 [GCC_AGGRE2_UFS_AXI_CLK] = &gcc_aggre2_ufs_axi_clk.clkr,
3494 [GCC_AGGRE2_USB3_AXI_CLK] = &gcc_aggre2_usb3_axi_clk.clkr,
3495 [GCC_QSPI_AHB_CLK] = &gcc_qspi_ahb_clk.clkr,
3496 [GCC_QSPI_SER_CLK] = &gcc_qspi_ser_clk.clkr,
3497 [GCC_USB3_CLKREF_CLK] = &gcc_usb3_clkref_clk.clkr,
3498 [GCC_HDMI_CLKREF_CLK] = &gcc_hdmi_clkref_clk.clkr,
3499 [GCC_UFS_CLKREF_CLK] = &gcc_ufs_clkref_clk.clkr,
3500 [GCC_PCIE_CLKREF_CLK] = &gcc_pcie_clkref_clk.clkr,
3501 [GCC_RX2_USB2_CLKREF_CLK] = &gcc_rx2_usb2_clkref_clk.clkr,
3502 [GCC_RX1_USB2_CLKREF_CLK] = &gcc_rx1_usb2_clkref_clk.clkr,
3503 [GCC_EDP_CLKREF_CLK] = &gcc_edp_clkref_clk.clkr,
3504 [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
3505 [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
3506 [GCC_MSS_SNOC_AXI_CLK] = &gcc_mss_snoc_axi_clk.clkr,
3507 [GCC_MSS_MNOC_BIMC_AXI_CLK] = &gcc_mss_mnoc_bimc_axi_clk.clkr,
3508 [GCC_DCC_AHB_CLK] = &gcc_dcc_ahb_clk.clkr,
3509 [GCC_AGGRE0_NOC_MPU_CFG_AHB_CLK] = &gcc_aggre0_noc_mpu_cfg_ahb_clk.clkr,
3510 [GCC_MMSS_GPLL0_DIV_CLK] = &gcc_mmss_gpll0_div_clk.clkr,
3511 [GCC_MSS_GPLL0_DIV_CLK] = &gcc_mss_gpll0_div_clk.clkr,
3512};
3513
3514static struct gdsc *gcc_msm8996_gdscs[] = {
3515 [AGGRE0_NOC_GDSC] = &aggre0_noc_gdsc,
3516 [HLOS1_VOTE_AGGRE0_NOC_GDSC] = &hlos1_vote_aggre0_noc_gdsc,
3517 [HLOS1_VOTE_LPASS_ADSP_GDSC] = &hlos1_vote_lpass_adsp_gdsc,
3518 [HLOS1_VOTE_LPASS_CORE_GDSC] = &hlos1_vote_lpass_core_gdsc,
3519 [USB30_GDSC] = &usb30_gdsc,
3520 [PCIE0_GDSC] = &pcie0_gdsc,
3521 [PCIE1_GDSC] = &pcie1_gdsc,
3522 [PCIE2_GDSC] = &pcie2_gdsc,
3523 [UFS_GDSC] = &ufs_gdsc,
3524};
3525
3526static const struct qcom_reset_map gcc_msm8996_resets[] = {
3527 [GCC_SYSTEM_NOC_BCR] = { 0x4000 },
3528 [GCC_CONFIG_NOC_BCR] = { 0x5000 },
3529 [GCC_PERIPH_NOC_BCR] = { 0x6000 },
3530 [GCC_IMEM_BCR] = { 0x8000 },
3531 [GCC_MMSS_BCR] = { 0x9000 },
3532 [GCC_PIMEM_BCR] = { 0x0a000 },
3533 [GCC_QDSS_BCR] = { 0x0c000 },
3534 [GCC_USB_30_BCR] = { 0x0f000 },
3535 [GCC_USB_20_BCR] = { 0x12000 },
3536 [GCC_QUSB2PHY_PRIM_BCR] = { 0x12038 },
3537 [GCC_QUSB2PHY_SEC_BCR] = { 0x1203c },
3538 [GCC_USB3_PHY_BCR] = { 0x50020 },
3539 [GCC_USB3PHY_PHY_BCR] = { 0x50024 },
3540 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 },
3541 [GCC_SDCC1_BCR] = { 0x13000 },
3542 [GCC_SDCC2_BCR] = { 0x14000 },
3543 [GCC_SDCC3_BCR] = { 0x15000 },
3544 [GCC_SDCC4_BCR] = { 0x16000 },
3545 [GCC_BLSP1_BCR] = { 0x17000 },
3546 [GCC_BLSP1_QUP1_BCR] = { 0x19000 },
3547 [GCC_BLSP1_UART1_BCR] = { 0x1a000 },
3548 [GCC_BLSP1_QUP2_BCR] = { 0x1b000 },
3549 [GCC_BLSP1_UART2_BCR] = { 0x1c000 },
3550 [GCC_BLSP1_QUP3_BCR] = { 0x1d000 },
3551 [GCC_BLSP1_UART3_BCR] = { 0x1e000 },
3552 [GCC_BLSP1_QUP4_BCR] = { 0x1f000 },
3553 [GCC_BLSP1_UART4_BCR] = { 0x20000 },
3554 [GCC_BLSP1_QUP5_BCR] = { 0x21000 },
3555 [GCC_BLSP1_UART5_BCR] = { 0x22000 },
3556 [GCC_BLSP1_QUP6_BCR] = { 0x23000 },
3557 [GCC_BLSP1_UART6_BCR] = { 0x24000 },
3558 [GCC_BLSP2_BCR] = { 0x25000 },
3559 [GCC_BLSP2_QUP1_BCR] = { 0x26000 },
3560 [GCC_BLSP2_UART1_BCR] = { 0x27000 },
3561 [GCC_BLSP2_QUP2_BCR] = { 0x28000 },
3562 [GCC_BLSP2_UART2_BCR] = { 0x29000 },
3563 [GCC_BLSP2_QUP3_BCR] = { 0x2a000 },
3564 [GCC_BLSP2_UART3_BCR] = { 0x2b000 },
3565 [GCC_BLSP2_QUP4_BCR] = { 0x2c000 },
3566 [GCC_BLSP2_UART4_BCR] = { 0x2d000 },
3567 [GCC_BLSP2_QUP5_BCR] = { 0x2e000 },
3568 [GCC_BLSP2_UART5_BCR] = { 0x2f000 },
3569 [GCC_BLSP2_QUP6_BCR] = { 0x30000 },
3570 [GCC_BLSP2_UART6_BCR] = { 0x31000 },
3571 [GCC_PDM_BCR] = { 0x33000 },
3572 [GCC_PRNG_BCR] = { 0x34000 },
3573 [GCC_TSIF_BCR] = { 0x36000 },
3574 [GCC_TCSR_BCR] = { 0x37000 },
3575 [GCC_BOOT_ROM_BCR] = { 0x38000 },
3576 [GCC_MSG_RAM_BCR] = { 0x39000 },
3577 [GCC_TLMM_BCR] = { 0x3a000 },
3578 [GCC_MPM_BCR] = { 0x3b000 },
3579 [GCC_SEC_CTRL_BCR] = { 0x3d000 },
3580 [GCC_SPMI_BCR] = { 0x3f000 },
3581 [GCC_SPDM_BCR] = { 0x40000 },
3582 [GCC_CE1_BCR] = { 0x41000 },
3583 [GCC_BIMC_BCR] = { 0x44000 },
3584 [GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x49000 },
3585 [GCC_SNOC_BUS_TIMEOUT2_BCR] = { 0x49008 },
3586 [GCC_SNOC_BUS_TIMEOUT1_BCR] = { 0x49010 },
3587 [GCC_SNOC_BUS_TIMEOUT3_BCR] = { 0x49018 },
3588 [GCC_SNOC_BUS_TIMEOUT_EXTREF_BCR] = { 0x49020 },
3589 [GCC_PNOC_BUS_TIMEOUT0_BCR] = { 0x4a000 },
3590 [GCC_PNOC_BUS_TIMEOUT1_BCR] = { 0x4a008 },
3591 [GCC_PNOC_BUS_TIMEOUT2_BCR] = { 0x4a010 },
3592 [GCC_PNOC_BUS_TIMEOUT3_BCR] = { 0x4a018 },
3593 [GCC_PNOC_BUS_TIMEOUT4_BCR] = { 0x4a020 },
3594 [GCC_CNOC_BUS_TIMEOUT0_BCR] = { 0x4b000 },
3595 [GCC_CNOC_BUS_TIMEOUT1_BCR] = { 0x4b008 },
3596 [GCC_CNOC_BUS_TIMEOUT2_BCR] = { 0x4b010 },
3597 [GCC_CNOC_BUS_TIMEOUT3_BCR] = { 0x4b018 },
3598 [GCC_CNOC_BUS_TIMEOUT4_BCR] = { 0x4b020 },
3599 [GCC_CNOC_BUS_TIMEOUT5_BCR] = { 0x4b028 },
3600 [GCC_CNOC_BUS_TIMEOUT6_BCR] = { 0x4b030 },
3601 [GCC_CNOC_BUS_TIMEOUT7_BCR] = { 0x4b038 },
3602 [GCC_CNOC_BUS_TIMEOUT8_BCR] = { 0x80000 },
3603 [GCC_CNOC_BUS_TIMEOUT9_BCR] = { 0x80008 },
3604 [GCC_CNOC_BUS_TIMEOUT_EXTREF_BCR] = { 0x80010 },
3605 [GCC_APB2JTAG_BCR] = { 0x4c000 },
3606 [GCC_RBCPR_CX_BCR] = { 0x4e000 },
3607 [GCC_RBCPR_MX_BCR] = { 0x4f000 },
3608 [GCC_PCIE_0_BCR] = { 0x6b000 },
3609 [GCC_PCIE_0_PHY_BCR] = { 0x6c01c },
3610 [GCC_PCIE_1_BCR] = { 0x6d000 },
3611 [GCC_PCIE_1_PHY_BCR] = { 0x6d038 },
3612 [GCC_PCIE_2_BCR] = { 0x6e000 },
3613 [GCC_PCIE_2_PHY_BCR] = { 0x6e038 },
3614 [GCC_PCIE_PHY_BCR] = { 0x6f000 },
3615 [GCC_PCIE_PHY_COM_BCR] = { 0x6f014 },
3616 [GCC_PCIE_PHY_COM_NOCSR_BCR] = { 0x6f00c },
3617 [GCC_DCD_BCR] = { 0x70000 },
3618 [GCC_OBT_ODT_BCR] = { 0x73000 },
3619 [GCC_UFS_BCR] = { 0x75000 },
3620 [GCC_SSC_BCR] = { 0x63000 },
3621 [GCC_VS_BCR] = { 0x7a000 },
3622 [GCC_AGGRE0_NOC_BCR] = { 0x81000 },
3623 [GCC_AGGRE1_NOC_BCR] = { 0x82000 },
3624 [GCC_AGGRE2_NOC_BCR] = { 0x83000 },
3625 [GCC_DCC_BCR] = { 0x84000 },
3626 [GCC_IPA_BCR] = { 0x89000 },
3627 [GCC_QSPI_BCR] = { 0x8b000 },
3628 [GCC_SKL_BCR] = { 0x8c000 },
3629 [GCC_MSMPU_BCR] = { 0x8d000 },
3630 [GCC_MSS_Q6_BCR] = { 0x8e000 },
3631 [GCC_QREFS_VBG_CAL_BCR] = { 0x88020 },
3632 [GCC_MSS_RESTART] = { 0x8f008 },
3633};
3634
3635static const struct regmap_config gcc_msm8996_regmap_config = {
3636 .reg_bits = 32,
3637 .reg_stride = 4,
3638 .val_bits = 32,
3639 .max_register = 0x8f010,
3640 .fast_io = true,
3641};
3642
3643static const struct qcom_cc_desc gcc_msm8996_desc = {
3644 .config = &gcc_msm8996_regmap_config,
3645 .clks = gcc_msm8996_clocks,
3646 .num_clks = ARRAY_SIZE(gcc_msm8996_clocks),
3647 .resets = gcc_msm8996_resets,
3648 .num_resets = ARRAY_SIZE(gcc_msm8996_resets),
3649 .gdscs = gcc_msm8996_gdscs,
3650 .num_gdscs = ARRAY_SIZE(gcc_msm8996_gdscs),
3651 .clk_hws = gcc_msm8996_hws,
3652 .num_clk_hws = ARRAY_SIZE(gcc_msm8996_hws),
3653};
3654
3655static const struct of_device_id gcc_msm8996_match_table[] = {
3656 { .compatible = "qcom,gcc-msm8996" },
3657 { }
3658};
3659MODULE_DEVICE_TABLE(of, gcc_msm8996_match_table);
3660
3661static int gcc_msm8996_probe(struct platform_device *pdev)
3662{
3663 struct regmap *regmap;
3664
3665 regmap = qcom_cc_map(pdev, &gcc_msm8996_desc);
3666 if (IS_ERR(regmap))
3667 return PTR_ERR(regmap);
3668
3669
3670
3671
3672
3673 regmap_update_bits(regmap, 0x52008, BIT(21), BIT(21));
3674
3675 return qcom_cc_really_probe(pdev, &gcc_msm8996_desc, regmap);
3676}
3677
3678static struct platform_driver gcc_msm8996_driver = {
3679 .probe = gcc_msm8996_probe,
3680 .driver = {
3681 .name = "gcc-msm8996",
3682 .of_match_table = gcc_msm8996_match_table,
3683 },
3684};
3685
3686static int __init gcc_msm8996_init(void)
3687{
3688 return platform_driver_register(&gcc_msm8996_driver);
3689}
3690core_initcall(gcc_msm8996_init);
3691
3692static void __exit gcc_msm8996_exit(void)
3693{
3694 platform_driver_unregister(&gcc_msm8996_driver);
3695}
3696module_exit(gcc_msm8996_exit);
3697
3698MODULE_DESCRIPTION("QCOM GCC MSM8996 Driver");
3699MODULE_LICENSE("GPL v2");
3700MODULE_ALIAS("platform:gcc-msm8996");
3701