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