Merge branch 'drm-3.17-rc2-sti-fixes' of git://git.linaro.org/people/benjamin.gaignar...
[cascardo/linux.git] / drivers / clk / qcom / gcc-msm8974.c
1 /*
2  * Copyright (c) 2013, The Linux Foundation. All rights reserved.
3  *
4  * This software is licensed under the terms of the GNU General Public
5  * License version 2, as published by the Free Software Foundation, and
6  * may be copied, distributed, and modified under those terms.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11  * GNU General Public License for more details.
12  */
13
14 #include <linux/kernel.h>
15 #include <linux/bitops.h>
16 #include <linux/err.h>
17 #include <linux/platform_device.h>
18 #include <linux/module.h>
19 #include <linux/of.h>
20 #include <linux/of_device.h>
21 #include <linux/clk-provider.h>
22 #include <linux/regmap.h>
23 #include <linux/reset-controller.h>
24
25 #include <dt-bindings/clock/qcom,gcc-msm8974.h>
26 #include <dt-bindings/reset/qcom,gcc-msm8974.h>
27
28 #include "common.h"
29 #include "clk-regmap.h"
30 #include "clk-pll.h"
31 #include "clk-rcg.h"
32 #include "clk-branch.h"
33 #include "reset.h"
34
35 #define P_XO    0
36 #define P_GPLL0 1
37 #define P_GPLL1 1
38 #define P_GPLL4 2
39
40 static const u8 gcc_xo_gpll0_map[] = {
41         [P_XO]          = 0,
42         [P_GPLL0]       = 1,
43 };
44
45 static const char *gcc_xo_gpll0[] = {
46         "xo",
47         "gpll0_vote",
48 };
49
50 static const u8 gcc_xo_gpll0_gpll4_map[] = {
51         [P_XO]          = 0,
52         [P_GPLL0]       = 1,
53         [P_GPLL4]       = 5,
54 };
55
56 static const char *gcc_xo_gpll0_gpll4[] = {
57         "xo",
58         "gpll0_vote",
59         "gpll4_vote",
60 };
61
62 #define F(f, s, h, m, n) { (f), (s), (2 * (h) - 1), (m), (n) }
63
64 static struct clk_pll gpll0 = {
65         .l_reg = 0x0004,
66         .m_reg = 0x0008,
67         .n_reg = 0x000c,
68         .config_reg = 0x0014,
69         .mode_reg = 0x0000,
70         .status_reg = 0x001c,
71         .status_bit = 17,
72         .clkr.hw.init = &(struct clk_init_data){
73                 .name = "gpll0",
74                 .parent_names = (const char *[]){ "xo" },
75                 .num_parents = 1,
76                 .ops = &clk_pll_ops,
77         },
78 };
79
80 static struct clk_regmap gpll0_vote = {
81         .enable_reg = 0x1480,
82         .enable_mask = BIT(0),
83         .hw.init = &(struct clk_init_data){
84                 .name = "gpll0_vote",
85                 .parent_names = (const char *[]){ "gpll0" },
86                 .num_parents = 1,
87                 .ops = &clk_pll_vote_ops,
88         },
89 };
90
91 static struct clk_rcg2 config_noc_clk_src = {
92         .cmd_rcgr = 0x0150,
93         .hid_width = 5,
94         .parent_map = gcc_xo_gpll0_map,
95         .clkr.hw.init = &(struct clk_init_data){
96                 .name = "config_noc_clk_src",
97                 .parent_names = gcc_xo_gpll0,
98                 .num_parents = 2,
99                 .ops = &clk_rcg2_ops,
100         },
101 };
102
103 static struct clk_rcg2 periph_noc_clk_src = {
104         .cmd_rcgr = 0x0190,
105         .hid_width = 5,
106         .parent_map = gcc_xo_gpll0_map,
107         .clkr.hw.init = &(struct clk_init_data){
108                 .name = "periph_noc_clk_src",
109                 .parent_names = gcc_xo_gpll0,
110                 .num_parents = 2,
111                 .ops = &clk_rcg2_ops,
112         },
113 };
114
115 static struct clk_rcg2 system_noc_clk_src = {
116         .cmd_rcgr = 0x0120,
117         .hid_width = 5,
118         .parent_map = gcc_xo_gpll0_map,
119         .clkr.hw.init = &(struct clk_init_data){
120                 .name = "system_noc_clk_src",
121                 .parent_names = gcc_xo_gpll0,
122                 .num_parents = 2,
123                 .ops = &clk_rcg2_ops,
124         },
125 };
126
127 static struct clk_pll gpll1 = {
128         .l_reg = 0x0044,
129         .m_reg = 0x0048,
130         .n_reg = 0x004c,
131         .config_reg = 0x0054,
132         .mode_reg = 0x0040,
133         .status_reg = 0x005c,
134         .status_bit = 17,
135         .clkr.hw.init = &(struct clk_init_data){
136                 .name = "gpll1",
137                 .parent_names = (const char *[]){ "xo" },
138                 .num_parents = 1,
139                 .ops = &clk_pll_ops,
140         },
141 };
142
143 static struct clk_regmap gpll1_vote = {
144         .enable_reg = 0x1480,
145         .enable_mask = BIT(1),
146         .hw.init = &(struct clk_init_data){
147                 .name = "gpll1_vote",
148                 .parent_names = (const char *[]){ "gpll1" },
149                 .num_parents = 1,
150                 .ops = &clk_pll_vote_ops,
151         },
152 };
153
154 static struct clk_pll gpll4 = {
155         .l_reg = 0x1dc4,
156         .m_reg = 0x1dc8,
157         .n_reg = 0x1dcc,
158         .config_reg = 0x1dd4,
159         .mode_reg = 0x1dc0,
160         .status_reg = 0x1ddc,
161         .status_bit = 17,
162         .clkr.hw.init = &(struct clk_init_data){
163                 .name = "gpll4",
164                 .parent_names = (const char *[]){ "xo" },
165                 .num_parents = 1,
166                 .ops = &clk_pll_ops,
167         },
168 };
169
170 static struct clk_regmap gpll4_vote = {
171         .enable_reg = 0x1480,
172         .enable_mask = BIT(4),
173         .hw.init = &(struct clk_init_data){
174                 .name = "gpll4_vote",
175                 .parent_names = (const char *[]){ "gpll4" },
176                 .num_parents = 1,
177                 .ops = &clk_pll_vote_ops,
178         },
179 };
180
181 static const struct freq_tbl ftbl_gcc_usb30_master_clk[] = {
182         F(125000000, P_GPLL0, 1, 5, 24),
183         { }
184 };
185
186 static struct clk_rcg2 usb30_master_clk_src = {
187         .cmd_rcgr = 0x03d4,
188         .mnd_width = 8,
189         .hid_width = 5,
190         .parent_map = gcc_xo_gpll0_map,
191         .freq_tbl = ftbl_gcc_usb30_master_clk,
192         .clkr.hw.init = &(struct clk_init_data){
193                 .name = "usb30_master_clk_src",
194                 .parent_names = gcc_xo_gpll0,
195                 .num_parents = 2,
196                 .ops = &clk_rcg2_ops,
197         },
198 };
199
200 static const struct freq_tbl ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk[] = {
201         F(19200000, P_XO, 1, 0, 0),
202         F(37500000, P_GPLL0, 16, 0, 0),
203         F(50000000, P_GPLL0, 12, 0, 0),
204         { }
205 };
206
207 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
208         .cmd_rcgr = 0x0660,
209         .hid_width = 5,
210         .parent_map = gcc_xo_gpll0_map,
211         .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
212         .clkr.hw.init = &(struct clk_init_data){
213                 .name = "blsp1_qup1_i2c_apps_clk_src",
214                 .parent_names = gcc_xo_gpll0,
215                 .num_parents = 2,
216                 .ops = &clk_rcg2_ops,
217         },
218 };
219
220 static const struct freq_tbl ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk[] = {
221         F(960000, P_XO, 10, 1, 2),
222         F(4800000, P_XO, 4, 0, 0),
223         F(9600000, P_XO, 2, 0, 0),
224         F(15000000, P_GPLL0, 10, 1, 4),
225         F(19200000, P_XO, 1, 0, 0),
226         F(25000000, P_GPLL0, 12, 1, 2),
227         F(50000000, P_GPLL0, 12, 0, 0),
228         { }
229 };
230
231 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
232         .cmd_rcgr = 0x064c,
233         .mnd_width = 8,
234         .hid_width = 5,
235         .parent_map = gcc_xo_gpll0_map,
236         .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
237         .clkr.hw.init = &(struct clk_init_data){
238                 .name = "blsp1_qup1_spi_apps_clk_src",
239                 .parent_names = gcc_xo_gpll0,
240                 .num_parents = 2,
241                 .ops = &clk_rcg2_ops,
242         },
243 };
244
245 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
246         .cmd_rcgr = 0x06e0,
247         .hid_width = 5,
248         .parent_map = gcc_xo_gpll0_map,
249         .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
250         .clkr.hw.init = &(struct clk_init_data){
251                 .name = "blsp1_qup2_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_qup2_spi_apps_clk_src = {
259         .cmd_rcgr = 0x06cc,
260         .mnd_width = 8,
261         .hid_width = 5,
262         .parent_map = gcc_xo_gpll0_map,
263         .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
264         .clkr.hw.init = &(struct clk_init_data){
265                 .name = "blsp1_qup2_spi_apps_clk_src",
266                 .parent_names = gcc_xo_gpll0,
267                 .num_parents = 2,
268                 .ops = &clk_rcg2_ops,
269         },
270 };
271
272 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
273         .cmd_rcgr = 0x0760,
274         .hid_width = 5,
275         .parent_map = gcc_xo_gpll0_map,
276         .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
277         .clkr.hw.init = &(struct clk_init_data){
278                 .name = "blsp1_qup3_i2c_apps_clk_src",
279                 .parent_names = gcc_xo_gpll0,
280                 .num_parents = 2,
281                 .ops = &clk_rcg2_ops,
282         },
283 };
284
285 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
286         .cmd_rcgr = 0x074c,
287         .mnd_width = 8,
288         .hid_width = 5,
289         .parent_map = gcc_xo_gpll0_map,
290         .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
291         .clkr.hw.init = &(struct clk_init_data){
292                 .name = "blsp1_qup3_spi_apps_clk_src",
293                 .parent_names = gcc_xo_gpll0,
294                 .num_parents = 2,
295                 .ops = &clk_rcg2_ops,
296         },
297 };
298
299 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
300         .cmd_rcgr = 0x07e0,
301         .hid_width = 5,
302         .parent_map = gcc_xo_gpll0_map,
303         .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
304         .clkr.hw.init = &(struct clk_init_data){
305                 .name = "blsp1_qup4_i2c_apps_clk_src",
306                 .parent_names = gcc_xo_gpll0,
307                 .num_parents = 2,
308                 .ops = &clk_rcg2_ops,
309         },
310 };
311
312 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
313         .cmd_rcgr = 0x07cc,
314         .mnd_width = 8,
315         .hid_width = 5,
316         .parent_map = gcc_xo_gpll0_map,
317         .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
318         .clkr.hw.init = &(struct clk_init_data){
319                 .name = "blsp1_qup4_spi_apps_clk_src",
320                 .parent_names = gcc_xo_gpll0,
321                 .num_parents = 2,
322                 .ops = &clk_rcg2_ops,
323         },
324 };
325
326 static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
327         .cmd_rcgr = 0x0860,
328         .hid_width = 5,
329         .parent_map = gcc_xo_gpll0_map,
330         .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
331         .clkr.hw.init = &(struct clk_init_data){
332                 .name = "blsp1_qup5_i2c_apps_clk_src",
333                 .parent_names = gcc_xo_gpll0,
334                 .num_parents = 2,
335                 .ops = &clk_rcg2_ops,
336         },
337 };
338
339 static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
340         .cmd_rcgr = 0x084c,
341         .mnd_width = 8,
342         .hid_width = 5,
343         .parent_map = gcc_xo_gpll0_map,
344         .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
345         .clkr.hw.init = &(struct clk_init_data){
346                 .name = "blsp1_qup5_spi_apps_clk_src",
347                 .parent_names = gcc_xo_gpll0,
348                 .num_parents = 2,
349                 .ops = &clk_rcg2_ops,
350         },
351 };
352
353 static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
354         .cmd_rcgr = 0x08e0,
355         .hid_width = 5,
356         .parent_map = gcc_xo_gpll0_map,
357         .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
358         .clkr.hw.init = &(struct clk_init_data){
359                 .name = "blsp1_qup6_i2c_apps_clk_src",
360                 .parent_names = gcc_xo_gpll0,
361                 .num_parents = 2,
362                 .ops = &clk_rcg2_ops,
363         },
364 };
365
366 static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
367         .cmd_rcgr = 0x08cc,
368         .mnd_width = 8,
369         .hid_width = 5,
370         .parent_map = gcc_xo_gpll0_map,
371         .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
372         .clkr.hw.init = &(struct clk_init_data){
373                 .name = "blsp1_qup6_spi_apps_clk_src",
374                 .parent_names = gcc_xo_gpll0,
375                 .num_parents = 2,
376                 .ops = &clk_rcg2_ops,
377         },
378 };
379
380 static const struct freq_tbl ftbl_gcc_blsp1_2_uart1_6_apps_clk[] = {
381         F(3686400, P_GPLL0, 1, 96, 15625),
382         F(7372800, P_GPLL0, 1, 192, 15625),
383         F(14745600, P_GPLL0, 1, 384, 15625),
384         F(16000000, P_GPLL0, 5, 2, 15),
385         F(19200000, P_XO, 1, 0, 0),
386         F(24000000, P_GPLL0, 5, 1, 5),
387         F(32000000, P_GPLL0, 1, 4, 75),
388         F(40000000, P_GPLL0, 15, 0, 0),
389         F(46400000, P_GPLL0, 1, 29, 375),
390         F(48000000, P_GPLL0, 12.5, 0, 0),
391         F(51200000, P_GPLL0, 1, 32, 375),
392         F(56000000, P_GPLL0, 1, 7, 75),
393         F(58982400, P_GPLL0, 1, 1536, 15625),
394         F(60000000, P_GPLL0, 10, 0, 0),
395         F(63160000, P_GPLL0, 9.5, 0, 0),
396         { }
397 };
398
399 static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
400         .cmd_rcgr = 0x068c,
401         .mnd_width = 16,
402         .hid_width = 5,
403         .parent_map = gcc_xo_gpll0_map,
404         .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
405         .clkr.hw.init = &(struct clk_init_data){
406                 .name = "blsp1_uart1_apps_clk_src",
407                 .parent_names = gcc_xo_gpll0,
408                 .num_parents = 2,
409                 .ops = &clk_rcg2_ops,
410         },
411 };
412
413 static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
414         .cmd_rcgr = 0x070c,
415         .mnd_width = 16,
416         .hid_width = 5,
417         .parent_map = gcc_xo_gpll0_map,
418         .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
419         .clkr.hw.init = &(struct clk_init_data){
420                 .name = "blsp1_uart2_apps_clk_src",
421                 .parent_names = gcc_xo_gpll0,
422                 .num_parents = 2,
423                 .ops = &clk_rcg2_ops,
424         },
425 };
426
427 static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
428         .cmd_rcgr = 0x078c,
429         .mnd_width = 16,
430         .hid_width = 5,
431         .parent_map = gcc_xo_gpll0_map,
432         .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
433         .clkr.hw.init = &(struct clk_init_data){
434                 .name = "blsp1_uart3_apps_clk_src",
435                 .parent_names = gcc_xo_gpll0,
436                 .num_parents = 2,
437                 .ops = &clk_rcg2_ops,
438         },
439 };
440
441 static struct clk_rcg2 blsp1_uart4_apps_clk_src = {
442         .cmd_rcgr = 0x080c,
443         .mnd_width = 16,
444         .hid_width = 5,
445         .parent_map = gcc_xo_gpll0_map,
446         .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
447         .clkr.hw.init = &(struct clk_init_data){
448                 .name = "blsp1_uart4_apps_clk_src",
449                 .parent_names = gcc_xo_gpll0,
450                 .num_parents = 2,
451                 .ops = &clk_rcg2_ops,
452         },
453 };
454
455 static struct clk_rcg2 blsp1_uart5_apps_clk_src = {
456         .cmd_rcgr = 0x088c,
457         .mnd_width = 16,
458         .hid_width = 5,
459         .parent_map = gcc_xo_gpll0_map,
460         .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
461         .clkr.hw.init = &(struct clk_init_data){
462                 .name = "blsp1_uart5_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 blsp1_uart6_apps_clk_src = {
470         .cmd_rcgr = 0x090c,
471         .mnd_width = 16,
472         .hid_width = 5,
473         .parent_map = gcc_xo_gpll0_map,
474         .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
475         .clkr.hw.init = &(struct clk_init_data){
476                 .name = "blsp1_uart6_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_i2c_apps_clk_src = {
484         .cmd_rcgr = 0x09a0,
485         .hid_width = 5,
486         .parent_map = gcc_xo_gpll0_map,
487         .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
488         .clkr.hw.init = &(struct clk_init_data){
489                 .name = "blsp2_qup1_i2c_apps_clk_src",
490                 .parent_names = gcc_xo_gpll0,
491                 .num_parents = 2,
492                 .ops = &clk_rcg2_ops,
493         },
494 };
495
496 static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
497         .cmd_rcgr = 0x098c,
498         .mnd_width = 8,
499         .hid_width = 5,
500         .parent_map = gcc_xo_gpll0_map,
501         .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
502         .clkr.hw.init = &(struct clk_init_data){
503                 .name = "blsp2_qup1_spi_apps_clk_src",
504                 .parent_names = gcc_xo_gpll0,
505                 .num_parents = 2,
506                 .ops = &clk_rcg2_ops,
507         },
508 };
509
510 static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
511         .cmd_rcgr = 0x0a20,
512         .hid_width = 5,
513         .parent_map = gcc_xo_gpll0_map,
514         .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
515         .clkr.hw.init = &(struct clk_init_data){
516                 .name = "blsp2_qup2_i2c_apps_clk_src",
517                 .parent_names = gcc_xo_gpll0,
518                 .num_parents = 2,
519                 .ops = &clk_rcg2_ops,
520         },
521 };
522
523 static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
524         .cmd_rcgr = 0x0a0c,
525         .mnd_width = 8,
526         .hid_width = 5,
527         .parent_map = gcc_xo_gpll0_map,
528         .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
529         .clkr.hw.init = &(struct clk_init_data){
530                 .name = "blsp2_qup2_spi_apps_clk_src",
531                 .parent_names = gcc_xo_gpll0,
532                 .num_parents = 2,
533                 .ops = &clk_rcg2_ops,
534         },
535 };
536
537 static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
538         .cmd_rcgr = 0x0aa0,
539         .hid_width = 5,
540         .parent_map = gcc_xo_gpll0_map,
541         .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
542         .clkr.hw.init = &(struct clk_init_data){
543                 .name = "blsp2_qup3_i2c_apps_clk_src",
544                 .parent_names = gcc_xo_gpll0,
545                 .num_parents = 2,
546                 .ops = &clk_rcg2_ops,
547         },
548 };
549
550 static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
551         .cmd_rcgr = 0x0a8c,
552         .mnd_width = 8,
553         .hid_width = 5,
554         .parent_map = gcc_xo_gpll0_map,
555         .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
556         .clkr.hw.init = &(struct clk_init_data){
557                 .name = "blsp2_qup3_spi_apps_clk_src",
558                 .parent_names = gcc_xo_gpll0,
559                 .num_parents = 2,
560                 .ops = &clk_rcg2_ops,
561         },
562 };
563
564 static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
565         .cmd_rcgr = 0x0b20,
566         .hid_width = 5,
567         .parent_map = gcc_xo_gpll0_map,
568         .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
569         .clkr.hw.init = &(struct clk_init_data){
570                 .name = "blsp2_qup4_i2c_apps_clk_src",
571                 .parent_names = gcc_xo_gpll0,
572                 .num_parents = 2,
573                 .ops = &clk_rcg2_ops,
574         },
575 };
576
577 static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
578         .cmd_rcgr = 0x0b0c,
579         .mnd_width = 8,
580         .hid_width = 5,
581         .parent_map = gcc_xo_gpll0_map,
582         .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
583         .clkr.hw.init = &(struct clk_init_data){
584                 .name = "blsp2_qup4_spi_apps_clk_src",
585                 .parent_names = gcc_xo_gpll0,
586                 .num_parents = 2,
587                 .ops = &clk_rcg2_ops,
588         },
589 };
590
591 static struct clk_rcg2 blsp2_qup5_i2c_apps_clk_src = {
592         .cmd_rcgr = 0x0ba0,
593         .hid_width = 5,
594         .parent_map = gcc_xo_gpll0_map,
595         .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
596         .clkr.hw.init = &(struct clk_init_data){
597                 .name = "blsp2_qup5_i2c_apps_clk_src",
598                 .parent_names = gcc_xo_gpll0,
599                 .num_parents = 2,
600                 .ops = &clk_rcg2_ops,
601         },
602 };
603
604 static struct clk_rcg2 blsp2_qup5_spi_apps_clk_src = {
605         .cmd_rcgr = 0x0b8c,
606         .mnd_width = 8,
607         .hid_width = 5,
608         .parent_map = gcc_xo_gpll0_map,
609         .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
610         .clkr.hw.init = &(struct clk_init_data){
611                 .name = "blsp2_qup5_spi_apps_clk_src",
612                 .parent_names = gcc_xo_gpll0,
613                 .num_parents = 2,
614                 .ops = &clk_rcg2_ops,
615         },
616 };
617
618 static struct clk_rcg2 blsp2_qup6_i2c_apps_clk_src = {
619         .cmd_rcgr = 0x0c20,
620         .hid_width = 5,
621         .parent_map = gcc_xo_gpll0_map,
622         .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
623         .clkr.hw.init = &(struct clk_init_data){
624                 .name = "blsp2_qup6_i2c_apps_clk_src",
625                 .parent_names = gcc_xo_gpll0,
626                 .num_parents = 2,
627                 .ops = &clk_rcg2_ops,
628         },
629 };
630
631 static struct clk_rcg2 blsp2_qup6_spi_apps_clk_src = {
632         .cmd_rcgr = 0x0c0c,
633         .mnd_width = 8,
634         .hid_width = 5,
635         .parent_map = gcc_xo_gpll0_map,
636         .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
637         .clkr.hw.init = &(struct clk_init_data){
638                 .name = "blsp2_qup6_spi_apps_clk_src",
639                 .parent_names = gcc_xo_gpll0,
640                 .num_parents = 2,
641                 .ops = &clk_rcg2_ops,
642         },
643 };
644
645 static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
646         .cmd_rcgr = 0x09cc,
647         .mnd_width = 16,
648         .hid_width = 5,
649         .parent_map = gcc_xo_gpll0_map,
650         .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
651         .clkr.hw.init = &(struct clk_init_data){
652                 .name = "blsp2_uart1_apps_clk_src",
653                 .parent_names = gcc_xo_gpll0,
654                 .num_parents = 2,
655                 .ops = &clk_rcg2_ops,
656         },
657 };
658
659 static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
660         .cmd_rcgr = 0x0a4c,
661         .mnd_width = 16,
662         .hid_width = 5,
663         .parent_map = gcc_xo_gpll0_map,
664         .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
665         .clkr.hw.init = &(struct clk_init_data){
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_gcc_blsp1_2_uart1_6_apps_clk,
679         .clkr.hw.init = &(struct clk_init_data){
680                 .name = "blsp2_uart3_apps_clk_src",
681                 .parent_names = gcc_xo_gpll0,
682                 .num_parents = 2,
683                 .ops = &clk_rcg2_ops,
684         },
685 };
686
687 static struct clk_rcg2 blsp2_uart4_apps_clk_src = {
688         .cmd_rcgr = 0x0b4c,
689         .mnd_width = 16,
690         .hid_width = 5,
691         .parent_map = gcc_xo_gpll0_map,
692         .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
693         .clkr.hw.init = &(struct clk_init_data){
694                 .name = "blsp2_uart4_apps_clk_src",
695                 .parent_names = gcc_xo_gpll0,
696                 .num_parents = 2,
697                 .ops = &clk_rcg2_ops,
698         },
699 };
700
701 static struct clk_rcg2 blsp2_uart5_apps_clk_src = {
702         .cmd_rcgr = 0x0bcc,
703         .mnd_width = 16,
704         .hid_width = 5,
705         .parent_map = gcc_xo_gpll0_map,
706         .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
707         .clkr.hw.init = &(struct clk_init_data){
708                 .name = "blsp2_uart5_apps_clk_src",
709                 .parent_names = gcc_xo_gpll0,
710                 .num_parents = 2,
711                 .ops = &clk_rcg2_ops,
712         },
713 };
714
715 static struct clk_rcg2 blsp2_uart6_apps_clk_src = {
716         .cmd_rcgr = 0x0c4c,
717         .mnd_width = 16,
718         .hid_width = 5,
719         .parent_map = gcc_xo_gpll0_map,
720         .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
721         .clkr.hw.init = &(struct clk_init_data){
722                 .name = "blsp2_uart6_apps_clk_src",
723                 .parent_names = gcc_xo_gpll0,
724                 .num_parents = 2,
725                 .ops = &clk_rcg2_ops,
726         },
727 };
728
729 static const struct freq_tbl ftbl_gcc_ce1_clk[] = {
730         F(50000000, P_GPLL0, 12, 0, 0),
731         F(75000000, P_GPLL0, 8, 0, 0),
732         F(100000000, P_GPLL0, 6, 0, 0),
733         F(150000000, P_GPLL0, 4, 0, 0),
734         { }
735 };
736
737 static struct clk_rcg2 ce1_clk_src = {
738         .cmd_rcgr = 0x1050,
739         .hid_width = 5,
740         .parent_map = gcc_xo_gpll0_map,
741         .freq_tbl = ftbl_gcc_ce1_clk,
742         .clkr.hw.init = &(struct clk_init_data){
743                 .name = "ce1_clk_src",
744                 .parent_names = gcc_xo_gpll0,
745                 .num_parents = 2,
746                 .ops = &clk_rcg2_ops,
747         },
748 };
749
750 static const struct freq_tbl ftbl_gcc_ce2_clk[] = {
751         F(50000000, P_GPLL0, 12, 0, 0),
752         F(75000000, P_GPLL0, 8, 0, 0),
753         F(100000000, P_GPLL0, 6, 0, 0),
754         F(150000000, P_GPLL0, 4, 0, 0),
755         { }
756 };
757
758 static struct clk_rcg2 ce2_clk_src = {
759         .cmd_rcgr = 0x1090,
760         .hid_width = 5,
761         .parent_map = gcc_xo_gpll0_map,
762         .freq_tbl = ftbl_gcc_ce2_clk,
763         .clkr.hw.init = &(struct clk_init_data){
764                 .name = "ce2_clk_src",
765                 .parent_names = gcc_xo_gpll0,
766                 .num_parents = 2,
767                 .ops = &clk_rcg2_ops,
768         },
769 };
770
771 static const struct freq_tbl ftbl_gcc_gp_clk[] = {
772         F(4800000, P_XO, 4, 0, 0),
773         F(6000000, P_GPLL0, 10, 1, 10),
774         F(6750000, P_GPLL0, 1, 1, 89),
775         F(8000000, P_GPLL0, 15, 1, 5),
776         F(9600000, P_XO, 2, 0, 0),
777         F(16000000, P_GPLL0, 1, 2, 75),
778         F(19200000, P_XO, 1, 0, 0),
779         F(24000000, P_GPLL0, 5, 1, 5),
780         { }
781 };
782
783
784 static struct clk_rcg2 gp1_clk_src = {
785         .cmd_rcgr = 0x1904,
786         .mnd_width = 8,
787         .hid_width = 5,
788         .parent_map = gcc_xo_gpll0_map,
789         .freq_tbl = ftbl_gcc_gp_clk,
790         .clkr.hw.init = &(struct clk_init_data){
791                 .name = "gp1_clk_src",
792                 .parent_names = gcc_xo_gpll0,
793                 .num_parents = 2,
794                 .ops = &clk_rcg2_ops,
795         },
796 };
797
798 static struct clk_rcg2 gp2_clk_src = {
799         .cmd_rcgr = 0x1944,
800         .mnd_width = 8,
801         .hid_width = 5,
802         .parent_map = gcc_xo_gpll0_map,
803         .freq_tbl = ftbl_gcc_gp_clk,
804         .clkr.hw.init = &(struct clk_init_data){
805                 .name = "gp2_clk_src",
806                 .parent_names = gcc_xo_gpll0,
807                 .num_parents = 2,
808                 .ops = &clk_rcg2_ops,
809         },
810 };
811
812 static struct clk_rcg2 gp3_clk_src = {
813         .cmd_rcgr = 0x1984,
814         .mnd_width = 8,
815         .hid_width = 5,
816         .parent_map = gcc_xo_gpll0_map,
817         .freq_tbl = ftbl_gcc_gp_clk,
818         .clkr.hw.init = &(struct clk_init_data){
819                 .name = "gp3_clk_src",
820                 .parent_names = gcc_xo_gpll0,
821                 .num_parents = 2,
822                 .ops = &clk_rcg2_ops,
823         },
824 };
825
826 static const struct freq_tbl ftbl_gcc_pdm2_clk[] = {
827         F(60000000, P_GPLL0, 10, 0, 0),
828         { }
829 };
830
831 static struct clk_rcg2 pdm2_clk_src = {
832         .cmd_rcgr = 0x0cd0,
833         .hid_width = 5,
834         .parent_map = gcc_xo_gpll0_map,
835         .freq_tbl = ftbl_gcc_pdm2_clk,
836         .clkr.hw.init = &(struct clk_init_data){
837                 .name = "pdm2_clk_src",
838                 .parent_names = gcc_xo_gpll0,
839                 .num_parents = 2,
840                 .ops = &clk_rcg2_ops,
841         },
842 };
843
844 static const struct freq_tbl ftbl_gcc_sdcc1_4_apps_clk[] = {
845         F(144000, P_XO, 16, 3, 25),
846         F(400000, P_XO, 12, 1, 4),
847         F(20000000, P_GPLL0, 15, 1, 2),
848         F(25000000, P_GPLL0, 12, 1, 2),
849         F(50000000, P_GPLL0, 12, 0, 0),
850         F(100000000, P_GPLL0, 6, 0, 0),
851         F(200000000, P_GPLL0, 3, 0, 0),
852         { }
853 };
854
855 static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_pro[] = {
856         F(144000, P_XO, 16, 3, 25),
857         F(400000, P_XO, 12, 1, 4),
858         F(20000000, P_GPLL0, 15, 1, 2),
859         F(25000000, P_GPLL0, 12, 1, 2),
860         F(50000000, P_GPLL0, 12, 0, 0),
861         F(100000000, P_GPLL0, 6, 0, 0),
862         F(192000000, P_GPLL4, 4, 0, 0),
863         F(200000000, P_GPLL0, 3, 0, 0),
864         F(384000000, P_GPLL4, 2, 0, 0),
865         { }
866 };
867
868 static struct clk_init_data sdcc1_apps_clk_src_init = {
869         .name = "sdcc1_apps_clk_src",
870         .parent_names = gcc_xo_gpll0,
871         .num_parents = 2,
872         .ops = &clk_rcg2_ops,
873 };
874
875 static struct clk_rcg2 sdcc1_apps_clk_src = {
876         .cmd_rcgr = 0x04d0,
877         .mnd_width = 8,
878         .hid_width = 5,
879         .parent_map = gcc_xo_gpll0_map,
880         .freq_tbl = ftbl_gcc_sdcc1_4_apps_clk,
881         .clkr.hw.init = &sdcc1_apps_clk_src_init,
882 };
883
884 static struct clk_rcg2 sdcc2_apps_clk_src = {
885         .cmd_rcgr = 0x0510,
886         .mnd_width = 8,
887         .hid_width = 5,
888         .parent_map = gcc_xo_gpll0_map,
889         .freq_tbl = ftbl_gcc_sdcc1_4_apps_clk,
890         .clkr.hw.init = &(struct clk_init_data){
891                 .name = "sdcc2_apps_clk_src",
892                 .parent_names = gcc_xo_gpll0,
893                 .num_parents = 2,
894                 .ops = &clk_rcg2_ops,
895         },
896 };
897
898 static struct clk_rcg2 sdcc3_apps_clk_src = {
899         .cmd_rcgr = 0x0550,
900         .mnd_width = 8,
901         .hid_width = 5,
902         .parent_map = gcc_xo_gpll0_map,
903         .freq_tbl = ftbl_gcc_sdcc1_4_apps_clk,
904         .clkr.hw.init = &(struct clk_init_data){
905                 .name = "sdcc3_apps_clk_src",
906                 .parent_names = gcc_xo_gpll0,
907                 .num_parents = 2,
908                 .ops = &clk_rcg2_ops,
909         },
910 };
911
912 static struct clk_rcg2 sdcc4_apps_clk_src = {
913         .cmd_rcgr = 0x0590,
914         .mnd_width = 8,
915         .hid_width = 5,
916         .parent_map = gcc_xo_gpll0_map,
917         .freq_tbl = ftbl_gcc_sdcc1_4_apps_clk,
918         .clkr.hw.init = &(struct clk_init_data){
919                 .name = "sdcc4_apps_clk_src",
920                 .parent_names = gcc_xo_gpll0,
921                 .num_parents = 2,
922                 .ops = &clk_rcg2_ops,
923         },
924 };
925
926 static const struct freq_tbl ftbl_gcc_tsif_ref_clk[] = {
927         F(105000, P_XO, 2, 1, 91),
928         { }
929 };
930
931 static struct clk_rcg2 tsif_ref_clk_src = {
932         .cmd_rcgr = 0x0d90,
933         .mnd_width = 8,
934         .hid_width = 5,
935         .parent_map = gcc_xo_gpll0_map,
936         .freq_tbl = ftbl_gcc_tsif_ref_clk,
937         .clkr.hw.init = &(struct clk_init_data){
938                 .name = "tsif_ref_clk_src",
939                 .parent_names = gcc_xo_gpll0,
940                 .num_parents = 2,
941                 .ops = &clk_rcg2_ops,
942         },
943 };
944
945 static const struct freq_tbl ftbl_gcc_usb30_mock_utmi_clk[] = {
946         F(60000000, P_GPLL0, 10, 0, 0),
947         { }
948 };
949
950 static struct clk_rcg2 usb30_mock_utmi_clk_src = {
951         .cmd_rcgr = 0x03e8,
952         .hid_width = 5,
953         .parent_map = gcc_xo_gpll0_map,
954         .freq_tbl = ftbl_gcc_usb30_mock_utmi_clk,
955         .clkr.hw.init = &(struct clk_init_data){
956                 .name = "usb30_mock_utmi_clk_src",
957                 .parent_names = gcc_xo_gpll0,
958                 .num_parents = 2,
959                 .ops = &clk_rcg2_ops,
960         },
961 };
962
963 static const struct freq_tbl ftbl_gcc_usb_hs_system_clk[] = {
964         F(60000000, P_GPLL0, 10, 0, 0),
965         F(75000000, P_GPLL0, 8, 0, 0),
966         { }
967 };
968
969 static struct clk_rcg2 usb_hs_system_clk_src = {
970         .cmd_rcgr = 0x0490,
971         .hid_width = 5,
972         .parent_map = gcc_xo_gpll0_map,
973         .freq_tbl = ftbl_gcc_usb_hs_system_clk,
974         .clkr.hw.init = &(struct clk_init_data){
975                 .name = "usb_hs_system_clk_src",
976                 .parent_names = gcc_xo_gpll0,
977                 .num_parents = 2,
978                 .ops = &clk_rcg2_ops,
979         },
980 };
981
982 static const struct freq_tbl ftbl_gcc_usb_hsic_clk[] = {
983         F(480000000, P_GPLL1, 1, 0, 0),
984         { }
985 };
986
987 static u8 usb_hsic_clk_src_map[] = {
988         [P_XO]          = 0,
989         [P_GPLL1]       = 4,
990 };
991
992 static struct clk_rcg2 usb_hsic_clk_src = {
993         .cmd_rcgr = 0x0440,
994         .hid_width = 5,
995         .parent_map = usb_hsic_clk_src_map,
996         .freq_tbl = ftbl_gcc_usb_hsic_clk,
997         .clkr.hw.init = &(struct clk_init_data){
998                 .name = "usb_hsic_clk_src",
999                 .parent_names = (const char *[]){
1000                         "xo",
1001                         "gpll1_vote",
1002                 },
1003                 .num_parents = 2,
1004                 .ops = &clk_rcg2_ops,
1005         },
1006 };
1007
1008 static const struct freq_tbl ftbl_gcc_usb_hsic_io_cal_clk[] = {
1009         F(9600000, P_XO, 2, 0, 0),
1010         { }
1011 };
1012
1013 static struct clk_rcg2 usb_hsic_io_cal_clk_src = {
1014         .cmd_rcgr = 0x0458,
1015         .hid_width = 5,
1016         .parent_map = gcc_xo_gpll0_map,
1017         .freq_tbl = ftbl_gcc_usb_hsic_io_cal_clk,
1018         .clkr.hw.init = &(struct clk_init_data){
1019                 .name = "usb_hsic_io_cal_clk_src",
1020                 .parent_names = gcc_xo_gpll0,
1021                 .num_parents = 1,
1022                 .ops = &clk_rcg2_ops,
1023         },
1024 };
1025
1026 static const struct freq_tbl ftbl_gcc_usb_hsic_system_clk[] = {
1027         F(60000000, P_GPLL0, 10, 0, 0),
1028         F(75000000, P_GPLL0, 8, 0, 0),
1029         { }
1030 };
1031
1032 static struct clk_rcg2 usb_hsic_system_clk_src = {
1033         .cmd_rcgr = 0x041c,
1034         .hid_width = 5,
1035         .parent_map = gcc_xo_gpll0_map,
1036         .freq_tbl = ftbl_gcc_usb_hsic_system_clk,
1037         .clkr.hw.init = &(struct clk_init_data){
1038                 .name = "usb_hsic_system_clk_src",
1039                 .parent_names = gcc_xo_gpll0,
1040                 .num_parents = 2,
1041                 .ops = &clk_rcg2_ops,
1042         },
1043 };
1044
1045 static struct clk_regmap gcc_mmss_gpll0_clk_src = {
1046         .enable_reg = 0x1484,
1047         .enable_mask = BIT(26),
1048         .hw.init = &(struct clk_init_data){
1049                 .name = "mmss_gpll0_vote",
1050                 .parent_names = (const char *[]){
1051                         "gpll0_vote",
1052                 },
1053                 .num_parents = 1,
1054                 .ops = &clk_branch_simple_ops,
1055         },
1056 };
1057
1058 static struct clk_branch gcc_bam_dma_ahb_clk = {
1059         .halt_reg = 0x0d44,
1060         .halt_check = BRANCH_HALT_VOTED,
1061         .clkr = {
1062                 .enable_reg = 0x1484,
1063                 .enable_mask = BIT(12),
1064                 .hw.init = &(struct clk_init_data){
1065                         .name = "gcc_bam_dma_ahb_clk",
1066                         .parent_names = (const char *[]){
1067                                 "periph_noc_clk_src",
1068                         },
1069                         .num_parents = 1,
1070                         .ops = &clk_branch2_ops,
1071                 },
1072         },
1073 };
1074
1075 static struct clk_branch gcc_blsp1_ahb_clk = {
1076         .halt_reg = 0x05c4,
1077         .halt_check = BRANCH_HALT_VOTED,
1078         .clkr = {
1079                 .enable_reg = 0x1484,
1080                 .enable_mask = BIT(17),
1081                 .hw.init = &(struct clk_init_data){
1082                         .name = "gcc_blsp1_ahb_clk",
1083                         .parent_names = (const char *[]){
1084                                 "periph_noc_clk_src",
1085                         },
1086                         .num_parents = 1,
1087                         .ops = &clk_branch2_ops,
1088                 },
1089         },
1090 };
1091
1092 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1093         .halt_reg = 0x0648,
1094         .clkr = {
1095                 .enable_reg = 0x0648,
1096                 .enable_mask = BIT(0),
1097                 .hw.init = &(struct clk_init_data){
1098                         .name = "gcc_blsp1_qup1_i2c_apps_clk",
1099                         .parent_names = (const char *[]){
1100                                 "blsp1_qup1_i2c_apps_clk_src",
1101                         },
1102                         .num_parents = 1,
1103                         .flags = CLK_SET_RATE_PARENT,
1104                         .ops = &clk_branch2_ops,
1105                 },
1106         },
1107 };
1108
1109 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1110         .halt_reg = 0x0644,
1111         .clkr = {
1112                 .enable_reg = 0x0644,
1113                 .enable_mask = BIT(0),
1114                 .hw.init = &(struct clk_init_data){
1115                         .name = "gcc_blsp1_qup1_spi_apps_clk",
1116                         .parent_names = (const char *[]){
1117                                 "blsp1_qup1_spi_apps_clk_src",
1118                         },
1119                         .num_parents = 1,
1120                         .flags = CLK_SET_RATE_PARENT,
1121                         .ops = &clk_branch2_ops,
1122                 },
1123         },
1124 };
1125
1126 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1127         .halt_reg = 0x06c8,
1128         .clkr = {
1129                 .enable_reg = 0x06c8,
1130                 .enable_mask = BIT(0),
1131                 .hw.init = &(struct clk_init_data){
1132                         .name = "gcc_blsp1_qup2_i2c_apps_clk",
1133                         .parent_names = (const char *[]){
1134                                 "blsp1_qup2_i2c_apps_clk_src",
1135                         },
1136                         .num_parents = 1,
1137                         .flags = CLK_SET_RATE_PARENT,
1138                         .ops = &clk_branch2_ops,
1139                 },
1140         },
1141 };
1142
1143 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1144         .halt_reg = 0x06c4,
1145         .clkr = {
1146                 .enable_reg = 0x06c4,
1147                 .enable_mask = BIT(0),
1148                 .hw.init = &(struct clk_init_data){
1149                         .name = "gcc_blsp1_qup2_spi_apps_clk",
1150                         .parent_names = (const char *[]){
1151                                 "blsp1_qup2_spi_apps_clk_src",
1152                         },
1153                         .num_parents = 1,
1154                         .flags = CLK_SET_RATE_PARENT,
1155                         .ops = &clk_branch2_ops,
1156                 },
1157         },
1158 };
1159
1160 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1161         .halt_reg = 0x0748,
1162         .clkr = {
1163                 .enable_reg = 0x0748,
1164                 .enable_mask = BIT(0),
1165                 .hw.init = &(struct clk_init_data){
1166                         .name = "gcc_blsp1_qup3_i2c_apps_clk",
1167                         .parent_names = (const char *[]){
1168                                 "blsp1_qup3_i2c_apps_clk_src",
1169                         },
1170                         .num_parents = 1,
1171                         .flags = CLK_SET_RATE_PARENT,
1172                         .ops = &clk_branch2_ops,
1173                 },
1174         },
1175 };
1176
1177 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1178         .halt_reg = 0x0744,
1179         .clkr = {
1180                 .enable_reg = 0x0744,
1181                 .enable_mask = BIT(0),
1182                 .hw.init = &(struct clk_init_data){
1183                         .name = "gcc_blsp1_qup3_spi_apps_clk",
1184                         .parent_names = (const char *[]){
1185                                 "blsp1_qup3_spi_apps_clk_src",
1186                         },
1187                         .num_parents = 1,
1188                         .flags = CLK_SET_RATE_PARENT,
1189                         .ops = &clk_branch2_ops,
1190                 },
1191         },
1192 };
1193
1194 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1195         .halt_reg = 0x07c8,
1196         .clkr = {
1197                 .enable_reg = 0x07c8,
1198                 .enable_mask = BIT(0),
1199                 .hw.init = &(struct clk_init_data){
1200                         .name = "gcc_blsp1_qup4_i2c_apps_clk",
1201                         .parent_names = (const char *[]){
1202                                 "blsp1_qup4_i2c_apps_clk_src",
1203                         },
1204                         .num_parents = 1,
1205                         .flags = CLK_SET_RATE_PARENT,
1206                         .ops = &clk_branch2_ops,
1207                 },
1208         },
1209 };
1210
1211 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1212         .halt_reg = 0x07c4,
1213         .clkr = {
1214                 .enable_reg = 0x07c4,
1215                 .enable_mask = BIT(0),
1216                 .hw.init = &(struct clk_init_data){
1217                         .name = "gcc_blsp1_qup4_spi_apps_clk",
1218                         .parent_names = (const char *[]){
1219                                 "blsp1_qup4_spi_apps_clk_src",
1220                         },
1221                         .num_parents = 1,
1222                         .flags = CLK_SET_RATE_PARENT,
1223                         .ops = &clk_branch2_ops,
1224                 },
1225         },
1226 };
1227
1228 static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
1229         .halt_reg = 0x0848,
1230         .clkr = {
1231                 .enable_reg = 0x0848,
1232                 .enable_mask = BIT(0),
1233                 .hw.init = &(struct clk_init_data){
1234                         .name = "gcc_blsp1_qup5_i2c_apps_clk",
1235                         .parent_names = (const char *[]){
1236                                 "blsp1_qup5_i2c_apps_clk_src",
1237                         },
1238                         .num_parents = 1,
1239                         .flags = CLK_SET_RATE_PARENT,
1240                         .ops = &clk_branch2_ops,
1241                 },
1242         },
1243 };
1244
1245 static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
1246         .halt_reg = 0x0844,
1247         .clkr = {
1248                 .enable_reg = 0x0844,
1249                 .enable_mask = BIT(0),
1250                 .hw.init = &(struct clk_init_data){
1251                         .name = "gcc_blsp1_qup5_spi_apps_clk",
1252                         .parent_names = (const char *[]){
1253                                 "blsp1_qup5_spi_apps_clk_src",
1254                         },
1255                         .num_parents = 1,
1256                         .flags = CLK_SET_RATE_PARENT,
1257                         .ops = &clk_branch2_ops,
1258                 },
1259         },
1260 };
1261
1262 static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
1263         .halt_reg = 0x08c8,
1264         .clkr = {
1265                 .enable_reg = 0x08c8,
1266                 .enable_mask = BIT(0),
1267                 .hw.init = &(struct clk_init_data){
1268                         .name = "gcc_blsp1_qup6_i2c_apps_clk",
1269                         .parent_names = (const char *[]){
1270                                 "blsp1_qup6_i2c_apps_clk_src",
1271                         },
1272                         .num_parents = 1,
1273                         .flags = CLK_SET_RATE_PARENT,
1274                         .ops = &clk_branch2_ops,
1275                 },
1276         },
1277 };
1278
1279 static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
1280         .halt_reg = 0x08c4,
1281         .clkr = {
1282                 .enable_reg = 0x08c4,
1283                 .enable_mask = BIT(0),
1284                 .hw.init = &(struct clk_init_data){
1285                         .name = "gcc_blsp1_qup6_spi_apps_clk",
1286                         .parent_names = (const char *[]){
1287                                 "blsp1_qup6_spi_apps_clk_src",
1288                         },
1289                         .num_parents = 1,
1290                         .flags = CLK_SET_RATE_PARENT,
1291                         .ops = &clk_branch2_ops,
1292                 },
1293         },
1294 };
1295
1296 static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1297         .halt_reg = 0x0684,
1298         .clkr = {
1299                 .enable_reg = 0x0684,
1300                 .enable_mask = BIT(0),
1301                 .hw.init = &(struct clk_init_data){
1302                         .name = "gcc_blsp1_uart1_apps_clk",
1303                         .parent_names = (const char *[]){
1304                                 "blsp1_uart1_apps_clk_src",
1305                         },
1306                         .num_parents = 1,
1307                         .flags = CLK_SET_RATE_PARENT,
1308                         .ops = &clk_branch2_ops,
1309                 },
1310         },
1311 };
1312
1313 static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1314         .halt_reg = 0x0704,
1315         .clkr = {
1316                 .enable_reg = 0x0704,
1317                 .enable_mask = BIT(0),
1318                 .hw.init = &(struct clk_init_data){
1319                         .name = "gcc_blsp1_uart2_apps_clk",
1320                         .parent_names = (const char *[]){
1321                                 "blsp1_uart2_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_uart3_apps_clk = {
1331         .halt_reg = 0x0784,
1332         .clkr = {
1333                 .enable_reg = 0x0784,
1334                 .enable_mask = BIT(0),
1335                 .hw.init = &(struct clk_init_data){
1336                         .name = "gcc_blsp1_uart3_apps_clk",
1337                         .parent_names = (const char *[]){
1338                                 "blsp1_uart3_apps_clk_src",
1339                         },
1340                         .num_parents = 1,
1341                         .flags = CLK_SET_RATE_PARENT,
1342                         .ops = &clk_branch2_ops,
1343                 },
1344         },
1345 };
1346
1347 static struct clk_branch gcc_blsp1_uart4_apps_clk = {
1348         .halt_reg = 0x0804,
1349         .clkr = {
1350                 .enable_reg = 0x0804,
1351                 .enable_mask = BIT(0),
1352                 .hw.init = &(struct clk_init_data){
1353                         .name = "gcc_blsp1_uart4_apps_clk",
1354                         .parent_names = (const char *[]){
1355                                 "blsp1_uart4_apps_clk_src",
1356                         },
1357                         .num_parents = 1,
1358                         .flags = CLK_SET_RATE_PARENT,
1359                         .ops = &clk_branch2_ops,
1360                 },
1361         },
1362 };
1363
1364 static struct clk_branch gcc_blsp1_uart5_apps_clk = {
1365         .halt_reg = 0x0884,
1366         .clkr = {
1367                 .enable_reg = 0x0884,
1368                 .enable_mask = BIT(0),
1369                 .hw.init = &(struct clk_init_data){
1370                         .name = "gcc_blsp1_uart5_apps_clk",
1371                         .parent_names = (const char *[]){
1372                                 "blsp1_uart5_apps_clk_src",
1373                         },
1374                         .num_parents = 1,
1375                         .flags = CLK_SET_RATE_PARENT,
1376                         .ops = &clk_branch2_ops,
1377                 },
1378         },
1379 };
1380
1381 static struct clk_branch gcc_blsp1_uart6_apps_clk = {
1382         .halt_reg = 0x0904,
1383         .clkr = {
1384                 .enable_reg = 0x0904,
1385                 .enable_mask = BIT(0),
1386                 .hw.init = &(struct clk_init_data){
1387                         .name = "gcc_blsp1_uart6_apps_clk",
1388                         .parent_names = (const char *[]){
1389                                 "blsp1_uart6_apps_clk_src",
1390                         },
1391                         .num_parents = 1,
1392                         .flags = CLK_SET_RATE_PARENT,
1393                         .ops = &clk_branch2_ops,
1394                 },
1395         },
1396 };
1397
1398 static struct clk_branch gcc_blsp2_ahb_clk = {
1399         .halt_reg = 0x0944,
1400         .halt_check = BRANCH_HALT_VOTED,
1401         .clkr = {
1402                 .enable_reg = 0x1484,
1403                 .enable_mask = BIT(15),
1404                 .hw.init = &(struct clk_init_data){
1405                         .name = "gcc_blsp2_ahb_clk",
1406                         .parent_names = (const char *[]){
1407                                 "periph_noc_clk_src",
1408                         },
1409                         .num_parents = 1,
1410                         .ops = &clk_branch2_ops,
1411                 },
1412         },
1413 };
1414
1415 static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
1416         .halt_reg = 0x0988,
1417         .clkr = {
1418                 .enable_reg = 0x0988,
1419                 .enable_mask = BIT(0),
1420                 .hw.init = &(struct clk_init_data){
1421                         .name = "gcc_blsp2_qup1_i2c_apps_clk",
1422                         .parent_names = (const char *[]){
1423                                 "blsp2_qup1_i2c_apps_clk_src",
1424                         },
1425                         .num_parents = 1,
1426                         .flags = CLK_SET_RATE_PARENT,
1427                         .ops = &clk_branch2_ops,
1428                 },
1429         },
1430 };
1431
1432 static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
1433         .halt_reg = 0x0984,
1434         .clkr = {
1435                 .enable_reg = 0x0984,
1436                 .enable_mask = BIT(0),
1437                 .hw.init = &(struct clk_init_data){
1438                         .name = "gcc_blsp2_qup1_spi_apps_clk",
1439                         .parent_names = (const char *[]){
1440                                 "blsp2_qup1_spi_apps_clk_src",
1441                         },
1442                         .num_parents = 1,
1443                         .flags = CLK_SET_RATE_PARENT,
1444                         .ops = &clk_branch2_ops,
1445                 },
1446         },
1447 };
1448
1449 static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
1450         .halt_reg = 0x0a08,
1451         .clkr = {
1452                 .enable_reg = 0x0a08,
1453                 .enable_mask = BIT(0),
1454                 .hw.init = &(struct clk_init_data){
1455                         .name = "gcc_blsp2_qup2_i2c_apps_clk",
1456                         .parent_names = (const char *[]){
1457                                 "blsp2_qup2_i2c_apps_clk_src",
1458                         },
1459                         .num_parents = 1,
1460                         .flags = CLK_SET_RATE_PARENT,
1461                         .ops = &clk_branch2_ops,
1462                 },
1463         },
1464 };
1465
1466 static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
1467         .halt_reg = 0x0a04,
1468         .clkr = {
1469                 .enable_reg = 0x0a04,
1470                 .enable_mask = BIT(0),
1471                 .hw.init = &(struct clk_init_data){
1472                         .name = "gcc_blsp2_qup2_spi_apps_clk",
1473                         .parent_names = (const char *[]){
1474                                 "blsp2_qup2_spi_apps_clk_src",
1475                         },
1476                         .num_parents = 1,
1477                         .flags = CLK_SET_RATE_PARENT,
1478                         .ops = &clk_branch2_ops,
1479                 },
1480         },
1481 };
1482
1483 static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
1484         .halt_reg = 0x0a88,
1485         .clkr = {
1486                 .enable_reg = 0x0a88,
1487                 .enable_mask = BIT(0),
1488                 .hw.init = &(struct clk_init_data){
1489                         .name = "gcc_blsp2_qup3_i2c_apps_clk",
1490                         .parent_names = (const char *[]){
1491                                 "blsp2_qup3_i2c_apps_clk_src",
1492                         },
1493                         .num_parents = 1,
1494                         .flags = CLK_SET_RATE_PARENT,
1495                         .ops = &clk_branch2_ops,
1496                 },
1497         },
1498 };
1499
1500 static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
1501         .halt_reg = 0x0a84,
1502         .clkr = {
1503                 .enable_reg = 0x0a84,
1504                 .enable_mask = BIT(0),
1505                 .hw.init = &(struct clk_init_data){
1506                         .name = "gcc_blsp2_qup3_spi_apps_clk",
1507                         .parent_names = (const char *[]){
1508                                 "blsp2_qup3_spi_apps_clk_src",
1509                         },
1510                         .num_parents = 1,
1511                         .flags = CLK_SET_RATE_PARENT,
1512                         .ops = &clk_branch2_ops,
1513                 },
1514         },
1515 };
1516
1517 static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
1518         .halt_reg = 0x0b08,
1519         .clkr = {
1520                 .enable_reg = 0x0b08,
1521                 .enable_mask = BIT(0),
1522                 .hw.init = &(struct clk_init_data){
1523                         .name = "gcc_blsp2_qup4_i2c_apps_clk",
1524                         .parent_names = (const char *[]){
1525                                 "blsp2_qup4_i2c_apps_clk_src",
1526                         },
1527                         .num_parents = 1,
1528                         .flags = CLK_SET_RATE_PARENT,
1529                         .ops = &clk_branch2_ops,
1530                 },
1531         },
1532 };
1533
1534 static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
1535         .halt_reg = 0x0b04,
1536         .clkr = {
1537                 .enable_reg = 0x0b04,
1538                 .enable_mask = BIT(0),
1539                 .hw.init = &(struct clk_init_data){
1540                         .name = "gcc_blsp2_qup4_spi_apps_clk",
1541                         .parent_names = (const char *[]){
1542                                 "blsp2_qup4_spi_apps_clk_src",
1543                         },
1544                         .num_parents = 1,
1545                         .flags = CLK_SET_RATE_PARENT,
1546                         .ops = &clk_branch2_ops,
1547                 },
1548         },
1549 };
1550
1551 static struct clk_branch gcc_blsp2_qup5_i2c_apps_clk = {
1552         .halt_reg = 0x0b88,
1553         .clkr = {
1554                 .enable_reg = 0x0b88,
1555                 .enable_mask = BIT(0),
1556                 .hw.init = &(struct clk_init_data){
1557                         .name = "gcc_blsp2_qup5_i2c_apps_clk",
1558                         .parent_names = (const char *[]){
1559                                 "blsp2_qup5_i2c_apps_clk_src",
1560                         },
1561                         .num_parents = 1,
1562                         .flags = CLK_SET_RATE_PARENT,
1563                         .ops = &clk_branch2_ops,
1564                 },
1565         },
1566 };
1567
1568 static struct clk_branch gcc_blsp2_qup5_spi_apps_clk = {
1569         .halt_reg = 0x0b84,
1570         .clkr = {
1571                 .enable_reg = 0x0b84,
1572                 .enable_mask = BIT(0),
1573                 .hw.init = &(struct clk_init_data){
1574                         .name = "gcc_blsp2_qup5_spi_apps_clk",
1575                         .parent_names = (const char *[]){
1576                                 "blsp2_qup5_spi_apps_clk_src",
1577                         },
1578                         .num_parents = 1,
1579                         .flags = CLK_SET_RATE_PARENT,
1580                         .ops = &clk_branch2_ops,
1581                 },
1582         },
1583 };
1584
1585 static struct clk_branch gcc_blsp2_qup6_i2c_apps_clk = {
1586         .halt_reg = 0x0c08,
1587         .clkr = {
1588                 .enable_reg = 0x0c08,
1589                 .enable_mask = BIT(0),
1590                 .hw.init = &(struct clk_init_data){
1591                         .name = "gcc_blsp2_qup6_i2c_apps_clk",
1592                         .parent_names = (const char *[]){
1593                                 "blsp2_qup6_i2c_apps_clk_src",
1594                         },
1595                         .num_parents = 1,
1596                         .flags = CLK_SET_RATE_PARENT,
1597                         .ops = &clk_branch2_ops,
1598                 },
1599         },
1600 };
1601
1602 static struct clk_branch gcc_blsp2_qup6_spi_apps_clk = {
1603         .halt_reg = 0x0c04,
1604         .clkr = {
1605                 .enable_reg = 0x0c04,
1606                 .enable_mask = BIT(0),
1607                 .hw.init = &(struct clk_init_data){
1608                         .name = "gcc_blsp2_qup6_spi_apps_clk",
1609                         .parent_names = (const char *[]){
1610                                 "blsp2_qup6_spi_apps_clk_src",
1611                         },
1612                         .num_parents = 1,
1613                         .flags = CLK_SET_RATE_PARENT,
1614                         .ops = &clk_branch2_ops,
1615                 },
1616         },
1617 };
1618
1619 static struct clk_branch gcc_blsp2_uart1_apps_clk = {
1620         .halt_reg = 0x09c4,
1621         .clkr = {
1622                 .enable_reg = 0x09c4,
1623                 .enable_mask = BIT(0),
1624                 .hw.init = &(struct clk_init_data){
1625                         .name = "gcc_blsp2_uart1_apps_clk",
1626                         .parent_names = (const char *[]){
1627                                 "blsp2_uart1_apps_clk_src",
1628                         },
1629                         .num_parents = 1,
1630                         .flags = CLK_SET_RATE_PARENT,
1631                         .ops = &clk_branch2_ops,
1632                 },
1633         },
1634 };
1635
1636 static struct clk_branch gcc_blsp2_uart2_apps_clk = {
1637         .halt_reg = 0x0a44,
1638         .clkr = {
1639                 .enable_reg = 0x0a44,
1640                 .enable_mask = BIT(0),
1641                 .hw.init = &(struct clk_init_data){
1642                         .name = "gcc_blsp2_uart2_apps_clk",
1643                         .parent_names = (const char *[]){
1644                                 "blsp2_uart2_apps_clk_src",
1645                         },
1646                         .num_parents = 1,
1647                         .flags = CLK_SET_RATE_PARENT,
1648                         .ops = &clk_branch2_ops,
1649                 },
1650         },
1651 };
1652
1653 static struct clk_branch gcc_blsp2_uart3_apps_clk = {
1654         .halt_reg = 0x0ac4,
1655         .clkr = {
1656                 .enable_reg = 0x0ac4,
1657                 .enable_mask = BIT(0),
1658                 .hw.init = &(struct clk_init_data){
1659                         .name = "gcc_blsp2_uart3_apps_clk",
1660                         .parent_names = (const char *[]){
1661                                 "blsp2_uart3_apps_clk_src",
1662                         },
1663                         .num_parents = 1,
1664                         .flags = CLK_SET_RATE_PARENT,
1665                         .ops = &clk_branch2_ops,
1666                 },
1667         },
1668 };
1669
1670 static struct clk_branch gcc_blsp2_uart4_apps_clk = {
1671         .halt_reg = 0x0b44,
1672         .clkr = {
1673                 .enable_reg = 0x0b44,
1674                 .enable_mask = BIT(0),
1675                 .hw.init = &(struct clk_init_data){
1676                         .name = "gcc_blsp2_uart4_apps_clk",
1677                         .parent_names = (const char *[]){
1678                                 "blsp2_uart4_apps_clk_src",
1679                         },
1680                         .num_parents = 1,
1681                         .flags = CLK_SET_RATE_PARENT,
1682                         .ops = &clk_branch2_ops,
1683                 },
1684         },
1685 };
1686
1687 static struct clk_branch gcc_blsp2_uart5_apps_clk = {
1688         .halt_reg = 0x0bc4,
1689         .clkr = {
1690                 .enable_reg = 0x0bc4,
1691                 .enable_mask = BIT(0),
1692                 .hw.init = &(struct clk_init_data){
1693                         .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                         .name = "gcc_blsp2_uart6_apps_clk",
1711                         .parent_names = (const char *[]){
1712                                 "blsp2_uart6_apps_clk_src",
1713                         },
1714                         .num_parents = 1,
1715                         .flags = CLK_SET_RATE_PARENT,
1716                         .ops = &clk_branch2_ops,
1717                 },
1718         },
1719 };
1720
1721 static struct clk_branch gcc_boot_rom_ahb_clk = {
1722         .halt_reg = 0x0e04,
1723         .halt_check = BRANCH_HALT_VOTED,
1724         .clkr = {
1725                 .enable_reg = 0x1484,
1726                 .enable_mask = BIT(10),
1727                 .hw.init = &(struct clk_init_data){
1728                         .name = "gcc_boot_rom_ahb_clk",
1729                         .parent_names = (const char *[]){
1730                                 "config_noc_clk_src",
1731                         },
1732                         .num_parents = 1,
1733                         .ops = &clk_branch2_ops,
1734                 },
1735         },
1736 };
1737
1738 static struct clk_branch gcc_ce1_ahb_clk = {
1739         .halt_reg = 0x104c,
1740         .halt_check = BRANCH_HALT_VOTED,
1741         .clkr = {
1742                 .enable_reg = 0x1484,
1743                 .enable_mask = BIT(3),
1744                 .hw.init = &(struct clk_init_data){
1745                         .name = "gcc_ce1_ahb_clk",
1746                         .parent_names = (const char *[]){
1747                                 "config_noc_clk_src",
1748                         },
1749                         .num_parents = 1,
1750                         .ops = &clk_branch2_ops,
1751                 },
1752         },
1753 };
1754
1755 static struct clk_branch gcc_ce1_axi_clk = {
1756         .halt_reg = 0x1048,
1757         .halt_check = BRANCH_HALT_VOTED,
1758         .clkr = {
1759                 .enable_reg = 0x1484,
1760                 .enable_mask = BIT(4),
1761                 .hw.init = &(struct clk_init_data){
1762                         .name = "gcc_ce1_axi_clk",
1763                         .parent_names = (const char *[]){
1764                                 "system_noc_clk_src",
1765                         },
1766                         .num_parents = 1,
1767                         .ops = &clk_branch2_ops,
1768                 },
1769         },
1770 };
1771
1772 static struct clk_branch gcc_ce1_clk = {
1773         .halt_reg = 0x1050,
1774         .halt_check = BRANCH_HALT_VOTED,
1775         .clkr = {
1776                 .enable_reg = 0x1484,
1777                 .enable_mask = BIT(5),
1778                 .hw.init = &(struct clk_init_data){
1779                         .name = "gcc_ce1_clk",
1780                         .parent_names = (const char *[]){
1781                                 "ce1_clk_src",
1782                         },
1783                         .num_parents = 1,
1784                         .ops = &clk_branch2_ops,
1785                 },
1786         },
1787 };
1788
1789 static struct clk_branch gcc_ce2_ahb_clk = {
1790         .halt_reg = 0x108c,
1791         .halt_check = BRANCH_HALT_VOTED,
1792         .clkr = {
1793                 .enable_reg = 0x1484,
1794                 .enable_mask = BIT(0),
1795                 .hw.init = &(struct clk_init_data){
1796                         .name = "gcc_ce2_ahb_clk",
1797                         .parent_names = (const char *[]){
1798                                 "config_noc_clk_src",
1799                         },
1800                         .num_parents = 1,
1801                         .ops = &clk_branch2_ops,
1802                 },
1803         },
1804 };
1805
1806 static struct clk_branch gcc_ce2_axi_clk = {
1807         .halt_reg = 0x1088,
1808         .halt_check = BRANCH_HALT_VOTED,
1809         .clkr = {
1810                 .enable_reg = 0x1484,
1811                 .enable_mask = BIT(1),
1812                 .hw.init = &(struct clk_init_data){
1813                         .name = "gcc_ce2_axi_clk",
1814                         .parent_names = (const char *[]){
1815                                 "system_noc_clk_src",
1816                         },
1817                         .num_parents = 1,
1818                         .ops = &clk_branch2_ops,
1819                 },
1820         },
1821 };
1822
1823 static struct clk_branch gcc_ce2_clk = {
1824         .halt_reg = 0x1090,
1825         .halt_check = BRANCH_HALT_VOTED,
1826         .clkr = {
1827                 .enable_reg = 0x1484,
1828                 .enable_mask = BIT(2),
1829                 .hw.init = &(struct clk_init_data){
1830                         .name = "gcc_ce2_clk",
1831                         .parent_names = (const char *[]){
1832                                 "ce2_clk_src",
1833                         },
1834                         .num_parents = 1,
1835                         .flags = CLK_SET_RATE_PARENT,
1836                         .ops = &clk_branch2_ops,
1837                 },
1838         },
1839 };
1840
1841 static struct clk_branch gcc_gp1_clk = {
1842         .halt_reg = 0x1900,
1843         .clkr = {
1844                 .enable_reg = 0x1900,
1845                 .enable_mask = BIT(0),
1846                 .hw.init = &(struct clk_init_data){
1847                         .name = "gcc_gp1_clk",
1848                         .parent_names = (const char *[]){
1849                                 "gp1_clk_src",
1850                         },
1851                         .num_parents = 1,
1852                         .flags = CLK_SET_RATE_PARENT,
1853                         .ops = &clk_branch2_ops,
1854                 },
1855         },
1856 };
1857
1858 static struct clk_branch gcc_gp2_clk = {
1859         .halt_reg = 0x1940,
1860         .clkr = {
1861                 .enable_reg = 0x1940,
1862                 .enable_mask = BIT(0),
1863                 .hw.init = &(struct clk_init_data){
1864                         .name = "gcc_gp2_clk",
1865                         .parent_names = (const char *[]){
1866                                 "gp2_clk_src",
1867                         },
1868                         .num_parents = 1,
1869                         .flags = CLK_SET_RATE_PARENT,
1870                         .ops = &clk_branch2_ops,
1871                 },
1872         },
1873 };
1874
1875 static struct clk_branch gcc_gp3_clk = {
1876         .halt_reg = 0x1980,
1877         .clkr = {
1878                 .enable_reg = 0x1980,
1879                 .enable_mask = BIT(0),
1880                 .hw.init = &(struct clk_init_data){
1881                         .name = "gcc_gp3_clk",
1882                         .parent_names = (const char *[]){
1883                                 "gp3_clk_src",
1884                         },
1885                         .num_parents = 1,
1886                         .flags = CLK_SET_RATE_PARENT,
1887                         .ops = &clk_branch2_ops,
1888                 },
1889         },
1890 };
1891
1892 static struct clk_branch gcc_lpass_q6_axi_clk = {
1893         .halt_reg = 0x11c0,
1894         .clkr = {
1895                 .enable_reg = 0x11c0,
1896                 .enable_mask = BIT(0),
1897                 .hw.init = &(struct clk_init_data){
1898                         .name = "gcc_lpass_q6_axi_clk",
1899                         .parent_names = (const char *[]){
1900                                 "system_noc_clk_src",
1901                         },
1902                         .num_parents = 1,
1903                         .ops = &clk_branch2_ops,
1904                 },
1905         },
1906 };
1907
1908 static struct clk_branch gcc_mmss_noc_cfg_ahb_clk = {
1909         .halt_reg = 0x024c,
1910         .clkr = {
1911                 .enable_reg = 0x024c,
1912                 .enable_mask = BIT(0),
1913                 .hw.init = &(struct clk_init_data){
1914                         .name = "gcc_mmss_noc_cfg_ahb_clk",
1915                         .parent_names = (const char *[]){
1916                                 "config_noc_clk_src",
1917                         },
1918                         .num_parents = 1,
1919                         .ops = &clk_branch2_ops,
1920                         .flags = CLK_IGNORE_UNUSED,
1921                 },
1922         },
1923 };
1924
1925 static struct clk_branch gcc_ocmem_noc_cfg_ahb_clk = {
1926         .halt_reg = 0x0248,
1927         .clkr = {
1928                 .enable_reg = 0x0248,
1929                 .enable_mask = BIT(0),
1930                 .hw.init = &(struct clk_init_data){
1931                         .name = "gcc_ocmem_noc_cfg_ahb_clk",
1932                         .parent_names = (const char *[]){
1933                                 "config_noc_clk_src",
1934                         },
1935                         .num_parents = 1,
1936                         .ops = &clk_branch2_ops,
1937                 },
1938         },
1939 };
1940
1941 static struct clk_branch gcc_mss_cfg_ahb_clk = {
1942         .halt_reg = 0x0280,
1943         .clkr = {
1944                 .enable_reg = 0x0280,
1945                 .enable_mask = BIT(0),
1946                 .hw.init = &(struct clk_init_data){
1947                         .name = "gcc_mss_cfg_ahb_clk",
1948                         .parent_names = (const char *[]){
1949                                 "config_noc_clk_src",
1950                         },
1951                         .num_parents = 1,
1952                         .ops = &clk_branch2_ops,
1953                 },
1954         },
1955 };
1956
1957 static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
1958         .halt_reg = 0x0284,
1959         .clkr = {
1960                 .enable_reg = 0x0284,
1961                 .enable_mask = BIT(0),
1962                 .hw.init = &(struct clk_init_data){
1963                         .name = "gcc_mss_q6_bimc_axi_clk",
1964                         .flags = CLK_IS_ROOT,
1965                         .ops = &clk_branch2_ops,
1966                 },
1967         },
1968 };
1969
1970 static struct clk_branch gcc_pdm2_clk = {
1971         .halt_reg = 0x0ccc,
1972         .clkr = {
1973                 .enable_reg = 0x0ccc,
1974                 .enable_mask = BIT(0),
1975                 .hw.init = &(struct clk_init_data){
1976                         .name = "gcc_pdm2_clk",
1977                         .parent_names = (const char *[]){
1978                                 "pdm2_clk_src",
1979                         },
1980                         .num_parents = 1,
1981                         .flags = CLK_SET_RATE_PARENT,
1982                         .ops = &clk_branch2_ops,
1983                 },
1984         },
1985 };
1986
1987 static struct clk_branch gcc_pdm_ahb_clk = {
1988         .halt_reg = 0x0cc4,
1989         .clkr = {
1990                 .enable_reg = 0x0cc4,
1991                 .enable_mask = BIT(0),
1992                 .hw.init = &(struct clk_init_data){
1993                         .name = "gcc_pdm_ahb_clk",
1994                         .parent_names = (const char *[]){
1995                                 "periph_noc_clk_src",
1996                         },
1997                         .num_parents = 1,
1998                         .ops = &clk_branch2_ops,
1999                 },
2000         },
2001 };
2002
2003 static struct clk_branch gcc_prng_ahb_clk = {
2004         .halt_reg = 0x0d04,
2005         .halt_check = BRANCH_HALT_VOTED,
2006         .clkr = {
2007                 .enable_reg = 0x1484,
2008                 .enable_mask = BIT(13),
2009                 .hw.init = &(struct clk_init_data){
2010                         .name = "gcc_prng_ahb_clk",
2011                         .parent_names = (const char *[]){
2012                                 "periph_noc_clk_src",
2013                         },
2014                         .num_parents = 1,
2015                         .ops = &clk_branch2_ops,
2016                 },
2017         },
2018 };
2019
2020 static struct clk_branch gcc_sdcc1_ahb_clk = {
2021         .halt_reg = 0x04c8,
2022         .clkr = {
2023                 .enable_reg = 0x04c8,
2024                 .enable_mask = BIT(0),
2025                 .hw.init = &(struct clk_init_data){
2026                         .name = "gcc_sdcc1_ahb_clk",
2027                         .parent_names = (const char *[]){
2028                                 "periph_noc_clk_src",
2029                         },
2030                         .num_parents = 1,
2031                         .ops = &clk_branch2_ops,
2032                 },
2033         },
2034 };
2035
2036 static struct clk_branch gcc_sdcc1_apps_clk = {
2037         .halt_reg = 0x04c4,
2038         .clkr = {
2039                 .enable_reg = 0x04c4,
2040                 .enable_mask = BIT(0),
2041                 .hw.init = &(struct clk_init_data){
2042                         .name = "gcc_sdcc1_apps_clk",
2043                         .parent_names = (const char *[]){
2044                                 "sdcc1_apps_clk_src",
2045                         },
2046                         .num_parents = 1,
2047                         .flags = CLK_SET_RATE_PARENT,
2048                         .ops = &clk_branch2_ops,
2049                 },
2050         },
2051 };
2052
2053 static struct clk_branch gcc_sdcc1_cdccal_ff_clk = {
2054         .halt_reg = 0x04e8,
2055         .clkr = {
2056                 .enable_reg = 0x04e8,
2057                 .enable_mask = BIT(0),
2058                 .hw.init = &(struct clk_init_data){
2059                         .name = "gcc_sdcc1_cdccal_ff_clk",
2060                         .parent_names = (const char *[]){
2061                                 "xo"
2062                         },
2063                         .num_parents = 1,
2064                         .ops = &clk_branch2_ops,
2065                 },
2066         },
2067 };
2068
2069 static struct clk_branch gcc_sdcc1_cdccal_sleep_clk = {
2070         .halt_reg = 0x04e4,
2071         .clkr = {
2072                 .enable_reg = 0x04e4,
2073                 .enable_mask = BIT(0),
2074                 .hw.init = &(struct clk_init_data){
2075                         .name = "gcc_sdcc1_cdccal_sleep_clk",
2076                         .parent_names = (const char *[]){
2077                                 "sleep_clk_src"
2078                         },
2079                         .num_parents = 1,
2080                         .ops = &clk_branch2_ops,
2081                 },
2082         },
2083 };
2084
2085 static struct clk_branch gcc_sdcc2_ahb_clk = {
2086         .halt_reg = 0x0508,
2087         .clkr = {
2088                 .enable_reg = 0x0508,
2089                 .enable_mask = BIT(0),
2090                 .hw.init = &(struct clk_init_data){
2091                         .name = "gcc_sdcc2_ahb_clk",
2092                         .parent_names = (const char *[]){
2093                                 "periph_noc_clk_src",
2094                         },
2095                         .num_parents = 1,
2096                         .ops = &clk_branch2_ops,
2097                 },
2098         },
2099 };
2100
2101 static struct clk_branch gcc_sdcc2_apps_clk = {
2102         .halt_reg = 0x0504,
2103         .clkr = {
2104                 .enable_reg = 0x0504,
2105                 .enable_mask = BIT(0),
2106                 .hw.init = &(struct clk_init_data){
2107                         .name = "gcc_sdcc2_apps_clk",
2108                         .parent_names = (const char *[]){
2109                                 "sdcc2_apps_clk_src",
2110                         },
2111                         .num_parents = 1,
2112                         .flags = CLK_SET_RATE_PARENT,
2113                         .ops = &clk_branch2_ops,
2114                 },
2115         },
2116 };
2117
2118 static struct clk_branch gcc_sdcc3_ahb_clk = {
2119         .halt_reg = 0x0548,
2120         .clkr = {
2121                 .enable_reg = 0x0548,
2122                 .enable_mask = BIT(0),
2123                 .hw.init = &(struct clk_init_data){
2124                         .name = "gcc_sdcc3_ahb_clk",
2125                         .parent_names = (const char *[]){
2126                                 "periph_noc_clk_src",
2127                         },
2128                         .num_parents = 1,
2129                         .ops = &clk_branch2_ops,
2130                 },
2131         },
2132 };
2133
2134 static struct clk_branch gcc_sdcc3_apps_clk = {
2135         .halt_reg = 0x0544,
2136         .clkr = {
2137                 .enable_reg = 0x0544,
2138                 .enable_mask = BIT(0),
2139                 .hw.init = &(struct clk_init_data){
2140                         .name = "gcc_sdcc3_apps_clk",
2141                         .parent_names = (const char *[]){
2142                                 "sdcc3_apps_clk_src",
2143                         },
2144                         .num_parents = 1,
2145                         .flags = CLK_SET_RATE_PARENT,
2146                         .ops = &clk_branch2_ops,
2147                 },
2148         },
2149 };
2150
2151 static struct clk_branch gcc_sdcc4_ahb_clk = {
2152         .halt_reg = 0x0588,
2153         .clkr = {
2154                 .enable_reg = 0x0588,
2155                 .enable_mask = BIT(0),
2156                 .hw.init = &(struct clk_init_data){
2157                         .name = "gcc_sdcc4_ahb_clk",
2158                         .parent_names = (const char *[]){
2159                                 "periph_noc_clk_src",
2160                         },
2161                         .num_parents = 1,
2162                         .ops = &clk_branch2_ops,
2163                 },
2164         },
2165 };
2166
2167 static struct clk_branch gcc_sdcc4_apps_clk = {
2168         .halt_reg = 0x0584,
2169         .clkr = {
2170                 .enable_reg = 0x0584,
2171                 .enable_mask = BIT(0),
2172                 .hw.init = &(struct clk_init_data){
2173                         .name = "gcc_sdcc4_apps_clk",
2174                         .parent_names = (const char *[]){
2175                                 "sdcc4_apps_clk_src",
2176                         },
2177                         .num_parents = 1,
2178                         .flags = CLK_SET_RATE_PARENT,
2179                         .ops = &clk_branch2_ops,
2180                 },
2181         },
2182 };
2183
2184 static struct clk_branch gcc_sys_noc_usb3_axi_clk = {
2185         .halt_reg = 0x0108,
2186         .clkr = {
2187                 .enable_reg = 0x0108,
2188                 .enable_mask = BIT(0),
2189                 .hw.init = &(struct clk_init_data){
2190                         .name = "gcc_sys_noc_usb3_axi_clk",
2191                         .parent_names = (const char *[]){
2192                                 "usb30_master_clk_src",
2193                         },
2194                         .num_parents = 1,
2195                         .flags = CLK_SET_RATE_PARENT,
2196                         .ops = &clk_branch2_ops,
2197                 },
2198         },
2199 };
2200
2201 static struct clk_branch gcc_tsif_ahb_clk = {
2202         .halt_reg = 0x0d84,
2203         .clkr = {
2204                 .enable_reg = 0x0d84,
2205                 .enable_mask = BIT(0),
2206                 .hw.init = &(struct clk_init_data){
2207                         .name = "gcc_tsif_ahb_clk",
2208                         .parent_names = (const char *[]){
2209                                 "periph_noc_clk_src",
2210                         },
2211                         .num_parents = 1,
2212                         .ops = &clk_branch2_ops,
2213                 },
2214         },
2215 };
2216
2217 static struct clk_branch gcc_tsif_ref_clk = {
2218         .halt_reg = 0x0d88,
2219         .clkr = {
2220                 .enable_reg = 0x0d88,
2221                 .enable_mask = BIT(0),
2222                 .hw.init = &(struct clk_init_data){
2223                         .name = "gcc_tsif_ref_clk",
2224                         .parent_names = (const char *[]){
2225                                 "tsif_ref_clk_src",
2226                         },
2227                         .num_parents = 1,
2228                         .flags = CLK_SET_RATE_PARENT,
2229                         .ops = &clk_branch2_ops,
2230                 },
2231         },
2232 };
2233
2234 static struct clk_branch gcc_usb2a_phy_sleep_clk = {
2235         .halt_reg = 0x04ac,
2236         .clkr = {
2237                 .enable_reg = 0x04ac,
2238                 .enable_mask = BIT(0),
2239                 .hw.init = &(struct clk_init_data){
2240                         .name = "gcc_usb2a_phy_sleep_clk",
2241                         .parent_names = (const char *[]){
2242                                 "sleep_clk_src",
2243                         },
2244                         .num_parents = 1,
2245                         .ops = &clk_branch2_ops,
2246                 },
2247         },
2248 };
2249
2250 static struct clk_branch gcc_usb2b_phy_sleep_clk = {
2251         .halt_reg = 0x04b4,
2252         .clkr = {
2253                 .enable_reg = 0x04b4,
2254                 .enable_mask = BIT(0),
2255                 .hw.init = &(struct clk_init_data){
2256                         .name = "gcc_usb2b_phy_sleep_clk",
2257                         .parent_names = (const char *[]){
2258                                 "sleep_clk_src",
2259                         },
2260                         .num_parents = 1,
2261                         .ops = &clk_branch2_ops,
2262                 },
2263         },
2264 };
2265
2266 static struct clk_branch gcc_usb30_master_clk = {
2267         .halt_reg = 0x03c8,
2268         .clkr = {
2269                 .enable_reg = 0x03c8,
2270                 .enable_mask = BIT(0),
2271                 .hw.init = &(struct clk_init_data){
2272                         .name = "gcc_usb30_master_clk",
2273                         .parent_names = (const char *[]){
2274                                 "usb30_master_clk_src",
2275                         },
2276                         .num_parents = 1,
2277                         .flags = CLK_SET_RATE_PARENT,
2278                         .ops = &clk_branch2_ops,
2279                 },
2280         },
2281 };
2282
2283 static struct clk_branch gcc_usb30_mock_utmi_clk = {
2284         .halt_reg = 0x03d0,
2285         .clkr = {
2286                 .enable_reg = 0x03d0,
2287                 .enable_mask = BIT(0),
2288                 .hw.init = &(struct clk_init_data){
2289                         .name = "gcc_usb30_mock_utmi_clk",
2290                         .parent_names = (const char *[]){
2291                                 "usb30_mock_utmi_clk_src",
2292                         },
2293                         .num_parents = 1,
2294                         .flags = CLK_SET_RATE_PARENT,
2295                         .ops = &clk_branch2_ops,
2296                 },
2297         },
2298 };
2299
2300 static struct clk_branch gcc_usb30_sleep_clk = {
2301         .halt_reg = 0x03cc,
2302         .clkr = {
2303                 .enable_reg = 0x03cc,
2304                 .enable_mask = BIT(0),
2305                 .hw.init = &(struct clk_init_data){
2306                         .name = "gcc_usb30_sleep_clk",
2307                         .parent_names = (const char *[]){
2308                                 "sleep_clk_src",
2309                         },
2310                         .num_parents = 1,
2311                         .ops = &clk_branch2_ops,
2312                 },
2313         },
2314 };
2315
2316 static struct clk_branch gcc_usb_hs_ahb_clk = {
2317         .halt_reg = 0x0488,
2318         .clkr = {
2319                 .enable_reg = 0x0488,
2320                 .enable_mask = BIT(0),
2321                 .hw.init = &(struct clk_init_data){
2322                         .name = "gcc_usb_hs_ahb_clk",
2323                         .parent_names = (const char *[]){
2324                                 "periph_noc_clk_src",
2325                         },
2326                         .num_parents = 1,
2327                         .ops = &clk_branch2_ops,
2328                 },
2329         },
2330 };
2331
2332 static struct clk_branch gcc_usb_hs_system_clk = {
2333         .halt_reg = 0x0484,
2334         .clkr = {
2335                 .enable_reg = 0x0484,
2336                 .enable_mask = BIT(0),
2337                 .hw.init = &(struct clk_init_data){
2338                         .name = "gcc_usb_hs_system_clk",
2339                         .parent_names = (const char *[]){
2340                                 "usb_hs_system_clk_src",
2341                         },
2342                         .num_parents = 1,
2343                         .flags = CLK_SET_RATE_PARENT,
2344                         .ops = &clk_branch2_ops,
2345                 },
2346         },
2347 };
2348
2349 static struct clk_branch gcc_usb_hsic_ahb_clk = {
2350         .halt_reg = 0x0408,
2351         .clkr = {
2352                 .enable_reg = 0x0408,
2353                 .enable_mask = BIT(0),
2354                 .hw.init = &(struct clk_init_data){
2355                         .name = "gcc_usb_hsic_ahb_clk",
2356                         .parent_names = (const char *[]){
2357                                 "periph_noc_clk_src",
2358                         },
2359                         .num_parents = 1,
2360                         .ops = &clk_branch2_ops,
2361                 },
2362         },
2363 };
2364
2365 static struct clk_branch gcc_usb_hsic_clk = {
2366         .halt_reg = 0x0410,
2367         .clkr = {
2368                 .enable_reg = 0x0410,
2369                 .enable_mask = BIT(0),
2370                 .hw.init = &(struct clk_init_data){
2371                         .name = "gcc_usb_hsic_clk",
2372                         .parent_names = (const char *[]){
2373                                 "usb_hsic_clk_src",
2374                         },
2375                         .num_parents = 1,
2376                         .flags = CLK_SET_RATE_PARENT,
2377                         .ops = &clk_branch2_ops,
2378                 },
2379         },
2380 };
2381
2382 static struct clk_branch gcc_usb_hsic_io_cal_clk = {
2383         .halt_reg = 0x0414,
2384         .clkr = {
2385                 .enable_reg = 0x0414,
2386                 .enable_mask = BIT(0),
2387                 .hw.init = &(struct clk_init_data){
2388                         .name = "gcc_usb_hsic_io_cal_clk",
2389                         .parent_names = (const char *[]){
2390                                 "usb_hsic_io_cal_clk_src",
2391                         },
2392                         .num_parents = 1,
2393                         .flags = CLK_SET_RATE_PARENT,
2394                         .ops = &clk_branch2_ops,
2395                 },
2396         },
2397 };
2398
2399 static struct clk_branch gcc_usb_hsic_io_cal_sleep_clk = {
2400         .halt_reg = 0x0418,
2401         .clkr = {
2402                 .enable_reg = 0x0418,
2403                 .enable_mask = BIT(0),
2404                 .hw.init = &(struct clk_init_data){
2405                         .name = "gcc_usb_hsic_io_cal_sleep_clk",
2406                         .parent_names = (const char *[]){
2407                                 "sleep_clk_src",
2408                         },
2409                         .num_parents = 1,
2410                         .ops = &clk_branch2_ops,
2411                 },
2412         },
2413 };
2414
2415 static struct clk_branch gcc_usb_hsic_system_clk = {
2416         .halt_reg = 0x040c,
2417         .clkr = {
2418                 .enable_reg = 0x040c,
2419                 .enable_mask = BIT(0),
2420                 .hw.init = &(struct clk_init_data){
2421                         .name = "gcc_usb_hsic_system_clk",
2422                         .parent_names = (const char *[]){
2423                                 "usb_hsic_system_clk_src",
2424                         },
2425                         .num_parents = 1,
2426                         .flags = CLK_SET_RATE_PARENT,
2427                         .ops = &clk_branch2_ops,
2428                 },
2429         },
2430 };
2431
2432 static struct clk_regmap *gcc_msm8974_clocks[] = {
2433         [GPLL0] = &gpll0.clkr,
2434         [GPLL0_VOTE] = &gpll0_vote,
2435         [CONFIG_NOC_CLK_SRC] = &config_noc_clk_src.clkr,
2436         [PERIPH_NOC_CLK_SRC] = &periph_noc_clk_src.clkr,
2437         [SYSTEM_NOC_CLK_SRC] = &system_noc_clk_src.clkr,
2438         [GPLL1] = &gpll1.clkr,
2439         [GPLL1_VOTE] = &gpll1_vote,
2440         [USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
2441         [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
2442         [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
2443         [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
2444         [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
2445         [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
2446         [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
2447         [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
2448         [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
2449         [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
2450         [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
2451         [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
2452         [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
2453         [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
2454         [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
2455         [BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
2456         [BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
2457         [BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
2458         [BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
2459         [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
2460         [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
2461         [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
2462         [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
2463         [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
2464         [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
2465         [BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
2466         [BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
2467         [BLSP2_QUP5_I2C_APPS_CLK_SRC] = &blsp2_qup5_i2c_apps_clk_src.clkr,
2468         [BLSP2_QUP5_SPI_APPS_CLK_SRC] = &blsp2_qup5_spi_apps_clk_src.clkr,
2469         [BLSP2_QUP6_I2C_APPS_CLK_SRC] = &blsp2_qup6_i2c_apps_clk_src.clkr,
2470         [BLSP2_QUP6_SPI_APPS_CLK_SRC] = &blsp2_qup6_spi_apps_clk_src.clkr,
2471         [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
2472         [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
2473         [BLSP2_UART3_APPS_CLK_SRC] = &blsp2_uart3_apps_clk_src.clkr,
2474         [BLSP2_UART4_APPS_CLK_SRC] = &blsp2_uart4_apps_clk_src.clkr,
2475         [BLSP2_UART5_APPS_CLK_SRC] = &blsp2_uart5_apps_clk_src.clkr,
2476         [BLSP2_UART6_APPS_CLK_SRC] = &blsp2_uart6_apps_clk_src.clkr,
2477         [CE1_CLK_SRC] = &ce1_clk_src.clkr,
2478         [CE2_CLK_SRC] = &ce2_clk_src.clkr,
2479         [GP1_CLK_SRC] = &gp1_clk_src.clkr,
2480         [GP2_CLK_SRC] = &gp2_clk_src.clkr,
2481         [GP3_CLK_SRC] = &gp3_clk_src.clkr,
2482         [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
2483         [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
2484         [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
2485         [SDCC3_APPS_CLK_SRC] = &sdcc3_apps_clk_src.clkr,
2486         [SDCC4_APPS_CLK_SRC] = &sdcc4_apps_clk_src.clkr,
2487         [TSIF_REF_CLK_SRC] = &tsif_ref_clk_src.clkr,
2488         [USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
2489         [USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
2490         [USB_HSIC_CLK_SRC] = &usb_hsic_clk_src.clkr,
2491         [USB_HSIC_IO_CAL_CLK_SRC] = &usb_hsic_io_cal_clk_src.clkr,
2492         [USB_HSIC_SYSTEM_CLK_SRC] = &usb_hsic_system_clk_src.clkr,
2493         [GCC_BAM_DMA_AHB_CLK] = &gcc_bam_dma_ahb_clk.clkr,
2494         [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
2495         [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
2496         [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
2497         [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
2498         [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
2499         [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
2500         [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
2501         [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
2502         [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
2503         [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
2504         [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
2505         [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
2506         [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
2507         [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
2508         [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
2509         [GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
2510         [GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
2511         [GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
2512         [GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
2513         [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
2514         [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
2515         [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
2516         [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
2517         [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
2518         [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
2519         [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
2520         [GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
2521         [GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
2522         [GCC_BLSP2_QUP5_I2C_APPS_CLK] = &gcc_blsp2_qup5_i2c_apps_clk.clkr,
2523         [GCC_BLSP2_QUP5_SPI_APPS_CLK] = &gcc_blsp2_qup5_spi_apps_clk.clkr,
2524         [GCC_BLSP2_QUP6_I2C_APPS_CLK] = &gcc_blsp2_qup6_i2c_apps_clk.clkr,
2525         [GCC_BLSP2_QUP6_SPI_APPS_CLK] = &gcc_blsp2_qup6_spi_apps_clk.clkr,
2526         [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
2527         [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
2528         [GCC_BLSP2_UART3_APPS_CLK] = &gcc_blsp2_uart3_apps_clk.clkr,
2529         [GCC_BLSP2_UART4_APPS_CLK] = &gcc_blsp2_uart4_apps_clk.clkr,
2530         [GCC_BLSP2_UART5_APPS_CLK] = &gcc_blsp2_uart5_apps_clk.clkr,
2531         [GCC_BLSP2_UART6_APPS_CLK] = &gcc_blsp2_uart6_apps_clk.clkr,
2532         [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2533         [GCC_CE1_AHB_CLK] = &gcc_ce1_ahb_clk.clkr,
2534         [GCC_CE1_AXI_CLK] = &gcc_ce1_axi_clk.clkr,
2535         [GCC_CE1_CLK] = &gcc_ce1_clk.clkr,
2536         [GCC_CE2_AHB_CLK] = &gcc_ce2_ahb_clk.clkr,
2537         [GCC_CE2_AXI_CLK] = &gcc_ce2_axi_clk.clkr,
2538         [GCC_CE2_CLK] = &gcc_ce2_clk.clkr,
2539         [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2540         [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2541         [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2542         [GCC_LPASS_Q6_AXI_CLK] = &gcc_lpass_q6_axi_clk.clkr,
2543         [GCC_MMSS_NOC_CFG_AHB_CLK] = &gcc_mmss_noc_cfg_ahb_clk.clkr,
2544         [GCC_OCMEM_NOC_CFG_AHB_CLK] = &gcc_ocmem_noc_cfg_ahb_clk.clkr,
2545         [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
2546         [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
2547         [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2548         [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2549         [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
2550         [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2551         [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2552         [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2553         [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2554         [GCC_SDCC3_AHB_CLK] = &gcc_sdcc3_ahb_clk.clkr,
2555         [GCC_SDCC3_APPS_CLK] = &gcc_sdcc3_apps_clk.clkr,
2556         [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
2557         [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
2558         [GCC_SYS_NOC_USB3_AXI_CLK] = &gcc_sys_noc_usb3_axi_clk.clkr,
2559         [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr,
2560         [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
2561         [GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
2562         [GCC_USB2B_PHY_SLEEP_CLK] = &gcc_usb2b_phy_sleep_clk.clkr,
2563         [GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
2564         [GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
2565         [GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,
2566         [GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
2567         [GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
2568         [GCC_USB_HSIC_AHB_CLK] = &gcc_usb_hsic_ahb_clk.clkr,
2569         [GCC_USB_HSIC_CLK] = &gcc_usb_hsic_clk.clkr,
2570         [GCC_USB_HSIC_IO_CAL_CLK] = &gcc_usb_hsic_io_cal_clk.clkr,
2571         [GCC_USB_HSIC_IO_CAL_SLEEP_CLK] = &gcc_usb_hsic_io_cal_sleep_clk.clkr,
2572         [GCC_USB_HSIC_SYSTEM_CLK] = &gcc_usb_hsic_system_clk.clkr,
2573         [GCC_MMSS_GPLL0_CLK_SRC] = &gcc_mmss_gpll0_clk_src,
2574         [GPLL4] = NULL,
2575         [GPLL4_VOTE] = NULL,
2576         [GCC_SDCC1_CDCCAL_SLEEP_CLK] = NULL,
2577         [GCC_SDCC1_CDCCAL_FF_CLK] = NULL,
2578 };
2579
2580 static const struct qcom_reset_map gcc_msm8974_resets[] = {
2581         [GCC_SYSTEM_NOC_BCR] = { 0x0100 },
2582         [GCC_CONFIG_NOC_BCR] = { 0x0140 },
2583         [GCC_PERIPH_NOC_BCR] = { 0x0180 },
2584         [GCC_IMEM_BCR] = { 0x0200 },
2585         [GCC_MMSS_BCR] = { 0x0240 },
2586         [GCC_QDSS_BCR] = { 0x0300 },
2587         [GCC_USB_30_BCR] = { 0x03c0 },
2588         [GCC_USB3_PHY_BCR] = { 0x03fc },
2589         [GCC_USB_HS_HSIC_BCR] = { 0x0400 },
2590         [GCC_USB_HS_BCR] = { 0x0480 },
2591         [GCC_USB2A_PHY_BCR] = { 0x04a8 },
2592         [GCC_USB2B_PHY_BCR] = { 0x04b0 },
2593         [GCC_SDCC1_BCR] = { 0x04c0 },
2594         [GCC_SDCC2_BCR] = { 0x0500 },
2595         [GCC_SDCC3_BCR] = { 0x0540 },
2596         [GCC_SDCC4_BCR] = { 0x0580 },
2597         [GCC_BLSP1_BCR] = { 0x05c0 },
2598         [GCC_BLSP1_QUP1_BCR] = { 0x0640 },
2599         [GCC_BLSP1_UART1_BCR] = { 0x0680 },
2600         [GCC_BLSP1_QUP2_BCR] = { 0x06c0 },
2601         [GCC_BLSP1_UART2_BCR] = { 0x0700 },
2602         [GCC_BLSP1_QUP3_BCR] = { 0x0740 },
2603         [GCC_BLSP1_UART3_BCR] = { 0x0780 },
2604         [GCC_BLSP1_QUP4_BCR] = { 0x07c0 },
2605         [GCC_BLSP1_UART4_BCR] = { 0x0800 },
2606         [GCC_BLSP1_QUP5_BCR] = { 0x0840 },
2607         [GCC_BLSP1_UART5_BCR] = { 0x0880 },
2608         [GCC_BLSP1_QUP6_BCR] = { 0x08c0 },
2609         [GCC_BLSP1_UART6_BCR] = { 0x0900 },
2610         [GCC_BLSP2_BCR] = { 0x0940 },
2611         [GCC_BLSP2_QUP1_BCR] = { 0x0980 },
2612         [GCC_BLSP2_UART1_BCR] = { 0x09c0 },
2613         [GCC_BLSP2_QUP2_BCR] = { 0x0a00 },
2614         [GCC_BLSP2_UART2_BCR] = { 0x0a40 },
2615         [GCC_BLSP2_QUP3_BCR] = { 0x0a80 },
2616         [GCC_BLSP2_UART3_BCR] = { 0x0ac0 },
2617         [GCC_BLSP2_QUP4_BCR] = { 0x0b00 },
2618         [GCC_BLSP2_UART4_BCR] = { 0x0b40 },
2619         [GCC_BLSP2_QUP5_BCR] = { 0x0b80 },
2620         [GCC_BLSP2_UART5_BCR] = { 0x0bc0 },
2621         [GCC_BLSP2_QUP6_BCR] = { 0x0c00 },
2622         [GCC_BLSP2_UART6_BCR] = { 0x0c40 },
2623         [GCC_PDM_BCR] = { 0x0cc0 },
2624         [GCC_BAM_DMA_BCR] = { 0x0d40 },
2625         [GCC_TSIF_BCR] = { 0x0d80 },
2626         [GCC_TCSR_BCR] = { 0x0dc0 },
2627         [GCC_BOOT_ROM_BCR] = { 0x0e00 },
2628         [GCC_MSG_RAM_BCR] = { 0x0e40 },
2629         [GCC_TLMM_BCR] = { 0x0e80 },
2630         [GCC_MPM_BCR] = { 0x0ec0 },
2631         [GCC_SEC_CTRL_BCR] = { 0x0f40 },
2632         [GCC_SPMI_BCR] = { 0x0fc0 },
2633         [GCC_SPDM_BCR] = { 0x1000 },
2634         [GCC_CE1_BCR] = { 0x1040 },
2635         [GCC_CE2_BCR] = { 0x1080 },
2636         [GCC_BIMC_BCR] = { 0x1100 },
2637         [GCC_MPM_NON_AHB_RESET] = { 0x0ec4, 2 },
2638         [GCC_MPM_AHB_RESET] = { 0x0ec4, 1 },
2639         [GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x1240 },
2640         [GCC_SNOC_BUS_TIMEOUT2_BCR] = { 0x1248 },
2641         [GCC_PNOC_BUS_TIMEOUT0_BCR] = { 0x1280 },
2642         [GCC_PNOC_BUS_TIMEOUT1_BCR] = { 0x1288 },
2643         [GCC_PNOC_BUS_TIMEOUT2_BCR] = { 0x1290 },
2644         [GCC_PNOC_BUS_TIMEOUT3_BCR] = { 0x1298 },
2645         [GCC_PNOC_BUS_TIMEOUT4_BCR] = { 0x12a0 },
2646         [GCC_CNOC_BUS_TIMEOUT0_BCR] = { 0x12c0 },
2647         [GCC_CNOC_BUS_TIMEOUT1_BCR] = { 0x12c8 },
2648         [GCC_CNOC_BUS_TIMEOUT2_BCR] = { 0x12d0 },
2649         [GCC_CNOC_BUS_TIMEOUT3_BCR] = { 0x12d8 },
2650         [GCC_CNOC_BUS_TIMEOUT4_BCR] = { 0x12e0 },
2651         [GCC_CNOC_BUS_TIMEOUT5_BCR] = { 0x12e8 },
2652         [GCC_CNOC_BUS_TIMEOUT6_BCR] = { 0x12f0 },
2653         [GCC_DEHR_BCR] = { 0x1300 },
2654         [GCC_RBCPR_BCR] = { 0x1380 },
2655         [GCC_MSS_RESTART] = { 0x1680 },
2656         [GCC_LPASS_RESTART] = { 0x16c0 },
2657         [GCC_WCSS_RESTART] = { 0x1700 },
2658         [GCC_VENUS_RESTART] = { 0x1740 },
2659 };
2660
2661 static const struct regmap_config gcc_msm8974_regmap_config = {
2662         .reg_bits       = 32,
2663         .reg_stride     = 4,
2664         .val_bits       = 32,
2665         .max_register   = 0x1fc0,
2666         .fast_io        = true,
2667 };
2668
2669 static const struct qcom_cc_desc gcc_msm8974_desc = {
2670         .config = &gcc_msm8974_regmap_config,
2671         .clks = gcc_msm8974_clocks,
2672         .num_clks = ARRAY_SIZE(gcc_msm8974_clocks),
2673         .resets = gcc_msm8974_resets,
2674         .num_resets = ARRAY_SIZE(gcc_msm8974_resets),
2675 };
2676
2677 static const struct of_device_id gcc_msm8974_match_table[] = {
2678         { .compatible = "qcom,gcc-msm8974" },
2679         { .compatible = "qcom,gcc-msm8974pro" , .data = (void *)1UL },
2680         { .compatible = "qcom,gcc-msm8974pro-ac", .data = (void *)1UL },
2681         { }
2682 };
2683 MODULE_DEVICE_TABLE(of, gcc_msm8974_match_table);
2684
2685 static void msm8974_pro_clock_override(void)
2686 {
2687         sdcc1_apps_clk_src_init.parent_names = gcc_xo_gpll0_gpll4;
2688         sdcc1_apps_clk_src_init.num_parents = 3;
2689         sdcc1_apps_clk_src.freq_tbl = ftbl_gcc_sdcc1_apps_clk_pro;
2690         sdcc1_apps_clk_src.parent_map = gcc_xo_gpll0_gpll4_map;
2691
2692         gcc_msm8974_clocks[GPLL4] = &gpll4.clkr;
2693         gcc_msm8974_clocks[GPLL4_VOTE] = &gpll4_vote;
2694         gcc_msm8974_clocks[GCC_SDCC1_CDCCAL_SLEEP_CLK] =
2695                 &gcc_sdcc1_cdccal_sleep_clk.clkr;
2696         gcc_msm8974_clocks[GCC_SDCC1_CDCCAL_FF_CLK] =
2697                 &gcc_sdcc1_cdccal_ff_clk.clkr;
2698 }
2699
2700 static int gcc_msm8974_probe(struct platform_device *pdev)
2701 {
2702         struct clk *clk;
2703         struct device *dev = &pdev->dev;
2704         bool pro;
2705         const struct of_device_id *id;
2706
2707         id = of_match_device(gcc_msm8974_match_table, dev);
2708         if (!id)
2709                 return -ENODEV;
2710         pro = !!(id->data);
2711
2712         if (pro)
2713                 msm8974_pro_clock_override();
2714
2715         /* Temporary until RPM clocks supported */
2716         clk = clk_register_fixed_rate(dev, "xo", NULL, CLK_IS_ROOT, 19200000);
2717         if (IS_ERR(clk))
2718                 return PTR_ERR(clk);
2719
2720         /* Should move to DT node? */
2721         clk = clk_register_fixed_rate(dev, "sleep_clk_src", NULL,
2722                                       CLK_IS_ROOT, 32768);
2723         if (IS_ERR(clk))
2724                 return PTR_ERR(clk);
2725
2726         return qcom_cc_probe(pdev, &gcc_msm8974_desc);
2727 }
2728
2729 static int gcc_msm8974_remove(struct platform_device *pdev)
2730 {
2731         qcom_cc_remove(pdev);
2732         return 0;
2733 }
2734
2735 static struct platform_driver gcc_msm8974_driver = {
2736         .probe          = gcc_msm8974_probe,
2737         .remove         = gcc_msm8974_remove,
2738         .driver         = {
2739                 .name   = "gcc-msm8974",
2740                 .owner  = THIS_MODULE,
2741                 .of_match_table = gcc_msm8974_match_table,
2742         },
2743 };
2744
2745 static int __init gcc_msm8974_init(void)
2746 {
2747         return platform_driver_register(&gcc_msm8974_driver);
2748 }
2749 core_initcall(gcc_msm8974_init);
2750
2751 static void __exit gcc_msm8974_exit(void)
2752 {
2753         platform_driver_unregister(&gcc_msm8974_driver);
2754 }
2755 module_exit(gcc_msm8974_exit);
2756
2757 MODULE_DESCRIPTION("QCOM GCC MSM8974 Driver");
2758 MODULE_LICENSE("GPL v2");
2759 MODULE_ALIAS("platform:gcc-msm8974");