blob: 14f0d5d84080273b5541d2248ddea67e238254f8 [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001// SPDX-License-Identifier: GPL-2.0-only
2/* Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
3 */
4
5#include <linux/kernel.h>
6#include <linux/init.h>
7#include <linux/err.h>
8#include <linux/ctype.h>
9#include <linux/io.h>
10#include <linux/of.h>
11#include <linux/platform_device.h>
12#include <linux/module.h>
13#include <linux/regmap.h>
14
15#include <dt-bindings/clock/qcom,gcc-msm8994.h>
16
17#include "common.h"
18#include "clk-regmap.h"
19#include "clk-alpha-pll.h"
20#include "clk-rcg.h"
21#include "clk-branch.h"
22#include "reset.h"
23
24enum {
25 P_XO,
26 P_GPLL0,
27 P_GPLL4,
28};
29
30static const struct parent_map gcc_xo_gpll0_map[] = {
31 { P_XO, 0 },
32 { P_GPLL0, 1 },
33};
34
35static const char * const gcc_xo_gpll0[] = {
36 "xo",
37 "gpll0",
38};
39
40static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {
41 { P_XO, 0 },
42 { P_GPLL0, 1 },
43 { P_GPLL4, 5 },
44};
45
46static const char * const gcc_xo_gpll0_gpll4[] = {
47 "xo",
48 "gpll0",
49 "gpll4",
50};
51
52static struct clk_fixed_factor xo = {
53 .mult = 1,
54 .div = 1,
55 .hw.init = &(struct clk_init_data)
56 {
57 .name = "xo",
58 .parent_names = (const char *[]) { "xo_board" },
59 .num_parents = 1,
60 .ops = &clk_fixed_factor_ops,
61 },
62};
63
64static struct clk_alpha_pll gpll0_early = {
65 .offset = 0x00000,
66 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
67 .clkr = {
68 .enable_reg = 0x1480,
69 .enable_mask = BIT(0),
70 .hw.init = &(struct clk_init_data)
71 {
72 .name = "gpll0_early",
73 .parent_names = (const char *[]) { "xo" },
74 .num_parents = 1,
75 .ops = &clk_alpha_pll_ops,
76 },
77 },
78};
79
80static struct clk_alpha_pll_postdiv gpll0 = {
81 .offset = 0x00000,
82 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
83 .clkr.hw.init = &(struct clk_init_data)
84 {
85 .name = "gpll0",
86 .parent_names = (const char *[]) { "gpll0_early" },
87 .num_parents = 1,
88 .ops = &clk_alpha_pll_postdiv_ops,
89 },
90};
91
92static struct clk_alpha_pll gpll4_early = {
93 .offset = 0x1dc0,
94 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
95 .clkr = {
96 .enable_reg = 0x1480,
97 .enable_mask = BIT(4),
98 .hw.init = &(struct clk_init_data)
99 {
100 .name = "gpll4_early",
101 .parent_names = (const char *[]) { "xo" },
102 .num_parents = 1,
103 .ops = &clk_alpha_pll_ops,
104 },
105 },
106};
107
108static struct clk_alpha_pll_postdiv gpll4 = {
109 .offset = 0x1dc0,
110 .width = 4,
111 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
112 .clkr.hw.init = &(struct clk_init_data)
113 {
114 .name = "gpll4",
115 .parent_names = (const char *[]) { "gpll4_early" },
116 .num_parents = 1,
117 .ops = &clk_alpha_pll_postdiv_ops,
118 },
119};
120
121static struct freq_tbl ftbl_ufs_axi_clk_src[] = {
122 F(50000000, P_GPLL0, 12, 0, 0),
123 F(100000000, P_GPLL0, 6, 0, 0),
124 F(150000000, P_GPLL0, 4, 0, 0),
125 F(171430000, P_GPLL0, 3.5, 0, 0),
126 F(200000000, P_GPLL0, 3, 0, 0),
127 F(240000000, P_GPLL0, 2.5, 0, 0),
128 { }
129};
130
131static struct clk_rcg2 ufs_axi_clk_src = {
132 .cmd_rcgr = 0x1d68,
133 .mnd_width = 8,
134 .hid_width = 5,
135 .parent_map = gcc_xo_gpll0_map,
136 .freq_tbl = ftbl_ufs_axi_clk_src,
137 .clkr.hw.init = &(struct clk_init_data)
138 {
139 .name = "ufs_axi_clk_src",
140 .parent_names = gcc_xo_gpll0,
141 .num_parents = 2,
142 .ops = &clk_rcg2_ops,
143 },
144};
145
146static struct freq_tbl ftbl_usb30_master_clk_src[] = {
147 F(19200000, P_XO, 1, 0, 0),
148 F(125000000, P_GPLL0, 1, 5, 24),
149 { }
150};
151
152static struct clk_rcg2 usb30_master_clk_src = {
153 .cmd_rcgr = 0x03d4,
154 .mnd_width = 8,
155 .hid_width = 5,
156 .parent_map = gcc_xo_gpll0_map,
157 .freq_tbl = ftbl_usb30_master_clk_src,
158 .clkr.hw.init = &(struct clk_init_data)
159 {
160 .name = "usb30_master_clk_src",
161 .parent_names = gcc_xo_gpll0,
162 .num_parents = 2,
163 .ops = &clk_rcg2_ops,
164 },
165};
166
167static struct freq_tbl ftbl_blsp_i2c_apps_clk_src[] = {
168 F(19200000, P_XO, 1, 0, 0),
169 F(50000000, P_GPLL0, 12, 0, 0),
170 { }
171};
172
173static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
174 .cmd_rcgr = 0x0660,
175 .hid_width = 5,
176 .parent_map = gcc_xo_gpll0_map,
177 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
178 .clkr.hw.init = &(struct clk_init_data)
179 {
180 .name = "blsp1_qup1_i2c_apps_clk_src",
181 .parent_names = gcc_xo_gpll0,
182 .num_parents = 2,
183 .ops = &clk_rcg2_ops,
184 },
185};
186
187static struct freq_tbl ftbl_blspqup_spi_apps_clk_src[] = {
188 F(960000, P_XO, 10, 1, 2),
189 F(4800000, P_XO, 4, 0, 0),
190 F(9600000, P_XO, 2, 0, 0),
191 F(15000000, P_GPLL0, 10, 1, 4),
192 F(19200000, P_XO, 1, 0, 0),
193 F(24000000, P_GPLL0, 12.5, 1, 2),
194 F(25000000, P_GPLL0, 12, 1, 2),
195 F(48000000, P_GPLL0, 12.5, 0, 0),
196 F(50000000, P_GPLL0, 12, 0, 0),
197 { }
198};
199
200static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
201 .cmd_rcgr = 0x064c,
202 .mnd_width = 8,
203 .hid_width = 5,
204 .parent_map = gcc_xo_gpll0_map,
205 .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
206 .clkr.hw.init = &(struct clk_init_data)
207 {
208 .name = "blsp1_qup1_spi_apps_clk_src",
209 .parent_names = gcc_xo_gpll0,
210 .num_parents = 2,
211 .ops = &clk_rcg2_ops,
212 },
213};
214
215static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
216 .cmd_rcgr = 0x06e0,
217 .hid_width = 5,
218 .parent_map = gcc_xo_gpll0_map,
219 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
220 .clkr.hw.init = &(struct clk_init_data)
221 {
222 .name = "blsp1_qup2_i2c_apps_clk_src",
223 .parent_names = gcc_xo_gpll0,
224 .num_parents = 2,
225 .ops = &clk_rcg2_ops,
226 },
227};
228
229static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
230 .cmd_rcgr = 0x06cc,
231 .mnd_width = 8,
232 .hid_width = 5,
233 .parent_map = gcc_xo_gpll0_map,
234 .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
235 .clkr.hw.init = &(struct clk_init_data)
236 {
237 .name = "blsp1_qup2_spi_apps_clk_src",
238 .parent_names = gcc_xo_gpll0,
239 .num_parents = 2,
240 .ops = &clk_rcg2_ops,
241 },
242};
243
244static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
245 .cmd_rcgr = 0x0760,
246 .hid_width = 5,
247 .parent_map = gcc_xo_gpll0_map,
248 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
249 .clkr.hw.init = &(struct clk_init_data)
250 {
251 .name = "blsp1_qup3_i2c_apps_clk_src",
252 .parent_names = gcc_xo_gpll0,
253 .num_parents = 2,
254 .ops = &clk_rcg2_ops,
255 },
256};
257
258static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
259 .cmd_rcgr = 0x074c,
260 .mnd_width = 8,
261 .hid_width = 5,
262 .parent_map = gcc_xo_gpll0_map,
263 .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
264 .clkr.hw.init = &(struct clk_init_data)
265 {
266 .name = "blsp1_qup3_spi_apps_clk_src",
267 .parent_names = gcc_xo_gpll0,
268 .num_parents = 2,
269 .ops = &clk_rcg2_ops,
270 },
271};
272
273static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
274 .cmd_rcgr = 0x07e0,
275 .hid_width = 5,
276 .parent_map = gcc_xo_gpll0_map,
277 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
278 .clkr.hw.init = &(struct clk_init_data)
279 {
280 .name = "blsp1_qup4_i2c_apps_clk_src",
281 .parent_names = gcc_xo_gpll0,
282 .num_parents = 2,
283 .ops = &clk_rcg2_ops,
284 },
285};
286
287static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
288 .cmd_rcgr = 0x07cc,
289 .mnd_width = 8,
290 .hid_width = 5,
291 .parent_map = gcc_xo_gpll0_map,
292 .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
293 .clkr.hw.init = &(struct clk_init_data)
294 {
295 .name = "blsp1_qup4_spi_apps_clk_src",
296 .parent_names = gcc_xo_gpll0,
297 .num_parents = 2,
298 .ops = &clk_rcg2_ops,
299 },
300};
301
302static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
303 .cmd_rcgr = 0x0860,
304 .hid_width = 5,
305 .parent_map = gcc_xo_gpll0_map,
306 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
307 .clkr.hw.init = &(struct clk_init_data)
308 {
309 .name = "blsp1_qup5_i2c_apps_clk_src",
310 .parent_names = gcc_xo_gpll0,
311 .num_parents = 2,
312 .ops = &clk_rcg2_ops,
313 },
314};
315
316static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
317 .cmd_rcgr = 0x084c,
318 .mnd_width = 8,
319 .hid_width = 5,
320 .parent_map = gcc_xo_gpll0_map,
321 .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
322 .clkr.hw.init = &(struct clk_init_data)
323 {
324 .name = "blsp1_qup5_spi_apps_clk_src",
325 .parent_names = gcc_xo_gpll0,
326 .num_parents = 2,
327 .ops = &clk_rcg2_ops,
328 },
329};
330
331static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
332 .cmd_rcgr = 0x08e0,
333 .hid_width = 5,
334 .parent_map = gcc_xo_gpll0_map,
335 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
336 .clkr.hw.init = &(struct clk_init_data)
337 {
338 .name = "blsp1_qup6_i2c_apps_clk_src",
339 .parent_names = gcc_xo_gpll0,
340 .num_parents = 2,
341 .ops = &clk_rcg2_ops,
342 },
343};
344
345static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
346 .cmd_rcgr = 0x08cc,
347 .mnd_width = 8,
348 .hid_width = 5,
349 .parent_map = gcc_xo_gpll0_map,
350 .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
351 .clkr.hw.init = &(struct clk_init_data)
352 {
353 .name = "blsp1_qup6_spi_apps_clk_src",
354 .parent_names = gcc_xo_gpll0,
355 .num_parents = 2,
356 .ops = &clk_rcg2_ops,
357 },
358};
359
360static struct freq_tbl ftbl_blsp_uart_apps_clk_src[] = {
361 F(3686400, P_GPLL0, 1, 96, 15625),
362 F(7372800, P_GPLL0, 1, 192, 15625),
363 F(14745600, P_GPLL0, 1, 384, 15625),
364 F(16000000, P_GPLL0, 5, 2, 15),
365 F(19200000, P_XO, 1, 0, 0),
366 F(24000000, P_GPLL0, 5, 1, 5),
367 F(32000000, P_GPLL0, 1, 4, 75),
368 F(40000000, P_GPLL0, 15, 0, 0),
369 F(46400000, P_GPLL0, 1, 29, 375),
370 F(48000000, P_GPLL0, 12.5, 0, 0),
371 F(51200000, P_GPLL0, 1, 32, 375),
372 F(56000000, P_GPLL0, 1, 7, 75),
373 F(58982400, P_GPLL0, 1, 1536, 15625),
374 F(60000000, P_GPLL0, 10, 0, 0),
375 F(63160000, P_GPLL0, 9.5, 0, 0),
376 { }
377};
378
379static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
380 .cmd_rcgr = 0x068c,
381 .mnd_width = 16,
382 .hid_width = 5,
383 .parent_map = gcc_xo_gpll0_map,
384 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
385 .clkr.hw.init = &(struct clk_init_data)
386 {
387 .name = "blsp1_uart1_apps_clk_src",
388 .parent_names = gcc_xo_gpll0,
389 .num_parents = 2,
390 .ops = &clk_rcg2_ops,
391 },
392};
393
394static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
395 .cmd_rcgr = 0x070c,
396 .mnd_width = 16,
397 .hid_width = 5,
398 .parent_map = gcc_xo_gpll0_map,
399 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
400 .clkr.hw.init = &(struct clk_init_data)
401 {
402 .name = "blsp1_uart2_apps_clk_src",
403 .parent_names = gcc_xo_gpll0,
404 .num_parents = 2,
405 .ops = &clk_rcg2_ops,
406 },
407};
408
409static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
410 .cmd_rcgr = 0x078c,
411 .mnd_width = 16,
412 .hid_width = 5,
413 .parent_map = gcc_xo_gpll0_map,
414 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
415 .clkr.hw.init = &(struct clk_init_data)
416 {
417 .name = "blsp1_uart3_apps_clk_src",
418 .parent_names = gcc_xo_gpll0,
419 .num_parents = 2,
420 .ops = &clk_rcg2_ops,
421 },
422};
423
424static struct clk_rcg2 blsp1_uart4_apps_clk_src = {
425 .cmd_rcgr = 0x080c,
426 .mnd_width = 16,
427 .hid_width = 5,
428 .parent_map = gcc_xo_gpll0_map,
429 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
430 .clkr.hw.init = &(struct clk_init_data)
431 {
432 .name = "blsp1_uart4_apps_clk_src",
433 .parent_names = gcc_xo_gpll0,
434 .num_parents = 2,
435 .ops = &clk_rcg2_ops,
436 },
437};
438
439static struct clk_rcg2 blsp1_uart5_apps_clk_src = {
440 .cmd_rcgr = 0x088c,
441 .mnd_width = 16,
442 .hid_width = 5,
443 .parent_map = gcc_xo_gpll0_map,
444 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
445 .clkr.hw.init = &(struct clk_init_data)
446 {
447 .name = "blsp1_uart5_apps_clk_src",
448 .parent_names = gcc_xo_gpll0,
449 .num_parents = 2,
450 .ops = &clk_rcg2_ops,
451 },
452};
453
454static struct clk_rcg2 blsp1_uart6_apps_clk_src = {
455 .cmd_rcgr = 0x090c,
456 .mnd_width = 16,
457 .hid_width = 5,
458 .parent_map = gcc_xo_gpll0_map,
459 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
460 .clkr.hw.init = &(struct clk_init_data)
461 {
462 .name = "blsp1_uart6_apps_clk_src",
463 .parent_names = gcc_xo_gpll0,
464 .num_parents = 2,
465 .ops = &clk_rcg2_ops,
466 },
467};
468
469static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
470 .cmd_rcgr = 0x09a0,
471 .hid_width = 5,
472 .parent_map = gcc_xo_gpll0_map,
473 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
474 .clkr.hw.init = &(struct clk_init_data)
475 {
476 .name = "blsp2_qup1_i2c_apps_clk_src",
477 .parent_names = gcc_xo_gpll0,
478 .num_parents = 2,
479 .ops = &clk_rcg2_ops,
480 },
481};
482
483static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
484 .cmd_rcgr = 0x098c,
485 .mnd_width = 8,
486 .hid_width = 5,
487 .parent_map = gcc_xo_gpll0_map,
488 .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
489 .clkr.hw.init = &(struct clk_init_data)
490 {
491 .name = "blsp2_qup1_spi_apps_clk_src",
492 .parent_names = gcc_xo_gpll0,
493 .num_parents = 2,
494 .ops = &clk_rcg2_ops,
495 },
496};
497
498static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
499 .cmd_rcgr = 0x0a20,
500 .hid_width = 5,
501 .parent_map = gcc_xo_gpll0_map,
502 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
503 .clkr.hw.init = &(struct clk_init_data)
504 {
505 .name = "blsp2_qup2_i2c_apps_clk_src",
506 .parent_names = gcc_xo_gpll0,
507 .num_parents = 2,
508 .ops = &clk_rcg2_ops,
509 },
510};
511
512static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
513 .cmd_rcgr = 0x0a0c,
514 .mnd_width = 8,
515 .hid_width = 5,
516 .parent_map = gcc_xo_gpll0_map,
517 .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
518 .clkr.hw.init = &(struct clk_init_data)
519 {
520 .name = "blsp2_qup2_spi_apps_clk_src",
521 .parent_names = gcc_xo_gpll0,
522 .num_parents = 2,
523 .ops = &clk_rcg2_ops,
524 },
525};
526
527static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
528 .cmd_rcgr = 0x0aa0,
529 .hid_width = 5,
530 .parent_map = gcc_xo_gpll0_map,
531 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
532 .clkr.hw.init = &(struct clk_init_data)
533 {
534 .name = "blsp2_qup3_i2c_apps_clk_src",
535 .parent_names = gcc_xo_gpll0,
536 .num_parents = 2,
537 .ops = &clk_rcg2_ops,
538 },
539};
540
541static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
542 .cmd_rcgr = 0x0a8c,
543 .mnd_width = 8,
544 .hid_width = 5,
545 .parent_map = gcc_xo_gpll0_map,
546 .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
547 .clkr.hw.init = &(struct clk_init_data)
548 {
549 .name = "blsp2_qup3_spi_apps_clk_src",
550 .parent_names = gcc_xo_gpll0,
551 .num_parents = 2,
552 .ops = &clk_rcg2_ops,
553 },
554};
555
556static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
557 .cmd_rcgr = 0x0b20,
558 .hid_width = 5,
559 .parent_map = gcc_xo_gpll0_map,
560 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
561 .clkr.hw.init = &(struct clk_init_data)
562 {
563 .name = "blsp2_qup4_i2c_apps_clk_src",
564 .parent_names = gcc_xo_gpll0,
565 .num_parents = 2,
566 .ops = &clk_rcg2_ops,
567 },
568};
569
570static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
571 .cmd_rcgr = 0x0b0c,
572 .mnd_width = 8,
573 .hid_width = 5,
574 .parent_map = gcc_xo_gpll0_map,
575 .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
576 .clkr.hw.init = &(struct clk_init_data)
577 {
578 .name = "blsp2_qup4_spi_apps_clk_src",
579 .parent_names = gcc_xo_gpll0,
580 .num_parents = 2,
581 .ops = &clk_rcg2_ops,
582 },
583};
584
585static struct clk_rcg2 blsp2_qup5_i2c_apps_clk_src = {
586 .cmd_rcgr = 0x0ba0,
587 .hid_width = 5,
588 .parent_map = gcc_xo_gpll0_map,
589 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
590 .clkr.hw.init = &(struct clk_init_data)
591 {
592 .name = "blsp2_qup5_i2c_apps_clk_src",
593 .parent_names = gcc_xo_gpll0,
594 .num_parents = 2,
595 .ops = &clk_rcg2_ops,
596 },
597};
598
599static struct clk_rcg2 blsp2_qup5_spi_apps_clk_src = {
600 .cmd_rcgr = 0x0b8c,
601 .mnd_width = 8,
602 .hid_width = 5,
603 .parent_map = gcc_xo_gpll0_map,
604 .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
605 .clkr.hw.init = &(struct clk_init_data)
606 {
607 .name = "blsp2_qup5_spi_apps_clk_src",
608 .parent_names = gcc_xo_gpll0,
609 .num_parents = 2,
610 .ops = &clk_rcg2_ops,
611 },
612};
613
614static struct clk_rcg2 blsp2_qup6_i2c_apps_clk_src = {
615 .cmd_rcgr = 0x0c20,
616 .hid_width = 5,
617 .parent_map = gcc_xo_gpll0_map,
618 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
619 .clkr.hw.init = &(struct clk_init_data)
620 {
621 .name = "blsp2_qup6_i2c_apps_clk_src",
622 .parent_names = gcc_xo_gpll0,
623 .num_parents = 2,
624 .ops = &clk_rcg2_ops,
625 },
626};
627
628static struct clk_rcg2 blsp2_qup6_spi_apps_clk_src = {
629 .cmd_rcgr = 0x0c0c,
630 .mnd_width = 8,
631 .hid_width = 5,
632 .parent_map = gcc_xo_gpll0_map,
633 .freq_tbl = ftbl_blspqup_spi_apps_clk_src,
634 .clkr.hw.init = &(struct clk_init_data)
635 {
636 .name = "blsp2_qup6_spi_apps_clk_src",
637 .parent_names = gcc_xo_gpll0,
638 .num_parents = 2,
639 .ops = &clk_rcg2_ops,
640 },
641};
642
643static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
644 .cmd_rcgr = 0x09cc,
645 .mnd_width = 16,
646 .hid_width = 5,
647 .parent_map = gcc_xo_gpll0_map,
648 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
649 .clkr.hw.init = &(struct clk_init_data)
650 {
651 .name = "blsp2_uart1_apps_clk_src",
652 .parent_names = gcc_xo_gpll0,
653 .num_parents = 2,
654 .ops = &clk_rcg2_ops,
655 },
656};
657
658static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
659 .cmd_rcgr = 0x0a4c,
660 .mnd_width = 16,
661 .hid_width = 5,
662 .parent_map = gcc_xo_gpll0_map,
663 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
664 .clkr.hw.init = &(struct clk_init_data)
665 {
666 .name = "blsp2_uart2_apps_clk_src",
667 .parent_names = gcc_xo_gpll0,
668 .num_parents = 2,
669 .ops = &clk_rcg2_ops,
670 },
671};
672
673static struct clk_rcg2 blsp2_uart3_apps_clk_src = {
674 .cmd_rcgr = 0x0acc,
675 .mnd_width = 16,
676 .hid_width = 5,
677 .parent_map = gcc_xo_gpll0_map,
678 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
679 .clkr.hw.init = &(struct clk_init_data)
680 {
681 .name = "blsp2_uart3_apps_clk_src",
682 .parent_names = gcc_xo_gpll0,
683 .num_parents = 2,
684 .ops = &clk_rcg2_ops,
685 },
686};
687
688static struct clk_rcg2 blsp2_uart4_apps_clk_src = {
689 .cmd_rcgr = 0x0b4c,
690 .mnd_width = 16,
691 .hid_width = 5,
692 .parent_map = gcc_xo_gpll0_map,
693 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
694 .clkr.hw.init = &(struct clk_init_data)
695 {
696 .name = "blsp2_uart4_apps_clk_src",
697 .parent_names = gcc_xo_gpll0,
698 .num_parents = 2,
699 .ops = &clk_rcg2_ops,
700 },
701};
702
703static struct clk_rcg2 blsp2_uart5_apps_clk_src = {
704 .cmd_rcgr = 0x0bcc,
705 .mnd_width = 16,
706 .hid_width = 5,
707 .parent_map = gcc_xo_gpll0_map,
708 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
709 .clkr.hw.init = &(struct clk_init_data)
710 {
711 .name = "blsp2_uart5_apps_clk_src",
712 .parent_names = gcc_xo_gpll0,
713 .num_parents = 2,
714 .ops = &clk_rcg2_ops,
715 },
716};
717
718static struct clk_rcg2 blsp2_uart6_apps_clk_src = {
719 .cmd_rcgr = 0x0c4c,
720 .mnd_width = 16,
721 .hid_width = 5,
722 .parent_map = gcc_xo_gpll0_map,
723 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
724 .clkr.hw.init = &(struct clk_init_data)
725 {
726 .name = "blsp2_uart6_apps_clk_src",
727 .parent_names = gcc_xo_gpll0,
728 .num_parents = 2,
729 .ops = &clk_rcg2_ops,
730 },
731};
732
733static struct freq_tbl ftbl_gp1_clk_src[] = {
734 F(19200000, P_XO, 1, 0, 0),
735 F(100000000, P_GPLL0, 6, 0, 0),
736 F(200000000, P_GPLL0, 3, 0, 0),
737 { }
738};
739
740static struct clk_rcg2 gp1_clk_src = {
741 .cmd_rcgr = 0x1904,
742 .mnd_width = 8,
743 .hid_width = 5,
744 .parent_map = gcc_xo_gpll0_map,
745 .freq_tbl = ftbl_gp1_clk_src,
746 .clkr.hw.init = &(struct clk_init_data)
747 {
748 .name = "gp1_clk_src",
749 .parent_names = gcc_xo_gpll0,
750 .num_parents = 2,
751 .ops = &clk_rcg2_ops,
752 },
753};
754
755static struct freq_tbl ftbl_gp2_clk_src[] = {
756 F(19200000, P_XO, 1, 0, 0),
757 F(100000000, P_GPLL0, 6, 0, 0),
758 F(200000000, P_GPLL0, 3, 0, 0),
759 { }
760};
761
762static struct clk_rcg2 gp2_clk_src = {
763 .cmd_rcgr = 0x1944,
764 .mnd_width = 8,
765 .hid_width = 5,
766 .parent_map = gcc_xo_gpll0_map,
767 .freq_tbl = ftbl_gp2_clk_src,
768 .clkr.hw.init = &(struct clk_init_data)
769 {
770 .name = "gp2_clk_src",
771 .parent_names = gcc_xo_gpll0,
772 .num_parents = 2,
773 .ops = &clk_rcg2_ops,
774 },
775};
776
777static struct freq_tbl ftbl_gp3_clk_src[] = {
778 F(19200000, P_XO, 1, 0, 0),
779 F(100000000, P_GPLL0, 6, 0, 0),
780 F(200000000, P_GPLL0, 3, 0, 0),
781 { }
782};
783
784static struct clk_rcg2 gp3_clk_src = {
785 .cmd_rcgr = 0x1984,
786 .mnd_width = 8,
787 .hid_width = 5,
788 .parent_map = gcc_xo_gpll0_map,
789 .freq_tbl = ftbl_gp3_clk_src,
790 .clkr.hw.init = &(struct clk_init_data)
791 {
792 .name = "gp3_clk_src",
793 .parent_names = gcc_xo_gpll0,
794 .num_parents = 2,
795 .ops = &clk_rcg2_ops,
796 },
797};
798
799static struct freq_tbl ftbl_pcie_0_aux_clk_src[] = {
800 F(1011000, P_XO, 1, 1, 19),
801 { }
802};
803
804static struct clk_rcg2 pcie_0_aux_clk_src = {
805 .cmd_rcgr = 0x1b00,
806 .mnd_width = 8,
807 .hid_width = 5,
808 .freq_tbl = ftbl_pcie_0_aux_clk_src,
809 .clkr.hw.init = &(struct clk_init_data)
810 {
811 .name = "pcie_0_aux_clk_src",
812 .parent_names = (const char *[]) { "xo" },
813 .num_parents = 1,
814 .ops = &clk_rcg2_ops,
815 },
816};
817
818static struct freq_tbl ftbl_pcie_pipe_clk_src[] = {
819 F(125000000, P_XO, 1, 0, 0),
820 { }
821};
822
823static struct clk_rcg2 pcie_0_pipe_clk_src = {
824 .cmd_rcgr = 0x1adc,
825 .hid_width = 5,
826 .freq_tbl = ftbl_pcie_pipe_clk_src,
827 .clkr.hw.init = &(struct clk_init_data)
828 {
829 .name = "pcie_0_pipe_clk_src",
830 .parent_names = (const char *[]) { "xo" },
831 .num_parents = 1,
832 .ops = &clk_rcg2_ops,
833 },
834};
835
836static struct freq_tbl ftbl_pcie_1_aux_clk_src[] = {
837 F(1011000, P_XO, 1, 1, 19),
838 { }
839};
840
841static struct clk_rcg2 pcie_1_aux_clk_src = {
842 .cmd_rcgr = 0x1b80,
843 .mnd_width = 8,
844 .hid_width = 5,
845 .freq_tbl = ftbl_pcie_1_aux_clk_src,
846 .clkr.hw.init = &(struct clk_init_data)
847 {
848 .name = "pcie_1_aux_clk_src",
849 .parent_names = (const char *[]) { "xo" },
850 .num_parents = 1,
851 .ops = &clk_rcg2_ops,
852 },
853};
854
855static struct clk_rcg2 pcie_1_pipe_clk_src = {
856 .cmd_rcgr = 0x1b5c,
857 .hid_width = 5,
858 .freq_tbl = ftbl_pcie_pipe_clk_src,
859 .clkr.hw.init = &(struct clk_init_data)
860 {
861 .name = "pcie_1_pipe_clk_src",
862 .parent_names = (const char *[]) { "xo" },
863 .num_parents = 1,
864 .ops = &clk_rcg2_ops,
865 },
866};
867
868static struct freq_tbl ftbl_pdm2_clk_src[] = {
869 F(60000000, P_GPLL0, 10, 0, 0),
870 { }
871};
872
873static struct clk_rcg2 pdm2_clk_src = {
874 .cmd_rcgr = 0x0cd0,
875 .hid_width = 5,
876 .parent_map = gcc_xo_gpll0_map,
877 .freq_tbl = ftbl_pdm2_clk_src,
878 .clkr.hw.init = &(struct clk_init_data)
879 {
880 .name = "pdm2_clk_src",
881 .parent_names = gcc_xo_gpll0,
882 .num_parents = 2,
883 .ops = &clk_rcg2_ops,
884 },
885};
886
887static struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
888 F(144000, P_XO, 16, 3, 25),
889 F(400000, P_XO, 12, 1, 4),
890 F(20000000, P_GPLL0, 15, 1, 2),
891 F(25000000, P_GPLL0, 12, 1, 2),
892 F(50000000, P_GPLL0, 12, 0, 0),
893 F(100000000, P_GPLL0, 6, 0, 0),
894 F(192000000, P_GPLL4, 2, 0, 0),
895 F(384000000, P_GPLL4, 1, 0, 0),
896 { }
897};
898
899static struct clk_rcg2 sdcc1_apps_clk_src = {
900 .cmd_rcgr = 0x04d0,
901 .mnd_width = 8,
902 .hid_width = 5,
903 .parent_map = gcc_xo_gpll0_gpll4_map,
904 .freq_tbl = ftbl_sdcc1_apps_clk_src,
905 .clkr.hw.init = &(struct clk_init_data)
906 {
907 .name = "sdcc1_apps_clk_src",
908 .parent_names = gcc_xo_gpll0_gpll4,
909 .num_parents = 3,
910 .ops = &clk_rcg2_floor_ops,
911 },
912};
913
914static struct freq_tbl ftbl_sdcc2_4_apps_clk_src[] = {
915 F(144000, P_XO, 16, 3, 25),
916 F(400000, P_XO, 12, 1, 4),
917 F(20000000, P_GPLL0, 15, 1, 2),
918 F(25000000, P_GPLL0, 12, 1, 2),
919 F(50000000, P_GPLL0, 12, 0, 0),
920 F(100000000, P_GPLL0, 6, 0, 0),
921 F(200000000, P_GPLL0, 3, 0, 0),
922 { }
923};
924
925static struct clk_rcg2 sdcc2_apps_clk_src = {
926 .cmd_rcgr = 0x0510,
927 .mnd_width = 8,
928 .hid_width = 5,
929 .parent_map = gcc_xo_gpll0_map,
930 .freq_tbl = ftbl_sdcc2_4_apps_clk_src,
931 .clkr.hw.init = &(struct clk_init_data)
932 {
933 .name = "sdcc2_apps_clk_src",
934 .parent_names = gcc_xo_gpll0,
935 .num_parents = 2,
936 .ops = &clk_rcg2_floor_ops,
937 },
938};
939
940static struct clk_rcg2 sdcc3_apps_clk_src = {
941 .cmd_rcgr = 0x0550,
942 .mnd_width = 8,
943 .hid_width = 5,
944 .parent_map = gcc_xo_gpll0_map,
945 .freq_tbl = ftbl_sdcc2_4_apps_clk_src,
946 .clkr.hw.init = &(struct clk_init_data)
947 {
948 .name = "sdcc3_apps_clk_src",
949 .parent_names = gcc_xo_gpll0,
950 .num_parents = 2,
951 .ops = &clk_rcg2_floor_ops,
952 },
953};
954
955static struct clk_rcg2 sdcc4_apps_clk_src = {
956 .cmd_rcgr = 0x0590,
957 .mnd_width = 8,
958 .hid_width = 5,
959 .parent_map = gcc_xo_gpll0_map,
960 .freq_tbl = ftbl_sdcc2_4_apps_clk_src,
961 .clkr.hw.init = &(struct clk_init_data)
962 {
963 .name = "sdcc4_apps_clk_src",
964 .parent_names = gcc_xo_gpll0,
965 .num_parents = 2,
966 .ops = &clk_rcg2_floor_ops,
967 },
968};
969
970static struct freq_tbl ftbl_tsif_ref_clk_src[] = {
971 F(105500, P_XO, 1, 1, 182),
972 { }
973};
974
975static struct clk_rcg2 tsif_ref_clk_src = {
976 .cmd_rcgr = 0x0d90,
977 .mnd_width = 8,
978 .hid_width = 5,
979 .freq_tbl = ftbl_tsif_ref_clk_src,
980 .clkr.hw.init = &(struct clk_init_data)
981 {
982 .name = "tsif_ref_clk_src",
983 .parent_names = (const char *[]) { "xo" },
984 .num_parents = 1,
985 .ops = &clk_rcg2_ops,
986 },
987};
988
989static struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = {
990 F(19200000, P_XO, 1, 0, 0),
991 F(60000000, P_GPLL0, 10, 0, 0),
992 { }
993};
994
995static struct clk_rcg2 usb30_mock_utmi_clk_src = {
996 .cmd_rcgr = 0x03e8,
997 .hid_width = 5,
998 .parent_map = gcc_xo_gpll0_map,
999 .freq_tbl = ftbl_usb30_mock_utmi_clk_src,
1000 .clkr.hw.init = &(struct clk_init_data)
1001 {
1002 .name = "usb30_mock_utmi_clk_src",
1003 .parent_names = gcc_xo_gpll0,
1004 .num_parents = 2,
1005 .ops = &clk_rcg2_ops,
1006 },
1007};
1008
1009static struct freq_tbl ftbl_usb3_phy_aux_clk_src[] = {
1010 F(1200000, P_XO, 16, 0, 0),
1011 { }
1012};
1013
1014static struct clk_rcg2 usb3_phy_aux_clk_src = {
1015 .cmd_rcgr = 0x1414,
1016 .hid_width = 5,
1017 .freq_tbl = ftbl_usb3_phy_aux_clk_src,
1018 .clkr.hw.init = &(struct clk_init_data)
1019 {
1020 .name = "usb3_phy_aux_clk_src",
1021 .parent_names = (const char *[]) { "xo" },
1022 .num_parents = 1,
1023 .ops = &clk_rcg2_ops,
1024 },
1025};
1026
1027static struct freq_tbl ftbl_usb_hs_system_clk_src[] = {
1028 F(75000000, P_GPLL0, 8, 0, 0),
1029 { }
1030};
1031
1032static struct clk_rcg2 usb_hs_system_clk_src = {
1033 .cmd_rcgr = 0x0490,
1034 .hid_width = 5,
1035 .parent_map = gcc_xo_gpll0_map,
1036 .freq_tbl = ftbl_usb_hs_system_clk_src,
1037 .clkr.hw.init = &(struct clk_init_data)
1038 {
1039 .name = "usb_hs_system_clk_src",
1040 .parent_names = gcc_xo_gpll0,
1041 .num_parents = 2,
1042 .ops = &clk_rcg2_ops,
1043 },
1044};
1045
1046static struct clk_branch gcc_blsp1_ahb_clk = {
1047 .halt_reg = 0x05c4,
1048 .halt_check = BRANCH_HALT_VOTED,
1049 .clkr = {
1050 .enable_reg = 0x1484,
1051 .enable_mask = BIT(17),
1052 .hw.init = &(struct clk_init_data)
1053 {
1054 .name = "gcc_blsp1_ahb_clk",
1055 .ops = &clk_branch2_ops,
1056 },
1057 },
1058};
1059
1060static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1061 .halt_reg = 0x0648,
1062 .clkr = {
1063 .enable_reg = 0x0648,
1064 .enable_mask = BIT(0),
1065 .hw.init = &(struct clk_init_data)
1066 {
1067 .name = "gcc_blsp1_qup1_i2c_apps_clk",
1068 .parent_names = (const char *[]) {
1069 "blsp1_qup1_i2c_apps_clk_src",
1070 },
1071 .num_parents = 1,
1072 .flags = CLK_SET_RATE_PARENT,
1073 .ops = &clk_branch2_ops,
1074 },
1075 },
1076};
1077
1078static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1079 .halt_reg = 0x0644,
1080 .clkr = {
1081 .enable_reg = 0x0644,
1082 .enable_mask = BIT(0),
1083 .hw.init = &(struct clk_init_data)
1084 {
1085 .name = "gcc_blsp1_qup1_spi_apps_clk",
1086 .parent_names = (const char *[]) {
1087 "blsp1_qup1_spi_apps_clk_src",
1088 },
1089 .num_parents = 1,
1090 .flags = CLK_SET_RATE_PARENT,
1091 .ops = &clk_branch2_ops,
1092 },
1093 },
1094};
1095
1096static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1097 .halt_reg = 0x06c8,
1098 .clkr = {
1099 .enable_reg = 0x06c8,
1100 .enable_mask = BIT(0),
1101 .hw.init = &(struct clk_init_data)
1102 {
1103 .name = "gcc_blsp1_qup2_i2c_apps_clk",
1104 .parent_names = (const char *[]) {
1105 "blsp1_qup2_i2c_apps_clk_src",
1106 },
1107 .num_parents = 1,
1108 .flags = CLK_SET_RATE_PARENT,
1109 .ops = &clk_branch2_ops,
1110 },
1111 },
1112};
1113
1114static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1115 .halt_reg = 0x06c4,
1116 .clkr = {
1117 .enable_reg = 0x06c4,
1118 .enable_mask = BIT(0),
1119 .hw.init = &(struct clk_init_data)
1120 {
1121 .name = "gcc_blsp1_qup2_spi_apps_clk",
1122 .parent_names = (const char *[]) {
1123 "blsp1_qup2_spi_apps_clk_src",
1124 },
1125 .num_parents = 1,
1126 .flags = CLK_SET_RATE_PARENT,
1127 .ops = &clk_branch2_ops,
1128 },
1129 },
1130};
1131
1132static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1133 .halt_reg = 0x0748,
1134 .clkr = {
1135 .enable_reg = 0x0748,
1136 .enable_mask = BIT(0),
1137 .hw.init = &(struct clk_init_data)
1138 {
1139 .name = "gcc_blsp1_qup3_i2c_apps_clk",
1140 .parent_names = (const char *[]) {
1141 "blsp1_qup3_i2c_apps_clk_src",
1142 },
1143 .num_parents = 1,
1144 .flags = CLK_SET_RATE_PARENT,
1145 .ops = &clk_branch2_ops,
1146 },
1147 },
1148};
1149
1150static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1151 .halt_reg = 0x0744,
1152 .clkr = {
1153 .enable_reg = 0x0744,
1154 .enable_mask = BIT(0),
1155 .hw.init = &(struct clk_init_data)
1156 {
1157 .name = "gcc_blsp1_qup3_spi_apps_clk",
1158 .parent_names = (const char *[]) {
1159 "blsp1_qup3_spi_apps_clk_src",
1160 },
1161 .num_parents = 1,
1162 .flags = CLK_SET_RATE_PARENT,
1163 .ops = &clk_branch2_ops,
1164 },
1165 },
1166};
1167
1168static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1169 .halt_reg = 0x07c8,
1170 .clkr = {
1171 .enable_reg = 0x07c8,
1172 .enable_mask = BIT(0),
1173 .hw.init = &(struct clk_init_data)
1174 {
1175 .name = "gcc_blsp1_qup4_i2c_apps_clk",
1176 .parent_names = (const char *[]) {
1177 "blsp1_qup4_i2c_apps_clk_src",
1178 },
1179 .num_parents = 1,
1180 .flags = CLK_SET_RATE_PARENT,
1181 .ops = &clk_branch2_ops,
1182 },
1183 },
1184};
1185
1186static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1187 .halt_reg = 0x07c4,
1188 .clkr = {
1189 .enable_reg = 0x07c4,
1190 .enable_mask = BIT(0),
1191 .hw.init = &(struct clk_init_data)
1192 {
1193 .name = "gcc_blsp1_qup4_spi_apps_clk",
1194 .parent_names = (const char *[]) {
1195 "blsp1_qup4_spi_apps_clk_src",
1196 },
1197 .num_parents = 1,
1198 .flags = CLK_SET_RATE_PARENT,
1199 .ops = &clk_branch2_ops,
1200 },
1201 },
1202};
1203
1204static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
1205 .halt_reg = 0x0848,
1206 .clkr = {
1207 .enable_reg = 0x0848,
1208 .enable_mask = BIT(0),
1209 .hw.init = &(struct clk_init_data)
1210 {
1211 .name = "gcc_blsp1_qup5_i2c_apps_clk",
1212 .parent_names = (const char *[]) {
1213 "blsp1_qup5_i2c_apps_clk_src",
1214 },
1215 .num_parents = 1,
1216 .flags = CLK_SET_RATE_PARENT,
1217 .ops = &clk_branch2_ops,
1218 },
1219 },
1220};
1221
1222static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
1223 .halt_reg = 0x0844,
1224 .clkr = {
1225 .enable_reg = 0x0844,
1226 .enable_mask = BIT(0),
1227 .hw.init = &(struct clk_init_data)
1228 {
1229 .name = "gcc_blsp1_qup5_spi_apps_clk",
1230 .parent_names = (const char *[]) {
1231 "blsp1_qup5_spi_apps_clk_src",
1232 },
1233 .num_parents = 1,
1234 .flags = CLK_SET_RATE_PARENT,
1235 .ops = &clk_branch2_ops,
1236 },
1237 },
1238};
1239
1240static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
1241 .halt_reg = 0x08c8,
1242 .clkr = {
1243 .enable_reg = 0x08c8,
1244 .enable_mask = BIT(0),
1245 .hw.init = &(struct clk_init_data)
1246 {
1247 .name = "gcc_blsp1_qup6_i2c_apps_clk",
1248 .parent_names = (const char *[]) {
1249 "blsp1_qup6_i2c_apps_clk_src",
1250 },
1251 .num_parents = 1,
1252 .flags = CLK_SET_RATE_PARENT,
1253 .ops = &clk_branch2_ops,
1254 },
1255 },
1256};
1257
1258static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
1259 .halt_reg = 0x08c4,
1260 .clkr = {
1261 .enable_reg = 0x08c4,
1262 .enable_mask = BIT(0),
1263 .hw.init = &(struct clk_init_data)
1264 {
1265 .name = "gcc_blsp1_qup6_spi_apps_clk",
1266 .parent_names = (const char *[]) {
1267 "blsp1_qup6_spi_apps_clk_src",
1268 },
1269 .num_parents = 1,
1270 .flags = CLK_SET_RATE_PARENT,
1271 .ops = &clk_branch2_ops,
1272 },
1273 },
1274};
1275
1276static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1277 .halt_reg = 0x0684,
1278 .clkr = {
1279 .enable_reg = 0x0684,
1280 .enable_mask = BIT(0),
1281 .hw.init = &(struct clk_init_data)
1282 {
1283 .name = "gcc_blsp1_uart1_apps_clk",
1284 .parent_names = (const char *[]) {
1285 "blsp1_uart1_apps_clk_src",
1286 },
1287 .num_parents = 1,
1288 .flags = CLK_SET_RATE_PARENT,
1289 .ops = &clk_branch2_ops,
1290 },
1291 },
1292};
1293
1294static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1295 .halt_reg = 0x0704,
1296 .clkr = {
1297 .enable_reg = 0x0704,
1298 .enable_mask = BIT(0),
1299 .hw.init = &(struct clk_init_data)
1300 {
1301 .name = "gcc_blsp1_uart2_apps_clk",
1302 .parent_names = (const char *[]) {
1303 "blsp1_uart2_apps_clk_src",
1304 },
1305 .num_parents = 1,
1306 .flags = CLK_SET_RATE_PARENT,
1307 .ops = &clk_branch2_ops,
1308 },
1309 },
1310};
1311
1312static struct clk_branch gcc_blsp1_uart3_apps_clk = {
1313 .halt_reg = 0x0784,
1314 .clkr = {
1315 .enable_reg = 0x0784,
1316 .enable_mask = BIT(0),
1317 .hw.init = &(struct clk_init_data)
1318 {
1319 .name = "gcc_blsp1_uart3_apps_clk",
1320 .parent_names = (const char *[]) {
1321 "blsp1_uart3_apps_clk_src",
1322 },
1323 .num_parents = 1,
1324 .flags = CLK_SET_RATE_PARENT,
1325 .ops = &clk_branch2_ops,
1326 },
1327 },
1328};
1329
1330static struct clk_branch gcc_blsp1_uart4_apps_clk = {
1331 .halt_reg = 0x0804,
1332 .clkr = {
1333 .enable_reg = 0x0804,
1334 .enable_mask = BIT(0),
1335 .hw.init = &(struct clk_init_data)
1336 {
1337 .name = "gcc_blsp1_uart4_apps_clk",
1338 .parent_names = (const char *[]) {
1339 "blsp1_uart4_apps_clk_src",
1340 },
1341 .num_parents = 1,
1342 .flags = CLK_SET_RATE_PARENT,
1343 .ops = &clk_branch2_ops,
1344 },
1345 },
1346};
1347
1348static struct clk_branch gcc_blsp1_uart5_apps_clk = {
1349 .halt_reg = 0x0884,
1350 .clkr = {
1351 .enable_reg = 0x0884,
1352 .enable_mask = BIT(0),
1353 .hw.init = &(struct clk_init_data)
1354 {
1355 .name = "gcc_blsp1_uart5_apps_clk",
1356 .parent_names = (const char *[]) {
1357 "blsp1_uart5_apps_clk_src",
1358 },
1359 .num_parents = 1,
1360 .flags = CLK_SET_RATE_PARENT,
1361 .ops = &clk_branch2_ops,
1362 },
1363 },
1364};
1365
1366static struct clk_branch gcc_blsp1_uart6_apps_clk = {
1367 .halt_reg = 0x0904,
1368 .clkr = {
1369 .enable_reg = 0x0904,
1370 .enable_mask = BIT(0),
1371 .hw.init = &(struct clk_init_data)
1372 {
1373 .name = "gcc_blsp1_uart6_apps_clk",
1374 .parent_names = (const char *[]) {
1375 "blsp1_uart6_apps_clk_src",
1376 },
1377 .num_parents = 1,
1378 .flags = CLK_SET_RATE_PARENT,
1379 .ops = &clk_branch2_ops,
1380 },
1381 },
1382};
1383
1384static struct clk_branch gcc_blsp2_ahb_clk = {
1385 .halt_reg = 0x0944,
1386 .halt_check = BRANCH_HALT_VOTED,
1387 .clkr = {
1388 .enable_reg = 0x1484,
1389 .enable_mask = BIT(15),
1390 .hw.init = &(struct clk_init_data)
1391 {
1392 .name = "gcc_blsp2_ahb_clk",
1393 .ops = &clk_branch2_ops,
1394 },
1395 },
1396};
1397
1398static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
1399 .halt_reg = 0x0988,
1400 .clkr = {
1401 .enable_reg = 0x0988,
1402 .enable_mask = BIT(0),
1403 .hw.init = &(struct clk_init_data)
1404 {
1405 .name = "gcc_blsp2_qup1_i2c_apps_clk",
1406 .parent_names = (const char *[]) {
1407 "blsp2_qup1_i2c_apps_clk_src",
1408 },
1409 .num_parents = 1,
1410 .flags = CLK_SET_RATE_PARENT,
1411 .ops = &clk_branch2_ops,
1412 },
1413 },
1414};
1415
1416static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
1417 .halt_reg = 0x0984,
1418 .clkr = {
1419 .enable_reg = 0x0984,
1420 .enable_mask = BIT(0),
1421 .hw.init = &(struct clk_init_data)
1422 {
1423 .name = "gcc_blsp2_qup1_spi_apps_clk",
1424 .parent_names = (const char *[]) {
1425 "blsp2_qup1_spi_apps_clk_src",
1426 },
1427 .num_parents = 1,
1428 .flags = CLK_SET_RATE_PARENT,
1429 .ops = &clk_branch2_ops,
1430 },
1431 },
1432};
1433
1434static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
1435 .halt_reg = 0x0a08,
1436 .clkr = {
1437 .enable_reg = 0x0a08,
1438 .enable_mask = BIT(0),
1439 .hw.init = &(struct clk_init_data)
1440 {
1441 .name = "gcc_blsp2_qup2_i2c_apps_clk",
1442 .parent_names = (const char *[]) {
1443 "blsp2_qup2_i2c_apps_clk_src",
1444 },
1445 .num_parents = 1,
1446 .flags = CLK_SET_RATE_PARENT,
1447 .ops = &clk_branch2_ops,
1448 },
1449 },
1450};
1451
1452static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
1453 .halt_reg = 0x0a04,
1454 .clkr = {
1455 .enable_reg = 0x0a04,
1456 .enable_mask = BIT(0),
1457 .hw.init = &(struct clk_init_data)
1458 {
1459 .name = "gcc_blsp2_qup2_spi_apps_clk",
1460 .parent_names = (const char *[]) {
1461 "blsp2_qup2_spi_apps_clk_src",
1462 },
1463 .num_parents = 1,
1464 .flags = CLK_SET_RATE_PARENT,
1465 .ops = &clk_branch2_ops,
1466 },
1467 },
1468};
1469
1470static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
1471 .halt_reg = 0x0a88,
1472 .clkr = {
1473 .enable_reg = 0x0a88,
1474 .enable_mask = BIT(0),
1475 .hw.init = &(struct clk_init_data)
1476 {
1477 .name = "gcc_blsp2_qup3_i2c_apps_clk",
1478 .parent_names = (const char *[]) {
1479 "blsp2_qup3_i2c_apps_clk_src",
1480 },
1481 .num_parents = 1,
1482 .flags = CLK_SET_RATE_PARENT,
1483 .ops = &clk_branch2_ops,
1484 },
1485 },
1486};
1487
1488static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
1489 .halt_reg = 0x0a84,
1490 .clkr = {
1491 .enable_reg = 0x0a84,
1492 .enable_mask = BIT(0),
1493 .hw.init = &(struct clk_init_data)
1494 {
1495 .name = "gcc_blsp2_qup3_spi_apps_clk",
1496 .parent_names = (const char *[]) {
1497 "blsp2_qup3_spi_apps_clk_src",
1498 },
1499 .num_parents = 1,
1500 .flags = CLK_SET_RATE_PARENT,
1501 .ops = &clk_branch2_ops,
1502 },
1503 },
1504};
1505
1506static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
1507 .halt_reg = 0x0b08,
1508 .clkr = {
1509 .enable_reg = 0x0b08,
1510 .enable_mask = BIT(0),
1511 .hw.init = &(struct clk_init_data)
1512 {
1513 .name = "gcc_blsp2_qup4_i2c_apps_clk",
1514 .parent_names = (const char *[]) {
1515 "blsp2_qup4_i2c_apps_clk_src",
1516 },
1517 .num_parents = 1,
1518 .flags = CLK_SET_RATE_PARENT,
1519 .ops = &clk_branch2_ops,
1520 },
1521 },
1522};
1523
1524static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
1525 .halt_reg = 0x0b04,
1526 .clkr = {
1527 .enable_reg = 0x0b04,
1528 .enable_mask = BIT(0),
1529 .hw.init = &(struct clk_init_data)
1530 {
1531 .name = "gcc_blsp2_qup4_spi_apps_clk",
1532 .parent_names = (const char *[]) {
1533 "blsp2_qup4_spi_apps_clk_src",
1534 },
1535 .num_parents = 1,
1536 .flags = CLK_SET_RATE_PARENT,
1537 .ops = &clk_branch2_ops,
1538 },
1539 },
1540};
1541
1542static struct clk_branch gcc_blsp2_qup5_i2c_apps_clk = {
1543 .halt_reg = 0x0b88,
1544 .clkr = {
1545 .enable_reg = 0x0b88,
1546 .enable_mask = BIT(0),
1547 .hw.init = &(struct clk_init_data)
1548 {
1549 .name = "gcc_blsp2_qup5_i2c_apps_clk",
1550 .parent_names = (const char *[]) {
1551 "blsp2_qup5_i2c_apps_clk_src",
1552 },
1553 .num_parents = 1,
1554 .flags = CLK_SET_RATE_PARENT,
1555 .ops = &clk_branch2_ops,
1556 },
1557 },
1558};
1559
1560static struct clk_branch gcc_blsp2_qup5_spi_apps_clk = {
1561 .halt_reg = 0x0b84,
1562 .clkr = {
1563 .enable_reg = 0x0b84,
1564 .enable_mask = BIT(0),
1565 .hw.init = &(struct clk_init_data)
1566 {
1567 .name = "gcc_blsp2_qup5_spi_apps_clk",
1568 .parent_names = (const char *[]) {
1569 "blsp2_qup5_spi_apps_clk_src",
1570 },
1571 .num_parents = 1,
1572 .flags = CLK_SET_RATE_PARENT,
1573 .ops = &clk_branch2_ops,
1574 },
1575 },
1576};
1577
1578static struct clk_branch gcc_blsp2_qup6_i2c_apps_clk = {
1579 .halt_reg = 0x0c08,
1580 .clkr = {
1581 .enable_reg = 0x0c08,
1582 .enable_mask = BIT(0),
1583 .hw.init = &(struct clk_init_data)
1584 {
1585 .name = "gcc_blsp2_qup6_i2c_apps_clk",
1586 .parent_names = (const char *[]) {
1587 "blsp2_qup6_i2c_apps_clk_src",
1588 },
1589 .num_parents = 1,
1590 .flags = CLK_SET_RATE_PARENT,
1591 .ops = &clk_branch2_ops,
1592 },
1593 },
1594};
1595
1596static struct clk_branch gcc_blsp2_qup6_spi_apps_clk = {
1597 .halt_reg = 0x0c04,
1598 .clkr = {
1599 .enable_reg = 0x0c04,
1600 .enable_mask = BIT(0),
1601 .hw.init = &(struct clk_init_data)
1602 {
1603 .name = "gcc_blsp2_qup6_spi_apps_clk",
1604 .parent_names = (const char *[]) {
1605 "blsp2_qup6_spi_apps_clk_src",
1606 },
1607 .num_parents = 1,
1608 .flags = CLK_SET_RATE_PARENT,
1609 .ops = &clk_branch2_ops,
1610 },
1611 },
1612};
1613
1614static struct clk_branch gcc_blsp2_uart1_apps_clk = {
1615 .halt_reg = 0x09c4,
1616 .clkr = {
1617 .enable_reg = 0x09c4,
1618 .enable_mask = BIT(0),
1619 .hw.init = &(struct clk_init_data)
1620 {
1621 .name = "gcc_blsp2_uart1_apps_clk",
1622 .parent_names = (const char *[]) {
1623 "blsp2_uart1_apps_clk_src",
1624 },
1625 .num_parents = 1,
1626 .flags = CLK_SET_RATE_PARENT,
1627 .ops = &clk_branch2_ops,
1628 },
1629 },
1630};
1631
1632static struct clk_branch gcc_blsp2_uart2_apps_clk = {
1633 .halt_reg = 0x0a44,
1634 .clkr = {
1635 .enable_reg = 0x0a44,
1636 .enable_mask = BIT(0),
1637 .hw.init = &(struct clk_init_data)
1638 {
1639 .name = "gcc_blsp2_uart2_apps_clk",
1640 .parent_names = (const char *[]) {
1641 "blsp2_uart2_apps_clk_src",
1642 },
1643 .num_parents = 1,
1644 .flags = CLK_SET_RATE_PARENT,
1645 .ops = &clk_branch2_ops,
1646 },
1647 },
1648};
1649
1650static struct clk_branch gcc_blsp2_uart3_apps_clk = {
1651 .halt_reg = 0x0ac4,
1652 .clkr = {
1653 .enable_reg = 0x0ac4,
1654 .enable_mask = BIT(0),
1655 .hw.init = &(struct clk_init_data)
1656 {
1657 .name = "gcc_blsp2_uart3_apps_clk",
1658 .parent_names = (const char *[]) {
1659 "blsp2_uart3_apps_clk_src",
1660 },
1661 .num_parents = 1,
1662 .flags = CLK_SET_RATE_PARENT,
1663 .ops = &clk_branch2_ops,
1664 },
1665 },
1666};
1667
1668static struct clk_branch gcc_blsp2_uart4_apps_clk = {
1669 .halt_reg = 0x0b44,
1670 .clkr = {
1671 .enable_reg = 0x0b44,
1672 .enable_mask = BIT(0),
1673 .hw.init = &(struct clk_init_data)
1674 {
1675 .name = "gcc_blsp2_uart4_apps_clk",
1676 .parent_names = (const char *[]) {
1677 "blsp2_uart4_apps_clk_src",
1678 },
1679 .num_parents = 1,
1680 .flags = CLK_SET_RATE_PARENT,
1681 .ops = &clk_branch2_ops,
1682 },
1683 },
1684};
1685
1686static struct clk_branch gcc_blsp2_uart5_apps_clk = {
1687 .halt_reg = 0x0bc4,
1688 .clkr = {
1689 .enable_reg = 0x0bc4,
1690 .enable_mask = BIT(0),
1691 .hw.init = &(struct clk_init_data)
1692 {
1693 .name = "gcc_blsp2_uart5_apps_clk",
1694 .parent_names = (const char *[]) {
1695 "blsp2_uart5_apps_clk_src",
1696 },
1697 .num_parents = 1,
1698 .flags = CLK_SET_RATE_PARENT,
1699 .ops = &clk_branch2_ops,
1700 },
1701 },
1702};
1703
1704static struct clk_branch gcc_blsp2_uart6_apps_clk = {
1705 .halt_reg = 0x0c44,
1706 .clkr = {
1707 .enable_reg = 0x0c44,
1708 .enable_mask = BIT(0),
1709 .hw.init = &(struct clk_init_data)
1710 {
1711 .name = "gcc_blsp2_uart6_apps_clk",
1712 .parent_names = (const char *[]) {
1713 "blsp2_uart6_apps_clk_src",
1714 },
1715 .num_parents = 1,
1716 .flags = CLK_SET_RATE_PARENT,
1717 .ops = &clk_branch2_ops,
1718 },
1719 },
1720};
1721
1722static struct clk_branch gcc_gp1_clk = {
1723 .halt_reg = 0x1900,
1724 .clkr = {
1725 .enable_reg = 0x1900,
1726 .enable_mask = BIT(0),
1727 .hw.init = &(struct clk_init_data)
1728 {
1729 .name = "gcc_gp1_clk",
1730 .parent_names = (const char *[]) {
1731 "gp1_clk_src",
1732 },
1733 .num_parents = 1,
1734 .flags = CLK_SET_RATE_PARENT,
1735 .ops = &clk_branch2_ops,
1736 },
1737 },
1738};
1739
1740static struct clk_branch gcc_gp2_clk = {
1741 .halt_reg = 0x1940,
1742 .clkr = {
1743 .enable_reg = 0x1940,
1744 .enable_mask = BIT(0),
1745 .hw.init = &(struct clk_init_data)
1746 {
1747 .name = "gcc_gp2_clk",
1748 .parent_names = (const char *[]) {
1749 "gp2_clk_src",
1750 },
1751 .num_parents = 1,
1752 .flags = CLK_SET_RATE_PARENT,
1753 .ops = &clk_branch2_ops,
1754 },
1755 },
1756};
1757
1758static struct clk_branch gcc_gp3_clk = {
1759 .halt_reg = 0x1980,
1760 .clkr = {
1761 .enable_reg = 0x1980,
1762 .enable_mask = BIT(0),
1763 .hw.init = &(struct clk_init_data)
1764 {
1765 .name = "gcc_gp3_clk",
1766 .parent_names = (const char *[]) {
1767 "gp3_clk_src",
1768 },
1769 .num_parents = 1,
1770 .flags = CLK_SET_RATE_PARENT,
1771 .ops = &clk_branch2_ops,
1772 },
1773 },
1774};
1775
1776static struct clk_branch gcc_pcie_0_aux_clk = {
1777 .halt_reg = 0x1ad4,
1778 .clkr = {
1779 .enable_reg = 0x1ad4,
1780 .enable_mask = BIT(0),
1781 .hw.init = &(struct clk_init_data)
1782 {
1783 .name = "gcc_pcie_0_aux_clk",
1784 .parent_names = (const char *[]) {
1785 "pcie_0_aux_clk_src",
1786 },
1787 .num_parents = 1,
1788 .flags = CLK_SET_RATE_PARENT,
1789 .ops = &clk_branch2_ops,
1790 },
1791 },
1792};
1793
1794static struct clk_branch gcc_pcie_0_pipe_clk = {
1795 .halt_reg = 0x1ad8,
1796 .halt_check = BRANCH_HALT_DELAY,
1797 .clkr = {
1798 .enable_reg = 0x1ad8,
1799 .enable_mask = BIT(0),
1800 .hw.init = &(struct clk_init_data)
1801 {
1802 .name = "gcc_pcie_0_pipe_clk",
1803 .parent_names = (const char *[]) {
1804 "pcie_0_pipe_clk_src",
1805 },
1806 .num_parents = 1,
1807 .flags = CLK_SET_RATE_PARENT,
1808 .ops = &clk_branch2_ops,
1809 },
1810 },
1811};
1812
1813static struct clk_branch gcc_pcie_1_aux_clk = {
1814 .halt_reg = 0x1b54,
1815 .clkr = {
1816 .enable_reg = 0x1b54,
1817 .enable_mask = BIT(0),
1818 .hw.init = &(struct clk_init_data)
1819 {
1820 .name = "gcc_pcie_1_aux_clk",
1821 .parent_names = (const char *[]) {
1822 "pcie_1_aux_clk_src",
1823 },
1824 .num_parents = 1,
1825 .flags = CLK_SET_RATE_PARENT,
1826 .ops = &clk_branch2_ops,
1827 },
1828 },
1829};
1830
1831static struct clk_branch gcc_pcie_1_pipe_clk = {
1832 .halt_reg = 0x1b58,
1833 .halt_check = BRANCH_HALT_DELAY,
1834 .clkr = {
1835 .enable_reg = 0x1b58,
1836 .enable_mask = BIT(0),
1837 .hw.init = &(struct clk_init_data)
1838 {
1839 .name = "gcc_pcie_1_pipe_clk",
1840 .parent_names = (const char *[]) {
1841 "pcie_1_pipe_clk_src",
1842 },
1843 .num_parents = 1,
1844 .flags = CLK_SET_RATE_PARENT,
1845 .ops = &clk_branch2_ops,
1846 },
1847 },
1848};
1849
1850static struct clk_branch gcc_pdm2_clk = {
1851 .halt_reg = 0x0ccc,
1852 .clkr = {
1853 .enable_reg = 0x0ccc,
1854 .enable_mask = BIT(0),
1855 .hw.init = &(struct clk_init_data)
1856 {
1857 .name = "gcc_pdm2_clk",
1858 .parent_names = (const char *[]) {
1859 "pdm2_clk_src",
1860 },
1861 .num_parents = 1,
1862 .flags = CLK_SET_RATE_PARENT,
1863 .ops = &clk_branch2_ops,
1864 },
1865 },
1866};
1867
1868static struct clk_branch gcc_sdcc1_apps_clk = {
1869 .halt_reg = 0x04c4,
1870 .clkr = {
1871 .enable_reg = 0x04c4,
1872 .enable_mask = BIT(0),
1873 .hw.init = &(struct clk_init_data)
1874 {
1875 .name = "gcc_sdcc1_apps_clk",
1876 .parent_names = (const char *[]) {
1877 "sdcc1_apps_clk_src",
1878 },
1879 .num_parents = 1,
1880 .flags = CLK_SET_RATE_PARENT,
1881 .ops = &clk_branch2_ops,
1882 },
1883 },
1884};
1885
1886static struct clk_branch gcc_sdcc1_ahb_clk = {
1887 .halt_reg = 0x04c8,
1888 .clkr = {
1889 .enable_reg = 0x04c8,
1890 .enable_mask = BIT(0),
1891 .hw.init = &(struct clk_init_data)
1892 {
1893 .name = "gcc_sdcc1_ahb_clk",
1894 .parent_names = (const char *[]){
1895 "periph_noc_clk_src",
1896 },
1897 .num_parents = 1,
1898 .ops = &clk_branch2_ops,
1899 },
1900 },
1901};
1902
1903static struct clk_branch gcc_sdcc2_apps_clk = {
1904 .halt_reg = 0x0504,
1905 .clkr = {
1906 .enable_reg = 0x0504,
1907 .enable_mask = BIT(0),
1908 .hw.init = &(struct clk_init_data)
1909 {
1910 .name = "gcc_sdcc2_apps_clk",
1911 .parent_names = (const char *[]) {
1912 "sdcc2_apps_clk_src",
1913 },
1914 .num_parents = 1,
1915 .flags = CLK_SET_RATE_PARENT,
1916 .ops = &clk_branch2_ops,
1917 },
1918 },
1919};
1920
1921static struct clk_branch gcc_sdcc3_apps_clk = {
1922 .halt_reg = 0x0544,
1923 .clkr = {
1924 .enable_reg = 0x0544,
1925 .enable_mask = BIT(0),
1926 .hw.init = &(struct clk_init_data)
1927 {
1928 .name = "gcc_sdcc3_apps_clk",
1929 .parent_names = (const char *[]) {
1930 "sdcc3_apps_clk_src",
1931 },
1932 .num_parents = 1,
1933 .flags = CLK_SET_RATE_PARENT,
1934 .ops = &clk_branch2_ops,
1935 },
1936 },
1937};
1938
1939static struct clk_branch gcc_sdcc4_apps_clk = {
1940 .halt_reg = 0x0584,
1941 .clkr = {
1942 .enable_reg = 0x0584,
1943 .enable_mask = BIT(0),
1944 .hw.init = &(struct clk_init_data)
1945 {
1946 .name = "gcc_sdcc4_apps_clk",
1947 .parent_names = (const char *[]) {
1948 "sdcc4_apps_clk_src",
1949 },
1950 .num_parents = 1,
1951 .flags = CLK_SET_RATE_PARENT,
1952 .ops = &clk_branch2_ops,
1953 },
1954 },
1955};
1956
1957static struct clk_branch gcc_sys_noc_ufs_axi_clk = {
1958 .halt_reg = 0x1d7c,
1959 .clkr = {
1960 .enable_reg = 0x1d7c,
1961 .enable_mask = BIT(0),
1962 .hw.init = &(struct clk_init_data)
1963 {
1964 .name = "gcc_sys_noc_ufs_axi_clk",
1965 .parent_names = (const char *[]) {
1966 "ufs_axi_clk_src",
1967 },
1968 .num_parents = 1,
1969 .flags = CLK_SET_RATE_PARENT,
1970 .ops = &clk_branch2_ops,
1971 },
1972 },
1973};
1974
1975static struct clk_branch gcc_sys_noc_usb3_axi_clk = {
1976 .halt_reg = 0x03fc,
1977 .clkr = {
1978 .enable_reg = 0x03fc,
1979 .enable_mask = BIT(0),
1980 .hw.init = &(struct clk_init_data)
1981 {
1982 .name = "gcc_sys_noc_usb3_axi_clk",
1983 .parent_names = (const char *[]) {
1984 "usb30_master_clk_src",
1985 },
1986 .num_parents = 1,
1987 .flags = CLK_SET_RATE_PARENT,
1988 .ops = &clk_branch2_ops,
1989 },
1990 },
1991};
1992
1993static struct clk_branch gcc_tsif_ref_clk = {
1994 .halt_reg = 0x0d88,
1995 .clkr = {
1996 .enable_reg = 0x0d88,
1997 .enable_mask = BIT(0),
1998 .hw.init = &(struct clk_init_data)
1999 {
2000 .name = "gcc_tsif_ref_clk",
2001 .parent_names = (const char *[]) {
2002 "tsif_ref_clk_src",
2003 },
2004 .num_parents = 1,
2005 .flags = CLK_SET_RATE_PARENT,
2006 .ops = &clk_branch2_ops,
2007 },
2008 },
2009};
2010
2011static struct clk_branch gcc_ufs_axi_clk = {
2012 .halt_reg = 0x1d48,
2013 .clkr = {
2014 .enable_reg = 0x1d48,
2015 .enable_mask = BIT(0),
2016 .hw.init = &(struct clk_init_data)
2017 {
2018 .name = "gcc_ufs_axi_clk",
2019 .parent_names = (const char *[]) {
2020 "ufs_axi_clk_src",
2021 },
2022 .num_parents = 1,
2023 .flags = CLK_SET_RATE_PARENT,
2024 .ops = &clk_branch2_ops,
2025 },
2026 },
2027};
2028
2029static struct clk_branch gcc_ufs_rx_cfg_clk = {
2030 .halt_reg = 0x1d54,
2031 .clkr = {
2032 .enable_reg = 0x1d54,
2033 .enable_mask = BIT(0),
2034 .hw.init = &(struct clk_init_data)
2035 {
2036 .name = "gcc_ufs_rx_cfg_clk",
2037 .parent_names = (const char *[]) {
2038 "ufs_axi_clk_src",
2039 },
2040 .num_parents = 1,
2041 .flags = CLK_SET_RATE_PARENT,
2042 .ops = &clk_branch2_ops,
2043 },
2044 },
2045};
2046
2047static struct clk_branch gcc_ufs_tx_cfg_clk = {
2048 .halt_reg = 0x1d50,
2049 .clkr = {
2050 .enable_reg = 0x1d50,
2051 .enable_mask = BIT(0),
2052 .hw.init = &(struct clk_init_data)
2053 {
2054 .name = "gcc_ufs_tx_cfg_clk",
2055 .parent_names = (const char *[]) {
2056 "ufs_axi_clk_src",
2057 },
2058 .num_parents = 1,
2059 .flags = CLK_SET_RATE_PARENT,
2060 .ops = &clk_branch2_ops,
2061 },
2062 },
2063};
2064
2065static struct clk_branch gcc_usb30_master_clk = {
2066 .halt_reg = 0x03c8,
2067 .clkr = {
2068 .enable_reg = 0x03c8,
2069 .enable_mask = BIT(0),
2070 .hw.init = &(struct clk_init_data)
2071 {
2072 .name = "gcc_usb30_master_clk",
2073 .parent_names = (const char *[]) {
2074 "usb30_master_clk_src",
2075 },
2076 .num_parents = 1,
2077 .flags = CLK_SET_RATE_PARENT,
2078 .ops = &clk_branch2_ops,
2079 },
2080 },
2081};
2082
2083static struct clk_branch gcc_usb30_mock_utmi_clk = {
2084 .halt_reg = 0x03d0,
2085 .clkr = {
2086 .enable_reg = 0x03d0,
2087 .enable_mask = BIT(0),
2088 .hw.init = &(struct clk_init_data)
2089 {
2090 .name = "gcc_usb30_mock_utmi_clk",
2091 .parent_names = (const char *[]) {
2092 "usb30_mock_utmi_clk_src",
2093 },
2094 .num_parents = 1,
2095 .flags = CLK_SET_RATE_PARENT,
2096 .ops = &clk_branch2_ops,
2097 },
2098 },
2099};
2100
2101static struct clk_branch gcc_usb3_phy_aux_clk = {
2102 .halt_reg = 0x1408,
2103 .clkr = {
2104 .enable_reg = 0x1408,
2105 .enable_mask = BIT(0),
2106 .hw.init = &(struct clk_init_data)
2107 {
2108 .name = "gcc_usb3_phy_aux_clk",
2109 .parent_names = (const char *[]) {
2110 "usb3_phy_aux_clk_src",
2111 },
2112 .num_parents = 1,
2113 .flags = CLK_SET_RATE_PARENT,
2114 .ops = &clk_branch2_ops,
2115 },
2116 },
2117};
2118
2119static struct clk_branch gcc_usb_hs_system_clk = {
2120 .halt_reg = 0x0484,
2121 .clkr = {
2122 .enable_reg = 0x0484,
2123 .enable_mask = BIT(0),
2124 .hw.init = &(struct clk_init_data)
2125 {
2126 .name = "gcc_usb_hs_system_clk",
2127 .parent_names = (const char *[]) {
2128 "usb_hs_system_clk_src",
2129 },
2130 .num_parents = 1,
2131 .flags = CLK_SET_RATE_PARENT,
2132 .ops = &clk_branch2_ops,
2133 },
2134 },
2135};
2136
2137static struct clk_regmap *gcc_msm8994_clocks[] = {
2138 [GPLL0_EARLY] = &gpll0_early.clkr,
2139 [GPLL0] = &gpll0.clkr,
2140 [GPLL4_EARLY] = &gpll4_early.clkr,
2141 [GPLL4] = &gpll4.clkr,
2142 [UFS_AXI_CLK_SRC] = &ufs_axi_clk_src.clkr,
2143 [USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
2144 [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
2145 [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
2146 [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
2147 [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
2148 [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
2149 [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
2150 [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
2151 [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
2152 [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
2153 [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
2154 [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
2155 [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
2156 [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
2157 [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
2158 [BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
2159 [BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
2160 [BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
2161 [BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
2162 [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
2163 [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
2164 [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
2165 [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
2166 [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
2167 [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
2168 [BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
2169 [BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
2170 [BLSP2_QUP5_I2C_APPS_CLK_SRC] = &blsp2_qup5_i2c_apps_clk_src.clkr,
2171 [BLSP2_QUP5_SPI_APPS_CLK_SRC] = &blsp2_qup5_spi_apps_clk_src.clkr,
2172 [BLSP2_QUP6_I2C_APPS_CLK_SRC] = &blsp2_qup6_i2c_apps_clk_src.clkr,
2173 [BLSP2_QUP6_SPI_APPS_CLK_SRC] = &blsp2_qup6_spi_apps_clk_src.clkr,
2174 [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
2175 [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
2176 [BLSP2_UART3_APPS_CLK_SRC] = &blsp2_uart3_apps_clk_src.clkr,
2177 [BLSP2_UART4_APPS_CLK_SRC] = &blsp2_uart4_apps_clk_src.clkr,
2178 [BLSP2_UART5_APPS_CLK_SRC] = &blsp2_uart5_apps_clk_src.clkr,
2179 [BLSP2_UART6_APPS_CLK_SRC] = &blsp2_uart6_apps_clk_src.clkr,
2180 [GP1_CLK_SRC] = &gp1_clk_src.clkr,
2181 [GP2_CLK_SRC] = &gp2_clk_src.clkr,
2182 [GP3_CLK_SRC] = &gp3_clk_src.clkr,
2183 [PCIE_0_AUX_CLK_SRC] = &pcie_0_aux_clk_src.clkr,
2184 [PCIE_0_PIPE_CLK_SRC] = &pcie_0_pipe_clk_src.clkr,
2185 [PCIE_1_AUX_CLK_SRC] = &pcie_1_aux_clk_src.clkr,
2186 [PCIE_1_PIPE_CLK_SRC] = &pcie_1_pipe_clk_src.clkr,
2187 [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
2188 [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
2189 [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
2190 [SDCC3_APPS_CLK_SRC] = &sdcc3_apps_clk_src.clkr,
2191 [SDCC4_APPS_CLK_SRC] = &sdcc4_apps_clk_src.clkr,
2192 [TSIF_REF_CLK_SRC] = &tsif_ref_clk_src.clkr,
2193 [USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
2194 [USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr,
2195 [USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
2196 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
2197 [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
2198 [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
2199 [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
2200 [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
2201 [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
2202 [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
2203 [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
2204 [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
2205 [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
2206 [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
2207 [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
2208 [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
2209 [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
2210 [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
2211 [GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
2212 [GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
2213 [GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
2214 [GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
2215 [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
2216 [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
2217 [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
2218 [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
2219 [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
2220 [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
2221 [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
2222 [GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
2223 [GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
2224 [GCC_BLSP2_QUP5_I2C_APPS_CLK] = &gcc_blsp2_qup5_i2c_apps_clk.clkr,
2225 [GCC_BLSP2_QUP5_SPI_APPS_CLK] = &gcc_blsp2_qup5_spi_apps_clk.clkr,
2226 [GCC_BLSP2_QUP6_I2C_APPS_CLK] = &gcc_blsp2_qup6_i2c_apps_clk.clkr,
2227 [GCC_BLSP2_QUP6_SPI_APPS_CLK] = &gcc_blsp2_qup6_spi_apps_clk.clkr,
2228 [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
2229 [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
2230 [GCC_BLSP2_UART3_APPS_CLK] = &gcc_blsp2_uart3_apps_clk.clkr,
2231 [GCC_BLSP2_UART4_APPS_CLK] = &gcc_blsp2_uart4_apps_clk.clkr,
2232 [GCC_BLSP2_UART5_APPS_CLK] = &gcc_blsp2_uart5_apps_clk.clkr,
2233 [GCC_BLSP2_UART6_APPS_CLK] = &gcc_blsp2_uart6_apps_clk.clkr,
2234 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2235 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2236 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2237 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
2238 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
2239 [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
2240 [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
2241 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2242 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2243 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2244 [GCC_SDCC3_APPS_CLK] = &gcc_sdcc3_apps_clk.clkr,
2245 [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
2246 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2247 [GCC_SYS_NOC_UFS_AXI_CLK] = &gcc_sys_noc_ufs_axi_clk.clkr,
2248 [GCC_SYS_NOC_USB3_AXI_CLK] = &gcc_sys_noc_usb3_axi_clk.clkr,
2249 [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
2250 [GCC_UFS_AXI_CLK] = &gcc_ufs_axi_clk.clkr,
2251 [GCC_UFS_RX_CFG_CLK] = &gcc_ufs_rx_cfg_clk.clkr,
2252 [GCC_UFS_TX_CFG_CLK] = &gcc_ufs_tx_cfg_clk.clkr,
2253 [GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
2254 [GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
2255 [GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr,
2256 [GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
2257};
2258
2259static const struct regmap_config gcc_msm8994_regmap_config = {
2260 .reg_bits = 32,
2261 .reg_stride = 4,
2262 .val_bits = 32,
2263 .max_register = 0x2000,
2264 .fast_io = true,
2265};
2266
2267static const struct qcom_cc_desc gcc_msm8994_desc = {
2268 .config = &gcc_msm8994_regmap_config,
2269 .clks = gcc_msm8994_clocks,
2270 .num_clks = ARRAY_SIZE(gcc_msm8994_clocks),
2271};
2272
2273static const struct of_device_id gcc_msm8994_match_table[] = {
2274 { .compatible = "qcom,gcc-msm8994" },
2275 {}
2276};
2277MODULE_DEVICE_TABLE(of, gcc_msm8994_match_table);
2278
2279static int gcc_msm8994_probe(struct platform_device *pdev)
2280{
2281 struct device *dev = &pdev->dev;
2282 struct clk *clk;
2283
2284 clk = devm_clk_register(dev, &xo.hw);
2285 if (IS_ERR(clk))
2286 return PTR_ERR(clk);
2287
2288 return qcom_cc_probe(pdev, &gcc_msm8994_desc);
2289}
2290
2291static struct platform_driver gcc_msm8994_driver = {
2292 .probe = gcc_msm8994_probe,
2293 .driver = {
2294 .name = "gcc-msm8994",
2295 .of_match_table = gcc_msm8994_match_table,
2296 },
2297};
2298
2299static int __init gcc_msm8994_init(void)
2300{
2301 return platform_driver_register(&gcc_msm8994_driver);
2302}
2303core_initcall(gcc_msm8994_init);
2304
2305static void __exit gcc_msm8994_exit(void)
2306{
2307 platform_driver_unregister(&gcc_msm8994_driver);
2308}
2309module_exit(gcc_msm8994_exit);
2310
2311MODULE_DESCRIPTION("Qualcomm GCC MSM8994 Driver");
2312MODULE_LICENSE("GPL v2");
2313MODULE_ALIAS("platform:gcc-msm8994");