Merge tag 'mailbox-v5.15' of git://git.linaro.org/landing-teams/working/fujitsu/integ...
[linux-2.6-microblaze.git] / drivers / clk / qcom / gcc-sdm660.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
4  * Copyright (c) 2018, Craig Tatlor.
5  */
6
7 #include <linux/kernel.h>
8 #include <linux/bitops.h>
9 #include <linux/err.h>
10 #include <linux/platform_device.h>
11 #include <linux/module.h>
12 #include <linux/of.h>
13 #include <linux/of_device.h>
14 #include <linux/clk-provider.h>
15 #include <linux/regmap.h>
16 #include <linux/reset-controller.h>
17
18 #include <dt-bindings/clock/qcom,gcc-sdm660.h>
19
20 #include "common.h"
21 #include "clk-regmap.h"
22 #include "clk-alpha-pll.h"
23 #include "clk-rcg.h"
24 #include "clk-branch.h"
25 #include "reset.h"
26 #include "gdsc.h"
27
28 #define F(f, s, h, m, n) { (f), (s), (2 * (h) - 1), (m), (n) }
29
30 enum {
31         P_XO,
32         P_SLEEP_CLK,
33         P_GPLL0,
34         P_GPLL1,
35         P_GPLL4,
36         P_GPLL0_EARLY_DIV,
37         P_GPLL1_EARLY_DIV,
38 };
39
40 static const struct parent_map gcc_parent_map_xo_gpll0_gpll0_early_div[] = {
41         { P_XO, 0 },
42         { P_GPLL0, 1 },
43         { P_GPLL0_EARLY_DIV, 6 },
44 };
45
46 static const char * const gcc_parent_names_xo_gpll0_gpll0_early_div[] = {
47         "xo",
48         "gpll0",
49         "gpll0_early_div",
50 };
51
52 static const struct parent_map gcc_parent_map_xo_gpll0[] = {
53         { P_XO, 0 },
54         { P_GPLL0, 1 },
55 };
56
57 static const char * const gcc_parent_names_xo_gpll0[] = {
58         "xo",
59         "gpll0",
60 };
61
62 static const struct parent_map gcc_parent_map_xo_gpll0_sleep_clk_gpll0_early_div[] = {
63         { P_XO, 0 },
64         { P_GPLL0, 1 },
65         { P_SLEEP_CLK, 5 },
66         { P_GPLL0_EARLY_DIV, 6 },
67 };
68
69 static const char * const gcc_parent_names_xo_gpll0_sleep_clk_gpll0_early_div[] = {
70         "xo",
71         "gpll0",
72         "sleep_clk",
73         "gpll0_early_div",
74 };
75
76 static const struct parent_map gcc_parent_map_xo_sleep_clk[] = {
77         { P_XO, 0 },
78         { P_SLEEP_CLK, 5 },
79 };
80
81 static const char * const gcc_parent_names_xo_sleep_clk[] = {
82         "xo",
83         "sleep_clk",
84 };
85
86 static const struct parent_map gcc_parent_map_xo_gpll4[] = {
87         { P_XO, 0 },
88         { P_GPLL4, 5 },
89 };
90
91 static const char * const gcc_parent_names_xo_gpll4[] = {
92         "xo",
93         "gpll4",
94 };
95
96 static const struct parent_map gcc_parent_map_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div[] = {
97         { P_XO, 0 },
98         { P_GPLL0, 1 },
99         { P_GPLL0_EARLY_DIV, 3 },
100         { P_GPLL1, 4 },
101         { P_GPLL4, 5 },
102         { P_GPLL1_EARLY_DIV, 6 },
103 };
104
105 static const char * const gcc_parent_names_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div[] = {
106         "xo",
107         "gpll0",
108         "gpll0_early_div",
109         "gpll1",
110         "gpll4",
111         "gpll1_early_div",
112 };
113
114 static const struct parent_map gcc_parent_map_xo_gpll0_gpll4_gpll0_early_div[] = {
115         { P_XO, 0 },
116         { P_GPLL0, 1 },
117         { P_GPLL4, 5 },
118         { P_GPLL0_EARLY_DIV, 6 },
119 };
120
121 static const char * const gcc_parent_names_xo_gpll0_gpll4_gpll0_early_div[] = {
122         "xo",
123         "gpll0",
124         "gpll4",
125         "gpll0_early_div",
126 };
127
128 static const struct parent_map gcc_parent_map_xo_gpll0_gpll0_early_div_gpll4[] = {
129         { P_XO, 0 },
130         { P_GPLL0, 1 },
131         { P_GPLL0_EARLY_DIV, 2 },
132         { P_GPLL4, 5 },
133 };
134
135 static const char * const gcc_parent_names_xo_gpll0_gpll0_early_div_gpll4[] = {
136         "xo",
137         "gpll0",
138         "gpll0_early_div",
139         "gpll4",
140 };
141
142 static struct clk_fixed_factor xo = {
143         .mult = 1,
144         .div = 1,
145         .hw.init = &(struct clk_init_data){
146                 .name = "xo",
147                 .parent_names = (const char *[]){ "xo_board" },
148                 .num_parents = 1,
149                 .ops = &clk_fixed_factor_ops,
150         },
151 };
152
153 static struct clk_alpha_pll gpll0_early = {
154         .offset = 0x0,
155         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
156         .clkr = {
157                 .enable_reg = 0x52000,
158                 .enable_mask = BIT(0),
159                 .hw.init = &(struct clk_init_data){
160                         .name = "gpll0_early",
161                         .parent_names = (const char *[]){ "xo" },
162                         .num_parents = 1,
163                         .ops = &clk_alpha_pll_ops,
164                 },
165         },
166 };
167
168 static struct clk_fixed_factor gpll0_early_div = {
169         .mult = 1,
170         .div = 2,
171         .hw.init = &(struct clk_init_data){
172                 .name = "gpll0_early_div",
173                 .parent_names = (const char *[]){ "gpll0_early" },
174                 .num_parents = 1,
175                 .ops = &clk_fixed_factor_ops,
176         },
177 };
178
179 static struct clk_alpha_pll_postdiv gpll0 = {
180         .offset = 0x00000,
181         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
182         .clkr.hw.init = &(struct clk_init_data){
183                 .name = "gpll0",
184                 .parent_names = (const char *[]){ "gpll0_early" },
185                 .num_parents = 1,
186                 .ops = &clk_alpha_pll_postdiv_ops,
187         },
188 };
189
190 static struct clk_alpha_pll gpll1_early = {
191         .offset = 0x1000,
192         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
193         .clkr = {
194                 .enable_reg = 0x52000,
195                 .enable_mask = BIT(1),
196                 .hw.init = &(struct clk_init_data){
197                         .name = "gpll1_early",
198                         .parent_names = (const char *[]){ "xo" },
199                         .num_parents = 1,
200                         .ops = &clk_alpha_pll_ops,
201                 },
202         },
203 };
204
205 static struct clk_fixed_factor gpll1_early_div = {
206         .mult = 1,
207         .div = 2,
208         .hw.init = &(struct clk_init_data){
209                 .name = "gpll1_early_div",
210                 .parent_names = (const char *[]){ "gpll1_early" },
211                 .num_parents = 1,
212                 .ops = &clk_fixed_factor_ops,
213         },
214 };
215
216 static struct clk_alpha_pll_postdiv gpll1 = {
217         .offset = 0x1000,
218         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
219         .clkr.hw.init = &(struct clk_init_data){
220                 .name = "gpll1",
221                 .parent_names = (const char *[]){ "gpll1_early" },
222                 .num_parents = 1,
223                 .ops = &clk_alpha_pll_postdiv_ops,
224         },
225 };
226
227 static struct clk_alpha_pll gpll4_early = {
228         .offset = 0x77000,
229         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
230         .clkr = {
231                 .enable_reg = 0x52000,
232                 .enable_mask = BIT(4),
233                 .hw.init = &(struct clk_init_data){
234                         .name = "gpll4_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_alpha_pll_postdiv gpll4 = {
243         .offset = 0x77000,
244         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
245         .clkr.hw.init = &(struct clk_init_data)
246         {
247                 .name = "gpll4",
248                 .parent_names = (const char *[]) { "gpll4_early" },
249                 .num_parents = 1,
250                 .ops = &clk_alpha_pll_postdiv_ops,
251         },
252 };
253
254 static const struct freq_tbl ftbl_blsp1_qup1_i2c_apps_clk_src[] = {
255         F(19200000, P_XO, 1, 0, 0),
256         F(50000000, P_GPLL0, 12, 0, 0),
257         { }
258 };
259
260 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
261         .cmd_rcgr = 0x19020,
262         .mnd_width = 0,
263         .hid_width = 5,
264         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
265         .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
266         .clkr.hw.init = &(struct clk_init_data){
267                 .name = "blsp1_qup1_i2c_apps_clk_src",
268                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
269                 .num_parents = 3,
270                 .ops = &clk_rcg2_ops,
271         },
272 };
273
274 static const struct freq_tbl ftbl_blsp1_qup1_spi_apps_clk_src[] = {
275         F(960000, P_XO, 10, 1, 2),
276         F(4800000, P_XO, 4, 0, 0),
277         F(9600000, P_XO, 2, 0, 0),
278         F(15000000, P_GPLL0, 10, 1, 4),
279         F(19200000, P_XO, 1, 0, 0),
280         F(25000000, P_GPLL0, 12, 1, 2),
281         F(50000000, P_GPLL0, 12, 0, 0),
282         { }
283 };
284
285 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
286         .cmd_rcgr = 0x1900c,
287         .mnd_width = 8,
288         .hid_width = 5,
289         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
290         .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
291         .clkr.hw.init = &(struct clk_init_data){
292                 .name = "blsp1_qup1_spi_apps_clk_src",
293                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
294                 .num_parents = 3,
295                 .ops = &clk_rcg2_ops,
296         },
297 };
298
299 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
300         .cmd_rcgr = 0x1b020,
301         .mnd_width = 0,
302         .hid_width = 5,
303         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
304         .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
305         .clkr.hw.init = &(struct clk_init_data){
306                 .name = "blsp1_qup2_i2c_apps_clk_src",
307                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
308                 .num_parents = 3,
309                 .ops = &clk_rcg2_ops,
310         },
311 };
312
313 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
314         .cmd_rcgr = 0x1b00c,
315         .mnd_width = 8,
316         .hid_width = 5,
317         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
318         .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
319         .clkr.hw.init = &(struct clk_init_data){
320                 .name = "blsp1_qup2_spi_apps_clk_src",
321                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
322                 .num_parents = 3,
323                 .ops = &clk_rcg2_ops,
324         },
325 };
326
327 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
328         .cmd_rcgr = 0x1d020,
329         .mnd_width = 0,
330         .hid_width = 5,
331         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
332         .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
333         .clkr.hw.init = &(struct clk_init_data){
334                 .name = "blsp1_qup3_i2c_apps_clk_src",
335                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
336                 .num_parents = 3,
337                 .ops = &clk_rcg2_ops,
338         },
339 };
340
341 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
342         .cmd_rcgr = 0x1d00c,
343         .mnd_width = 8,
344         .hid_width = 5,
345         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
346         .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
347         .clkr.hw.init = &(struct clk_init_data){
348                 .name = "blsp1_qup3_spi_apps_clk_src",
349                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
350                 .num_parents = 3,
351                 .ops = &clk_rcg2_ops,
352         },
353 };
354
355 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
356         .cmd_rcgr = 0x1f020,
357         .mnd_width = 0,
358         .hid_width = 5,
359         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
360         .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
361         .clkr.hw.init = &(struct clk_init_data){
362                 .name = "blsp1_qup4_i2c_apps_clk_src",
363                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
364                 .num_parents = 3,
365                 .ops = &clk_rcg2_ops,
366         },
367 };
368
369 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
370         .cmd_rcgr = 0x1f00c,
371         .mnd_width = 8,
372         .hid_width = 5,
373         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
374         .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
375         .clkr.hw.init = &(struct clk_init_data){
376                 .name = "blsp1_qup4_spi_apps_clk_src",
377                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
378                 .num_parents = 3,
379                 .ops = &clk_rcg2_ops,
380         },
381 };
382
383 static const struct freq_tbl ftbl_blsp1_uart1_apps_clk_src[] = {
384         F(3686400, P_GPLL0, 1, 96, 15625),
385         F(7372800, P_GPLL0, 1, 192, 15625),
386         F(14745600, P_GPLL0, 1, 384, 15625),
387         F(16000000, P_GPLL0, 5, 2, 15),
388         F(19200000, P_XO, 1, 0, 0),
389         F(24000000, P_GPLL0, 5, 1, 5),
390         F(32000000, P_GPLL0, 1, 4, 75),
391         F(40000000, P_GPLL0, 15, 0, 0),
392         F(46400000, P_GPLL0, 1, 29, 375),
393         F(48000000, P_GPLL0, 12.5, 0, 0),
394         F(51200000, P_GPLL0, 1, 32, 375),
395         F(56000000, P_GPLL0, 1, 7, 75),
396         F(58982400, P_GPLL0, 1, 1536, 15625),
397         F(60000000, P_GPLL0, 10, 0, 0),
398         F(63157895, P_GPLL0, 9.5, 0, 0),
399         { }
400 };
401
402 static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
403         .cmd_rcgr = 0x1a00c,
404         .mnd_width = 16,
405         .hid_width = 5,
406         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
407         .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
408         .clkr.hw.init = &(struct clk_init_data){
409                 .name = "blsp1_uart1_apps_clk_src",
410                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
411                 .num_parents = 3,
412                 .ops = &clk_rcg2_ops,
413         },
414 };
415
416 static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
417         .cmd_rcgr = 0x1c00c,
418         .mnd_width = 16,
419         .hid_width = 5,
420         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
421         .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
422         .clkr.hw.init = &(struct clk_init_data){
423                 .name = "blsp1_uart2_apps_clk_src",
424                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
425                 .num_parents = 3,
426                 .ops = &clk_rcg2_ops,
427         },
428 };
429
430 static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
431         .cmd_rcgr = 0x26020,
432         .mnd_width = 0,
433         .hid_width = 5,
434         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
435         .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
436         .clkr.hw.init = &(struct clk_init_data){
437                 .name = "blsp2_qup1_i2c_apps_clk_src",
438                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
439                 .num_parents = 3,
440                 .ops = &clk_rcg2_ops,
441         },
442 };
443
444 static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
445         .cmd_rcgr = 0x2600c,
446         .mnd_width = 8,
447         .hid_width = 5,
448         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
449         .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
450         .clkr.hw.init = &(struct clk_init_data){
451                 .name = "blsp2_qup1_spi_apps_clk_src",
452                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
453                 .num_parents = 3,
454                 .ops = &clk_rcg2_ops,
455         },
456 };
457
458 static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
459         .cmd_rcgr = 0x28020,
460         .mnd_width = 0,
461         .hid_width = 5,
462         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
463         .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
464         .clkr.hw.init = &(struct clk_init_data){
465                 .name = "blsp2_qup2_i2c_apps_clk_src",
466                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
467                 .num_parents = 3,
468                 .ops = &clk_rcg2_ops,
469         },
470 };
471
472 static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
473         .cmd_rcgr = 0x2800c,
474         .mnd_width = 8,
475         .hid_width = 5,
476         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
477         .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
478         .clkr.hw.init = &(struct clk_init_data){
479                 .name = "blsp2_qup2_spi_apps_clk_src",
480                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
481                 .num_parents = 3,
482                 .ops = &clk_rcg2_ops,
483         },
484 };
485
486 static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
487         .cmd_rcgr = 0x2a020,
488         .mnd_width = 0,
489         .hid_width = 5,
490         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
491         .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
492         .clkr.hw.init = &(struct clk_init_data){
493                 .name = "blsp2_qup3_i2c_apps_clk_src",
494                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
495                 .num_parents = 3,
496                 .ops = &clk_rcg2_ops,
497         },
498 };
499
500 static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
501         .cmd_rcgr = 0x2a00c,
502         .mnd_width = 8,
503         .hid_width = 5,
504         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
505         .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
506         .clkr.hw.init = &(struct clk_init_data){
507                 .name = "blsp2_qup3_spi_apps_clk_src",
508                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
509                 .num_parents = 3,
510                 .ops = &clk_rcg2_ops,
511         },
512 };
513
514 static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
515         .cmd_rcgr = 0x2c020,
516         .mnd_width = 0,
517         .hid_width = 5,
518         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
519         .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
520         .clkr.hw.init = &(struct clk_init_data){
521                 .name = "blsp2_qup4_i2c_apps_clk_src",
522                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
523                 .num_parents = 3,
524                 .ops = &clk_rcg2_ops,
525         },
526 };
527
528 static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
529         .cmd_rcgr = 0x2c00c,
530         .mnd_width = 8,
531         .hid_width = 5,
532         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
533         .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
534         .clkr.hw.init = &(struct clk_init_data){
535                 .name = "blsp2_qup4_spi_apps_clk_src",
536                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
537                 .num_parents = 3,
538                 .ops = &clk_rcg2_ops,
539         },
540 };
541
542 static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
543         .cmd_rcgr = 0x2700c,
544         .mnd_width = 16,
545         .hid_width = 5,
546         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
547         .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
548         .clkr.hw.init = &(struct clk_init_data){
549                 .name = "blsp2_uart1_apps_clk_src",
550                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
551                 .num_parents = 3,
552                 .ops = &clk_rcg2_ops,
553         },
554 };
555
556 static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
557         .cmd_rcgr = 0x2900c,
558         .mnd_width = 16,
559         .hid_width = 5,
560         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
561         .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
562         .clkr.hw.init = &(struct clk_init_data){
563                 .name = "blsp2_uart2_apps_clk_src",
564                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
565                 .num_parents = 3,
566                 .ops = &clk_rcg2_ops,
567         },
568 };
569
570 static const struct freq_tbl ftbl_gp1_clk_src[] = {
571         F(19200000, P_XO, 1, 0, 0),
572         F(100000000, P_GPLL0, 6, 0, 0),
573         F(200000000, P_GPLL0, 3, 0, 0),
574         { }
575 };
576
577 static struct clk_rcg2 gp1_clk_src = {
578         .cmd_rcgr = 0x64004,
579         .mnd_width = 8,
580         .hid_width = 5,
581         .parent_map = gcc_parent_map_xo_gpll0_sleep_clk_gpll0_early_div,
582         .freq_tbl = ftbl_gp1_clk_src,
583         .clkr.hw.init = &(struct clk_init_data){
584                 .name = "gp1_clk_src",
585                 .parent_names = gcc_parent_names_xo_gpll0_sleep_clk_gpll0_early_div,
586                 .num_parents = 4,
587                 .ops = &clk_rcg2_ops,
588         },
589 };
590
591 static struct clk_rcg2 gp2_clk_src = {
592         .cmd_rcgr = 0x65004,
593         .mnd_width = 8,
594         .hid_width = 5,
595         .parent_map = gcc_parent_map_xo_gpll0_sleep_clk_gpll0_early_div,
596         .freq_tbl = ftbl_gp1_clk_src,
597         .clkr.hw.init = &(struct clk_init_data){
598                 .name = "gp2_clk_src",
599                 .parent_names = gcc_parent_names_xo_gpll0_sleep_clk_gpll0_early_div,
600                 .num_parents = 4,
601                 .ops = &clk_rcg2_ops,
602         },
603 };
604
605 static struct clk_rcg2 gp3_clk_src = {
606         .cmd_rcgr = 0x66004,
607         .mnd_width = 8,
608         .hid_width = 5,
609         .parent_map = gcc_parent_map_xo_gpll0_sleep_clk_gpll0_early_div,
610         .freq_tbl = ftbl_gp1_clk_src,
611         .clkr.hw.init = &(struct clk_init_data){
612                 .name = "gp3_clk_src",
613                 .parent_names = gcc_parent_names_xo_gpll0_sleep_clk_gpll0_early_div,
614                 .num_parents = 4,
615                 .ops = &clk_rcg2_ops,
616         },
617 };
618
619 static const struct freq_tbl ftbl_hmss_gpll0_clk_src[] = {
620         F(300000000, P_GPLL0, 2, 0, 0),
621         F(600000000, P_GPLL0, 1, 0, 0),
622         { }
623 };
624
625 static struct clk_rcg2 hmss_gpll0_clk_src = {
626         .cmd_rcgr = 0x4805c,
627         .mnd_width = 0,
628         .hid_width = 5,
629         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
630         .freq_tbl = ftbl_hmss_gpll0_clk_src,
631         .clkr.hw.init = &(struct clk_init_data){
632                 .name = "hmss_gpll0_clk_src",
633                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
634                 .num_parents = 3,
635                 .ops = &clk_rcg2_ops,
636         },
637 };
638
639 static const struct freq_tbl ftbl_hmss_gpll4_clk_src[] = {
640         F(384000000, P_GPLL4, 4, 0, 0),
641         F(768000000, P_GPLL4, 2, 0, 0),
642         F(1536000000, P_GPLL4, 1, 0, 0),
643         { }
644 };
645
646 static struct clk_rcg2 hmss_gpll4_clk_src = {
647         .cmd_rcgr = 0x48074,
648         .mnd_width = 0,
649         .hid_width = 5,
650         .parent_map = gcc_parent_map_xo_gpll4,
651         .freq_tbl = ftbl_hmss_gpll4_clk_src,
652         .clkr.hw.init = &(struct clk_init_data){
653                 .name = "hmss_gpll4_clk_src",
654                 .parent_names = gcc_parent_names_xo_gpll4,
655                 .num_parents = 2,
656                 .ops = &clk_rcg2_ops,
657         },
658 };
659
660 static const struct freq_tbl ftbl_hmss_rbcpr_clk_src[] = {
661         F(19200000, P_XO, 1, 0, 0),
662         { }
663 };
664
665 static struct clk_rcg2 hmss_rbcpr_clk_src = {
666         .cmd_rcgr = 0x48044,
667         .mnd_width = 0,
668         .hid_width = 5,
669         .parent_map = gcc_parent_map_xo_gpll0,
670         .freq_tbl = ftbl_hmss_rbcpr_clk_src,
671         .clkr.hw.init = &(struct clk_init_data){
672                 .name = "hmss_rbcpr_clk_src",
673                 .parent_names = gcc_parent_names_xo_gpll0,
674                 .num_parents = 2,
675                 .ops = &clk_rcg2_ops,
676         },
677 };
678
679 static const struct freq_tbl ftbl_pdm2_clk_src[] = {
680         F(60000000, P_GPLL0, 10, 0, 0),
681         { }
682 };
683
684 static struct clk_rcg2 pdm2_clk_src = {
685         .cmd_rcgr = 0x33010,
686         .mnd_width = 0,
687         .hid_width = 5,
688         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
689         .freq_tbl = ftbl_pdm2_clk_src,
690         .clkr.hw.init = &(struct clk_init_data){
691                 .name = "pdm2_clk_src",
692                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
693                 .num_parents = 3,
694                 .ops = &clk_rcg2_ops,
695         },
696 };
697
698 static const struct freq_tbl ftbl_qspi_ser_clk_src[] = {
699         F(19200000, P_XO, 1, 0, 0),
700         F(80200000, P_GPLL1_EARLY_DIV, 5, 0, 0),
701         F(160400000, P_GPLL1, 5, 0, 0),
702         F(267333333, P_GPLL1, 3, 0, 0),
703         { }
704 };
705
706 static struct clk_rcg2 qspi_ser_clk_src = {
707         .cmd_rcgr = 0x4d00c,
708         .mnd_width = 0,
709         .hid_width = 5,
710         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div,
711         .freq_tbl = ftbl_qspi_ser_clk_src,
712         .clkr.hw.init = &(struct clk_init_data){
713                 .name = "qspi_ser_clk_src",
714                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div,
715                 .num_parents = 6,
716                 .ops = &clk_rcg2_ops,
717         },
718 };
719
720 static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
721         F(144000, P_XO, 16, 3, 25),
722         F(400000, P_XO, 12, 1, 4),
723         F(20000000, P_GPLL0_EARLY_DIV, 5, 1, 3),
724         F(25000000, P_GPLL0_EARLY_DIV, 6, 1, 2),
725         F(50000000, P_GPLL0_EARLY_DIV, 6, 0, 0),
726         F(100000000, P_GPLL0, 6, 0, 0),
727         F(192000000, P_GPLL4, 8, 0, 0),
728         F(384000000, P_GPLL4, 4, 0, 0),
729         { }
730 };
731
732 static struct clk_rcg2 sdcc1_apps_clk_src = {
733         .cmd_rcgr = 0x1602c,
734         .mnd_width = 8,
735         .hid_width = 5,
736         .parent_map = gcc_parent_map_xo_gpll0_gpll4_gpll0_early_div,
737         .freq_tbl = ftbl_sdcc1_apps_clk_src,
738         .clkr.hw.init = &(struct clk_init_data){
739                 .name = "sdcc1_apps_clk_src",
740                 .parent_names = gcc_parent_names_xo_gpll0_gpll4_gpll0_early_div,
741                 .num_parents = 4,
742                 .ops = &clk_rcg2_ops,
743         },
744 };
745
746 static const struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = {
747         F(75000000, P_GPLL0_EARLY_DIV, 4, 0, 0),
748         F(150000000, P_GPLL0, 4, 0, 0),
749         F(200000000, P_GPLL0, 3, 0, 0),
750         F(300000000, P_GPLL0, 2, 0, 0),
751         { }
752 };
753
754 static struct clk_rcg2 sdcc1_ice_core_clk_src = {
755         .cmd_rcgr = 0x16010,
756         .mnd_width = 0,
757         .hid_width = 5,
758         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
759         .freq_tbl = ftbl_sdcc1_ice_core_clk_src,
760         .clkr.hw.init = &(struct clk_init_data){
761                 .name = "sdcc1_ice_core_clk_src",
762                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
763                 .num_parents = 3,
764                 .ops = &clk_rcg2_ops,
765         },
766 };
767
768 static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = {
769         F(144000, P_XO, 16, 3, 25),
770         F(400000, P_XO, 12, 1, 4),
771         F(20000000, P_GPLL0_EARLY_DIV, 5, 1, 3),
772         F(25000000, P_GPLL0_EARLY_DIV, 6, 1, 2),
773         F(50000000, P_GPLL0_EARLY_DIV, 6, 0, 0),
774         F(100000000, P_GPLL0, 6, 0, 0),
775         F(192000000, P_GPLL4, 8, 0, 0),
776         F(200000000, P_GPLL0, 3, 0, 0),
777         { }
778 };
779
780 static struct clk_rcg2 sdcc2_apps_clk_src = {
781         .cmd_rcgr = 0x14010,
782         .mnd_width = 8,
783         .hid_width = 5,
784         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div_gpll4,
785         .freq_tbl = ftbl_sdcc2_apps_clk_src,
786         .clkr.hw.init = &(struct clk_init_data){
787                 .name = "sdcc2_apps_clk_src",
788                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div_gpll4,
789                 .num_parents = 4,
790                 .ops = &clk_rcg2_floor_ops,
791         },
792 };
793
794 static const struct freq_tbl ftbl_ufs_axi_clk_src[] = {
795         F(50000000, P_GPLL0_EARLY_DIV, 6, 0, 0),
796         F(100000000, P_GPLL0, 6, 0, 0),
797         F(150000000, P_GPLL0, 4, 0, 0),
798         F(200000000, P_GPLL0, 3, 0, 0),
799         F(240000000, P_GPLL0, 2.5, 0, 0),
800         { }
801 };
802
803 static struct clk_rcg2 ufs_axi_clk_src = {
804         .cmd_rcgr = 0x75018,
805         .mnd_width = 8,
806         .hid_width = 5,
807         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
808         .freq_tbl = ftbl_ufs_axi_clk_src,
809         .clkr.hw.init = &(struct clk_init_data){
810                 .name = "ufs_axi_clk_src",
811                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
812                 .num_parents = 3,
813                 .ops = &clk_rcg2_ops,
814         },
815 };
816
817 static const struct freq_tbl ftbl_ufs_ice_core_clk_src[] = {
818         F(75000000, P_GPLL0_EARLY_DIV, 4, 0, 0),
819         F(150000000, P_GPLL0, 4, 0, 0),
820         F(300000000, P_GPLL0, 2, 0, 0),
821         { }
822 };
823
824 static struct clk_rcg2 ufs_ice_core_clk_src = {
825         .cmd_rcgr = 0x76010,
826         .mnd_width = 0,
827         .hid_width = 5,
828         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
829         .freq_tbl = ftbl_ufs_ice_core_clk_src,
830         .clkr.hw.init = &(struct clk_init_data){
831                 .name = "ufs_ice_core_clk_src",
832                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
833                 .num_parents = 3,
834                 .ops = &clk_rcg2_ops,
835         },
836 };
837
838 static struct clk_rcg2 ufs_phy_aux_clk_src = {
839         .cmd_rcgr = 0x76044,
840         .mnd_width = 0,
841         .hid_width = 5,
842         .parent_map = gcc_parent_map_xo_sleep_clk,
843         .freq_tbl = ftbl_hmss_rbcpr_clk_src,
844         .clkr.hw.init = &(struct clk_init_data){
845                 .name = "ufs_phy_aux_clk_src",
846                 .parent_names = gcc_parent_names_xo_sleep_clk,
847                 .num_parents = 2,
848                 .ops = &clk_rcg2_ops,
849         },
850 };
851
852 static const struct freq_tbl ftbl_ufs_unipro_core_clk_src[] = {
853         F(37500000, P_GPLL0_EARLY_DIV, 8, 0, 0),
854         F(75000000, P_GPLL0, 8, 0, 0),
855         F(150000000, P_GPLL0, 4, 0, 0),
856         { }
857 };
858
859 static struct clk_rcg2 ufs_unipro_core_clk_src = {
860         .cmd_rcgr = 0x76028,
861         .mnd_width = 0,
862         .hid_width = 5,
863         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
864         .freq_tbl = ftbl_ufs_unipro_core_clk_src,
865         .clkr.hw.init = &(struct clk_init_data){
866                 .name = "ufs_unipro_core_clk_src",
867                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
868                 .num_parents = 3,
869                 .ops = &clk_rcg2_ops,
870         },
871 };
872
873 static const struct freq_tbl ftbl_usb20_master_clk_src[] = {
874         F(19200000, P_XO, 1, 0, 0),
875         F(60000000, P_GPLL0, 10, 0, 0),
876         F(120000000, P_GPLL0, 5, 0, 0),
877         { }
878 };
879
880 static struct clk_rcg2 usb20_master_clk_src = {
881         .cmd_rcgr = 0x2f010,
882         .mnd_width = 8,
883         .hid_width = 5,
884         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
885         .freq_tbl = ftbl_usb20_master_clk_src,
886         .clkr.hw.init = &(struct clk_init_data){
887                 .name = "usb20_master_clk_src",
888                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
889                 .num_parents = 3,
890                 .ops = &clk_rcg2_ops,
891         },
892 };
893
894 static const struct freq_tbl ftbl_usb20_mock_utmi_clk_src[] = {
895         F(19200000, P_XO, 1, 0, 0),
896         F(60000000, P_GPLL0, 10, 0, 0),
897         { }
898 };
899
900 static struct clk_rcg2 usb20_mock_utmi_clk_src = {
901         .cmd_rcgr = 0x2f024,
902         .mnd_width = 0,
903         .hid_width = 5,
904         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
905         .freq_tbl = ftbl_usb20_mock_utmi_clk_src,
906         .clkr.hw.init = &(struct clk_init_data){
907                 .name = "usb20_mock_utmi_clk_src",
908                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
909                 .num_parents = 3,
910                 .ops = &clk_rcg2_ops,
911         },
912 };
913
914 static const struct freq_tbl ftbl_usb30_master_clk_src[] = {
915         F(19200000, P_XO, 1, 0, 0),
916         F(66666667, P_GPLL0_EARLY_DIV, 4.5, 0, 0),
917         F(120000000, P_GPLL0, 5, 0, 0),
918         F(133333333, P_GPLL0, 4.5, 0, 0),
919         F(150000000, P_GPLL0, 4, 0, 0),
920         F(200000000, P_GPLL0, 3, 0, 0),
921         F(240000000, P_GPLL0, 2.5, 0, 0),
922         { }
923 };
924
925 static struct clk_rcg2 usb30_master_clk_src = {
926         .cmd_rcgr = 0xf014,
927         .mnd_width = 8,
928         .hid_width = 5,
929         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
930         .freq_tbl = ftbl_usb30_master_clk_src,
931         .clkr.hw.init = &(struct clk_init_data){
932                 .name = "usb30_master_clk_src",
933                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
934                 .num_parents = 3,
935                 .ops = &clk_rcg2_ops,
936         },
937 };
938
939 static const struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = {
940         F(19200000, P_XO, 1, 0, 0),
941         F(40000000, P_GPLL0_EARLY_DIV, 7.5, 0, 0),
942         F(60000000, P_GPLL0, 10, 0, 0),
943         { }
944 };
945
946 static struct clk_rcg2 usb30_mock_utmi_clk_src = {
947         .cmd_rcgr = 0xf028,
948         .mnd_width = 0,
949         .hid_width = 5,
950         .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
951         .freq_tbl = ftbl_usb30_mock_utmi_clk_src,
952         .clkr.hw.init = &(struct clk_init_data){
953                 .name = "usb30_mock_utmi_clk_src",
954                 .parent_names = gcc_parent_names_xo_gpll0_gpll0_early_div,
955                 .num_parents = 3,
956                 .ops = &clk_rcg2_ops,
957         },
958 };
959
960 static const struct freq_tbl ftbl_usb3_phy_aux_clk_src[] = {
961         F(1200000, P_XO, 16, 0, 0),
962         F(19200000, P_XO, 1, 0, 0),
963         { }
964 };
965
966 static struct clk_rcg2 usb3_phy_aux_clk_src = {
967         .cmd_rcgr = 0x5000c,
968         .mnd_width = 0,
969         .hid_width = 5,
970         .parent_map = gcc_parent_map_xo_sleep_clk,
971         .freq_tbl = ftbl_usb3_phy_aux_clk_src,
972         .clkr.hw.init = &(struct clk_init_data){
973                 .name = "usb3_phy_aux_clk_src",
974                 .parent_names = gcc_parent_names_xo_sleep_clk,
975                 .num_parents = 2,
976                 .ops = &clk_rcg2_ops,
977         },
978 };
979
980 static struct clk_branch gcc_aggre2_ufs_axi_clk = {
981         .halt_reg = 0x75034,
982         .halt_check = BRANCH_HALT,
983         .clkr = {
984                 .enable_reg = 0x75034,
985                 .enable_mask = BIT(0),
986                 .hw.init = &(struct clk_init_data){
987                         .name = "gcc_aggre2_ufs_axi_clk",
988                         .parent_names = (const char *[]){
989                                 "ufs_axi_clk_src",
990                         },
991                         .num_parents = 1,
992                         .ops = &clk_branch2_ops,
993                 },
994         },
995 };
996
997 static struct clk_branch gcc_aggre2_usb3_axi_clk = {
998         .halt_reg = 0xf03c,
999         .halt_check = BRANCH_HALT,
1000         .clkr = {
1001                 .enable_reg = 0xf03c,
1002                 .enable_mask = BIT(0),
1003                 .hw.init = &(struct clk_init_data){
1004                         .name = "gcc_aggre2_usb3_axi_clk",
1005                         .parent_names = (const char *[]){
1006                                 "usb30_master_clk_src",
1007                         },
1008                         .num_parents = 1,
1009                         .ops = &clk_branch2_ops,
1010                 },
1011         },
1012 };
1013
1014 static struct clk_branch gcc_bimc_gfx_clk = {
1015         .halt_reg = 0x7106c,
1016         .halt_check = BRANCH_VOTED,
1017         .clkr = {
1018                 .enable_reg = 0x7106c,
1019                 .enable_mask = BIT(0),
1020                 .hw.init = &(struct clk_init_data){
1021                         .name = "gcc_bimc_gfx_clk",
1022                         .ops = &clk_branch2_ops,
1023                 },
1024         },
1025 };
1026
1027 static struct clk_branch gcc_bimc_hmss_axi_clk = {
1028         .halt_reg = 0x48004,
1029         .halt_check = BRANCH_HALT_VOTED,
1030         .clkr = {
1031                 .enable_reg = 0x52004,
1032                 .enable_mask = BIT(22),
1033                 .hw.init = &(struct clk_init_data){
1034                         .name = "gcc_bimc_hmss_axi_clk",
1035                         .ops = &clk_branch2_ops,
1036                 },
1037         },
1038 };
1039
1040 static struct clk_branch gcc_bimc_mss_q6_axi_clk = {
1041         .halt_reg = 0x4401c,
1042         .halt_check = BRANCH_HALT,
1043         .clkr = {
1044                 .enable_reg = 0x4401c,
1045                 .enable_mask = BIT(0),
1046                 .hw.init = &(struct clk_init_data){
1047                         .name = "gcc_bimc_mss_q6_axi_clk",
1048                         .ops = &clk_branch2_ops,
1049                 },
1050         },
1051 };
1052
1053 static struct clk_branch gcc_blsp1_ahb_clk = {
1054         .halt_reg = 0x17004,
1055         .halt_check = BRANCH_HALT_VOTED,
1056         .clkr = {
1057                 .enable_reg = 0x52004,
1058                 .enable_mask = BIT(17),
1059                 .hw.init = &(struct clk_init_data){
1060                         .name = "gcc_blsp1_ahb_clk",
1061                         .ops = &clk_branch2_ops,
1062                 },
1063         },
1064 };
1065
1066 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1067         .halt_reg = 0x19008,
1068         .halt_check = BRANCH_HALT,
1069         .clkr = {
1070                 .enable_reg = 0x19008,
1071                 .enable_mask = BIT(0),
1072                 .hw.init = &(struct clk_init_data){
1073                         .name = "gcc_blsp1_qup1_i2c_apps_clk",
1074                         .parent_names = (const char *[]){
1075                                 "blsp1_qup1_i2c_apps_clk_src",
1076                         },
1077                         .num_parents = 1,
1078                         .flags = CLK_SET_RATE_PARENT,
1079                         .ops = &clk_branch2_ops,
1080                 },
1081         },
1082 };
1083
1084 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1085         .halt_reg = 0x19004,
1086         .halt_check = BRANCH_HALT,
1087         .clkr = {
1088                 .enable_reg = 0x19004,
1089                 .enable_mask = BIT(0),
1090                 .hw.init = &(struct clk_init_data){
1091                         .name = "gcc_blsp1_qup1_spi_apps_clk",
1092                         .parent_names = (const char *[]){
1093                                 "blsp1_qup1_spi_apps_clk_src",
1094                         },
1095                         .num_parents = 1,
1096                         .flags = CLK_SET_RATE_PARENT,
1097                         .ops = &clk_branch2_ops,
1098                 },
1099         },
1100 };
1101
1102 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1103         .halt_reg = 0x1b008,
1104         .halt_check = BRANCH_HALT,
1105         .clkr = {
1106                 .enable_reg = 0x1b008,
1107                 .enable_mask = BIT(0),
1108                 .hw.init = &(struct clk_init_data){
1109                         .name = "gcc_blsp1_qup2_i2c_apps_clk",
1110                         .parent_names = (const char *[]){
1111                                 "blsp1_qup2_i2c_apps_clk_src",
1112                         },
1113                         .num_parents = 1,
1114                         .flags = CLK_SET_RATE_PARENT,
1115                         .ops = &clk_branch2_ops,
1116                 },
1117         },
1118 };
1119
1120 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1121         .halt_reg = 0x1b004,
1122         .halt_check = BRANCH_HALT,
1123         .clkr = {
1124                 .enable_reg = 0x1b004,
1125                 .enable_mask = BIT(0),
1126                 .hw.init = &(struct clk_init_data){
1127                         .name = "gcc_blsp1_qup2_spi_apps_clk",
1128                         .parent_names = (const char *[]){
1129                                 "blsp1_qup2_spi_apps_clk_src",
1130                         },
1131                         .num_parents = 1,
1132                         .flags = CLK_SET_RATE_PARENT,
1133                         .ops = &clk_branch2_ops,
1134                 },
1135         },
1136 };
1137
1138 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1139         .halt_reg = 0x1d008,
1140         .halt_check = BRANCH_HALT,
1141         .clkr = {
1142                 .enable_reg = 0x1d008,
1143                 .enable_mask = BIT(0),
1144                 .hw.init = &(struct clk_init_data){
1145                         .name = "gcc_blsp1_qup3_i2c_apps_clk",
1146                         .parent_names = (const char *[]){
1147                                 "blsp1_qup3_i2c_apps_clk_src",
1148                         },
1149                         .num_parents = 1,
1150                         .flags = CLK_SET_RATE_PARENT,
1151                         .ops = &clk_branch2_ops,
1152                 },
1153         },
1154 };
1155
1156 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1157         .halt_reg = 0x1d004,
1158         .halt_check = BRANCH_HALT,
1159         .clkr = {
1160                 .enable_reg = 0x1d004,
1161                 .enable_mask = BIT(0),
1162                 .hw.init = &(struct clk_init_data){
1163                         .name = "gcc_blsp1_qup3_spi_apps_clk",
1164                         .parent_names = (const char *[]){
1165                                 "blsp1_qup3_spi_apps_clk_src",
1166                         },
1167                         .num_parents = 1,
1168                         .flags = CLK_SET_RATE_PARENT,
1169                         .ops = &clk_branch2_ops,
1170                 },
1171         },
1172 };
1173
1174 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1175         .halt_reg = 0x1f008,
1176         .halt_check = BRANCH_HALT,
1177         .clkr = {
1178                 .enable_reg = 0x1f008,
1179                 .enable_mask = BIT(0),
1180                 .hw.init = &(struct clk_init_data){
1181                         .name = "gcc_blsp1_qup4_i2c_apps_clk",
1182                         .parent_names = (const char *[]){
1183                                 "blsp1_qup4_i2c_apps_clk_src",
1184                         },
1185                         .num_parents = 1,
1186                         .flags = CLK_SET_RATE_PARENT,
1187                         .ops = &clk_branch2_ops,
1188                 },
1189         },
1190 };
1191
1192 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1193         .halt_reg = 0x1f004,
1194         .halt_check = BRANCH_HALT,
1195         .clkr = {
1196                 .enable_reg = 0x1f004,
1197                 .enable_mask = BIT(0),
1198                 .hw.init = &(struct clk_init_data){
1199                         .name = "gcc_blsp1_qup4_spi_apps_clk",
1200                         .parent_names = (const char *[]){
1201                                 "blsp1_qup4_spi_apps_clk_src",
1202                         },
1203                         .num_parents = 1,
1204                         .flags = CLK_SET_RATE_PARENT,
1205                         .ops = &clk_branch2_ops,
1206                 },
1207         },
1208 };
1209
1210 static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1211         .halt_reg = 0x1a004,
1212         .halt_check = BRANCH_HALT,
1213         .clkr = {
1214                 .enable_reg = 0x1a004,
1215                 .enable_mask = BIT(0),
1216                 .hw.init = &(struct clk_init_data){
1217                         .name = "gcc_blsp1_uart1_apps_clk",
1218                         .parent_names = (const char *[]){
1219                                 "blsp1_uart1_apps_clk_src",
1220                         },
1221                         .num_parents = 1,
1222                         .flags = CLK_SET_RATE_PARENT,
1223                         .ops = &clk_branch2_ops,
1224                 },
1225         },
1226 };
1227
1228 static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1229         .halt_reg = 0x1c004,
1230         .halt_check = BRANCH_HALT,
1231         .clkr = {
1232                 .enable_reg = 0x1c004,
1233                 .enable_mask = BIT(0),
1234                 .hw.init = &(struct clk_init_data){
1235                         .name = "gcc_blsp1_uart2_apps_clk",
1236                         .parent_names = (const char *[]){
1237                                 "blsp1_uart2_apps_clk_src",
1238                         },
1239                         .num_parents = 1,
1240                         .flags = CLK_SET_RATE_PARENT,
1241                         .ops = &clk_branch2_ops,
1242                 },
1243         },
1244 };
1245
1246 static struct clk_branch gcc_blsp2_ahb_clk = {
1247         .halt_reg = 0x25004,
1248         .halt_check = BRANCH_HALT_VOTED,
1249         .clkr = {
1250                 .enable_reg = 0x52004,
1251                 .enable_mask = BIT(15),
1252                 .hw.init = &(struct clk_init_data){
1253                         .name = "gcc_blsp2_ahb_clk",
1254                         .ops = &clk_branch2_ops,
1255                 },
1256         },
1257 };
1258
1259 static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
1260         .halt_reg = 0x26008,
1261         .halt_check = BRANCH_HALT,
1262         .clkr = {
1263                 .enable_reg = 0x26008,
1264                 .enable_mask = BIT(0),
1265                 .hw.init = &(struct clk_init_data){
1266                         .name = "gcc_blsp2_qup1_i2c_apps_clk",
1267                         .parent_names = (const char *[]){
1268                                 "blsp2_qup1_i2c_apps_clk_src",
1269                         },
1270                         .num_parents = 1,
1271                         .flags = CLK_SET_RATE_PARENT,
1272                         .ops = &clk_branch2_ops,
1273                 },
1274         },
1275 };
1276
1277 static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
1278         .halt_reg = 0x26004,
1279         .halt_check = BRANCH_HALT,
1280         .clkr = {
1281                 .enable_reg = 0x26004,
1282                 .enable_mask = BIT(0),
1283                 .hw.init = &(struct clk_init_data){
1284                         .name = "gcc_blsp2_qup1_spi_apps_clk",
1285                         .parent_names = (const char *[]){
1286                                 "blsp2_qup1_spi_apps_clk_src",
1287                         },
1288                         .num_parents = 1,
1289                         .flags = CLK_SET_RATE_PARENT,
1290                         .ops = &clk_branch2_ops,
1291                 },
1292         },
1293 };
1294
1295 static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
1296         .halt_reg = 0x28008,
1297         .halt_check = BRANCH_HALT,
1298         .clkr = {
1299                 .enable_reg = 0x28008,
1300                 .enable_mask = BIT(0),
1301                 .hw.init = &(struct clk_init_data){
1302                         .name = "gcc_blsp2_qup2_i2c_apps_clk",
1303                         .parent_names = (const char *[]){
1304                                 "blsp2_qup2_i2c_apps_clk_src",
1305                         },
1306                         .num_parents = 1,
1307                         .flags = CLK_SET_RATE_PARENT,
1308                         .ops = &clk_branch2_ops,
1309                 },
1310         },
1311 };
1312
1313 static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
1314         .halt_reg = 0x28004,
1315         .halt_check = BRANCH_HALT,
1316         .clkr = {
1317                 .enable_reg = 0x28004,
1318                 .enable_mask = BIT(0),
1319                 .hw.init = &(struct clk_init_data){
1320                         .name = "gcc_blsp2_qup2_spi_apps_clk",
1321                         .parent_names = (const char *[]){
1322                                 "blsp2_qup2_spi_apps_clk_src",
1323                         },
1324                         .num_parents = 1,
1325                         .flags = CLK_SET_RATE_PARENT,
1326                         .ops = &clk_branch2_ops,
1327                 },
1328         },
1329 };
1330
1331 static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
1332         .halt_reg = 0x2a008,
1333         .halt_check = BRANCH_HALT,
1334         .clkr = {
1335                 .enable_reg = 0x2a008,
1336                 .enable_mask = BIT(0),
1337                 .hw.init = &(struct clk_init_data){
1338                         .name = "gcc_blsp2_qup3_i2c_apps_clk",
1339                         .parent_names = (const char *[]){
1340                                 "blsp2_qup3_i2c_apps_clk_src",
1341                         },
1342                         .num_parents = 1,
1343                         .flags = CLK_SET_RATE_PARENT,
1344                         .ops = &clk_branch2_ops,
1345                 },
1346         },
1347 };
1348
1349 static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
1350         .halt_reg = 0x2a004,
1351         .halt_check = BRANCH_HALT,
1352         .clkr = {
1353                 .enable_reg = 0x2a004,
1354                 .enable_mask = BIT(0),
1355                 .hw.init = &(struct clk_init_data){
1356                         .name = "gcc_blsp2_qup3_spi_apps_clk",
1357                         .parent_names = (const char *[]){
1358                                 "blsp2_qup3_spi_apps_clk_src",
1359                         },
1360                         .num_parents = 1,
1361                         .flags = CLK_SET_RATE_PARENT,
1362                         .ops = &clk_branch2_ops,
1363                 },
1364         },
1365 };
1366
1367 static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
1368         .halt_reg = 0x2c008,
1369         .halt_check = BRANCH_HALT,
1370         .clkr = {
1371                 .enable_reg = 0x2c008,
1372                 .enable_mask = BIT(0),
1373                 .hw.init = &(struct clk_init_data){
1374                         .name = "gcc_blsp2_qup4_i2c_apps_clk",
1375                         .parent_names = (const char *[]){
1376                                 "blsp2_qup4_i2c_apps_clk_src",
1377                         },
1378                         .num_parents = 1,
1379                         .flags = CLK_SET_RATE_PARENT,
1380                         .ops = &clk_branch2_ops,
1381                 },
1382         },
1383 };
1384
1385 static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
1386         .halt_reg = 0x2c004,
1387         .halt_check = BRANCH_HALT,
1388         .clkr = {
1389                 .enable_reg = 0x2c004,
1390                 .enable_mask = BIT(0),
1391                 .hw.init = &(struct clk_init_data){
1392                         .name = "gcc_blsp2_qup4_spi_apps_clk",
1393                         .parent_names = (const char *[]){
1394                                 "blsp2_qup4_spi_apps_clk_src",
1395                         },
1396                         .num_parents = 1,
1397                         .flags = CLK_SET_RATE_PARENT,
1398                         .ops = &clk_branch2_ops,
1399                 },
1400         },
1401 };
1402
1403 static struct clk_branch gcc_blsp2_uart1_apps_clk = {
1404         .halt_reg = 0x27004,
1405         .halt_check = BRANCH_HALT,
1406         .clkr = {
1407                 .enable_reg = 0x27004,
1408                 .enable_mask = BIT(0),
1409                 .hw.init = &(struct clk_init_data){
1410                         .name = "gcc_blsp2_uart1_apps_clk",
1411                         .parent_names = (const char *[]){
1412                                 "blsp2_uart1_apps_clk_src",
1413                         },
1414                         .num_parents = 1,
1415                         .flags = CLK_SET_RATE_PARENT,
1416                         .ops = &clk_branch2_ops,
1417                 },
1418         },
1419 };
1420
1421 static struct clk_branch gcc_blsp2_uart2_apps_clk = {
1422         .halt_reg = 0x29004,
1423         .halt_check = BRANCH_HALT,
1424         .clkr = {
1425                 .enable_reg = 0x29004,
1426                 .enable_mask = BIT(0),
1427                 .hw.init = &(struct clk_init_data){
1428                         .name = "gcc_blsp2_uart2_apps_clk",
1429                         .parent_names = (const char *[]){
1430                                 "blsp2_uart2_apps_clk_src",
1431                         },
1432                         .num_parents = 1,
1433                         .flags = CLK_SET_RATE_PARENT,
1434                         .ops = &clk_branch2_ops,
1435                 },
1436         },
1437 };
1438
1439 static struct clk_branch gcc_boot_rom_ahb_clk = {
1440         .halt_reg = 0x38004,
1441         .halt_check = BRANCH_HALT_VOTED,
1442         .clkr = {
1443                 .enable_reg = 0x52004,
1444                 .enable_mask = BIT(10),
1445                 .hw.init = &(struct clk_init_data){
1446                         .name = "gcc_boot_rom_ahb_clk",
1447                         .ops = &clk_branch2_ops,
1448                 },
1449         },
1450 };
1451
1452 static struct clk_branch gcc_cfg_noc_usb2_axi_clk = {
1453         .halt_reg = 0x5058,
1454         .halt_check = BRANCH_HALT,
1455         .clkr = {
1456                 .enable_reg = 0x5058,
1457                 .enable_mask = BIT(0),
1458                 .hw.init = &(struct clk_init_data){
1459                         .name = "gcc_cfg_noc_usb2_axi_clk",
1460                         .parent_names = (const char *[]){
1461                                 "usb20_master_clk_src",
1462                         },
1463                         .num_parents = 1,
1464                         .ops = &clk_branch2_ops,
1465                 },
1466         },
1467 };
1468
1469 static struct clk_branch gcc_cfg_noc_usb3_axi_clk = {
1470         .halt_reg = 0x5018,
1471         .halt_check = BRANCH_HALT,
1472         .clkr = {
1473                 .enable_reg = 0x5018,
1474                 .enable_mask = BIT(0),
1475                 .hw.init = &(struct clk_init_data){
1476                         .name = "gcc_cfg_noc_usb3_axi_clk",
1477                         .parent_names = (const char *[]){
1478                                 "usb30_master_clk_src",
1479                         },
1480                         .num_parents = 1,
1481                         .ops = &clk_branch2_ops,
1482                 },
1483         },
1484 };
1485
1486 static struct clk_branch gcc_dcc_ahb_clk = {
1487         .halt_reg = 0x84004,
1488         .clkr = {
1489                 .enable_reg = 0x84004,
1490                 .enable_mask = BIT(0),
1491                 .hw.init = &(struct clk_init_data){
1492                         .name = "gcc_dcc_ahb_clk",
1493                         .ops = &clk_branch2_ops,
1494                 },
1495         },
1496 };
1497
1498 static struct clk_branch gcc_gp1_clk = {
1499         .halt_reg = 0x64000,
1500         .halt_check = BRANCH_HALT,
1501         .clkr = {
1502                 .enable_reg = 0x64000,
1503                 .enable_mask = BIT(0),
1504                 .hw.init = &(struct clk_init_data){
1505                         .name = "gcc_gp1_clk",
1506                         .parent_names = (const char *[]){
1507                                 "gp1_clk_src",
1508                         },
1509                         .num_parents = 1,
1510                         .flags = CLK_SET_RATE_PARENT,
1511                         .ops = &clk_branch2_ops,
1512                 },
1513         },
1514 };
1515
1516 static struct clk_branch gcc_gp2_clk = {
1517         .halt_reg = 0x65000,
1518         .halt_check = BRANCH_HALT,
1519         .clkr = {
1520                 .enable_reg = 0x65000,
1521                 .enable_mask = BIT(0),
1522                 .hw.init = &(struct clk_init_data){
1523                         .name = "gcc_gp2_clk",
1524                         .parent_names = (const char *[]){
1525                                 "gp2_clk_src",
1526                         },
1527                         .num_parents = 1,
1528                         .flags = CLK_SET_RATE_PARENT,
1529                         .ops = &clk_branch2_ops,
1530                 },
1531         },
1532 };
1533
1534 static struct clk_branch gcc_gp3_clk = {
1535         .halt_reg = 0x66000,
1536         .halt_check = BRANCH_HALT,
1537         .clkr = {
1538                 .enable_reg = 0x66000,
1539                 .enable_mask = BIT(0),
1540                 .hw.init = &(struct clk_init_data){
1541                         .name = "gcc_gp3_clk",
1542                         .parent_names = (const char *[]){
1543                                 "gp3_clk_src",
1544                         },
1545                         .num_parents = 1,
1546                         .flags = CLK_SET_RATE_PARENT,
1547                         .ops = &clk_branch2_ops,
1548                 },
1549         },
1550 };
1551
1552 static struct clk_branch gcc_gpu_bimc_gfx_clk = {
1553         .halt_reg = 0x71010,
1554         .halt_check = BRANCH_VOTED,
1555         .clkr = {
1556                 .enable_reg = 0x71010,
1557                 .enable_mask = BIT(0),
1558                 .hw.init = &(struct clk_init_data){
1559                         .name = "gcc_gpu_bimc_gfx_clk",
1560                         .ops = &clk_branch2_ops,
1561                 },
1562         },
1563 };
1564
1565 static struct clk_branch gcc_gpu_cfg_ahb_clk = {
1566         .halt_reg = 0x71004,
1567         .halt_check = BRANCH_VOTED,
1568         .clkr = {
1569                 .enable_reg = 0x71004,
1570                 .enable_mask = BIT(0),
1571                 .hw.init = &(struct clk_init_data){
1572                         .name = "gcc_gpu_cfg_ahb_clk",
1573                         .ops = &clk_branch2_ops,
1574                         .flags = CLK_IS_CRITICAL,
1575                 },
1576         },
1577 };
1578
1579 static struct clk_branch gcc_gpu_gpll0_clk = {
1580         .halt_reg = 0x5200c,
1581         .halt_check = BRANCH_HALT_DELAY,
1582         .clkr = {
1583                 .enable_reg = 0x5200c,
1584                 .enable_mask = BIT(4),
1585                 .hw.init = &(struct clk_init_data){
1586                         .name = "gcc_gpu_gpll0_clk",
1587                         .parent_names = (const char *[]){
1588                                 "gpll0",
1589                         },
1590                         .num_parents = 1,
1591                         .ops = &clk_branch2_ops,
1592                 },
1593         },
1594 };
1595
1596 static struct clk_branch gcc_gpu_gpll0_div_clk = {
1597         .halt_reg = 0x5200c,
1598         .halt_check = BRANCH_HALT_DELAY,
1599         .clkr = {
1600                 .enable_reg = 0x5200c,
1601                 .enable_mask = BIT(3),
1602                 .hw.init = &(struct clk_init_data){
1603                         .name = "gcc_gpu_gpll0_div_clk",
1604                         .parent_names = (const char *[]){
1605                                 "gpll0_early_div",
1606                         },
1607                         .num_parents = 1,
1608                         .ops = &clk_branch2_ops,
1609                 },
1610         },
1611 };
1612
1613 static struct clk_branch gcc_hmss_dvm_bus_clk = {
1614         .halt_reg = 0x4808c,
1615         .halt_check = BRANCH_HALT,
1616         .clkr = {
1617                 .enable_reg = 0x4808c,
1618                 .enable_mask = BIT(0),
1619                 .hw.init = &(struct clk_init_data){
1620                         .name = "gcc_hmss_dvm_bus_clk",
1621                         .ops = &clk_branch2_ops,
1622                         .flags = CLK_IGNORE_UNUSED,
1623                 },
1624         },
1625 };
1626
1627 static struct clk_branch gcc_hmss_rbcpr_clk = {
1628         .halt_reg = 0x48008,
1629         .halt_check = BRANCH_HALT,
1630         .clkr = {
1631                 .enable_reg = 0x48008,
1632                 .enable_mask = BIT(0),
1633                 .hw.init = &(struct clk_init_data){
1634                         .name = "gcc_hmss_rbcpr_clk",
1635                         .parent_names = (const char *[]){
1636                                 "hmss_rbcpr_clk_src",
1637                         },
1638                         .num_parents = 1,
1639                         .flags = CLK_SET_RATE_PARENT,
1640                         .ops = &clk_branch2_ops,
1641                 },
1642         },
1643 };
1644
1645 static struct clk_branch gcc_mmss_gpll0_clk = {
1646         .halt_reg = 0x5200c,
1647         .halt_check = BRANCH_HALT_DELAY,
1648         .clkr = {
1649                 .enable_reg = 0x5200c,
1650                 .enable_mask = BIT(1),
1651                 .hw.init = &(struct clk_init_data){
1652                         .name = "gcc_mmss_gpll0_clk",
1653                         .parent_names = (const char *[]){
1654                                 "gpll0",
1655                         },
1656                         .num_parents = 1,
1657                         .ops = &clk_branch2_ops,
1658                 },
1659         },
1660 };
1661
1662 static struct clk_branch gcc_mmss_gpll0_div_clk = {
1663         .halt_reg = 0x5200c,
1664         .halt_check = BRANCH_HALT_DELAY,
1665         .clkr = {
1666                 .enable_reg = 0x5200c,
1667                 .enable_mask = BIT(0),
1668                 .hw.init = &(struct clk_init_data){
1669                         .name = "gcc_mmss_gpll0_div_clk",
1670                         .parent_names = (const char *[]){
1671                                 "gpll0_early_div",
1672                         },
1673                         .num_parents = 1,
1674                         .ops = &clk_branch2_ops,
1675                 },
1676         },
1677 };
1678
1679 static struct clk_branch gcc_mmss_noc_cfg_ahb_clk = {
1680         .halt_reg = 0x9004,
1681         .halt_check = BRANCH_HALT,
1682         .clkr = {
1683                 .enable_reg = 0x9004,
1684                 .enable_mask = BIT(0),
1685                 .hw.init = &(struct clk_init_data){
1686                         .name = "gcc_mmss_noc_cfg_ahb_clk",
1687                         .ops = &clk_branch2_ops,
1688                         /*
1689                          * Any access to mmss depends on this clock.
1690                          * Gating this clock has been shown to crash the system
1691                          * when mmssnoc_axi_rpm_clk is inited in rpmcc.
1692                          */
1693                         .flags = CLK_IS_CRITICAL,
1694                 },
1695         },
1696 };
1697
1698 static struct clk_branch gcc_mmss_sys_noc_axi_clk = {
1699         .halt_reg = 0x9000,
1700         .halt_check = BRANCH_HALT,
1701         .clkr = {
1702                 .enable_reg = 0x9000,
1703                 .enable_mask = BIT(0),
1704                 .hw.init = &(struct clk_init_data){
1705                         .name = "gcc_mmss_sys_noc_axi_clk",
1706                         .ops = &clk_branch2_ops,
1707                 },
1708         },
1709 };
1710
1711 static struct clk_branch gcc_mss_cfg_ahb_clk = {
1712         .halt_reg = 0x8a000,
1713         .clkr = {
1714                 .enable_reg = 0x8a000,
1715                 .enable_mask = BIT(0),
1716                 .hw.init = &(struct clk_init_data){
1717                         .name = "gcc_mss_cfg_ahb_clk",
1718                         .ops = &clk_branch2_ops,
1719                 },
1720         },
1721 };
1722
1723 static struct clk_branch gcc_mss_mnoc_bimc_axi_clk = {
1724         .halt_reg = 0x8a004,
1725         .halt_check = BRANCH_HALT,
1726         .hwcg_reg = 0x8a004,
1727         .hwcg_bit = 1,
1728         .clkr = {
1729                 .enable_reg = 0x8a004,
1730                 .enable_mask = BIT(0),
1731                 .hw.init = &(struct clk_init_data){
1732                         .name = "gcc_mss_mnoc_bimc_axi_clk",
1733                         .ops = &clk_branch2_ops,
1734                 },
1735         },
1736 };
1737
1738 static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
1739         .halt_reg = 0x8a040,
1740         .clkr = {
1741                 .enable_reg = 0x8a040,
1742                 .enable_mask = BIT(0),
1743                 .hw.init = &(struct clk_init_data){
1744                         .name = "gcc_mss_q6_bimc_axi_clk",
1745                         .ops = &clk_branch2_ops,
1746                 },
1747         },
1748 };
1749
1750 static struct clk_branch gcc_mss_snoc_axi_clk = {
1751         .halt_reg = 0x8a03c,
1752         .clkr = {
1753                 .enable_reg = 0x8a03c,
1754                 .enable_mask = BIT(0),
1755                 .hw.init = &(struct clk_init_data){
1756                         .name = "gcc_mss_snoc_axi_clk",
1757                         .ops = &clk_branch2_ops,
1758                 },
1759         },
1760 };
1761
1762 static struct clk_branch gcc_pdm2_clk = {
1763         .halt_reg = 0x3300c,
1764         .halt_check = BRANCH_HALT,
1765         .clkr = {
1766                 .enable_reg = 0x3300c,
1767                 .enable_mask = BIT(0),
1768                 .hw.init = &(struct clk_init_data){
1769                         .name = "gcc_pdm2_clk",
1770                         .parent_names = (const char *[]){
1771                                 "pdm2_clk_src",
1772                         },
1773                         .num_parents = 1,
1774                         .flags = CLK_SET_RATE_PARENT,
1775                         .ops = &clk_branch2_ops,
1776                 },
1777         },
1778 };
1779
1780 static struct clk_branch gcc_pdm_ahb_clk = {
1781         .halt_reg = 0x33004,
1782         .halt_check = BRANCH_HALT,
1783         .clkr = {
1784                 .enable_reg = 0x33004,
1785                 .enable_mask = BIT(0),
1786                 .hw.init = &(struct clk_init_data){
1787                         .name = "gcc_pdm_ahb_clk",
1788                         .ops = &clk_branch2_ops,
1789                 },
1790         },
1791 };
1792
1793 static struct clk_branch gcc_prng_ahb_clk = {
1794         .halt_reg = 0x34004,
1795         .halt_check = BRANCH_HALT_VOTED,
1796         .clkr = {
1797                 .enable_reg = 0x52004,
1798                 .enable_mask = BIT(13),
1799                 .hw.init = &(struct clk_init_data){
1800                         .name = "gcc_prng_ahb_clk",
1801                         .ops = &clk_branch2_ops,
1802                 },
1803         },
1804 };
1805
1806 static struct clk_branch gcc_qspi_ahb_clk = {
1807         .halt_reg = 0x4d004,
1808         .halt_check = BRANCH_HALT,
1809         .clkr = {
1810                 .enable_reg = 0x4d004,
1811                 .enable_mask = BIT(0),
1812                 .hw.init = &(struct clk_init_data){
1813                         .name = "gcc_qspi_ahb_clk",
1814                         .ops = &clk_branch2_ops,
1815                 },
1816         },
1817 };
1818
1819 static struct clk_branch gcc_qspi_ser_clk = {
1820         .halt_reg = 0x4d008,
1821         .halt_check = BRANCH_HALT,
1822         .clkr = {
1823                 .enable_reg = 0x4d008,
1824                 .enable_mask = BIT(0),
1825                 .hw.init = &(struct clk_init_data){
1826                         .name = "gcc_qspi_ser_clk",
1827                         .parent_names = (const char *[]){
1828                                 "qspi_ser_clk_src",
1829                         },
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_rx0_usb2_clkref_clk = {
1838         .halt_reg = 0x88018,
1839         .halt_check = BRANCH_HALT_VOTED,
1840         .clkr = {
1841                 .enable_reg = 0x88018,
1842                 .enable_mask = BIT(0),
1843                 .hw.init = &(struct clk_init_data){
1844                         .name = "gcc_rx0_usb2_clkref_clk",
1845                         .ops = &clk_branch2_ops,
1846                 },
1847         },
1848 };
1849
1850 static struct clk_branch gcc_rx1_usb2_clkref_clk = {
1851         .halt_reg = 0x88014,
1852         .halt_check = BRANCH_HALT_VOTED,
1853         .clkr = {
1854                 .enable_reg = 0x88014,
1855                 .enable_mask = BIT(0),
1856                 .hw.init = &(struct clk_init_data){
1857                         .name = "gcc_rx1_usb2_clkref_clk",
1858                         .ops = &clk_branch2_ops,
1859                 },
1860         },
1861 };
1862
1863 static struct clk_branch gcc_sdcc1_ahb_clk = {
1864         .halt_reg = 0x16008,
1865         .halt_check = BRANCH_HALT,
1866         .clkr = {
1867                 .enable_reg = 0x16008,
1868                 .enable_mask = BIT(0),
1869                 .hw.init = &(struct clk_init_data){
1870                         .name = "gcc_sdcc1_ahb_clk",
1871                         .ops = &clk_branch2_ops,
1872                 },
1873         },
1874 };
1875
1876 static struct clk_branch gcc_sdcc1_apps_clk = {
1877         .halt_reg = 0x16004,
1878         .halt_check = BRANCH_HALT,
1879         .clkr = {
1880                 .enable_reg = 0x16004,
1881                 .enable_mask = BIT(0),
1882                 .hw.init = &(struct clk_init_data){
1883                         .name = "gcc_sdcc1_apps_clk",
1884                         .parent_names = (const char *[]){
1885                                 "sdcc1_apps_clk_src",
1886                         },
1887                         .num_parents = 1,
1888                         .flags = CLK_SET_RATE_PARENT,
1889                         .ops = &clk_branch2_ops,
1890                 },
1891         },
1892 };
1893
1894 static struct clk_branch gcc_sdcc1_ice_core_clk = {
1895         .halt_reg = 0x1600c,
1896         .halt_check = BRANCH_HALT,
1897         .clkr = {
1898                 .enable_reg = 0x1600c,
1899                 .enable_mask = BIT(0),
1900                 .hw.init = &(struct clk_init_data){
1901                         .name = "gcc_sdcc1_ice_core_clk",
1902                         .parent_names = (const char *[]){
1903                                 "sdcc1_ice_core_clk_src",
1904                         },
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_sdcc2_ahb_clk = {
1913         .halt_reg = 0x14008,
1914         .halt_check = BRANCH_HALT,
1915         .clkr = {
1916                 .enable_reg = 0x14008,
1917                 .enable_mask = BIT(0),
1918                 .hw.init = &(struct clk_init_data){
1919                         .name = "gcc_sdcc2_ahb_clk",
1920                         .ops = &clk_branch2_ops,
1921                 },
1922         },
1923 };
1924
1925 static struct clk_branch gcc_sdcc2_apps_clk = {
1926         .halt_reg = 0x14004,
1927         .halt_check = BRANCH_HALT,
1928         .clkr = {
1929                 .enable_reg = 0x14004,
1930                 .enable_mask = BIT(0),
1931                 .hw.init = &(struct clk_init_data){
1932                         .name = "gcc_sdcc2_apps_clk",
1933                         .parent_names = (const char *[]){
1934                                 "sdcc2_apps_clk_src",
1935                         },
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_ufs_ahb_clk = {
1944         .halt_reg = 0x7500c,
1945         .halt_check = BRANCH_HALT,
1946         .clkr = {
1947                 .enable_reg = 0x7500c,
1948                 .enable_mask = BIT(0),
1949                 .hw.init = &(struct clk_init_data){
1950                         .name = "gcc_ufs_ahb_clk",
1951                         .ops = &clk_branch2_ops,
1952                 },
1953         },
1954 };
1955
1956 static struct clk_branch gcc_ufs_axi_clk = {
1957         .halt_reg = 0x75008,
1958         .halt_check = BRANCH_HALT,
1959         .clkr = {
1960                 .enable_reg = 0x75008,
1961                 .enable_mask = BIT(0),
1962                 .hw.init = &(struct clk_init_data){
1963                         .name = "gcc_ufs_axi_clk",
1964                         .parent_names = (const char *[]){
1965                                 "ufs_axi_clk_src",
1966                         },
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_ufs_clkref_clk = {
1975         .halt_reg = 0x88008,
1976         .halt_check = BRANCH_HALT,
1977         .clkr = {
1978                 .enable_reg = 0x88008,
1979                 .enable_mask = BIT(0),
1980                 .hw.init = &(struct clk_init_data){
1981                         .name = "gcc_ufs_clkref_clk",
1982                         .ops = &clk_branch2_ops,
1983                 },
1984         },
1985 };
1986
1987 static struct clk_branch gcc_ufs_ice_core_clk = {
1988         .halt_reg = 0x7600c,
1989         .halt_check = BRANCH_HALT,
1990         .clkr = {
1991                 .enable_reg = 0x7600c,
1992                 .enable_mask = BIT(0),
1993                 .hw.init = &(struct clk_init_data){
1994                         .name = "gcc_ufs_ice_core_clk",
1995                         .parent_names = (const char *[]){
1996                                 "ufs_ice_core_clk_src",
1997                         },
1998                         .num_parents = 1,
1999                         .flags = CLK_SET_RATE_PARENT,
2000                         .ops = &clk_branch2_ops,
2001                 },
2002         },
2003 };
2004
2005 static struct clk_branch gcc_ufs_phy_aux_clk = {
2006         .halt_reg = 0x76040,
2007         .halt_check = BRANCH_HALT,
2008         .clkr = {
2009                 .enable_reg = 0x76040,
2010                 .enable_mask = BIT(0),
2011                 .hw.init = &(struct clk_init_data){
2012                         .name = "gcc_ufs_phy_aux_clk",
2013                         .parent_names = (const char *[]){
2014                                 "ufs_phy_aux_clk_src",
2015                         },
2016                         .num_parents = 1,
2017                         .flags = CLK_SET_RATE_PARENT,
2018                         .ops = &clk_branch2_ops,
2019                 },
2020         },
2021 };
2022
2023 static struct clk_branch gcc_ufs_rx_symbol_0_clk = {
2024         .halt_reg = 0x75014,
2025         .halt_check = BRANCH_HALT_SKIP,
2026         .clkr = {
2027                 .enable_reg = 0x75014,
2028                 .enable_mask = BIT(0),
2029                 .hw.init = &(struct clk_init_data){
2030                         .name = "gcc_ufs_rx_symbol_0_clk",
2031                         .ops = &clk_branch2_ops,
2032                 },
2033         },
2034 };
2035
2036 static struct clk_branch gcc_ufs_rx_symbol_1_clk = {
2037         .halt_reg = 0x7605c,
2038         .halt_check = BRANCH_HALT_SKIP,
2039         .clkr = {
2040                 .enable_reg = 0x7605c,
2041                 .enable_mask = BIT(0),
2042                 .hw.init = &(struct clk_init_data){
2043                         .name = "gcc_ufs_rx_symbol_1_clk",
2044                         .ops = &clk_branch2_ops,
2045                 },
2046         },
2047 };
2048
2049 static struct clk_branch gcc_ufs_tx_symbol_0_clk = {
2050         .halt_reg = 0x75010,
2051         .halt_check = BRANCH_HALT_SKIP,
2052         .clkr = {
2053                 .enable_reg = 0x75010,
2054                 .enable_mask = BIT(0),
2055                 .hw.init = &(struct clk_init_data){
2056                         .name = "gcc_ufs_tx_symbol_0_clk",
2057                         .ops = &clk_branch2_ops,
2058                 },
2059         },
2060 };
2061
2062 static struct clk_branch gcc_ufs_unipro_core_clk = {
2063         .halt_reg = 0x76008,
2064         .halt_check = BRANCH_HALT,
2065         .clkr = {
2066                 .enable_reg = 0x76008,
2067                 .enable_mask = BIT(0),
2068                 .hw.init = &(struct clk_init_data){
2069                         .name = "gcc_ufs_unipro_core_clk",
2070                         .parent_names = (const char *[]){
2071                                 "ufs_unipro_core_clk_src",
2072                         },
2073                         .flags = CLK_SET_RATE_PARENT,
2074                         .num_parents = 1,
2075                         .ops = &clk_branch2_ops,
2076                 },
2077         },
2078 };
2079
2080 static struct clk_branch gcc_usb20_master_clk = {
2081         .halt_reg = 0x2f004,
2082         .halt_check = BRANCH_HALT,
2083         .clkr = {
2084                 .enable_reg = 0x2f004,
2085                 .enable_mask = BIT(0),
2086                 .hw.init = &(struct clk_init_data){
2087                         .name = "gcc_usb20_master_clk",
2088                         .parent_names = (const char *[]){
2089                                 "usb20_master_clk_src"
2090                         },
2091                         .flags = CLK_SET_RATE_PARENT,
2092                         .num_parents = 1,
2093                         .ops = &clk_branch2_ops,
2094                 },
2095         },
2096 };
2097
2098 static struct clk_branch gcc_usb20_mock_utmi_clk = {
2099         .halt_reg = 0x2f00c,
2100         .halt_check = BRANCH_HALT,
2101         .clkr = {
2102                 .enable_reg = 0x2f00c,
2103                 .enable_mask = BIT(0),
2104                 .hw.init = &(struct clk_init_data){
2105                         .name = "gcc_usb20_mock_utmi_clk",
2106                         .parent_names = (const char *[]){
2107                                 "usb20_mock_utmi_clk_src",
2108                         },
2109                         .num_parents = 1,
2110                         .flags = CLK_SET_RATE_PARENT,
2111                         .ops = &clk_branch2_ops,
2112                 },
2113         },
2114 };
2115
2116 static struct clk_branch gcc_usb20_sleep_clk = {
2117         .halt_reg = 0x2f008,
2118         .halt_check = BRANCH_HALT,
2119         .clkr = {
2120                 .enable_reg = 0x2f008,
2121                 .enable_mask = BIT(0),
2122                 .hw.init = &(struct clk_init_data){
2123                         .name = "gcc_usb20_sleep_clk",
2124                         .ops = &clk_branch2_ops,
2125                 },
2126         },
2127 };
2128
2129 static struct clk_branch gcc_usb30_master_clk = {
2130         .halt_reg = 0xf008,
2131         .halt_check = BRANCH_HALT,
2132         .clkr = {
2133                 .enable_reg = 0xf008,
2134                 .enable_mask = BIT(0),
2135                 .hw.init = &(struct clk_init_data){
2136                         .name = "gcc_usb30_master_clk",
2137                         .parent_names = (const char *[]){
2138                                 "usb30_master_clk_src",
2139                         },
2140                         .num_parents = 1,
2141                         .flags = CLK_SET_RATE_PARENT,
2142                         .ops = &clk_branch2_ops,
2143                 },
2144         },
2145 };
2146
2147 static struct clk_branch gcc_usb30_mock_utmi_clk = {
2148         .halt_reg = 0xf010,
2149         .halt_check = BRANCH_HALT,
2150         .clkr = {
2151                 .enable_reg = 0xf010,
2152                 .enable_mask = BIT(0),
2153                 .hw.init = &(struct clk_init_data){
2154                         .name = "gcc_usb30_mock_utmi_clk",
2155                         .parent_names = (const char *[]){
2156                                 "usb30_mock_utmi_clk_src",
2157                         },
2158                         .num_parents = 1,
2159                         .flags = CLK_SET_RATE_PARENT,
2160                         .ops = &clk_branch2_ops,
2161                 },
2162         },
2163 };
2164
2165 static struct clk_branch gcc_usb30_sleep_clk = {
2166         .halt_reg = 0xf00c,
2167         .halt_check = BRANCH_HALT,
2168         .clkr = {
2169                 .enable_reg = 0xf00c,
2170                 .enable_mask = BIT(0),
2171                 .hw.init = &(struct clk_init_data){
2172                         .name = "gcc_usb30_sleep_clk",
2173                         .ops = &clk_branch2_ops,
2174                 },
2175         },
2176 };
2177
2178 static struct clk_branch gcc_usb3_clkref_clk = {
2179         .halt_reg = 0x8800c,
2180         .halt_check = BRANCH_HALT,
2181         .clkr = {
2182                 .enable_reg = 0x8800c,
2183                 .enable_mask = BIT(0),
2184                 .hw.init = &(struct clk_init_data){
2185                         .name = "gcc_usb3_clkref_clk",
2186                         .ops = &clk_branch2_ops,
2187                 },
2188         },
2189 };
2190
2191 static struct clk_branch gcc_usb3_phy_aux_clk = {
2192         .halt_reg = 0x50000,
2193         .halt_check = BRANCH_HALT,
2194         .clkr = {
2195                 .enable_reg = 0x50000,
2196                 .enable_mask = BIT(0),
2197                 .hw.init = &(struct clk_init_data){
2198                         .name = "gcc_usb3_phy_aux_clk",
2199                         .parent_names = (const char *[]){
2200                                 "usb3_phy_aux_clk_src",
2201                         },
2202                         .num_parents = 1,
2203                         .flags = CLK_SET_RATE_PARENT,
2204                         .ops = &clk_branch2_ops,
2205                 },
2206         },
2207 };
2208
2209 static struct clk_branch gcc_usb3_phy_pipe_clk = {
2210         .halt_reg = 0x50004,
2211         .halt_check = BRANCH_HALT_DELAY,
2212         .clkr = {
2213                 .enable_reg = 0x50004,
2214                 .enable_mask = BIT(0),
2215                 .hw.init = &(struct clk_init_data){
2216                         .name = "gcc_usb3_phy_pipe_clk",
2217                         .ops = &clk_branch2_ops,
2218                 },
2219         },
2220 };
2221
2222 static struct clk_branch gcc_usb_phy_cfg_ahb2phy_clk = {
2223         .halt_reg = 0x6a004,
2224         .halt_check = BRANCH_HALT,
2225         .clkr = {
2226                 .enable_reg = 0x6a004,
2227                 .enable_mask = BIT(0),
2228                 .hw.init = &(struct clk_init_data){
2229                         .name = "gcc_usb_phy_cfg_ahb2phy_clk",
2230                         .ops = &clk_branch2_ops,
2231                 },
2232         },
2233 };
2234
2235 static struct gdsc ufs_gdsc = {
2236         .gdscr = 0x75004,
2237         .gds_hw_ctrl = 0x0,
2238         .pd = {
2239                 .name = "ufs_gdsc",
2240         },
2241         .pwrsts = PWRSTS_OFF_ON,
2242         .flags = VOTABLE,
2243 };
2244
2245 static struct gdsc usb_30_gdsc = {
2246         .gdscr = 0xf004,
2247         .gds_hw_ctrl = 0x0,
2248         .pd = {
2249                 .name = "usb_30_gdsc",
2250         },
2251         .pwrsts = PWRSTS_OFF_ON,
2252         .flags = VOTABLE,
2253 };
2254
2255 static struct gdsc pcie_0_gdsc = {
2256         .gdscr = 0x6b004,
2257         .gds_hw_ctrl = 0x0,
2258         .pd = {
2259                 .name = "pcie_0_gdsc",
2260         },
2261         .pwrsts = PWRSTS_OFF_ON,
2262         .flags = VOTABLE,
2263 };
2264
2265 static struct clk_hw *gcc_sdm660_hws[] = {
2266         &xo.hw,
2267         &gpll0_early_div.hw,
2268         &gpll1_early_div.hw,
2269 };
2270
2271 static struct clk_regmap *gcc_sdm660_clocks[] = {
2272         [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
2273         [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
2274         [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
2275         [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
2276         [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
2277         [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
2278         [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
2279         [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
2280         [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
2281         [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
2282         [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
2283         [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
2284         [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
2285         [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
2286         [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
2287         [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
2288         [BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
2289         [BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
2290         [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
2291         [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
2292         [GCC_AGGRE2_UFS_AXI_CLK] = &gcc_aggre2_ufs_axi_clk.clkr,
2293         [GCC_AGGRE2_USB3_AXI_CLK] = &gcc_aggre2_usb3_axi_clk.clkr,
2294         [GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
2295         [GCC_BIMC_HMSS_AXI_CLK] = &gcc_bimc_hmss_axi_clk.clkr,
2296         [GCC_BIMC_MSS_Q6_AXI_CLK] = &gcc_bimc_mss_q6_axi_clk.clkr,
2297         [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
2298         [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
2299         [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
2300         [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
2301         [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
2302         [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
2303         [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
2304         [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
2305         [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
2306         [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
2307         [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
2308         [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
2309         [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
2310         [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
2311         [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
2312         [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
2313         [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
2314         [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
2315         [GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
2316         [GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
2317         [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
2318         [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
2319         [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2320         [GCC_CFG_NOC_USB2_AXI_CLK] = &gcc_cfg_noc_usb2_axi_clk.clkr,
2321         [GCC_CFG_NOC_USB3_AXI_CLK] = &gcc_cfg_noc_usb3_axi_clk.clkr,
2322         [GCC_DCC_AHB_CLK] = &gcc_dcc_ahb_clk.clkr,
2323         [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2324         [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2325         [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2326         [GCC_GPU_BIMC_GFX_CLK] = &gcc_gpu_bimc_gfx_clk.clkr,
2327         [GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,
2328         [GCC_GPU_GPLL0_CLK] = &gcc_gpu_gpll0_clk.clkr,
2329         [GCC_GPU_GPLL0_DIV_CLK] = &gcc_gpu_gpll0_div_clk.clkr,
2330         [GCC_HMSS_DVM_BUS_CLK] = &gcc_hmss_dvm_bus_clk.clkr,
2331         [GCC_HMSS_RBCPR_CLK] = &gcc_hmss_rbcpr_clk.clkr,
2332         [GCC_MMSS_GPLL0_CLK] = &gcc_mmss_gpll0_clk.clkr,
2333         [GCC_MMSS_GPLL0_DIV_CLK] = &gcc_mmss_gpll0_div_clk.clkr,
2334         [GCC_MMSS_NOC_CFG_AHB_CLK] = &gcc_mmss_noc_cfg_ahb_clk.clkr,
2335         [GCC_MMSS_SYS_NOC_AXI_CLK] = &gcc_mmss_sys_noc_axi_clk.clkr,
2336         [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
2337         [GCC_MSS_MNOC_BIMC_AXI_CLK] = &gcc_mss_mnoc_bimc_axi_clk.clkr,
2338         [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
2339         [GCC_MSS_SNOC_AXI_CLK] = &gcc_mss_snoc_axi_clk.clkr,
2340         [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2341         [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2342         [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
2343         [GCC_QSPI_AHB_CLK] = &gcc_qspi_ahb_clk.clkr,
2344         [GCC_QSPI_SER_CLK] = &gcc_qspi_ser_clk.clkr,
2345         [GCC_RX0_USB2_CLKREF_CLK] = &gcc_rx0_usb2_clkref_clk.clkr,
2346         [GCC_RX1_USB2_CLKREF_CLK] = &gcc_rx1_usb2_clkref_clk.clkr,
2347         [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2348         [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2349         [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
2350         [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2351         [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2352         [GCC_UFS_AHB_CLK] = &gcc_ufs_ahb_clk.clkr,
2353         [GCC_UFS_AXI_CLK] = &gcc_ufs_axi_clk.clkr,
2354         [GCC_UFS_CLKREF_CLK] = &gcc_ufs_clkref_clk.clkr,
2355         [GCC_UFS_ICE_CORE_CLK] = &gcc_ufs_ice_core_clk.clkr,
2356         [GCC_UFS_PHY_AUX_CLK] = &gcc_ufs_phy_aux_clk.clkr,
2357         [GCC_UFS_RX_SYMBOL_0_CLK] = &gcc_ufs_rx_symbol_0_clk.clkr,
2358         [GCC_UFS_RX_SYMBOL_1_CLK] = &gcc_ufs_rx_symbol_1_clk.clkr,
2359         [GCC_UFS_TX_SYMBOL_0_CLK] = &gcc_ufs_tx_symbol_0_clk.clkr,
2360         [GCC_UFS_UNIPRO_CORE_CLK] = &gcc_ufs_unipro_core_clk.clkr,
2361         [GCC_USB20_MASTER_CLK] = &gcc_usb20_master_clk.clkr,
2362         [GCC_USB20_MOCK_UTMI_CLK] = &gcc_usb20_mock_utmi_clk.clkr,
2363         [GCC_USB20_SLEEP_CLK] = &gcc_usb20_sleep_clk.clkr,
2364         [GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
2365         [GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
2366         [GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,
2367         [GCC_USB3_CLKREF_CLK] = &gcc_usb3_clkref_clk.clkr,
2368         [GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr,
2369         [GCC_USB3_PHY_PIPE_CLK] = &gcc_usb3_phy_pipe_clk.clkr,
2370         [GCC_USB_PHY_CFG_AHB2PHY_CLK] = &gcc_usb_phy_cfg_ahb2phy_clk.clkr,
2371         [GP1_CLK_SRC] = &gp1_clk_src.clkr,
2372         [GP2_CLK_SRC] = &gp2_clk_src.clkr,
2373         [GP3_CLK_SRC] = &gp3_clk_src.clkr,
2374         [GPLL0] = &gpll0.clkr,
2375         [GPLL0_EARLY] = &gpll0_early.clkr,
2376         [GPLL1] = &gpll1.clkr,
2377         [GPLL1_EARLY] = &gpll1_early.clkr,
2378         [GPLL4] = &gpll4.clkr,
2379         [GPLL4_EARLY] = &gpll4_early.clkr,
2380         [HMSS_GPLL0_CLK_SRC] = &hmss_gpll0_clk_src.clkr,
2381         [HMSS_GPLL4_CLK_SRC] = &hmss_gpll4_clk_src.clkr,
2382         [HMSS_RBCPR_CLK_SRC] = &hmss_rbcpr_clk_src.clkr,
2383         [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
2384         [QSPI_SER_CLK_SRC] = &qspi_ser_clk_src.clkr,
2385         [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
2386         [SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
2387         [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
2388         [UFS_AXI_CLK_SRC] = &ufs_axi_clk_src.clkr,
2389         [UFS_ICE_CORE_CLK_SRC] = &ufs_ice_core_clk_src.clkr,
2390         [UFS_PHY_AUX_CLK_SRC] = &ufs_phy_aux_clk_src.clkr,
2391         [UFS_UNIPRO_CORE_CLK_SRC] = &ufs_unipro_core_clk_src.clkr,
2392         [USB20_MASTER_CLK_SRC] = &usb20_master_clk_src.clkr,
2393         [USB20_MOCK_UTMI_CLK_SRC] = &usb20_mock_utmi_clk_src.clkr,
2394         [USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
2395         [USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
2396         [USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr,
2397 };
2398
2399 static struct gdsc *gcc_sdm660_gdscs[] = {
2400         [UFS_GDSC] = &ufs_gdsc,
2401         [USB_30_GDSC] = &usb_30_gdsc,
2402         [PCIE_0_GDSC] = &pcie_0_gdsc,
2403 };
2404
2405 static const struct qcom_reset_map gcc_sdm660_resets[] = {
2406         [GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 },
2407         [GCC_QUSB2PHY_SEC_BCR] = { 0x12004 },
2408         [GCC_UFS_BCR] = { 0x75000 },
2409         [GCC_USB3_DP_PHY_BCR] = { 0x50028 },
2410         [GCC_USB3_PHY_BCR] = { 0x50020 },
2411         [GCC_USB3PHY_PHY_BCR] = { 0x50024 },
2412         [GCC_USB_20_BCR] = { 0x2f000 },
2413         [GCC_USB_30_BCR] = { 0xf000 },
2414         [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 },
2415         [GCC_MSS_RESTART] = { 0x79000 },
2416 };
2417
2418 static const struct regmap_config gcc_sdm660_regmap_config = {
2419         .reg_bits       = 32,
2420         .reg_stride     = 4,
2421         .val_bits       = 32,
2422         .max_register   = 0x94000,
2423         .fast_io        = true,
2424 };
2425
2426 static const struct qcom_cc_desc gcc_sdm660_desc = {
2427         .config = &gcc_sdm660_regmap_config,
2428         .clks = gcc_sdm660_clocks,
2429         .num_clks = ARRAY_SIZE(gcc_sdm660_clocks),
2430         .resets = gcc_sdm660_resets,
2431         .num_resets = ARRAY_SIZE(gcc_sdm660_resets),
2432         .gdscs = gcc_sdm660_gdscs,
2433         .num_gdscs = ARRAY_SIZE(gcc_sdm660_gdscs),
2434         .clk_hws = gcc_sdm660_hws,
2435         .num_clk_hws = ARRAY_SIZE(gcc_sdm660_hws),
2436 };
2437
2438 static const struct of_device_id gcc_sdm660_match_table[] = {
2439         { .compatible = "qcom,gcc-sdm630" },
2440         { .compatible = "qcom,gcc-sdm660" },
2441         { }
2442 };
2443 MODULE_DEVICE_TABLE(of, gcc_sdm660_match_table);
2444
2445 static int gcc_sdm660_probe(struct platform_device *pdev)
2446 {
2447         int ret;
2448         struct regmap *regmap;
2449
2450         regmap = qcom_cc_map(pdev, &gcc_sdm660_desc);
2451         if (IS_ERR(regmap))
2452                 return PTR_ERR(regmap);
2453
2454         /*
2455          * Set the HMSS_AHB_CLK_SLEEP_ENA bit to allow the hmss_ahb_clk to be
2456          * turned off by hardware during certain apps low power modes.
2457          */
2458         ret = regmap_update_bits(regmap, 0x52008, BIT(21), BIT(21));
2459         if (ret)
2460                 return ret;
2461
2462         return qcom_cc_really_probe(pdev, &gcc_sdm660_desc, regmap);
2463 }
2464
2465 static struct platform_driver gcc_sdm660_driver = {
2466         .probe          = gcc_sdm660_probe,
2467         .driver         = {
2468                 .name   = "gcc-sdm660",
2469                 .of_match_table = gcc_sdm660_match_table,
2470         },
2471 };
2472
2473 static int __init gcc_sdm660_init(void)
2474 {
2475         return platform_driver_register(&gcc_sdm660_driver);
2476 }
2477 core_initcall_sync(gcc_sdm660_init);
2478
2479 static void __exit gcc_sdm660_exit(void)
2480 {
2481         platform_driver_unregister(&gcc_sdm660_driver);
2482 }
2483 module_exit(gcc_sdm660_exit);
2484
2485 MODULE_LICENSE("GPL v2");
2486 MODULE_DESCRIPTION("QCOM GCC sdm660 Driver");