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