blob: b618bbfa9a7f9d1e7f242883c7779242d8f3bcf1 [file] [log] [blame]
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (c) 2016, The Linux Foundation. All rights reserved.
4 */
5
6#include <linux/kernel.h>
7#include <linux/bitops.h>
8#include <linux/err.h>
9#include <linux/platform_device.h>
10#include <linux/module.h>
11#include <linux/of.h>
12#include <linux/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-msm8998.h>
18
19#include "common.h"
20#include "clk-regmap.h"
21#include "clk-alpha-pll.h"
22#include "clk-pll.h"
23#include "clk-rcg.h"
24#include "clk-branch.h"
25#include "reset.h"
26#include "gdsc.h"
27
Joonwoo Parkb5f5f522018-03-27 08:25:18 -070028enum {
29 P_AUD_REF_CLK,
30 P_CORE_BI_PLL_TEST_SE,
31 P_GPLL0_OUT_MAIN,
32 P_GPLL4_OUT_MAIN,
33 P_PLL0_EARLY_DIV_CLK_SRC,
34 P_SLEEP_CLK,
35 P_XO,
36};
37
38static const struct parent_map gcc_parent_map_0[] = {
39 { P_XO, 0 },
40 { P_GPLL0_OUT_MAIN, 1 },
41 { P_PLL0_EARLY_DIV_CLK_SRC, 6 },
42 { P_CORE_BI_PLL_TEST_SE, 7 },
43};
44
45static const char * const gcc_parent_names_0[] = {
46 "xo",
47 "gpll0_out_main",
48 "gpll0_out_main",
49 "core_bi_pll_test_se",
50};
51
52static const struct parent_map gcc_parent_map_1[] = {
53 { P_XO, 0 },
54 { P_GPLL0_OUT_MAIN, 1 },
55 { P_CORE_BI_PLL_TEST_SE, 7 },
56};
57
58static const char * const gcc_parent_names_1[] = {
59 "xo",
60 "gpll0_out_main",
61 "core_bi_pll_test_se",
62};
63
64static const struct parent_map gcc_parent_map_2[] = {
65 { P_XO, 0 },
66 { P_GPLL0_OUT_MAIN, 1 },
67 { P_SLEEP_CLK, 5 },
68 { P_PLL0_EARLY_DIV_CLK_SRC, 6 },
69 { P_CORE_BI_PLL_TEST_SE, 7 },
70};
71
72static const char * const gcc_parent_names_2[] = {
73 "xo",
74 "gpll0_out_main",
75 "core_pi_sleep_clk",
76 "gpll0_out_main",
77 "core_bi_pll_test_se",
78};
79
80static const struct parent_map gcc_parent_map_3[] = {
81 { P_XO, 0 },
82 { P_SLEEP_CLK, 5 },
83 { P_CORE_BI_PLL_TEST_SE, 7 },
84};
85
86static const char * const gcc_parent_names_3[] = {
87 "xo",
88 "core_pi_sleep_clk",
89 "core_bi_pll_test_se",
90};
91
92static const struct parent_map gcc_parent_map_4[] = {
93 { P_XO, 0 },
94 { P_GPLL0_OUT_MAIN, 1 },
95 { P_GPLL4_OUT_MAIN, 5 },
96 { P_CORE_BI_PLL_TEST_SE, 7 },
97};
98
99static const char * const gcc_parent_names_4[] = {
100 "xo",
101 "gpll0_out_main",
102 "gpll4_out_main",
103 "core_bi_pll_test_se",
104};
105
106static const struct parent_map gcc_parent_map_5[] = {
107 { P_XO, 0 },
108 { P_GPLL0_OUT_MAIN, 1 },
109 { P_AUD_REF_CLK, 2 },
110 { P_CORE_BI_PLL_TEST_SE, 7 },
111};
112
113static const char * const gcc_parent_names_5[] = {
114 "xo",
115 "gpll0_out_main",
116 "aud_ref_clk",
117 "core_bi_pll_test_se",
118};
119
Stephen Boyd11832322018-12-05 15:48:45 -0800120static struct clk_fixed_factor xo = {
121 .mult = 1,
122 .div = 1,
123 .hw.init = &(struct clk_init_data){
124 .name = "xo",
125 .parent_names = (const char *[]){ "xo_board" },
126 .num_parents = 1,
127 .ops = &clk_fixed_factor_ops,
128 },
129};
130
Joonwoo Parkb5f5f522018-03-27 08:25:18 -0700131static struct pll_vco fabia_vco[] = {
132 { 250000000, 2000000000, 0 },
133 { 125000000, 1000000000, 1 },
134};
135
136static struct clk_alpha_pll gpll0 = {
137 .offset = 0x0,
138 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
139 .vco_table = fabia_vco,
140 .num_vco = ARRAY_SIZE(fabia_vco),
141 .clkr = {
142 .enable_reg = 0x52000,
143 .enable_mask = BIT(0),
144 .hw.init = &(struct clk_init_data){
145 .name = "gpll0",
146 .parent_names = (const char *[]){ "xo" },
147 .num_parents = 1,
148 .ops = &clk_alpha_pll_ops,
149 }
150 },
151};
152
153static struct clk_alpha_pll_postdiv gpll0_out_even = {
154 .offset = 0x0,
155 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
156 .clkr.hw.init = &(struct clk_init_data){
157 .name = "gpll0_out_even",
158 .parent_names = (const char *[]){ "gpll0" },
159 .num_parents = 1,
160 .ops = &clk_alpha_pll_postdiv_ops,
161 },
162};
163
164static struct clk_alpha_pll_postdiv gpll0_out_main = {
165 .offset = 0x0,
166 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
167 .clkr.hw.init = &(struct clk_init_data){
168 .name = "gpll0_out_main",
169 .parent_names = (const char *[]){ "gpll0" },
170 .num_parents = 1,
171 .ops = &clk_alpha_pll_postdiv_ops,
172 },
173};
174
175static struct clk_alpha_pll_postdiv gpll0_out_odd = {
176 .offset = 0x0,
177 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
178 .clkr.hw.init = &(struct clk_init_data){
179 .name = "gpll0_out_odd",
180 .parent_names = (const char *[]){ "gpll0" },
181 .num_parents = 1,
182 .ops = &clk_alpha_pll_postdiv_ops,
183 },
184};
185
186static struct clk_alpha_pll_postdiv gpll0_out_test = {
187 .offset = 0x0,
188 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
189 .clkr.hw.init = &(struct clk_init_data){
190 .name = "gpll0_out_test",
191 .parent_names = (const char *[]){ "gpll0" },
192 .num_parents = 1,
193 .ops = &clk_alpha_pll_postdiv_ops,
194 },
195};
196
197static struct clk_alpha_pll gpll1 = {
198 .offset = 0x1000,
199 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
200 .vco_table = fabia_vco,
201 .num_vco = ARRAY_SIZE(fabia_vco),
202 .clkr = {
203 .enable_reg = 0x52000,
204 .enable_mask = BIT(1),
205 .hw.init = &(struct clk_init_data){
206 .name = "gpll1",
207 .parent_names = (const char *[]){ "xo" },
208 .num_parents = 1,
209 .ops = &clk_alpha_pll_ops,
210 }
211 },
212};
213
214static struct clk_alpha_pll_postdiv gpll1_out_even = {
215 .offset = 0x1000,
216 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
217 .clkr.hw.init = &(struct clk_init_data){
218 .name = "gpll1_out_even",
219 .parent_names = (const char *[]){ "gpll1" },
220 .num_parents = 1,
221 .ops = &clk_alpha_pll_postdiv_ops,
222 },
223};
224
225static struct clk_alpha_pll_postdiv gpll1_out_main = {
226 .offset = 0x1000,
227 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
228 .clkr.hw.init = &(struct clk_init_data){
229 .name = "gpll1_out_main",
230 .parent_names = (const char *[]){ "gpll1" },
231 .num_parents = 1,
232 .ops = &clk_alpha_pll_postdiv_ops,
233 },
234};
235
236static struct clk_alpha_pll_postdiv gpll1_out_odd = {
237 .offset = 0x1000,
238 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
239 .clkr.hw.init = &(struct clk_init_data){
240 .name = "gpll1_out_odd",
241 .parent_names = (const char *[]){ "gpll1" },
242 .num_parents = 1,
243 .ops = &clk_alpha_pll_postdiv_ops,
244 },
245};
246
247static struct clk_alpha_pll_postdiv gpll1_out_test = {
248 .offset = 0x1000,
249 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
250 .clkr.hw.init = &(struct clk_init_data){
251 .name = "gpll1_out_test",
252 .parent_names = (const char *[]){ "gpll1" },
253 .num_parents = 1,
254 .ops = &clk_alpha_pll_postdiv_ops,
255 },
256};
257
258static struct clk_alpha_pll gpll2 = {
259 .offset = 0x2000,
260 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
261 .vco_table = fabia_vco,
262 .num_vco = ARRAY_SIZE(fabia_vco),
263 .clkr = {
264 .enable_reg = 0x52000,
265 .enable_mask = BIT(2),
266 .hw.init = &(struct clk_init_data){
267 .name = "gpll2",
268 .parent_names = (const char *[]){ "xo" },
269 .num_parents = 1,
270 .ops = &clk_alpha_pll_ops,
271 }
272 },
273};
274
275static struct clk_alpha_pll_postdiv gpll2_out_even = {
276 .offset = 0x2000,
277 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
278 .clkr.hw.init = &(struct clk_init_data){
279 .name = "gpll2_out_even",
280 .parent_names = (const char *[]){ "gpll2" },
281 .num_parents = 1,
282 .ops = &clk_alpha_pll_postdiv_ops,
283 },
284};
285
286static struct clk_alpha_pll_postdiv gpll2_out_main = {
287 .offset = 0x2000,
288 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
289 .clkr.hw.init = &(struct clk_init_data){
290 .name = "gpll2_out_main",
291 .parent_names = (const char *[]){ "gpll2" },
292 .num_parents = 1,
293 .ops = &clk_alpha_pll_postdiv_ops,
294 },
295};
296
297static struct clk_alpha_pll_postdiv gpll2_out_odd = {
298 .offset = 0x2000,
299 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
300 .clkr.hw.init = &(struct clk_init_data){
301 .name = "gpll2_out_odd",
302 .parent_names = (const char *[]){ "gpll2" },
303 .num_parents = 1,
304 .ops = &clk_alpha_pll_postdiv_ops,
305 },
306};
307
308static struct clk_alpha_pll_postdiv gpll2_out_test = {
309 .offset = 0x2000,
310 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
311 .clkr.hw.init = &(struct clk_init_data){
312 .name = "gpll2_out_test",
313 .parent_names = (const char *[]){ "gpll2" },
314 .num_parents = 1,
315 .ops = &clk_alpha_pll_postdiv_ops,
316 },
317};
318
319static struct clk_alpha_pll gpll3 = {
320 .offset = 0x3000,
321 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
322 .vco_table = fabia_vco,
323 .num_vco = ARRAY_SIZE(fabia_vco),
324 .clkr = {
325 .enable_reg = 0x52000,
326 .enable_mask = BIT(3),
327 .hw.init = &(struct clk_init_data){
328 .name = "gpll3",
329 .parent_names = (const char *[]){ "xo" },
330 .num_parents = 1,
331 .ops = &clk_alpha_pll_ops,
332 }
333 },
334};
335
336static struct clk_alpha_pll_postdiv gpll3_out_even = {
337 .offset = 0x3000,
338 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
339 .clkr.hw.init = &(struct clk_init_data){
340 .name = "gpll3_out_even",
341 .parent_names = (const char *[]){ "gpll3" },
342 .num_parents = 1,
343 .ops = &clk_alpha_pll_postdiv_ops,
344 },
345};
346
347static struct clk_alpha_pll_postdiv gpll3_out_main = {
348 .offset = 0x3000,
349 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
350 .clkr.hw.init = &(struct clk_init_data){
351 .name = "gpll3_out_main",
352 .parent_names = (const char *[]){ "gpll3" },
353 .num_parents = 1,
354 .ops = &clk_alpha_pll_postdiv_ops,
355 },
356};
357
358static struct clk_alpha_pll_postdiv gpll3_out_odd = {
359 .offset = 0x3000,
360 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
361 .clkr.hw.init = &(struct clk_init_data){
362 .name = "gpll3_out_odd",
363 .parent_names = (const char *[]){ "gpll3" },
364 .num_parents = 1,
365 .ops = &clk_alpha_pll_postdiv_ops,
366 },
367};
368
369static struct clk_alpha_pll_postdiv gpll3_out_test = {
370 .offset = 0x3000,
371 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
372 .clkr.hw.init = &(struct clk_init_data){
373 .name = "gpll3_out_test",
374 .parent_names = (const char *[]){ "gpll3" },
375 .num_parents = 1,
376 .ops = &clk_alpha_pll_postdiv_ops,
377 },
378};
379
380static struct clk_alpha_pll gpll4 = {
381 .offset = 0x77000,
382 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
383 .vco_table = fabia_vco,
384 .num_vco = ARRAY_SIZE(fabia_vco),
385 .clkr = {
386 .enable_reg = 0x52000,
387 .enable_mask = BIT(4),
388 .hw.init = &(struct clk_init_data){
389 .name = "gpll4",
390 .parent_names = (const char *[]){ "xo" },
391 .num_parents = 1,
392 .ops = &clk_alpha_pll_ops,
393 }
394 },
395};
396
397static struct clk_alpha_pll_postdiv gpll4_out_even = {
398 .offset = 0x77000,
399 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
400 .clkr.hw.init = &(struct clk_init_data){
401 .name = "gpll4_out_even",
402 .parent_names = (const char *[]){ "gpll4" },
403 .num_parents = 1,
404 .ops = &clk_alpha_pll_postdiv_ops,
405 },
406};
407
408static struct clk_alpha_pll_postdiv gpll4_out_main = {
409 .offset = 0x77000,
410 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
411 .clkr.hw.init = &(struct clk_init_data){
412 .name = "gpll4_out_main",
413 .parent_names = (const char *[]){ "gpll4" },
414 .num_parents = 1,
415 .ops = &clk_alpha_pll_postdiv_ops,
416 },
417};
418
419static struct clk_alpha_pll_postdiv gpll4_out_odd = {
420 .offset = 0x77000,
421 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
422 .clkr.hw.init = &(struct clk_init_data){
423 .name = "gpll4_out_odd",
424 .parent_names = (const char *[]){ "gpll4" },
425 .num_parents = 1,
426 .ops = &clk_alpha_pll_postdiv_ops,
427 },
428};
429
430static struct clk_alpha_pll_postdiv gpll4_out_test = {
431 .offset = 0x77000,
432 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
433 .clkr.hw.init = &(struct clk_init_data){
434 .name = "gpll4_out_test",
435 .parent_names = (const char *[]){ "gpll4" },
436 .num_parents = 1,
437 .ops = &clk_alpha_pll_postdiv_ops,
438 },
439};
440
441static const struct freq_tbl ftbl_blsp1_qup1_i2c_apps_clk_src[] = {
442 F(19200000, P_XO, 1, 0, 0),
443 F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
444 { }
445};
446
447static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
448 .cmd_rcgr = 0x19020,
449 .mnd_width = 0,
450 .hid_width = 5,
451 .parent_map = gcc_parent_map_1,
452 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
453 .clkr.hw.init = &(struct clk_init_data){
454 .name = "blsp1_qup1_i2c_apps_clk_src",
455 .parent_names = gcc_parent_names_1,
456 .num_parents = 3,
457 .ops = &clk_rcg2_ops,
458 },
459};
460
461static const struct freq_tbl ftbl_blsp1_qup1_spi_apps_clk_src[] = {
462 F(960000, P_XO, 10, 1, 2),
463 F(4800000, P_XO, 4, 0, 0),
464 F(9600000, P_XO, 2, 0, 0),
465 F(15000000, P_GPLL0_OUT_MAIN, 10, 1, 4),
466 F(19200000, P_XO, 1, 0, 0),
467 F(25000000, P_GPLL0_OUT_MAIN, 12, 1, 2),
468 F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
469 { }
470};
471
472static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
473 .cmd_rcgr = 0x1900c,
474 .mnd_width = 8,
475 .hid_width = 5,
476 .parent_map = gcc_parent_map_0,
477 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
478 .clkr.hw.init = &(struct clk_init_data){
479 .name = "blsp1_qup1_spi_apps_clk_src",
480 .parent_names = gcc_parent_names_0,
481 .num_parents = 4,
482 .ops = &clk_rcg2_ops,
483 },
484};
485
486static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
487 .cmd_rcgr = 0x1b020,
488 .mnd_width = 0,
489 .hid_width = 5,
490 .parent_map = gcc_parent_map_1,
491 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
492 .clkr.hw.init = &(struct clk_init_data){
493 .name = "blsp1_qup2_i2c_apps_clk_src",
494 .parent_names = gcc_parent_names_1,
495 .num_parents = 3,
496 .ops = &clk_rcg2_ops,
497 },
498};
499
500static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
501 .cmd_rcgr = 0x1b00c,
502 .mnd_width = 8,
503 .hid_width = 5,
504 .parent_map = gcc_parent_map_0,
505 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
506 .clkr.hw.init = &(struct clk_init_data){
507 .name = "blsp1_qup2_spi_apps_clk_src",
508 .parent_names = gcc_parent_names_0,
509 .num_parents = 4,
510 .ops = &clk_rcg2_ops,
511 },
512};
513
514static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
515 .cmd_rcgr = 0x1d020,
516 .mnd_width = 0,
517 .hid_width = 5,
518 .parent_map = gcc_parent_map_1,
519 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
520 .clkr.hw.init = &(struct clk_init_data){
521 .name = "blsp1_qup3_i2c_apps_clk_src",
522 .parent_names = gcc_parent_names_1,
523 .num_parents = 3,
524 .ops = &clk_rcg2_ops,
525 },
526};
527
528static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
529 .cmd_rcgr = 0x1d00c,
530 .mnd_width = 8,
531 .hid_width = 5,
532 .parent_map = gcc_parent_map_0,
533 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
534 .clkr.hw.init = &(struct clk_init_data){
535 .name = "blsp1_qup3_spi_apps_clk_src",
536 .parent_names = gcc_parent_names_0,
537 .num_parents = 4,
538 .ops = &clk_rcg2_ops,
539 },
540};
541
542static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
543 .cmd_rcgr = 0x1f020,
544 .mnd_width = 0,
545 .hid_width = 5,
546 .parent_map = gcc_parent_map_1,
547 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
548 .clkr.hw.init = &(struct clk_init_data){
549 .name = "blsp1_qup4_i2c_apps_clk_src",
550 .parent_names = gcc_parent_names_1,
551 .num_parents = 3,
552 .ops = &clk_rcg2_ops,
553 },
554};
555
556static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
557 .cmd_rcgr = 0x1f00c,
558 .mnd_width = 8,
559 .hid_width = 5,
560 .parent_map = gcc_parent_map_0,
561 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
562 .clkr.hw.init = &(struct clk_init_data){
563 .name = "blsp1_qup4_spi_apps_clk_src",
564 .parent_names = gcc_parent_names_0,
565 .num_parents = 4,
566 .ops = &clk_rcg2_ops,
567 },
568};
569
570static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
571 .cmd_rcgr = 0x21020,
572 .mnd_width = 0,
573 .hid_width = 5,
574 .parent_map = gcc_parent_map_1,
575 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
576 .clkr.hw.init = &(struct clk_init_data){
577 .name = "blsp1_qup5_i2c_apps_clk_src",
578 .parent_names = gcc_parent_names_1,
579 .num_parents = 3,
580 .ops = &clk_rcg2_ops,
581 },
582};
583
584static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
585 .cmd_rcgr = 0x2100c,
586 .mnd_width = 8,
587 .hid_width = 5,
588 .parent_map = gcc_parent_map_0,
589 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
590 .clkr.hw.init = &(struct clk_init_data){
591 .name = "blsp1_qup5_spi_apps_clk_src",
592 .parent_names = gcc_parent_names_0,
593 .num_parents = 4,
594 .ops = &clk_rcg2_ops,
595 },
596};
597
598static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
599 .cmd_rcgr = 0x23020,
600 .mnd_width = 0,
601 .hid_width = 5,
602 .parent_map = gcc_parent_map_1,
603 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
604 .clkr.hw.init = &(struct clk_init_data){
605 .name = "blsp1_qup6_i2c_apps_clk_src",
606 .parent_names = gcc_parent_names_1,
607 .num_parents = 3,
608 .ops = &clk_rcg2_ops,
609 },
610};
611
612static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
613 .cmd_rcgr = 0x2300c,
614 .mnd_width = 8,
615 .hid_width = 5,
616 .parent_map = gcc_parent_map_0,
617 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
618 .clkr.hw.init = &(struct clk_init_data){
619 .name = "blsp1_qup6_spi_apps_clk_src",
620 .parent_names = gcc_parent_names_0,
621 .num_parents = 4,
622 .ops = &clk_rcg2_ops,
623 },
624};
625
626static const struct freq_tbl ftbl_blsp1_uart1_apps_clk_src[] = {
627 F(3686400, P_GPLL0_OUT_MAIN, 1, 96, 15625),
628 F(7372800, P_GPLL0_OUT_MAIN, 1, 192, 15625),
629 F(14745600, P_GPLL0_OUT_MAIN, 1, 384, 15625),
630 F(16000000, P_GPLL0_OUT_MAIN, 5, 2, 15),
631 F(19200000, P_XO, 1, 0, 0),
632 F(24000000, P_GPLL0_OUT_MAIN, 5, 1, 5),
633 F(32000000, P_GPLL0_OUT_MAIN, 1, 4, 75),
634 F(40000000, P_GPLL0_OUT_MAIN, 15, 0, 0),
635 F(46400000, P_GPLL0_OUT_MAIN, 1, 29, 375),
636 F(48000000, P_GPLL0_OUT_MAIN, 12.5, 0, 0),
637 F(51200000, P_GPLL0_OUT_MAIN, 1, 32, 375),
638 F(56000000, P_GPLL0_OUT_MAIN, 1, 7, 75),
639 F(58982400, P_GPLL0_OUT_MAIN, 1, 1536, 15625),
640 F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
641 F(63157895, P_GPLL0_OUT_MAIN, 9.5, 0, 0),
642 { }
643};
644
645static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
646 .cmd_rcgr = 0x1a00c,
647 .mnd_width = 16,
648 .hid_width = 5,
649 .parent_map = gcc_parent_map_0,
650 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
651 .clkr.hw.init = &(struct clk_init_data){
652 .name = "blsp1_uart1_apps_clk_src",
653 .parent_names = gcc_parent_names_0,
654 .num_parents = 4,
655 .ops = &clk_rcg2_ops,
656 },
657};
658
659static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
660 .cmd_rcgr = 0x1c00c,
661 .mnd_width = 16,
662 .hid_width = 5,
663 .parent_map = gcc_parent_map_0,
664 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
665 .clkr.hw.init = &(struct clk_init_data){
666 .name = "blsp1_uart2_apps_clk_src",
667 .parent_names = gcc_parent_names_0,
668 .num_parents = 4,
669 .ops = &clk_rcg2_ops,
670 },
671};
672
673static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
674 .cmd_rcgr = 0x1e00c,
675 .mnd_width = 16,
676 .hid_width = 5,
677 .parent_map = gcc_parent_map_0,
678 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
679 .clkr.hw.init = &(struct clk_init_data){
680 .name = "blsp1_uart3_apps_clk_src",
681 .parent_names = gcc_parent_names_0,
682 .num_parents = 4,
683 .ops = &clk_rcg2_ops,
684 },
685};
686
687static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
688 .cmd_rcgr = 0x26020,
689 .mnd_width = 0,
690 .hid_width = 5,
691 .parent_map = gcc_parent_map_1,
692 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
693 .clkr.hw.init = &(struct clk_init_data){
694 .name = "blsp2_qup1_i2c_apps_clk_src",
695 .parent_names = gcc_parent_names_1,
696 .num_parents = 3,
697 .ops = &clk_rcg2_ops,
698 },
699};
700
701static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
702 .cmd_rcgr = 0x2600c,
703 .mnd_width = 8,
704 .hid_width = 5,
705 .parent_map = gcc_parent_map_0,
706 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
707 .clkr.hw.init = &(struct clk_init_data){
708 .name = "blsp2_qup1_spi_apps_clk_src",
709 .parent_names = gcc_parent_names_0,
710 .num_parents = 4,
711 .ops = &clk_rcg2_ops,
712 },
713};
714
715static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
716 .cmd_rcgr = 0x28020,
717 .mnd_width = 0,
718 .hid_width = 5,
719 .parent_map = gcc_parent_map_1,
720 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
721 .clkr.hw.init = &(struct clk_init_data){
722 .name = "blsp2_qup2_i2c_apps_clk_src",
723 .parent_names = gcc_parent_names_1,
724 .num_parents = 3,
725 .ops = &clk_rcg2_ops,
726 },
727};
728
729static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
730 .cmd_rcgr = 0x2800c,
731 .mnd_width = 8,
732 .hid_width = 5,
733 .parent_map = gcc_parent_map_0,
734 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
735 .clkr.hw.init = &(struct clk_init_data){
736 .name = "blsp2_qup2_spi_apps_clk_src",
737 .parent_names = gcc_parent_names_0,
738 .num_parents = 4,
739 .ops = &clk_rcg2_ops,
740 },
741};
742
743static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
744 .cmd_rcgr = 0x2a020,
745 .mnd_width = 0,
746 .hid_width = 5,
747 .parent_map = gcc_parent_map_1,
748 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
749 .clkr.hw.init = &(struct clk_init_data){
750 .name = "blsp2_qup3_i2c_apps_clk_src",
751 .parent_names = gcc_parent_names_1,
752 .num_parents = 3,
753 .ops = &clk_rcg2_ops,
754 },
755};
756
757static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
758 .cmd_rcgr = 0x2a00c,
759 .mnd_width = 8,
760 .hid_width = 5,
761 .parent_map = gcc_parent_map_0,
762 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
763 .clkr.hw.init = &(struct clk_init_data){
764 .name = "blsp2_qup3_spi_apps_clk_src",
765 .parent_names = gcc_parent_names_0,
766 .num_parents = 4,
767 .ops = &clk_rcg2_ops,
768 },
769};
770
771static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
772 .cmd_rcgr = 0x2c020,
773 .mnd_width = 0,
774 .hid_width = 5,
775 .parent_map = gcc_parent_map_1,
776 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
777 .clkr.hw.init = &(struct clk_init_data){
778 .name = "blsp2_qup4_i2c_apps_clk_src",
779 .parent_names = gcc_parent_names_1,
780 .num_parents = 3,
781 .ops = &clk_rcg2_ops,
782 },
783};
784
785static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
786 .cmd_rcgr = 0x2c00c,
787 .mnd_width = 8,
788 .hid_width = 5,
789 .parent_map = gcc_parent_map_0,
790 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
791 .clkr.hw.init = &(struct clk_init_data){
792 .name = "blsp2_qup4_spi_apps_clk_src",
793 .parent_names = gcc_parent_names_0,
794 .num_parents = 4,
795 .ops = &clk_rcg2_ops,
796 },
797};
798
799static struct clk_rcg2 blsp2_qup5_i2c_apps_clk_src = {
800 .cmd_rcgr = 0x2e020,
801 .mnd_width = 0,
802 .hid_width = 5,
803 .parent_map = gcc_parent_map_1,
804 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
805 .clkr.hw.init = &(struct clk_init_data){
806 .name = "blsp2_qup5_i2c_apps_clk_src",
807 .parent_names = gcc_parent_names_1,
808 .num_parents = 3,
809 .ops = &clk_rcg2_ops,
810 },
811};
812
813static struct clk_rcg2 blsp2_qup5_spi_apps_clk_src = {
814 .cmd_rcgr = 0x2e00c,
815 .mnd_width = 8,
816 .hid_width = 5,
817 .parent_map = gcc_parent_map_0,
818 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
819 .clkr.hw.init = &(struct clk_init_data){
820 .name = "blsp2_qup5_spi_apps_clk_src",
821 .parent_names = gcc_parent_names_0,
822 .num_parents = 4,
823 .ops = &clk_rcg2_ops,
824 },
825};
826
827static struct clk_rcg2 blsp2_qup6_i2c_apps_clk_src = {
828 .cmd_rcgr = 0x30020,
829 .mnd_width = 0,
830 .hid_width = 5,
831 .parent_map = gcc_parent_map_1,
832 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
833 .clkr.hw.init = &(struct clk_init_data){
834 .name = "blsp2_qup6_i2c_apps_clk_src",
835 .parent_names = gcc_parent_names_1,
836 .num_parents = 3,
837 .ops = &clk_rcg2_ops,
838 },
839};
840
841static struct clk_rcg2 blsp2_qup6_spi_apps_clk_src = {
842 .cmd_rcgr = 0x3000c,
843 .mnd_width = 8,
844 .hid_width = 5,
845 .parent_map = gcc_parent_map_0,
846 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
847 .clkr.hw.init = &(struct clk_init_data){
848 .name = "blsp2_qup6_spi_apps_clk_src",
849 .parent_names = gcc_parent_names_0,
850 .num_parents = 4,
851 .ops = &clk_rcg2_ops,
852 },
853};
854
855static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
856 .cmd_rcgr = 0x2700c,
857 .mnd_width = 16,
858 .hid_width = 5,
859 .parent_map = gcc_parent_map_0,
860 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
861 .clkr.hw.init = &(struct clk_init_data){
862 .name = "blsp2_uart1_apps_clk_src",
863 .parent_names = gcc_parent_names_0,
864 .num_parents = 4,
865 .ops = &clk_rcg2_ops,
866 },
867};
868
869static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
870 .cmd_rcgr = 0x2900c,
871 .mnd_width = 16,
872 .hid_width = 5,
873 .parent_map = gcc_parent_map_0,
874 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
875 .clkr.hw.init = &(struct clk_init_data){
876 .name = "blsp2_uart2_apps_clk_src",
877 .parent_names = gcc_parent_names_0,
878 .num_parents = 4,
879 .ops = &clk_rcg2_ops,
880 },
881};
882
883static struct clk_rcg2 blsp2_uart3_apps_clk_src = {
884 .cmd_rcgr = 0x2b00c,
885 .mnd_width = 16,
886 .hid_width = 5,
887 .parent_map = gcc_parent_map_0,
888 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
889 .clkr.hw.init = &(struct clk_init_data){
890 .name = "blsp2_uart3_apps_clk_src",
891 .parent_names = gcc_parent_names_0,
892 .num_parents = 4,
893 .ops = &clk_rcg2_ops,
894 },
895};
896
897static const struct freq_tbl ftbl_gp1_clk_src[] = {
898 F(19200000, P_XO, 1, 0, 0),
899 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
900 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
901 { }
902};
903
904static struct clk_rcg2 gp1_clk_src = {
905 .cmd_rcgr = 0x64004,
906 .mnd_width = 8,
907 .hid_width = 5,
908 .parent_map = gcc_parent_map_2,
909 .freq_tbl = ftbl_gp1_clk_src,
910 .clkr.hw.init = &(struct clk_init_data){
911 .name = "gp1_clk_src",
912 .parent_names = gcc_parent_names_2,
913 .num_parents = 5,
914 .ops = &clk_rcg2_ops,
915 },
916};
917
918static struct clk_rcg2 gp2_clk_src = {
919 .cmd_rcgr = 0x65004,
920 .mnd_width = 8,
921 .hid_width = 5,
922 .parent_map = gcc_parent_map_2,
923 .freq_tbl = ftbl_gp1_clk_src,
924 .clkr.hw.init = &(struct clk_init_data){
925 .name = "gp2_clk_src",
926 .parent_names = gcc_parent_names_2,
927 .num_parents = 5,
928 .ops = &clk_rcg2_ops,
929 },
930};
931
932static struct clk_rcg2 gp3_clk_src = {
933 .cmd_rcgr = 0x66004,
934 .mnd_width = 8,
935 .hid_width = 5,
936 .parent_map = gcc_parent_map_2,
937 .freq_tbl = ftbl_gp1_clk_src,
938 .clkr.hw.init = &(struct clk_init_data){
939 .name = "gp3_clk_src",
940 .parent_names = gcc_parent_names_2,
941 .num_parents = 5,
942 .ops = &clk_rcg2_ops,
943 },
944};
945
946static const struct freq_tbl ftbl_hmss_ahb_clk_src[] = {
947 F(19200000, P_XO, 1, 0, 0),
948 F(37500000, P_GPLL0_OUT_MAIN, 16, 0, 0),
949 F(75000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
950 { }
951};
952
953static struct clk_rcg2 hmss_ahb_clk_src = {
954 .cmd_rcgr = 0x48014,
955 .mnd_width = 0,
956 .hid_width = 5,
957 .parent_map = gcc_parent_map_1,
958 .freq_tbl = ftbl_hmss_ahb_clk_src,
959 .clkr.hw.init = &(struct clk_init_data){
960 .name = "hmss_ahb_clk_src",
961 .parent_names = gcc_parent_names_1,
962 .num_parents = 3,
963 .ops = &clk_rcg2_ops,
964 },
965};
966
967static const struct freq_tbl ftbl_hmss_rbcpr_clk_src[] = {
968 F(19200000, P_XO, 1, 0, 0),
969 { }
970};
971
972static struct clk_rcg2 hmss_rbcpr_clk_src = {
973 .cmd_rcgr = 0x48044,
974 .mnd_width = 0,
975 .hid_width = 5,
976 .parent_map = gcc_parent_map_1,
977 .freq_tbl = ftbl_hmss_rbcpr_clk_src,
978 .clkr.hw.init = &(struct clk_init_data){
979 .name = "hmss_rbcpr_clk_src",
980 .parent_names = gcc_parent_names_1,
981 .num_parents = 3,
982 .ops = &clk_rcg2_ops,
983 },
984};
985
986static const struct freq_tbl ftbl_pcie_aux_clk_src[] = {
987 F(1010526, P_XO, 1, 1, 19),
988 { }
989};
990
991static struct clk_rcg2 pcie_aux_clk_src = {
992 .cmd_rcgr = 0x6c000,
993 .mnd_width = 16,
994 .hid_width = 5,
995 .parent_map = gcc_parent_map_3,
996 .freq_tbl = ftbl_pcie_aux_clk_src,
997 .clkr.hw.init = &(struct clk_init_data){
998 .name = "pcie_aux_clk_src",
999 .parent_names = gcc_parent_names_3,
1000 .num_parents = 3,
1001 .ops = &clk_rcg2_ops,
1002 },
1003};
1004
1005static const struct freq_tbl ftbl_pdm2_clk_src[] = {
1006 F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
1007 { }
1008};
1009
1010static struct clk_rcg2 pdm2_clk_src = {
1011 .cmd_rcgr = 0x33010,
1012 .mnd_width = 0,
1013 .hid_width = 5,
1014 .parent_map = gcc_parent_map_1,
1015 .freq_tbl = ftbl_pdm2_clk_src,
1016 .clkr.hw.init = &(struct clk_init_data){
1017 .name = "pdm2_clk_src",
1018 .parent_names = gcc_parent_names_1,
1019 .num_parents = 3,
1020 .ops = &clk_rcg2_ops,
1021 },
1022};
1023
1024static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = {
1025 F(144000, P_XO, 16, 3, 25),
1026 F(400000, P_XO, 12, 1, 4),
1027 F(20000000, P_GPLL0_OUT_MAIN, 15, 1, 2),
1028 F(25000000, P_GPLL0_OUT_MAIN, 12, 1, 2),
1029 F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
1030 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
1031 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
1032 { }
1033};
1034
1035static struct clk_rcg2 sdcc2_apps_clk_src = {
1036 .cmd_rcgr = 0x14010,
1037 .mnd_width = 8,
1038 .hid_width = 5,
1039 .parent_map = gcc_parent_map_4,
1040 .freq_tbl = ftbl_sdcc2_apps_clk_src,
1041 .clkr.hw.init = &(struct clk_init_data){
1042 .name = "sdcc2_apps_clk_src",
1043 .parent_names = gcc_parent_names_4,
1044 .num_parents = 4,
1045 .ops = &clk_rcg2_ops,
1046 },
1047};
1048
1049static const struct freq_tbl ftbl_sdcc4_apps_clk_src[] = {
1050 F(144000, P_XO, 16, 3, 25),
1051 F(400000, P_XO, 12, 1, 4),
1052 F(20000000, P_GPLL0_OUT_MAIN, 15, 1, 2),
1053 F(25000000, P_GPLL0_OUT_MAIN, 12, 1, 2),
1054 F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
1055 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
1056 { }
1057};
1058
1059static struct clk_rcg2 sdcc4_apps_clk_src = {
1060 .cmd_rcgr = 0x16010,
1061 .mnd_width = 8,
1062 .hid_width = 5,
1063 .parent_map = gcc_parent_map_1,
1064 .freq_tbl = ftbl_sdcc4_apps_clk_src,
1065 .clkr.hw.init = &(struct clk_init_data){
1066 .name = "sdcc4_apps_clk_src",
1067 .parent_names = gcc_parent_names_1,
1068 .num_parents = 3,
1069 .ops = &clk_rcg2_ops,
1070 },
1071};
1072
1073static const struct freq_tbl ftbl_tsif_ref_clk_src[] = {
1074 F(105495, P_XO, 1, 1, 182),
1075 { }
1076};
1077
1078static struct clk_rcg2 tsif_ref_clk_src = {
1079 .cmd_rcgr = 0x36010,
1080 .mnd_width = 8,
1081 .hid_width = 5,
1082 .parent_map = gcc_parent_map_5,
1083 .freq_tbl = ftbl_tsif_ref_clk_src,
1084 .clkr.hw.init = &(struct clk_init_data){
1085 .name = "tsif_ref_clk_src",
1086 .parent_names = gcc_parent_names_5,
1087 .num_parents = 4,
1088 .ops = &clk_rcg2_ops,
1089 },
1090};
1091
1092static const struct freq_tbl ftbl_ufs_axi_clk_src[] = {
1093 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
1094 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
1095 F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
1096 { }
1097};
1098
1099static struct clk_rcg2 ufs_axi_clk_src = {
1100 .cmd_rcgr = 0x75018,
1101 .mnd_width = 8,
1102 .hid_width = 5,
1103 .parent_map = gcc_parent_map_0,
1104 .freq_tbl = ftbl_ufs_axi_clk_src,
1105 .clkr.hw.init = &(struct clk_init_data){
1106 .name = "ufs_axi_clk_src",
1107 .parent_names = gcc_parent_names_0,
1108 .num_parents = 4,
1109 .ops = &clk_rcg2_ops,
1110 },
1111};
1112
1113static const struct freq_tbl ftbl_usb30_master_clk_src[] = {
1114 F(19200000, P_XO, 1, 0, 0),
1115 F(120000000, P_GPLL0_OUT_MAIN, 5, 0, 0),
1116 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
1117 { }
1118};
1119
1120static struct clk_rcg2 usb30_master_clk_src = {
1121 .cmd_rcgr = 0xf014,
1122 .mnd_width = 8,
1123 .hid_width = 5,
1124 .parent_map = gcc_parent_map_0,
1125 .freq_tbl = ftbl_usb30_master_clk_src,
1126 .clkr.hw.init = &(struct clk_init_data){
1127 .name = "usb30_master_clk_src",
1128 .parent_names = gcc_parent_names_0,
1129 .num_parents = 4,
1130 .ops = &clk_rcg2_ops,
1131 },
1132};
1133
1134static struct clk_rcg2 usb30_mock_utmi_clk_src = {
1135 .cmd_rcgr = 0xf028,
1136 .mnd_width = 0,
1137 .hid_width = 5,
1138 .parent_map = gcc_parent_map_0,
1139 .freq_tbl = ftbl_hmss_rbcpr_clk_src,
1140 .clkr.hw.init = &(struct clk_init_data){
1141 .name = "usb30_mock_utmi_clk_src",
1142 .parent_names = gcc_parent_names_0,
1143 .num_parents = 4,
1144 .ops = &clk_rcg2_ops,
1145 },
1146};
1147
1148static const struct freq_tbl ftbl_usb3_phy_aux_clk_src[] = {
1149 F(1200000, P_XO, 16, 0, 0),
1150 { }
1151};
1152
1153static struct clk_rcg2 usb3_phy_aux_clk_src = {
1154 .cmd_rcgr = 0x5000c,
1155 .mnd_width = 0,
1156 .hid_width = 5,
1157 .parent_map = gcc_parent_map_3,
1158 .freq_tbl = ftbl_usb3_phy_aux_clk_src,
1159 .clkr.hw.init = &(struct clk_init_data){
1160 .name = "usb3_phy_aux_clk_src",
1161 .parent_names = gcc_parent_names_3,
1162 .num_parents = 3,
1163 .ops = &clk_rcg2_ops,
1164 },
1165};
1166
1167static struct clk_branch gcc_aggre1_noc_xo_clk = {
1168 .halt_reg = 0x8202c,
1169 .halt_check = BRANCH_HALT,
1170 .clkr = {
1171 .enable_reg = 0x8202c,
1172 .enable_mask = BIT(0),
1173 .hw.init = &(struct clk_init_data){
1174 .name = "gcc_aggre1_noc_xo_clk",
1175 .ops = &clk_branch2_ops,
1176 },
1177 },
1178};
1179
1180static struct clk_branch gcc_aggre1_ufs_axi_clk = {
1181 .halt_reg = 0x82028,
1182 .halt_check = BRANCH_HALT,
1183 .clkr = {
1184 .enable_reg = 0x82028,
1185 .enable_mask = BIT(0),
1186 .hw.init = &(struct clk_init_data){
1187 .name = "gcc_aggre1_ufs_axi_clk",
1188 .parent_names = (const char *[]){
1189 "ufs_axi_clk_src",
1190 },
1191 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001192 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001193 .ops = &clk_branch2_ops,
1194 },
1195 },
1196};
1197
1198static struct clk_branch gcc_aggre1_usb3_axi_clk = {
1199 .halt_reg = 0x82024,
1200 .halt_check = BRANCH_HALT,
1201 .clkr = {
1202 .enable_reg = 0x82024,
1203 .enable_mask = BIT(0),
1204 .hw.init = &(struct clk_init_data){
1205 .name = "gcc_aggre1_usb3_axi_clk",
1206 .parent_names = (const char *[]){
1207 "usb30_master_clk_src",
1208 },
1209 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001210 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001211 .ops = &clk_branch2_ops,
1212 },
1213 },
1214};
1215
1216static struct clk_branch gcc_apss_qdss_tsctr_div2_clk = {
1217 .halt_reg = 0x48090,
1218 .halt_check = BRANCH_HALT,
1219 .clkr = {
1220 .enable_reg = 0x48090,
1221 .enable_mask = BIT(0),
1222 .hw.init = &(struct clk_init_data){
1223 .name = "gcc_apss_qdss_tsctr_div2_clk",
1224 .ops = &clk_branch2_ops,
1225 },
1226 },
1227};
1228
1229static struct clk_branch gcc_apss_qdss_tsctr_div8_clk = {
1230 .halt_reg = 0x48094,
1231 .halt_check = BRANCH_HALT,
1232 .clkr = {
1233 .enable_reg = 0x48094,
1234 .enable_mask = BIT(0),
1235 .hw.init = &(struct clk_init_data){
1236 .name = "gcc_apss_qdss_tsctr_div8_clk",
1237 .ops = &clk_branch2_ops,
1238 },
1239 },
1240};
1241
1242static struct clk_branch gcc_bimc_hmss_axi_clk = {
1243 .halt_reg = 0x48004,
1244 .halt_check = BRANCH_HALT_VOTED,
1245 .clkr = {
1246 .enable_reg = 0x52004,
1247 .enable_mask = BIT(22),
1248 .hw.init = &(struct clk_init_data){
1249 .name = "gcc_bimc_hmss_axi_clk",
1250 .ops = &clk_branch2_ops,
1251 },
1252 },
1253};
1254
1255static struct clk_branch gcc_bimc_mss_q6_axi_clk = {
1256 .halt_reg = 0x4401c,
1257 .halt_check = BRANCH_HALT,
1258 .clkr = {
1259 .enable_reg = 0x4401c,
1260 .enable_mask = BIT(0),
1261 .hw.init = &(struct clk_init_data){
1262 .name = "gcc_bimc_mss_q6_axi_clk",
1263 .ops = &clk_branch2_ops,
1264 },
1265 },
1266};
1267
1268static struct clk_branch gcc_blsp1_ahb_clk = {
1269 .halt_reg = 0x17004,
1270 .halt_check = BRANCH_HALT_VOTED,
1271 .clkr = {
1272 .enable_reg = 0x52004,
1273 .enable_mask = BIT(17),
1274 .hw.init = &(struct clk_init_data){
1275 .name = "gcc_blsp1_ahb_clk",
1276 .ops = &clk_branch2_ops,
1277 },
1278 },
1279};
1280
1281static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1282 .halt_reg = 0x19008,
1283 .halt_check = BRANCH_HALT,
1284 .clkr = {
1285 .enable_reg = 0x19008,
1286 .enable_mask = BIT(0),
1287 .hw.init = &(struct clk_init_data){
1288 .name = "gcc_blsp1_qup1_i2c_apps_clk",
1289 .parent_names = (const char *[]){
1290 "blsp1_qup1_i2c_apps_clk_src",
1291 },
1292 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001293 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001294 .ops = &clk_branch2_ops,
1295 },
1296 },
1297};
1298
1299static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1300 .halt_reg = 0x19004,
1301 .halt_check = BRANCH_HALT,
1302 .clkr = {
1303 .enable_reg = 0x19004,
1304 .enable_mask = BIT(0),
1305 .hw.init = &(struct clk_init_data){
1306 .name = "gcc_blsp1_qup1_spi_apps_clk",
1307 .parent_names = (const char *[]){
1308 "blsp1_qup1_spi_apps_clk_src",
1309 },
1310 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001311 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001312 .ops = &clk_branch2_ops,
1313 },
1314 },
1315};
1316
1317static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1318 .halt_reg = 0x1b008,
1319 .halt_check = BRANCH_HALT,
1320 .clkr = {
1321 .enable_reg = 0x1b008,
1322 .enable_mask = BIT(0),
1323 .hw.init = &(struct clk_init_data){
1324 .name = "gcc_blsp1_qup2_i2c_apps_clk",
1325 .parent_names = (const char *[]){
1326 "blsp1_qup2_i2c_apps_clk_src",
1327 },
1328 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001329 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001330 .ops = &clk_branch2_ops,
1331 },
1332 },
1333};
1334
1335static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1336 .halt_reg = 0x1b004,
1337 .halt_check = BRANCH_HALT,
1338 .clkr = {
1339 .enable_reg = 0x1b004,
1340 .enable_mask = BIT(0),
1341 .hw.init = &(struct clk_init_data){
1342 .name = "gcc_blsp1_qup2_spi_apps_clk",
1343 .parent_names = (const char *[]){
1344 "blsp1_qup2_spi_apps_clk_src",
1345 },
1346 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001347 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001348 .ops = &clk_branch2_ops,
1349 },
1350 },
1351};
1352
1353static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1354 .halt_reg = 0x1d008,
1355 .halt_check = BRANCH_HALT,
1356 .clkr = {
1357 .enable_reg = 0x1d008,
1358 .enable_mask = BIT(0),
1359 .hw.init = &(struct clk_init_data){
1360 .name = "gcc_blsp1_qup3_i2c_apps_clk",
1361 .parent_names = (const char *[]){
1362 "blsp1_qup3_i2c_apps_clk_src",
1363 },
1364 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001365 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001366 .ops = &clk_branch2_ops,
1367 },
1368 },
1369};
1370
1371static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1372 .halt_reg = 0x1d004,
1373 .halt_check = BRANCH_HALT,
1374 .clkr = {
1375 .enable_reg = 0x1d004,
1376 .enable_mask = BIT(0),
1377 .hw.init = &(struct clk_init_data){
1378 .name = "gcc_blsp1_qup3_spi_apps_clk",
1379 .parent_names = (const char *[]){
1380 "blsp1_qup3_spi_apps_clk_src",
1381 },
1382 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001383 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001384 .ops = &clk_branch2_ops,
1385 },
1386 },
1387};
1388
1389static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1390 .halt_reg = 0x1f008,
1391 .halt_check = BRANCH_HALT,
1392 .clkr = {
1393 .enable_reg = 0x1f008,
1394 .enable_mask = BIT(0),
1395 .hw.init = &(struct clk_init_data){
1396 .name = "gcc_blsp1_qup4_i2c_apps_clk",
1397 .parent_names = (const char *[]){
1398 "blsp1_qup4_i2c_apps_clk_src",
1399 },
1400 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001401 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001402 .ops = &clk_branch2_ops,
1403 },
1404 },
1405};
1406
1407static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1408 .halt_reg = 0x1f004,
1409 .halt_check = BRANCH_HALT,
1410 .clkr = {
1411 .enable_reg = 0x1f004,
1412 .enable_mask = BIT(0),
1413 .hw.init = &(struct clk_init_data){
1414 .name = "gcc_blsp1_qup4_spi_apps_clk",
1415 .parent_names = (const char *[]){
1416 "blsp1_qup4_spi_apps_clk_src",
1417 },
1418 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001419 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001420 .ops = &clk_branch2_ops,
1421 },
1422 },
1423};
1424
1425static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
1426 .halt_reg = 0x21008,
1427 .halt_check = BRANCH_HALT,
1428 .clkr = {
1429 .enable_reg = 0x21008,
1430 .enable_mask = BIT(0),
1431 .hw.init = &(struct clk_init_data){
1432 .name = "gcc_blsp1_qup5_i2c_apps_clk",
1433 .parent_names = (const char *[]){
1434 "blsp1_qup5_i2c_apps_clk_src",
1435 },
1436 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001437 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001438 .ops = &clk_branch2_ops,
1439 },
1440 },
1441};
1442
1443static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
1444 .halt_reg = 0x21004,
1445 .halt_check = BRANCH_HALT,
1446 .clkr = {
1447 .enable_reg = 0x21004,
1448 .enable_mask = BIT(0),
1449 .hw.init = &(struct clk_init_data){
1450 .name = "gcc_blsp1_qup5_spi_apps_clk",
1451 .parent_names = (const char *[]){
1452 "blsp1_qup5_spi_apps_clk_src",
1453 },
1454 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001455 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001456 .ops = &clk_branch2_ops,
1457 },
1458 },
1459};
1460
1461static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
1462 .halt_reg = 0x23008,
1463 .halt_check = BRANCH_HALT,
1464 .clkr = {
1465 .enable_reg = 0x23008,
1466 .enable_mask = BIT(0),
1467 .hw.init = &(struct clk_init_data){
1468 .name = "gcc_blsp1_qup6_i2c_apps_clk",
1469 .parent_names = (const char *[]){
1470 "blsp1_qup6_i2c_apps_clk_src",
1471 },
1472 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001473 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001474 .ops = &clk_branch2_ops,
1475 },
1476 },
1477};
1478
1479static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
1480 .halt_reg = 0x23004,
1481 .halt_check = BRANCH_HALT,
1482 .clkr = {
1483 .enable_reg = 0x23004,
1484 .enable_mask = BIT(0),
1485 .hw.init = &(struct clk_init_data){
1486 .name = "gcc_blsp1_qup6_spi_apps_clk",
1487 .parent_names = (const char *[]){
1488 "blsp1_qup6_spi_apps_clk_src",
1489 },
1490 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001491 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001492 .ops = &clk_branch2_ops,
1493 },
1494 },
1495};
1496
1497static struct clk_branch gcc_blsp1_sleep_clk = {
1498 .halt_reg = 0x17008,
1499 .halt_check = BRANCH_HALT_VOTED,
1500 .clkr = {
1501 .enable_reg = 0x52004,
1502 .enable_mask = BIT(16),
1503 .hw.init = &(struct clk_init_data){
1504 .name = "gcc_blsp1_sleep_clk",
1505 .ops = &clk_branch2_ops,
1506 },
1507 },
1508};
1509
1510static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1511 .halt_reg = 0x1a004,
1512 .halt_check = BRANCH_HALT,
1513 .clkr = {
1514 .enable_reg = 0x1a004,
1515 .enable_mask = BIT(0),
1516 .hw.init = &(struct clk_init_data){
1517 .name = "gcc_blsp1_uart1_apps_clk",
1518 .parent_names = (const char *[]){
1519 "blsp1_uart1_apps_clk_src",
1520 },
1521 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001522 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001523 .ops = &clk_branch2_ops,
1524 },
1525 },
1526};
1527
1528static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1529 .halt_reg = 0x1c004,
1530 .halt_check = BRANCH_HALT,
1531 .clkr = {
1532 .enable_reg = 0x1c004,
1533 .enable_mask = BIT(0),
1534 .hw.init = &(struct clk_init_data){
1535 .name = "gcc_blsp1_uart2_apps_clk",
1536 .parent_names = (const char *[]){
1537 "blsp1_uart2_apps_clk_src",
1538 },
1539 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001540 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001541 .ops = &clk_branch2_ops,
1542 },
1543 },
1544};
1545
1546static struct clk_branch gcc_blsp1_uart3_apps_clk = {
1547 .halt_reg = 0x1e004,
1548 .halt_check = BRANCH_HALT,
1549 .clkr = {
1550 .enable_reg = 0x1e004,
1551 .enable_mask = BIT(0),
1552 .hw.init = &(struct clk_init_data){
1553 .name = "gcc_blsp1_uart3_apps_clk",
1554 .parent_names = (const char *[]){
1555 "blsp1_uart3_apps_clk_src",
1556 },
1557 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001558 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001559 .ops = &clk_branch2_ops,
1560 },
1561 },
1562};
1563
1564static struct clk_branch gcc_blsp2_ahb_clk = {
1565 .halt_reg = 0x25004,
1566 .halt_check = BRANCH_HALT_VOTED,
1567 .clkr = {
1568 .enable_reg = 0x52004,
1569 .enable_mask = BIT(15),
1570 .hw.init = &(struct clk_init_data){
1571 .name = "gcc_blsp2_ahb_clk",
1572 .ops = &clk_branch2_ops,
1573 },
1574 },
1575};
1576
1577static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
1578 .halt_reg = 0x26008,
1579 .halt_check = BRANCH_HALT,
1580 .clkr = {
1581 .enable_reg = 0x26008,
1582 .enable_mask = BIT(0),
1583 .hw.init = &(struct clk_init_data){
1584 .name = "gcc_blsp2_qup1_i2c_apps_clk",
1585 .parent_names = (const char *[]){
1586 "blsp2_qup1_i2c_apps_clk_src",
1587 },
1588 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001589 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001590 .ops = &clk_branch2_ops,
1591 },
1592 },
1593};
1594
1595static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
1596 .halt_reg = 0x26004,
1597 .halt_check = BRANCH_HALT,
1598 .clkr = {
1599 .enable_reg = 0x26004,
1600 .enable_mask = BIT(0),
1601 .hw.init = &(struct clk_init_data){
1602 .name = "gcc_blsp2_qup1_spi_apps_clk",
1603 .parent_names = (const char *[]){
1604 "blsp2_qup1_spi_apps_clk_src",
1605 },
1606 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001607 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001608 .ops = &clk_branch2_ops,
1609 },
1610 },
1611};
1612
1613static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
1614 .halt_reg = 0x28008,
1615 .halt_check = BRANCH_HALT,
1616 .clkr = {
1617 .enable_reg = 0x28008,
1618 .enable_mask = BIT(0),
1619 .hw.init = &(struct clk_init_data){
1620 .name = "gcc_blsp2_qup2_i2c_apps_clk",
1621 .parent_names = (const char *[]){
1622 "blsp2_qup2_i2c_apps_clk_src",
1623 },
1624 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001625 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001626 .ops = &clk_branch2_ops,
1627 },
1628 },
1629};
1630
1631static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
1632 .halt_reg = 0x28004,
1633 .halt_check = BRANCH_HALT,
1634 .clkr = {
1635 .enable_reg = 0x28004,
1636 .enable_mask = BIT(0),
1637 .hw.init = &(struct clk_init_data){
1638 .name = "gcc_blsp2_qup2_spi_apps_clk",
1639 .parent_names = (const char *[]){
1640 "blsp2_qup2_spi_apps_clk_src",
1641 },
1642 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001643 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001644 .ops = &clk_branch2_ops,
1645 },
1646 },
1647};
1648
1649static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
1650 .halt_reg = 0x2a008,
1651 .halt_check = BRANCH_HALT,
1652 .clkr = {
1653 .enable_reg = 0x2a008,
1654 .enable_mask = BIT(0),
1655 .hw.init = &(struct clk_init_data){
1656 .name = "gcc_blsp2_qup3_i2c_apps_clk",
1657 .parent_names = (const char *[]){
1658 "blsp2_qup3_i2c_apps_clk_src",
1659 },
1660 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001661 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001662 .ops = &clk_branch2_ops,
1663 },
1664 },
1665};
1666
1667static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
1668 .halt_reg = 0x2a004,
1669 .halt_check = BRANCH_HALT,
1670 .clkr = {
1671 .enable_reg = 0x2a004,
1672 .enable_mask = BIT(0),
1673 .hw.init = &(struct clk_init_data){
1674 .name = "gcc_blsp2_qup3_spi_apps_clk",
1675 .parent_names = (const char *[]){
1676 "blsp2_qup3_spi_apps_clk_src",
1677 },
1678 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001679 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001680 .ops = &clk_branch2_ops,
1681 },
1682 },
1683};
1684
1685static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
1686 .halt_reg = 0x2c008,
1687 .halt_check = BRANCH_HALT,
1688 .clkr = {
1689 .enable_reg = 0x2c008,
1690 .enable_mask = BIT(0),
1691 .hw.init = &(struct clk_init_data){
1692 .name = "gcc_blsp2_qup4_i2c_apps_clk",
1693 .parent_names = (const char *[]){
1694 "blsp2_qup4_i2c_apps_clk_src",
1695 },
1696 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001697 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001698 .ops = &clk_branch2_ops,
1699 },
1700 },
1701};
1702
1703static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
1704 .halt_reg = 0x2c004,
1705 .halt_check = BRANCH_HALT,
1706 .clkr = {
1707 .enable_reg = 0x2c004,
1708 .enable_mask = BIT(0),
1709 .hw.init = &(struct clk_init_data){
1710 .name = "gcc_blsp2_qup4_spi_apps_clk",
1711 .parent_names = (const char *[]){
1712 "blsp2_qup4_spi_apps_clk_src",
1713 },
1714 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001715 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001716 .ops = &clk_branch2_ops,
1717 },
1718 },
1719};
1720
1721static struct clk_branch gcc_blsp2_qup5_i2c_apps_clk = {
1722 .halt_reg = 0x2e008,
1723 .halt_check = BRANCH_HALT,
1724 .clkr = {
1725 .enable_reg = 0x2e008,
1726 .enable_mask = BIT(0),
1727 .hw.init = &(struct clk_init_data){
1728 .name = "gcc_blsp2_qup5_i2c_apps_clk",
1729 .parent_names = (const char *[]){
1730 "blsp2_qup5_i2c_apps_clk_src",
1731 },
1732 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001733 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001734 .ops = &clk_branch2_ops,
1735 },
1736 },
1737};
1738
1739static struct clk_branch gcc_blsp2_qup5_spi_apps_clk = {
1740 .halt_reg = 0x2e004,
1741 .halt_check = BRANCH_HALT,
1742 .clkr = {
1743 .enable_reg = 0x2e004,
1744 .enable_mask = BIT(0),
1745 .hw.init = &(struct clk_init_data){
1746 .name = "gcc_blsp2_qup5_spi_apps_clk",
1747 .parent_names = (const char *[]){
1748 "blsp2_qup5_spi_apps_clk_src",
1749 },
1750 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001751 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001752 .ops = &clk_branch2_ops,
1753 },
1754 },
1755};
1756
1757static struct clk_branch gcc_blsp2_qup6_i2c_apps_clk = {
1758 .halt_reg = 0x30008,
1759 .halt_check = BRANCH_HALT,
1760 .clkr = {
1761 .enable_reg = 0x30008,
1762 .enable_mask = BIT(0),
1763 .hw.init = &(struct clk_init_data){
1764 .name = "gcc_blsp2_qup6_i2c_apps_clk",
1765 .parent_names = (const char *[]){
1766 "blsp2_qup6_i2c_apps_clk_src",
1767 },
1768 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001769 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001770 .ops = &clk_branch2_ops,
1771 },
1772 },
1773};
1774
1775static struct clk_branch gcc_blsp2_qup6_spi_apps_clk = {
1776 .halt_reg = 0x30004,
1777 .halt_check = BRANCH_HALT,
1778 .clkr = {
1779 .enable_reg = 0x30004,
1780 .enable_mask = BIT(0),
1781 .hw.init = &(struct clk_init_data){
1782 .name = "gcc_blsp2_qup6_spi_apps_clk",
1783 .parent_names = (const char *[]){
1784 "blsp2_qup6_spi_apps_clk_src",
1785 },
1786 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001787 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001788 .ops = &clk_branch2_ops,
1789 },
1790 },
1791};
1792
1793static struct clk_branch gcc_blsp2_sleep_clk = {
1794 .halt_reg = 0x25008,
1795 .halt_check = BRANCH_HALT_VOTED,
1796 .clkr = {
1797 .enable_reg = 0x52004,
1798 .enable_mask = BIT(14),
1799 .hw.init = &(struct clk_init_data){
1800 .name = "gcc_blsp2_sleep_clk",
1801 .ops = &clk_branch2_ops,
1802 },
1803 },
1804};
1805
1806static struct clk_branch gcc_blsp2_uart1_apps_clk = {
1807 .halt_reg = 0x27004,
1808 .halt_check = BRANCH_HALT,
1809 .clkr = {
1810 .enable_reg = 0x27004,
1811 .enable_mask = BIT(0),
1812 .hw.init = &(struct clk_init_data){
1813 .name = "gcc_blsp2_uart1_apps_clk",
1814 .parent_names = (const char *[]){
1815 "blsp2_uart1_apps_clk_src",
1816 },
1817 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001818 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001819 .ops = &clk_branch2_ops,
1820 },
1821 },
1822};
1823
1824static struct clk_branch gcc_blsp2_uart2_apps_clk = {
1825 .halt_reg = 0x29004,
1826 .halt_check = BRANCH_HALT,
1827 .clkr = {
1828 .enable_reg = 0x29004,
1829 .enable_mask = BIT(0),
1830 .hw.init = &(struct clk_init_data){
1831 .name = "gcc_blsp2_uart2_apps_clk",
1832 .parent_names = (const char *[]){
1833 "blsp2_uart2_apps_clk_src",
1834 },
1835 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001836 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001837 .ops = &clk_branch2_ops,
1838 },
1839 },
1840};
1841
1842static struct clk_branch gcc_blsp2_uart3_apps_clk = {
1843 .halt_reg = 0x2b004,
1844 .halt_check = BRANCH_HALT,
1845 .clkr = {
1846 .enable_reg = 0x2b004,
1847 .enable_mask = BIT(0),
1848 .hw.init = &(struct clk_init_data){
1849 .name = "gcc_blsp2_uart3_apps_clk",
1850 .parent_names = (const char *[]){
1851 "blsp2_uart3_apps_clk_src",
1852 },
1853 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001854 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001855 .ops = &clk_branch2_ops,
1856 },
1857 },
1858};
1859
1860static struct clk_branch gcc_cfg_noc_usb3_axi_clk = {
1861 .halt_reg = 0x5018,
1862 .halt_check = BRANCH_HALT,
1863 .clkr = {
1864 .enable_reg = 0x5018,
1865 .enable_mask = BIT(0),
1866 .hw.init = &(struct clk_init_data){
1867 .name = "gcc_cfg_noc_usb3_axi_clk",
1868 .parent_names = (const char *[]){
1869 "usb30_master_clk_src",
1870 },
1871 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001872 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001873 .ops = &clk_branch2_ops,
1874 },
1875 },
1876};
1877
1878static struct clk_branch gcc_gp1_clk = {
1879 .halt_reg = 0x64000,
1880 .halt_check = BRANCH_HALT,
1881 .clkr = {
1882 .enable_reg = 0x64000,
1883 .enable_mask = BIT(0),
1884 .hw.init = &(struct clk_init_data){
1885 .name = "gcc_gp1_clk",
1886 .parent_names = (const char *[]){
1887 "gp1_clk_src",
1888 },
1889 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001890 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001891 .ops = &clk_branch2_ops,
1892 },
1893 },
1894};
1895
1896static struct clk_branch gcc_gp2_clk = {
1897 .halt_reg = 0x65000,
1898 .halt_check = BRANCH_HALT,
1899 .clkr = {
1900 .enable_reg = 0x65000,
1901 .enable_mask = BIT(0),
1902 .hw.init = &(struct clk_init_data){
1903 .name = "gcc_gp2_clk",
1904 .parent_names = (const char *[]){
1905 "gp2_clk_src",
1906 },
1907 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001908 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001909 .ops = &clk_branch2_ops,
1910 },
1911 },
1912};
1913
1914static struct clk_branch gcc_gp3_clk = {
1915 .halt_reg = 0x66000,
1916 .halt_check = BRANCH_HALT,
1917 .clkr = {
1918 .enable_reg = 0x66000,
1919 .enable_mask = BIT(0),
1920 .hw.init = &(struct clk_init_data){
1921 .name = "gcc_gp3_clk",
1922 .parent_names = (const char *[]){
1923 "gp3_clk_src",
1924 },
1925 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001926 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001927 .ops = &clk_branch2_ops,
1928 },
1929 },
1930};
1931
1932static struct clk_branch gcc_gpu_bimc_gfx_clk = {
1933 .halt_reg = 0x71010,
1934 .halt_check = BRANCH_HALT,
1935 .clkr = {
1936 .enable_reg = 0x71010,
1937 .enable_mask = BIT(0),
1938 .hw.init = &(struct clk_init_data){
1939 .name = "gcc_gpu_bimc_gfx_clk",
1940 .ops = &clk_branch2_ops,
1941 },
1942 },
1943};
1944
1945static struct clk_branch gcc_gpu_bimc_gfx_src_clk = {
1946 .halt_reg = 0x7100c,
1947 .halt_check = BRANCH_HALT,
1948 .clkr = {
1949 .enable_reg = 0x7100c,
1950 .enable_mask = BIT(0),
1951 .hw.init = &(struct clk_init_data){
1952 .name = "gcc_gpu_bimc_gfx_src_clk",
1953 .ops = &clk_branch2_ops,
1954 },
1955 },
1956};
1957
1958static struct clk_branch gcc_gpu_cfg_ahb_clk = {
1959 .halt_reg = 0x71004,
1960 .halt_check = BRANCH_HALT,
1961 .clkr = {
1962 .enable_reg = 0x71004,
1963 .enable_mask = BIT(0),
1964 .hw.init = &(struct clk_init_data){
1965 .name = "gcc_gpu_cfg_ahb_clk",
1966 .ops = &clk_branch2_ops,
1967 },
1968 },
1969};
1970
1971static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
1972 .halt_reg = 0x71018,
1973 .halt_check = BRANCH_HALT,
1974 .clkr = {
1975 .enable_reg = 0x71018,
1976 .enable_mask = BIT(0),
1977 .hw.init = &(struct clk_init_data){
1978 .name = "gcc_gpu_snoc_dvm_gfx_clk",
1979 .ops = &clk_branch2_ops,
1980 },
1981 },
1982};
1983
1984static struct clk_branch gcc_hmss_ahb_clk = {
1985 .halt_reg = 0x48000,
1986 .halt_check = BRANCH_HALT_VOTED,
1987 .clkr = {
1988 .enable_reg = 0x52004,
1989 .enable_mask = BIT(21),
1990 .hw.init = &(struct clk_init_data){
1991 .name = "gcc_hmss_ahb_clk",
1992 .parent_names = (const char *[]){
1993 "hmss_ahb_clk_src",
1994 },
1995 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07001996 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07001997 .ops = &clk_branch2_ops,
1998 },
1999 },
2000};
2001
2002static struct clk_branch gcc_hmss_at_clk = {
2003 .halt_reg = 0x48010,
2004 .halt_check = BRANCH_HALT,
2005 .clkr = {
2006 .enable_reg = 0x48010,
2007 .enable_mask = BIT(0),
2008 .hw.init = &(struct clk_init_data){
2009 .name = "gcc_hmss_at_clk",
2010 .ops = &clk_branch2_ops,
2011 },
2012 },
2013};
2014
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07002015static struct clk_branch gcc_hmss_rbcpr_clk = {
2016 .halt_reg = 0x48008,
2017 .halt_check = BRANCH_HALT,
2018 .clkr = {
2019 .enable_reg = 0x48008,
2020 .enable_mask = BIT(0),
2021 .hw.init = &(struct clk_init_data){
2022 .name = "gcc_hmss_rbcpr_clk",
2023 .parent_names = (const char *[]){
2024 "hmss_rbcpr_clk_src",
2025 },
2026 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07002027 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07002028 .ops = &clk_branch2_ops,
2029 },
2030 },
2031};
2032
2033static struct clk_branch gcc_hmss_trig_clk = {
2034 .halt_reg = 0x4800c,
2035 .halt_check = BRANCH_HALT,
2036 .clkr = {
2037 .enable_reg = 0x4800c,
2038 .enable_mask = BIT(0),
2039 .hw.init = &(struct clk_init_data){
2040 .name = "gcc_hmss_trig_clk",
2041 .ops = &clk_branch2_ops,
2042 },
2043 },
2044};
2045
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07002046static struct clk_branch gcc_mmss_noc_cfg_ahb_clk = {
2047 .halt_reg = 0x9004,
2048 .halt_check = BRANCH_HALT,
2049 .clkr = {
2050 .enable_reg = 0x9004,
2051 .enable_mask = BIT(0),
2052 .hw.init = &(struct clk_init_data){
2053 .name = "gcc_mmss_noc_cfg_ahb_clk",
2054 .ops = &clk_branch2_ops,
Jeffrey Hugo12eced02018-12-13 15:43:40 -07002055 /*
2056 * Any access to mmss depends on this clock.
2057 * Gating this clock has been shown to crash the system
2058 * when mmssnoc_axi_rpm_clk is inited in rpmcc.
2059 */
2060 .flags = CLK_IS_CRITICAL,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07002061 },
2062 },
2063};
2064
2065static struct clk_branch gcc_mmss_qm_ahb_clk = {
2066 .halt_reg = 0x9030,
2067 .halt_check = BRANCH_HALT,
2068 .clkr = {
2069 .enable_reg = 0x9030,
2070 .enable_mask = BIT(0),
2071 .hw.init = &(struct clk_init_data){
2072 .name = "gcc_mmss_qm_ahb_clk",
2073 .ops = &clk_branch2_ops,
2074 },
2075 },
2076};
2077
2078static struct clk_branch gcc_mmss_qm_core_clk = {
2079 .halt_reg = 0x900c,
2080 .halt_check = BRANCH_HALT,
2081 .clkr = {
2082 .enable_reg = 0x900c,
2083 .enable_mask = BIT(0),
2084 .hw.init = &(struct clk_init_data){
2085 .name = "gcc_mmss_qm_core_clk",
2086 .ops = &clk_branch2_ops,
2087 },
2088 },
2089};
2090
2091static struct clk_branch gcc_mmss_sys_noc_axi_clk = {
2092 .halt_reg = 0x9000,
2093 .halt_check = BRANCH_HALT,
2094 .clkr = {
2095 .enable_reg = 0x9000,
2096 .enable_mask = BIT(0),
2097 .hw.init = &(struct clk_init_data){
2098 .name = "gcc_mmss_sys_noc_axi_clk",
2099 .ops = &clk_branch2_ops,
2100 },
2101 },
2102};
2103
2104static struct clk_branch gcc_mss_at_clk = {
2105 .halt_reg = 0x8a00c,
2106 .halt_check = BRANCH_HALT,
2107 .clkr = {
2108 .enable_reg = 0x8a00c,
2109 .enable_mask = BIT(0),
2110 .hw.init = &(struct clk_init_data){
2111 .name = "gcc_mss_at_clk",
2112 .ops = &clk_branch2_ops,
2113 },
2114 },
2115};
2116
2117static struct clk_branch gcc_pcie_0_aux_clk = {
2118 .halt_reg = 0x6b014,
2119 .halt_check = BRANCH_HALT,
2120 .clkr = {
2121 .enable_reg = 0x6b014,
2122 .enable_mask = BIT(0),
2123 .hw.init = &(struct clk_init_data){
2124 .name = "gcc_pcie_0_aux_clk",
2125 .parent_names = (const char *[]){
2126 "pcie_aux_clk_src",
2127 },
2128 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07002129 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07002130 .ops = &clk_branch2_ops,
2131 },
2132 },
2133};
2134
2135static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
2136 .halt_reg = 0x6b010,
2137 .halt_check = BRANCH_HALT,
2138 .clkr = {
2139 .enable_reg = 0x6b010,
2140 .enable_mask = BIT(0),
2141 .hw.init = &(struct clk_init_data){
2142 .name = "gcc_pcie_0_cfg_ahb_clk",
2143 .ops = &clk_branch2_ops,
2144 },
2145 },
2146};
2147
2148static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
2149 .halt_reg = 0x6b00c,
2150 .halt_check = BRANCH_HALT,
2151 .clkr = {
2152 .enable_reg = 0x6b00c,
2153 .enable_mask = BIT(0),
2154 .hw.init = &(struct clk_init_data){
2155 .name = "gcc_pcie_0_mstr_axi_clk",
2156 .ops = &clk_branch2_ops,
2157 },
2158 },
2159};
2160
2161static struct clk_branch gcc_pcie_0_pipe_clk = {
2162 .halt_reg = 0x6b018,
2163 .halt_check = BRANCH_HALT,
2164 .clkr = {
2165 .enable_reg = 0x6b018,
2166 .enable_mask = BIT(0),
2167 .hw.init = &(struct clk_init_data){
2168 .name = "gcc_pcie_0_pipe_clk",
2169 .ops = &clk_branch2_ops,
2170 },
2171 },
2172};
2173
2174static struct clk_branch gcc_pcie_0_slv_axi_clk = {
2175 .halt_reg = 0x6b008,
2176 .halt_check = BRANCH_HALT,
2177 .clkr = {
2178 .enable_reg = 0x6b008,
2179 .enable_mask = BIT(0),
2180 .hw.init = &(struct clk_init_data){
2181 .name = "gcc_pcie_0_slv_axi_clk",
2182 .ops = &clk_branch2_ops,
2183 },
2184 },
2185};
2186
2187static struct clk_branch gcc_pcie_phy_aux_clk = {
2188 .halt_reg = 0x6f004,
2189 .halt_check = BRANCH_HALT,
2190 .clkr = {
2191 .enable_reg = 0x6f004,
2192 .enable_mask = BIT(0),
2193 .hw.init = &(struct clk_init_data){
2194 .name = "gcc_pcie_phy_aux_clk",
2195 .parent_names = (const char *[]){
2196 "pcie_aux_clk_src",
2197 },
2198 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07002199 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07002200 .ops = &clk_branch2_ops,
2201 },
2202 },
2203};
2204
2205static struct clk_branch gcc_pdm2_clk = {
2206 .halt_reg = 0x3300c,
2207 .halt_check = BRANCH_HALT,
2208 .clkr = {
2209 .enable_reg = 0x3300c,
2210 .enable_mask = BIT(0),
2211 .hw.init = &(struct clk_init_data){
2212 .name = "gcc_pdm2_clk",
2213 .parent_names = (const char *[]){
2214 "pdm2_clk_src",
2215 },
2216 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07002217 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07002218 .ops = &clk_branch2_ops,
2219 },
2220 },
2221};
2222
2223static struct clk_branch gcc_pdm_ahb_clk = {
2224 .halt_reg = 0x33004,
2225 .halt_check = BRANCH_HALT,
2226 .clkr = {
2227 .enable_reg = 0x33004,
2228 .enable_mask = BIT(0),
2229 .hw.init = &(struct clk_init_data){
2230 .name = "gcc_pdm_ahb_clk",
2231 .ops = &clk_branch2_ops,
2232 },
2233 },
2234};
2235
2236static struct clk_branch gcc_pdm_xo4_clk = {
2237 .halt_reg = 0x33008,
2238 .halt_check = BRANCH_HALT,
2239 .clkr = {
2240 .enable_reg = 0x33008,
2241 .enable_mask = BIT(0),
2242 .hw.init = &(struct clk_init_data){
2243 .name = "gcc_pdm_xo4_clk",
2244 .ops = &clk_branch2_ops,
2245 },
2246 },
2247};
2248
2249static struct clk_branch gcc_prng_ahb_clk = {
2250 .halt_reg = 0x34004,
2251 .halt_check = BRANCH_HALT_VOTED,
2252 .clkr = {
2253 .enable_reg = 0x52004,
2254 .enable_mask = BIT(13),
2255 .hw.init = &(struct clk_init_data){
2256 .name = "gcc_prng_ahb_clk",
2257 .ops = &clk_branch2_ops,
2258 },
2259 },
2260};
2261
2262static struct clk_branch gcc_sdcc2_ahb_clk = {
2263 .halt_reg = 0x14008,
2264 .halt_check = BRANCH_HALT,
2265 .clkr = {
2266 .enable_reg = 0x14008,
2267 .enable_mask = BIT(0),
2268 .hw.init = &(struct clk_init_data){
2269 .name = "gcc_sdcc2_ahb_clk",
2270 .ops = &clk_branch2_ops,
2271 },
2272 },
2273};
2274
2275static struct clk_branch gcc_sdcc2_apps_clk = {
2276 .halt_reg = 0x14004,
2277 .halt_check = BRANCH_HALT,
2278 .clkr = {
2279 .enable_reg = 0x14004,
2280 .enable_mask = BIT(0),
2281 .hw.init = &(struct clk_init_data){
2282 .name = "gcc_sdcc2_apps_clk",
2283 .parent_names = (const char *[]){
2284 "sdcc2_apps_clk_src",
2285 },
2286 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07002287 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07002288 .ops = &clk_branch2_ops,
2289 },
2290 },
2291};
2292
2293static struct clk_branch gcc_sdcc4_ahb_clk = {
2294 .halt_reg = 0x16008,
2295 .halt_check = BRANCH_HALT,
2296 .clkr = {
2297 .enable_reg = 0x16008,
2298 .enable_mask = BIT(0),
2299 .hw.init = &(struct clk_init_data){
2300 .name = "gcc_sdcc4_ahb_clk",
2301 .ops = &clk_branch2_ops,
2302 },
2303 },
2304};
2305
2306static struct clk_branch gcc_sdcc4_apps_clk = {
2307 .halt_reg = 0x16004,
2308 .halt_check = BRANCH_HALT,
2309 .clkr = {
2310 .enable_reg = 0x16004,
2311 .enable_mask = BIT(0),
2312 .hw.init = &(struct clk_init_data){
2313 .name = "gcc_sdcc4_apps_clk",
2314 .parent_names = (const char *[]){
2315 "sdcc4_apps_clk_src",
2316 },
2317 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07002318 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07002319 .ops = &clk_branch2_ops,
2320 },
2321 },
2322};
2323
2324static struct clk_branch gcc_tsif_ahb_clk = {
2325 .halt_reg = 0x36004,
2326 .halt_check = BRANCH_HALT,
2327 .clkr = {
2328 .enable_reg = 0x36004,
2329 .enable_mask = BIT(0),
2330 .hw.init = &(struct clk_init_data){
2331 .name = "gcc_tsif_ahb_clk",
2332 .ops = &clk_branch2_ops,
2333 },
2334 },
2335};
2336
2337static struct clk_branch gcc_tsif_inactivity_timers_clk = {
2338 .halt_reg = 0x3600c,
2339 .halt_check = BRANCH_HALT,
2340 .clkr = {
2341 .enable_reg = 0x3600c,
2342 .enable_mask = BIT(0),
2343 .hw.init = &(struct clk_init_data){
2344 .name = "gcc_tsif_inactivity_timers_clk",
2345 .ops = &clk_branch2_ops,
2346 },
2347 },
2348};
2349
2350static struct clk_branch gcc_tsif_ref_clk = {
2351 .halt_reg = 0x36008,
2352 .halt_check = BRANCH_HALT,
2353 .clkr = {
2354 .enable_reg = 0x36008,
2355 .enable_mask = BIT(0),
2356 .hw.init = &(struct clk_init_data){
2357 .name = "gcc_tsif_ref_clk",
2358 .parent_names = (const char *[]){
2359 "tsif_ref_clk_src",
2360 },
2361 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07002362 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07002363 .ops = &clk_branch2_ops,
2364 },
2365 },
2366};
2367
2368static struct clk_branch gcc_ufs_ahb_clk = {
2369 .halt_reg = 0x7500c,
2370 .halt_check = BRANCH_HALT,
2371 .clkr = {
2372 .enable_reg = 0x7500c,
2373 .enable_mask = BIT(0),
2374 .hw.init = &(struct clk_init_data){
2375 .name = "gcc_ufs_ahb_clk",
2376 .ops = &clk_branch2_ops,
2377 },
2378 },
2379};
2380
2381static struct clk_branch gcc_ufs_axi_clk = {
2382 .halt_reg = 0x75008,
2383 .halt_check = BRANCH_HALT,
2384 .clkr = {
2385 .enable_reg = 0x75008,
2386 .enable_mask = BIT(0),
2387 .hw.init = &(struct clk_init_data){
2388 .name = "gcc_ufs_axi_clk",
2389 .parent_names = (const char *[]){
2390 "ufs_axi_clk_src",
2391 },
2392 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07002393 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07002394 .ops = &clk_branch2_ops,
2395 },
2396 },
2397};
2398
2399static struct clk_branch gcc_ufs_ice_core_clk = {
2400 .halt_reg = 0x7600c,
2401 .halt_check = BRANCH_HALT,
2402 .clkr = {
2403 .enable_reg = 0x7600c,
2404 .enable_mask = BIT(0),
2405 .hw.init = &(struct clk_init_data){
2406 .name = "gcc_ufs_ice_core_clk",
2407 .ops = &clk_branch2_ops,
2408 },
2409 },
2410};
2411
2412static struct clk_branch gcc_ufs_phy_aux_clk = {
2413 .halt_reg = 0x76040,
2414 .halt_check = BRANCH_HALT,
2415 .clkr = {
2416 .enable_reg = 0x76040,
2417 .enable_mask = BIT(0),
2418 .hw.init = &(struct clk_init_data){
2419 .name = "gcc_ufs_phy_aux_clk",
2420 .ops = &clk_branch2_ops,
2421 },
2422 },
2423};
2424
2425static struct clk_branch gcc_ufs_rx_symbol_0_clk = {
2426 .halt_reg = 0x75014,
Bjorn Andersson2abf8562018-12-03 10:33:29 -08002427 .halt_check = BRANCH_HALT_SKIP,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07002428 .clkr = {
2429 .enable_reg = 0x75014,
2430 .enable_mask = BIT(0),
2431 .hw.init = &(struct clk_init_data){
2432 .name = "gcc_ufs_rx_symbol_0_clk",
2433 .ops = &clk_branch2_ops,
2434 },
2435 },
2436};
2437
2438static struct clk_branch gcc_ufs_rx_symbol_1_clk = {
2439 .halt_reg = 0x7605c,
Bjorn Andersson2abf8562018-12-03 10:33:29 -08002440 .halt_check = BRANCH_HALT_SKIP,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07002441 .clkr = {
2442 .enable_reg = 0x7605c,
2443 .enable_mask = BIT(0),
2444 .hw.init = &(struct clk_init_data){
2445 .name = "gcc_ufs_rx_symbol_1_clk",
2446 .ops = &clk_branch2_ops,
2447 },
2448 },
2449};
2450
2451static struct clk_branch gcc_ufs_tx_symbol_0_clk = {
2452 .halt_reg = 0x75010,
Bjorn Andersson2abf8562018-12-03 10:33:29 -08002453 .halt_check = BRANCH_HALT_SKIP,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07002454 .clkr = {
2455 .enable_reg = 0x75010,
2456 .enable_mask = BIT(0),
2457 .hw.init = &(struct clk_init_data){
2458 .name = "gcc_ufs_tx_symbol_0_clk",
2459 .ops = &clk_branch2_ops,
2460 },
2461 },
2462};
2463
2464static struct clk_branch gcc_ufs_unipro_core_clk = {
2465 .halt_reg = 0x76008,
2466 .halt_check = BRANCH_HALT,
2467 .clkr = {
2468 .enable_reg = 0x76008,
2469 .enable_mask = BIT(0),
2470 .hw.init = &(struct clk_init_data){
2471 .name = "gcc_ufs_unipro_core_clk",
2472 .ops = &clk_branch2_ops,
2473 },
2474 },
2475};
2476
2477static struct clk_branch gcc_usb30_master_clk = {
2478 .halt_reg = 0xf008,
2479 .halt_check = BRANCH_HALT,
2480 .clkr = {
2481 .enable_reg = 0xf008,
2482 .enable_mask = BIT(0),
2483 .hw.init = &(struct clk_init_data){
2484 .name = "gcc_usb30_master_clk",
2485 .parent_names = (const char *[]){
2486 "usb30_master_clk_src",
2487 },
2488 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07002489 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07002490 .ops = &clk_branch2_ops,
2491 },
2492 },
2493};
2494
2495static struct clk_branch gcc_usb30_mock_utmi_clk = {
2496 .halt_reg = 0xf010,
2497 .halt_check = BRANCH_HALT,
2498 .clkr = {
2499 .enable_reg = 0xf010,
2500 .enable_mask = BIT(0),
2501 .hw.init = &(struct clk_init_data){
2502 .name = "gcc_usb30_mock_utmi_clk",
2503 .parent_names = (const char *[]){
2504 "usb30_mock_utmi_clk_src",
2505 },
2506 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07002507 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07002508 .ops = &clk_branch2_ops,
2509 },
2510 },
2511};
2512
2513static struct clk_branch gcc_usb30_sleep_clk = {
2514 .halt_reg = 0xf00c,
2515 .halt_check = BRANCH_HALT,
2516 .clkr = {
2517 .enable_reg = 0xf00c,
2518 .enable_mask = BIT(0),
2519 .hw.init = &(struct clk_init_data){
2520 .name = "gcc_usb30_sleep_clk",
2521 .ops = &clk_branch2_ops,
2522 },
2523 },
2524};
2525
2526static struct clk_branch gcc_usb3_phy_aux_clk = {
2527 .halt_reg = 0x50000,
2528 .halt_check = BRANCH_HALT,
2529 .clkr = {
2530 .enable_reg = 0x50000,
2531 .enable_mask = BIT(0),
2532 .hw.init = &(struct clk_init_data){
2533 .name = "gcc_usb3_phy_aux_clk",
2534 .parent_names = (const char *[]){
2535 "usb3_phy_aux_clk_src",
2536 },
2537 .num_parents = 1,
Jeffrey Hugo26fe27d2018-12-17 19:12:14 -07002538 .flags = CLK_SET_RATE_PARENT,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07002539 .ops = &clk_branch2_ops,
2540 },
2541 },
2542};
2543
2544static struct clk_branch gcc_usb3_phy_pipe_clk = {
2545 .halt_reg = 0x50004,
2546 .halt_check = BRANCH_HALT,
2547 .clkr = {
2548 .enable_reg = 0x50004,
2549 .enable_mask = BIT(0),
2550 .hw.init = &(struct clk_init_data){
2551 .name = "gcc_usb3_phy_pipe_clk",
2552 .ops = &clk_branch2_ops,
2553 },
2554 },
2555};
2556
2557static struct clk_branch gcc_usb_phy_cfg_ahb2phy_clk = {
2558 .halt_reg = 0x6a004,
2559 .halt_check = BRANCH_HALT,
2560 .clkr = {
2561 .enable_reg = 0x6a004,
2562 .enable_mask = BIT(0),
2563 .hw.init = &(struct clk_init_data){
2564 .name = "gcc_usb_phy_cfg_ahb2phy_clk",
2565 .ops = &clk_branch2_ops,
2566 },
2567 },
2568};
2569
Bjorn Andersson30bc0b92018-12-03 10:33:30 -08002570static struct clk_branch gcc_hdmi_clkref_clk = {
2571 .halt_reg = 0x88000,
2572 .clkr = {
2573 .enable_reg = 0x88000,
2574 .enable_mask = BIT(0),
2575 .hw.init = &(struct clk_init_data){
2576 .name = "gcc_hdmi_clkref_clk",
2577 .parent_names = (const char *[]){ "xo" },
2578 .num_parents = 1,
2579 .ops = &clk_branch2_ops,
2580 },
2581 },
2582};
2583
2584static struct clk_branch gcc_ufs_clkref_clk = {
2585 .halt_reg = 0x88004,
2586 .clkr = {
2587 .enable_reg = 0x88004,
2588 .enable_mask = BIT(0),
2589 .hw.init = &(struct clk_init_data){
2590 .name = "gcc_ufs_clkref_clk",
2591 .parent_names = (const char *[]){ "xo" },
2592 .num_parents = 1,
2593 .ops = &clk_branch2_ops,
2594 },
2595 },
2596};
2597
2598static struct clk_branch gcc_usb3_clkref_clk = {
2599 .halt_reg = 0x88008,
2600 .clkr = {
2601 .enable_reg = 0x88008,
2602 .enable_mask = BIT(0),
2603 .hw.init = &(struct clk_init_data){
2604 .name = "gcc_usb3_clkref_clk",
2605 .parent_names = (const char *[]){ "xo" },
2606 .num_parents = 1,
2607 .ops = &clk_branch2_ops,
2608 },
2609 },
2610};
2611
2612static struct clk_branch gcc_pcie_clkref_clk = {
2613 .halt_reg = 0x8800c,
2614 .clkr = {
2615 .enable_reg = 0x8800c,
2616 .enable_mask = BIT(0),
2617 .hw.init = &(struct clk_init_data){
2618 .name = "gcc_pcie_clkref_clk",
2619 .parent_names = (const char *[]){ "xo" },
2620 .num_parents = 1,
2621 .ops = &clk_branch2_ops,
2622 },
2623 },
2624};
2625
2626static struct clk_branch gcc_rx1_usb2_clkref_clk = {
2627 .halt_reg = 0x88014,
2628 .clkr = {
2629 .enable_reg = 0x88014,
2630 .enable_mask = BIT(0),
2631 .hw.init = &(struct clk_init_data){
2632 .name = "gcc_rx1_usb2_clkref_clk",
2633 .parent_names = (const char *[]){ "xo" },
2634 .num_parents = 1,
2635 .ops = &clk_branch2_ops,
2636 },
2637 },
2638};
2639
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07002640static struct gdsc pcie_0_gdsc = {
2641 .gdscr = 0x6b004,
2642 .gds_hw_ctrl = 0x0,
2643 .pd = {
2644 .name = "pcie_0_gdsc",
2645 },
2646 .pwrsts = PWRSTS_OFF_ON,
2647 .flags = VOTABLE,
2648};
2649
2650static struct gdsc ufs_gdsc = {
2651 .gdscr = 0x75004,
2652 .gds_hw_ctrl = 0x0,
2653 .pd = {
2654 .name = "ufs_gdsc",
2655 },
2656 .pwrsts = PWRSTS_OFF_ON,
2657 .flags = VOTABLE,
2658};
2659
2660static struct gdsc usb_30_gdsc = {
2661 .gdscr = 0xf004,
2662 .gds_hw_ctrl = 0x0,
2663 .pd = {
2664 .name = "usb_30_gdsc",
2665 },
2666 .pwrsts = PWRSTS_OFF_ON,
2667 .flags = VOTABLE,
2668};
2669
2670static struct clk_regmap *gcc_msm8998_clocks[] = {
2671 [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
2672 [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
2673 [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
2674 [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
2675 [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
2676 [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
2677 [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
2678 [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
2679 [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
2680 [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
2681 [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
2682 [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
2683 [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
2684 [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
2685 [BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
2686 [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
2687 [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
2688 [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
2689 [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
2690 [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
2691 [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
2692 [BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
2693 [BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
2694 [BLSP2_QUP5_I2C_APPS_CLK_SRC] = &blsp2_qup5_i2c_apps_clk_src.clkr,
2695 [BLSP2_QUP5_SPI_APPS_CLK_SRC] = &blsp2_qup5_spi_apps_clk_src.clkr,
2696 [BLSP2_QUP6_I2C_APPS_CLK_SRC] = &blsp2_qup6_i2c_apps_clk_src.clkr,
2697 [BLSP2_QUP6_SPI_APPS_CLK_SRC] = &blsp2_qup6_spi_apps_clk_src.clkr,
2698 [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
2699 [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
2700 [BLSP2_UART3_APPS_CLK_SRC] = &blsp2_uart3_apps_clk_src.clkr,
2701 [GCC_AGGRE1_NOC_XO_CLK] = &gcc_aggre1_noc_xo_clk.clkr,
2702 [GCC_AGGRE1_UFS_AXI_CLK] = &gcc_aggre1_ufs_axi_clk.clkr,
2703 [GCC_AGGRE1_USB3_AXI_CLK] = &gcc_aggre1_usb3_axi_clk.clkr,
2704 [GCC_APSS_QDSS_TSCTR_DIV2_CLK] = &gcc_apss_qdss_tsctr_div2_clk.clkr,
2705 [GCC_APSS_QDSS_TSCTR_DIV8_CLK] = &gcc_apss_qdss_tsctr_div8_clk.clkr,
2706 [GCC_BIMC_HMSS_AXI_CLK] = &gcc_bimc_hmss_axi_clk.clkr,
2707 [GCC_BIMC_MSS_Q6_AXI_CLK] = &gcc_bimc_mss_q6_axi_clk.clkr,
2708 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
2709 [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
2710 [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
2711 [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
2712 [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
2713 [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
2714 [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
2715 [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
2716 [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
2717 [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
2718 [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
2719 [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
2720 [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
2721 [GCC_BLSP1_SLEEP_CLK] = &gcc_blsp1_sleep_clk.clkr,
2722 [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
2723 [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
2724 [GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
2725 [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
2726 [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
2727 [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
2728 [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
2729 [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
2730 [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
2731 [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
2732 [GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
2733 [GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
2734 [GCC_BLSP2_QUP5_I2C_APPS_CLK] = &gcc_blsp2_qup5_i2c_apps_clk.clkr,
2735 [GCC_BLSP2_QUP5_SPI_APPS_CLK] = &gcc_blsp2_qup5_spi_apps_clk.clkr,
2736 [GCC_BLSP2_QUP6_I2C_APPS_CLK] = &gcc_blsp2_qup6_i2c_apps_clk.clkr,
2737 [GCC_BLSP2_QUP6_SPI_APPS_CLK] = &gcc_blsp2_qup6_spi_apps_clk.clkr,
2738 [GCC_BLSP2_SLEEP_CLK] = &gcc_blsp2_sleep_clk.clkr,
2739 [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
2740 [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
2741 [GCC_BLSP2_UART3_APPS_CLK] = &gcc_blsp2_uart3_apps_clk.clkr,
2742 [GCC_CFG_NOC_USB3_AXI_CLK] = &gcc_cfg_noc_usb3_axi_clk.clkr,
2743 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2744 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2745 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2746 [GCC_GPU_BIMC_GFX_CLK] = &gcc_gpu_bimc_gfx_clk.clkr,
2747 [GCC_GPU_BIMC_GFX_SRC_CLK] = &gcc_gpu_bimc_gfx_src_clk.clkr,
2748 [GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,
2749 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
2750 [GCC_HMSS_AHB_CLK] = &gcc_hmss_ahb_clk.clkr,
2751 [GCC_HMSS_AT_CLK] = &gcc_hmss_at_clk.clkr,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07002752 [GCC_HMSS_RBCPR_CLK] = &gcc_hmss_rbcpr_clk.clkr,
2753 [GCC_HMSS_TRIG_CLK] = &gcc_hmss_trig_clk.clkr,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07002754 [GCC_MMSS_NOC_CFG_AHB_CLK] = &gcc_mmss_noc_cfg_ahb_clk.clkr,
2755 [GCC_MMSS_QM_AHB_CLK] = &gcc_mmss_qm_ahb_clk.clkr,
2756 [GCC_MMSS_QM_CORE_CLK] = &gcc_mmss_qm_core_clk.clkr,
2757 [GCC_MMSS_SYS_NOC_AXI_CLK] = &gcc_mmss_sys_noc_axi_clk.clkr,
2758 [GCC_MSS_AT_CLK] = &gcc_mss_at_clk.clkr,
2759 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
2760 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
2761 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
2762 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
2763 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
2764 [GCC_PCIE_PHY_AUX_CLK] = &gcc_pcie_phy_aux_clk.clkr,
2765 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2766 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2767 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
2768 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
2769 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2770 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2771 [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
2772 [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
2773 [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr,
2774 [GCC_TSIF_INACTIVITY_TIMERS_CLK] = &gcc_tsif_inactivity_timers_clk.clkr,
2775 [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
2776 [GCC_UFS_AHB_CLK] = &gcc_ufs_ahb_clk.clkr,
2777 [GCC_UFS_AXI_CLK] = &gcc_ufs_axi_clk.clkr,
2778 [GCC_UFS_ICE_CORE_CLK] = &gcc_ufs_ice_core_clk.clkr,
2779 [GCC_UFS_PHY_AUX_CLK] = &gcc_ufs_phy_aux_clk.clkr,
2780 [GCC_UFS_RX_SYMBOL_0_CLK] = &gcc_ufs_rx_symbol_0_clk.clkr,
2781 [GCC_UFS_RX_SYMBOL_1_CLK] = &gcc_ufs_rx_symbol_1_clk.clkr,
2782 [GCC_UFS_TX_SYMBOL_0_CLK] = &gcc_ufs_tx_symbol_0_clk.clkr,
2783 [GCC_UFS_UNIPRO_CORE_CLK] = &gcc_ufs_unipro_core_clk.clkr,
2784 [GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
2785 [GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
2786 [GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,
2787 [GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr,
2788 [GCC_USB3_PHY_PIPE_CLK] = &gcc_usb3_phy_pipe_clk.clkr,
2789 [GCC_USB_PHY_CFG_AHB2PHY_CLK] = &gcc_usb_phy_cfg_ahb2phy_clk.clkr,
2790 [GP1_CLK_SRC] = &gp1_clk_src.clkr,
2791 [GP2_CLK_SRC] = &gp2_clk_src.clkr,
2792 [GP3_CLK_SRC] = &gp3_clk_src.clkr,
2793 [GPLL0] = &gpll0.clkr,
2794 [GPLL0_OUT_EVEN] = &gpll0_out_even.clkr,
2795 [GPLL0_OUT_MAIN] = &gpll0_out_main.clkr,
2796 [GPLL0_OUT_ODD] = &gpll0_out_odd.clkr,
2797 [GPLL0_OUT_TEST] = &gpll0_out_test.clkr,
2798 [GPLL1] = &gpll1.clkr,
2799 [GPLL1_OUT_EVEN] = &gpll1_out_even.clkr,
2800 [GPLL1_OUT_MAIN] = &gpll1_out_main.clkr,
2801 [GPLL1_OUT_ODD] = &gpll1_out_odd.clkr,
2802 [GPLL1_OUT_TEST] = &gpll1_out_test.clkr,
2803 [GPLL2] = &gpll2.clkr,
2804 [GPLL2_OUT_EVEN] = &gpll2_out_even.clkr,
2805 [GPLL2_OUT_MAIN] = &gpll2_out_main.clkr,
2806 [GPLL2_OUT_ODD] = &gpll2_out_odd.clkr,
2807 [GPLL2_OUT_TEST] = &gpll2_out_test.clkr,
2808 [GPLL3] = &gpll3.clkr,
2809 [GPLL3_OUT_EVEN] = &gpll3_out_even.clkr,
2810 [GPLL3_OUT_MAIN] = &gpll3_out_main.clkr,
2811 [GPLL3_OUT_ODD] = &gpll3_out_odd.clkr,
2812 [GPLL3_OUT_TEST] = &gpll3_out_test.clkr,
2813 [GPLL4] = &gpll4.clkr,
2814 [GPLL4_OUT_EVEN] = &gpll4_out_even.clkr,
2815 [GPLL4_OUT_MAIN] = &gpll4_out_main.clkr,
2816 [GPLL4_OUT_ODD] = &gpll4_out_odd.clkr,
2817 [GPLL4_OUT_TEST] = &gpll4_out_test.clkr,
2818 [HMSS_AHB_CLK_SRC] = &hmss_ahb_clk_src.clkr,
2819 [HMSS_RBCPR_CLK_SRC] = &hmss_rbcpr_clk_src.clkr,
2820 [PCIE_AUX_CLK_SRC] = &pcie_aux_clk_src.clkr,
2821 [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
2822 [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
2823 [SDCC4_APPS_CLK_SRC] = &sdcc4_apps_clk_src.clkr,
2824 [TSIF_REF_CLK_SRC] = &tsif_ref_clk_src.clkr,
2825 [UFS_AXI_CLK_SRC] = &ufs_axi_clk_src.clkr,
2826 [USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
2827 [USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
2828 [USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr,
Bjorn Andersson30bc0b92018-12-03 10:33:30 -08002829 [GCC_HDMI_CLKREF_CLK] = &gcc_hdmi_clkref_clk.clkr,
2830 [GCC_UFS_CLKREF_CLK] = &gcc_ufs_clkref_clk.clkr,
2831 [GCC_USB3_CLKREF_CLK] = &gcc_usb3_clkref_clk.clkr,
2832 [GCC_PCIE_CLKREF_CLK] = &gcc_pcie_clkref_clk.clkr,
2833 [GCC_RX1_USB2_CLKREF_CLK] = &gcc_rx1_usb2_clkref_clk.clkr,
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07002834};
2835
2836static struct gdsc *gcc_msm8998_gdscs[] = {
2837 [PCIE_0_GDSC] = &pcie_0_gdsc,
2838 [UFS_GDSC] = &ufs_gdsc,
2839 [USB_30_GDSC] = &usb_30_gdsc,
2840};
2841
2842static const struct qcom_reset_map gcc_msm8998_resets[] = {
Jeffrey Hugo4f89f7b2018-12-03 09:13:43 -07002843 [GCC_BLSP1_QUP1_BCR] = { 0x19000 },
2844 [GCC_BLSP1_QUP2_BCR] = { 0x1b000 },
2845 [GCC_BLSP1_QUP3_BCR] = { 0x1d000 },
2846 [GCC_BLSP1_QUP4_BCR] = { 0x1f000 },
2847 [GCC_BLSP1_QUP5_BCR] = { 0x21000 },
2848 [GCC_BLSP1_QUP6_BCR] = { 0x23000 },
2849 [GCC_BLSP2_QUP1_BCR] = { 0x26000 },
2850 [GCC_BLSP2_QUP2_BCR] = { 0x28000 },
2851 [GCC_BLSP2_QUP3_BCR] = { 0x2a000 },
2852 [GCC_BLSP2_QUP4_BCR] = { 0x2c000 },
2853 [GCC_BLSP2_QUP5_BCR] = { 0x2e000 },
2854 [GCC_BLSP2_QUP6_BCR] = { 0x30000 },
2855 [GCC_PCIE_0_BCR] = { 0x6b000 },
2856 [GCC_PDM_BCR] = { 0x33000 },
2857 [GCC_SDCC2_BCR] = { 0x14000 },
2858 [GCC_SDCC4_BCR] = { 0x16000 },
2859 [GCC_TSIF_BCR] = { 0x36000 },
2860 [GCC_UFS_BCR] = { 0x75000 },
2861 [GCC_USB_30_BCR] = { 0xf000 },
Jeffrey Hugoc0cb7c72018-12-04 08:13:22 -07002862 [GCC_SYSTEM_NOC_BCR] = { 0x4000 },
2863 [GCC_CONFIG_NOC_BCR] = { 0x5000 },
2864 [GCC_AHB2PHY_EAST_BCR] = { 0x7000 },
2865 [GCC_IMEM_BCR] = { 0x8000 },
2866 [GCC_PIMEM_BCR] = { 0xa000 },
2867 [GCC_MMSS_BCR] = { 0xb000 },
2868 [GCC_QDSS_BCR] = { 0xc000 },
2869 [GCC_WCSS_BCR] = { 0x11000 },
Jeffrey Hugoa1697ab2018-12-11 13:00:04 -07002870 [GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 },
2871 [GCC_QUSB2PHY_SEC_BCR] = { 0x12004 },
Jeffrey Hugoc0cb7c72018-12-04 08:13:22 -07002872 [GCC_BLSP1_BCR] = { 0x17000 },
2873 [GCC_BLSP1_UART1_BCR] = { 0x1a000 },
2874 [GCC_BLSP1_UART2_BCR] = { 0x1c000 },
2875 [GCC_BLSP1_UART3_BCR] = { 0x1e000 },
2876 [GCC_CM_PHY_REFGEN1_BCR] = { 0x22000 },
2877 [GCC_CM_PHY_REFGEN2_BCR] = { 0x24000 },
2878 [GCC_BLSP2_BCR] = { 0x25000 },
2879 [GCC_BLSP2_UART1_BCR] = { 0x27000 },
2880 [GCC_BLSP2_UART2_BCR] = { 0x29000 },
2881 [GCC_BLSP2_UART3_BCR] = { 0x2b000 },
2882 [GCC_SRAM_SENSOR_BCR] = { 0x2d000 },
2883 [GCC_PRNG_BCR] = { 0x34000 },
2884 [GCC_TSIF_0_RESET] = { 0x36024 },
2885 [GCC_TSIF_1_RESET] = { 0x36028 },
2886 [GCC_TCSR_BCR] = { 0x37000 },
2887 [GCC_BOOT_ROM_BCR] = { 0x38000 },
2888 [GCC_MSG_RAM_BCR] = { 0x39000 },
2889 [GCC_TLMM_BCR] = { 0x3a000 },
2890 [GCC_MPM_BCR] = { 0x3b000 },
2891 [GCC_SEC_CTRL_BCR] = { 0x3d000 },
2892 [GCC_SPMI_BCR] = { 0x3f000 },
2893 [GCC_SPDM_BCR] = { 0x40000 },
2894 [GCC_CE1_BCR] = { 0x41000 },
2895 [GCC_BIMC_BCR] = { 0x44000 },
2896 [GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x49000 },
2897 [GCC_SNOC_BUS_TIMEOUT1_BCR] = { 0x49008 },
2898 [GCC_SNOC_BUS_TIMEOUT3_BCR] = { 0x49010 },
2899 [GCC_SNOC_BUS_TIMEOUT_EXTREF_BCR] = { 0x49018 },
2900 [GCC_PNOC_BUS_TIMEOUT0_BCR] = { 0x4a000 },
2901 [GCC_CNOC_PERIPH_BUS_TIMEOUT1_BCR] = { 0x4a004 },
2902 [GCC_CNOC_PERIPH_BUS_TIMEOUT2_BCR] = { 0x4a00c },
2903 [GCC_CNOC_BUS_TIMEOUT0_BCR] = { 0x4b000 },
2904 [GCC_CNOC_BUS_TIMEOUT1_BCR] = { 0x4b008 },
2905 [GCC_CNOC_BUS_TIMEOUT2_BCR] = { 0x4b010 },
2906 [GCC_CNOC_BUS_TIMEOUT3_BCR] = { 0x4b018 },
2907 [GCC_CNOC_BUS_TIMEOUT4_BCR] = { 0x4b020 },
2908 [GCC_CNOC_BUS_TIMEOUT5_BCR] = { 0x4b028 },
2909 [GCC_CNOC_BUS_TIMEOUT6_BCR] = { 0x4b030 },
2910 [GCC_CNOC_BUS_TIMEOUT7_BCR] = { 0x4b038 },
2911 [GCC_APB2JTAG_BCR] = { 0x4c000 },
2912 [GCC_RBCPR_CX_BCR] = { 0x4e000 },
2913 [GCC_RBCPR_MX_BCR] = { 0x4f000 },
2914 [GCC_USB3_PHY_BCR] = { 0x50020 },
2915 [GCC_USB3PHY_PHY_BCR] = { 0x50024 },
2916 [GCC_USB3_DP_PHY_BCR] = { 0x50028 },
2917 [GCC_SSC_BCR] = { 0x63000 },
2918 [GCC_SSC_RESET] = { 0x63020 },
2919 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 },
2920 [GCC_PCIE_0_LINK_DOWN_BCR] = { 0x6c014 },
2921 [GCC_PCIE_0_PHY_BCR] = { 0x6c01c },
2922 [GCC_PCIE_0_NOCSR_COM_PHY_BCR] = { 0x6c020 },
2923 [GCC_PCIE_PHY_BCR] = { 0x6f000 },
2924 [GCC_PCIE_PHY_NOCSR_COM_PHY_BCR] = { 0x6f00c },
2925 [GCC_PCIE_PHY_CFG_AHB_BCR] = { 0x6f010 },
2926 [GCC_PCIE_PHY_COM_BCR] = { 0x6f014 },
2927 [GCC_GPU_BCR] = { 0x71000 },
2928 [GCC_SPSS_BCR] = { 0x72000 },
2929 [GCC_OBT_ODT_BCR] = { 0x73000 },
2930 [GCC_VS_BCR] = { 0x7a000 },
2931 [GCC_MSS_VS_RESET] = { 0x7a100 },
2932 [GCC_GPU_VS_RESET] = { 0x7a104 },
2933 [GCC_APC0_VS_RESET] = { 0x7a108 },
2934 [GCC_APC1_VS_RESET] = { 0x7a10c },
2935 [GCC_CNOC_BUS_TIMEOUT8_BCR] = { 0x80000 },
2936 [GCC_CNOC_BUS_TIMEOUT9_BCR] = { 0x80008 },
2937 [GCC_CNOC_BUS_TIMEOUT10_BCR] = { 0x80010 },
2938 [GCC_CNOC_BUS_TIMEOUT11_BCR] = { 0x80018 },
2939 [GCC_CNOC_BUS_TIMEOUT12_BCR] = { 0x80020 },
2940 [GCC_CNOC_BUS_TIMEOUT13_BCR] = { 0x80028 },
2941 [GCC_CNOC_BUS_TIMEOUT14_BCR] = { 0x80030 },
2942 [GCC_CNOC_BUS_TIMEOUT_EXTREF_BCR] = { 0x80038 },
2943 [GCC_AGGRE1_NOC_BCR] = { 0x82000 },
2944 [GCC_AGGRE2_NOC_BCR] = { 0x83000 },
2945 [GCC_DCC_BCR] = { 0x84000 },
2946 [GCC_QREFS_VBG_CAL_BCR] = { 0x88028 },
2947 [GCC_IPA_BCR] = { 0x89000 },
2948 [GCC_GLM_BCR] = { 0x8b000 },
2949 [GCC_SKL_BCR] = { 0x8c000 },
2950 [GCC_MSMPU_BCR] = { 0x8d000 },
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07002951};
2952
2953static const struct regmap_config gcc_msm8998_regmap_config = {
2954 .reg_bits = 32,
2955 .reg_stride = 4,
2956 .val_bits = 32,
2957 .max_register = 0x8f000,
2958 .fast_io = true,
2959};
2960
2961static const struct qcom_cc_desc gcc_msm8998_desc = {
2962 .config = &gcc_msm8998_regmap_config,
2963 .clks = gcc_msm8998_clocks,
2964 .num_clks = ARRAY_SIZE(gcc_msm8998_clocks),
2965 .resets = gcc_msm8998_resets,
2966 .num_resets = ARRAY_SIZE(gcc_msm8998_resets),
2967 .gdscs = gcc_msm8998_gdscs,
2968 .num_gdscs = ARRAY_SIZE(gcc_msm8998_gdscs),
2969};
2970
2971static int gcc_msm8998_probe(struct platform_device *pdev)
2972{
2973 struct regmap *regmap;
2974 int ret;
2975
2976 regmap = qcom_cc_map(pdev, &gcc_msm8998_desc);
2977 if (IS_ERR(regmap))
2978 return PTR_ERR(regmap);
2979
2980 /*
2981 * Set the HMSS_AHB_CLK_SLEEP_ENA bit to allow the hmss_ahb_clk to be
2982 * turned off by hardware during certain apps low power modes.
2983 */
2984 ret = regmap_update_bits(regmap, 0x52008, BIT(21), BIT(21));
2985 if (ret)
2986 return ret;
2987
Stephen Boyd11832322018-12-05 15:48:45 -08002988 ret = devm_clk_hw_register(&pdev->dev, &xo.hw);
2989 if (ret)
2990 return ret;
2991
Joonwoo Parkb5f5f522018-03-27 08:25:18 -07002992 return qcom_cc_really_probe(pdev, &gcc_msm8998_desc, regmap);
2993}
2994
2995static const struct of_device_id gcc_msm8998_match_table[] = {
2996 { .compatible = "qcom,gcc-msm8998" },
2997 { }
2998};
2999MODULE_DEVICE_TABLE(of, gcc_msm8998_match_table);
3000
3001static struct platform_driver gcc_msm8998_driver = {
3002 .probe = gcc_msm8998_probe,
3003 .driver = {
3004 .name = "gcc-msm8998",
3005 .of_match_table = gcc_msm8998_match_table,
3006 },
3007};
3008
3009static int __init gcc_msm8998_init(void)
3010{
3011 return platform_driver_register(&gcc_msm8998_driver);
3012}
3013core_initcall(gcc_msm8998_init);
3014
3015static void __exit gcc_msm8998_exit(void)
3016{
3017 platform_driver_unregister(&gcc_msm8998_driver);
3018}
3019module_exit(gcc_msm8998_exit);
3020
3021MODULE_DESCRIPTION("QCOM GCC msm8998 Driver");
3022MODULE_LICENSE("GPL v2");
3023MODULE_ALIAS("platform:gcc-msm8998");