Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1// SPDX-License-Identifier: GPL-2.0-only
2/* Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
3 */
4
5#include <linux/clk-provider.h>
6#include <linux/kernel.h>
7#include <linux/init.h>
8#include <linux/err.h>
9#include <linux/ctype.h>
10#include <linux/io.h>
11#include <linux/of.h>
12#include <linux/of_device.h>
13#include <linux/platform_device.h>
14#include <linux/module.h>
15#include <linux/regmap.h>
16
17#include <dt-bindings/clock/qcom,gcc-msm8994.h>
18
19#include "common.h"
20#include "clk-regmap.h"
21#include "clk-alpha-pll.h"
22#include "clk-rcg.h"
23#include "clk-branch.h"
24#include "reset.h"
25#include "gdsc.h"
26
27enum {
28 P_XO,
29 P_GPLL0,
30 P_GPLL4,
31};
32
33static struct clk_alpha_pll gpll0_early = {
34 .offset = 0,
35 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
36 .clkr = {
37 .enable_reg = 0x1480,
38 .enable_mask = BIT(0),
39 .hw.init = &(struct clk_init_data){
40 .name = "gpll0_early",
41 .parent_data = &(const struct clk_parent_data){
42 .fw_name = "xo",
43 },
44 .num_parents = 1,
45 .ops = &clk_alpha_pll_ops,
46 },
47 },
48};
49
50static struct clk_alpha_pll_postdiv gpll0 = {
51 .offset = 0,
52 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
53 .clkr.hw.init = &(struct clk_init_data){
54 .name = "gpll0",
55 .parent_names = (const char *[]) { "gpll0_early" },
56 .num_parents = 1,
57 .ops = &clk_alpha_pll_postdiv_ops,
58 },
59};
60
61static struct clk_alpha_pll gpll4_early = {
62 .offset = 0x1dc0,
63 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
64 .clkr = {
65 .enable_reg = 0x1480,
66 .enable_mask = BIT(4),
67 .hw.init = &(struct clk_init_data){
68 .name = "gpll4_early",
69 .parent_data = &(const struct clk_parent_data){
70 .fw_name = "xo",
71 },
72 .num_parents = 1,
73 .ops = &clk_alpha_pll_ops,
74 },
75 },
76};
77
78static struct clk_alpha_pll_postdiv gpll4 = {
79 .offset = 0x1dc0,
80 .width = 4,
81 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
82 .clkr.hw.init = &(struct clk_init_data){
83 .name = "gpll4",
84 .parent_names = (const char *[]) { "gpll4_early" },
85 .num_parents = 1,
86 .ops = &clk_alpha_pll_postdiv_ops,
87 },
88};
89
90static const struct parent_map gcc_xo_gpll0_map[] = {
91 { P_XO, 0 },
92 { P_GPLL0, 1 },
93};
94
95static const struct clk_parent_data gcc_xo_gpll0[] = {
96 { .fw_name = "xo" },
97 { .hw = &gpll0.clkr.hw },
98};
99
100static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {
101 { P_XO, 0 },
102 { P_GPLL0, 1 },
103 { P_GPLL4, 5 },
104};
105
106static const struct clk_parent_data gcc_xo_gpll0_gpll4[] = {
107 { .fw_name = "xo" },
108 { .hw = &gpll0.clkr.hw },
109 { .hw = &gpll4.clkr.hw },
110};
111
112static struct freq_tbl ftbl_ufs_axi_clk_src[] = {
113 F(50000000, P_GPLL0, 12, 0, 0),
114 F(100000000, P_GPLL0, 6, 0, 0),
115 F(150000000, P_GPLL0, 4, 0, 0),
116 F(171430000, P_GPLL0, 3.5, 0, 0),
117 F(200000000, P_GPLL0, 3, 0, 0),
118 F(240000000, P_GPLL0, 2.5, 0, 0),
119 { }
120};
121
122static struct clk_rcg2 ufs_axi_clk_src = {
123 .cmd_rcgr = 0x1d68,
124 .mnd_width = 8,
125 .hid_width = 5,
126 .parent_map = gcc_xo_gpll0_map,
127 .freq_tbl = ftbl_ufs_axi_clk_src,
128 .clkr.hw.init = &(struct clk_init_data){
129 .name = "ufs_axi_clk_src",
130 .parent_data = gcc_xo_gpll0,
131 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
132 .ops = &clk_rcg2_ops,
133 },
134};
135
136static struct freq_tbl ftbl_usb30_master_clk_src[] = {
137 F(19200000, P_XO, 1, 0, 0),
138 F(125000000, P_GPLL0, 1, 5, 24),
139 { }
140};
141
142static struct clk_rcg2 usb30_master_clk_src = {
143 .cmd_rcgr = 0x03d4,
144 .mnd_width = 8,
145 .hid_width = 5,
146 .parent_map = gcc_xo_gpll0_map,
147 .freq_tbl = ftbl_usb30_master_clk_src,
148 .clkr.hw.init = &(struct clk_init_data){
149 .name = "usb30_master_clk_src",
150 .parent_data = gcc_xo_gpll0,
151 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
152 .ops = &clk_rcg2_ops,
153 },
154};
155
156static struct freq_tbl ftbl_blsp_i2c_apps_clk_src[] = {
157 F(19200000, P_XO, 1, 0, 0),
158 F(50000000, P_GPLL0, 12, 0, 0),
159 { }
160};
161
162static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
163 .cmd_rcgr = 0x0660,
164 .hid_width = 5,
165 .parent_map = gcc_xo_gpll0_map,
166 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
167 .clkr.hw.init = &(struct clk_init_data){
168 .name = "blsp1_qup1_i2c_apps_clk_src",
169 .parent_data = gcc_xo_gpll0,
170 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
171 .ops = &clk_rcg2_ops,
172 },
173};
174
175static struct freq_tbl ftbl_blsp1_qup1_spi_apps_clk_src[] = {
176 F(960000, P_XO, 10, 1, 2),
177 F(4800000, P_XO, 4, 0, 0),
178 F(9600000, P_XO, 2, 0, 0),
179 F(15000000, P_GPLL0, 10, 1, 4),
180 F(19200000, P_XO, 1, 0, 0),
181 F(24000000, P_GPLL0, 12.5, 1, 2),
182 F(25000000, P_GPLL0, 12, 1, 2),
183 F(48000000, P_GPLL0, 12.5, 0, 0),
184 F(50000000, P_GPLL0, 12, 0, 0),
185 { }
186};
187
188static struct freq_tbl ftbl_blsp1_qup_spi_apps_clk_src_8992[] = {
189 F(960000, P_XO, 10, 1, 2),
190 F(4800000, P_XO, 4, 0, 0),
191 F(9600000, P_XO, 2, 0, 0),
192 F(15000000, P_GPLL0, 10, 1, 4),
193 F(19200000, P_XO, 1, 0, 0),
194 F(25000000, P_GPLL0, 12, 1, 2),
195 F(50000000, P_GPLL0, 12, 0, 0),
196 { }
197};
198
199static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
200 .cmd_rcgr = 0x064c,
201 .mnd_width = 8,
202 .hid_width = 5,
203 .parent_map = gcc_xo_gpll0_map,
204 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
205 .clkr.hw.init = &(struct clk_init_data){
206 .name = "blsp1_qup1_spi_apps_clk_src",
207 .parent_data = gcc_xo_gpll0,
208 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
209 .ops = &clk_rcg2_ops,
210 },
211};
212
213static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
214 .cmd_rcgr = 0x06e0,
215 .hid_width = 5,
216 .parent_map = gcc_xo_gpll0_map,
217 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
218 .clkr.hw.init = &(struct clk_init_data){
219 .name = "blsp1_qup2_i2c_apps_clk_src",
220 .parent_data = gcc_xo_gpll0,
221 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
222 .ops = &clk_rcg2_ops,
223 },
224};
225
226static struct freq_tbl ftbl_blsp1_qup2_spi_apps_clk_src[] = {
227 F(960000, P_XO, 10, 1, 2),
228 F(4800000, P_XO, 4, 0, 0),
229 F(9600000, P_XO, 2, 0, 0),
230 F(15000000, P_GPLL0, 10, 1, 4),
231 F(19200000, P_XO, 1, 0, 0),
232 F(24000000, P_GPLL0, 12.5, 1, 2),
233 F(25000000, P_GPLL0, 12, 1, 2),
234 F(42860000, P_GPLL0, 14, 0, 0),
235 F(46150000, P_GPLL0, 13, 0, 0),
236 { }
237};
238
239static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
240 .cmd_rcgr = 0x06cc,
241 .mnd_width = 8,
242 .hid_width = 5,
243 .parent_map = gcc_xo_gpll0_map,
244 .freq_tbl = ftbl_blsp1_qup2_spi_apps_clk_src,
245 .clkr.hw.init = &(struct clk_init_data){
246 .name = "blsp1_qup2_spi_apps_clk_src",
247 .parent_data = gcc_xo_gpll0,
248 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
249 .ops = &clk_rcg2_ops,
250 },
251};
252
253static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
254 .cmd_rcgr = 0x0760,
255 .hid_width = 5,
256 .parent_map = gcc_xo_gpll0_map,
257 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
258 .clkr.hw.init = &(struct clk_init_data){
259 .name = "blsp1_qup3_i2c_apps_clk_src",
260 .parent_data = gcc_xo_gpll0,
261 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
262 .ops = &clk_rcg2_ops,
263 },
264};
265
266static struct freq_tbl ftbl_blsp1_qup3_4_spi_apps_clk_src[] = {
267 F(960000, P_XO, 10, 1, 2),
268 F(4800000, P_XO, 4, 0, 0),
269 F(9600000, P_XO, 2, 0, 0),
270 F(15000000, P_GPLL0, 10, 1, 4),
271 F(19200000, P_XO, 1, 0, 0),
272 F(24000000, P_GPLL0, 12.5, 1, 2),
273 F(25000000, P_GPLL0, 12, 1, 2),
274 F(42860000, P_GPLL0, 14, 0, 0),
275 F(44440000, P_GPLL0, 13.5, 0, 0),
276 { }
277};
278
279static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
280 .cmd_rcgr = 0x074c,
281 .mnd_width = 8,
282 .hid_width = 5,
283 .parent_map = gcc_xo_gpll0_map,
284 .freq_tbl = ftbl_blsp1_qup3_4_spi_apps_clk_src,
285 .clkr.hw.init = &(struct clk_init_data){
286 .name = "blsp1_qup3_spi_apps_clk_src",
287 .parent_data = gcc_xo_gpll0,
288 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
289 .ops = &clk_rcg2_ops,
290 },
291};
292
293static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
294 .cmd_rcgr = 0x07e0,
295 .hid_width = 5,
296 .parent_map = gcc_xo_gpll0_map,
297 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
298 .clkr.hw.init = &(struct clk_init_data){
299 .name = "blsp1_qup4_i2c_apps_clk_src",
300 .parent_data = gcc_xo_gpll0,
301 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
302 .ops = &clk_rcg2_ops,
303 },
304};
305
306static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
307 .cmd_rcgr = 0x07cc,
308 .mnd_width = 8,
309 .hid_width = 5,
310 .parent_map = gcc_xo_gpll0_map,
311 .freq_tbl = ftbl_blsp1_qup3_4_spi_apps_clk_src,
312 .clkr.hw.init = &(struct clk_init_data){
313 .name = "blsp1_qup4_spi_apps_clk_src",
314 .parent_data = gcc_xo_gpll0,
315 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
316 .ops = &clk_rcg2_ops,
317 },
318};
319
320static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
321 .cmd_rcgr = 0x0860,
322 .hid_width = 5,
323 .parent_map = gcc_xo_gpll0_map,
324 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
325 .clkr.hw.init = &(struct clk_init_data){
326 .name = "blsp1_qup5_i2c_apps_clk_src",
327 .parent_data = gcc_xo_gpll0,
328 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
329 .ops = &clk_rcg2_ops,
330 },
331};
332
333static struct freq_tbl ftbl_blsp1_qup5_spi_apps_clk_src[] = {
334 F(960000, P_XO, 10, 1, 2),
335 F(4800000, P_XO, 4, 0, 0),
336 F(9600000, P_XO, 2, 0, 0),
337 F(15000000, P_GPLL0, 10, 1, 4),
338 F(19200000, P_XO, 1, 0, 0),
339 F(24000000, P_GPLL0, 12.5, 1, 2),
340 F(25000000, P_GPLL0, 12, 1, 2),
341 F(40000000, P_GPLL0, 15, 0, 0),
342 F(42860000, P_GPLL0, 14, 0, 0),
343 { }
344};
345
346static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
347 .cmd_rcgr = 0x084c,
348 .mnd_width = 8,
349 .hid_width = 5,
350 .parent_map = gcc_xo_gpll0_map,
351 .freq_tbl = ftbl_blsp1_qup5_spi_apps_clk_src,
352 .clkr.hw.init = &(struct clk_init_data){
353 .name = "blsp1_qup5_spi_apps_clk_src",
354 .parent_data = gcc_xo_gpll0,
355 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
356 .ops = &clk_rcg2_ops,
357 },
358};
359
360static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
361 .cmd_rcgr = 0x08e0,
362 .hid_width = 5,
363 .parent_map = gcc_xo_gpll0_map,
364 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
365 .clkr.hw.init = &(struct clk_init_data){
366 .name = "blsp1_qup6_i2c_apps_clk_src",
367 .parent_data = gcc_xo_gpll0,
368 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
369 .ops = &clk_rcg2_ops,
370 },
371};
372
373static struct freq_tbl ftbl_blsp1_qup6_spi_apps_clk_src[] = {
374 F(960000, P_XO, 10, 1, 2),
375 F(4800000, P_XO, 4, 0, 0),
376 F(9600000, P_XO, 2, 0, 0),
377 F(15000000, P_GPLL0, 10, 1, 4),
378 F(19200000, P_XO, 1, 0, 0),
379 F(24000000, P_GPLL0, 12.5, 1, 2),
380 F(27906976, P_GPLL0, 1, 2, 43),
381 F(41380000, P_GPLL0, 15, 0, 0),
382 F(42860000, P_GPLL0, 14, 0, 0),
383 { }
384};
385
386static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
387 .cmd_rcgr = 0x08cc,
388 .mnd_width = 8,
389 .hid_width = 5,
390 .parent_map = gcc_xo_gpll0_map,
391 .freq_tbl = ftbl_blsp1_qup6_spi_apps_clk_src,
392 .clkr.hw.init = &(struct clk_init_data){
393 .name = "blsp1_qup6_spi_apps_clk_src",
394 .parent_data = gcc_xo_gpll0,
395 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
396 .ops = &clk_rcg2_ops,
397 },
398};
399
400static struct freq_tbl ftbl_blsp_uart_apps_clk_src[] = {
401 F(3686400, P_GPLL0, 1, 96, 15625),
402 F(7372800, P_GPLL0, 1, 192, 15625),
403 F(14745600, P_GPLL0, 1, 384, 15625),
404 F(16000000, P_GPLL0, 5, 2, 15),
405 F(19200000, P_XO, 1, 0, 0),
406 F(24000000, P_GPLL0, 5, 1, 5),
407 F(32000000, P_GPLL0, 1, 4, 75),
408 F(40000000, P_GPLL0, 15, 0, 0),
409 F(46400000, P_GPLL0, 1, 29, 375),
410 F(48000000, P_GPLL0, 12.5, 0, 0),
411 F(51200000, P_GPLL0, 1, 32, 375),
412 F(56000000, P_GPLL0, 1, 7, 75),
413 F(58982400, P_GPLL0, 1, 1536, 15625),
414 F(60000000, P_GPLL0, 10, 0, 0),
415 F(63160000, P_GPLL0, 9.5, 0, 0),
416 { }
417};
418
419static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
420 .cmd_rcgr = 0x068c,
421 .mnd_width = 16,
422 .hid_width = 5,
423 .parent_map = gcc_xo_gpll0_map,
424 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
425 .clkr.hw.init = &(struct clk_init_data){
426 .name = "blsp1_uart1_apps_clk_src",
427 .parent_data = gcc_xo_gpll0,
428 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
429 .ops = &clk_rcg2_ops,
430 },
431};
432
433static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
434 .cmd_rcgr = 0x070c,
435 .mnd_width = 16,
436 .hid_width = 5,
437 .parent_map = gcc_xo_gpll0_map,
438 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
439 .clkr.hw.init = &(struct clk_init_data){
440 .name = "blsp1_uart2_apps_clk_src",
441 .parent_data = gcc_xo_gpll0,
442 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
443 .ops = &clk_rcg2_ops,
444 },
445};
446
447static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
448 .cmd_rcgr = 0x078c,
449 .mnd_width = 16,
450 .hid_width = 5,
451 .parent_map = gcc_xo_gpll0_map,
452 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
453 .clkr.hw.init = &(struct clk_init_data){
454 .name = "blsp1_uart3_apps_clk_src",
455 .parent_data = gcc_xo_gpll0,
456 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
457 .ops = &clk_rcg2_ops,
458 },
459};
460
461static struct clk_rcg2 blsp1_uart4_apps_clk_src = {
462 .cmd_rcgr = 0x080c,
463 .mnd_width = 16,
464 .hid_width = 5,
465 .parent_map = gcc_xo_gpll0_map,
466 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
467 .clkr.hw.init = &(struct clk_init_data){
468 .name = "blsp1_uart4_apps_clk_src",
469 .parent_data = gcc_xo_gpll0,
470 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
471 .ops = &clk_rcg2_ops,
472 },
473};
474
475static struct clk_rcg2 blsp1_uart5_apps_clk_src = {
476 .cmd_rcgr = 0x088c,
477 .mnd_width = 16,
478 .hid_width = 5,
479 .parent_map = gcc_xo_gpll0_map,
480 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
481 .clkr.hw.init = &(struct clk_init_data){
482 .name = "blsp1_uart5_apps_clk_src",
483 .parent_data = gcc_xo_gpll0,
484 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
485 .ops = &clk_rcg2_ops,
486 },
487};
488
489static struct clk_rcg2 blsp1_uart6_apps_clk_src = {
490 .cmd_rcgr = 0x090c,
491 .mnd_width = 16,
492 .hid_width = 5,
493 .parent_map = gcc_xo_gpll0_map,
494 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
495 .clkr.hw.init = &(struct clk_init_data){
496 .name = "blsp1_uart6_apps_clk_src",
497 .parent_data = gcc_xo_gpll0,
498 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
499 .ops = &clk_rcg2_ops,
500 },
501};
502
503static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
504 .cmd_rcgr = 0x09a0,
505 .hid_width = 5,
506 .parent_map = gcc_xo_gpll0_map,
507 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
508 .clkr.hw.init = &(struct clk_init_data){
509 .name = "blsp2_qup1_i2c_apps_clk_src",
510 .parent_data = gcc_xo_gpll0,
511 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
512 .ops = &clk_rcg2_ops,
513 },
514};
515
516static struct freq_tbl ftbl_blsp2_qup1_2_spi_apps_clk_src[] = {
517 F(960000, P_XO, 10, 1, 2),
518 F(4800000, P_XO, 4, 0, 0),
519 F(9600000, P_XO, 2, 0, 0),
520 F(15000000, P_GPLL0, 10, 1, 4),
521 F(19200000, P_XO, 1, 0, 0),
522 F(24000000, P_GPLL0, 12.5, 1, 2),
523 F(25000000, P_GPLL0, 12, 1, 2),
524 F(42860000, P_GPLL0, 14, 0, 0),
525 F(44440000, P_GPLL0, 13.5, 0, 0),
526 { }
527};
528
529static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
530 .cmd_rcgr = 0x098c,
531 .mnd_width = 8,
532 .hid_width = 5,
533 .parent_map = gcc_xo_gpll0_map,
534 .freq_tbl = ftbl_blsp2_qup1_2_spi_apps_clk_src,
535 .clkr.hw.init = &(struct clk_init_data){
536 .name = "blsp2_qup1_spi_apps_clk_src",
537 .parent_data = gcc_xo_gpll0,
538 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
539 .ops = &clk_rcg2_ops,
540 },
541};
542
543static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
544 .cmd_rcgr = 0x0a20,
545 .hid_width = 5,
546 .parent_map = gcc_xo_gpll0_map,
547 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
548 .clkr.hw.init = &(struct clk_init_data){
549 .name = "blsp2_qup2_i2c_apps_clk_src",
550 .parent_data = gcc_xo_gpll0,
551 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
552 .ops = &clk_rcg2_ops,
553 },
554};
555
556static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
557 .cmd_rcgr = 0x0a0c,
558 .mnd_width = 8,
559 .hid_width = 5,
560 .parent_map = gcc_xo_gpll0_map,
561 .freq_tbl = ftbl_blsp2_qup1_2_spi_apps_clk_src,
562 .clkr.hw.init = &(struct clk_init_data){
563 .name = "blsp2_qup2_spi_apps_clk_src",
564 .parent_data = gcc_xo_gpll0,
565 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
566 .ops = &clk_rcg2_ops,
567 },
568};
569
570static struct freq_tbl ftbl_blsp2_qup3_4_spi_apps_clk_src[] = {
571 F(960000, P_XO, 10, 1, 2),
572 F(4800000, P_XO, 4, 0, 0),
573 F(9600000, P_XO, 2, 0, 0),
574 F(15000000, P_GPLL0, 10, 1, 4),
575 F(19200000, P_XO, 1, 0, 0),
576 F(24000000, P_GPLL0, 12.5, 1, 2),
577 F(25000000, P_GPLL0, 12, 1, 2),
578 F(42860000, P_GPLL0, 14, 0, 0),
579 F(48000000, P_GPLL0, 12.5, 0, 0),
580 { }
581};
582
583static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
584 .cmd_rcgr = 0x0aa0,
585 .hid_width = 5,
586 .parent_map = gcc_xo_gpll0_map,
587 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
588 .clkr.hw.init = &(struct clk_init_data){
589 .name = "blsp2_qup3_i2c_apps_clk_src",
590 .parent_data = gcc_xo_gpll0,
591 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
592 .ops = &clk_rcg2_ops,
593 },
594};
595
596static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
597 .cmd_rcgr = 0x0a8c,
598 .mnd_width = 8,
599 .hid_width = 5,
600 .parent_map = gcc_xo_gpll0_map,
601 .freq_tbl = ftbl_blsp2_qup3_4_spi_apps_clk_src,
602 .clkr.hw.init = &(struct clk_init_data){
603 .name = "blsp2_qup3_spi_apps_clk_src",
604 .parent_data = gcc_xo_gpll0,
605 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
606 .ops = &clk_rcg2_ops,
607 },
608};
609
610static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
611 .cmd_rcgr = 0x0b20,
612 .hid_width = 5,
613 .parent_map = gcc_xo_gpll0_map,
614 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
615 .clkr.hw.init = &(struct clk_init_data){
616 .name = "blsp2_qup4_i2c_apps_clk_src",
617 .parent_data = gcc_xo_gpll0,
618 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
619 .ops = &clk_rcg2_ops,
620 },
621};
622
623static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
624 .cmd_rcgr = 0x0b0c,
625 .mnd_width = 8,
626 .hid_width = 5,
627 .parent_map = gcc_xo_gpll0_map,
628 .freq_tbl = ftbl_blsp2_qup3_4_spi_apps_clk_src,
629 .clkr.hw.init = &(struct clk_init_data){
630 .name = "blsp2_qup4_spi_apps_clk_src",
631 .parent_data = gcc_xo_gpll0,
632 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
633 .ops = &clk_rcg2_ops,
634 },
635};
636
637static struct clk_rcg2 blsp2_qup5_i2c_apps_clk_src = {
638 .cmd_rcgr = 0x0ba0,
639 .hid_width = 5,
640 .parent_map = gcc_xo_gpll0_map,
641 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
642 .clkr.hw.init = &(struct clk_init_data){
643 .name = "blsp2_qup5_i2c_apps_clk_src",
644 .parent_data = gcc_xo_gpll0,
645 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
646 .ops = &clk_rcg2_ops,
647 },
648};
649
650static struct clk_rcg2 blsp2_qup5_spi_apps_clk_src = {
651 .cmd_rcgr = 0x0b8c,
652 .mnd_width = 8,
653 .hid_width = 5,
654 .parent_map = gcc_xo_gpll0_map,
655 /* BLSP1 QUP1 and BLSP2 QUP5 use the same freqs */
656 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
657 .clkr.hw.init = &(struct clk_init_data){
658 .name = "blsp2_qup5_spi_apps_clk_src",
659 .parent_data = gcc_xo_gpll0,
660 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
661 .ops = &clk_rcg2_ops,
662 },
663};
664
665static struct clk_rcg2 blsp2_qup6_i2c_apps_clk_src = {
666 .cmd_rcgr = 0x0c20,
667 .hid_width = 5,
668 .parent_map = gcc_xo_gpll0_map,
669 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
670 .clkr.hw.init = &(struct clk_init_data){
671 .name = "blsp2_qup6_i2c_apps_clk_src",
672 .parent_data = gcc_xo_gpll0,
673 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
674 .ops = &clk_rcg2_ops,
675 },
676};
677
678static struct freq_tbl ftbl_blsp2_qup6_spi_apps_clk_src[] = {
679 F(960000, P_XO, 10, 1, 2),
680 F(4800000, P_XO, 4, 0, 0),
681 F(9600000, P_XO, 2, 0, 0),
682 F(15000000, P_GPLL0, 10, 1, 4),
683 F(19200000, P_XO, 1, 0, 0),
684 F(24000000, P_GPLL0, 12.5, 1, 2),
685 F(25000000, P_GPLL0, 12, 1, 2),
686 F(44440000, P_GPLL0, 13.5, 0, 0),
687 F(48000000, P_GPLL0, 12.5, 0, 0),
688 { }
689};
690
691static struct clk_rcg2 blsp2_qup6_spi_apps_clk_src = {
692 .cmd_rcgr = 0x0c0c,
693 .mnd_width = 8,
694 .hid_width = 5,
695 .parent_map = gcc_xo_gpll0_map,
696 .freq_tbl = ftbl_blsp2_qup6_spi_apps_clk_src,
697 .clkr.hw.init = &(struct clk_init_data){
698 .name = "blsp2_qup6_spi_apps_clk_src",
699 .parent_data = gcc_xo_gpll0,
700 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
701 .ops = &clk_rcg2_ops,
702 },
703};
704
705static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
706 .cmd_rcgr = 0x09cc,
707 .mnd_width = 16,
708 .hid_width = 5,
709 .parent_map = gcc_xo_gpll0_map,
710 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
711 .clkr.hw.init = &(struct clk_init_data){
712 .name = "blsp2_uart1_apps_clk_src",
713 .parent_data = gcc_xo_gpll0,
714 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
715 .ops = &clk_rcg2_ops,
716 },
717};
718
719static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
720 .cmd_rcgr = 0x0a4c,
721 .mnd_width = 16,
722 .hid_width = 5,
723 .parent_map = gcc_xo_gpll0_map,
724 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
725 .clkr.hw.init = &(struct clk_init_data){
726 .name = "blsp2_uart2_apps_clk_src",
727 .parent_data = gcc_xo_gpll0,
728 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
729 .ops = &clk_rcg2_ops,
730 },
731};
732
733static struct clk_rcg2 blsp2_uart3_apps_clk_src = {
734 .cmd_rcgr = 0x0acc,
735 .mnd_width = 16,
736 .hid_width = 5,
737 .parent_map = gcc_xo_gpll0_map,
738 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
739 .clkr.hw.init = &(struct clk_init_data){
740 .name = "blsp2_uart3_apps_clk_src",
741 .parent_data = gcc_xo_gpll0,
742 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
743 .ops = &clk_rcg2_ops,
744 },
745};
746
747static struct clk_rcg2 blsp2_uart4_apps_clk_src = {
748 .cmd_rcgr = 0x0b4c,
749 .mnd_width = 16,
750 .hid_width = 5,
751 .parent_map = gcc_xo_gpll0_map,
752 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
753 .clkr.hw.init = &(struct clk_init_data){
754 .name = "blsp2_uart4_apps_clk_src",
755 .parent_data = gcc_xo_gpll0,
756 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
757 .ops = &clk_rcg2_ops,
758 },
759};
760
761static struct clk_rcg2 blsp2_uart5_apps_clk_src = {
762 .cmd_rcgr = 0x0bcc,
763 .mnd_width = 16,
764 .hid_width = 5,
765 .parent_map = gcc_xo_gpll0_map,
766 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
767 .clkr.hw.init = &(struct clk_init_data){
768 .name = "blsp2_uart5_apps_clk_src",
769 .parent_data = gcc_xo_gpll0,
770 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
771 .ops = &clk_rcg2_ops,
772 },
773};
774
775static struct clk_rcg2 blsp2_uart6_apps_clk_src = {
776 .cmd_rcgr = 0x0c4c,
777 .mnd_width = 16,
778 .hid_width = 5,
779 .parent_map = gcc_xo_gpll0_map,
780 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
781 .clkr.hw.init = &(struct clk_init_data){
782 .name = "blsp2_uart6_apps_clk_src",
783 .parent_data = gcc_xo_gpll0,
784 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
785 .ops = &clk_rcg2_ops,
786 },
787};
788
789static struct freq_tbl ftbl_gp1_clk_src[] = {
790 F(19200000, P_XO, 1, 0, 0),
791 F(100000000, P_GPLL0, 6, 0, 0),
792 F(200000000, P_GPLL0, 3, 0, 0),
793 { }
794};
795
796static struct clk_rcg2 gp1_clk_src = {
797 .cmd_rcgr = 0x1904,
798 .mnd_width = 8,
799 .hid_width = 5,
800 .parent_map = gcc_xo_gpll0_map,
801 .freq_tbl = ftbl_gp1_clk_src,
802 .clkr.hw.init = &(struct clk_init_data){
803 .name = "gp1_clk_src",
804 .parent_data = gcc_xo_gpll0,
805 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
806 .ops = &clk_rcg2_ops,
807 },
808};
809
810static struct freq_tbl ftbl_gp2_clk_src[] = {
811 F(19200000, P_XO, 1, 0, 0),
812 F(100000000, P_GPLL0, 6, 0, 0),
813 F(200000000, P_GPLL0, 3, 0, 0),
814 { }
815};
816
817static struct clk_rcg2 gp2_clk_src = {
818 .cmd_rcgr = 0x1944,
819 .mnd_width = 8,
820 .hid_width = 5,
821 .parent_map = gcc_xo_gpll0_map,
822 .freq_tbl = ftbl_gp2_clk_src,
823 .clkr.hw.init = &(struct clk_init_data){
824 .name = "gp2_clk_src",
825 .parent_data = gcc_xo_gpll0,
826 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
827 .ops = &clk_rcg2_ops,
828 },
829};
830
831static struct freq_tbl ftbl_gp3_clk_src[] = {
832 F(19200000, P_XO, 1, 0, 0),
833 F(100000000, P_GPLL0, 6, 0, 0),
834 F(200000000, P_GPLL0, 3, 0, 0),
835 { }
836};
837
838static struct clk_rcg2 gp3_clk_src = {
839 .cmd_rcgr = 0x1984,
840 .mnd_width = 8,
841 .hid_width = 5,
842 .parent_map = gcc_xo_gpll0_map,
843 .freq_tbl = ftbl_gp3_clk_src,
844 .clkr.hw.init = &(struct clk_init_data){
845 .name = "gp3_clk_src",
846 .parent_data = gcc_xo_gpll0,
847 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
848 .ops = &clk_rcg2_ops,
849 },
850};
851
852static struct freq_tbl ftbl_pcie_0_aux_clk_src[] = {
853 F(1011000, P_XO, 1, 1, 19),
854 { }
855};
856
857static struct clk_rcg2 pcie_0_aux_clk_src = {
858 .cmd_rcgr = 0x1b00,
859 .mnd_width = 8,
860 .hid_width = 5,
861 .freq_tbl = ftbl_pcie_0_aux_clk_src,
862 .clkr.hw.init = &(struct clk_init_data){
863 .name = "pcie_0_aux_clk_src",
864 .parent_data = &(const struct clk_parent_data){
865 .fw_name = "xo",
866 },
867 .num_parents = 1,
868 .ops = &clk_rcg2_ops,
869 },
870};
871
872static struct freq_tbl ftbl_pcie_pipe_clk_src[] = {
873 F(125000000, P_XO, 1, 0, 0),
874 { }
875};
876
877static struct clk_rcg2 pcie_0_pipe_clk_src = {
878 .cmd_rcgr = 0x1adc,
879 .hid_width = 5,
880 .freq_tbl = ftbl_pcie_pipe_clk_src,
881 .clkr.hw.init = &(struct clk_init_data){
882 .name = "pcie_0_pipe_clk_src",
883 .parent_data = &(const struct clk_parent_data){
884 .fw_name = "xo",
885 },
886 .num_parents = 1,
887 .ops = &clk_rcg2_ops,
888 },
889};
890
891static struct freq_tbl ftbl_pcie_1_aux_clk_src[] = {
892 F(1011000, P_XO, 1, 1, 19),
893 { }
894};
895
896static struct clk_rcg2 pcie_1_aux_clk_src = {
897 .cmd_rcgr = 0x1b80,
898 .mnd_width = 8,
899 .hid_width = 5,
900 .freq_tbl = ftbl_pcie_1_aux_clk_src,
901 .clkr.hw.init = &(struct clk_init_data){
902 .name = "pcie_1_aux_clk_src",
903 .parent_data = &(const struct clk_parent_data){
904 .fw_name = "xo",
905 },
906 .num_parents = 1,
907 .ops = &clk_rcg2_ops,
908 },
909};
910
911static struct clk_rcg2 pcie_1_pipe_clk_src = {
912 .cmd_rcgr = 0x1b5c,
913 .hid_width = 5,
914 .freq_tbl = ftbl_pcie_pipe_clk_src,
915 .clkr.hw.init = &(struct clk_init_data){
916 .name = "pcie_1_pipe_clk_src",
917 .parent_data = &(const struct clk_parent_data){
918 .fw_name = "xo",
919 },
920 .num_parents = 1,
921 .ops = &clk_rcg2_ops,
922 },
923};
924
925static struct freq_tbl ftbl_pdm2_clk_src[] = {
926 F(60000000, P_GPLL0, 10, 0, 0),
927 { }
928};
929
930static struct clk_rcg2 pdm2_clk_src = {
931 .cmd_rcgr = 0x0cd0,
932 .hid_width = 5,
933 .parent_map = gcc_xo_gpll0_map,
934 .freq_tbl = ftbl_pdm2_clk_src,
935 .clkr.hw.init = &(struct clk_init_data){
936 .name = "pdm2_clk_src",
937 .parent_data = gcc_xo_gpll0,
938 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
939 .ops = &clk_rcg2_ops,
940 },
941};
942
943static struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
944 F(144000, P_XO, 16, 3, 25),
945 F(400000, P_XO, 12, 1, 4),
946 F(20000000, P_GPLL0, 15, 1, 2),
947 F(25000000, P_GPLL0, 12, 1, 2),
948 F(50000000, P_GPLL0, 12, 0, 0),
949 F(100000000, P_GPLL0, 6, 0, 0),
950 F(192000000, P_GPLL4, 2, 0, 0),
951 F(384000000, P_GPLL4, 1, 0, 0),
952 { }
953};
954
955static struct freq_tbl ftbl_sdcc1_apps_clk_src_8992[] = {
956 F(144000, P_XO, 16, 3, 25),
957 F(400000, P_XO, 12, 1, 4),
958 F(20000000, P_GPLL0, 15, 1, 2),
959 F(25000000, P_GPLL0, 12, 1, 2),
960 F(50000000, P_GPLL0, 12, 0, 0),
961 F(100000000, P_GPLL0, 6, 0, 0),
962 F(172000000, P_GPLL4, 2, 0, 0),
963 F(344000000, P_GPLL4, 1, 0, 0),
964 { }
965};
966
967static struct clk_rcg2 sdcc1_apps_clk_src = {
968 .cmd_rcgr = 0x04d0,
969 .mnd_width = 8,
970 .hid_width = 5,
971 .parent_map = gcc_xo_gpll0_gpll4_map,
972 .freq_tbl = ftbl_sdcc1_apps_clk_src,
973 .clkr.hw.init = &(struct clk_init_data){
974 .name = "sdcc1_apps_clk_src",
975 .parent_data = gcc_xo_gpll0_gpll4,
976 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4),
977 .ops = &clk_rcg2_floor_ops,
978 },
979};
980
981static struct freq_tbl ftbl_sdcc2_4_apps_clk_src[] = {
982 F(144000, P_XO, 16, 3, 25),
983 F(400000, P_XO, 12, 1, 4),
984 F(20000000, P_GPLL0, 15, 1, 2),
985 F(25000000, P_GPLL0, 12, 1, 2),
986 F(50000000, P_GPLL0, 12, 0, 0),
987 F(100000000, P_GPLL0, 6, 0, 0),
988 F(200000000, P_GPLL0, 3, 0, 0),
989 { }
990};
991
992static struct clk_rcg2 sdcc2_apps_clk_src = {
993 .cmd_rcgr = 0x0510,
994 .mnd_width = 8,
995 .hid_width = 5,
996 .parent_map = gcc_xo_gpll0_map,
997 .freq_tbl = ftbl_sdcc2_4_apps_clk_src,
998 .clkr.hw.init = &(struct clk_init_data){
999 .name = "sdcc2_apps_clk_src",
1000 .parent_data = gcc_xo_gpll0,
1001 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
1002 .ops = &clk_rcg2_floor_ops,
1003 },
1004};
1005
1006static struct clk_rcg2 sdcc3_apps_clk_src = {
1007 .cmd_rcgr = 0x0550,
1008 .mnd_width = 8,
1009 .hid_width = 5,
1010 .parent_map = gcc_xo_gpll0_map,
1011 .freq_tbl = ftbl_sdcc2_4_apps_clk_src,
1012 .clkr.hw.init = &(struct clk_init_data){
1013 .name = "sdcc3_apps_clk_src",
1014 .parent_data = gcc_xo_gpll0,
1015 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
1016 .ops = &clk_rcg2_floor_ops,
1017 },
1018};
1019
1020static struct clk_rcg2 sdcc4_apps_clk_src = {
1021 .cmd_rcgr = 0x0590,
1022 .mnd_width = 8,
1023 .hid_width = 5,
1024 .parent_map = gcc_xo_gpll0_map,
1025 .freq_tbl = ftbl_sdcc2_4_apps_clk_src,
1026 .clkr.hw.init = &(struct clk_init_data){
1027 .name = "sdcc4_apps_clk_src",
1028 .parent_data = gcc_xo_gpll0,
1029 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
1030 .ops = &clk_rcg2_floor_ops,
1031 },
1032};
1033
1034static struct freq_tbl ftbl_tsif_ref_clk_src[] = {
1035 F(105500, P_XO, 1, 1, 182),
1036 { }
1037};
1038
1039static struct clk_rcg2 tsif_ref_clk_src = {
1040 .cmd_rcgr = 0x0d90,
1041 .mnd_width = 8,
1042 .hid_width = 5,
1043 .freq_tbl = ftbl_tsif_ref_clk_src,
1044 .clkr.hw.init = &(struct clk_init_data){
1045 .name = "tsif_ref_clk_src",
1046 .parent_data = &(const struct clk_parent_data){
1047 .fw_name = "xo",
1048 },
1049 .num_parents = 1,
1050 .ops = &clk_rcg2_ops,
1051 },
1052};
1053
1054static struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = {
1055 F(19200000, P_XO, 1, 0, 0),
1056 F(60000000, P_GPLL0, 10, 0, 0),
1057 { }
1058};
1059
1060static struct clk_rcg2 usb30_mock_utmi_clk_src = {
1061 .cmd_rcgr = 0x03e8,
1062 .hid_width = 5,
1063 .parent_map = gcc_xo_gpll0_map,
1064 .freq_tbl = ftbl_usb30_mock_utmi_clk_src,
1065 .clkr.hw.init = &(struct clk_init_data){
1066 .name = "usb30_mock_utmi_clk_src",
1067 .parent_data = gcc_xo_gpll0,
1068 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
1069 .ops = &clk_rcg2_ops,
1070 },
1071};
1072
1073static struct freq_tbl ftbl_usb3_phy_aux_clk_src[] = {
1074 F(1200000, P_XO, 16, 0, 0),
1075 { }
1076};
1077
1078static struct clk_rcg2 usb3_phy_aux_clk_src = {
1079 .cmd_rcgr = 0x1414,
1080 .hid_width = 5,
1081 .freq_tbl = ftbl_usb3_phy_aux_clk_src,
1082 .clkr.hw.init = &(struct clk_init_data){
1083 .name = "usb3_phy_aux_clk_src",
1084 .parent_data = &(const struct clk_parent_data){
1085 .fw_name = "xo",
1086 },
1087 .num_parents = 1,
1088 .ops = &clk_rcg2_ops,
1089 },
1090};
1091
1092static struct freq_tbl ftbl_usb_hs_system_clk_src[] = {
1093 F(75000000, P_GPLL0, 8, 0, 0),
1094 { }
1095};
1096
1097static struct clk_rcg2 usb_hs_system_clk_src = {
1098 .cmd_rcgr = 0x0490,
1099 .hid_width = 5,
1100 .parent_map = gcc_xo_gpll0_map,
1101 .freq_tbl = ftbl_usb_hs_system_clk_src,
1102 .clkr.hw.init = &(struct clk_init_data){
1103 .name = "usb_hs_system_clk_src",
1104 .parent_data = gcc_xo_gpll0,
1105 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
1106 .ops = &clk_rcg2_ops,
1107 },
1108};
1109
1110static struct clk_branch gcc_blsp1_ahb_clk = {
1111 .halt_reg = 0x05c4,
1112 .halt_check = BRANCH_HALT_VOTED,
1113 .clkr = {
1114 .enable_reg = 0x1484,
1115 .enable_mask = BIT(17),
1116 .hw.init = &(struct clk_init_data){
1117 .name = "gcc_blsp1_ahb_clk",
1118 .ops = &clk_branch2_ops,
1119 },
1120 },
1121};
1122
1123static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1124 .halt_reg = 0x0648,
1125 .clkr = {
1126 .enable_reg = 0x0648,
1127 .enable_mask = BIT(0),
1128 .hw.init = &(struct clk_init_data){
1129 .name = "gcc_blsp1_qup1_i2c_apps_clk",
1130 .parent_hws = (const struct clk_hw *[]){ &blsp1_qup1_i2c_apps_clk_src.clkr.hw },
1131 .num_parents = 1,
1132 .flags = CLK_SET_RATE_PARENT,
1133 .ops = &clk_branch2_ops,
1134 },
1135 },
1136};
1137
1138static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1139 .halt_reg = 0x0644,
1140 .clkr = {
1141 .enable_reg = 0x0644,
1142 .enable_mask = BIT(0),
1143 .hw.init = &(struct clk_init_data){
1144 .name = "gcc_blsp1_qup1_spi_apps_clk",
1145 .parent_hws = (const struct clk_hw *[]){ &blsp1_qup1_spi_apps_clk_src.clkr.hw },
1146 .num_parents = 1,
1147 .flags = CLK_SET_RATE_PARENT,
1148 .ops = &clk_branch2_ops,
1149 },
1150 },
1151};
1152
1153static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1154 .halt_reg = 0x06c8,
1155 .clkr = {
1156 .enable_reg = 0x06c8,
1157 .enable_mask = BIT(0),
1158 .hw.init = &(struct clk_init_data){
1159 .name = "gcc_blsp1_qup2_i2c_apps_clk",
1160 .parent_hws = (const struct clk_hw *[]){ &blsp1_qup2_i2c_apps_clk_src.clkr.hw },
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_qup2_spi_apps_clk = {
1169 .halt_reg = 0x06c4,
1170 .clkr = {
1171 .enable_reg = 0x06c4,
1172 .enable_mask = BIT(0),
1173 .hw.init = &(struct clk_init_data){
1174 .name = "gcc_blsp1_qup2_spi_apps_clk",
1175 .parent_hws = (const struct clk_hw *[]){ &blsp1_qup2_spi_apps_clk_src.clkr.hw },
1176 .num_parents = 1,
1177 .flags = CLK_SET_RATE_PARENT,
1178 .ops = &clk_branch2_ops,
1179 },
1180 },
1181};
1182
1183static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1184 .halt_reg = 0x0748,
1185 .clkr = {
1186 .enable_reg = 0x0748,
1187 .enable_mask = BIT(0),
1188 .hw.init = &(struct clk_init_data){
1189 .name = "gcc_blsp1_qup3_i2c_apps_clk",
1190 .parent_hws = (const struct clk_hw *[]){ &blsp1_qup3_i2c_apps_clk_src.clkr.hw },
1191 .num_parents = 1,
1192 .flags = CLK_SET_RATE_PARENT,
1193 .ops = &clk_branch2_ops,
1194 },
1195 },
1196};
1197
1198static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1199 .halt_reg = 0x0744,
1200 .clkr = {
1201 .enable_reg = 0x0744,
1202 .enable_mask = BIT(0),
1203 .hw.init = &(struct clk_init_data){
1204 .name = "gcc_blsp1_qup3_spi_apps_clk",
1205 .parent_hws = (const struct clk_hw *[]){ &blsp1_qup3_spi_apps_clk_src.clkr.hw },
1206 .num_parents = 1,
1207 .flags = CLK_SET_RATE_PARENT,
1208 .ops = &clk_branch2_ops,
1209 },
1210 },
1211};
1212
1213static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1214 .halt_reg = 0x07c8,
1215 .clkr = {
1216 .enable_reg = 0x07c8,
1217 .enable_mask = BIT(0),
1218 .hw.init = &(struct clk_init_data){
1219 .name = "gcc_blsp1_qup4_i2c_apps_clk",
1220 .parent_hws = (const struct clk_hw *[]){ &blsp1_qup4_i2c_apps_clk_src.clkr.hw },
1221 .num_parents = 1,
1222 .flags = CLK_SET_RATE_PARENT,
1223 .ops = &clk_branch2_ops,
1224 },
1225 },
1226};
1227
1228static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1229 .halt_reg = 0x07c4,
1230 .clkr = {
1231 .enable_reg = 0x07c4,
1232 .enable_mask = BIT(0),
1233 .hw.init = &(struct clk_init_data){
1234 .name = "gcc_blsp1_qup4_spi_apps_clk",
1235 .parent_hws = (const struct clk_hw *[]){ &blsp1_qup4_spi_apps_clk_src.clkr.hw },
1236 .num_parents = 1,
1237 .flags = CLK_SET_RATE_PARENT,
1238 .ops = &clk_branch2_ops,
1239 },
1240 },
1241};
1242
1243static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
1244 .halt_reg = 0x0848,
1245 .clkr = {
1246 .enable_reg = 0x0848,
1247 .enable_mask = BIT(0),
1248 .hw.init = &(struct clk_init_data){
1249 .name = "gcc_blsp1_qup5_i2c_apps_clk",
1250 .parent_hws = (const struct clk_hw *[]){ &blsp1_qup5_i2c_apps_clk_src.clkr.hw },
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_qup5_spi_apps_clk = {
1259 .halt_reg = 0x0844,
1260 .clkr = {
1261 .enable_reg = 0x0844,
1262 .enable_mask = BIT(0),
1263 .hw.init = &(struct clk_init_data){
1264 .name = "gcc_blsp1_qup5_spi_apps_clk",
1265 .parent_hws = (const struct clk_hw *[]){ &blsp1_qup5_spi_apps_clk_src.clkr.hw },
1266 .num_parents = 1,
1267 .flags = CLK_SET_RATE_PARENT,
1268 .ops = &clk_branch2_ops,
1269 },
1270 },
1271};
1272
1273static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
1274 .halt_reg = 0x08c8,
1275 .clkr = {
1276 .enable_reg = 0x08c8,
1277 .enable_mask = BIT(0),
1278 .hw.init = &(struct clk_init_data){
1279 .name = "gcc_blsp1_qup6_i2c_apps_clk",
1280 .parent_hws = (const struct clk_hw *[]){ &blsp1_qup6_i2c_apps_clk_src.clkr.hw },
1281 .num_parents = 1,
1282 .flags = CLK_SET_RATE_PARENT,
1283 .ops = &clk_branch2_ops,
1284 },
1285 },
1286};
1287
1288static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
1289 .halt_reg = 0x08c4,
1290 .clkr = {
1291 .enable_reg = 0x08c4,
1292 .enable_mask = BIT(0),
1293 .hw.init = &(struct clk_init_data){
1294 .name = "gcc_blsp1_qup6_spi_apps_clk",
1295 .parent_hws = (const struct clk_hw *[]){ &blsp1_qup6_spi_apps_clk_src.clkr.hw },
1296 .num_parents = 1,
1297 .flags = CLK_SET_RATE_PARENT,
1298 .ops = &clk_branch2_ops,
1299 },
1300 },
1301};
1302
1303static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1304 .halt_reg = 0x0684,
1305 .clkr = {
1306 .enable_reg = 0x0684,
1307 .enable_mask = BIT(0),
1308 .hw.init = &(struct clk_init_data){
1309 .name = "gcc_blsp1_uart1_apps_clk",
1310 .parent_hws = (const struct clk_hw *[]){ &blsp1_uart1_apps_clk_src.clkr.hw },
1311 .num_parents = 1,
1312 .flags = CLK_SET_RATE_PARENT,
1313 .ops = &clk_branch2_ops,
1314 },
1315 },
1316};
1317
1318static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1319 .halt_reg = 0x0704,
1320 .clkr = {
1321 .enable_reg = 0x0704,
1322 .enable_mask = BIT(0),
1323 .hw.init = &(struct clk_init_data){
1324 .name = "gcc_blsp1_uart2_apps_clk",
1325 .parent_hws = (const struct clk_hw *[]){ &blsp1_uart2_apps_clk_src.clkr.hw },
1326 .num_parents = 1,
1327 .flags = CLK_SET_RATE_PARENT,
1328 .ops = &clk_branch2_ops,
1329 },
1330 },
1331};
1332
1333static struct clk_branch gcc_blsp1_uart3_apps_clk = {
1334 .halt_reg = 0x0784,
1335 .clkr = {
1336 .enable_reg = 0x0784,
1337 .enable_mask = BIT(0),
1338 .hw.init = &(struct clk_init_data){
1339 .name = "gcc_blsp1_uart3_apps_clk",
1340 .parent_hws = (const struct clk_hw *[]){ &blsp1_uart3_apps_clk_src.clkr.hw },
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_uart4_apps_clk = {
1349 .halt_reg = 0x0804,
1350 .clkr = {
1351 .enable_reg = 0x0804,
1352 .enable_mask = BIT(0),
1353 .hw.init = &(struct clk_init_data){
1354 .name = "gcc_blsp1_uart4_apps_clk",
1355 .parent_hws = (const struct clk_hw *[]){ &blsp1_uart4_apps_clk_src.clkr.hw },
1356 .num_parents = 1,
1357 .flags = CLK_SET_RATE_PARENT,
1358 .ops = &clk_branch2_ops,
1359 },
1360 },
1361};
1362
1363static struct clk_branch gcc_blsp1_uart5_apps_clk = {
1364 .halt_reg = 0x0884,
1365 .clkr = {
1366 .enable_reg = 0x0884,
1367 .enable_mask = BIT(0),
1368 .hw.init = &(struct clk_init_data){
1369 .name = "gcc_blsp1_uart5_apps_clk",
1370 .parent_hws = (const struct clk_hw *[]){ &blsp1_uart5_apps_clk_src.clkr.hw },
1371 .num_parents = 1,
1372 .flags = CLK_SET_RATE_PARENT,
1373 .ops = &clk_branch2_ops,
1374 },
1375 },
1376};
1377
1378static struct clk_branch gcc_blsp1_uart6_apps_clk = {
1379 .halt_reg = 0x0904,
1380 .clkr = {
1381 .enable_reg = 0x0904,
1382 .enable_mask = BIT(0),
1383 .hw.init = &(struct clk_init_data){
1384 .name = "gcc_blsp1_uart6_apps_clk",
1385 .parent_hws = (const struct clk_hw *[]){ &blsp1_uart6_apps_clk_src.clkr.hw },
1386 .num_parents = 1,
1387 .flags = CLK_SET_RATE_PARENT,
1388 .ops = &clk_branch2_ops,
1389 },
1390 },
1391};
1392
1393static struct clk_branch gcc_blsp2_ahb_clk = {
1394 .halt_reg = 0x0944,
1395 .halt_check = BRANCH_HALT_VOTED,
1396 .clkr = {
1397 .enable_reg = 0x1484,
1398 .enable_mask = BIT(15),
1399 .hw.init = &(struct clk_init_data){
1400 .name = "gcc_blsp2_ahb_clk",
1401 .ops = &clk_branch2_ops,
1402 },
1403 },
1404};
1405
1406static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
1407 .halt_reg = 0x0988,
1408 .clkr = {
1409 .enable_reg = 0x0988,
1410 .enable_mask = BIT(0),
1411 .hw.init = &(struct clk_init_data){
1412 .name = "gcc_blsp2_qup1_i2c_apps_clk",
1413 .parent_hws = (const struct clk_hw *[]){ &blsp2_qup1_i2c_apps_clk_src.clkr.hw },
1414 .num_parents = 1,
1415 .flags = CLK_SET_RATE_PARENT,
1416 .ops = &clk_branch2_ops,
1417 },
1418 },
1419};
1420
1421static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
1422 .halt_reg = 0x0984,
1423 .clkr = {
1424 .enable_reg = 0x0984,
1425 .enable_mask = BIT(0),
1426 .hw.init = &(struct clk_init_data){
1427 .name = "gcc_blsp2_qup1_spi_apps_clk",
1428 .parent_hws = (const struct clk_hw *[]){ &blsp2_qup1_spi_apps_clk_src.clkr.hw },
1429 .num_parents = 1,
1430 .flags = CLK_SET_RATE_PARENT,
1431 .ops = &clk_branch2_ops,
1432 },
1433 },
1434};
1435
1436static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
1437 .halt_reg = 0x0a08,
1438 .clkr = {
1439 .enable_reg = 0x0a08,
1440 .enable_mask = BIT(0),
1441 .hw.init = &(struct clk_init_data){
1442 .name = "gcc_blsp2_qup2_i2c_apps_clk",
1443 .parent_hws = (const struct clk_hw *[]){ &blsp2_qup2_i2c_apps_clk_src.clkr.hw },
1444 .num_parents = 1,
1445 .flags = CLK_SET_RATE_PARENT,
1446 .ops = &clk_branch2_ops,
1447 },
1448 },
1449};
1450
1451static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
1452 .halt_reg = 0x0a04,
1453 .clkr = {
1454 .enable_reg = 0x0a04,
1455 .enable_mask = BIT(0),
1456 .hw.init = &(struct clk_init_data){
1457 .name = "gcc_blsp2_qup2_spi_apps_clk",
1458 .parent_hws = (const struct clk_hw *[]){ &blsp2_qup2_spi_apps_clk_src.clkr.hw },
1459 .num_parents = 1,
1460 .flags = CLK_SET_RATE_PARENT,
1461 .ops = &clk_branch2_ops,
1462 },
1463 },
1464};
1465
1466static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
1467 .halt_reg = 0x0a88,
1468 .clkr = {
1469 .enable_reg = 0x0a88,
1470 .enable_mask = BIT(0),
1471 .hw.init = &(struct clk_init_data){
1472 .name = "gcc_blsp2_qup3_i2c_apps_clk",
1473 .parent_hws = (const struct clk_hw *[]){ &blsp2_qup3_i2c_apps_clk_src.clkr.hw },
1474 .num_parents = 1,
1475 .flags = CLK_SET_RATE_PARENT,
1476 .ops = &clk_branch2_ops,
1477 },
1478 },
1479};
1480
1481static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
1482 .halt_reg = 0x0a84,
1483 .clkr = {
1484 .enable_reg = 0x0a84,
1485 .enable_mask = BIT(0),
1486 .hw.init = &(struct clk_init_data){
1487 .name = "gcc_blsp2_qup3_spi_apps_clk",
1488 .parent_hws = (const struct clk_hw *[]){ &blsp2_qup3_spi_apps_clk_src.clkr.hw },
1489 .num_parents = 1,
1490 .flags = CLK_SET_RATE_PARENT,
1491 .ops = &clk_branch2_ops,
1492 },
1493 },
1494};
1495
1496static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
1497 .halt_reg = 0x0b08,
1498 .clkr = {
1499 .enable_reg = 0x0b08,
1500 .enable_mask = BIT(0),
1501 .hw.init = &(struct clk_init_data){
1502 .name = "gcc_blsp2_qup4_i2c_apps_clk",
1503 .parent_hws = (const struct clk_hw *[]){ &blsp2_qup4_i2c_apps_clk_src.clkr.hw },
1504 .num_parents = 1,
1505 .flags = CLK_SET_RATE_PARENT,
1506 .ops = &clk_branch2_ops,
1507 },
1508 },
1509};
1510
1511static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
1512 .halt_reg = 0x0b04,
1513 .clkr = {
1514 .enable_reg = 0x0b04,
1515 .enable_mask = BIT(0),
1516 .hw.init = &(struct clk_init_data){
1517 .name = "gcc_blsp2_qup4_spi_apps_clk",
1518 .parent_hws = (const struct clk_hw *[]){ &blsp2_qup4_spi_apps_clk_src.clkr.hw },
1519 .num_parents = 1,
1520 .flags = CLK_SET_RATE_PARENT,
1521 .ops = &clk_branch2_ops,
1522 },
1523 },
1524};
1525
1526static struct clk_branch gcc_blsp2_qup5_i2c_apps_clk = {
1527 .halt_reg = 0x0b88,
1528 .clkr = {
1529 .enable_reg = 0x0b88,
1530 .enable_mask = BIT(0),
1531 .hw.init = &(struct clk_init_data){
1532 .name = "gcc_blsp2_qup5_i2c_apps_clk",
1533 .parent_hws = (const struct clk_hw *[]){ &blsp2_qup5_i2c_apps_clk_src.clkr.hw },
1534 .num_parents = 1,
1535 .flags = CLK_SET_RATE_PARENT,
1536 .ops = &clk_branch2_ops,
1537 },
1538 },
1539};
1540
1541static struct clk_branch gcc_blsp2_qup5_spi_apps_clk = {
1542 .halt_reg = 0x0b84,
1543 .clkr = {
1544 .enable_reg = 0x0b84,
1545 .enable_mask = BIT(0),
1546 .hw.init = &(struct clk_init_data){
1547 .name = "gcc_blsp2_qup5_spi_apps_clk",
1548 .parent_hws = (const struct clk_hw *[]){ &blsp2_qup5_spi_apps_clk_src.clkr.hw },
1549 .num_parents = 1,
1550 .flags = CLK_SET_RATE_PARENT,
1551 .ops = &clk_branch2_ops,
1552 },
1553 },
1554};
1555
1556static struct clk_branch gcc_blsp2_qup6_i2c_apps_clk = {
1557 .halt_reg = 0x0c08,
1558 .clkr = {
1559 .enable_reg = 0x0c08,
1560 .enable_mask = BIT(0),
1561 .hw.init = &(struct clk_init_data){
1562 .name = "gcc_blsp2_qup6_i2c_apps_clk",
1563 .parent_hws = (const struct clk_hw *[]){ &blsp2_qup6_i2c_apps_clk_src.clkr.hw },
1564 .num_parents = 1,
1565 .flags = CLK_SET_RATE_PARENT,
1566 .ops = &clk_branch2_ops,
1567 },
1568 },
1569};
1570
1571static struct clk_branch gcc_blsp2_qup6_spi_apps_clk = {
1572 .halt_reg = 0x0c04,
1573 .clkr = {
1574 .enable_reg = 0x0c04,
1575 .enable_mask = BIT(0),
1576 .hw.init = &(struct clk_init_data){
1577 .name = "gcc_blsp2_qup6_spi_apps_clk",
1578 .parent_hws = (const struct clk_hw *[]){ &blsp2_qup6_spi_apps_clk_src.clkr.hw },
1579 .num_parents = 1,
1580 .flags = CLK_SET_RATE_PARENT,
1581 .ops = &clk_branch2_ops,
1582 },
1583 },
1584};
1585
1586static struct clk_branch gcc_blsp2_uart1_apps_clk = {
1587 .halt_reg = 0x09c4,
1588 .clkr = {
1589 .enable_reg = 0x09c4,
1590 .enable_mask = BIT(0),
1591 .hw.init = &(struct clk_init_data){
1592 .name = "gcc_blsp2_uart1_apps_clk",
1593 .parent_hws = (const struct clk_hw *[]){ &blsp2_uart1_apps_clk_src.clkr.hw },
1594 .num_parents = 1,
1595 .flags = CLK_SET_RATE_PARENT,
1596 .ops = &clk_branch2_ops,
1597 },
1598 },
1599};
1600
1601static struct clk_branch gcc_blsp2_uart2_apps_clk = {
1602 .halt_reg = 0x0a44,
1603 .clkr = {
1604 .enable_reg = 0x0a44,
1605 .enable_mask = BIT(0),
1606 .hw.init = &(struct clk_init_data){
1607 .name = "gcc_blsp2_uart2_apps_clk",
1608 .parent_hws = (const struct clk_hw *[]){ &blsp2_uart2_apps_clk_src.clkr.hw },
1609 .num_parents = 1,
1610 .flags = CLK_SET_RATE_PARENT,
1611 .ops = &clk_branch2_ops,
1612 },
1613 },
1614};
1615
1616static struct clk_branch gcc_blsp2_uart3_apps_clk = {
1617 .halt_reg = 0x0ac4,
1618 .clkr = {
1619 .enable_reg = 0x0ac4,
1620 .enable_mask = BIT(0),
1621 .hw.init = &(struct clk_init_data){
1622 .name = "gcc_blsp2_uart3_apps_clk",
1623 .parent_hws = (const struct clk_hw *[]){ &blsp2_uart3_apps_clk_src.clkr.hw },
1624 .num_parents = 1,
1625 .flags = CLK_SET_RATE_PARENT,
1626 .ops = &clk_branch2_ops,
1627 },
1628 },
1629};
1630
1631static struct clk_branch gcc_blsp2_uart4_apps_clk = {
1632 .halt_reg = 0x0b44,
1633 .clkr = {
1634 .enable_reg = 0x0b44,
1635 .enable_mask = BIT(0),
1636 .hw.init = &(struct clk_init_data){
1637 .name = "gcc_blsp2_uart4_apps_clk",
1638 .parent_hws = (const struct clk_hw *[]){ &blsp2_uart4_apps_clk_src.clkr.hw },
1639 .num_parents = 1,
1640 .flags = CLK_SET_RATE_PARENT,
1641 .ops = &clk_branch2_ops,
1642 },
1643 },
1644};
1645
1646static struct clk_branch gcc_blsp2_uart5_apps_clk = {
1647 .halt_reg = 0x0bc4,
1648 .clkr = {
1649 .enable_reg = 0x0bc4,
1650 .enable_mask = BIT(0),
1651 .hw.init = &(struct clk_init_data){
1652 .name = "gcc_blsp2_uart5_apps_clk",
1653 .parent_hws = (const struct clk_hw *[]){ &blsp2_uart5_apps_clk_src.clkr.hw },
1654 .num_parents = 1,
1655 .flags = CLK_SET_RATE_PARENT,
1656 .ops = &clk_branch2_ops,
1657 },
1658 },
1659};
1660
1661static struct clk_branch gcc_blsp2_uart6_apps_clk = {
1662 .halt_reg = 0x0c44,
1663 .clkr = {
1664 .enable_reg = 0x0c44,
1665 .enable_mask = BIT(0),
1666 .hw.init = &(struct clk_init_data){
1667 .name = "gcc_blsp2_uart6_apps_clk",
1668 .parent_hws = (const struct clk_hw *[]){ &blsp2_uart6_apps_clk_src.clkr.hw },
1669 .num_parents = 1,
1670 .flags = CLK_SET_RATE_PARENT,
1671 .ops = &clk_branch2_ops,
1672 },
1673 },
1674};
1675
1676static struct clk_branch gcc_gp1_clk = {
1677 .halt_reg = 0x1900,
1678 .clkr = {
1679 .enable_reg = 0x1900,
1680 .enable_mask = BIT(0),
1681 .hw.init = &(struct clk_init_data){
1682 .name = "gcc_gp1_clk",
1683 .parent_hws = (const struct clk_hw *[]){ &gp1_clk_src.clkr.hw },
1684 .num_parents = 1,
1685 .flags = CLK_SET_RATE_PARENT,
1686 .ops = &clk_branch2_ops,
1687 },
1688 },
1689};
1690
1691static struct clk_branch gcc_gp2_clk = {
1692 .halt_reg = 0x1940,
1693 .clkr = {
1694 .enable_reg = 0x1940,
1695 .enable_mask = BIT(0),
1696 .hw.init = &(struct clk_init_data){
1697 .name = "gcc_gp2_clk",
1698 .parent_hws = (const struct clk_hw *[]){ &gp2_clk_src.clkr.hw },
1699 .num_parents = 1,
1700 .flags = CLK_SET_RATE_PARENT,
1701 .ops = &clk_branch2_ops,
1702 },
1703 },
1704};
1705
1706static struct clk_branch gcc_gp3_clk = {
1707 .halt_reg = 0x1980,
1708 .clkr = {
1709 .enable_reg = 0x1980,
1710 .enable_mask = BIT(0),
1711 .hw.init = &(struct clk_init_data){
1712 .name = "gcc_gp3_clk",
1713 .parent_hws = (const struct clk_hw *[]){ &gp3_clk_src.clkr.hw },
1714 .num_parents = 1,
1715 .flags = CLK_SET_RATE_PARENT,
1716 .ops = &clk_branch2_ops,
1717 },
1718 },
1719};
1720
1721static struct clk_branch gcc_lpass_q6_axi_clk = {
1722 .halt_reg = 0x0280,
1723 .clkr = {
1724 .enable_reg = 0x0280,
1725 .enable_mask = BIT(0),
1726 .hw.init = &(struct clk_init_data){
1727 .name = "gcc_lpass_q6_axi_clk",
1728 .ops = &clk_branch2_ops,
1729 },
1730 },
1731};
1732
1733static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
1734 .halt_reg = 0x0284,
1735 .clkr = {
1736 .enable_reg = 0x0284,
1737 .enable_mask = BIT(0),
1738 .hw.init = &(struct clk_init_data){
1739 .name = "gcc_mss_q6_bimc_axi_clk",
1740 .ops = &clk_branch2_ops,
1741 },
1742 },
1743};
1744
1745static struct clk_branch gcc_pcie_0_aux_clk = {
1746 .halt_reg = 0x1ad4,
1747 .clkr = {
1748 .enable_reg = 0x1ad4,
1749 .enable_mask = BIT(0),
1750 .hw.init = &(struct clk_init_data){
1751 .name = "gcc_pcie_0_aux_clk",
1752 .parent_hws = (const struct clk_hw *[]){ &pcie_0_aux_clk_src.clkr.hw },
1753 .num_parents = 1,
1754 .flags = CLK_SET_RATE_PARENT,
1755 .ops = &clk_branch2_ops,
1756 },
1757 },
1758};
1759
1760static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
1761 .halt_reg = 0x1ad0,
1762 .clkr = {
1763 .enable_reg = 0x1ad0,
1764 .enable_mask = BIT(0),
1765 .hw.init = &(struct clk_init_data){
1766 .name = "gcc_pcie_0_cfg_ahb_clk",
1767 .ops = &clk_branch2_ops,
1768 },
1769 },
1770};
1771
1772static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
1773 .halt_reg = 0x1acc,
1774 .clkr = {
1775 .enable_reg = 0x1acc,
1776 .enable_mask = BIT(0),
1777 .hw.init = &(struct clk_init_data){
1778 .name = "gcc_pcie_0_mstr_axi_clk",
1779 .ops = &clk_branch2_ops,
1780 },
1781 },
1782};
1783
1784static struct clk_branch gcc_pcie_0_pipe_clk = {
1785 .halt_reg = 0x1ad8,
1786 .halt_check = BRANCH_HALT_DELAY,
1787 .clkr = {
1788 .enable_reg = 0x1ad8,
1789 .enable_mask = BIT(0),
1790 .hw.init = &(struct clk_init_data){
1791 .name = "gcc_pcie_0_pipe_clk",
1792 .parent_hws = (const struct clk_hw *[]){ &pcie_0_pipe_clk_src.clkr.hw },
1793 .num_parents = 1,
1794 .flags = CLK_SET_RATE_PARENT,
1795 .ops = &clk_branch2_ops,
1796 },
1797 },
1798};
1799
1800static struct clk_branch gcc_pcie_0_slv_axi_clk = {
1801 .halt_reg = 0x1ac8,
1802 .halt_check = BRANCH_HALT_DELAY,
1803 .clkr = {
1804 .enable_reg = 0x1ac8,
1805 .enable_mask = BIT(0),
1806 .hw.init = &(struct clk_init_data){
1807 .name = "gcc_pcie_0_slv_axi_clk",
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 .name = "gcc_pcie_1_aux_clk",
1820 .parent_hws = (const struct clk_hw *[]){ &pcie_1_aux_clk_src.clkr.hw },
1821 .num_parents = 1,
1822 .flags = CLK_SET_RATE_PARENT,
1823 .ops = &clk_branch2_ops,
1824 },
1825 },
1826};
1827
1828static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
1829 .halt_reg = 0x1b54,
1830 .clkr = {
1831 .enable_reg = 0x1b54,
1832 .enable_mask = BIT(0),
1833 .hw.init = &(struct clk_init_data){
1834 .name = "gcc_pcie_1_cfg_ahb_clk",
1835 .ops = &clk_branch2_ops,
1836 },
1837 },
1838};
1839
1840static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
1841 .halt_reg = 0x1b50,
1842 .clkr = {
1843 .enable_reg = 0x1b50,
1844 .enable_mask = BIT(0),
1845 .hw.init = &(struct clk_init_data){
1846 .name = "gcc_pcie_1_mstr_axi_clk",
1847 .ops = &clk_branch2_ops,
1848 },
1849 },
1850};
1851
1852static struct clk_branch gcc_pcie_1_pipe_clk = {
1853 .halt_reg = 0x1b58,
1854 .halt_check = BRANCH_HALT_DELAY,
1855 .clkr = {
1856 .enable_reg = 0x1b58,
1857 .enable_mask = BIT(0),
1858 .hw.init = &(struct clk_init_data){
1859 .name = "gcc_pcie_1_pipe_clk",
1860 .parent_hws = (const struct clk_hw *[]){ &pcie_1_pipe_clk_src.clkr.hw },
1861 .num_parents = 1,
1862 .flags = CLK_SET_RATE_PARENT,
1863 .ops = &clk_branch2_ops,
1864 },
1865 },
1866};
1867
1868static struct clk_branch gcc_pcie_1_slv_axi_clk = {
1869 .halt_reg = 0x1b48,
1870 .clkr = {
1871 .enable_reg = 0x1b48,
1872 .enable_mask = BIT(0),
1873 .hw.init = &(struct clk_init_data){
1874 .name = "gcc_pcie_1_slv_axi_clk",
1875 .ops = &clk_branch2_ops,
1876 },
1877 },
1878};
1879
1880static struct clk_branch gcc_pdm2_clk = {
1881 .halt_reg = 0x0ccc,
1882 .clkr = {
1883 .enable_reg = 0x0ccc,
1884 .enable_mask = BIT(0),
1885 .hw.init = &(struct clk_init_data){
1886 .name = "gcc_pdm2_clk",
1887 .parent_hws = (const struct clk_hw *[]){ &pdm2_clk_src.clkr.hw },
1888 .num_parents = 1,
1889 .flags = CLK_SET_RATE_PARENT,
1890 .ops = &clk_branch2_ops,
1891 },
1892 },
1893};
1894
1895static struct clk_branch gcc_pdm_ahb_clk = {
1896 .halt_reg = 0x0cc4,
1897 .clkr = {
1898 .enable_reg = 0x0cc4,
1899 .enable_mask = BIT(0),
1900 .hw.init = &(struct clk_init_data){
1901 .name = "gcc_pdm_ahb_clk",
1902 .ops = &clk_branch2_ops,
1903 },
1904 },
1905};
1906
1907static struct clk_branch gcc_sdcc1_apps_clk = {
1908 .halt_reg = 0x04c4,
1909 .clkr = {
1910 .enable_reg = 0x04c4,
1911 .enable_mask = BIT(0),
1912 .hw.init = &(struct clk_init_data){
1913 .name = "gcc_sdcc1_apps_clk",
1914 .parent_hws = (const struct clk_hw *[]){ &sdcc1_apps_clk_src.clkr.hw },
1915 .num_parents = 1,
1916 .flags = CLK_SET_RATE_PARENT,
1917 .ops = &clk_branch2_ops,
1918 },
1919 },
1920};
1921
1922static struct clk_branch gcc_sdcc1_ahb_clk = {
1923 .halt_reg = 0x04c8,
1924 .clkr = {
1925 .enable_reg = 0x04c8,
1926 .enable_mask = BIT(0),
1927 .hw.init = &(struct clk_init_data){
1928 .name = "gcc_sdcc1_ahb_clk",
1929 .ops = &clk_branch2_ops,
1930 },
1931 },
1932};
1933
1934static struct clk_branch gcc_sdcc2_ahb_clk = {
1935 .halt_reg = 0x0508,
1936 .clkr = {
1937 .enable_reg = 0x0508,
1938 .enable_mask = BIT(0),
1939 .hw.init = &(struct clk_init_data){
1940 .name = "gcc_sdcc2_ahb_clk",
1941 .ops = &clk_branch2_ops,
1942 },
1943 },
1944};
1945
1946static struct clk_branch gcc_sdcc2_apps_clk = {
1947 .halt_reg = 0x0504,
1948 .clkr = {
1949 .enable_reg = 0x0504,
1950 .enable_mask = BIT(0),
1951 .hw.init = &(struct clk_init_data){
1952 .name = "gcc_sdcc2_apps_clk",
1953 .parent_hws = (const struct clk_hw *[]){ &sdcc2_apps_clk_src.clkr.hw },
1954 .num_parents = 1,
1955 .flags = CLK_SET_RATE_PARENT,
1956 .ops = &clk_branch2_ops,
1957 },
1958 },
1959};
1960
1961static struct clk_branch gcc_sdcc3_ahb_clk = {
1962 .halt_reg = 0x0548,
1963 .clkr = {
1964 .enable_reg = 0x0548,
1965 .enable_mask = BIT(0),
1966 .hw.init = &(struct clk_init_data){
1967 .name = "gcc_sdcc3_ahb_clk",
1968 .ops = &clk_branch2_ops,
1969 },
1970 },
1971};
1972
1973static struct clk_branch gcc_sdcc3_apps_clk = {
1974 .halt_reg = 0x0544,
1975 .clkr = {
1976 .enable_reg = 0x0544,
1977 .enable_mask = BIT(0),
1978 .hw.init = &(struct clk_init_data){
1979 .name = "gcc_sdcc3_apps_clk",
1980 .parent_hws = (const struct clk_hw *[]){ &sdcc3_apps_clk_src.clkr.hw },
1981 .num_parents = 1,
1982 .flags = CLK_SET_RATE_PARENT,
1983 .ops = &clk_branch2_ops,
1984 },
1985 },
1986};
1987
1988static struct clk_branch gcc_sdcc4_ahb_clk = {
1989 .halt_reg = 0x0588,
1990 .clkr = {
1991 .enable_reg = 0x0588,
1992 .enable_mask = BIT(0),
1993 .hw.init = &(struct clk_init_data){
1994 .name = "gcc_sdcc4_ahb_clk",
1995 .ops = &clk_branch2_ops,
1996 },
1997 },
1998};
1999
2000static struct clk_branch gcc_sdcc4_apps_clk = {
2001 .halt_reg = 0x0584,
2002 .clkr = {
2003 .enable_reg = 0x0584,
2004 .enable_mask = BIT(0),
2005 .hw.init = &(struct clk_init_data){
2006 .name = "gcc_sdcc4_apps_clk",
2007 .parent_hws = (const struct clk_hw *[]){ &sdcc4_apps_clk_src.clkr.hw },
2008 .num_parents = 1,
2009 .flags = CLK_SET_RATE_PARENT,
2010 .ops = &clk_branch2_ops,
2011 },
2012 },
2013};
2014
2015static struct clk_branch gcc_sys_noc_ufs_axi_clk = {
2016 .halt_reg = 0x1d7c,
2017 .clkr = {
2018 .enable_reg = 0x1d7c,
2019 .enable_mask = BIT(0),
2020 .hw.init = &(struct clk_init_data){
2021 .name = "gcc_sys_noc_ufs_axi_clk",
2022 .parent_hws = (const struct clk_hw *[]){ &ufs_axi_clk_src.clkr.hw },
2023 .num_parents = 1,
2024 .flags = CLK_SET_RATE_PARENT,
2025 .ops = &clk_branch2_ops,
2026 },
2027 },
2028};
2029
2030static struct clk_branch gcc_sys_noc_usb3_axi_clk = {
2031 .halt_reg = 0x03fc,
2032 .clkr = {
2033 .enable_reg = 0x03fc,
2034 .enable_mask = BIT(0),
2035 .hw.init = &(struct clk_init_data){
2036 .name = "gcc_sys_noc_usb3_axi_clk",
2037 .parent_hws = (const struct clk_hw *[]){ &usb30_master_clk_src.clkr.hw },
2038 .num_parents = 1,
2039 .flags = CLK_SET_RATE_PARENT,
2040 .ops = &clk_branch2_ops,
2041 },
2042 },
2043};
2044
2045static struct clk_branch gcc_tsif_ahb_clk = {
2046 .halt_reg = 0x0d84,
2047 .clkr = {
2048 .enable_reg = 0x0d84,
2049 .enable_mask = BIT(0),
2050 .hw.init = &(struct clk_init_data){
2051 .name = "gcc_tsif_ahb_clk",
2052 .ops = &clk_branch2_ops,
2053 },
2054 },
2055};
2056
2057static struct clk_branch gcc_tsif_ref_clk = {
2058 .halt_reg = 0x0d88,
2059 .clkr = {
2060 .enable_reg = 0x0d88,
2061 .enable_mask = BIT(0),
2062 .hw.init = &(struct clk_init_data){
2063 .name = "gcc_tsif_ref_clk",
2064 .parent_hws = (const struct clk_hw *[]){ &tsif_ref_clk_src.clkr.hw },
2065 .num_parents = 1,
2066 .flags = CLK_SET_RATE_PARENT,
2067 .ops = &clk_branch2_ops,
2068 },
2069 },
2070};
2071
2072static struct clk_branch gcc_ufs_ahb_clk = {
2073 .halt_reg = 0x1d4c,
2074 .clkr = {
2075 .enable_reg = 0x1d4c,
2076 .enable_mask = BIT(0),
2077 .hw.init = &(struct clk_init_data){
2078 .name = "gcc_ufs_ahb_clk",
2079 .ops = &clk_branch2_ops,
2080 },
2081 },
2082};
2083
2084static struct clk_branch gcc_ufs_axi_clk = {
2085 .halt_reg = 0x1d48,
2086 .clkr = {
2087 .enable_reg = 0x1d48,
2088 .enable_mask = BIT(0),
2089 .hw.init = &(struct clk_init_data){
2090 .name = "gcc_ufs_axi_clk",
2091 .parent_hws = (const struct clk_hw *[]){ &ufs_axi_clk_src.clkr.hw },
2092 .num_parents = 1,
2093 .flags = CLK_SET_RATE_PARENT,
2094 .ops = &clk_branch2_ops,
2095 },
2096 },
2097};
2098
2099static struct clk_branch gcc_ufs_rx_cfg_clk = {
2100 .halt_reg = 0x1d54,
2101 .clkr = {
2102 .enable_reg = 0x1d54,
2103 .enable_mask = BIT(0),
2104 .hw.init = &(struct clk_init_data){
2105 .name = "gcc_ufs_rx_cfg_clk",
2106 .parent_hws = (const struct clk_hw *[]){ &ufs_axi_clk_src.clkr.hw },
2107 .num_parents = 1,
2108 .flags = CLK_SET_RATE_PARENT,
2109 .ops = &clk_branch2_ops,
2110 },
2111 },
2112};
2113
2114static struct clk_branch gcc_ufs_rx_symbol_0_clk = {
2115 .halt_reg = 0x1d60,
2116 .halt_check = BRANCH_HALT_DELAY,
2117 .clkr = {
2118 .enable_reg = 0x1d60,
2119 .enable_mask = BIT(0),
2120 .hw.init = &(struct clk_init_data){
2121 .name = "gcc_ufs_rx_symbol_0_clk",
2122 .ops = &clk_branch2_ops,
2123 },
2124 },
2125};
2126
2127static struct clk_branch gcc_ufs_rx_symbol_1_clk = {
2128 .halt_reg = 0x1d64,
2129 .halt_check = BRANCH_HALT_DELAY,
2130 .clkr = {
2131 .enable_reg = 0x1d64,
2132 .enable_mask = BIT(0),
2133 .hw.init = &(struct clk_init_data){
2134 .name = "gcc_ufs_rx_symbol_1_clk",
2135 .ops = &clk_branch2_ops,
2136 },
2137 },
2138};
2139
2140static struct clk_branch gcc_ufs_tx_cfg_clk = {
2141 .halt_reg = 0x1d50,
2142 .clkr = {
2143 .enable_reg = 0x1d50,
2144 .enable_mask = BIT(0),
2145 .hw.init = &(struct clk_init_data){
2146 .name = "gcc_ufs_tx_cfg_clk",
2147 .parent_hws = (const struct clk_hw *[]){ &ufs_axi_clk_src.clkr.hw },
2148 .num_parents = 1,
2149 .flags = CLK_SET_RATE_PARENT,
2150 .ops = &clk_branch2_ops,
2151 },
2152 },
2153};
2154
2155static struct clk_branch gcc_ufs_tx_symbol_0_clk = {
2156 .halt_reg = 0x1d58,
2157 .halt_check = BRANCH_HALT_DELAY,
2158 .clkr = {
2159 .enable_reg = 0x1d58,
2160 .enable_mask = BIT(0),
2161 .hw.init = &(struct clk_init_data){
2162 .name = "gcc_ufs_tx_symbol_0_clk",
2163 .ops = &clk_branch2_ops,
2164 },
2165 },
2166};
2167
2168static struct clk_branch gcc_ufs_tx_symbol_1_clk = {
2169 .halt_reg = 0x1d5c,
2170 .halt_check = BRANCH_HALT_DELAY,
2171 .clkr = {
2172 .enable_reg = 0x1d5c,
2173 .enable_mask = BIT(0),
2174 .hw.init = &(struct clk_init_data){
2175 .name = "gcc_ufs_tx_symbol_1_clk",
2176 .ops = &clk_branch2_ops,
2177 },
2178 },
2179};
2180
2181static struct clk_branch gcc_usb2_hs_phy_sleep_clk = {
2182 .halt_reg = 0x04ac,
2183 .clkr = {
2184 .enable_reg = 0x04ac,
2185 .enable_mask = BIT(0),
2186 .hw.init = &(struct clk_init_data){
2187 .name = "gcc_usb2_hs_phy_sleep_clk",
2188 .parent_data = &(const struct clk_parent_data){
2189 .fw_name = "sleep",
2190 .name = "sleep"
2191 },
2192 .num_parents = 1,
2193 .ops = &clk_branch2_ops,
2194 },
2195 },
2196};
2197
2198static struct clk_branch gcc_usb30_master_clk = {
2199 .halt_reg = 0x03c8,
2200 .clkr = {
2201 .enable_reg = 0x03c8,
2202 .enable_mask = BIT(0),
2203 .hw.init = &(struct clk_init_data){
2204 .name = "gcc_usb30_master_clk",
2205 .parent_hws = (const struct clk_hw *[]){ &usb30_master_clk_src.clkr.hw },
2206 .num_parents = 1,
2207 .flags = CLK_SET_RATE_PARENT,
2208 .ops = &clk_branch2_ops,
2209 },
2210 },
2211};
2212
2213static struct clk_branch gcc_usb30_mock_utmi_clk = {
2214 .halt_reg = 0x03d0,
2215 .clkr = {
2216 .enable_reg = 0x03d0,
2217 .enable_mask = BIT(0),
2218 .hw.init = &(struct clk_init_data){
2219 .name = "gcc_usb30_mock_utmi_clk",
2220 .parent_hws = (const struct clk_hw *[]){ &usb30_mock_utmi_clk_src.clkr.hw },
2221 .num_parents = 1,
2222 .flags = CLK_SET_RATE_PARENT,
2223 .ops = &clk_branch2_ops,
2224 },
2225 },
2226};
2227
2228static struct clk_branch gcc_usb30_sleep_clk = {
2229 .halt_reg = 0x03cc,
2230 .clkr = {
2231 .enable_reg = 0x03cc,
2232 .enable_mask = BIT(0),
2233 .hw.init = &(struct clk_init_data){
2234 .name = "gcc_usb30_sleep_clk",
2235 .parent_data = &(const struct clk_parent_data){
2236 .fw_name = "sleep",
2237 .name = "sleep"
2238 },
2239 .num_parents = 1,
2240 .ops = &clk_branch2_ops,
2241 },
2242 },
2243};
2244
2245static struct clk_branch gcc_usb3_phy_aux_clk = {
2246 .halt_reg = 0x1408,
2247 .clkr = {
2248 .enable_reg = 0x1408,
2249 .enable_mask = BIT(0),
2250 .hw.init = &(struct clk_init_data){
2251 .name = "gcc_usb3_phy_aux_clk",
2252 .parent_hws = (const struct clk_hw *[]){ &usb3_phy_aux_clk_src.clkr.hw },
2253 .num_parents = 1,
2254 .flags = CLK_SET_RATE_PARENT,
2255 .ops = &clk_branch2_ops,
2256 },
2257 },
2258};
2259
2260static struct clk_branch gcc_usb3_phy_pipe_clk = {
2261 .halt_reg = 0x140c,
2262 .halt_check = BRANCH_HALT_SKIP,
2263 .clkr = {
2264 .enable_reg = 0x140c,
2265 .enable_mask = BIT(0),
2266 .hw.init = &(struct clk_init_data){
2267 .name = "gcc_usb3_phy_pipe_clk",
2268 .ops = &clk_branch2_ops,
2269 },
2270 },
2271};
2272
2273static struct clk_branch gcc_usb_hs_ahb_clk = {
2274 .halt_reg = 0x0488,
2275 .clkr = {
2276 .enable_reg = 0x0488,
2277 .enable_mask = BIT(0),
2278 .hw.init = &(struct clk_init_data){
2279 .name = "gcc_usb_hs_ahb_clk",
2280 .ops = &clk_branch2_ops,
2281 },
2282 },
2283};
2284
2285static struct clk_branch gcc_usb_hs_system_clk = {
2286 .halt_reg = 0x0484,
2287 .clkr = {
2288 .enable_reg = 0x0484,
2289 .enable_mask = BIT(0),
2290 .hw.init = &(struct clk_init_data){
2291 .name = "gcc_usb_hs_system_clk",
2292 .parent_hws = (const struct clk_hw *[]){ &usb_hs_system_clk_src.clkr.hw },
2293 .num_parents = 1,
2294 .flags = CLK_SET_RATE_PARENT,
2295 .ops = &clk_branch2_ops,
2296 },
2297 },
2298};
2299
2300static struct clk_branch gcc_usb_phy_cfg_ahb2phy_clk = {
2301 .halt_reg = 0x1a84,
2302 .clkr = {
2303 .enable_reg = 0x1a84,
2304 .enable_mask = BIT(0),
2305 .hw.init = &(struct clk_init_data){
2306 .name = "gcc_usb_phy_cfg_ahb2phy_clk",
2307 .ops = &clk_branch2_ops,
2308 },
2309 },
2310};
2311
2312static struct clk_branch gpll0_out_mmsscc = {
2313 .halt_check = BRANCH_HALT_DELAY,
2314 .clkr = {
2315 .enable_reg = 0x1484,
2316 .enable_mask = BIT(26),
2317 .hw.init = &(struct clk_init_data){
2318 .name = "gpll0_out_mmsscc",
2319 .parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
2320 .num_parents = 1,
2321 .ops = &clk_branch2_ops,
2322 },
2323 },
2324};
2325
2326static struct clk_branch gpll0_out_msscc = {
2327 .halt_check = BRANCH_HALT_DELAY,
2328 .clkr = {
2329 .enable_reg = 0x1484,
2330 .enable_mask = BIT(27),
2331 .hw.init = &(struct clk_init_data){
2332 .name = "gpll0_out_msscc",
2333 .parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
2334 .num_parents = 1,
2335 .ops = &clk_branch2_ops,
2336 },
2337 },
2338};
2339
2340static struct clk_branch pcie_0_phy_ldo = {
2341 .halt_reg = 0x1e00,
2342 .halt_check = BRANCH_HALT_SKIP,
2343 .clkr = {
2344 .enable_reg = 0x1E00,
2345 .enable_mask = BIT(0),
2346 .hw.init = &(struct clk_init_data){
2347 .name = "pcie_0_phy_ldo",
2348 .ops = &clk_branch2_ops,
2349 },
2350 },
2351};
2352
2353static struct clk_branch pcie_1_phy_ldo = {
2354 .halt_reg = 0x1e04,
2355 .halt_check = BRANCH_HALT_SKIP,
2356 .clkr = {
2357 .enable_reg = 0x1E04,
2358 .enable_mask = BIT(0),
2359 .hw.init = &(struct clk_init_data){
2360 .name = "pcie_1_phy_ldo",
2361 .ops = &clk_branch2_ops,
2362 },
2363 },
2364};
2365
2366static struct clk_branch ufs_phy_ldo = {
2367 .halt_reg = 0x1e0c,
2368 .halt_check = BRANCH_HALT_SKIP,
2369 .clkr = {
2370 .enable_reg = 0x1E0C,
2371 .enable_mask = BIT(0),
2372 .hw.init = &(struct clk_init_data){
2373 .name = "ufs_phy_ldo",
2374 .ops = &clk_branch2_ops,
2375 },
2376 },
2377};
2378
2379static struct clk_branch usb_ss_phy_ldo = {
2380 .halt_reg = 0x1e08,
2381 .halt_check = BRANCH_HALT_SKIP,
2382 .clkr = {
2383 .enable_reg = 0x1E08,
2384 .enable_mask = BIT(0),
2385 .hw.init = &(struct clk_init_data){
2386 .name = "usb_ss_phy_ldo",
2387 .ops = &clk_branch2_ops,
2388 },
2389 },
2390};
2391
2392static struct clk_branch gcc_boot_rom_ahb_clk = {
2393 .halt_reg = 0x0e04,
2394 .halt_check = BRANCH_HALT_VOTED,
2395 .hwcg_reg = 0x0e04,
2396 .hwcg_bit = 1,
2397 .clkr = {
2398 .enable_reg = 0x1484,
2399 .enable_mask = BIT(10),
2400 .hw.init = &(struct clk_init_data){
2401 .name = "gcc_boot_rom_ahb_clk",
2402 .ops = &clk_branch2_ops,
2403 },
2404 },
2405};
2406
2407static struct clk_branch gcc_prng_ahb_clk = {
2408 .halt_reg = 0x0d04,
2409 .halt_check = BRANCH_HALT_VOTED,
2410 .clkr = {
2411 .enable_reg = 0x1484,
2412 .enable_mask = BIT(13),
2413 .hw.init = &(struct clk_init_data){
2414 .name = "gcc_prng_ahb_clk",
2415 .ops = &clk_branch2_ops,
2416 },
2417 },
2418};
2419
2420static struct gdsc pcie_0_gdsc = {
2421 .gdscr = 0x1ac4,
2422 .pd = {
2423 .name = "pcie_0",
2424 },
2425 .pwrsts = PWRSTS_OFF_ON,
2426};
2427
2428static struct gdsc pcie_1_gdsc = {
2429 .gdscr = 0x1b44,
2430 .pd = {
2431 .name = "pcie_1",
2432 },
2433 .pwrsts = PWRSTS_OFF_ON,
2434};
2435
2436static struct gdsc usb30_gdsc = {
2437 .gdscr = 0x3c4,
2438 .pd = {
2439 .name = "usb30",
2440 },
2441 .pwrsts = PWRSTS_OFF_ON,
2442};
2443
2444static struct gdsc ufs_gdsc = {
2445 .gdscr = 0x1d44,
2446 .pd = {
2447 .name = "ufs",
2448 },
2449 .pwrsts = PWRSTS_OFF_ON,
2450};
2451
2452static struct clk_regmap *gcc_msm8994_clocks[] = {
2453 [GPLL0_EARLY] = &gpll0_early.clkr,
2454 [GPLL0] = &gpll0.clkr,
2455 [GPLL4_EARLY] = &gpll4_early.clkr,
2456 [GPLL4] = &gpll4.clkr,
2457 [UFS_AXI_CLK_SRC] = &ufs_axi_clk_src.clkr,
2458 [USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
2459 [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
2460 [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
2461 [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
2462 [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
2463 [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
2464 [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
2465 [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
2466 [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
2467 [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
2468 [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
2469 [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
2470 [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
2471 [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
2472 [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
2473 [BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
2474 [BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
2475 [BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
2476 [BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
2477 [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
2478 [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
2479 [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
2480 [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
2481 [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
2482 [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
2483 [BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
2484 [BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
2485 [BLSP2_QUP5_I2C_APPS_CLK_SRC] = &blsp2_qup5_i2c_apps_clk_src.clkr,
2486 [BLSP2_QUP5_SPI_APPS_CLK_SRC] = &blsp2_qup5_spi_apps_clk_src.clkr,
2487 [BLSP2_QUP6_I2C_APPS_CLK_SRC] = &blsp2_qup6_i2c_apps_clk_src.clkr,
2488 [BLSP2_QUP6_SPI_APPS_CLK_SRC] = &blsp2_qup6_spi_apps_clk_src.clkr,
2489 [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
2490 [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
2491 [BLSP2_UART3_APPS_CLK_SRC] = &blsp2_uart3_apps_clk_src.clkr,
2492 [BLSP2_UART4_APPS_CLK_SRC] = &blsp2_uart4_apps_clk_src.clkr,
2493 [BLSP2_UART5_APPS_CLK_SRC] = &blsp2_uart5_apps_clk_src.clkr,
2494 [BLSP2_UART6_APPS_CLK_SRC] = &blsp2_uart6_apps_clk_src.clkr,
2495 [GP1_CLK_SRC] = &gp1_clk_src.clkr,
2496 [GP2_CLK_SRC] = &gp2_clk_src.clkr,
2497 [GP3_CLK_SRC] = &gp3_clk_src.clkr,
2498 [PCIE_0_AUX_CLK_SRC] = &pcie_0_aux_clk_src.clkr,
2499 [PCIE_0_PIPE_CLK_SRC] = &pcie_0_pipe_clk_src.clkr,
2500 [PCIE_1_AUX_CLK_SRC] = &pcie_1_aux_clk_src.clkr,
2501 [PCIE_1_PIPE_CLK_SRC] = &pcie_1_pipe_clk_src.clkr,
2502 [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
2503 [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
2504 [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
2505 [SDCC3_APPS_CLK_SRC] = &sdcc3_apps_clk_src.clkr,
2506 [SDCC4_APPS_CLK_SRC] = &sdcc4_apps_clk_src.clkr,
2507 [TSIF_REF_CLK_SRC] = &tsif_ref_clk_src.clkr,
2508 [USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
2509 [USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr,
2510 [USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
2511 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
2512 [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
2513 [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
2514 [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
2515 [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
2516 [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
2517 [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
2518 [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
2519 [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
2520 [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
2521 [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
2522 [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
2523 [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
2524 [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
2525 [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
2526 [GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
2527 [GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
2528 [GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
2529 [GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
2530 [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
2531 [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
2532 [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
2533 [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
2534 [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
2535 [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
2536 [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
2537 [GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
2538 [GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
2539 [GCC_BLSP2_QUP5_I2C_APPS_CLK] = &gcc_blsp2_qup5_i2c_apps_clk.clkr,
2540 [GCC_BLSP2_QUP5_SPI_APPS_CLK] = &gcc_blsp2_qup5_spi_apps_clk.clkr,
2541 [GCC_BLSP2_QUP6_I2C_APPS_CLK] = &gcc_blsp2_qup6_i2c_apps_clk.clkr,
2542 [GCC_BLSP2_QUP6_SPI_APPS_CLK] = &gcc_blsp2_qup6_spi_apps_clk.clkr,
2543 [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
2544 [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
2545 [GCC_BLSP2_UART3_APPS_CLK] = &gcc_blsp2_uart3_apps_clk.clkr,
2546 [GCC_BLSP2_UART4_APPS_CLK] = &gcc_blsp2_uart4_apps_clk.clkr,
2547 [GCC_BLSP2_UART5_APPS_CLK] = &gcc_blsp2_uart5_apps_clk.clkr,
2548 [GCC_BLSP2_UART6_APPS_CLK] = &gcc_blsp2_uart6_apps_clk.clkr,
2549 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2550 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2551 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2552 [GCC_LPASS_Q6_AXI_CLK] = &gcc_lpass_q6_axi_clk.clkr,
2553 [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
2554 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
2555 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
2556 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
2557 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
2558 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
2559 [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
2560 [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
2561 [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
2562 [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
2563 [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
2564 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2565 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2566 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2567 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2568 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2569 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2570 [GCC_SDCC3_AHB_CLK] = &gcc_sdcc3_ahb_clk.clkr,
2571 [GCC_SDCC3_APPS_CLK] = &gcc_sdcc3_apps_clk.clkr,
2572 [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
2573 [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
2574 [GCC_SYS_NOC_UFS_AXI_CLK] = &gcc_sys_noc_ufs_axi_clk.clkr,
2575 [GCC_SYS_NOC_USB3_AXI_CLK] = &gcc_sys_noc_usb3_axi_clk.clkr,
2576 [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr,
2577 [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
2578 [GCC_UFS_AHB_CLK] = &gcc_ufs_ahb_clk.clkr,
2579 [GCC_UFS_AXI_CLK] = &gcc_ufs_axi_clk.clkr,
2580 [GCC_UFS_RX_CFG_CLK] = &gcc_ufs_rx_cfg_clk.clkr,
2581 [GCC_UFS_RX_SYMBOL_0_CLK] = &gcc_ufs_rx_symbol_0_clk.clkr,
2582 [GCC_UFS_RX_SYMBOL_1_CLK] = &gcc_ufs_rx_symbol_1_clk.clkr,
2583 [GCC_UFS_TX_CFG_CLK] = &gcc_ufs_tx_cfg_clk.clkr,
2584 [GCC_UFS_TX_SYMBOL_0_CLK] = &gcc_ufs_tx_symbol_0_clk.clkr,
2585 [GCC_UFS_TX_SYMBOL_1_CLK] = &gcc_ufs_tx_symbol_1_clk.clkr,
2586 [GCC_USB2_HS_PHY_SLEEP_CLK] = &gcc_usb2_hs_phy_sleep_clk.clkr,
2587 [GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
2588 [GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
2589 [GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,
2590 [GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr,
2591 [GCC_USB3_PHY_PIPE_CLK] = &gcc_usb3_phy_pipe_clk.clkr,
2592 [GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
2593 [GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
2594 [GCC_USB_PHY_CFG_AHB2PHY_CLK] = &gcc_usb_phy_cfg_ahb2phy_clk.clkr,
2595 [GPLL0_OUT_MMSSCC] = &gpll0_out_mmsscc.clkr,
2596 [GPLL0_OUT_MSSCC] = &gpll0_out_msscc.clkr,
2597 [PCIE_0_PHY_LDO] = &pcie_0_phy_ldo.clkr,
2598 [PCIE_1_PHY_LDO] = &pcie_1_phy_ldo.clkr,
2599 [UFS_PHY_LDO] = &ufs_phy_ldo.clkr,
2600 [USB_SS_PHY_LDO] = &usb_ss_phy_ldo.clkr,
2601 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2602 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
2603
2604 /*
2605 * The following clocks should NOT be managed by this driver, but they once were
2606 * mistakengly added. Now they are only here to indicate that they are not defined
2607 * on purpose, even though the names will stay in the header file (for ABI sanity).
2608 */
2609 [CONFIG_NOC_CLK_SRC] = NULL,
2610 [PERIPH_NOC_CLK_SRC] = NULL,
2611 [SYSTEM_NOC_CLK_SRC] = NULL,
2612};
2613
2614static struct gdsc *gcc_msm8994_gdscs[] = {
2615 /* This GDSC does not exist, but ABI has to remain intact */
2616 [PCIE_GDSC] = NULL,
2617 [PCIE_0_GDSC] = &pcie_0_gdsc,
2618 [PCIE_1_GDSC] = &pcie_1_gdsc,
2619 [USB30_GDSC] = &usb30_gdsc,
2620 [UFS_GDSC] = &ufs_gdsc,
2621};
2622
2623static const struct qcom_reset_map gcc_msm8994_resets[] = {
2624 [USB3_PHY_RESET] = { 0x1400 },
2625 [USB3PHY_PHY_RESET] = { 0x1404 },
2626 [MSS_RESET] = { 0x1680 },
2627 [PCIE_PHY_0_RESET] = { 0x1b18 },
2628 [PCIE_PHY_1_RESET] = { 0x1b98 },
2629 [QUSB2_PHY_RESET] = { 0x04b8 },
2630};
2631
2632static const struct regmap_config gcc_msm8994_regmap_config = {
2633 .reg_bits = 32,
2634 .reg_stride = 4,
2635 .val_bits = 32,
2636 .max_register = 0x2000,
2637 .fast_io = true,
2638};
2639
2640static const struct qcom_cc_desc gcc_msm8994_desc = {
2641 .config = &gcc_msm8994_regmap_config,
2642 .clks = gcc_msm8994_clocks,
2643 .num_clks = ARRAY_SIZE(gcc_msm8994_clocks),
2644 .resets = gcc_msm8994_resets,
2645 .num_resets = ARRAY_SIZE(gcc_msm8994_resets),
2646 .gdscs = gcc_msm8994_gdscs,
2647 .num_gdscs = ARRAY_SIZE(gcc_msm8994_gdscs),
2648};
2649
2650static const struct of_device_id gcc_msm8994_match_table[] = {
2651 { .compatible = "qcom,gcc-msm8992" },
2652 { .compatible = "qcom,gcc-msm8994" }, /* V2 and V2.1 */
2653 {}
2654};
2655MODULE_DEVICE_TABLE(of, gcc_msm8994_match_table);
2656
2657static int gcc_msm8994_probe(struct platform_device *pdev)
2658{
2659 if (of_device_is_compatible(pdev->dev.of_node, "qcom,gcc-msm8992")) {
2660 /* MSM8992 features less clocks and some have different freq tables */
2661 gcc_msm8994_desc.clks[UFS_AXI_CLK_SRC] = NULL;
2662 gcc_msm8994_desc.clks[GCC_LPASS_Q6_AXI_CLK] = NULL;
2663 gcc_msm8994_desc.clks[UFS_PHY_LDO] = NULL;
2664 gcc_msm8994_desc.clks[GCC_UFS_AHB_CLK] = NULL;
2665 gcc_msm8994_desc.clks[GCC_UFS_AXI_CLK] = NULL;
2666 gcc_msm8994_desc.clks[GCC_UFS_RX_CFG_CLK] = NULL;
2667 gcc_msm8994_desc.clks[GCC_UFS_RX_SYMBOL_0_CLK] = NULL;
2668 gcc_msm8994_desc.clks[GCC_UFS_RX_SYMBOL_1_CLK] = NULL;
2669 gcc_msm8994_desc.clks[GCC_UFS_TX_CFG_CLK] = NULL;
2670 gcc_msm8994_desc.clks[GCC_UFS_TX_SYMBOL_0_CLK] = NULL;
2671 gcc_msm8994_desc.clks[GCC_UFS_TX_SYMBOL_1_CLK] = NULL;
2672
2673 sdcc1_apps_clk_src.freq_tbl = ftbl_sdcc1_apps_clk_src_8992;
2674 blsp1_qup1_i2c_apps_clk_src.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src_8992;
2675 blsp1_qup2_i2c_apps_clk_src.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src_8992;
2676 blsp1_qup3_i2c_apps_clk_src.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src_8992;
2677 blsp1_qup4_i2c_apps_clk_src.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src_8992;
2678 blsp1_qup5_i2c_apps_clk_src.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src_8992;
2679 blsp1_qup6_i2c_apps_clk_src.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src_8992;
2680 blsp2_qup1_i2c_apps_clk_src.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src_8992;
2681 blsp2_qup2_i2c_apps_clk_src.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src_8992;
2682 blsp2_qup3_i2c_apps_clk_src.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src_8992;
2683 blsp2_qup4_i2c_apps_clk_src.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src_8992;
2684 blsp2_qup5_i2c_apps_clk_src.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src_8992;
2685 blsp2_qup6_i2c_apps_clk_src.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src_8992;
2686
2687 /*
2688 * Some 8992 boards might *possibly* use
2689 * PCIe1 clocks and controller, but it's not
2690 * standard and they should be disabled otherwise.
2691 */
2692 gcc_msm8994_desc.clks[PCIE_1_AUX_CLK_SRC] = NULL;
2693 gcc_msm8994_desc.clks[PCIE_1_PIPE_CLK_SRC] = NULL;
2694 gcc_msm8994_desc.clks[PCIE_1_PHY_LDO] = NULL;
2695 gcc_msm8994_desc.clks[GCC_PCIE_1_AUX_CLK] = NULL;
2696 gcc_msm8994_desc.clks[GCC_PCIE_1_CFG_AHB_CLK] = NULL;
2697 gcc_msm8994_desc.clks[GCC_PCIE_1_MSTR_AXI_CLK] = NULL;
2698 gcc_msm8994_desc.clks[GCC_PCIE_1_PIPE_CLK] = NULL;
2699 gcc_msm8994_desc.clks[GCC_PCIE_1_SLV_AXI_CLK] = NULL;
2700 gcc_msm8994_desc.clks[GCC_SYS_NOC_UFS_AXI_CLK] = NULL;
2701 }
2702
2703 return qcom_cc_probe(pdev, &gcc_msm8994_desc);
2704}
2705
2706static struct platform_driver gcc_msm8994_driver = {
2707 .probe = gcc_msm8994_probe,
2708 .driver = {
2709 .name = "gcc-msm8994",
2710 .of_match_table = gcc_msm8994_match_table,
2711 },
2712};
2713
2714static int __init gcc_msm8994_init(void)
2715{
2716 return platform_driver_register(&gcc_msm8994_driver);
2717}
2718core_initcall(gcc_msm8994_init);
2719
2720static void __exit gcc_msm8994_exit(void)
2721{
2722 platform_driver_unregister(&gcc_msm8994_driver);
2723}
2724module_exit(gcc_msm8994_exit);
2725
2726MODULE_DESCRIPTION("Qualcomm GCC MSM8994 Driver");
2727MODULE_LICENSE("GPL v2");
2728MODULE_ALIAS("platform:gcc-msm8994");