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