]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/clk/qcom/gcc-msm8996.c
Merge tag 'docs-4.10-2' of git://git.lwn.net/linux
[karo-tx-linux.git] / drivers / clk / qcom / gcc-msm8996.c
1 /*
2  * Copyright (c) 2015, The Linux Foundation. All rights reserved.
3  *
4  * This software is licensed under the terms of the GNU General Public
5  * License version 2, as published by the Free Software Foundation, and
6  * may be copied, distributed, and modified under those terms.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11  * GNU General Public License for more details.
12  */
13
14 #include <linux/kernel.h>
15 #include <linux/bitops.h>
16 #include <linux/err.h>
17 #include <linux/platform_device.h>
18 #include <linux/module.h>
19 #include <linux/of.h>
20 #include <linux/of_device.h>
21 #include <linux/clk-provider.h>
22 #include <linux/regmap.h>
23 #include <linux/reset-controller.h>
24
25 #include <dt-bindings/clock/qcom,gcc-msm8996.h>
26
27 #include "common.h"
28 #include "clk-regmap.h"
29 #include "clk-alpha-pll.h"
30 #include "clk-rcg.h"
31 #include "clk-branch.h"
32 #include "reset.h"
33 #include "gdsc.h"
34
35 #define F(f, s, h, m, n) { (f), (s), (2 * (h) - 1), (m), (n) }
36
37 enum {
38         P_XO,
39         P_GPLL0,
40         P_GPLL2,
41         P_GPLL3,
42         P_GPLL1,
43         P_GPLL2_EARLY,
44         P_GPLL0_EARLY_DIV,
45         P_SLEEP_CLK,
46         P_GPLL4,
47         P_AUD_REF_CLK,
48         P_GPLL1_EARLY_DIV
49 };
50
51 static const struct parent_map gcc_sleep_clk_map[] = {
52         { P_SLEEP_CLK, 5 }
53 };
54
55 static const char * const gcc_sleep_clk[] = {
56         "sleep_clk"
57 };
58
59 static const struct parent_map gcc_xo_gpll0_map[] = {
60         { P_XO, 0 },
61         { P_GPLL0, 1 }
62 };
63
64 static const char * const gcc_xo_gpll0[] = {
65         "xo",
66         "gpll0"
67 };
68
69 static const struct parent_map gcc_xo_sleep_clk_map[] = {
70         { P_XO, 0 },
71         { P_SLEEP_CLK, 5 }
72 };
73
74 static const char * const gcc_xo_sleep_clk[] = {
75         "xo",
76         "sleep_clk"
77 };
78
79 static const struct parent_map gcc_xo_gpll0_gpll0_early_div_map[] = {
80         { P_XO, 0 },
81         { P_GPLL0, 1 },
82         { P_GPLL0_EARLY_DIV, 6 }
83 };
84
85 static const char * const gcc_xo_gpll0_gpll0_early_div[] = {
86         "xo",
87         "gpll0",
88         "gpll0_early_div"
89 };
90
91 static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {
92         { P_XO, 0 },
93         { P_GPLL0, 1 },
94         { P_GPLL4, 5 }
95 };
96
97 static const char * const gcc_xo_gpll0_gpll4[] = {
98         "xo",
99         "gpll0",
100         "gpll4"
101 };
102
103 static const struct parent_map gcc_xo_gpll0_aud_ref_clk_map[] = {
104         { P_XO, 0 },
105         { P_GPLL0, 1 },
106         { P_AUD_REF_CLK, 2 }
107 };
108
109 static const char * const gcc_xo_gpll0_aud_ref_clk[] = {
110         "xo",
111         "gpll0",
112         "aud_ref_clk"
113 };
114
115 static const struct parent_map gcc_xo_gpll0_sleep_clk_gpll0_early_div_map[] = {
116         { P_XO, 0 },
117         { P_GPLL0, 1 },
118         { P_SLEEP_CLK, 5 },
119         { P_GPLL0_EARLY_DIV, 6 }
120 };
121
122 static const char * const gcc_xo_gpll0_sleep_clk_gpll0_early_div[] = {
123         "xo",
124         "gpll0",
125         "sleep_clk",
126         "gpll0_early_div"
127 };
128
129 static const struct parent_map gcc_xo_gpll0_gpll4_gpll0_early_div_map[] = {
130         { P_XO, 0 },
131         { P_GPLL0, 1 },
132         { P_GPLL4, 5 },
133         { P_GPLL0_EARLY_DIV, 6 }
134 };
135
136 static const char * const gcc_xo_gpll0_gpll4_gpll0_early_div[] = {
137         "xo",
138         "gpll0",
139         "gpll4",
140         "gpll0_early_div"
141 };
142
143 static const struct parent_map gcc_xo_gpll0_gpll2_gpll3_gpll0_early_div_map[] = {
144         { P_XO, 0 },
145         { P_GPLL0, 1 },
146         { P_GPLL2, 2 },
147         { P_GPLL3, 3 },
148         { P_GPLL0_EARLY_DIV, 6 }
149 };
150
151 static const char * const gcc_xo_gpll0_gpll2_gpll3_gpll0_early_div[] = {
152         "xo",
153         "gpll0",
154         "gpll2",
155         "gpll3",
156         "gpll0_early_div"
157 };
158
159 static const struct parent_map gcc_xo_gpll0_gpll1_early_div_gpll1_gpll4_gpll0_early_div_map[] = {
160         { P_XO, 0 },
161         { P_GPLL0, 1 },
162         { P_GPLL1_EARLY_DIV, 3 },
163         { P_GPLL1, 4 },
164         { P_GPLL4, 5 },
165         { P_GPLL0_EARLY_DIV, 6 }
166 };
167
168 static const char * const gcc_xo_gpll0_gpll1_early_div_gpll1_gpll4_gpll0_early_div[] = {
169         "xo",
170         "gpll0",
171         "gpll1_early_div",
172         "gpll1",
173         "gpll4",
174         "gpll0_early_div"
175 };
176
177 static const struct parent_map gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll2_early_gpll0_early_div_map[] = {
178         { P_XO, 0 },
179         { P_GPLL0, 1 },
180         { P_GPLL2, 2 },
181         { P_GPLL3, 3 },
182         { P_GPLL1, 4 },
183         { P_GPLL2_EARLY, 5 },
184         { P_GPLL0_EARLY_DIV, 6 }
185 };
186
187 static const char * const gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll2_early_gpll0_early_div[] = {
188         "xo",
189         "gpll0",
190         "gpll2",
191         "gpll3",
192         "gpll1",
193         "gpll2_early",
194         "gpll0_early_div"
195 };
196
197 static const struct parent_map gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll4_gpll0_early_div_map[] = {
198         { P_XO, 0 },
199         { P_GPLL0, 1 },
200         { P_GPLL2, 2 },
201         { P_GPLL3, 3 },
202         { P_GPLL1, 4 },
203         { P_GPLL4, 5 },
204         { P_GPLL0_EARLY_DIV, 6 }
205 };
206
207 static const char * const gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll4_gpll0_early_div[] = {
208         "xo",
209         "gpll0",
210         "gpll2",
211         "gpll3",
212         "gpll1",
213         "gpll4",
214         "gpll0_early_div"
215 };
216
217 static struct clk_fixed_factor xo = {
218         .mult = 1,
219         .div = 1,
220         .hw.init = &(struct clk_init_data){
221                 .name = "xo",
222                 .parent_names = (const char *[]){ "xo_board" },
223                 .num_parents = 1,
224                 .ops = &clk_fixed_factor_ops,
225         },
226 };
227
228 static struct clk_alpha_pll gpll0_early = {
229         .offset = 0x00000,
230         .clkr = {
231                 .enable_reg = 0x52000,
232                 .enable_mask = BIT(0),
233                 .hw.init = &(struct clk_init_data){
234                         .name = "gpll0_early",
235                         .parent_names = (const char *[]){ "xo" },
236                         .num_parents = 1,
237                         .ops = &clk_alpha_pll_ops,
238                 },
239         },
240 };
241
242 static struct clk_fixed_factor gpll0_early_div = {
243         .mult = 1,
244         .div = 2,
245         .hw.init = &(struct clk_init_data){
246                 .name = "gpll0_early_div",
247                 .parent_names = (const char *[]){ "gpll0_early" },
248                 .num_parents = 1,
249                 .ops = &clk_fixed_factor_ops,
250         },
251 };
252
253 static struct clk_alpha_pll_postdiv gpll0 = {
254         .offset = 0x00000,
255         .clkr.hw.init = &(struct clk_init_data){
256                 .name = "gpll0",
257                 .parent_names = (const char *[]){ "gpll0_early" },
258                 .num_parents = 1,
259                 .ops = &clk_alpha_pll_postdiv_ops,
260         },
261 };
262
263 static struct clk_alpha_pll gpll4_early = {
264         .offset = 0x77000,
265         .clkr = {
266                 .enable_reg = 0x52000,
267                 .enable_mask = BIT(4),
268                 .hw.init = &(struct clk_init_data){
269                         .name = "gpll4_early",
270                         .parent_names = (const char *[]){ "xo" },
271                         .num_parents = 1,
272                         .ops = &clk_alpha_pll_ops,
273                 },
274         },
275 };
276
277 static struct clk_alpha_pll_postdiv gpll4 = {
278         .offset = 0x77000,
279         .clkr.hw.init = &(struct clk_init_data){
280                 .name = "gpll4",
281                 .parent_names = (const char *[]){ "gpll4_early" },
282                 .num_parents = 1,
283                 .ops = &clk_alpha_pll_postdiv_ops,
284         },
285 };
286
287 static const struct freq_tbl ftbl_system_noc_clk_src[] = {
288         F(19200000, P_XO, 1, 0, 0),
289         F(50000000, P_GPLL0_EARLY_DIV, 6, 0, 0),
290         F(100000000, P_GPLL0, 6, 0, 0),
291         F(150000000, P_GPLL0, 4, 0, 0),
292         F(200000000, P_GPLL0, 3, 0, 0),
293         F(240000000, P_GPLL0, 2.5, 0, 0),
294         { }
295 };
296
297 static struct clk_rcg2 system_noc_clk_src = {
298         .cmd_rcgr = 0x0401c,
299         .hid_width = 5,
300         .parent_map = gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll2_early_gpll0_early_div_map,
301         .freq_tbl = ftbl_system_noc_clk_src,
302         .clkr.hw.init = &(struct clk_init_data){
303                 .name = "system_noc_clk_src",
304                 .parent_names = gcc_xo_gpll0_gpll2_gpll3_gpll1_gpll2_early_gpll0_early_div,
305                 .num_parents = 7,
306                 .ops = &clk_rcg2_ops,
307         },
308 };
309
310 static const struct freq_tbl ftbl_config_noc_clk_src[] = {
311         F(19200000, P_XO, 1, 0, 0),
312         F(37500000, P_GPLL0, 16, 0, 0),
313         F(75000000, P_GPLL0, 8, 0, 0),
314         { }
315 };
316
317 static struct clk_rcg2 config_noc_clk_src = {
318         .cmd_rcgr = 0x0500c,
319         .hid_width = 5,
320         .parent_map = gcc_xo_gpll0_map,
321         .freq_tbl = ftbl_config_noc_clk_src,
322         .clkr.hw.init = &(struct clk_init_data){
323                 .name = "config_noc_clk_src",
324                 .parent_names = gcc_xo_gpll0,
325                 .num_parents = 2,
326                 .ops = &clk_rcg2_ops,
327         },
328 };
329
330 static const struct freq_tbl ftbl_periph_noc_clk_src[] = {
331         F(19200000, P_XO, 1, 0, 0),
332         F(37500000, P_GPLL0, 16, 0, 0),
333         F(50000000, P_GPLL0, 12, 0, 0),
334         F(75000000, P_GPLL0, 8, 0, 0),
335         F(100000000, P_GPLL0, 6, 0, 0),
336         { }
337 };
338
339 static struct clk_rcg2 periph_noc_clk_src = {
340         .cmd_rcgr = 0x06014,
341         .hid_width = 5,
342         .parent_map = gcc_xo_gpll0_map,
343         .freq_tbl = ftbl_periph_noc_clk_src,
344         .clkr.hw.init = &(struct clk_init_data){
345                 .name = "periph_noc_clk_src",
346                 .parent_names = gcc_xo_gpll0,
347                 .num_parents = 2,
348                 .ops = &clk_rcg2_ops,
349         },
350 };
351
352 static const struct freq_tbl ftbl_usb30_master_clk_src[] = {
353         F(19200000, P_XO, 1, 0, 0),
354         F(120000000, P_GPLL0, 5, 0, 0),
355         F(150000000, P_GPLL0, 4, 0, 0),
356         { }
357 };
358
359 static struct clk_rcg2 usb30_master_clk_src = {
360         .cmd_rcgr = 0x0f014,
361         .mnd_width = 8,
362         .hid_width = 5,
363         .parent_map = gcc_xo_gpll0_gpll0_early_div_map,
364         .freq_tbl = ftbl_usb30_master_clk_src,
365         .clkr.hw.init = &(struct clk_init_data){
366                 .name = "usb30_master_clk_src",
367                 .parent_names = gcc_xo_gpll0_gpll0_early_div,
368                 .num_parents = 3,
369                 .ops = &clk_rcg2_ops,
370         },
371 };
372
373 static const struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = {
374         F(19200000, P_XO, 1, 0, 0),
375         { }
376 };
377
378 static struct clk_rcg2 usb30_mock_utmi_clk_src = {
379         .cmd_rcgr = 0x0f028,
380         .hid_width = 5,
381         .parent_map = gcc_xo_gpll0_gpll0_early_div_map,
382         .freq_tbl = ftbl_usb30_mock_utmi_clk_src,
383         .clkr.hw.init = &(struct clk_init_data){
384                 .name = "usb30_mock_utmi_clk_src",
385                 .parent_names = gcc_xo_gpll0_gpll0_early_div,
386                 .num_parents = 3,
387                 .ops = &clk_rcg2_ops,
388         },
389 };
390
391 static const struct freq_tbl ftbl_usb3_phy_aux_clk_src[] = {
392         F(1200000, P_XO, 16, 0, 0),
393         { }
394 };
395
396 static struct clk_rcg2 usb3_phy_aux_clk_src = {
397         .cmd_rcgr = 0x5000c,
398         .hid_width = 5,
399         .parent_map = gcc_xo_sleep_clk_map,
400         .freq_tbl = ftbl_usb3_phy_aux_clk_src,
401         .clkr.hw.init = &(struct clk_init_data){
402                 .name = "usb3_phy_aux_clk_src",
403                 .parent_names = gcc_xo_sleep_clk,
404                 .num_parents = 2,
405                 .ops = &clk_rcg2_ops,
406         },
407 };
408
409 static const struct freq_tbl ftbl_usb20_master_clk_src[] = {
410         F(120000000, P_GPLL0, 5, 0, 0),
411         { }
412 };
413
414 static struct clk_rcg2 usb20_master_clk_src = {
415         .cmd_rcgr = 0x12010,
416         .mnd_width = 8,
417         .hid_width = 5,
418         .parent_map = gcc_xo_gpll0_gpll0_early_div_map,
419         .freq_tbl = ftbl_usb20_master_clk_src,
420         .clkr.hw.init = &(struct clk_init_data){
421                 .name = "usb20_master_clk_src",
422                 .parent_names = gcc_xo_gpll0_gpll0_early_div,
423                 .num_parents = 3,
424                 .ops = &clk_rcg2_ops,
425         },
426 };
427
428 static struct clk_rcg2 usb20_mock_utmi_clk_src = {
429         .cmd_rcgr = 0x12024,
430         .hid_width = 5,
431         .parent_map = gcc_xo_gpll0_gpll0_early_div_map,
432         .freq_tbl = ftbl_usb30_mock_utmi_clk_src,
433         .clkr.hw.init = &(struct clk_init_data){
434                 .name = "usb20_mock_utmi_clk_src",
435                 .parent_names = gcc_xo_gpll0_gpll0_early_div,
436                 .num_parents = 3,
437                 .ops = &clk_rcg2_ops,
438         },
439 };
440
441 static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
442         F(144000, P_XO, 16, 3, 25),
443         F(400000, P_XO, 12, 1, 4),
444         F(20000000, P_GPLL0, 15, 1, 2),
445         F(25000000, P_GPLL0, 12, 1, 2),
446         F(50000000, P_GPLL0, 12, 0, 0),
447         F(96000000, P_GPLL4, 4, 0, 0),
448         F(192000000, P_GPLL4, 2, 0, 0),
449         F(384000000, P_GPLL4, 1, 0, 0),
450         { }
451 };
452
453 static struct clk_rcg2 sdcc1_apps_clk_src = {
454         .cmd_rcgr = 0x13010,
455         .mnd_width = 8,
456         .hid_width = 5,
457         .parent_map = gcc_xo_gpll0_gpll4_gpll0_early_div_map,
458         .freq_tbl = ftbl_sdcc1_apps_clk_src,
459         .clkr.hw.init = &(struct clk_init_data){
460                 .name = "sdcc1_apps_clk_src",
461                 .parent_names = gcc_xo_gpll0_gpll4_gpll0_early_div,
462                 .num_parents = 4,
463                 .ops = &clk_rcg2_floor_ops,
464         },
465 };
466
467 static struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = {
468         F(19200000, P_XO, 1, 0, 0),
469         F(150000000, P_GPLL0, 4, 0, 0),
470         F(300000000, P_GPLL0, 2, 0, 0),
471         { }
472 };
473
474 static struct clk_rcg2 sdcc1_ice_core_clk_src = {
475         .cmd_rcgr = 0x13024,
476         .hid_width = 5,
477         .parent_map = gcc_xo_gpll0_gpll4_gpll0_early_div_map,
478         .freq_tbl = ftbl_sdcc1_ice_core_clk_src,
479         .clkr.hw.init = &(struct clk_init_data){
480                 .name = "sdcc1_ice_core_clk_src",
481                 .parent_names = gcc_xo_gpll0_gpll4_gpll0_early_div,
482                 .num_parents = 4,
483                 .ops = &clk_rcg2_ops,
484         },
485 };
486
487 static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = {
488         F(144000, P_XO, 16, 3, 25),
489         F(400000, P_XO, 12, 1, 4),
490         F(20000000, P_GPLL0, 15, 1, 2),
491         F(25000000, P_GPLL0, 12, 1, 2),
492         F(50000000, P_GPLL0, 12, 0, 0),
493         F(100000000, P_GPLL0, 6, 0, 0),
494         F(200000000, P_GPLL0, 3, 0, 0),
495         { }
496 };
497
498 static struct clk_rcg2 sdcc2_apps_clk_src = {
499         .cmd_rcgr = 0x14010,
500         .mnd_width = 8,
501         .hid_width = 5,
502         .parent_map = gcc_xo_gpll0_gpll4_map,
503         .freq_tbl = ftbl_sdcc2_apps_clk_src,
504         .clkr.hw.init = &(struct clk_init_data){
505                 .name = "sdcc2_apps_clk_src",
506                 .parent_names = gcc_xo_gpll0_gpll4,
507                 .num_parents = 3,
508                 .ops = &clk_rcg2_floor_ops,
509         },
510 };
511
512 static struct clk_rcg2 sdcc3_apps_clk_src = {
513         .cmd_rcgr = 0x15010,
514         .mnd_width = 8,
515         .hid_width = 5,
516         .parent_map = gcc_xo_gpll0_gpll4_map,
517         .freq_tbl = ftbl_sdcc2_apps_clk_src,
518         .clkr.hw.init = &(struct clk_init_data){
519                 .name = "sdcc3_apps_clk_src",
520                 .parent_names = gcc_xo_gpll0_gpll4,
521                 .num_parents = 3,
522                 .ops = &clk_rcg2_floor_ops,
523         },
524 };
525
526 static const struct freq_tbl ftbl_sdcc4_apps_clk_src[] = {
527         F(144000, P_XO, 16, 3, 25),
528         F(400000, P_XO, 12, 1, 4),
529         F(20000000, P_GPLL0, 15, 1, 2),
530         F(25000000, P_GPLL0, 12, 1, 2),
531         F(50000000, P_GPLL0, 12, 0, 0),
532         F(100000000, P_GPLL0, 6, 0, 0),
533         { }
534 };
535
536 static struct clk_rcg2 sdcc4_apps_clk_src = {
537         .cmd_rcgr = 0x16010,
538         .mnd_width = 8,
539         .hid_width = 5,
540         .parent_map = gcc_xo_gpll0_map,
541         .freq_tbl = ftbl_sdcc4_apps_clk_src,
542         .clkr.hw.init = &(struct clk_init_data){
543                 .name = "sdcc4_apps_clk_src",
544                 .parent_names = gcc_xo_gpll0,
545                 .num_parents = 2,
546                 .ops = &clk_rcg2_floor_ops,
547         },
548 };
549
550 static const struct freq_tbl ftbl_blsp1_qup1_spi_apps_clk_src[] = {
551         F(960000, P_XO, 10, 1, 2),
552         F(4800000, P_XO, 4, 0, 0),
553         F(9600000, P_XO, 2, 0, 0),
554         F(15000000, P_GPLL0, 10, 1, 4),
555         F(19200000, P_XO, 1, 0, 0),
556         F(25000000, P_GPLL0, 12, 1, 2),
557         F(50000000, P_GPLL0, 12, 0, 0),
558         { }
559 };
560
561 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
562         .cmd_rcgr = 0x1900c,
563         .mnd_width = 8,
564         .hid_width = 5,
565         .parent_map = gcc_xo_gpll0_map,
566         .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
567         .clkr.hw.init = &(struct clk_init_data){
568                 .name = "blsp1_qup1_spi_apps_clk_src",
569                 .parent_names = gcc_xo_gpll0,
570                 .num_parents = 2,
571                 .ops = &clk_rcg2_ops,
572         },
573 };
574
575 static const struct freq_tbl ftbl_blsp1_qup1_i2c_apps_clk_src[] = {
576         F(19200000, P_XO, 1, 0, 0),
577         F(50000000, P_GPLL0, 12, 0, 0),
578         { }
579 };
580
581 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
582         .cmd_rcgr = 0x19020,
583         .hid_width = 5,
584         .parent_map = gcc_xo_gpll0_map,
585         .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
586         .clkr.hw.init = &(struct clk_init_data){
587                 .name = "blsp1_qup1_i2c_apps_clk_src",
588                 .parent_names = gcc_xo_gpll0,
589                 .num_parents = 2,
590                 .ops = &clk_rcg2_ops,
591         },
592 };
593
594 static const struct freq_tbl ftbl_blsp1_uart1_apps_clk_src[] = {
595         F(3686400, P_GPLL0, 1, 96, 15625),
596         F(7372800, P_GPLL0, 1, 192, 15625),
597         F(14745600, P_GPLL0, 1, 384, 15625),
598         F(16000000, P_GPLL0, 5, 2, 15),
599         F(19200000, P_XO, 1, 0, 0),
600         F(24000000, P_GPLL0, 5, 1, 5),
601         F(32000000, P_GPLL0, 1, 4, 75),
602         F(40000000, P_GPLL0, 15, 0, 0),
603         F(46400000, P_GPLL0, 1, 29, 375),
604         F(48000000, P_GPLL0, 12.5, 0, 0),
605         F(51200000, P_GPLL0, 1, 32, 375),
606         F(56000000, P_GPLL0, 1, 7, 75),
607         F(58982400, P_GPLL0, 1, 1536, 15625),
608         F(60000000, P_GPLL0, 10, 0, 0),
609         F(63157895, P_GPLL0, 9.5, 0, 0),
610         { }
611 };
612
613 static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
614         .cmd_rcgr = 0x1a00c,
615         .mnd_width = 16,
616         .hid_width = 5,
617         .parent_map = gcc_xo_gpll0_map,
618         .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
619         .clkr.hw.init = &(struct clk_init_data){
620                 .name = "blsp1_uart1_apps_clk_src",
621                 .parent_names = gcc_xo_gpll0,
622                 .num_parents = 2,
623                 .ops = &clk_rcg2_ops,
624         },
625 };
626
627 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
628         .cmd_rcgr = 0x1b00c,
629         .mnd_width = 8,
630         .hid_width = 5,
631         .parent_map = gcc_xo_gpll0_map,
632         .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
633         .clkr.hw.init = &(struct clk_init_data){
634                 .name = "blsp1_qup2_spi_apps_clk_src",
635                 .parent_names = gcc_xo_gpll0,
636                 .num_parents = 2,
637                 .ops = &clk_rcg2_ops,
638         },
639 };
640
641 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
642         .cmd_rcgr = 0x1b020,
643         .hid_width = 5,
644         .parent_map = gcc_xo_gpll0_map,
645         .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
646         .clkr.hw.init = &(struct clk_init_data){
647                 .name = "blsp1_qup2_i2c_apps_clk_src",
648                 .parent_names = gcc_xo_gpll0,
649                 .num_parents = 2,
650                 .ops = &clk_rcg2_ops,
651         },
652 };
653
654 static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
655         .cmd_rcgr = 0x1c00c,
656         .mnd_width = 16,
657         .hid_width = 5,
658         .parent_map = gcc_xo_gpll0_map,
659         .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
660         .clkr.hw.init = &(struct clk_init_data){
661                 .name = "blsp1_uart2_apps_clk_src",
662                 .parent_names = gcc_xo_gpll0,
663                 .num_parents = 2,
664                 .ops = &clk_rcg2_ops,
665         },
666 };
667
668 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
669         .cmd_rcgr = 0x1d00c,
670         .mnd_width = 8,
671         .hid_width = 5,
672         .parent_map = gcc_xo_gpll0_map,
673         .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
674         .clkr.hw.init = &(struct clk_init_data){
675                 .name = "blsp1_qup3_spi_apps_clk_src",
676                 .parent_names = gcc_xo_gpll0,
677                 .num_parents = 2,
678                 .ops = &clk_rcg2_ops,
679         },
680 };
681
682 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
683         .cmd_rcgr = 0x1d020,
684         .hid_width = 5,
685         .parent_map = gcc_xo_gpll0_map,
686         .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
687         .clkr.hw.init = &(struct clk_init_data){
688                 .name = "blsp1_qup3_i2c_apps_clk_src",
689                 .parent_names = gcc_xo_gpll0,
690                 .num_parents = 2,
691                 .ops = &clk_rcg2_ops,
692         },
693 };
694
695 static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
696         .cmd_rcgr = 0x1e00c,
697         .mnd_width = 16,
698         .hid_width = 5,
699         .parent_map = gcc_xo_gpll0_map,
700         .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
701         .clkr.hw.init = &(struct clk_init_data){
702                 .name = "blsp1_uart3_apps_clk_src",
703                 .parent_names = gcc_xo_gpll0,
704                 .num_parents = 2,
705                 .ops = &clk_rcg2_ops,
706         },
707 };
708
709 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
710         .cmd_rcgr = 0x1f00c,
711         .mnd_width = 8,
712         .hid_width = 5,
713         .parent_map = gcc_xo_gpll0_map,
714         .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
715         .clkr.hw.init = &(struct clk_init_data){
716                 .name = "blsp1_qup4_spi_apps_clk_src",
717                 .parent_names = gcc_xo_gpll0,
718                 .num_parents = 2,
719                 .ops = &clk_rcg2_ops,
720         },
721 };
722
723 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
724         .cmd_rcgr = 0x1f020,
725         .hid_width = 5,
726         .parent_map = gcc_xo_gpll0_map,
727         .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
728         .clkr.hw.init = &(struct clk_init_data){
729                 .name = "blsp1_qup4_i2c_apps_clk_src",
730                 .parent_names = gcc_xo_gpll0,
731                 .num_parents = 2,
732                 .ops = &clk_rcg2_ops,
733         },
734 };
735
736 static struct clk_rcg2 blsp1_uart4_apps_clk_src = {
737         .cmd_rcgr = 0x2000c,
738         .mnd_width = 16,
739         .hid_width = 5,
740         .parent_map = gcc_xo_gpll0_map,
741         .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
742         .clkr.hw.init = &(struct clk_init_data){
743                 .name = "blsp1_uart4_apps_clk_src",
744                 .parent_names = gcc_xo_gpll0,
745                 .num_parents = 2,
746                 .ops = &clk_rcg2_ops,
747         },
748 };
749
750 static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
751         .cmd_rcgr = 0x2100c,
752         .mnd_width = 8,
753         .hid_width = 5,
754         .parent_map = gcc_xo_gpll0_map,
755         .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
756         .clkr.hw.init = &(struct clk_init_data){
757                 .name = "blsp1_qup5_spi_apps_clk_src",
758                 .parent_names = gcc_xo_gpll0,
759                 .num_parents = 2,
760                 .ops = &clk_rcg2_ops,
761         },
762 };
763
764 static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
765         .cmd_rcgr = 0x21020,
766         .hid_width = 5,
767         .parent_map = gcc_xo_gpll0_map,
768         .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
769         .clkr.hw.init = &(struct clk_init_data){
770                 .name = "blsp1_qup5_i2c_apps_clk_src",
771                 .parent_names = gcc_xo_gpll0,
772                 .num_parents = 2,
773                 .ops = &clk_rcg2_ops,
774         },
775 };
776
777 static struct clk_rcg2 blsp1_uart5_apps_clk_src = {
778         .cmd_rcgr = 0x2200c,
779         .mnd_width = 16,
780         .hid_width = 5,
781         .parent_map = gcc_xo_gpll0_map,
782         .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
783         .clkr.hw.init = &(struct clk_init_data){
784                 .name = "blsp1_uart5_apps_clk_src",
785                 .parent_names = gcc_xo_gpll0,
786                 .num_parents = 2,
787                 .ops = &clk_rcg2_ops,
788         },
789 };
790
791 static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
792         .cmd_rcgr = 0x2300c,
793         .mnd_width = 8,
794         .hid_width = 5,
795         .parent_map = gcc_xo_gpll0_map,
796         .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
797         .clkr.hw.init = &(struct clk_init_data){
798                 .name = "blsp1_qup6_spi_apps_clk_src",
799                 .parent_names = gcc_xo_gpll0,
800                 .num_parents = 2,
801                 .ops = &clk_rcg2_ops,
802         },
803 };
804
805 static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
806         .cmd_rcgr = 0x23020,
807         .hid_width = 5,
808         .parent_map = gcc_xo_gpll0_map,
809         .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
810         .clkr.hw.init = &(struct clk_init_data){
811                 .name = "blsp1_qup6_i2c_apps_clk_src",
812                 .parent_names = gcc_xo_gpll0,
813                 .num_parents = 2,
814                 .ops = &clk_rcg2_ops,
815         },
816 };
817
818 static struct clk_rcg2 blsp1_uart6_apps_clk_src = {
819         .cmd_rcgr = 0x2400c,
820         .mnd_width = 16,
821         .hid_width = 5,
822         .parent_map = gcc_xo_gpll0_map,
823         .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
824         .clkr.hw.init = &(struct clk_init_data){
825                 .name = "blsp1_uart6_apps_clk_src",
826                 .parent_names = gcc_xo_gpll0,
827                 .num_parents = 2,
828                 .ops = &clk_rcg2_ops,
829         },
830 };
831
832 static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
833         .cmd_rcgr = 0x2600c,
834         .mnd_width = 8,
835         .hid_width = 5,
836         .parent_map = gcc_xo_gpll0_map,
837         .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
838         .clkr.hw.init = &(struct clk_init_data){
839                 .name = "blsp2_qup1_spi_apps_clk_src",
840                 .parent_names = gcc_xo_gpll0,
841                 .num_parents = 2,
842                 .ops = &clk_rcg2_ops,
843         },
844 };
845
846 static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
847         .cmd_rcgr = 0x26020,
848         .hid_width = 5,
849         .parent_map = gcc_xo_gpll0_map,
850         .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
851         .clkr.hw.init = &(struct clk_init_data){
852                 .name = "blsp2_qup1_i2c_apps_clk_src",
853                 .parent_names = gcc_xo_gpll0,
854                 .num_parents = 2,
855                 .ops = &clk_rcg2_ops,
856         },
857 };
858
859 static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
860         .cmd_rcgr = 0x2700c,
861         .mnd_width = 16,
862         .hid_width = 5,
863         .parent_map = gcc_xo_gpll0_map,
864         .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
865         .clkr.hw.init = &(struct clk_init_data){
866                 .name = "blsp2_uart1_apps_clk_src",
867                 .parent_names = gcc_xo_gpll0,
868                 .num_parents = 2,
869                 .ops = &clk_rcg2_ops,
870         },
871 };
872
873 static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
874         .cmd_rcgr = 0x2800c,
875         .mnd_width = 8,
876         .hid_width = 5,
877         .parent_map = gcc_xo_gpll0_map,
878         .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
879         .clkr.hw.init = &(struct clk_init_data){
880                 .name = "blsp2_qup2_spi_apps_clk_src",
881                 .parent_names = gcc_xo_gpll0,
882                 .num_parents = 2,
883                 .ops = &clk_rcg2_ops,
884         },
885 };
886
887 static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
888         .cmd_rcgr = 0x28020,
889         .hid_width = 5,
890         .parent_map = gcc_xo_gpll0_map,
891         .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
892         .clkr.hw.init = &(struct clk_init_data){
893                 .name = "blsp2_qup2_i2c_apps_clk_src",
894                 .parent_names = gcc_xo_gpll0,
895                 .num_parents = 2,
896                 .ops = &clk_rcg2_ops,
897         },
898 };
899
900 static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
901         .cmd_rcgr = 0x2900c,
902         .mnd_width = 16,
903         .hid_width = 5,
904         .parent_map = gcc_xo_gpll0_map,
905         .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
906         .clkr.hw.init = &(struct clk_init_data){
907                 .name = "blsp2_uart2_apps_clk_src",
908                 .parent_names = gcc_xo_gpll0,
909                 .num_parents = 2,
910                 .ops = &clk_rcg2_ops,
911         },
912 };
913
914 static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
915         .cmd_rcgr = 0x2a00c,
916         .mnd_width = 8,
917         .hid_width = 5,
918         .parent_map = gcc_xo_gpll0_map,
919         .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
920         .clkr.hw.init = &(struct clk_init_data){
921                 .name = "blsp2_qup3_spi_apps_clk_src",
922                 .parent_names = gcc_xo_gpll0,
923                 .num_parents = 2,
924                 .ops = &clk_rcg2_ops,
925         },
926 };
927
928 static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
929         .cmd_rcgr = 0x2a020,
930         .hid_width = 5,
931         .parent_map = gcc_xo_gpll0_map,
932         .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
933         .clkr.hw.init = &(struct clk_init_data){
934                 .name = "blsp2_qup3_i2c_apps_clk_src",
935                 .parent_names = gcc_xo_gpll0,
936                 .num_parents = 2,
937                 .ops = &clk_rcg2_ops,
938         },
939 };
940
941 static struct clk_rcg2 blsp2_uart3_apps_clk_src = {
942         .cmd_rcgr = 0x2b00c,
943         .mnd_width = 16,
944         .hid_width = 5,
945         .parent_map = gcc_xo_gpll0_map,
946         .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
947         .clkr.hw.init = &(struct clk_init_data){
948                 .name = "blsp2_uart3_apps_clk_src",
949                 .parent_names = gcc_xo_gpll0,
950                 .num_parents = 2,
951                 .ops = &clk_rcg2_ops,
952         },
953 };
954
955 static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
956         .cmd_rcgr = 0x2c00c,
957         .mnd_width = 8,
958         .hid_width = 5,
959         .parent_map = gcc_xo_gpll0_map,
960         .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
961         .clkr.hw.init = &(struct clk_init_data){
962                 .name = "blsp2_qup4_spi_apps_clk_src",
963                 .parent_names = gcc_xo_gpll0,
964                 .num_parents = 2,
965                 .ops = &clk_rcg2_ops,
966         },
967 };
968
969 static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
970         .cmd_rcgr = 0x2c020,
971         .hid_width = 5,
972         .parent_map = gcc_xo_gpll0_map,
973         .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
974         .clkr.hw.init = &(struct clk_init_data){
975                 .name = "blsp2_qup4_i2c_apps_clk_src",
976                 .parent_names = gcc_xo_gpll0,
977                 .num_parents = 2,
978                 .ops = &clk_rcg2_ops,
979         },
980 };
981
982 static struct clk_rcg2 blsp2_uart4_apps_clk_src = {
983         .cmd_rcgr = 0x2d00c,
984         .mnd_width = 16,
985         .hid_width = 5,
986         .parent_map = gcc_xo_gpll0_map,
987         .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
988         .clkr.hw.init = &(struct clk_init_data){
989                 .name = "blsp2_uart4_apps_clk_src",
990                 .parent_names = gcc_xo_gpll0,
991                 .num_parents = 2,
992                 .ops = &clk_rcg2_ops,
993         },
994 };
995
996 static struct clk_rcg2 blsp2_qup5_spi_apps_clk_src = {
997         .cmd_rcgr = 0x2e00c,
998         .mnd_width = 8,
999         .hid_width = 5,
1000         .parent_map = gcc_xo_gpll0_map,
1001         .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
1002         .clkr.hw.init = &(struct clk_init_data){
1003                 .name = "blsp2_qup5_spi_apps_clk_src",
1004                 .parent_names = gcc_xo_gpll0,
1005                 .num_parents = 2,
1006                 .ops = &clk_rcg2_ops,
1007         },
1008 };
1009
1010 static struct clk_rcg2 blsp2_qup5_i2c_apps_clk_src = {
1011         .cmd_rcgr = 0x2e020,
1012         .hid_width = 5,
1013         .parent_map = gcc_xo_gpll0_map,
1014         .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
1015         .clkr.hw.init = &(struct clk_init_data){
1016                 .name = "blsp2_qup5_i2c_apps_clk_src",
1017                 .parent_names = gcc_xo_gpll0,
1018                 .num_parents = 2,
1019                 .ops = &clk_rcg2_ops,
1020         },
1021 };
1022
1023 static struct clk_rcg2 blsp2_uart5_apps_clk_src = {
1024         .cmd_rcgr = 0x2f00c,
1025         .mnd_width = 16,
1026         .hid_width = 5,
1027         .parent_map = gcc_xo_gpll0_map,
1028         .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
1029         .clkr.hw.init = &(struct clk_init_data){
1030                 .name = "blsp2_uart5_apps_clk_src",
1031                 .parent_names = gcc_xo_gpll0,
1032                 .num_parents = 2,
1033                 .ops = &clk_rcg2_ops,
1034         },
1035 };
1036
1037 static struct clk_rcg2 blsp2_qup6_spi_apps_clk_src = {
1038         .cmd_rcgr = 0x3000c,
1039         .mnd_width = 8,
1040         .hid_width = 5,
1041         .parent_map = gcc_xo_gpll0_map,
1042         .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
1043         .clkr.hw.init = &(struct clk_init_data){
1044                 .name = "blsp2_qup6_spi_apps_clk_src",
1045                 .parent_names = gcc_xo_gpll0,
1046                 .num_parents = 2,
1047                 .ops = &clk_rcg2_ops,
1048         },
1049 };
1050
1051 static struct clk_rcg2 blsp2_qup6_i2c_apps_clk_src = {
1052         .cmd_rcgr = 0x30020,
1053         .hid_width = 5,
1054         .parent_map = gcc_xo_gpll0_map,
1055         .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
1056         .clkr.hw.init = &(struct clk_init_data){
1057                 .name = "blsp2_qup6_i2c_apps_clk_src",
1058                 .parent_names = gcc_xo_gpll0,
1059                 .num_parents = 2,
1060                 .ops = &clk_rcg2_ops,
1061         },
1062 };
1063
1064 static struct clk_rcg2 blsp2_uart6_apps_clk_src = {
1065         .cmd_rcgr = 0x3100c,
1066         .mnd_width = 16,
1067         .hid_width = 5,
1068         .parent_map = gcc_xo_gpll0_map,
1069         .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
1070         .clkr.hw.init = &(struct clk_init_data){
1071                 .name = "blsp2_uart6_apps_clk_src",
1072                 .parent_names = gcc_xo_gpll0,
1073                 .num_parents = 2,
1074                 .ops = &clk_rcg2_ops,
1075         },
1076 };
1077
1078 static const struct freq_tbl ftbl_pdm2_clk_src[] = {
1079         F(60000000, P_GPLL0, 10, 0, 0),
1080         { }
1081 };
1082
1083 static struct clk_rcg2 pdm2_clk_src = {
1084         .cmd_rcgr = 0x33010,
1085         .hid_width = 5,
1086         .parent_map = gcc_xo_gpll0_map,
1087         .freq_tbl = ftbl_pdm2_clk_src,
1088         .clkr.hw.init = &(struct clk_init_data){
1089                 .name = "pdm2_clk_src",
1090                 .parent_names = gcc_xo_gpll0,
1091                 .num_parents = 2,
1092                 .ops = &clk_rcg2_ops,
1093         },
1094 };
1095
1096 static const struct freq_tbl ftbl_tsif_ref_clk_src[] = {
1097         F(105495, P_XO, 1, 1, 182),
1098         { }
1099 };
1100
1101 static struct clk_rcg2 tsif_ref_clk_src = {
1102         .cmd_rcgr = 0x36010,
1103         .mnd_width = 8,
1104         .hid_width = 5,
1105         .parent_map = gcc_xo_gpll0_aud_ref_clk_map,
1106         .freq_tbl = ftbl_tsif_ref_clk_src,
1107         .clkr.hw.init = &(struct clk_init_data){
1108                 .name = "tsif_ref_clk_src",
1109                 .parent_names = gcc_xo_gpll0_aud_ref_clk,
1110                 .num_parents = 3,
1111                 .ops = &clk_rcg2_ops,
1112         },
1113 };
1114
1115 static struct clk_rcg2 gcc_sleep_clk_src = {
1116         .cmd_rcgr = 0x43014,
1117         .hid_width = 5,
1118         .parent_map = gcc_sleep_clk_map,
1119         .clkr.hw.init = &(struct clk_init_data){
1120                 .name = "gcc_sleep_clk_src",
1121                 .parent_names = gcc_sleep_clk,
1122                 .num_parents = 1,
1123                 .ops = &clk_rcg2_ops,
1124         },
1125 };
1126
1127 static struct clk_rcg2 hmss_rbcpr_clk_src = {
1128         .cmd_rcgr = 0x48040,
1129         .hid_width = 5,
1130         .parent_map = gcc_xo_gpll0_map,
1131         .freq_tbl = ftbl_usb30_mock_utmi_clk_src,
1132         .clkr.hw.init = &(struct clk_init_data){
1133                 .name = "hmss_rbcpr_clk_src",
1134                 .parent_names = gcc_xo_gpll0,
1135                 .num_parents = 2,
1136                 .ops = &clk_rcg2_ops,
1137         },
1138 };
1139
1140 static struct clk_rcg2 hmss_gpll0_clk_src = {
1141         .cmd_rcgr = 0x48058,
1142         .hid_width = 5,
1143         .parent_map = gcc_xo_gpll0_map,
1144         .clkr.hw.init = &(struct clk_init_data){
1145                 .name = "hmss_gpll0_clk_src",
1146                 .parent_names = gcc_xo_gpll0,
1147                 .num_parents = 2,
1148                 .ops = &clk_rcg2_ops,
1149         },
1150 };
1151
1152 static const struct freq_tbl ftbl_gp1_clk_src[] = {
1153         F(19200000, P_XO, 1, 0, 0),
1154         F(100000000, P_GPLL0, 6, 0, 0),
1155         F(200000000, P_GPLL0, 3, 0, 0),
1156         { }
1157 };
1158
1159 static struct clk_rcg2 gp1_clk_src = {
1160         .cmd_rcgr = 0x64004,
1161         .mnd_width = 8,
1162         .hid_width = 5,
1163         .parent_map = gcc_xo_gpll0_sleep_clk_gpll0_early_div_map,
1164         .freq_tbl = ftbl_gp1_clk_src,
1165         .clkr.hw.init = &(struct clk_init_data){
1166                 .name = "gp1_clk_src",
1167                 .parent_names = gcc_xo_gpll0_sleep_clk_gpll0_early_div,
1168                 .num_parents = 4,
1169                 .ops = &clk_rcg2_ops,
1170         },
1171 };
1172
1173 static struct clk_rcg2 gp2_clk_src = {
1174         .cmd_rcgr = 0x65004,
1175         .mnd_width = 8,
1176         .hid_width = 5,
1177         .parent_map = gcc_xo_gpll0_sleep_clk_gpll0_early_div_map,
1178         .freq_tbl = ftbl_gp1_clk_src,
1179         .clkr.hw.init = &(struct clk_init_data){
1180                 .name = "gp2_clk_src",
1181                 .parent_names = gcc_xo_gpll0_sleep_clk_gpll0_early_div,
1182                 .num_parents = 4,
1183                 .ops = &clk_rcg2_ops,
1184         },
1185 };
1186
1187 static struct clk_rcg2 gp3_clk_src = {
1188         .cmd_rcgr = 0x66004,
1189         .mnd_width = 8,
1190         .hid_width = 5,
1191         .parent_map = gcc_xo_gpll0_sleep_clk_gpll0_early_div_map,
1192         .freq_tbl = ftbl_gp1_clk_src,
1193         .clkr.hw.init = &(struct clk_init_data){
1194                 .name = "gp3_clk_src",
1195                 .parent_names = gcc_xo_gpll0_sleep_clk_gpll0_early_div,
1196                 .num_parents = 4,
1197                 .ops = &clk_rcg2_ops,
1198         },
1199 };
1200
1201 static const struct freq_tbl ftbl_pcie_aux_clk_src[] = {
1202         F(1010526, P_XO, 1, 1, 19),
1203         { }
1204 };
1205
1206 static struct clk_rcg2 pcie_aux_clk_src = {
1207         .cmd_rcgr = 0x6c000,
1208         .mnd_width = 16,
1209         .hid_width = 5,
1210         .parent_map = gcc_xo_sleep_clk_map,
1211         .freq_tbl = ftbl_pcie_aux_clk_src,
1212         .clkr.hw.init = &(struct clk_init_data){
1213                 .name = "pcie_aux_clk_src",
1214                 .parent_names = gcc_xo_sleep_clk,
1215                 .num_parents = 2,
1216                 .ops = &clk_rcg2_ops,
1217         },
1218 };
1219
1220 static const struct freq_tbl ftbl_ufs_axi_clk_src[] = {
1221         F(100000000, P_GPLL0, 6, 0, 0),
1222         F(200000000, P_GPLL0, 3, 0, 0),
1223         F(240000000, P_GPLL0, 2.5, 0, 0),
1224         { }
1225 };
1226
1227 static struct clk_rcg2 ufs_axi_clk_src = {
1228         .cmd_rcgr = 0x75024,
1229         .mnd_width = 8,
1230         .hid_width = 5,
1231         .parent_map = gcc_xo_gpll0_map,
1232         .freq_tbl = ftbl_ufs_axi_clk_src,
1233         .clkr.hw.init = &(struct clk_init_data){
1234                 .name = "ufs_axi_clk_src",
1235                 .parent_names = gcc_xo_gpll0,
1236                 .num_parents = 2,
1237                 .ops = &clk_rcg2_ops,
1238         },
1239 };
1240
1241 static const struct freq_tbl ftbl_ufs_ice_core_clk_src[] = {
1242         F(19200000, P_XO, 1, 0, 0),
1243         F(150000000, P_GPLL0, 4, 0, 0),
1244         F(300000000, P_GPLL0, 2, 0, 0),
1245         { }
1246 };
1247
1248 static struct clk_rcg2 ufs_ice_core_clk_src = {
1249         .cmd_rcgr = 0x76014,
1250         .hid_width = 5,
1251         .parent_map = gcc_xo_gpll0_map,
1252         .freq_tbl = ftbl_ufs_ice_core_clk_src,
1253         .clkr.hw.init = &(struct clk_init_data){
1254                 .name = "ufs_ice_core_clk_src",
1255                 .parent_names = gcc_xo_gpll0,
1256                 .num_parents = 2,
1257                 .ops = &clk_rcg2_ops,
1258         },
1259 };
1260
1261 static const struct freq_tbl ftbl_qspi_ser_clk_src[] = {
1262         F(75000000, P_GPLL0, 8, 0, 0),
1263         F(150000000, P_GPLL0, 4, 0, 0),
1264         F(256000000, P_GPLL4, 1.5, 0, 0),
1265         F(300000000, P_GPLL0, 2, 0, 0),
1266         { }
1267 };
1268
1269 static struct clk_rcg2 qspi_ser_clk_src = {
1270         .cmd_rcgr = 0x8b00c,
1271         .hid_width = 5,
1272         .parent_map = gcc_xo_gpll0_gpll1_early_div_gpll1_gpll4_gpll0_early_div_map,
1273         .freq_tbl = ftbl_qspi_ser_clk_src,
1274         .clkr.hw.init = &(struct clk_init_data){
1275                 .name = "qspi_ser_clk_src",
1276                 .parent_names = gcc_xo_gpll0_gpll1_early_div_gpll1_gpll4_gpll0_early_div,
1277                 .num_parents = 6,
1278                 .ops = &clk_rcg2_ops,
1279         },
1280 };
1281
1282 static struct clk_branch gcc_sys_noc_usb3_axi_clk = {
1283         .halt_reg = 0x0f03c,
1284         .clkr = {
1285                 .enable_reg = 0x0f03c,
1286                 .enable_mask = BIT(0),
1287                 .hw.init = &(struct clk_init_data){
1288                         .name = "gcc_sys_noc_usb3_axi_clk",
1289                         .parent_names = (const char *[]){ "usb30_master_clk_src" },
1290                         .num_parents = 1,
1291                         .flags = CLK_SET_RATE_PARENT,
1292                         .ops = &clk_branch2_ops,
1293                 },
1294         },
1295 };
1296
1297 static struct clk_branch gcc_sys_noc_ufs_axi_clk = {
1298         .halt_reg = 0x75038,
1299         .clkr = {
1300                 .enable_reg = 0x75038,
1301                 .enable_mask = BIT(0),
1302                 .hw.init = &(struct clk_init_data){
1303                         .name = "gcc_sys_noc_ufs_axi_clk",
1304                         .parent_names = (const char *[]){ "ufs_axi_clk_src" },
1305                         .num_parents = 1,
1306                         .flags = CLK_SET_RATE_PARENT,
1307                         .ops = &clk_branch2_ops,
1308                 },
1309         },
1310 };
1311
1312 static struct clk_branch gcc_periph_noc_usb20_ahb_clk = {
1313         .halt_reg = 0x6010,
1314         .clkr = {
1315                 .enable_reg = 0x6010,
1316                 .enable_mask = BIT(0),
1317                 .hw.init = &(struct clk_init_data){
1318                         .name = "gcc_periph_noc_usb20_ahb_clk",
1319                         .parent_names = (const char *[]){ "usb20_master_clk_src" },
1320                         .num_parents = 1,
1321                         .flags = CLK_SET_RATE_PARENT,
1322                         .ops = &clk_branch2_ops,
1323                 },
1324         },
1325 };
1326
1327 static struct clk_branch gcc_mmss_noc_cfg_ahb_clk = {
1328         .halt_reg = 0x9008,
1329         .clkr = {
1330                 .enable_reg = 0x9008,
1331                 .enable_mask = BIT(0),
1332                 .hw.init = &(struct clk_init_data){
1333                         .name = "gcc_mmss_noc_cfg_ahb_clk",
1334                         .parent_names = (const char *[]){ "config_noc_clk_src" },
1335                         .num_parents = 1,
1336                         .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
1337                         .ops = &clk_branch2_ops,
1338                 },
1339         },
1340 };
1341
1342 static struct clk_branch gcc_mmss_bimc_gfx_clk = {
1343         .halt_reg = 0x9010,
1344         .clkr = {
1345                 .enable_reg = 0x9010,
1346                 .enable_mask = BIT(0),
1347                 .hw.init = &(struct clk_init_data){
1348                         .name = "gcc_mmss_bimc_gfx_clk",
1349                         .flags = CLK_SET_RATE_PARENT,
1350                         .ops = &clk_branch2_ops,
1351                 },
1352         },
1353 };
1354
1355 static struct clk_branch gcc_usb30_master_clk = {
1356         .halt_reg = 0x0f008,
1357         .clkr = {
1358                 .enable_reg = 0x0f008,
1359                 .enable_mask = BIT(0),
1360                 .hw.init = &(struct clk_init_data){
1361                         .name = "gcc_usb30_master_clk",
1362                         .parent_names = (const char *[]){ "usb30_master_clk_src" },
1363                         .num_parents = 1,
1364                         .flags = CLK_SET_RATE_PARENT,
1365                         .ops = &clk_branch2_ops,
1366                 },
1367         },
1368 };
1369
1370 static struct clk_branch gcc_usb30_sleep_clk = {
1371         .halt_reg = 0x0f00c,
1372         .clkr = {
1373                 .enable_reg = 0x0f00c,
1374                 .enable_mask = BIT(0),
1375                 .hw.init = &(struct clk_init_data){
1376                         .name = "gcc_usb30_sleep_clk",
1377                         .parent_names = (const char *[]){ "gcc_sleep_clk_src" },
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_usb30_mock_utmi_clk = {
1386         .halt_reg = 0x0f010,
1387         .clkr = {
1388                 .enable_reg = 0x0f010,
1389                 .enable_mask = BIT(0),
1390                 .hw.init = &(struct clk_init_data){
1391                         .name = "gcc_usb30_mock_utmi_clk",
1392                         .parent_names = (const char *[]){ "usb30_mock_utmi_clk_src" },
1393                         .num_parents = 1,
1394                         .flags = CLK_SET_RATE_PARENT,
1395                         .ops = &clk_branch2_ops,
1396                 },
1397         },
1398 };
1399
1400 static struct clk_branch gcc_usb3_phy_aux_clk = {
1401         .halt_reg = 0x50000,
1402         .clkr = {
1403                 .enable_reg = 0x50000,
1404                 .enable_mask = BIT(0),
1405                 .hw.init = &(struct clk_init_data){
1406                         .name = "gcc_usb3_phy_aux_clk",
1407                         .parent_names = (const char *[]){ "usb3_phy_aux_clk_src" },
1408                         .num_parents = 1,
1409                         .flags = CLK_SET_RATE_PARENT,
1410                         .ops = &clk_branch2_ops,
1411                 },
1412         },
1413 };
1414
1415 static struct clk_branch gcc_usb3_phy_pipe_clk = {
1416         .halt_reg = 0x50004,
1417         .clkr = {
1418                 .enable_reg = 0x50004,
1419                 .enable_mask = BIT(0),
1420                 .hw.init = &(struct clk_init_data){
1421                         .name = "gcc_usb3_phy_pipe_clk",
1422                         .parent_names = (const char *[]){ "usb3_phy_pipe_clk_src" },
1423                         .num_parents = 1,
1424                         .flags = CLK_SET_RATE_PARENT,
1425                         .ops = &clk_branch2_ops,
1426                 },
1427         },
1428 };
1429
1430 static struct clk_branch gcc_usb20_master_clk = {
1431         .halt_reg = 0x12004,
1432         .clkr = {
1433                 .enable_reg = 0x12004,
1434                 .enable_mask = BIT(0),
1435                 .hw.init = &(struct clk_init_data){
1436                         .name = "gcc_usb20_master_clk",
1437                         .parent_names = (const char *[]){ "usb20_master_clk_src" },
1438                         .num_parents = 1,
1439                         .flags = CLK_SET_RATE_PARENT,
1440                         .ops = &clk_branch2_ops,
1441                 },
1442         },
1443 };
1444
1445 static struct clk_branch gcc_usb20_sleep_clk = {
1446         .halt_reg = 0x12008,
1447         .clkr = {
1448                 .enable_reg = 0x12008,
1449                 .enable_mask = BIT(0),
1450                 .hw.init = &(struct clk_init_data){
1451                         .name = "gcc_usb20_sleep_clk",
1452                         .parent_names = (const char *[]){ "gcc_sleep_clk_src" },
1453                         .num_parents = 1,
1454                         .flags = CLK_SET_RATE_PARENT,
1455                         .ops = &clk_branch2_ops,
1456                 },
1457         },
1458 };
1459
1460 static struct clk_branch gcc_usb20_mock_utmi_clk = {
1461         .halt_reg = 0x1200c,
1462         .clkr = {
1463                 .enable_reg = 0x1200c,
1464                 .enable_mask = BIT(0),
1465                 .hw.init = &(struct clk_init_data){
1466                         .name = "gcc_usb20_mock_utmi_clk",
1467                         .parent_names = (const char *[]){ "usb20_mock_utmi_clk_src" },
1468                         .num_parents = 1,
1469                         .flags = CLK_SET_RATE_PARENT,
1470                         .ops = &clk_branch2_ops,
1471                 },
1472         },
1473 };
1474
1475 static struct clk_branch gcc_usb_phy_cfg_ahb2phy_clk = {
1476         .halt_reg = 0x6a004,
1477         .clkr = {
1478                 .enable_reg = 0x6a004,
1479                 .enable_mask = BIT(0),
1480                 .hw.init = &(struct clk_init_data){
1481                         .name = "gcc_usb_phy_cfg_ahb2phy_clk",
1482                         .parent_names = (const char *[]){ "periph_noc_clk_src" },
1483                         .num_parents = 1,
1484                         .flags = CLK_SET_RATE_PARENT,
1485                         .ops = &clk_branch2_ops,
1486                 },
1487         },
1488 };
1489
1490 static struct clk_branch gcc_sdcc1_apps_clk = {
1491         .halt_reg = 0x13004,
1492         .clkr = {
1493                 .enable_reg = 0x13004,
1494                 .enable_mask = BIT(0),
1495                 .hw.init = &(struct clk_init_data){
1496                         .name = "gcc_sdcc1_apps_clk",
1497                         .parent_names = (const char *[]){ "sdcc1_apps_clk_src" },
1498                         .num_parents = 1,
1499                         .flags = CLK_SET_RATE_PARENT,
1500                         .ops = &clk_branch2_ops,
1501                 },
1502         },
1503 };
1504
1505 static struct clk_branch gcc_sdcc1_ahb_clk = {
1506         .halt_reg = 0x13008,
1507         .clkr = {
1508                 .enable_reg = 0x13008,
1509                 .enable_mask = BIT(0),
1510                 .hw.init = &(struct clk_init_data){
1511                         .name = "gcc_sdcc1_ahb_clk",
1512                         .parent_names = (const char *[]){ "periph_noc_clk_src" },
1513                         .num_parents = 1,
1514                         .flags = CLK_SET_RATE_PARENT,
1515                         .ops = &clk_branch2_ops,
1516                 },
1517         },
1518 };
1519
1520 static struct clk_branch gcc_sdcc1_ice_core_clk = {
1521         .halt_reg = 0x13038,
1522         .clkr = {
1523                 .enable_reg = 0x13038,
1524                 .enable_mask = BIT(0),
1525                 .hw.init = &(struct clk_init_data){
1526                         .name = "gcc_sdcc1_ice_core_clk",
1527                         .parent_names = (const char *[]){ "sdcc1_ice_core_clk_src" },
1528                         .num_parents = 1,
1529                         .flags = CLK_SET_RATE_PARENT,
1530                         .ops = &clk_branch2_ops,
1531                 },
1532         },
1533 };
1534
1535 static struct clk_branch gcc_sdcc2_apps_clk = {
1536         .halt_reg = 0x14004,
1537         .clkr = {
1538                 .enable_reg = 0x14004,
1539                 .enable_mask = BIT(0),
1540                 .hw.init = &(struct clk_init_data){
1541                         .name = "gcc_sdcc2_apps_clk",
1542                         .parent_names = (const char *[]){ "sdcc2_apps_clk_src" },
1543                         .num_parents = 1,
1544                         .flags = CLK_SET_RATE_PARENT,
1545                         .ops = &clk_branch2_ops,
1546                 },
1547         },
1548 };
1549
1550 static struct clk_branch gcc_sdcc2_ahb_clk = {
1551         .halt_reg = 0x14008,
1552         .clkr = {
1553                 .enable_reg = 0x14008,
1554                 .enable_mask = BIT(0),
1555                 .hw.init = &(struct clk_init_data){
1556                         .name = "gcc_sdcc2_ahb_clk",
1557                         .parent_names = (const char *[]){ "periph_noc_clk_src" },
1558                         .num_parents = 1,
1559                         .flags = CLK_SET_RATE_PARENT,
1560                         .ops = &clk_branch2_ops,
1561                 },
1562         },
1563 };
1564
1565 static struct clk_branch gcc_sdcc3_apps_clk = {
1566         .halt_reg = 0x15004,
1567         .clkr = {
1568                 .enable_reg = 0x15004,
1569                 .enable_mask = BIT(0),
1570                 .hw.init = &(struct clk_init_data){
1571                         .name = "gcc_sdcc3_apps_clk",
1572                         .parent_names = (const char *[]){ "sdcc3_apps_clk_src" },
1573                         .num_parents = 1,
1574                         .flags = CLK_SET_RATE_PARENT,
1575                         .ops = &clk_branch2_ops,
1576                 },
1577         },
1578 };
1579
1580 static struct clk_branch gcc_sdcc3_ahb_clk = {
1581         .halt_reg = 0x15008,
1582         .clkr = {
1583                 .enable_reg = 0x15008,
1584                 .enable_mask = BIT(0),
1585                 .hw.init = &(struct clk_init_data){
1586                         .name = "gcc_sdcc3_ahb_clk",
1587                         .parent_names = (const char *[]){ "periph_noc_clk_src" },
1588                         .num_parents = 1,
1589                         .flags = CLK_SET_RATE_PARENT,
1590                         .ops = &clk_branch2_ops,
1591                 },
1592         },
1593 };
1594
1595 static struct clk_branch gcc_sdcc4_apps_clk = {
1596         .halt_reg = 0x16004,
1597         .clkr = {
1598                 .enable_reg = 0x16004,
1599                 .enable_mask = BIT(0),
1600                 .hw.init = &(struct clk_init_data){
1601                         .name = "gcc_sdcc4_apps_clk",
1602                         .parent_names = (const char *[]){ "sdcc4_apps_clk_src" },
1603                         .num_parents = 1,
1604                         .flags = CLK_SET_RATE_PARENT,
1605                         .ops = &clk_branch2_ops,
1606                 },
1607         },
1608 };
1609
1610 static struct clk_branch gcc_sdcc4_ahb_clk = {
1611         .halt_reg = 0x16008,
1612         .clkr = {
1613                 .enable_reg = 0x16008,
1614                 .enable_mask = BIT(0),
1615                 .hw.init = &(struct clk_init_data){
1616                         .name = "gcc_sdcc4_ahb_clk",
1617                         .parent_names = (const char *[]){ "periph_noc_clk_src" },
1618                         .num_parents = 1,
1619                         .flags = CLK_SET_RATE_PARENT,
1620                         .ops = &clk_branch2_ops,
1621                 },
1622         },
1623 };
1624
1625 static struct clk_branch gcc_blsp1_ahb_clk = {
1626         .halt_reg = 0x17004,
1627         .halt_check = BRANCH_HALT_VOTED,
1628         .clkr = {
1629                 .enable_reg = 0x52004,
1630                 .enable_mask = BIT(17),
1631                 .hw.init = &(struct clk_init_data){
1632                         .name = "gcc_blsp1_ahb_clk",
1633                         .parent_names = (const char *[]){ "periph_noc_clk_src" },
1634                         .num_parents = 1,
1635                         .flags = CLK_SET_RATE_PARENT,
1636                         .ops = &clk_branch2_ops,
1637                 },
1638         },
1639 };
1640
1641 static struct clk_branch gcc_blsp1_sleep_clk = {
1642         .halt_reg = 0x17008,
1643         .halt_check = BRANCH_HALT_VOTED,
1644         .clkr = {
1645                 .enable_reg = 0x52004,
1646                 .enable_mask = BIT(16),
1647                 .hw.init = &(struct clk_init_data){
1648                         .name = "gcc_blsp1_sleep_clk",
1649                         .parent_names = (const char *[]){ "gcc_sleep_clk_src" },
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_blsp1_qup1_spi_apps_clk = {
1658         .halt_reg = 0x19004,
1659         .clkr = {
1660                 .enable_reg = 0x19004,
1661                 .enable_mask = BIT(0),
1662                 .hw.init = &(struct clk_init_data){
1663                         .name = "gcc_blsp1_qup1_spi_apps_clk",
1664                         .parent_names = (const char *[]){ "blsp1_qup1_spi_apps_clk_src" },
1665                         .num_parents = 1,
1666                         .flags = CLK_SET_RATE_PARENT,
1667                         .ops = &clk_branch2_ops,
1668                 },
1669         },
1670 };
1671
1672 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1673         .halt_reg = 0x19008,
1674         .clkr = {
1675                 .enable_reg = 0x19008,
1676                 .enable_mask = BIT(0),
1677                 .hw.init = &(struct clk_init_data){
1678                         .name = "gcc_blsp1_qup1_i2c_apps_clk",
1679                         .parent_names = (const char *[]){ "blsp1_qup1_i2c_apps_clk_src" },
1680                         .num_parents = 1,
1681                         .flags = CLK_SET_RATE_PARENT,
1682                         .ops = &clk_branch2_ops,
1683                 },
1684         },
1685 };
1686
1687 static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1688         .halt_reg = 0x1a004,
1689         .clkr = {
1690                 .enable_reg = 0x1a004,
1691                 .enable_mask = BIT(0),
1692                 .hw.init = &(struct clk_init_data){
1693                         .name = "gcc_blsp1_uart1_apps_clk",
1694                         .parent_names = (const char *[]){ "blsp1_uart1_apps_clk_src" },
1695                         .num_parents = 1,
1696                         .flags = CLK_SET_RATE_PARENT,
1697                         .ops = &clk_branch2_ops,
1698                 },
1699         },
1700 };
1701
1702 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1703         .halt_reg = 0x1b004,
1704         .clkr = {
1705                 .enable_reg = 0x1b004,
1706                 .enable_mask = BIT(0),
1707                 .hw.init = &(struct clk_init_data){
1708                         .name = "gcc_blsp1_qup2_spi_apps_clk",
1709                         .parent_names = (const char *[]){ "blsp1_qup2_spi_apps_clk_src" },
1710                         .num_parents = 1,
1711                         .flags = CLK_SET_RATE_PARENT,
1712                         .ops = &clk_branch2_ops,
1713                 },
1714         },
1715 };
1716
1717 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1718         .halt_reg = 0x1b008,
1719         .clkr = {
1720                 .enable_reg = 0x1b008,
1721                 .enable_mask = BIT(0),
1722                 .hw.init = &(struct clk_init_data){
1723                         .name = "gcc_blsp1_qup2_i2c_apps_clk",
1724                         .parent_names = (const char *[]){ "blsp1_qup2_i2c_apps_clk_src" },
1725                         .num_parents = 1,
1726                         .flags = CLK_SET_RATE_PARENT,
1727                         .ops = &clk_branch2_ops,
1728                 },
1729         },
1730 };
1731
1732 static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1733         .halt_reg = 0x1c004,
1734         .clkr = {
1735                 .enable_reg = 0x1c004,
1736                 .enable_mask = BIT(0),
1737                 .hw.init = &(struct clk_init_data){
1738                         .name = "gcc_blsp1_uart2_apps_clk",
1739                         .parent_names = (const char *[]){ "blsp1_uart2_apps_clk_src" },
1740                         .num_parents = 1,
1741                         .flags = CLK_SET_RATE_PARENT,
1742                         .ops = &clk_branch2_ops,
1743                 },
1744         },
1745 };
1746
1747 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1748         .halt_reg = 0x1d004,
1749         .clkr = {
1750                 .enable_reg = 0x1d004,
1751                 .enable_mask = BIT(0),
1752                 .hw.init = &(struct clk_init_data){
1753                         .name = "gcc_blsp1_qup3_spi_apps_clk",
1754                         .parent_names = (const char *[]){ "blsp1_qup3_spi_apps_clk_src" },
1755                         .num_parents = 1,
1756                         .flags = CLK_SET_RATE_PARENT,
1757                         .ops = &clk_branch2_ops,
1758                 },
1759         },
1760 };
1761
1762 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1763         .halt_reg = 0x1d008,
1764         .clkr = {
1765                 .enable_reg = 0x1d008,
1766                 .enable_mask = BIT(0),
1767                 .hw.init = &(struct clk_init_data){
1768                         .name = "gcc_blsp1_qup3_i2c_apps_clk",
1769                         .parent_names = (const char *[]){ "blsp1_qup3_i2c_apps_clk_src" },
1770                         .num_parents = 1,
1771                         .flags = CLK_SET_RATE_PARENT,
1772                         .ops = &clk_branch2_ops,
1773                 },
1774         },
1775 };
1776
1777 static struct clk_branch gcc_blsp1_uart3_apps_clk = {
1778         .halt_reg = 0x1e004,
1779         .clkr = {
1780                 .enable_reg = 0x1e004,
1781                 .enable_mask = BIT(0),
1782                 .hw.init = &(struct clk_init_data){
1783                         .name = "gcc_blsp1_uart3_apps_clk",
1784                         .parent_names = (const char *[]){ "blsp1_uart3_apps_clk_src" },
1785                         .num_parents = 1,
1786                         .flags = CLK_SET_RATE_PARENT,
1787                         .ops = &clk_branch2_ops,
1788                 },
1789         },
1790 };
1791
1792 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1793         .halt_reg = 0x1f004,
1794         .clkr = {
1795                 .enable_reg = 0x1f004,
1796                 .enable_mask = BIT(0),
1797                 .hw.init = &(struct clk_init_data){
1798                         .name = "gcc_blsp1_qup4_spi_apps_clk",
1799                         .parent_names = (const char *[]){ "blsp1_qup4_spi_apps_clk_src" },
1800                         .num_parents = 1,
1801                         .flags = CLK_SET_RATE_PARENT,
1802                         .ops = &clk_branch2_ops,
1803                 },
1804         },
1805 };
1806
1807 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1808         .halt_reg = 0x1f008,
1809         .clkr = {
1810                 .enable_reg = 0x1f008,
1811                 .enable_mask = BIT(0),
1812                 .hw.init = &(struct clk_init_data){
1813                         .name = "gcc_blsp1_qup4_i2c_apps_clk",
1814                         .parent_names = (const char *[]){ "blsp1_qup4_i2c_apps_clk_src" },
1815                         .num_parents = 1,
1816                         .flags = CLK_SET_RATE_PARENT,
1817                         .ops = &clk_branch2_ops,
1818                 },
1819         },
1820 };
1821
1822 static struct clk_branch gcc_blsp1_uart4_apps_clk = {
1823         .halt_reg = 0x20004,
1824         .clkr = {
1825                 .enable_reg = 0x20004,
1826                 .enable_mask = BIT(0),
1827                 .hw.init = &(struct clk_init_data){
1828                         .name = "gcc_blsp1_uart4_apps_clk",
1829                         .parent_names = (const char *[]){ "blsp1_uart4_apps_clk_src" },
1830                         .num_parents = 1,
1831                         .flags = CLK_SET_RATE_PARENT,
1832                         .ops = &clk_branch2_ops,
1833                 },
1834         },
1835 };
1836
1837 static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
1838         .halt_reg = 0x21004,
1839         .clkr = {
1840                 .enable_reg = 0x21004,
1841                 .enable_mask = BIT(0),
1842                 .hw.init = &(struct clk_init_data){
1843                         .name = "gcc_blsp1_qup5_spi_apps_clk",
1844                         .parent_names = (const char *[]){ "blsp1_qup5_spi_apps_clk_src" },
1845                         .num_parents = 1,
1846                         .flags = CLK_SET_RATE_PARENT,
1847                         .ops = &clk_branch2_ops,
1848                 },
1849         },
1850 };
1851
1852 static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
1853         .halt_reg = 0x21008,
1854         .clkr = {
1855                 .enable_reg = 0x21008,
1856                 .enable_mask = BIT(0),
1857                 .hw.init = &(struct clk_init_data){
1858                         .name = "gcc_blsp1_qup5_i2c_apps_clk",
1859                         .parent_names = (const char *[]){ "blsp1_qup5_i2c_apps_clk_src" },
1860                         .num_parents = 1,
1861                         .flags = CLK_SET_RATE_PARENT,
1862                         .ops = &clk_branch2_ops,
1863                 },
1864         },
1865 };
1866
1867 static struct clk_branch gcc_blsp1_uart5_apps_clk = {
1868         .halt_reg = 0x22004,
1869         .clkr = {
1870                 .enable_reg = 0x22004,
1871                 .enable_mask = BIT(0),
1872                 .hw.init = &(struct clk_init_data){
1873                         .name = "gcc_blsp1_uart5_apps_clk",
1874                         .parent_names = (const char *[]){ "blsp1_uart5_apps_clk_src" },
1875                         .num_parents = 1,
1876                         .flags = CLK_SET_RATE_PARENT,
1877                         .ops = &clk_branch2_ops,
1878                 },
1879         },
1880 };
1881
1882 static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
1883         .halt_reg = 0x23004,
1884         .clkr = {
1885                 .enable_reg = 0x23004,
1886                 .enable_mask = BIT(0),
1887                 .hw.init = &(struct clk_init_data){
1888                         .name = "gcc_blsp1_qup6_spi_apps_clk",
1889                         .parent_names = (const char *[]){ "blsp1_qup6_spi_apps_clk_src" },
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_blsp1_qup6_i2c_apps_clk = {
1898         .halt_reg = 0x23008,
1899         .clkr = {
1900                 .enable_reg = 0x23008,
1901                 .enable_mask = BIT(0),
1902                 .hw.init = &(struct clk_init_data){
1903                         .name = "gcc_blsp1_qup6_i2c_apps_clk",
1904                         .parent_names = (const char *[]){ "blsp1_qup6_i2c_apps_clk_src" },
1905                         .num_parents = 1,
1906                         .flags = CLK_SET_RATE_PARENT,
1907                         .ops = &clk_branch2_ops,
1908                 },
1909         },
1910 };
1911
1912 static struct clk_branch gcc_blsp1_uart6_apps_clk = {
1913         .halt_reg = 0x24004,
1914         .clkr = {
1915                 .enable_reg = 0x24004,
1916                 .enable_mask = BIT(0),
1917                 .hw.init = &(struct clk_init_data){
1918                         .name = "gcc_blsp1_uart6_apps_clk",
1919                         .parent_names = (const char *[]){ "blsp1_uart6_apps_clk_src" },
1920                         .num_parents = 1,
1921                         .flags = CLK_SET_RATE_PARENT,
1922                         .ops = &clk_branch2_ops,
1923                 },
1924         },
1925 };
1926
1927 static struct clk_branch gcc_blsp2_ahb_clk = {
1928         .halt_reg = 0x25004,
1929         .halt_check = BRANCH_HALT_VOTED,
1930         .clkr = {
1931                 .enable_reg = 0x52004,
1932                 .enable_mask = BIT(15),
1933                 .hw.init = &(struct clk_init_data){
1934                         .name = "gcc_blsp2_ahb_clk",
1935                         .parent_names = (const char *[]){ "periph_noc_clk_src" },
1936                         .num_parents = 1,
1937                         .flags = CLK_SET_RATE_PARENT,
1938                         .ops = &clk_branch2_ops,
1939                 },
1940         },
1941 };
1942
1943 static struct clk_branch gcc_blsp2_sleep_clk = {
1944         .halt_reg = 0x25008,
1945         .halt_check = BRANCH_HALT_VOTED,
1946         .clkr = {
1947                 .enable_reg = 0x52004,
1948                 .enable_mask = BIT(14),
1949                 .hw.init = &(struct clk_init_data){
1950                         .name = "gcc_blsp2_sleep_clk",
1951                         .parent_names = (const char *[]){ "gcc_sleep_clk_src" },
1952                         .num_parents = 1,
1953                         .flags = CLK_SET_RATE_PARENT,
1954                         .ops = &clk_branch2_ops,
1955                 },
1956         },
1957 };
1958
1959 static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
1960         .halt_reg = 0x26004,
1961         .clkr = {
1962                 .enable_reg = 0x26004,
1963                 .enable_mask = BIT(0),
1964                 .hw.init = &(struct clk_init_data){
1965                         .name = "gcc_blsp2_qup1_spi_apps_clk",
1966                         .parent_names = (const char *[]){ "blsp2_qup1_spi_apps_clk_src" },
1967                         .num_parents = 1,
1968                         .flags = CLK_SET_RATE_PARENT,
1969                         .ops = &clk_branch2_ops,
1970                 },
1971         },
1972 };
1973
1974 static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
1975         .halt_reg = 0x26008,
1976         .clkr = {
1977                 .enable_reg = 0x26008,
1978                 .enable_mask = BIT(0),
1979                 .hw.init = &(struct clk_init_data){
1980                         .name = "gcc_blsp2_qup1_i2c_apps_clk",
1981                         .parent_names = (const char *[]){ "blsp2_qup1_i2c_apps_clk_src" },
1982                         .num_parents = 1,
1983                         .flags = CLK_SET_RATE_PARENT,
1984                         .ops = &clk_branch2_ops,
1985                 },
1986         },
1987 };
1988
1989 static struct clk_branch gcc_blsp2_uart1_apps_clk = {
1990         .halt_reg = 0x27004,
1991         .clkr = {
1992                 .enable_reg = 0x27004,
1993                 .enable_mask = BIT(0),
1994                 .hw.init = &(struct clk_init_data){
1995                         .name = "gcc_blsp2_uart1_apps_clk",
1996                         .parent_names = (const char *[]){ "blsp2_uart1_apps_clk_src" },
1997                         .num_parents = 1,
1998                         .flags = CLK_SET_RATE_PARENT,
1999                         .ops = &clk_branch2_ops,
2000                 },
2001         },
2002 };
2003
2004 static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
2005         .halt_reg = 0x28004,
2006         .clkr = {
2007                 .enable_reg = 0x28004,
2008                 .enable_mask = BIT(0),
2009                 .hw.init = &(struct clk_init_data){
2010                         .name = "gcc_blsp2_qup2_spi_apps_clk",
2011                         .parent_names = (const char *[]){ "blsp2_qup2_spi_apps_clk_src" },
2012                         .num_parents = 1,
2013                         .flags = CLK_SET_RATE_PARENT,
2014                         .ops = &clk_branch2_ops,
2015                 },
2016         },
2017 };
2018
2019 static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
2020         .halt_reg = 0x28008,
2021         .clkr = {
2022                 .enable_reg = 0x28008,
2023                 .enable_mask = BIT(0),
2024                 .hw.init = &(struct clk_init_data){
2025                         .name = "gcc_blsp2_qup2_i2c_apps_clk",
2026                         .parent_names = (const char *[]){ "blsp2_qup2_i2c_apps_clk_src" },
2027                         .num_parents = 1,
2028                         .flags = CLK_SET_RATE_PARENT,
2029                         .ops = &clk_branch2_ops,
2030                 },
2031         },
2032 };
2033
2034 static struct clk_branch gcc_blsp2_uart2_apps_clk = {
2035         .halt_reg = 0x29004,
2036         .clkr = {
2037                 .enable_reg = 0x29004,
2038                 .enable_mask = BIT(0),
2039                 .hw.init = &(struct clk_init_data){
2040                         .name = "gcc_blsp2_uart2_apps_clk",
2041                         .parent_names = (const char *[]){ "blsp2_uart2_apps_clk_src" },
2042                         .num_parents = 1,
2043                         .flags = CLK_SET_RATE_PARENT,
2044                         .ops = &clk_branch2_ops,
2045                 },
2046         },
2047 };
2048
2049 static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
2050         .halt_reg = 0x2a004,
2051         .clkr = {
2052                 .enable_reg = 0x2a004,
2053                 .enable_mask = BIT(0),
2054                 .hw.init = &(struct clk_init_data){
2055                         .name = "gcc_blsp2_qup3_spi_apps_clk",
2056                         .parent_names = (const char *[]){ "blsp2_qup3_spi_apps_clk_src" },
2057                         .num_parents = 1,
2058                         .flags = CLK_SET_RATE_PARENT,
2059                         .ops = &clk_branch2_ops,
2060                 },
2061         },
2062 };
2063
2064 static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
2065         .halt_reg = 0x2a008,
2066         .clkr = {
2067                 .enable_reg = 0x2a008,
2068                 .enable_mask = BIT(0),
2069                 .hw.init = &(struct clk_init_data){
2070                         .name = "gcc_blsp2_qup3_i2c_apps_clk",
2071                         .parent_names = (const char *[]){ "blsp2_qup3_i2c_apps_clk_src" },
2072                         .num_parents = 1,
2073                         .flags = CLK_SET_RATE_PARENT,
2074                         .ops = &clk_branch2_ops,
2075                 },
2076         },
2077 };
2078
2079 static struct clk_branch gcc_blsp2_uart3_apps_clk = {
2080         .halt_reg = 0x2b004,
2081         .clkr = {
2082                 .enable_reg = 0x2b004,
2083                 .enable_mask = BIT(0),
2084                 .hw.init = &(struct clk_init_data){
2085                         .name = "gcc_blsp2_uart3_apps_clk",
2086                         .parent_names = (const char *[]){ "blsp2_uart3_apps_clk_src" },
2087                         .num_parents = 1,
2088                         .flags = CLK_SET_RATE_PARENT,
2089                         .ops = &clk_branch2_ops,
2090                 },
2091         },
2092 };
2093
2094 static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
2095         .halt_reg = 0x2c004,
2096         .clkr = {
2097                 .enable_reg = 0x2c004,
2098                 .enable_mask = BIT(0),
2099                 .hw.init = &(struct clk_init_data){
2100                         .name = "gcc_blsp2_qup4_spi_apps_clk",
2101                         .parent_names = (const char *[]){ "blsp2_qup4_spi_apps_clk_src" },
2102                         .num_parents = 1,
2103                         .flags = CLK_SET_RATE_PARENT,
2104                         .ops = &clk_branch2_ops,
2105                 },
2106         },
2107 };
2108
2109 static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
2110         .halt_reg = 0x2c008,
2111         .clkr = {
2112                 .enable_reg = 0x2c008,
2113                 .enable_mask = BIT(0),
2114                 .hw.init = &(struct clk_init_data){
2115                         .name = "gcc_blsp2_qup4_i2c_apps_clk",
2116                         .parent_names = (const char *[]){ "blsp2_qup4_i2c_apps_clk_src" },
2117                         .num_parents = 1,
2118                         .flags = CLK_SET_RATE_PARENT,
2119                         .ops = &clk_branch2_ops,
2120                 },
2121         },
2122 };
2123
2124 static struct clk_branch gcc_blsp2_uart4_apps_clk = {
2125         .halt_reg = 0x2d004,
2126         .clkr = {
2127                 .enable_reg = 0x2d004,
2128                 .enable_mask = BIT(0),
2129                 .hw.init = &(struct clk_init_data){
2130                         .name = "gcc_blsp2_uart4_apps_clk",
2131                         .parent_names = (const char *[]){ "blsp2_uart4_apps_clk_src" },
2132                         .num_parents = 1,
2133                         .flags = CLK_SET_RATE_PARENT,
2134                         .ops = &clk_branch2_ops,
2135                 },
2136         },
2137 };
2138
2139 static struct clk_branch gcc_blsp2_qup5_spi_apps_clk = {
2140         .halt_reg = 0x2e004,
2141         .clkr = {
2142                 .enable_reg = 0x2e004,
2143                 .enable_mask = BIT(0),
2144                 .hw.init = &(struct clk_init_data){
2145                         .name = "gcc_blsp2_qup5_spi_apps_clk",
2146                         .parent_names = (const char *[]){ "blsp2_qup5_spi_apps_clk_src" },
2147                         .num_parents = 1,
2148                         .flags = CLK_SET_RATE_PARENT,
2149                         .ops = &clk_branch2_ops,
2150                 },
2151         },
2152 };
2153
2154 static struct clk_branch gcc_blsp2_qup5_i2c_apps_clk = {
2155         .halt_reg = 0x2e008,
2156         .clkr = {
2157                 .enable_reg = 0x2e008,
2158                 .enable_mask = BIT(0),
2159                 .hw.init = &(struct clk_init_data){
2160                         .name = "gcc_blsp2_qup5_i2c_apps_clk",
2161                         .parent_names = (const char *[]){ "blsp2_qup5_i2c_apps_clk_src" },
2162                         .num_parents = 1,
2163                         .flags = CLK_SET_RATE_PARENT,
2164                         .ops = &clk_branch2_ops,
2165                 },
2166         },
2167 };
2168
2169 static struct clk_branch gcc_blsp2_uart5_apps_clk = {
2170         .halt_reg = 0x2f004,
2171         .clkr = {
2172                 .enable_reg = 0x2f004,
2173                 .enable_mask = BIT(0),
2174                 .hw.init = &(struct clk_init_data){
2175                         .name = "gcc_blsp2_uart5_apps_clk",
2176                         .parent_names = (const char *[]){ "blsp2_uart5_apps_clk_src" },
2177                         .num_parents = 1,
2178                         .flags = CLK_SET_RATE_PARENT,
2179                         .ops = &clk_branch2_ops,
2180                 },
2181         },
2182 };
2183
2184 static struct clk_branch gcc_blsp2_qup6_spi_apps_clk = {
2185         .halt_reg = 0x30004,
2186         .clkr = {
2187                 .enable_reg = 0x30004,
2188                 .enable_mask = BIT(0),
2189                 .hw.init = &(struct clk_init_data){
2190                         .name = "gcc_blsp2_qup6_spi_apps_clk",
2191                         .parent_names = (const char *[]){ "blsp2_qup6_spi_apps_clk_src" },
2192                         .num_parents = 1,
2193                         .flags = CLK_SET_RATE_PARENT,
2194                         .ops = &clk_branch2_ops,
2195                 },
2196         },
2197 };
2198
2199 static struct clk_branch gcc_blsp2_qup6_i2c_apps_clk = {
2200         .halt_reg = 0x30008,
2201         .clkr = {
2202                 .enable_reg = 0x30008,
2203                 .enable_mask = BIT(0),
2204                 .hw.init = &(struct clk_init_data){
2205                         .name = "gcc_blsp2_qup6_i2c_apps_clk",
2206                         .parent_names = (const char *[]){ "blsp2_qup6_i2c_apps_clk_src" },
2207                         .num_parents = 1,
2208                         .flags = CLK_SET_RATE_PARENT,
2209                         .ops = &clk_branch2_ops,
2210                 },
2211         },
2212 };
2213
2214 static struct clk_branch gcc_blsp2_uart6_apps_clk = {
2215         .halt_reg = 0x31004,
2216         .clkr = {
2217                 .enable_reg = 0x31004,
2218                 .enable_mask = BIT(0),
2219                 .hw.init = &(struct clk_init_data){
2220                         .name = "gcc_blsp2_uart6_apps_clk",
2221                         .parent_names = (const char *[]){ "blsp2_uart6_apps_clk_src" },
2222                         .num_parents = 1,
2223                         .flags = CLK_SET_RATE_PARENT,
2224                         .ops = &clk_branch2_ops,
2225                 },
2226         },
2227 };
2228
2229 static struct clk_branch gcc_pdm_ahb_clk = {
2230         .halt_reg = 0x33004,
2231         .clkr = {
2232                 .enable_reg = 0x33004,
2233                 .enable_mask = BIT(0),
2234                 .hw.init = &(struct clk_init_data){
2235                         .name = "gcc_pdm_ahb_clk",
2236                         .parent_names = (const char *[]){ "periph_noc_clk_src" },
2237                         .num_parents = 1,
2238                         .flags = CLK_SET_RATE_PARENT,
2239                         .ops = &clk_branch2_ops,
2240                 },
2241         },
2242 };
2243
2244 static struct clk_branch gcc_pdm2_clk = {
2245         .halt_reg = 0x3300c,
2246         .clkr = {
2247                 .enable_reg = 0x3300c,
2248                 .enable_mask = BIT(0),
2249                 .hw.init = &(struct clk_init_data){
2250                         .name = "gcc_pdm2_clk",
2251                         .parent_names = (const char *[]){ "pdm2_clk_src" },
2252                         .num_parents = 1,
2253                         .flags = CLK_SET_RATE_PARENT,
2254                         .ops = &clk_branch2_ops,
2255                 },
2256         },
2257 };
2258
2259 static struct clk_branch gcc_prng_ahb_clk = {
2260         .halt_reg = 0x34004,
2261         .halt_check = BRANCH_HALT_VOTED,
2262         .clkr = {
2263                 .enable_reg = 0x52004,
2264                 .enable_mask = BIT(13),
2265                 .hw.init = &(struct clk_init_data){
2266                         .name = "gcc_prng_ahb_clk",
2267                         .parent_names = (const char *[]){ "config_noc_clk_src" },
2268                         .num_parents = 1,
2269                         .flags = CLK_SET_RATE_PARENT,
2270                         .ops = &clk_branch2_ops,
2271                 },
2272         },
2273 };
2274
2275 static struct clk_branch gcc_tsif_ahb_clk = {
2276         .halt_reg = 0x36004,
2277         .clkr = {
2278                 .enable_reg = 0x36004,
2279                 .enable_mask = BIT(0),
2280                 .hw.init = &(struct clk_init_data){
2281                         .name = "gcc_tsif_ahb_clk",
2282                         .parent_names = (const char *[]){ "periph_noc_clk_src" },
2283                         .num_parents = 1,
2284                         .flags = CLK_SET_RATE_PARENT,
2285                         .ops = &clk_branch2_ops,
2286                 },
2287         },
2288 };
2289
2290 static struct clk_branch gcc_tsif_ref_clk = {
2291         .halt_reg = 0x36008,
2292         .clkr = {
2293                 .enable_reg = 0x36008,
2294                 .enable_mask = BIT(0),
2295                 .hw.init = &(struct clk_init_data){
2296                         .name = "gcc_tsif_ref_clk",
2297                         .parent_names = (const char *[]){ "tsif_ref_clk_src" },
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_tsif_inactivity_timers_clk = {
2306         .halt_reg = 0x3600c,
2307         .clkr = {
2308                 .enable_reg = 0x3600c,
2309                 .enable_mask = BIT(0),
2310                 .hw.init = &(struct clk_init_data){
2311                         .name = "gcc_tsif_inactivity_timers_clk",
2312                         .parent_names = (const char *[]){ "gcc_sleep_clk_src" },
2313                         .num_parents = 1,
2314                         .flags = CLK_SET_RATE_PARENT,
2315                         .ops = &clk_branch2_ops,
2316                 },
2317         },
2318 };
2319
2320 static struct clk_branch gcc_boot_rom_ahb_clk = {
2321         .halt_reg = 0x38004,
2322         .halt_check = BRANCH_HALT_VOTED,
2323         .clkr = {
2324                 .enable_reg = 0x52004,
2325                 .enable_mask = BIT(10),
2326                 .hw.init = &(struct clk_init_data){
2327                         .name = "gcc_boot_rom_ahb_clk",
2328                         .parent_names = (const char *[]){ "config_noc_clk_src" },
2329                         .num_parents = 1,
2330                         .flags = CLK_SET_RATE_PARENT,
2331                         .ops = &clk_branch2_ops,
2332                 },
2333         },
2334 };
2335
2336 static struct clk_branch gcc_bimc_gfx_clk = {
2337         .halt_reg = 0x46018,
2338         .clkr = {
2339                 .enable_reg = 0x46018,
2340                 .enable_mask = BIT(0),
2341                 .hw.init = &(struct clk_init_data){
2342                         .name = "gcc_bimc_gfx_clk",
2343                         .flags = CLK_SET_RATE_PARENT,
2344                         .ops = &clk_branch2_ops,
2345                 },
2346         },
2347 };
2348
2349 static struct clk_branch gcc_hmss_rbcpr_clk = {
2350         .halt_reg = 0x4800c,
2351         .clkr = {
2352                 .enable_reg = 0x4800c,
2353                 .enable_mask = BIT(0),
2354                 .hw.init = &(struct clk_init_data){
2355                         .name = "gcc_hmss_rbcpr_clk",
2356                         .parent_names = (const char *[]){ "hmss_rbcpr_clk_src" },
2357                         .num_parents = 1,
2358                         .flags = CLK_SET_RATE_PARENT,
2359                         .ops = &clk_branch2_ops,
2360                 },
2361         },
2362 };
2363
2364 static struct clk_branch gcc_gp1_clk = {
2365         .halt_reg = 0x64000,
2366         .clkr = {
2367                 .enable_reg = 0x64000,
2368                 .enable_mask = BIT(0),
2369                 .hw.init = &(struct clk_init_data){
2370                         .name = "gcc_gp1_clk",
2371                         .parent_names = (const char *[]){ "gp1_clk_src" },
2372                         .num_parents = 1,
2373                         .flags = CLK_SET_RATE_PARENT,
2374                         .ops = &clk_branch2_ops,
2375                 },
2376         },
2377 };
2378
2379 static struct clk_branch gcc_gp2_clk = {
2380         .halt_reg = 0x65000,
2381         .clkr = {
2382                 .enable_reg = 0x65000,
2383                 .enable_mask = BIT(0),
2384                 .hw.init = &(struct clk_init_data){
2385                         .name = "gcc_gp2_clk",
2386                         .parent_names = (const char *[]){ "gp2_clk_src" },
2387                         .num_parents = 1,
2388                         .flags = CLK_SET_RATE_PARENT,
2389                         .ops = &clk_branch2_ops,
2390                 },
2391         },
2392 };
2393
2394 static struct clk_branch gcc_gp3_clk = {
2395         .halt_reg = 0x66000,
2396         .clkr = {
2397                 .enable_reg = 0x66000,
2398                 .enable_mask = BIT(0),
2399                 .hw.init = &(struct clk_init_data){
2400                         .name = "gcc_gp3_clk",
2401                         .parent_names = (const char *[]){ "gp3_clk_src" },
2402                         .num_parents = 1,
2403                         .flags = CLK_SET_RATE_PARENT,
2404                         .ops = &clk_branch2_ops,
2405                 },
2406         },
2407 };
2408
2409 static struct clk_branch gcc_pcie_0_slv_axi_clk = {
2410         .halt_reg = 0x6b008,
2411         .clkr = {
2412                 .enable_reg = 0x6b008,
2413                 .enable_mask = BIT(0),
2414                 .hw.init = &(struct clk_init_data){
2415                         .name = "gcc_pcie_0_slv_axi_clk",
2416                         .parent_names = (const char *[]){ "system_noc_clk_src" },
2417                         .num_parents = 1,
2418                         .flags = CLK_SET_RATE_PARENT,
2419                         .ops = &clk_branch2_ops,
2420                 },
2421         },
2422 };
2423
2424 static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
2425         .halt_reg = 0x6b00c,
2426         .clkr = {
2427                 .enable_reg = 0x6b00c,
2428                 .enable_mask = BIT(0),
2429                 .hw.init = &(struct clk_init_data){
2430                         .name = "gcc_pcie_0_mstr_axi_clk",
2431                         .parent_names = (const char *[]){ "system_noc_clk_src" },
2432                         .num_parents = 1,
2433                         .flags = CLK_SET_RATE_PARENT,
2434                         .ops = &clk_branch2_ops,
2435                 },
2436         },
2437 };
2438
2439 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
2440         .halt_reg = 0x6b010,
2441         .clkr = {
2442                 .enable_reg = 0x6b010,
2443                 .enable_mask = BIT(0),
2444                 .hw.init = &(struct clk_init_data){
2445                         .name = "gcc_pcie_0_cfg_ahb_clk",
2446                         .parent_names = (const char *[]){ "config_noc_clk_src" },
2447                         .num_parents = 1,
2448                         .flags = CLK_SET_RATE_PARENT,
2449                         .ops = &clk_branch2_ops,
2450                 },
2451         },
2452 };
2453
2454 static struct clk_branch gcc_pcie_0_aux_clk = {
2455         .halt_reg = 0x6b014,
2456         .clkr = {
2457                 .enable_reg = 0x6b014,
2458                 .enable_mask = BIT(0),
2459                 .hw.init = &(struct clk_init_data){
2460                         .name = "gcc_pcie_0_aux_clk",
2461                         .parent_names = (const char *[]){ "pcie_aux_clk_src" },
2462                         .num_parents = 1,
2463                         .flags = CLK_SET_RATE_PARENT,
2464                         .ops = &clk_branch2_ops,
2465                 },
2466         },
2467 };
2468
2469 static struct clk_branch gcc_pcie_0_pipe_clk = {
2470         .halt_reg = 0x6b018,
2471         .clkr = {
2472                 .enable_reg = 0x6b018,
2473                 .enable_mask = BIT(0),
2474                 .hw.init = &(struct clk_init_data){
2475                         .name = "gcc_pcie_0_pipe_clk",
2476                         .parent_names = (const char *[]){ "pcie_0_pipe_clk_src" },
2477                         .num_parents = 1,
2478                         .flags = CLK_SET_RATE_PARENT,
2479                         .ops = &clk_branch2_ops,
2480                 },
2481         },
2482 };
2483
2484 static struct clk_branch gcc_pcie_1_slv_axi_clk = {
2485         .halt_reg = 0x6d008,
2486         .clkr = {
2487                 .enable_reg = 0x6d008,
2488                 .enable_mask = BIT(0),
2489                 .hw.init = &(struct clk_init_data){
2490                         .name = "gcc_pcie_1_slv_axi_clk",
2491                         .parent_names = (const char *[]){ "system_noc_clk_src" },
2492                         .num_parents = 1,
2493                         .flags = CLK_SET_RATE_PARENT,
2494                         .ops = &clk_branch2_ops,
2495                 },
2496         },
2497 };
2498
2499 static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
2500         .halt_reg = 0x6d00c,
2501         .clkr = {
2502                 .enable_reg = 0x6d00c,
2503                 .enable_mask = BIT(0),
2504                 .hw.init = &(struct clk_init_data){
2505                         .name = "gcc_pcie_1_mstr_axi_clk",
2506                         .parent_names = (const char *[]){ "system_noc_clk_src" },
2507                         .num_parents = 1,
2508                         .flags = CLK_SET_RATE_PARENT,
2509                         .ops = &clk_branch2_ops,
2510                 },
2511         },
2512 };
2513
2514 static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
2515         .halt_reg = 0x6d010,
2516         .clkr = {
2517                 .enable_reg = 0x6d010,
2518                 .enable_mask = BIT(0),
2519                 .hw.init = &(struct clk_init_data){
2520                         .name = "gcc_pcie_1_cfg_ahb_clk",
2521                         .parent_names = (const char *[]){ "config_noc_clk_src" },
2522                         .num_parents = 1,
2523                         .flags = CLK_SET_RATE_PARENT,
2524                         .ops = &clk_branch2_ops,
2525                 },
2526         },
2527 };
2528
2529 static struct clk_branch gcc_pcie_1_aux_clk = {
2530         .halt_reg = 0x6d014,
2531         .clkr = {
2532                 .enable_reg = 0x6d014,
2533                 .enable_mask = BIT(0),
2534                 .hw.init = &(struct clk_init_data){
2535                         .name = "gcc_pcie_1_aux_clk",
2536                         .parent_names = (const char *[]){ "pcie_aux_clk_src" },
2537                         .num_parents = 1,
2538                         .flags = CLK_SET_RATE_PARENT,
2539                         .ops = &clk_branch2_ops,
2540                 },
2541         },
2542 };
2543
2544 static struct clk_branch gcc_pcie_1_pipe_clk = {
2545         .halt_reg = 0x6d018,
2546         .clkr = {
2547                 .enable_reg = 0x6d018,
2548                 .enable_mask = BIT(0),
2549                 .hw.init = &(struct clk_init_data){
2550                         .name = "gcc_pcie_1_pipe_clk",
2551                         .parent_names = (const char *[]){ "pcie_1_pipe_clk_src" },
2552                         .num_parents = 1,
2553                         .flags = CLK_SET_RATE_PARENT,
2554                         .ops = &clk_branch2_ops,
2555                 },
2556         },
2557 };
2558
2559 static struct clk_branch gcc_pcie_2_slv_axi_clk = {
2560         .halt_reg = 0x6e008,
2561         .clkr = {
2562                 .enable_reg = 0x6e008,
2563                 .enable_mask = BIT(0),
2564                 .hw.init = &(struct clk_init_data){
2565                         .name = "gcc_pcie_2_slv_axi_clk",
2566                         .parent_names = (const char *[]){ "system_noc_clk_src" },
2567                         .num_parents = 1,
2568                         .flags = CLK_SET_RATE_PARENT,
2569                         .ops = &clk_branch2_ops,
2570                 },
2571         },
2572 };
2573
2574 static struct clk_branch gcc_pcie_2_mstr_axi_clk = {
2575         .halt_reg = 0x6e00c,
2576         .clkr = {
2577                 .enable_reg = 0x6e00c,
2578                 .enable_mask = BIT(0),
2579                 .hw.init = &(struct clk_init_data){
2580                         .name = "gcc_pcie_2_mstr_axi_clk",
2581                         .parent_names = (const char *[]){ "system_noc_clk_src" },
2582                         .num_parents = 1,
2583                         .flags = CLK_SET_RATE_PARENT,
2584                         .ops = &clk_branch2_ops,
2585                 },
2586         },
2587 };
2588
2589 static struct clk_branch gcc_pcie_2_cfg_ahb_clk = {
2590         .halt_reg = 0x6e010,
2591         .clkr = {
2592                 .enable_reg = 0x6e010,
2593                 .enable_mask = BIT(0),
2594                 .hw.init = &(struct clk_init_data){
2595                         .name = "gcc_pcie_2_cfg_ahb_clk",
2596                         .parent_names = (const char *[]){ "config_noc_clk_src" },
2597                         .num_parents = 1,
2598                         .flags = CLK_SET_RATE_PARENT,
2599                         .ops = &clk_branch2_ops,
2600                 },
2601         },
2602 };
2603
2604 static struct clk_branch gcc_pcie_2_aux_clk = {
2605         .halt_reg = 0x6e014,
2606         .clkr = {
2607                 .enable_reg = 0x6e014,
2608                 .enable_mask = BIT(0),
2609                 .hw.init = &(struct clk_init_data){
2610                         .name = "gcc_pcie_2_aux_clk",
2611                         .parent_names = (const char *[]){ "pcie_aux_clk_src" },
2612                         .num_parents = 1,
2613                         .flags = CLK_SET_RATE_PARENT,
2614                         .ops = &clk_branch2_ops,
2615                 },
2616         },
2617 };
2618
2619 static struct clk_branch gcc_pcie_2_pipe_clk = {
2620         .halt_reg = 0x6e018,
2621         .clkr = {
2622                 .enable_reg = 0x6e018,
2623                 .enable_mask = BIT(0),
2624                 .hw.init = &(struct clk_init_data){
2625                         .name = "gcc_pcie_2_pipe_clk",
2626                         .parent_names = (const char *[]){ "pcie_2_pipe_clk_src" },
2627                         .num_parents = 1,
2628                         .flags = CLK_SET_RATE_PARENT,
2629                         .ops = &clk_branch2_ops,
2630                 },
2631         },
2632 };
2633
2634 static struct clk_branch gcc_pcie_phy_cfg_ahb_clk = {
2635         .halt_reg = 0x6f004,
2636         .clkr = {
2637                 .enable_reg = 0x6f004,
2638                 .enable_mask = BIT(0),
2639                 .hw.init = &(struct clk_init_data){
2640                         .name = "gcc_pcie_phy_cfg_ahb_clk",
2641                         .parent_names = (const char *[]){ "config_noc_clk_src" },
2642                         .num_parents = 1,
2643                         .flags = CLK_SET_RATE_PARENT,
2644                         .ops = &clk_branch2_ops,
2645                 },
2646         },
2647 };
2648
2649 static struct clk_branch gcc_pcie_phy_aux_clk = {
2650         .halt_reg = 0x6f008,
2651         .clkr = {
2652                 .enable_reg = 0x6f008,
2653                 .enable_mask = BIT(0),
2654                 .hw.init = &(struct clk_init_data){
2655                         .name = "gcc_pcie_phy_aux_clk",
2656                         .parent_names = (const char *[]){ "pcie_aux_clk_src" },
2657                         .num_parents = 1,
2658                         .flags = CLK_SET_RATE_PARENT,
2659                         .ops = &clk_branch2_ops,
2660                 },
2661         },
2662 };
2663
2664 static struct clk_branch gcc_ufs_axi_clk = {
2665         .halt_reg = 0x75008,
2666         .clkr = {
2667                 .enable_reg = 0x75008,
2668                 .enable_mask = BIT(0),
2669                 .hw.init = &(struct clk_init_data){
2670                         .name = "gcc_ufs_axi_clk",
2671                         .parent_names = (const char *[]){ "ufs_axi_clk_src" },
2672                         .num_parents = 1,
2673                         .flags = CLK_SET_RATE_PARENT,
2674                         .ops = &clk_branch2_ops,
2675                 },
2676         },
2677 };
2678
2679 static struct clk_branch gcc_ufs_ahb_clk = {
2680         .halt_reg = 0x7500c,
2681         .clkr = {
2682                 .enable_reg = 0x7500c,
2683                 .enable_mask = BIT(0),
2684                 .hw.init = &(struct clk_init_data){
2685                         .name = "gcc_ufs_ahb_clk",
2686                         .parent_names = (const char *[]){ "config_noc_clk_src" },
2687                         .num_parents = 1,
2688                         .flags = CLK_SET_RATE_PARENT,
2689                         .ops = &clk_branch2_ops,
2690                 },
2691         },
2692 };
2693
2694 static struct clk_fixed_factor ufs_tx_cfg_clk_src = {
2695         .mult = 1,
2696         .div = 16,
2697         .hw.init = &(struct clk_init_data){
2698                 .name = "ufs_tx_cfg_clk_src",
2699                 .parent_names = (const char *[]){ "ufs_axi_clk_src" },
2700                 .num_parents = 1,
2701                 .flags = CLK_SET_RATE_PARENT,
2702                 .ops = &clk_fixed_factor_ops,
2703         },
2704 };
2705
2706 static struct clk_branch gcc_ufs_tx_cfg_clk = {
2707         .halt_reg = 0x75010,
2708         .clkr = {
2709                 .enable_reg = 0x75010,
2710                 .enable_mask = BIT(0),
2711                 .hw.init = &(struct clk_init_data){
2712                         .name = "gcc_ufs_tx_cfg_clk",
2713                         .parent_names = (const char *[]){ "ufs_tx_cfg_clk_src" },
2714                         .num_parents = 1,
2715                         .flags = CLK_SET_RATE_PARENT,
2716                         .ops = &clk_branch2_ops,
2717                 },
2718         },
2719 };
2720
2721 static struct clk_fixed_factor ufs_rx_cfg_clk_src = {
2722         .mult = 1,
2723         .div = 16,
2724         .hw.init = &(struct clk_init_data){
2725                 .name = "ufs_rx_cfg_clk_src",
2726                 .parent_names = (const char *[]){ "ufs_axi_clk_src" },
2727                 .num_parents = 1,
2728                 .flags = CLK_SET_RATE_PARENT,
2729                 .ops = &clk_fixed_factor_ops,
2730         },
2731 };
2732
2733 static struct clk_branch gcc_ufs_rx_cfg_clk = {
2734         .halt_reg = 0x75014,
2735         .clkr = {
2736                 .enable_reg = 0x75014,
2737                 .enable_mask = BIT(0),
2738                 .hw.init = &(struct clk_init_data){
2739                         .name = "gcc_ufs_rx_cfg_clk",
2740                         .parent_names = (const char *[]){ "ufs_rx_cfg_clk_src" },
2741                         .num_parents = 1,
2742                         .flags = CLK_SET_RATE_PARENT,
2743                         .ops = &clk_branch2_ops,
2744                 },
2745         },
2746 };
2747
2748 static struct clk_branch gcc_ufs_tx_symbol_0_clk = {
2749         .halt_reg = 0x75018,
2750         .clkr = {
2751                 .enable_reg = 0x75018,
2752                 .enable_mask = BIT(0),
2753                 .hw.init = &(struct clk_init_data){
2754                         .name = "gcc_ufs_tx_symbol_0_clk",
2755                         .parent_names = (const char *[]){ "ufs_tx_symbol_0_clk_src" },
2756                         .num_parents = 1,
2757                         .flags = CLK_SET_RATE_PARENT,
2758                         .ops = &clk_branch2_ops,
2759                 },
2760         },
2761 };
2762
2763 static struct clk_branch gcc_ufs_rx_symbol_0_clk = {
2764         .halt_reg = 0x7501c,
2765         .clkr = {
2766                 .enable_reg = 0x7501c,
2767                 .enable_mask = BIT(0),
2768                 .hw.init = &(struct clk_init_data){
2769                         .name = "gcc_ufs_rx_symbol_0_clk",
2770                         .parent_names = (const char *[]){ "ufs_rx_symbol_0_clk_src" },
2771                         .num_parents = 1,
2772                         .flags = CLK_SET_RATE_PARENT,
2773                         .ops = &clk_branch2_ops,
2774                 },
2775         },
2776 };
2777
2778 static struct clk_branch gcc_ufs_rx_symbol_1_clk = {
2779         .halt_reg = 0x75020,
2780         .clkr = {
2781                 .enable_reg = 0x75020,
2782                 .enable_mask = BIT(0),
2783                 .hw.init = &(struct clk_init_data){
2784                         .name = "gcc_ufs_rx_symbol_1_clk",
2785                         .parent_names = (const char *[]){ "ufs_rx_symbol_1_clk_src" },
2786                         .num_parents = 1,
2787                         .flags = CLK_SET_RATE_PARENT,
2788                         .ops = &clk_branch2_ops,
2789                 },
2790         },
2791 };
2792
2793 static struct clk_fixed_factor ufs_ice_core_postdiv_clk_src = {
2794         .mult = 1,
2795         .div = 2,
2796         .hw.init = &(struct clk_init_data){
2797                 .name = "ufs_ice_core_postdiv_clk_src",
2798                 .parent_names = (const char *[]){ "ufs_ice_core_clk_src" },
2799                 .num_parents = 1,
2800                 .flags = CLK_SET_RATE_PARENT,
2801                 .ops = &clk_fixed_factor_ops,
2802         },
2803 };
2804
2805 static struct clk_branch gcc_ufs_unipro_core_clk = {
2806         .halt_reg = 0x7600c,
2807         .clkr = {
2808                 .enable_reg = 0x7600c,
2809                 .enable_mask = BIT(0),
2810                 .hw.init = &(struct clk_init_data){
2811                         .name = "gcc_ufs_unipro_core_clk",
2812                         .parent_names = (const char *[]){ "ufs_ice_core_postdiv_clk_src" },
2813                         .num_parents = 1,
2814                         .flags = CLK_SET_RATE_PARENT,
2815                         .ops = &clk_branch2_ops,
2816                 },
2817         },
2818 };
2819
2820 static struct clk_branch gcc_ufs_ice_core_clk = {
2821         .halt_reg = 0x76010,
2822         .clkr = {
2823                 .enable_reg = 0x76010,
2824                 .enable_mask = BIT(0),
2825                 .hw.init = &(struct clk_init_data){
2826                         .name = "gcc_ufs_ice_core_clk",
2827                         .parent_names = (const char *[]){ "ufs_ice_core_clk_src" },
2828                         .num_parents = 1,
2829                         .flags = CLK_SET_RATE_PARENT,
2830                         .ops = &clk_branch2_ops,
2831                 },
2832         },
2833 };
2834
2835 static struct clk_branch gcc_ufs_sys_clk_core_clk = {
2836         .halt_check = BRANCH_HALT_DELAY,
2837         .clkr = {
2838                 .enable_reg = 0x76030,
2839                 .enable_mask = BIT(0),
2840                 .hw.init = &(struct clk_init_data){
2841                         .name = "gcc_ufs_sys_clk_core_clk",
2842                         .ops = &clk_branch2_ops,
2843                 },
2844         },
2845 };
2846
2847 static struct clk_branch gcc_ufs_tx_symbol_clk_core_clk = {
2848         .halt_check = BRANCH_HALT_DELAY,
2849         .clkr = {
2850                 .enable_reg = 0x76034,
2851                 .enable_mask = BIT(0),
2852                 .hw.init = &(struct clk_init_data){
2853                         .name = "gcc_ufs_tx_symbol_clk_core_clk",
2854                         .ops = &clk_branch2_ops,
2855                 },
2856         },
2857 };
2858
2859 static struct clk_branch gcc_aggre0_snoc_axi_clk = {
2860         .halt_reg = 0x81008,
2861         .clkr = {
2862                 .enable_reg = 0x81008,
2863                 .enable_mask = BIT(0),
2864                 .hw.init = &(struct clk_init_data){
2865                         .name = "gcc_aggre0_snoc_axi_clk",
2866                         .parent_names = (const char *[]){ "system_noc_clk_src" },
2867                         .num_parents = 1,
2868                         .flags = CLK_SET_RATE_PARENT,
2869                         .ops = &clk_branch2_ops,
2870                 },
2871         },
2872 };
2873
2874 static struct clk_branch gcc_aggre0_cnoc_ahb_clk = {
2875         .halt_reg = 0x8100c,
2876         .clkr = {
2877                 .enable_reg = 0x8100c,
2878                 .enable_mask = BIT(0),
2879                 .hw.init = &(struct clk_init_data){
2880                         .name = "gcc_aggre0_cnoc_ahb_clk",
2881                         .parent_names = (const char *[]){ "config_noc_clk_src" },
2882                         .num_parents = 1,
2883                         .flags = CLK_SET_RATE_PARENT,
2884                         .ops = &clk_branch2_ops,
2885                 },
2886         },
2887 };
2888
2889 static struct clk_branch gcc_smmu_aggre0_axi_clk = {
2890         .halt_reg = 0x81014,
2891         .clkr = {
2892                 .enable_reg = 0x81014,
2893                 .enable_mask = BIT(0),
2894                 .hw.init = &(struct clk_init_data){
2895                         .name = "gcc_smmu_aggre0_axi_clk",
2896                         .parent_names = (const char *[]){ "system_noc_clk_src" },
2897                         .num_parents = 1,
2898                         .flags = CLK_SET_RATE_PARENT,
2899                         .ops = &clk_branch2_ops,
2900                 },
2901         },
2902 };
2903
2904 static struct clk_branch gcc_smmu_aggre0_ahb_clk = {
2905         .halt_reg = 0x81018,
2906         .clkr = {
2907                 .enable_reg = 0x81018,
2908                 .enable_mask = BIT(0),
2909                 .hw.init = &(struct clk_init_data){
2910                         .name = "gcc_smmu_aggre0_ahb_clk",
2911                         .parent_names = (const char *[]){ "config_noc_clk_src" },
2912                         .num_parents = 1,
2913                         .flags = CLK_SET_RATE_PARENT,
2914                         .ops = &clk_branch2_ops,
2915                 },
2916         },
2917 };
2918
2919 static struct clk_branch gcc_aggre2_ufs_axi_clk = {
2920         .halt_reg = 0x83014,
2921         .clkr = {
2922                 .enable_reg = 0x83014,
2923                 .enable_mask = BIT(0),
2924                 .hw.init = &(struct clk_init_data){
2925                         .name = "gcc_aggre2_ufs_axi_clk",
2926                         .parent_names = (const char *[]){ "ufs_axi_clk_src" },
2927                         .num_parents = 1,
2928                         .flags = CLK_SET_RATE_PARENT,
2929                         .ops = &clk_branch2_ops,
2930                 },
2931         },
2932 };
2933
2934 static struct clk_branch gcc_aggre2_usb3_axi_clk = {
2935         .halt_reg = 0x83018,
2936         .clkr = {
2937                 .enable_reg = 0x83018,
2938                 .enable_mask = BIT(0),
2939                 .hw.init = &(struct clk_init_data){
2940                         .name = "gcc_aggre2_usb3_axi_clk",
2941                         .parent_names = (const char *[]){ "usb30_master_clk_src" },
2942                         .num_parents = 1,
2943                         .flags = CLK_SET_RATE_PARENT,
2944                         .ops = &clk_branch2_ops,
2945                 },
2946         },
2947 };
2948
2949 static struct clk_branch gcc_qspi_ahb_clk = {
2950         .halt_reg = 0x8b004,
2951         .clkr = {
2952                 .enable_reg = 0x8b004,
2953                 .enable_mask = BIT(0),
2954                 .hw.init = &(struct clk_init_data){
2955                         .name = "gcc_qspi_ahb_clk",
2956                         .parent_names = (const char *[]){ "periph_noc_clk_src" },
2957                         .num_parents = 1,
2958                         .flags = CLK_SET_RATE_PARENT,
2959                         .ops = &clk_branch2_ops,
2960                 },
2961         },
2962 };
2963
2964 static struct clk_branch gcc_qspi_ser_clk = {
2965         .halt_reg = 0x8b008,
2966         .clkr = {
2967                 .enable_reg = 0x8b008,
2968                 .enable_mask = BIT(0),
2969                 .hw.init = &(struct clk_init_data){
2970                         .name = "gcc_qspi_ser_clk",
2971                         .parent_names = (const char *[]){ "qspi_ser_clk_src" },
2972                         .num_parents = 1,
2973                         .flags = CLK_SET_RATE_PARENT,
2974                         .ops = &clk_branch2_ops,
2975                 },
2976         },
2977 };
2978
2979 static struct clk_branch gcc_usb3_clkref_clk = {
2980         .halt_reg = 0x8800C,
2981         .clkr = {
2982                 .enable_reg = 0x8800C,
2983                 .enable_mask = BIT(0),
2984                 .hw.init = &(struct clk_init_data){
2985                         .name = "gcc_usb3_clkref_clk",
2986                         .parent_names = (const char *[]){ "xo" },
2987                         .num_parents = 1,
2988                         .ops = &clk_branch2_ops,
2989                 },
2990         },
2991 };
2992
2993 static struct clk_branch gcc_hdmi_clkref_clk = {
2994         .halt_reg = 0x88000,
2995         .clkr = {
2996                 .enable_reg = 0x88000,
2997                 .enable_mask = BIT(0),
2998                 .hw.init = &(struct clk_init_data){
2999                         .name = "gcc_hdmi_clkref_clk",
3000                         .parent_names = (const char *[]){ "xo" },
3001                         .num_parents = 1,
3002                         .ops = &clk_branch2_ops,
3003                 },
3004         },
3005 };
3006
3007 static struct clk_branch gcc_ufs_clkref_clk = {
3008         .halt_reg = 0x88008,
3009         .clkr = {
3010                 .enable_reg = 0x88008,
3011                 .enable_mask = BIT(0),
3012                 .hw.init = &(struct clk_init_data){
3013                         .name = "gcc_ufs_clkref_clk",
3014                         .parent_names = (const char *[]){ "xo" },
3015                         .num_parents = 1,
3016                         .ops = &clk_branch2_ops,
3017                 },
3018         },
3019 };
3020
3021 static struct clk_branch gcc_pcie_clkref_clk = {
3022         .halt_reg = 0x88010,
3023         .clkr = {
3024                 .enable_reg = 0x88010,
3025                 .enable_mask = BIT(0),
3026                 .hw.init = &(struct clk_init_data){
3027                         .name = "gcc_pcie_clkref_clk",
3028                         .parent_names = (const char *[]){ "xo" },
3029                         .num_parents = 1,
3030                         .ops = &clk_branch2_ops,
3031                 },
3032         },
3033 };
3034
3035 static struct clk_branch gcc_rx2_usb2_clkref_clk = {
3036         .halt_reg = 0x88014,
3037         .clkr = {
3038                 .enable_reg = 0x88014,
3039                 .enable_mask = BIT(0),
3040                 .hw.init = &(struct clk_init_data){
3041                         .name = "gcc_rx2_usb2_clkref_clk",
3042                         .parent_names = (const char *[]){ "xo" },
3043                         .num_parents = 1,
3044                         .ops = &clk_branch2_ops,
3045                 },
3046         },
3047 };
3048
3049 static struct clk_branch gcc_rx1_usb2_clkref_clk = {
3050         .halt_reg = 0x88018,
3051         .clkr = {
3052                 .enable_reg = 0x88018,
3053                 .enable_mask = BIT(0),
3054                 .hw.init = &(struct clk_init_data){
3055                         .name = "gcc_rx1_usb2_clkref_clk",
3056                         .parent_names = (const char *[]){ "xo" },
3057                         .num_parents = 1,
3058                         .ops = &clk_branch2_ops,
3059                 },
3060         },
3061 };
3062
3063 static struct clk_hw *gcc_msm8996_hws[] = {
3064         &xo.hw,
3065         &gpll0_early_div.hw,
3066         &ufs_tx_cfg_clk_src.hw,
3067         &ufs_rx_cfg_clk_src.hw,
3068         &ufs_ice_core_postdiv_clk_src.hw,
3069 };
3070
3071 static struct gdsc aggre0_noc_gdsc = {
3072         .gdscr = 0x81004,
3073         .gds_hw_ctrl = 0x81028,
3074         .pd = {
3075                 .name = "aggre0_noc",
3076         },
3077         .pwrsts = PWRSTS_OFF_ON,
3078         .flags = VOTABLE,
3079 };
3080
3081 static struct gdsc hlos1_vote_aggre0_noc_gdsc = {
3082         .gdscr = 0x7d024,
3083         .pd = {
3084                 .name = "hlos1_vote_aggre0_noc",
3085         },
3086         .pwrsts = PWRSTS_OFF_ON,
3087         .flags = VOTABLE,
3088 };
3089
3090 static struct gdsc hlos1_vote_lpass_adsp_gdsc = {
3091         .gdscr = 0x7d034,
3092         .pd = {
3093                 .name = "hlos1_vote_lpass_adsp",
3094         },
3095         .pwrsts = PWRSTS_OFF_ON,
3096         .flags = VOTABLE,
3097 };
3098
3099 static struct gdsc hlos1_vote_lpass_core_gdsc = {
3100         .gdscr = 0x7d038,
3101         .pd = {
3102                 .name = "hlos1_vote_lpass_core",
3103         },
3104         .pwrsts = PWRSTS_OFF_ON,
3105         .flags = VOTABLE,
3106 };
3107
3108 static struct gdsc usb30_gdsc = {
3109         .gdscr = 0xf004,
3110         .pd = {
3111                 .name = "usb30",
3112         },
3113         .pwrsts = PWRSTS_OFF_ON,
3114 };
3115
3116 static struct gdsc pcie0_gdsc = {
3117         .gdscr = 0x6b004,
3118         .pd = {
3119                 .name = "pcie0",
3120         },
3121         .pwrsts = PWRSTS_OFF_ON,
3122 };
3123
3124 static struct gdsc pcie1_gdsc = {
3125         .gdscr = 0x6d004,
3126         .pd = {
3127                 .name = "pcie1",
3128         },
3129         .pwrsts = PWRSTS_OFF_ON,
3130 };
3131
3132 static struct gdsc pcie2_gdsc = {
3133         .gdscr = 0x6e004,
3134         .pd = {
3135                 .name = "pcie2",
3136         },
3137         .pwrsts = PWRSTS_OFF_ON,
3138 };
3139
3140 static struct gdsc ufs_gdsc = {
3141         .gdscr = 0x75004,
3142         .pd = {
3143                 .name = "ufs",
3144         },
3145         .pwrsts = PWRSTS_OFF_ON,
3146 };
3147
3148 static struct clk_regmap *gcc_msm8996_clocks[] = {
3149         [GPLL0_EARLY] = &gpll0_early.clkr,
3150         [GPLL0] = &gpll0.clkr,
3151         [GPLL4_EARLY] = &gpll4_early.clkr,
3152         [GPLL4] = &gpll4.clkr,
3153         [SYSTEM_NOC_CLK_SRC] = &system_noc_clk_src.clkr,
3154         [CONFIG_NOC_CLK_SRC] = &config_noc_clk_src.clkr,
3155         [PERIPH_NOC_CLK_SRC] = &periph_noc_clk_src.clkr,
3156         [USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
3157         [USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
3158         [USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr,
3159         [USB20_MASTER_CLK_SRC] = &usb20_master_clk_src.clkr,
3160         [USB20_MOCK_UTMI_CLK_SRC] = &usb20_mock_utmi_clk_src.clkr,
3161         [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
3162         [SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
3163         [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
3164         [SDCC3_APPS_CLK_SRC] = &sdcc3_apps_clk_src.clkr,
3165         [SDCC4_APPS_CLK_SRC] = &sdcc4_apps_clk_src.clkr,
3166         [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
3167         [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
3168         [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
3169         [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
3170         [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
3171         [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
3172         [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
3173         [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
3174         [BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
3175         [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
3176         [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
3177         [BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
3178         [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
3179         [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
3180         [BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
3181         [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
3182         [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
3183         [BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
3184         [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
3185         [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
3186         [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
3187         [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
3188         [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
3189         [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
3190         [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
3191         [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
3192         [BLSP2_UART3_APPS_CLK_SRC] = &blsp2_uart3_apps_clk_src.clkr,
3193         [BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
3194         [BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
3195         [BLSP2_UART4_APPS_CLK_SRC] = &blsp2_uart4_apps_clk_src.clkr,
3196         [BLSP2_QUP5_SPI_APPS_CLK_SRC] = &blsp2_qup5_spi_apps_clk_src.clkr,
3197         [BLSP2_QUP5_I2C_APPS_CLK_SRC] = &blsp2_qup5_i2c_apps_clk_src.clkr,
3198         [BLSP2_UART5_APPS_CLK_SRC] = &blsp2_uart5_apps_clk_src.clkr,
3199         [BLSP2_QUP6_SPI_APPS_CLK_SRC] = &blsp2_qup6_spi_apps_clk_src.clkr,
3200         [BLSP2_QUP6_I2C_APPS_CLK_SRC] = &blsp2_qup6_i2c_apps_clk_src.clkr,
3201         [BLSP2_UART6_APPS_CLK_SRC] = &blsp2_uart6_apps_clk_src.clkr,
3202         [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
3203         [TSIF_REF_CLK_SRC] = &tsif_ref_clk_src.clkr,
3204         [GCC_SLEEP_CLK_SRC] = &gcc_sleep_clk_src.clkr,
3205         [HMSS_RBCPR_CLK_SRC] = &hmss_rbcpr_clk_src.clkr,
3206         [HMSS_GPLL0_CLK_SRC] = &hmss_gpll0_clk_src.clkr,
3207         [GP1_CLK_SRC] = &gp1_clk_src.clkr,
3208         [GP2_CLK_SRC] = &gp2_clk_src.clkr,
3209         [GP3_CLK_SRC] = &gp3_clk_src.clkr,
3210         [PCIE_AUX_CLK_SRC] = &pcie_aux_clk_src.clkr,
3211         [UFS_AXI_CLK_SRC] = &ufs_axi_clk_src.clkr,
3212         [UFS_ICE_CORE_CLK_SRC] = &ufs_ice_core_clk_src.clkr,
3213         [QSPI_SER_CLK_SRC] = &qspi_ser_clk_src.clkr,
3214         [GCC_SYS_NOC_USB3_AXI_CLK] = &gcc_sys_noc_usb3_axi_clk.clkr,
3215         [GCC_SYS_NOC_UFS_AXI_CLK] = &gcc_sys_noc_ufs_axi_clk.clkr,
3216         [GCC_PERIPH_NOC_USB20_AHB_CLK] = &gcc_periph_noc_usb20_ahb_clk.clkr,
3217         [GCC_MMSS_NOC_CFG_AHB_CLK] = &gcc_mmss_noc_cfg_ahb_clk.clkr,
3218         [GCC_MMSS_BIMC_GFX_CLK] = &gcc_mmss_bimc_gfx_clk.clkr,
3219         [GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
3220         [GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,
3221         [GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
3222         [GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr,
3223         [GCC_USB3_PHY_PIPE_CLK] = &gcc_usb3_phy_pipe_clk.clkr,
3224         [GCC_USB20_MASTER_CLK] = &gcc_usb20_master_clk.clkr,
3225         [GCC_USB20_SLEEP_CLK] = &gcc_usb20_sleep_clk.clkr,
3226         [GCC_USB20_MOCK_UTMI_CLK] = &gcc_usb20_mock_utmi_clk.clkr,
3227         [GCC_USB_PHY_CFG_AHB2PHY_CLK] = &gcc_usb_phy_cfg_ahb2phy_clk.clkr,
3228         [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
3229         [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
3230         [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
3231         [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3232         [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3233         [GCC_SDCC3_APPS_CLK] = &gcc_sdcc3_apps_clk.clkr,
3234         [GCC_SDCC3_AHB_CLK] = &gcc_sdcc3_ahb_clk.clkr,
3235         [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
3236         [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
3237         [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
3238         [GCC_BLSP1_SLEEP_CLK] = &gcc_blsp1_sleep_clk.clkr,
3239         [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
3240         [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
3241         [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
3242         [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
3243         [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
3244         [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
3245         [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
3246         [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
3247         [GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
3248         [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
3249         [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
3250         [GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
3251         [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
3252         [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
3253         [GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
3254         [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
3255         [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
3256         [GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
3257         [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
3258         [GCC_BLSP2_SLEEP_CLK] = &gcc_blsp2_sleep_clk.clkr,
3259         [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
3260         [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
3261         [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
3262         [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
3263         [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
3264         [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
3265         [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
3266         [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
3267         [GCC_BLSP2_UART3_APPS_CLK] = &gcc_blsp2_uart3_apps_clk.clkr,
3268         [GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
3269         [GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
3270         [GCC_BLSP2_UART4_APPS_CLK] = &gcc_blsp2_uart4_apps_clk.clkr,
3271         [GCC_BLSP2_QUP5_SPI_APPS_CLK] = &gcc_blsp2_qup5_spi_apps_clk.clkr,
3272         [GCC_BLSP2_QUP5_I2C_APPS_CLK] = &gcc_blsp2_qup5_i2c_apps_clk.clkr,
3273         [GCC_BLSP2_UART5_APPS_CLK] = &gcc_blsp2_uart5_apps_clk.clkr,
3274         [GCC_BLSP2_QUP6_SPI_APPS_CLK] = &gcc_blsp2_qup6_spi_apps_clk.clkr,
3275         [GCC_BLSP2_QUP6_I2C_APPS_CLK] = &gcc_blsp2_qup6_i2c_apps_clk.clkr,
3276         [GCC_BLSP2_UART6_APPS_CLK] = &gcc_blsp2_uart6_apps_clk.clkr,
3277         [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3278         [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3279         [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3280         [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr,
3281         [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
3282         [GCC_TSIF_INACTIVITY_TIMERS_CLK] = &gcc_tsif_inactivity_timers_clk.clkr,
3283         [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3284         [GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
3285         [GCC_HMSS_RBCPR_CLK] = &gcc_hmss_rbcpr_clk.clkr,
3286         [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3287         [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3288         [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3289         [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
3290         [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
3291         [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
3292         [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
3293         [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
3294         [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
3295         [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
3296         [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
3297         [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
3298         [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
3299         [GCC_PCIE_2_SLV_AXI_CLK] = &gcc_pcie_2_slv_axi_clk.clkr,
3300         [GCC_PCIE_2_MSTR_AXI_CLK] = &gcc_pcie_2_mstr_axi_clk.clkr,
3301         [GCC_PCIE_2_CFG_AHB_CLK] = &gcc_pcie_2_cfg_ahb_clk.clkr,
3302         [GCC_PCIE_2_AUX_CLK] = &gcc_pcie_2_aux_clk.clkr,
3303         [GCC_PCIE_2_PIPE_CLK] = &gcc_pcie_2_pipe_clk.clkr,
3304         [GCC_PCIE_PHY_CFG_AHB_CLK] = &gcc_pcie_phy_cfg_ahb_clk.clkr,
3305         [GCC_PCIE_PHY_AUX_CLK] = &gcc_pcie_phy_aux_clk.clkr,
3306         [GCC_UFS_AXI_CLK] = &gcc_ufs_axi_clk.clkr,
3307         [GCC_UFS_AHB_CLK] = &gcc_ufs_ahb_clk.clkr,
3308         [GCC_UFS_TX_CFG_CLK] = &gcc_ufs_tx_cfg_clk.clkr,
3309         [GCC_UFS_RX_CFG_CLK] = &gcc_ufs_rx_cfg_clk.clkr,
3310         [GCC_UFS_TX_SYMBOL_0_CLK] = &gcc_ufs_tx_symbol_0_clk.clkr,
3311         [GCC_UFS_RX_SYMBOL_0_CLK] = &gcc_ufs_rx_symbol_0_clk.clkr,
3312         [GCC_UFS_RX_SYMBOL_1_CLK] = &gcc_ufs_rx_symbol_1_clk.clkr,
3313         [GCC_UFS_UNIPRO_CORE_CLK] = &gcc_ufs_unipro_core_clk.clkr,
3314         [GCC_UFS_ICE_CORE_CLK] = &gcc_ufs_ice_core_clk.clkr,
3315         [GCC_UFS_SYS_CLK_CORE_CLK] = &gcc_ufs_sys_clk_core_clk.clkr,
3316         [GCC_UFS_TX_SYMBOL_CLK_CORE_CLK] = &gcc_ufs_tx_symbol_clk_core_clk.clkr,
3317         [GCC_AGGRE0_SNOC_AXI_CLK] = &gcc_aggre0_snoc_axi_clk.clkr,
3318         [GCC_AGGRE0_CNOC_AHB_CLK] = &gcc_aggre0_cnoc_ahb_clk.clkr,
3319         [GCC_SMMU_AGGRE0_AXI_CLK] = &gcc_smmu_aggre0_axi_clk.clkr,
3320         [GCC_SMMU_AGGRE0_AHB_CLK] = &gcc_smmu_aggre0_ahb_clk.clkr,
3321         [GCC_AGGRE2_UFS_AXI_CLK] = &gcc_aggre2_ufs_axi_clk.clkr,
3322         [GCC_AGGRE2_USB3_AXI_CLK] = &gcc_aggre2_usb3_axi_clk.clkr,
3323         [GCC_QSPI_AHB_CLK] = &gcc_qspi_ahb_clk.clkr,
3324         [GCC_QSPI_SER_CLK] = &gcc_qspi_ser_clk.clkr,
3325         [GCC_USB3_CLKREF_CLK] = &gcc_usb3_clkref_clk.clkr,
3326         [GCC_HDMI_CLKREF_CLK] = &gcc_hdmi_clkref_clk.clkr,
3327         [GCC_UFS_CLKREF_CLK] = &gcc_ufs_clkref_clk.clkr,
3328         [GCC_PCIE_CLKREF_CLK] = &gcc_pcie_clkref_clk.clkr,
3329         [GCC_RX2_USB2_CLKREF_CLK] = &gcc_rx2_usb2_clkref_clk.clkr,
3330         [GCC_RX1_USB2_CLKREF_CLK] = &gcc_rx1_usb2_clkref_clk.clkr,
3331 };
3332
3333 static struct gdsc *gcc_msm8996_gdscs[] = {
3334         [AGGRE0_NOC_GDSC] = &aggre0_noc_gdsc,
3335         [HLOS1_VOTE_AGGRE0_NOC_GDSC] = &hlos1_vote_aggre0_noc_gdsc,
3336         [HLOS1_VOTE_LPASS_ADSP_GDSC] = &hlos1_vote_lpass_adsp_gdsc,
3337         [HLOS1_VOTE_LPASS_CORE_GDSC] = &hlos1_vote_lpass_core_gdsc,
3338         [USB30_GDSC] = &usb30_gdsc,
3339         [PCIE0_GDSC] = &pcie0_gdsc,
3340         [PCIE1_GDSC] = &pcie1_gdsc,
3341         [PCIE2_GDSC] = &pcie2_gdsc,
3342         [UFS_GDSC] = &ufs_gdsc,
3343 };
3344
3345 static const struct qcom_reset_map gcc_msm8996_resets[] = {
3346         [GCC_SYSTEM_NOC_BCR] = { 0x4000 },
3347         [GCC_CONFIG_NOC_BCR] = { 0x5000 },
3348         [GCC_PERIPH_NOC_BCR] = { 0x6000 },
3349         [GCC_IMEM_BCR] = { 0x8000 },
3350         [GCC_MMSS_BCR] = { 0x9000 },
3351         [GCC_PIMEM_BCR] = { 0x0a000 },
3352         [GCC_QDSS_BCR] = { 0x0c000 },
3353         [GCC_USB_30_BCR] = { 0x0f000 },
3354         [GCC_USB_20_BCR] = { 0x12000 },
3355         [GCC_QUSB2PHY_PRIM_BCR] = { 0x12038 },
3356         [GCC_QUSB2PHY_SEC_BCR] = { 0x1203c },
3357         [GCC_USB3_PHY_BCR] = { 0x50020 },
3358         [GCC_USB3PHY_PHY_BCR] = { 0x50024 },
3359         [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 },
3360         [GCC_SDCC1_BCR] = { 0x13000 },
3361         [GCC_SDCC2_BCR] = { 0x14000 },
3362         [GCC_SDCC3_BCR] = { 0x15000 },
3363         [GCC_SDCC4_BCR] = { 0x16000 },
3364         [GCC_BLSP1_BCR] = { 0x17000 },
3365         [GCC_BLSP1_QUP1_BCR] = { 0x19000 },
3366         [GCC_BLSP1_UART1_BCR] = { 0x1a000 },
3367         [GCC_BLSP1_QUP2_BCR] = { 0x1b000 },
3368         [GCC_BLSP1_UART2_BCR] = { 0x1c000 },
3369         [GCC_BLSP1_QUP3_BCR] = { 0x1d000 },
3370         [GCC_BLSP1_UART3_BCR] = { 0x1e000 },
3371         [GCC_BLSP1_QUP4_BCR] = { 0x1f000 },
3372         [GCC_BLSP1_UART4_BCR] = { 0x20000 },
3373         [GCC_BLSP1_QUP5_BCR] = { 0x21000 },
3374         [GCC_BLSP1_UART5_BCR] = { 0x22000 },
3375         [GCC_BLSP1_QUP6_BCR] = { 0x23000 },
3376         [GCC_BLSP1_UART6_BCR] = { 0x24000 },
3377         [GCC_BLSP2_BCR] = { 0x25000 },
3378         [GCC_BLSP2_QUP1_BCR] = { 0x26000 },
3379         [GCC_BLSP2_UART1_BCR] = { 0x27000 },
3380         [GCC_BLSP2_QUP2_BCR] = { 0x28000 },
3381         [GCC_BLSP2_UART2_BCR] = { 0x29000 },
3382         [GCC_BLSP2_QUP3_BCR] = { 0x2a000 },
3383         [GCC_BLSP2_UART3_BCR] = { 0x2b000 },
3384         [GCC_BLSP2_QUP4_BCR] = { 0x2c000 },
3385         [GCC_BLSP2_UART4_BCR] = { 0x2d000 },
3386         [GCC_BLSP2_QUP5_BCR] = { 0x2e000 },
3387         [GCC_BLSP2_UART5_BCR] = { 0x2f000 },
3388         [GCC_BLSP2_QUP6_BCR] = { 0x30000 },
3389         [GCC_BLSP2_UART6_BCR] = { 0x31000 },
3390         [GCC_PDM_BCR] = { 0x33000 },
3391         [GCC_PRNG_BCR] = { 0x34000 },
3392         [GCC_TSIF_BCR] = { 0x36000 },
3393         [GCC_TCSR_BCR] = { 0x37000 },
3394         [GCC_BOOT_ROM_BCR] = { 0x38000 },
3395         [GCC_MSG_RAM_BCR] = { 0x39000 },
3396         [GCC_TLMM_BCR] = { 0x3a000 },
3397         [GCC_MPM_BCR] = { 0x3b000 },
3398         [GCC_SEC_CTRL_BCR] = { 0x3d000 },
3399         [GCC_SPMI_BCR] = { 0x3f000 },
3400         [GCC_SPDM_BCR] = { 0x40000 },
3401         [GCC_CE1_BCR] = { 0x41000 },
3402         [GCC_BIMC_BCR] = { 0x44000 },
3403         [GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x49000 },
3404         [GCC_SNOC_BUS_TIMEOUT2_BCR] = { 0x49008 },
3405         [GCC_SNOC_BUS_TIMEOUT1_BCR] = { 0x49010 },
3406         [GCC_SNOC_BUS_TIMEOUT3_BCR] = { 0x49018 },
3407         [GCC_SNOC_BUS_TIMEOUT_EXTREF_BCR] = { 0x49020 },
3408         [GCC_PNOC_BUS_TIMEOUT0_BCR] = { 0x4a000 },
3409         [GCC_PNOC_BUS_TIMEOUT1_BCR] = { 0x4a008 },
3410         [GCC_PNOC_BUS_TIMEOUT2_BCR] = { 0x4a010 },
3411         [GCC_PNOC_BUS_TIMEOUT3_BCR] = { 0x4a018 },
3412         [GCC_PNOC_BUS_TIMEOUT4_BCR] = { 0x4a020 },
3413         [GCC_CNOC_BUS_TIMEOUT0_BCR] = { 0x4b000 },
3414         [GCC_CNOC_BUS_TIMEOUT1_BCR] = { 0x4b008 },
3415         [GCC_CNOC_BUS_TIMEOUT2_BCR] = { 0x4b010 },
3416         [GCC_CNOC_BUS_TIMEOUT3_BCR] = { 0x4b018 },
3417         [GCC_CNOC_BUS_TIMEOUT4_BCR] = { 0x4b020 },
3418         [GCC_CNOC_BUS_TIMEOUT5_BCR] = { 0x4b028 },
3419         [GCC_CNOC_BUS_TIMEOUT6_BCR] = { 0x4b030 },
3420         [GCC_CNOC_BUS_TIMEOUT7_BCR] = { 0x4b038 },
3421         [GCC_CNOC_BUS_TIMEOUT8_BCR] = { 0x80000 },
3422         [GCC_CNOC_BUS_TIMEOUT9_BCR] = { 0x80008 },
3423         [GCC_CNOC_BUS_TIMEOUT_EXTREF_BCR] = { 0x80010 },
3424         [GCC_APB2JTAG_BCR] = { 0x4c000 },
3425         [GCC_RBCPR_CX_BCR] = { 0x4e000 },
3426         [GCC_RBCPR_MX_BCR] = { 0x4f000 },
3427         [GCC_PCIE_0_BCR] = { 0x6b000 },
3428         [GCC_PCIE_0_PHY_BCR] = { 0x6c01c },
3429         [GCC_PCIE_1_BCR] = { 0x6d000 },
3430         [GCC_PCIE_1_PHY_BCR] = { 0x6d038 },
3431         [GCC_PCIE_2_BCR] = { 0x6e000 },
3432         [GCC_PCIE_2_PHY_BCR] = { 0x6e038 },
3433         [GCC_PCIE_PHY_BCR] = { 0x6f000 },
3434         [GCC_PCIE_PHY_COM_BCR] = { 0x6f014 },
3435         [GCC_PCIE_PHY_COM_NOCSR_BCR] = { 0x6f00c },
3436         [GCC_DCD_BCR] = { 0x70000 },
3437         [GCC_OBT_ODT_BCR] = { 0x73000 },
3438         [GCC_UFS_BCR] = { 0x75000 },
3439         [GCC_SSC_BCR] = { 0x63000 },
3440         [GCC_VS_BCR] = { 0x7a000 },
3441         [GCC_AGGRE0_NOC_BCR] = { 0x81000 },
3442         [GCC_AGGRE1_NOC_BCR] = { 0x82000 },
3443         [GCC_AGGRE2_NOC_BCR] = { 0x83000 },
3444         [GCC_DCC_BCR] = { 0x84000 },
3445         [GCC_IPA_BCR] = { 0x89000 },
3446         [GCC_QSPI_BCR] = { 0x8b000 },
3447         [GCC_SKL_BCR] = { 0x8c000 },
3448         [GCC_MSMPU_BCR] = { 0x8d000 },
3449         [GCC_MSS_Q6_BCR] = { 0x8e000 },
3450         [GCC_QREFS_VBG_CAL_BCR] = { 0x88020 },
3451 };
3452
3453 static const struct regmap_config gcc_msm8996_regmap_config = {
3454         .reg_bits       = 32,
3455         .reg_stride     = 4,
3456         .val_bits       = 32,
3457         .max_register   = 0x8f010,
3458         .fast_io        = true,
3459 };
3460
3461 static const struct qcom_cc_desc gcc_msm8996_desc = {
3462         .config = &gcc_msm8996_regmap_config,
3463         .clks = gcc_msm8996_clocks,
3464         .num_clks = ARRAY_SIZE(gcc_msm8996_clocks),
3465         .resets = gcc_msm8996_resets,
3466         .num_resets = ARRAY_SIZE(gcc_msm8996_resets),
3467         .gdscs = gcc_msm8996_gdscs,
3468         .num_gdscs = ARRAY_SIZE(gcc_msm8996_gdscs),
3469 };
3470
3471 static const struct of_device_id gcc_msm8996_match_table[] = {
3472         { .compatible = "qcom,gcc-msm8996" },
3473         { }
3474 };
3475 MODULE_DEVICE_TABLE(of, gcc_msm8996_match_table);
3476
3477 static int gcc_msm8996_probe(struct platform_device *pdev)
3478 {
3479         struct device *dev = &pdev->dev;
3480         int i, ret;
3481         struct regmap *regmap;
3482
3483         regmap = qcom_cc_map(pdev, &gcc_msm8996_desc);
3484         if (IS_ERR(regmap))
3485                 return PTR_ERR(regmap);
3486
3487         /*
3488          * Set the HMSS_AHB_CLK_SLEEP_ENA bit to allow the hmss_ahb_clk to be
3489          * turned off by hardware during certain apps low power modes.
3490          */
3491         regmap_update_bits(regmap, 0x52008, BIT(21), BIT(21));
3492
3493         for (i = 0; i < ARRAY_SIZE(gcc_msm8996_hws); i++) {
3494                 ret = devm_clk_hw_register(dev, gcc_msm8996_hws[i]);
3495                 if (ret)
3496                         return ret;
3497         }
3498
3499         return qcom_cc_really_probe(pdev, &gcc_msm8996_desc, regmap);
3500 }
3501
3502 static struct platform_driver gcc_msm8996_driver = {
3503         .probe          = gcc_msm8996_probe,
3504         .driver         = {
3505                 .name   = "gcc-msm8996",
3506                 .of_match_table = gcc_msm8996_match_table,
3507         },
3508 };
3509
3510 static int __init gcc_msm8996_init(void)
3511 {
3512         return platform_driver_register(&gcc_msm8996_driver);
3513 }
3514 core_initcall(gcc_msm8996_init);
3515
3516 static void __exit gcc_msm8996_exit(void)
3517 {
3518         platform_driver_unregister(&gcc_msm8996_driver);
3519 }
3520 module_exit(gcc_msm8996_exit);
3521
3522 MODULE_DESCRIPTION("QCOM GCC MSM8996 Driver");
3523 MODULE_LICENSE("GPL v2");
3524 MODULE_ALIAS("platform:gcc-msm8996");