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