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