Merge branch 'omap-for-v4.20/defconfig' into omap-for-v4.21/defconfig
[sfrench/cifs-2.6.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_gpll0_early_div,
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_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                 },
1575         },
1576 };
1577
1578 static struct clk_branch gcc_gpu_gpll0_clk = {
1579         .halt_reg = 0x5200c,
1580         .halt_check = BRANCH_HALT_DELAY,
1581         .clkr = {
1582                 .enable_reg = 0x5200c,
1583                 .enable_mask = BIT(4),
1584                 .hw.init = &(struct clk_init_data){
1585                         .name = "gcc_gpu_gpll0_clk",
1586                         .parent_names = (const char *[]){
1587                                 "gpll0",
1588                         },
1589                         .num_parents = 1,
1590                         .ops = &clk_branch2_ops,
1591                 },
1592         },
1593 };
1594
1595 static struct clk_branch gcc_gpu_gpll0_div_clk = {
1596         .halt_reg = 0x5200c,
1597         .halt_check = BRANCH_HALT_DELAY,
1598         .clkr = {
1599                 .enable_reg = 0x5200c,
1600                 .enable_mask = BIT(3),
1601                 .hw.init = &(struct clk_init_data){
1602                         .name = "gcc_gpu_gpll0_div_clk",
1603                         .parent_names = (const char *[]){
1604                                 "gpll0_early_div",
1605                         },
1606                         .num_parents = 1,
1607                         .ops = &clk_branch2_ops,
1608                 },
1609         },
1610 };
1611
1612 static struct clk_branch gcc_hmss_dvm_bus_clk = {
1613         .halt_reg = 0x4808c,
1614         .halt_check = BRANCH_HALT,
1615         .clkr = {
1616                 .enable_reg = 0x4808c,
1617                 .enable_mask = BIT(0),
1618                 .hw.init = &(struct clk_init_data){
1619                         .name = "gcc_hmss_dvm_bus_clk",
1620                         .ops = &clk_branch2_ops,
1621                         .flags = CLK_IGNORE_UNUSED,
1622                 },
1623         },
1624 };
1625
1626 static struct clk_branch gcc_hmss_rbcpr_clk = {
1627         .halt_reg = 0x48008,
1628         .halt_check = BRANCH_HALT,
1629         .clkr = {
1630                 .enable_reg = 0x48008,
1631                 .enable_mask = BIT(0),
1632                 .hw.init = &(struct clk_init_data){
1633                         .name = "gcc_hmss_rbcpr_clk",
1634                         .parent_names = (const char *[]){
1635                                 "hmss_rbcpr_clk_src",
1636                         },
1637                         .num_parents = 1,
1638                         .flags = CLK_SET_RATE_PARENT,
1639                         .ops = &clk_branch2_ops,
1640                 },
1641         },
1642 };
1643
1644 static struct clk_branch gcc_mmss_gpll0_clk = {
1645         .halt_reg = 0x5200c,
1646         .halt_check = BRANCH_HALT_DELAY,
1647         .clkr = {
1648                 .enable_reg = 0x5200c,
1649                 .enable_mask = BIT(1),
1650                 .hw.init = &(struct clk_init_data){
1651                         .name = "gcc_mmss_gpll0_clk",
1652                         .parent_names = (const char *[]){
1653                                 "gpll0",
1654                         },
1655                         .num_parents = 1,
1656                         .ops = &clk_branch2_ops,
1657                 },
1658         },
1659 };
1660
1661 static struct clk_branch gcc_mmss_gpll0_div_clk = {
1662         .halt_reg = 0x5200c,
1663         .halt_check = BRANCH_HALT_DELAY,
1664         .clkr = {
1665                 .enable_reg = 0x5200c,
1666                 .enable_mask = BIT(0),
1667                 .hw.init = &(struct clk_init_data){
1668                         .name = "gcc_mmss_gpll0_div_clk",
1669                         .parent_names = (const char *[]){
1670                                 "gpll0_early_div",
1671                         },
1672                         .num_parents = 1,
1673                         .ops = &clk_branch2_ops,
1674                 },
1675         },
1676 };
1677
1678 static struct clk_branch gcc_mmss_noc_cfg_ahb_clk = {
1679         .halt_reg = 0x9004,
1680         .halt_check = BRANCH_HALT,
1681         .clkr = {
1682                 .enable_reg = 0x9004,
1683                 .enable_mask = BIT(0),
1684                 .hw.init = &(struct clk_init_data){
1685                         .name = "gcc_mmss_noc_cfg_ahb_clk",
1686                         .ops = &clk_branch2_ops,
1687                 },
1688         },
1689 };
1690
1691 static struct clk_branch gcc_mmss_sys_noc_axi_clk = {
1692         .halt_reg = 0x9000,
1693         .halt_check = BRANCH_HALT,
1694         .clkr = {
1695                 .enable_reg = 0x9000,
1696                 .enable_mask = BIT(0),
1697                 .hw.init = &(struct clk_init_data){
1698                         .name = "gcc_mmss_sys_noc_axi_clk",
1699                         .ops = &clk_branch2_ops,
1700                 },
1701         },
1702 };
1703
1704 static struct clk_branch gcc_mss_cfg_ahb_clk = {
1705         .halt_reg = 0x8a000,
1706         .clkr = {
1707                 .enable_reg = 0x8a000,
1708                 .enable_mask = BIT(0),
1709                 .hw.init = &(struct clk_init_data){
1710                         .name = "gcc_mss_cfg_ahb_clk",
1711                         .ops = &clk_branch2_ops,
1712                 },
1713         },
1714 };
1715
1716 static struct clk_branch gcc_mss_mnoc_bimc_axi_clk = {
1717         .halt_reg = 0x8a004,
1718         .clkr = {
1719                 .enable_reg = 0x8a004,
1720                 .enable_mask = BIT(0),
1721                 .hw.init = &(struct clk_init_data){
1722                         .name = "gcc_mss_mnoc_bimc_axi_clk",
1723                         .ops = &clk_branch2_ops,
1724                 },
1725         },
1726 };
1727
1728 static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
1729         .halt_reg = 0x8a040,
1730         .clkr = {
1731                 .enable_reg = 0x8a040,
1732                 .enable_mask = BIT(0),
1733                 .hw.init = &(struct clk_init_data){
1734                         .name = "gcc_mss_q6_bimc_axi_clk",
1735                         .ops = &clk_branch2_ops,
1736                 },
1737         },
1738 };
1739
1740 static struct clk_branch gcc_mss_snoc_axi_clk = {
1741         .halt_reg = 0x8a03c,
1742         .clkr = {
1743                 .enable_reg = 0x8a03c,
1744                 .enable_mask = BIT(0),
1745                 .hw.init = &(struct clk_init_data){
1746                         .name = "gcc_mss_snoc_axi_clk",
1747                         .ops = &clk_branch2_ops,
1748                 },
1749         },
1750 };
1751
1752 static struct clk_branch gcc_pdm2_clk = {
1753         .halt_reg = 0x3300c,
1754         .halt_check = BRANCH_HALT,
1755         .clkr = {
1756                 .enable_reg = 0x3300c,
1757                 .enable_mask = BIT(0),
1758                 .hw.init = &(struct clk_init_data){
1759                         .name = "gcc_pdm2_clk",
1760                         .parent_names = (const char *[]){
1761                                 "pdm2_clk_src",
1762                         },
1763                         .num_parents = 1,
1764                         .flags = CLK_SET_RATE_PARENT,
1765                         .ops = &clk_branch2_ops,
1766                 },
1767         },
1768 };
1769
1770 static struct clk_branch gcc_pdm_ahb_clk = {
1771         .halt_reg = 0x33004,
1772         .halt_check = BRANCH_HALT,
1773         .clkr = {
1774                 .enable_reg = 0x33004,
1775                 .enable_mask = BIT(0),
1776                 .hw.init = &(struct clk_init_data){
1777                         .name = "gcc_pdm_ahb_clk",
1778                         .ops = &clk_branch2_ops,
1779                 },
1780         },
1781 };
1782
1783 static struct clk_branch gcc_prng_ahb_clk = {
1784         .halt_reg = 0x34004,
1785         .halt_check = BRANCH_HALT_VOTED,
1786         .clkr = {
1787                 .enable_reg = 0x52004,
1788                 .enable_mask = BIT(13),
1789                 .hw.init = &(struct clk_init_data){
1790                         .name = "gcc_prng_ahb_clk",
1791                         .ops = &clk_branch2_ops,
1792                 },
1793         },
1794 };
1795
1796 static struct clk_branch gcc_qspi_ahb_clk = {
1797         .halt_reg = 0x4d004,
1798         .halt_check = BRANCH_HALT,
1799         .clkr = {
1800                 .enable_reg = 0x4d004,
1801                 .enable_mask = BIT(0),
1802                 .hw.init = &(struct clk_init_data){
1803                         .name = "gcc_qspi_ahb_clk",
1804                         .ops = &clk_branch2_ops,
1805                 },
1806         },
1807 };
1808
1809 static struct clk_branch gcc_qspi_ser_clk = {
1810         .halt_reg = 0x4d008,
1811         .halt_check = BRANCH_HALT,
1812         .clkr = {
1813                 .enable_reg = 0x4d008,
1814                 .enable_mask = BIT(0),
1815                 .hw.init = &(struct clk_init_data){
1816                         .name = "gcc_qspi_ser_clk",
1817                         .parent_names = (const char *[]){
1818                                 "qspi_ser_clk_src",
1819                         },
1820                         .num_parents = 1,
1821                         .flags = CLK_SET_RATE_PARENT,
1822                         .ops = &clk_branch2_ops,
1823                 },
1824         },
1825 };
1826
1827 static struct clk_branch gcc_rx0_usb2_clkref_clk = {
1828         .halt_reg = 0x88018,
1829         .halt_check = BRANCH_HALT_VOTED,
1830         .clkr = {
1831                 .enable_reg = 0x88018,
1832                 .enable_mask = BIT(0),
1833                 .hw.init = &(struct clk_init_data){
1834                         .name = "gcc_rx0_usb2_clkref_clk",
1835                         .ops = &clk_branch2_ops,
1836                 },
1837         },
1838 };
1839
1840 static struct clk_branch gcc_rx1_usb2_clkref_clk = {
1841         .halt_reg = 0x88014,
1842         .halt_check = BRANCH_HALT_VOTED,
1843         .clkr = {
1844                 .enable_reg = 0x88014,
1845                 .enable_mask = BIT(0),
1846                 .hw.init = &(struct clk_init_data){
1847                         .name = "gcc_rx1_usb2_clkref_clk",
1848                         .ops = &clk_branch2_ops,
1849                 },
1850         },
1851 };
1852
1853 static struct clk_branch gcc_sdcc1_ahb_clk = {
1854         .halt_reg = 0x16008,
1855         .halt_check = BRANCH_HALT,
1856         .clkr = {
1857                 .enable_reg = 0x16008,
1858                 .enable_mask = BIT(0),
1859                 .hw.init = &(struct clk_init_data){
1860                         .name = "gcc_sdcc1_ahb_clk",
1861                         .ops = &clk_branch2_ops,
1862                 },
1863         },
1864 };
1865
1866 static struct clk_branch gcc_sdcc1_apps_clk = {
1867         .halt_reg = 0x16004,
1868         .halt_check = BRANCH_HALT,
1869         .clkr = {
1870                 .enable_reg = 0x16004,
1871                 .enable_mask = BIT(0),
1872                 .hw.init = &(struct clk_init_data){
1873                         .name = "gcc_sdcc1_apps_clk",
1874                         .parent_names = (const char *[]){
1875                                 "sdcc1_apps_clk_src",
1876                         },
1877                         .num_parents = 1,
1878                         .flags = CLK_SET_RATE_PARENT,
1879                         .ops = &clk_branch2_ops,
1880                 },
1881         },
1882 };
1883
1884 static struct clk_branch gcc_sdcc1_ice_core_clk = {
1885         .halt_reg = 0x1600c,
1886         .halt_check = BRANCH_HALT,
1887         .clkr = {
1888                 .enable_reg = 0x1600c,
1889                 .enable_mask = BIT(0),
1890                 .hw.init = &(struct clk_init_data){
1891                         .name = "gcc_sdcc1_ice_core_clk",
1892                         .parent_names = (const char *[]){
1893                                 "sdcc1_ice_core_clk_src",
1894                         },
1895                         .num_parents = 1,
1896                         .flags = CLK_SET_RATE_PARENT,
1897                         .ops = &clk_branch2_ops,
1898                 },
1899         },
1900 };
1901
1902 static struct clk_branch gcc_sdcc2_ahb_clk = {
1903         .halt_reg = 0x14008,
1904         .halt_check = BRANCH_HALT,
1905         .clkr = {
1906                 .enable_reg = 0x14008,
1907                 .enable_mask = BIT(0),
1908                 .hw.init = &(struct clk_init_data){
1909                         .name = "gcc_sdcc2_ahb_clk",
1910                         .ops = &clk_branch2_ops,
1911                 },
1912         },
1913 };
1914
1915 static struct clk_branch gcc_sdcc2_apps_clk = {
1916         .halt_reg = 0x14004,
1917         .halt_check = BRANCH_HALT,
1918         .clkr = {
1919                 .enable_reg = 0x14004,
1920                 .enable_mask = BIT(0),
1921                 .hw.init = &(struct clk_init_data){
1922                         .name = "gcc_sdcc2_apps_clk",
1923                         .parent_names = (const char *[]){
1924                                 "sdcc2_apps_clk_src",
1925                         },
1926                         .num_parents = 1,
1927                         .flags = CLK_SET_RATE_PARENT,
1928                         .ops = &clk_branch2_ops,
1929                 },
1930         },
1931 };
1932
1933 static struct clk_branch gcc_ufs_ahb_clk = {
1934         .halt_reg = 0x7500c,
1935         .halt_check = BRANCH_HALT,
1936         .clkr = {
1937                 .enable_reg = 0x7500c,
1938                 .enable_mask = BIT(0),
1939                 .hw.init = &(struct clk_init_data){
1940                         .name = "gcc_ufs_ahb_clk",
1941                         .ops = &clk_branch2_ops,
1942                 },
1943         },
1944 };
1945
1946 static struct clk_branch gcc_ufs_axi_clk = {
1947         .halt_reg = 0x75008,
1948         .halt_check = BRANCH_HALT,
1949         .clkr = {
1950                 .enable_reg = 0x75008,
1951                 .enable_mask = BIT(0),
1952                 .hw.init = &(struct clk_init_data){
1953                         .name = "gcc_ufs_axi_clk",
1954                         .parent_names = (const char *[]){
1955                                 "ufs_axi_clk_src",
1956                         },
1957                         .num_parents = 1,
1958                         .flags = CLK_SET_RATE_PARENT,
1959                         .ops = &clk_branch2_ops,
1960                 },
1961         },
1962 };
1963
1964 static struct clk_branch gcc_ufs_clkref_clk = {
1965         .halt_reg = 0x88008,
1966         .halt_check = BRANCH_HALT,
1967         .clkr = {
1968                 .enable_reg = 0x88008,
1969                 .enable_mask = BIT(0),
1970                 .hw.init = &(struct clk_init_data){
1971                         .name = "gcc_ufs_clkref_clk",
1972                         .ops = &clk_branch2_ops,
1973                 },
1974         },
1975 };
1976
1977 static struct clk_branch gcc_ufs_ice_core_clk = {
1978         .halt_reg = 0x7600c,
1979         .halt_check = BRANCH_HALT,
1980         .clkr = {
1981                 .enable_reg = 0x7600c,
1982                 .enable_mask = BIT(0),
1983                 .hw.init = &(struct clk_init_data){
1984                         .name = "gcc_ufs_ice_core_clk",
1985                         .parent_names = (const char *[]){
1986                                 "ufs_ice_core_clk_src",
1987                         },
1988                         .num_parents = 1,
1989                         .flags = CLK_SET_RATE_PARENT,
1990                         .ops = &clk_branch2_ops,
1991                 },
1992         },
1993 };
1994
1995 static struct clk_branch gcc_ufs_phy_aux_clk = {
1996         .halt_reg = 0x76040,
1997         .halt_check = BRANCH_HALT,
1998         .clkr = {
1999                 .enable_reg = 0x76040,
2000                 .enable_mask = BIT(0),
2001                 .hw.init = &(struct clk_init_data){
2002                         .name = "gcc_ufs_phy_aux_clk",
2003                         .parent_names = (const char *[]){
2004                                 "ufs_phy_aux_clk_src",
2005                         },
2006                         .num_parents = 1,
2007                         .flags = CLK_SET_RATE_PARENT,
2008                         .ops = &clk_branch2_ops,
2009                 },
2010         },
2011 };
2012
2013 static struct clk_branch gcc_ufs_rx_symbol_0_clk = {
2014         .halt_reg = 0x75014,
2015         .halt_check = BRANCH_HALT_SKIP,
2016         .clkr = {
2017                 .enable_reg = 0x75014,
2018                 .enable_mask = BIT(0),
2019                 .hw.init = &(struct clk_init_data){
2020                         .name = "gcc_ufs_rx_symbol_0_clk",
2021                         .ops = &clk_branch2_ops,
2022                 },
2023         },
2024 };
2025
2026 static struct clk_branch gcc_ufs_rx_symbol_1_clk = {
2027         .halt_reg = 0x7605c,
2028         .halt_check = BRANCH_HALT_SKIP,
2029         .clkr = {
2030                 .enable_reg = 0x7605c,
2031                 .enable_mask = BIT(0),
2032                 .hw.init = &(struct clk_init_data){
2033                         .name = "gcc_ufs_rx_symbol_1_clk",
2034                         .ops = &clk_branch2_ops,
2035                 },
2036         },
2037 };
2038
2039 static struct clk_branch gcc_ufs_tx_symbol_0_clk = {
2040         .halt_reg = 0x75010,
2041         .halt_check = BRANCH_HALT_SKIP,
2042         .clkr = {
2043                 .enable_reg = 0x75010,
2044                 .enable_mask = BIT(0),
2045                 .hw.init = &(struct clk_init_data){
2046                         .name = "gcc_ufs_tx_symbol_0_clk",
2047                         .ops = &clk_branch2_ops,
2048                 },
2049         },
2050 };
2051
2052 static struct clk_branch gcc_ufs_unipro_core_clk = {
2053         .halt_reg = 0x76008,
2054         .halt_check = BRANCH_HALT,
2055         .clkr = {
2056                 .enable_reg = 0x76008,
2057                 .enable_mask = BIT(0),
2058                 .hw.init = &(struct clk_init_data){
2059                         .name = "gcc_ufs_unipro_core_clk",
2060                         .parent_names = (const char *[]){
2061                                 "ufs_unipro_core_clk_src",
2062                         },
2063                         .flags = CLK_SET_RATE_PARENT,
2064                         .num_parents = 1,
2065                         .ops = &clk_branch2_ops,
2066                 },
2067         },
2068 };
2069
2070 static struct clk_branch gcc_usb20_master_clk = {
2071         .halt_reg = 0x2f004,
2072         .halt_check = BRANCH_HALT,
2073         .clkr = {
2074                 .enable_reg = 0x2f004,
2075                 .enable_mask = BIT(0),
2076                 .hw.init = &(struct clk_init_data){
2077                         .name = "gcc_usb20_master_clk",
2078                         .parent_names = (const char *[]){
2079                                 "usb20_master_clk_src"
2080                         },
2081                         .flags = CLK_SET_RATE_PARENT,
2082                         .num_parents = 1,
2083                         .ops = &clk_branch2_ops,
2084                 },
2085         },
2086 };
2087
2088 static struct clk_branch gcc_usb20_mock_utmi_clk = {
2089         .halt_reg = 0x2f00c,
2090         .halt_check = BRANCH_HALT,
2091         .clkr = {
2092                 .enable_reg = 0x2f00c,
2093                 .enable_mask = BIT(0),
2094                 .hw.init = &(struct clk_init_data){
2095                         .name = "gcc_usb20_mock_utmi_clk",
2096                         .parent_names = (const char *[]){
2097                                 "usb20_mock_utmi_clk_src",
2098                         },
2099                         .num_parents = 1,
2100                         .flags = CLK_SET_RATE_PARENT,
2101                         .ops = &clk_branch2_ops,
2102                 },
2103         },
2104 };
2105
2106 static struct clk_branch gcc_usb20_sleep_clk = {
2107         .halt_reg = 0x2f008,
2108         .halt_check = BRANCH_HALT,
2109         .clkr = {
2110                 .enable_reg = 0x2f008,
2111                 .enable_mask = BIT(0),
2112                 .hw.init = &(struct clk_init_data){
2113                         .name = "gcc_usb20_sleep_clk",
2114                         .ops = &clk_branch2_ops,
2115                 },
2116         },
2117 };
2118
2119 static struct clk_branch gcc_usb30_master_clk = {
2120         .halt_reg = 0xf008,
2121         .halt_check = BRANCH_HALT,
2122         .clkr = {
2123                 .enable_reg = 0xf008,
2124                 .enable_mask = BIT(0),
2125                 .hw.init = &(struct clk_init_data){
2126                         .name = "gcc_usb30_master_clk",
2127                         .parent_names = (const char *[]){
2128                                 "usb30_master_clk_src",
2129                         },
2130                         .num_parents = 1,
2131                         .flags = CLK_SET_RATE_PARENT,
2132                         .ops = &clk_branch2_ops,
2133                 },
2134         },
2135 };
2136
2137 static struct clk_branch gcc_usb30_mock_utmi_clk = {
2138         .halt_reg = 0xf010,
2139         .halt_check = BRANCH_HALT,
2140         .clkr = {
2141                 .enable_reg = 0xf010,
2142                 .enable_mask = BIT(0),
2143                 .hw.init = &(struct clk_init_data){
2144                         .name = "gcc_usb30_mock_utmi_clk",
2145                         .parent_names = (const char *[]){
2146                                 "usb30_mock_utmi_clk_src",
2147                         },
2148                         .num_parents = 1,
2149                         .flags = CLK_SET_RATE_PARENT,
2150                         .ops = &clk_branch2_ops,
2151                 },
2152         },
2153 };
2154
2155 static struct clk_branch gcc_usb30_sleep_clk = {
2156         .halt_reg = 0xf00c,
2157         .halt_check = BRANCH_HALT,
2158         .clkr = {
2159                 .enable_reg = 0xf00c,
2160                 .enable_mask = BIT(0),
2161                 .hw.init = &(struct clk_init_data){
2162                         .name = "gcc_usb30_sleep_clk",
2163                         .ops = &clk_branch2_ops,
2164                 },
2165         },
2166 };
2167
2168 static struct clk_branch gcc_usb3_clkref_clk = {
2169         .halt_reg = 0x8800c,
2170         .halt_check = BRANCH_HALT,
2171         .clkr = {
2172                 .enable_reg = 0x8800c,
2173                 .enable_mask = BIT(0),
2174                 .hw.init = &(struct clk_init_data){
2175                         .name = "gcc_usb3_clkref_clk",
2176                         .ops = &clk_branch2_ops,
2177                 },
2178         },
2179 };
2180
2181 static struct clk_branch gcc_usb3_phy_aux_clk = {
2182         .halt_reg = 0x50000,
2183         .halt_check = BRANCH_HALT,
2184         .clkr = {
2185                 .enable_reg = 0x50000,
2186                 .enable_mask = BIT(0),
2187                 .hw.init = &(struct clk_init_data){
2188                         .name = "gcc_usb3_phy_aux_clk",
2189                         .parent_names = (const char *[]){
2190                                 "usb3_phy_aux_clk_src",
2191                         },
2192                         .num_parents = 1,
2193                         .flags = CLK_SET_RATE_PARENT,
2194                         .ops = &clk_branch2_ops,
2195                 },
2196         },
2197 };
2198
2199 static struct clk_branch gcc_usb3_phy_pipe_clk = {
2200         .halt_reg = 0x50004,
2201         .halt_check = BRANCH_HALT_DELAY,
2202         .clkr = {
2203                 .enable_reg = 0x50004,
2204                 .enable_mask = BIT(0),
2205                 .hw.init = &(struct clk_init_data){
2206                         .name = "gcc_usb3_phy_pipe_clk",
2207                         .ops = &clk_branch2_ops,
2208                 },
2209         },
2210 };
2211
2212 static struct clk_branch gcc_usb_phy_cfg_ahb2phy_clk = {
2213         .halt_reg = 0x6a004,
2214         .halt_check = BRANCH_HALT,
2215         .clkr = {
2216                 .enable_reg = 0x6a004,
2217                 .enable_mask = BIT(0),
2218                 .hw.init = &(struct clk_init_data){
2219                         .name = "gcc_usb_phy_cfg_ahb2phy_clk",
2220                         .ops = &clk_branch2_ops,
2221                 },
2222         },
2223 };
2224
2225 static struct gdsc ufs_gdsc = {
2226         .gdscr = 0x75004,
2227         .gds_hw_ctrl = 0x0,
2228         .pd = {
2229                 .name = "ufs_gdsc",
2230         },
2231         .pwrsts = PWRSTS_OFF_ON,
2232         .flags = VOTABLE,
2233 };
2234
2235 static struct gdsc usb_30_gdsc = {
2236         .gdscr = 0xf004,
2237         .gds_hw_ctrl = 0x0,
2238         .pd = {
2239                 .name = "usb_30_gdsc",
2240         },
2241         .pwrsts = PWRSTS_OFF_ON,
2242         .flags = VOTABLE,
2243 };
2244
2245 static struct gdsc pcie_0_gdsc = {
2246         .gdscr = 0x6b004,
2247         .gds_hw_ctrl = 0x0,
2248         .pd = {
2249                 .name = "pcie_0_gdsc",
2250         },
2251         .pwrsts = PWRSTS_OFF_ON,
2252         .flags = VOTABLE,
2253 };
2254
2255 static struct clk_hw *gcc_sdm660_hws[] = {
2256         &xo.hw,
2257         &gpll0_early_div.hw,
2258         &gpll1_early_div.hw,
2259 };
2260
2261 static struct clk_regmap *gcc_sdm660_clocks[] = {
2262         [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
2263         [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
2264         [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
2265         [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
2266         [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
2267         [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
2268         [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
2269         [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
2270         [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
2271         [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
2272         [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
2273         [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
2274         [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
2275         [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
2276         [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
2277         [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
2278         [BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
2279         [BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
2280         [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
2281         [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
2282         [GCC_AGGRE2_UFS_AXI_CLK] = &gcc_aggre2_ufs_axi_clk.clkr,
2283         [GCC_AGGRE2_USB3_AXI_CLK] = &gcc_aggre2_usb3_axi_clk.clkr,
2284         [GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
2285         [GCC_BIMC_HMSS_AXI_CLK] = &gcc_bimc_hmss_axi_clk.clkr,
2286         [GCC_BIMC_MSS_Q6_AXI_CLK] = &gcc_bimc_mss_q6_axi_clk.clkr,
2287         [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
2288         [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
2289         [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
2290         [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
2291         [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
2292         [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
2293         [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
2294         [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
2295         [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
2296         [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
2297         [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
2298         [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
2299         [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
2300         [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
2301         [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
2302         [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
2303         [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
2304         [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
2305         [GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
2306         [GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
2307         [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
2308         [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
2309         [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2310         [GCC_CFG_NOC_USB2_AXI_CLK] = &gcc_cfg_noc_usb2_axi_clk.clkr,
2311         [GCC_CFG_NOC_USB3_AXI_CLK] = &gcc_cfg_noc_usb3_axi_clk.clkr,
2312         [GCC_DCC_AHB_CLK] = &gcc_dcc_ahb_clk.clkr,
2313         [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2314         [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2315         [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2316         [GCC_GPU_BIMC_GFX_CLK] = &gcc_gpu_bimc_gfx_clk.clkr,
2317         [GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,
2318         [GCC_GPU_GPLL0_CLK] = &gcc_gpu_gpll0_clk.clkr,
2319         [GCC_GPU_GPLL0_DIV_CLK] = &gcc_gpu_gpll0_div_clk.clkr,
2320         [GCC_HMSS_DVM_BUS_CLK] = &gcc_hmss_dvm_bus_clk.clkr,
2321         [GCC_HMSS_RBCPR_CLK] = &gcc_hmss_rbcpr_clk.clkr,
2322         [GCC_MMSS_GPLL0_CLK] = &gcc_mmss_gpll0_clk.clkr,
2323         [GCC_MMSS_GPLL0_DIV_CLK] = &gcc_mmss_gpll0_div_clk.clkr,
2324         [GCC_MMSS_NOC_CFG_AHB_CLK] = &gcc_mmss_noc_cfg_ahb_clk.clkr,
2325         [GCC_MMSS_SYS_NOC_AXI_CLK] = &gcc_mmss_sys_noc_axi_clk.clkr,
2326         [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
2327         [GCC_MSS_MNOC_BIMC_AXI_CLK] = &gcc_mss_mnoc_bimc_axi_clk.clkr,
2328         [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
2329         [GCC_MSS_SNOC_AXI_CLK] = &gcc_mss_snoc_axi_clk.clkr,
2330         [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2331         [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2332         [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
2333         [GCC_QSPI_AHB_CLK] = &gcc_qspi_ahb_clk.clkr,
2334         [GCC_QSPI_SER_CLK] = &gcc_qspi_ser_clk.clkr,
2335         [GCC_RX0_USB2_CLKREF_CLK] = &gcc_rx0_usb2_clkref_clk.clkr,
2336         [GCC_RX1_USB2_CLKREF_CLK] = &gcc_rx1_usb2_clkref_clk.clkr,
2337         [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2338         [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2339         [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
2340         [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2341         [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2342         [GCC_UFS_AHB_CLK] = &gcc_ufs_ahb_clk.clkr,
2343         [GCC_UFS_AXI_CLK] = &gcc_ufs_axi_clk.clkr,
2344         [GCC_UFS_CLKREF_CLK] = &gcc_ufs_clkref_clk.clkr,
2345         [GCC_UFS_ICE_CORE_CLK] = &gcc_ufs_ice_core_clk.clkr,
2346         [GCC_UFS_PHY_AUX_CLK] = &gcc_ufs_phy_aux_clk.clkr,
2347         [GCC_UFS_RX_SYMBOL_0_CLK] = &gcc_ufs_rx_symbol_0_clk.clkr,
2348         [GCC_UFS_RX_SYMBOL_1_CLK] = &gcc_ufs_rx_symbol_1_clk.clkr,
2349         [GCC_UFS_TX_SYMBOL_0_CLK] = &gcc_ufs_tx_symbol_0_clk.clkr,
2350         [GCC_UFS_UNIPRO_CORE_CLK] = &gcc_ufs_unipro_core_clk.clkr,
2351         [GCC_USB20_MASTER_CLK] = &gcc_usb20_master_clk.clkr,
2352         [GCC_USB20_MOCK_UTMI_CLK] = &gcc_usb20_mock_utmi_clk.clkr,
2353         [GCC_USB20_SLEEP_CLK] = &gcc_usb20_sleep_clk.clkr,
2354         [GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
2355         [GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
2356         [GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,
2357         [GCC_USB3_CLKREF_CLK] = &gcc_usb3_clkref_clk.clkr,
2358         [GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr,
2359         [GCC_USB3_PHY_PIPE_CLK] = &gcc_usb3_phy_pipe_clk.clkr,
2360         [GCC_USB_PHY_CFG_AHB2PHY_CLK] = &gcc_usb_phy_cfg_ahb2phy_clk.clkr,
2361         [GP1_CLK_SRC] = &gp1_clk_src.clkr,
2362         [GP2_CLK_SRC] = &gp2_clk_src.clkr,
2363         [GP3_CLK_SRC] = &gp3_clk_src.clkr,
2364         [GPLL0] = &gpll0.clkr,
2365         [GPLL0_EARLY] = &gpll0_early.clkr,
2366         [GPLL1] = &gpll1.clkr,
2367         [GPLL1_EARLY] = &gpll1_early.clkr,
2368         [GPLL4] = &gpll4.clkr,
2369         [GPLL4_EARLY] = &gpll4_early.clkr,
2370         [HMSS_GPLL0_CLK_SRC] = &hmss_gpll0_clk_src.clkr,
2371         [HMSS_GPLL4_CLK_SRC] = &hmss_gpll4_clk_src.clkr,
2372         [HMSS_RBCPR_CLK_SRC] = &hmss_rbcpr_clk_src.clkr,
2373         [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
2374         [QSPI_SER_CLK_SRC] = &qspi_ser_clk_src.clkr,
2375         [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
2376         [SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
2377         [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
2378         [UFS_AXI_CLK_SRC] = &ufs_axi_clk_src.clkr,
2379         [UFS_ICE_CORE_CLK_SRC] = &ufs_ice_core_clk_src.clkr,
2380         [UFS_PHY_AUX_CLK_SRC] = &ufs_phy_aux_clk_src.clkr,
2381         [UFS_UNIPRO_CORE_CLK_SRC] = &ufs_unipro_core_clk_src.clkr,
2382         [USB20_MASTER_CLK_SRC] = &usb20_master_clk_src.clkr,
2383         [USB20_MOCK_UTMI_CLK_SRC] = &usb20_mock_utmi_clk_src.clkr,
2384         [USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
2385         [USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
2386         [USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr,
2387 };
2388
2389 static struct gdsc *gcc_sdm660_gdscs[] = {
2390         [UFS_GDSC] = &ufs_gdsc,
2391         [USB_30_GDSC] = &usb_30_gdsc,
2392         [PCIE_0_GDSC] = &pcie_0_gdsc,
2393 };
2394
2395 static const struct qcom_reset_map gcc_sdm660_resets[] = {
2396         [GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 },
2397         [GCC_QUSB2PHY_SEC_BCR] = { 0x12004 },
2398         [GCC_UFS_BCR] = { 0x75000 },
2399         [GCC_USB3_DP_PHY_BCR] = { 0x50028 },
2400         [GCC_USB3_PHY_BCR] = { 0x50020 },
2401         [GCC_USB3PHY_PHY_BCR] = { 0x50024 },
2402         [GCC_USB_20_BCR] = { 0x2f000 },
2403         [GCC_USB_30_BCR] = { 0xf000 },
2404         [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 },
2405 };
2406
2407 static const struct regmap_config gcc_sdm660_regmap_config = {
2408         .reg_bits       = 32,
2409         .reg_stride     = 4,
2410         .val_bits       = 32,
2411         .max_register   = 0x94000,
2412         .fast_io        = true,
2413 };
2414
2415 static const struct qcom_cc_desc gcc_sdm660_desc = {
2416         .config = &gcc_sdm660_regmap_config,
2417         .clks = gcc_sdm660_clocks,
2418         .num_clks = ARRAY_SIZE(gcc_sdm660_clocks),
2419         .resets = gcc_sdm660_resets,
2420         .num_resets = ARRAY_SIZE(gcc_sdm660_resets),
2421         .gdscs = gcc_sdm660_gdscs,
2422         .num_gdscs = ARRAY_SIZE(gcc_sdm660_gdscs),
2423 };
2424
2425 static const struct of_device_id gcc_sdm660_match_table[] = {
2426         { .compatible = "qcom,gcc-sdm630" },
2427         { .compatible = "qcom,gcc-sdm660" },
2428         { }
2429 };
2430 MODULE_DEVICE_TABLE(of, gcc_sdm660_match_table);
2431
2432 static int gcc_sdm660_probe(struct platform_device *pdev)
2433 {
2434         int i, ret;
2435         struct regmap *regmap;
2436
2437         regmap = qcom_cc_map(pdev, &gcc_sdm660_desc);
2438         if (IS_ERR(regmap))
2439                 return PTR_ERR(regmap);
2440
2441         /*
2442          * Set the HMSS_AHB_CLK_SLEEP_ENA bit to allow the hmss_ahb_clk to be
2443          * turned off by hardware during certain apps low power modes.
2444          */
2445         ret = regmap_update_bits(regmap, 0x52008, BIT(21), BIT(21));
2446         if (ret)
2447                 return ret;
2448
2449         /* Register the hws */
2450         for (i = 0; i < ARRAY_SIZE(gcc_sdm660_hws); i++) {
2451                 ret = devm_clk_hw_register(&pdev->dev, gcc_sdm660_hws[i]);
2452                 if (ret)
2453                         return ret;
2454         }
2455
2456         return qcom_cc_really_probe(pdev, &gcc_sdm660_desc, regmap);
2457 }
2458
2459 static struct platform_driver gcc_sdm660_driver = {
2460         .probe          = gcc_sdm660_probe,
2461         .driver         = {
2462                 .name   = "gcc-sdm660",
2463                 .of_match_table = gcc_sdm660_match_table,
2464         },
2465 };
2466
2467 static int __init gcc_sdm660_init(void)
2468 {
2469         return platform_driver_register(&gcc_sdm660_driver);
2470 }
2471 core_initcall_sync(gcc_sdm660_init);
2472
2473 static void __exit gcc_sdm660_exit(void)
2474 {
2475         platform_driver_unregister(&gcc_sdm660_driver);
2476 }
2477 module_exit(gcc_sdm660_exit);
2478
2479 MODULE_LICENSE("GPL v2");
2480 MODULE_DESCRIPTION("QCOM GCC sdm660 Driver");