3e5a8cb14d4df1bc34d0bcbb93618f15d44f89fc
[releases.git] / gcc-msm8953.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 // Copyright (c) 2021, The Linux Foundation. All rights reserved.
3
4 #include <linux/kernel.h>
5 #include <linux/bitops.h>
6 #include <linux/err.h>
7 #include <linux/module.h>
8 #include <linux/platform_device.h>
9 #include <linux/of.h>
10 #include <linux/clk-provider.h>
11 #include <linux/regmap.h>
12 #include <linux/reset-controller.h>
13
14 #include <dt-bindings/clock/qcom,gcc-msm8953.h>
15
16 #include "clk-alpha-pll.h"
17 #include "clk-branch.h"
18 #include "clk-rcg.h"
19 #include "common.h"
20 #include "gdsc.h"
21 #include "reset.h"
22
23 enum {
24         P_XO,
25         P_SLEEP_CLK,
26         P_GPLL0,
27         P_GPLL0_DIV2,
28         P_GPLL2,
29         P_GPLL3,
30         P_GPLL4,
31         P_GPLL6,
32         P_GPLL6_DIV2,
33         P_DSI0PLL,
34         P_DSI0PLL_BYTE,
35         P_DSI1PLL,
36         P_DSI1PLL_BYTE,
37 };
38
39 static struct clk_alpha_pll gpll0_early = {
40         .offset = 0x21000,
41         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
42         .clkr = {
43                 .enable_reg = 0x45000,
44                 .enable_mask = BIT(0),
45                 .hw.init = &(struct clk_init_data) {
46                         .name = "gpll0_early",
47                         .parent_data = &(const struct clk_parent_data) {
48                                 .fw_name = "xo",
49                         },
50                         .num_parents = 1,
51                         .ops = &clk_alpha_pll_fixed_ops,
52                 },
53         },
54 };
55
56 static struct clk_fixed_factor gpll0_early_div = {
57         .mult = 1,
58         .div = 2,
59         .hw.init = &(struct clk_init_data){
60                 .name = "gpll0_early_div",
61                 .parent_hws = (const struct clk_hw*[]){
62                         &gpll0_early.clkr.hw,
63                 },
64                 .num_parents = 1,
65                 .ops = &clk_fixed_factor_ops,
66         },
67 };
68
69 static struct clk_alpha_pll_postdiv gpll0 = {
70         .offset = 0x21000,
71         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
72         .clkr.hw.init = &(struct clk_init_data){
73                 .name = "gpll0",
74                 .parent_hws = (const struct clk_hw*[]){
75                         &gpll0_early.clkr.hw,
76                 },
77                 .num_parents = 1,
78                 .ops = &clk_alpha_pll_postdiv_ro_ops,
79         },
80 };
81
82 static struct clk_alpha_pll gpll2_early = {
83         .offset = 0x4a000,
84         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
85         .clkr = {
86                 .enable_reg = 0x45000,
87                 .enable_mask = BIT(2),
88                 .hw.init = &(struct clk_init_data){
89                         .name = "gpll2_early",
90                         .parent_data = &(const struct clk_parent_data) {
91                                 .fw_name = "xo",
92                         },
93                         .num_parents = 1,
94                         .ops = &clk_alpha_pll_fixed_ops,
95                 },
96         },
97 };
98
99 static struct clk_alpha_pll_postdiv gpll2 = {
100         .offset = 0x4a000,
101         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
102         .clkr.hw.init = &(struct clk_init_data){
103                 .name = "gpll2",
104                 .parent_hws = (const struct clk_hw*[]){
105                         &gpll2_early.clkr.hw,
106                 },
107                 .num_parents = 1,
108                 .ops = &clk_alpha_pll_postdiv_ro_ops,
109         },
110 };
111
112 static const struct pll_vco gpll3_p_vco[] = {
113         { 1000000000, 2000000000, 0 },
114 };
115
116 static const struct alpha_pll_config gpll3_early_config = {
117         .l = 63,
118         .config_ctl_val = 0x4001055b,
119         .early_output_mask = 0,
120         .post_div_mask = GENMASK(11, 8),
121         .post_div_val = BIT(8),
122 };
123
124 static struct clk_alpha_pll gpll3_early = {
125         .offset = 0x22000,
126         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
127         .vco_table = gpll3_p_vco,
128         .num_vco = ARRAY_SIZE(gpll3_p_vco),
129         .flags = SUPPORTS_DYNAMIC_UPDATE,
130         .clkr = {
131                 .hw.init = &(struct clk_init_data){
132                         .name = "gpll3_early",
133                         .parent_data = &(const struct clk_parent_data) {
134                                 .fw_name = "xo",
135                         },
136                         .num_parents = 1,
137                         .ops = &clk_alpha_pll_ops,
138                 },
139         },
140 };
141
142 static struct clk_alpha_pll_postdiv gpll3 = {
143         .offset = 0x22000,
144         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
145         .clkr.hw.init = &(struct clk_init_data){
146                 .name = "gpll3",
147                 .parent_hws = (const struct clk_hw*[]){
148                         &gpll3_early.clkr.hw,
149                 },
150                 .num_parents = 1,
151                 .ops = &clk_alpha_pll_postdiv_ops,
152                 .flags = CLK_SET_RATE_PARENT,
153         },
154 };
155
156 static struct clk_alpha_pll gpll4_early = {
157         .offset = 0x24000,
158         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
159         .clkr = {
160                 .enable_reg = 0x45000,
161                 .enable_mask = BIT(5),
162                 .hw.init = &(struct clk_init_data){
163                         .name = "gpll4_early",
164                         .parent_data = &(const struct clk_parent_data) {
165                                 .fw_name = "xo",
166                         },
167                         .num_parents = 1,
168                         .ops = &clk_alpha_pll_fixed_ops,
169                 },
170         },
171 };
172
173 static struct clk_alpha_pll_postdiv gpll4 = {
174         .offset = 0x24000,
175         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
176         .clkr.hw.init = &(struct clk_init_data){
177                 .name = "gpll4",
178                 .parent_hws = (const struct clk_hw*[]){
179                         &gpll4_early.clkr.hw,
180                 },
181                 .num_parents = 1,
182                 .ops = &clk_alpha_pll_postdiv_ro_ops,
183         },
184 };
185
186 static struct clk_alpha_pll gpll6_early = {
187         .offset = 0x37000,
188         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
189         .clkr = {
190                 .enable_reg = 0x45000,
191                 .enable_mask = BIT(7),
192                 .hw.init = &(struct clk_init_data){
193                         .name = "gpll6_early",
194                         .parent_data = &(const struct clk_parent_data) {
195                                 .fw_name = "xo",
196                         },
197                         .num_parents = 1,
198                         .ops = &clk_alpha_pll_fixed_ops,
199                 },
200         },
201 };
202
203 static struct clk_fixed_factor gpll6_early_div = {
204         .mult = 1,
205         .div = 2,
206         .hw.init = &(struct clk_init_data){
207                 .name = "gpll6_early_div",
208                 .parent_hws = (const struct clk_hw*[]){
209                         &gpll6_early.clkr.hw,
210                 },
211                 .num_parents = 1,
212                 .ops = &clk_fixed_factor_ops,
213         },
214 };
215
216 static struct clk_alpha_pll_postdiv gpll6 = {
217         .offset = 0x37000,
218         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
219         .clkr.hw.init = &(struct clk_init_data){
220                 .name = "gpll6",
221                 .parent_hws = (const struct clk_hw*[]){
222                         &gpll6_early.clkr.hw,
223                 },
224                 .num_parents = 1,
225                 .ops = &clk_alpha_pll_postdiv_ro_ops,
226         },
227 };
228
229 static const struct parent_map gcc_xo_gpll0_gpll0div2_2_map[] = {
230         { P_XO, 0 },
231         { P_GPLL0, 1 },
232         { P_GPLL0_DIV2, 2 },
233 };
234
235 static const struct parent_map gcc_xo_gpll0_gpll0div2_4_map[] = {
236         { P_XO, 0 },
237         { P_GPLL0, 1 },
238         { P_GPLL0_DIV2, 4 },
239 };
240
241 static const struct clk_parent_data gcc_xo_gpll0_gpll0div2_data[] = {
242         { .fw_name = "xo" },
243         { .hw = &gpll0.clkr.hw },
244         { .hw = &gpll0_early_div.hw },
245 };
246
247 static const struct parent_map gcc_apc_droop_detector_map[] = {
248         { P_XO, 0 },
249         { P_GPLL0, 1 },
250         { P_GPLL4, 2 },
251 };
252
253 static const struct clk_parent_data gcc_apc_droop_detector_data[] = {
254         { .fw_name = "xo" },
255         { .hw = &gpll0.clkr.hw },
256         { .hw = &gpll4.clkr.hw },
257 };
258
259 static const struct freq_tbl ftbl_apc_droop_detector_clk_src[] = {
260         F(19200000, P_XO, 1, 0, 0),
261         F(400000000, P_GPLL0, 2, 0, 0),
262         F(576000000, P_GPLL4, 2, 0, 0),
263         { }
264 };
265
266 static struct clk_rcg2 apc0_droop_detector_clk_src = {
267         .cmd_rcgr = 0x78008,
268         .hid_width = 5,
269         .freq_tbl = ftbl_apc_droop_detector_clk_src,
270         .parent_map = gcc_apc_droop_detector_map,
271         .clkr.hw.init = &(struct clk_init_data) {
272                 .name = "apc0_droop_detector_clk_src",
273                 .parent_data = gcc_apc_droop_detector_data,
274                 .num_parents = ARRAY_SIZE(gcc_apc_droop_detector_data),
275                 .ops = &clk_rcg2_ops,
276         }
277 };
278 static struct clk_rcg2 apc1_droop_detector_clk_src = {
279         .cmd_rcgr = 0x79008,
280         .hid_width = 5,
281         .freq_tbl = ftbl_apc_droop_detector_clk_src,
282         .parent_map = gcc_apc_droop_detector_map,
283         .clkr.hw.init = &(struct clk_init_data) {
284                 .name = "apc1_droop_detector_clk_src",
285                 .parent_data = gcc_apc_droop_detector_data,
286                 .num_parents = ARRAY_SIZE(gcc_apc_droop_detector_data),
287                 .ops = &clk_rcg2_ops,
288         }
289 };
290
291 static const struct freq_tbl ftbl_apss_ahb_clk_src[] = {
292         F(19200000, P_XO, 1, 0, 0),
293         F(25000000, P_GPLL0_DIV2, 16, 0, 0),
294         F(50000000, P_GPLL0, 16, 0, 0),
295         F(100000000, P_GPLL0, 8, 0, 0),
296         F(133330000, P_GPLL0, 6, 0, 0),
297         { }
298 };
299
300 static struct clk_rcg2 apss_ahb_clk_src = {
301         .cmd_rcgr = 0x46000,
302         .hid_width = 5,
303         .freq_tbl = ftbl_apss_ahb_clk_src,
304         .parent_map = gcc_xo_gpll0_gpll0div2_4_map,
305         .clkr.hw.init = &(struct clk_init_data) {
306                 .name = "apss_ahb_clk_src",
307                 .parent_data = gcc_xo_gpll0_gpll0div2_data,
308                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
309                 .ops = &clk_rcg2_ops,
310         }
311 };
312
313 static const struct freq_tbl ftbl_blsp_i2c_apps_clk_src[] = {
314         F(19200000, P_XO, 1, 0, 0),
315         F(25000000, P_GPLL0_DIV2, 16, 0, 0),
316         F(50000000, P_GPLL0, 16, 0, 0),
317         { }
318 };
319
320 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
321         .cmd_rcgr = 0x0200c,
322         .hid_width = 5,
323         .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
324         .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
325         .clkr.hw.init = &(struct clk_init_data) {
326                 .name = "blsp1_qup1_i2c_apps_clk_src",
327                 .parent_data = gcc_xo_gpll0_gpll0div2_data,
328                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
329                 .ops = &clk_rcg2_ops,
330         }
331 };
332
333 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
334         .cmd_rcgr = 0x03000,
335         .hid_width = 5,
336         .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
337         .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
338         .clkr.hw.init = &(struct clk_init_data) {
339                 .name = "blsp1_qup2_i2c_apps_clk_src",
340                 .parent_data = gcc_xo_gpll0_gpll0div2_data,
341                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
342                 .ops = &clk_rcg2_ops,
343         }
344 };
345
346 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
347         .cmd_rcgr = 0x04000,
348         .hid_width = 5,
349         .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
350         .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
351         .clkr.hw.init = &(struct clk_init_data) {
352                 .name = "blsp1_qup3_i2c_apps_clk_src",
353                 .parent_data = gcc_xo_gpll0_gpll0div2_data,
354                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
355                 .ops = &clk_rcg2_ops,
356         }
357 };
358
359 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
360         .cmd_rcgr = 0x05000,
361         .hid_width = 5,
362         .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
363         .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
364         .clkr.hw.init = &(struct clk_init_data) {
365                 .name = "blsp1_qup4_i2c_apps_clk_src",
366                 .parent_data = gcc_xo_gpll0_gpll0div2_data,
367                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
368                 .ops = &clk_rcg2_ops,
369         }
370 };
371
372 static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
373         .cmd_rcgr = 0x0c00c,
374         .hid_width = 5,
375         .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
376         .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
377         .clkr.hw.init = &(struct clk_init_data) {
378                 .name = "blsp2_qup1_i2c_apps_clk_src",
379                 .parent_data = gcc_xo_gpll0_gpll0div2_data,
380                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
381                 .ops = &clk_rcg2_ops,
382         }
383 };
384
385 static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
386         .cmd_rcgr = 0x0d000,
387         .hid_width = 5,
388         .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
389         .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
390         .clkr.hw.init = &(struct clk_init_data) {
391                 .name = "blsp2_qup2_i2c_apps_clk_src",
392                 .parent_data = gcc_xo_gpll0_gpll0div2_data,
393                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
394                 .ops = &clk_rcg2_ops,
395         }
396 };
397
398 static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
399         .cmd_rcgr = 0x0f000,
400         .hid_width = 5,
401         .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
402         .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
403         .clkr.hw.init = &(struct clk_init_data) {
404                 .name = "blsp2_qup3_i2c_apps_clk_src",
405                 .parent_data = gcc_xo_gpll0_gpll0div2_data,
406                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
407                 .ops = &clk_rcg2_ops,
408         }
409 };
410
411 static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
412         .cmd_rcgr = 0x18000,
413         .hid_width = 5,
414         .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
415         .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
416         .clkr.hw.init = &(struct clk_init_data) {
417                 .name = "blsp2_qup4_i2c_apps_clk_src",
418                 .parent_data = gcc_xo_gpll0_gpll0div2_data,
419                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
420                 .ops = &clk_rcg2_ops,
421         }
422 };
423
424 static const struct freq_tbl ftbl_blsp_spi_apps_clk_src[] = {
425         F(960000, P_XO, 10, 1, 2),
426         F(4800000, P_XO, 4, 0, 0),
427         F(9600000, P_XO, 2, 0, 0),
428         F(12500000, P_GPLL0_DIV2, 16, 1, 2),
429         F(16000000, P_GPLL0, 10, 1, 5),
430         F(19200000, P_XO, 1, 0, 0),
431         F(25000000, P_GPLL0, 16, 1, 2),
432         F(50000000, P_GPLL0, 16, 0, 0),
433         { }
434 };
435
436 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
437         .cmd_rcgr = 0x02024,
438         .hid_width = 5,
439         .mnd_width = 8,
440         .freq_tbl = ftbl_blsp_spi_apps_clk_src,
441         .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
442         .clkr.hw.init = &(struct clk_init_data) {
443                 .name = "blsp1_qup1_spi_apps_clk_src",
444                 .parent_data = gcc_xo_gpll0_gpll0div2_data,
445                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
446                 .ops = &clk_rcg2_ops,
447         }
448 };
449
450 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
451         .cmd_rcgr = 0x03014,
452         .hid_width = 5,
453         .mnd_width = 8,
454         .freq_tbl = ftbl_blsp_spi_apps_clk_src,
455         .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
456         .clkr.hw.init = &(struct clk_init_data) {
457                 .name = "blsp1_qup2_spi_apps_clk_src",
458                 .parent_data = gcc_xo_gpll0_gpll0div2_data,
459                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
460                 .ops = &clk_rcg2_ops,
461         }
462 };
463
464 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
465         .cmd_rcgr = 0x04024,
466         .hid_width = 5,
467         .mnd_width = 8,
468         .freq_tbl = ftbl_blsp_spi_apps_clk_src,
469         .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
470         .clkr.hw.init = &(struct clk_init_data) {
471                 .name = "blsp1_qup3_spi_apps_clk_src",
472                 .parent_data = gcc_xo_gpll0_gpll0div2_data,
473                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
474                 .ops = &clk_rcg2_ops,
475         }
476 };
477
478 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
479         .cmd_rcgr = 0x05024,
480         .hid_width = 5,
481         .mnd_width = 8,
482         .freq_tbl = ftbl_blsp_spi_apps_clk_src,
483         .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
484         .clkr.hw.init = &(struct clk_init_data) {
485                 .name = "blsp1_qup4_spi_apps_clk_src",
486                 .parent_data = gcc_xo_gpll0_gpll0div2_data,
487                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
488                 .ops = &clk_rcg2_ops,
489         }
490 };
491
492 static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
493         .cmd_rcgr = 0x0c024,
494         .hid_width = 5,
495         .mnd_width = 8,
496         .freq_tbl = ftbl_blsp_spi_apps_clk_src,
497         .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
498         .clkr.hw.init = &(struct clk_init_data) {
499                 .name = "blsp2_qup1_spi_apps_clk_src",
500                 .parent_data = gcc_xo_gpll0_gpll0div2_data,
501                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
502                 .ops = &clk_rcg2_ops,
503         }
504 };
505
506 static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
507         .cmd_rcgr = 0x0d014,
508         .hid_width = 5,
509         .mnd_width = 8,
510         .freq_tbl = ftbl_blsp_spi_apps_clk_src,
511         .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
512         .clkr.hw.init = &(struct clk_init_data) {
513                 .name = "blsp2_qup2_spi_apps_clk_src",
514                 .parent_data = gcc_xo_gpll0_gpll0div2_data,
515                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
516                 .ops = &clk_rcg2_ops,
517         }
518 };
519
520 static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
521         .cmd_rcgr = 0x0f024,
522         .hid_width = 5,
523         .mnd_width = 8,
524         .freq_tbl = ftbl_blsp_spi_apps_clk_src,
525         .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
526         .clkr.hw.init = &(struct clk_init_data) {
527                 .name = "blsp2_qup3_spi_apps_clk_src",
528                 .parent_data = gcc_xo_gpll0_gpll0div2_data,
529                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
530                 .ops = &clk_rcg2_ops,
531         }
532 };
533
534 static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
535         .cmd_rcgr = 0x18024,
536         .hid_width = 5,
537         .mnd_width = 8,
538         .freq_tbl = ftbl_blsp_spi_apps_clk_src,
539         .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
540         .clkr.hw.init = &(struct clk_init_data) {
541                 .name = "blsp2_qup4_spi_apps_clk_src",
542                 .parent_data = gcc_xo_gpll0_gpll0div2_data,
543                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
544                 .ops = &clk_rcg2_ops,
545         }
546 };
547
548 static const struct freq_tbl ftbl_blsp_uart_apps_clk_src[] = {
549         F(3686400, P_GPLL0_DIV2, 1, 144, 15625),
550         F(7372800, P_GPLL0_DIV2, 1, 288, 15625),
551         F(14745600, P_GPLL0_DIV2, 1, 576, 15625),
552         F(16000000, P_GPLL0_DIV2, 5, 1, 5),
553         F(19200000, P_XO, 1, 0, 0),
554         F(24000000, P_GPLL0, 1, 3, 100),
555         F(25000000, P_GPLL0, 16, 1, 2),
556         F(32000000, P_GPLL0, 1, 1, 25),
557         F(40000000, P_GPLL0, 1, 1, 20),
558         F(46400000, P_GPLL0, 1, 29, 500),
559         F(48000000, P_GPLL0, 1, 3, 50),
560         F(51200000, P_GPLL0, 1, 8, 125),
561         F(56000000, P_GPLL0, 1, 7, 100),
562         F(58982400, P_GPLL0, 1, 1152, 15625),
563         F(60000000, P_GPLL0, 1, 3, 40),
564         F(64000000, P_GPLL0, 1, 2, 25),
565         { }
566 };
567
568 static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
569         .cmd_rcgr = 0x02044,
570         .hid_width = 5,
571         .mnd_width = 16,
572         .freq_tbl = ftbl_blsp_uart_apps_clk_src,
573         .parent_map = gcc_xo_gpll0_gpll0div2_4_map,
574         .clkr.hw.init = &(struct clk_init_data) {
575                 .name = "blsp1_uart1_apps_clk_src",
576                 .parent_data = gcc_xo_gpll0_gpll0div2_data,
577                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
578                 .ops = &clk_rcg2_ops,
579         }
580 };
581
582 static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
583         .cmd_rcgr = 0x03034,
584         .hid_width = 5,
585         .mnd_width = 16,
586         .freq_tbl = ftbl_blsp_uart_apps_clk_src,
587         .parent_map = gcc_xo_gpll0_gpll0div2_4_map,
588         .clkr.hw.init = &(struct clk_init_data) {
589                 .name = "blsp1_uart2_apps_clk_src",
590                 .parent_data = gcc_xo_gpll0_gpll0div2_data,
591                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
592                 .ops = &clk_rcg2_ops,
593         }
594 };
595
596 static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
597         .cmd_rcgr = 0x0c044,
598         .hid_width = 5,
599         .mnd_width = 16,
600         .freq_tbl = ftbl_blsp_uart_apps_clk_src,
601         .parent_map = gcc_xo_gpll0_gpll0div2_4_map,
602         .clkr.hw.init = &(struct clk_init_data) {
603                 .name = "blsp2_uart1_apps_clk_src",
604                 .parent_data = gcc_xo_gpll0_gpll0div2_data,
605                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
606                 .ops = &clk_rcg2_ops,
607         }
608 };
609
610 static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
611         .cmd_rcgr = 0x0d034,
612         .hid_width = 5,
613         .mnd_width = 16,
614         .freq_tbl = ftbl_blsp_uart_apps_clk_src,
615         .parent_map = gcc_xo_gpll0_gpll0div2_4_map,
616         .clkr.hw.init = &(struct clk_init_data) {
617                 .name = "blsp2_uart2_apps_clk_src",
618                 .parent_data = gcc_xo_gpll0_gpll0div2_data,
619                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
620                 .ops = &clk_rcg2_ops,
621         }
622 };
623
624 static const struct parent_map gcc_byte0_map[] = {
625         { P_XO, 0 },
626         { P_DSI0PLL_BYTE, 1 },
627         { P_DSI1PLL_BYTE, 3 },
628 };
629
630 static const struct parent_map gcc_byte1_map[] = {
631         { P_XO, 0 },
632         { P_DSI0PLL_BYTE, 3 },
633         { P_DSI1PLL_BYTE, 1 },
634 };
635
636 static const struct clk_parent_data gcc_byte_data[] = {
637         { .fw_name = "xo" },
638         { .fw_name = "dsi0pllbyte", .name = "dsi0pllbyte" },
639         { .fw_name = "dsi1pllbyte", .name = "dsi1pllbyte" },
640 };
641
642 static struct clk_rcg2 byte0_clk_src = {
643         .cmd_rcgr = 0x4d044,
644         .hid_width = 5,
645         .parent_map = gcc_byte0_map,
646         .clkr.hw.init = &(struct clk_init_data) {
647                 .name = "byte0_clk_src",
648                 .parent_data = gcc_byte_data,
649                 .num_parents = ARRAY_SIZE(gcc_byte_data),
650                 .ops = &clk_byte2_ops,
651                 .flags = CLK_SET_RATE_PARENT,
652         }
653 };
654
655 static struct clk_rcg2 byte1_clk_src = {
656         .cmd_rcgr = 0x4d0b0,
657         .hid_width = 5,
658         .parent_map = gcc_byte1_map,
659         .clkr.hw.init = &(struct clk_init_data) {
660                 .name = "byte1_clk_src",
661                 .parent_data = gcc_byte_data,
662                 .num_parents = ARRAY_SIZE(gcc_byte_data),
663                 .ops = &clk_byte2_ops,
664                 .flags = CLK_SET_RATE_PARENT,
665         }
666 };
667
668 static const struct parent_map gcc_gp_map[] = {
669         { P_XO, 0 },
670         { P_GPLL0, 1 },
671         { P_GPLL6, 2 },
672         { P_GPLL0_DIV2, 4 },
673         { P_SLEEP_CLK, 6 },
674 };
675
676 static const struct clk_parent_data gcc_gp_data[] = {
677         { .fw_name = "xo" },
678         { .hw = &gpll0.clkr.hw },
679         { .hw = &gpll6.clkr.hw },
680         { .hw = &gpll0_early_div.hw },
681         { .fw_name = "sleep", .name = "sleep" },
682 };
683
684 static const struct freq_tbl ftbl_camss_gp_clk_src[] = {
685         F(50000000, P_GPLL0_DIV2, 8, 0, 0),
686         F(100000000, P_GPLL0, 8, 0, 0),
687         F(200000000, P_GPLL0, 4, 0, 0),
688         F(266670000, P_GPLL0, 3, 0, 0),
689         { }
690 };
691
692 static struct clk_rcg2 camss_gp0_clk_src = {
693         .cmd_rcgr = 0x54000,
694         .hid_width = 5,
695         .mnd_width = 8,
696         .freq_tbl = ftbl_camss_gp_clk_src,
697         .parent_map = gcc_gp_map,
698         .clkr.hw.init = &(struct clk_init_data) {
699                 .name = "camss_gp0_clk_src",
700                 .parent_data = gcc_gp_data,
701                 .num_parents = ARRAY_SIZE(gcc_gp_data),
702                 .ops = &clk_rcg2_ops,
703         }
704 };
705
706 static struct clk_rcg2 camss_gp1_clk_src = {
707         .cmd_rcgr = 0x55000,
708         .hid_width = 5,
709         .mnd_width = 8,
710         .freq_tbl = ftbl_camss_gp_clk_src,
711         .parent_map = gcc_gp_map,
712         .clkr.hw.init = &(struct clk_init_data) {
713                 .name = "camss_gp1_clk_src",
714                 .parent_data = gcc_gp_data,
715                 .num_parents = ARRAY_SIZE(gcc_gp_data),
716                 .ops = &clk_rcg2_ops,
717         }
718 };
719
720 static const struct freq_tbl ftbl_camss_top_ahb_clk_src[] = {
721         F(40000000, P_GPLL0_DIV2, 10, 0, 0),
722         F(80000000, P_GPLL0, 10, 0, 0),
723         { }
724 };
725
726 static struct clk_rcg2 camss_top_ahb_clk_src = {
727         .cmd_rcgr = 0x5a000,
728         .hid_width = 5,
729         .freq_tbl = ftbl_camss_top_ahb_clk_src,
730         .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
731         .clkr.hw.init = &(struct clk_init_data) {
732                 .name = "camss_top_ahb_clk_src",
733                 .parent_data = gcc_xo_gpll0_gpll0div2_data,
734                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
735                 .ops = &clk_rcg2_ops,
736         }
737 };
738
739 static const struct parent_map gcc_cci_map[] = {
740         { P_XO, 0 },
741         { P_GPLL0, 2 },
742         { P_GPLL0_DIV2, 3 },
743         { P_SLEEP_CLK, 6 },
744 };
745
746 static const struct clk_parent_data gcc_cci_data[] = {
747         { .fw_name = "xo" },
748         { .hw = &gpll0.clkr.hw },
749         { .hw = &gpll0_early_div.hw },
750         { .fw_name = "sleep", .name = "sleep" },
751 };
752
753 static const struct freq_tbl ftbl_cci_clk_src[] = {
754         F(19200000, P_XO, 1, 0, 0),
755         F(37500000, P_GPLL0_DIV2, 1, 3, 32),
756         { }
757 };
758
759 static struct clk_rcg2 cci_clk_src = {
760         .cmd_rcgr = 0x51000,
761         .hid_width = 5,
762         .mnd_width = 8,
763         .freq_tbl = ftbl_cci_clk_src,
764         .parent_map = gcc_cci_map,
765         .clkr.hw.init = &(struct clk_init_data) {
766                 .name = "cci_clk_src",
767                 .parent_data = gcc_cci_data,
768                 .num_parents = ARRAY_SIZE(gcc_cci_data),
769                 .ops = &clk_rcg2_ops,
770         }
771 };
772
773 static const struct parent_map gcc_cpp_map[] = {
774         { P_XO, 0 },
775         { P_GPLL0, 1 },
776         { P_GPLL6, 3 },
777         { P_GPLL2, 4 },
778         { P_GPLL0_DIV2, 5 },
779 };
780
781 static const struct clk_parent_data gcc_cpp_data[] = {
782         { .fw_name = "xo" },
783         { .hw = &gpll0.clkr.hw },
784         { .hw = &gpll6.clkr.hw },
785         { .hw = &gpll2.clkr.hw },
786         { .hw = &gpll0_early_div.hw },
787 };
788
789 static const struct freq_tbl ftbl_cpp_clk_src[] = {
790         F(100000000, P_GPLL0_DIV2, 4, 0, 0),
791         F(200000000, P_GPLL0, 4, 0, 0),
792         F(266670000, P_GPLL0, 3, 0, 0),
793         F(320000000, P_GPLL0, 2.5, 0, 0),
794         F(400000000, P_GPLL0, 2, 0, 0),
795         F(465000000, P_GPLL2, 2, 0, 0),
796         { }
797 };
798
799 static struct clk_rcg2 cpp_clk_src = {
800         .cmd_rcgr = 0x58018,
801         .hid_width = 5,
802         .freq_tbl = ftbl_cpp_clk_src,
803         .parent_map = gcc_cpp_map,
804         .clkr.hw.init = &(struct clk_init_data) {
805                 .name = "cpp_clk_src",
806                 .parent_data = gcc_cpp_data,
807                 .num_parents = ARRAY_SIZE(gcc_cpp_data),
808                 .ops = &clk_rcg2_ops,
809         }
810 };
811
812 static const struct freq_tbl ftbl_crypto_clk_src[] = {
813         F(40000000, P_GPLL0_DIV2, 10, 0, 0),
814         F(80000000, P_GPLL0, 10, 0, 0),
815         F(100000000, P_GPLL0, 8, 0, 0),
816         F(160000000, P_GPLL0, 5, 0, 0),
817         { }
818 };
819
820 static struct clk_rcg2 crypto_clk_src = {
821         .cmd_rcgr = 0x16004,
822         .hid_width = 5,
823         .freq_tbl = ftbl_crypto_clk_src,
824         .parent_map = gcc_xo_gpll0_gpll0div2_4_map,
825         .clkr.hw.init = &(struct clk_init_data) {
826                 .name = "crypto_clk_src",
827                 .parent_data = gcc_xo_gpll0_gpll0div2_data,
828                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
829                 .ops = &clk_rcg2_ops,
830         }
831 };
832
833 static const struct parent_map gcc_csi0_map[] = {
834         { P_XO, 0 },
835         { P_GPLL0, 1 },
836         { P_GPLL2, 4 },
837         { P_GPLL0_DIV2, 5 },
838 };
839
840 static const struct parent_map gcc_csi12_map[] = {
841         { P_XO, 0 },
842         { P_GPLL0, 1 },
843         { P_GPLL2, 5 },
844         { P_GPLL0_DIV2, 4 },
845 };
846
847 static const struct clk_parent_data gcc_csi_data[] = {
848         { .fw_name = "xo" },
849         { .hw = &gpll0.clkr.hw },
850         { .hw = &gpll2.clkr.hw },
851         { .hw = &gpll0_early_div.hw },
852 };
853
854 static const struct freq_tbl ftbl_csi_clk_src[] = {
855         F(100000000, P_GPLL0_DIV2, 4, 0, 0),
856         F(200000000, P_GPLL0, 4, 0, 0),
857         F(310000000, P_GPLL2, 3, 0, 0),
858         F(400000000, P_GPLL0, 2, 0, 0),
859         F(465000000, P_GPLL2, 2, 0, 0),
860         { }
861 };
862
863 static struct clk_rcg2 csi0_clk_src = {
864         .cmd_rcgr = 0x4e020,
865         .hid_width = 5,
866         .freq_tbl = ftbl_csi_clk_src,
867         .parent_map = gcc_csi0_map,
868         .clkr.hw.init = &(struct clk_init_data) {
869                 .name = "csi0_clk_src",
870                 .parent_data = gcc_csi_data,
871                 .num_parents = ARRAY_SIZE(gcc_csi_data),
872                 .ops = &clk_rcg2_ops,
873         }
874 };
875
876 static struct clk_rcg2 csi1_clk_src = {
877         .cmd_rcgr = 0x4f020,
878         .hid_width = 5,
879         .freq_tbl = ftbl_csi_clk_src,
880         .parent_map = gcc_csi12_map,
881         .clkr.hw.init = &(struct clk_init_data) {
882                 .name = "csi1_clk_src",
883                 .parent_data = gcc_csi_data,
884                 .num_parents = ARRAY_SIZE(gcc_csi_data),
885                 .ops = &clk_rcg2_ops,
886         }
887 };
888
889 static struct clk_rcg2 csi2_clk_src = {
890         .cmd_rcgr = 0x3c020,
891         .hid_width = 5,
892         .freq_tbl = ftbl_csi_clk_src,
893         .parent_map = gcc_csi12_map,
894         .clkr.hw.init = &(struct clk_init_data) {
895                 .name = "csi2_clk_src",
896                 .parent_data = gcc_csi_data,
897                 .num_parents = ARRAY_SIZE(gcc_csi_data),
898                 .ops = &clk_rcg2_ops,
899         }
900 };
901
902 static const struct parent_map gcc_csip_map[] = {
903         { P_XO, 0 },
904         { P_GPLL0, 1 },
905         { P_GPLL4, 3 },
906         { P_GPLL2, 4 },
907         { P_GPLL0_DIV2, 5 },
908 };
909
910 static const struct clk_parent_data gcc_csip_data[] = {
911         { .fw_name = "xo" },
912         { .hw = &gpll0.clkr.hw },
913         { .hw = &gpll4.clkr.hw },
914         { .hw = &gpll2.clkr.hw },
915         { .hw = &gpll0_early_div.hw },
916 };
917
918 static const struct freq_tbl ftbl_csi_p_clk_src[] = {
919         F(66670000, P_GPLL0_DIV2, 6, 0, 0),
920         F(133330000, P_GPLL0, 6, 0, 0),
921         F(200000000, P_GPLL0, 4, 0, 0),
922         F(266670000, P_GPLL0, 3, 0, 0),
923         F(310000000, P_GPLL2, 3, 0, 0),
924         { }
925 };
926
927 static struct clk_rcg2 csi0p_clk_src = {
928         .cmd_rcgr = 0x58084,
929         .hid_width = 5,
930         .freq_tbl = ftbl_csi_p_clk_src,
931         .parent_map = gcc_csip_map,
932         .clkr.hw.init = &(struct clk_init_data) {
933                 .name = "csi0p_clk_src",
934                 .parent_data = gcc_csip_data,
935                 .num_parents = ARRAY_SIZE(gcc_csip_data),
936                 .ops = &clk_rcg2_ops,
937         }
938 };
939
940 static struct clk_rcg2 csi1p_clk_src = {
941         .cmd_rcgr = 0x58094,
942         .hid_width = 5,
943         .freq_tbl = ftbl_csi_p_clk_src,
944         .parent_map = gcc_csip_map,
945         .clkr.hw.init = &(struct clk_init_data) {
946                 .name = "csi1p_clk_src",
947                 .parent_data = gcc_csip_data,
948                 .num_parents = ARRAY_SIZE(gcc_csip_data),
949                 .ops = &clk_rcg2_ops,
950         }
951 };
952
953 static struct clk_rcg2 csi2p_clk_src = {
954         .cmd_rcgr = 0x580a4,
955         .hid_width = 5,
956         .freq_tbl = ftbl_csi_p_clk_src,
957         .parent_map = gcc_csip_map,
958         .clkr.hw.init = &(struct clk_init_data) {
959                 .name = "csi2p_clk_src",
960                 .parent_data = gcc_csip_data,
961                 .num_parents = ARRAY_SIZE(gcc_csip_data),
962                 .ops = &clk_rcg2_ops,
963         }
964 };
965
966 static const struct freq_tbl ftbl_csi_phytimer_clk_src[] = {
967         F(100000000, P_GPLL0_DIV2, 4, 0, 0),
968         F(200000000, P_GPLL0, 4, 0, 0),
969         F(266670000, P_GPLL0, 3, 0, 0),
970         { }
971 };
972
973 static struct clk_rcg2 csi0phytimer_clk_src = {
974         .cmd_rcgr = 0x4e000,
975         .hid_width = 5,
976         .freq_tbl = ftbl_csi_phytimer_clk_src,
977         .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
978         .clkr.hw.init = &(struct clk_init_data) {
979                 .name = "csi0phytimer_clk_src",
980                 .parent_data = gcc_xo_gpll0_gpll0div2_data,
981                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
982                 .ops = &clk_rcg2_ops,
983         }
984 };
985
986 static struct clk_rcg2 csi1phytimer_clk_src = {
987         .cmd_rcgr = 0x4f000,
988         .hid_width = 5,
989         .freq_tbl = ftbl_csi_phytimer_clk_src,
990         .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
991         .clkr.hw.init = &(struct clk_init_data) {
992                 .name = "csi1phytimer_clk_src",
993                 .parent_data = gcc_xo_gpll0_gpll0div2_data,
994                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
995                 .ops = &clk_rcg2_ops,
996         }
997 };
998
999 static struct clk_rcg2 csi2phytimer_clk_src = {
1000         .cmd_rcgr = 0x4f05c,
1001         .hid_width = 5,
1002         .freq_tbl = ftbl_csi_phytimer_clk_src,
1003         .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
1004         .clkr.hw.init = &(struct clk_init_data) {
1005                 .name = "csi2phytimer_clk_src",
1006                 .parent_data = gcc_xo_gpll0_gpll0div2_data,
1007                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
1008                 .ops = &clk_rcg2_ops,
1009         }
1010 };
1011
1012 static const struct parent_map gcc_esc_map[] = {
1013         { P_XO, 0 },
1014         { P_GPLL0, 3 },
1015 };
1016
1017 static const struct clk_parent_data gcc_esc_vsync_data[] = {
1018         { .fw_name = "xo" },
1019         { .hw = &gpll0.clkr.hw },
1020 };
1021
1022 static const struct freq_tbl ftbl_esc0_1_clk_src[] = {
1023         F(19200000, P_XO, 1, 0, 0),
1024         { }
1025 };
1026
1027 static struct clk_rcg2 esc0_clk_src = {
1028         .cmd_rcgr = 0x4d05c,
1029         .hid_width = 5,
1030         .freq_tbl = ftbl_esc0_1_clk_src,
1031         .parent_map = gcc_esc_map,
1032         .clkr.hw.init = &(struct clk_init_data) {
1033                 .name = "esc0_clk_src",
1034                 .parent_data = gcc_esc_vsync_data,
1035                 .num_parents = ARRAY_SIZE(gcc_esc_vsync_data),
1036                 .ops = &clk_rcg2_ops,
1037         }
1038 };
1039
1040 static struct clk_rcg2 esc1_clk_src = {
1041         .cmd_rcgr = 0x4d0a8,
1042         .hid_width = 5,
1043         .freq_tbl = ftbl_esc0_1_clk_src,
1044         .parent_map = gcc_esc_map,
1045         .clkr.hw.init = &(struct clk_init_data) {
1046                 .name = "esc1_clk_src",
1047                 .parent_data = gcc_esc_vsync_data,
1048                 .num_parents = ARRAY_SIZE(gcc_esc_vsync_data),
1049                 .ops = &clk_rcg2_ops,
1050         }
1051 };
1052
1053 static const struct parent_map gcc_gfx3d_map[] = {
1054         { P_XO, 0 },
1055         { P_GPLL0, 1 },
1056         { P_GPLL3, 2 },
1057         { P_GPLL6, 3 },
1058         { P_GPLL4, 4 },
1059         { P_GPLL0_DIV2, 5 },
1060         { P_GPLL6_DIV2, 6 },
1061 };
1062
1063 static const struct clk_parent_data gcc_gfx3d_data[] = {
1064         { .fw_name = "xo" },
1065         { .hw = &gpll0.clkr.hw },
1066         { .hw = &gpll3.clkr.hw },
1067         { .hw = &gpll6.clkr.hw },
1068         { .hw = &gpll4.clkr.hw },
1069         { .hw = &gpll0_early_div.hw },
1070         { .hw = &gpll6_early_div.hw },
1071 };
1072
1073 static const struct freq_tbl ftbl_gfx3d_clk_src[] = {
1074         F(19200000, P_XO, 1, 0, 0),
1075         F(50000000, P_GPLL0_DIV2, 8, 0, 0),
1076         F(80000000, P_GPLL0_DIV2, 5, 0, 0),
1077         F(100000000, P_GPLL0_DIV2, 4, 0, 0),
1078         F(133330000, P_GPLL0_DIV2, 3, 0, 0),
1079         F(160000000, P_GPLL0_DIV2, 2.5, 0, 0),
1080         F(200000000, P_GPLL0_DIV2, 2, 0, 0),
1081         F(266670000, P_GPLL0, 3.0, 0, 0),
1082         F(320000000, P_GPLL0, 2.5, 0, 0),
1083         F(400000000, P_GPLL0, 2, 0, 0),
1084         F(460800000, P_GPLL4, 2.5, 0, 0),
1085         F(510000000, P_GPLL3, 2, 0, 0),
1086         F(560000000, P_GPLL3, 2, 0, 0),
1087         F(600000000, P_GPLL3, 2, 0, 0),
1088         F(650000000, P_GPLL3, 2, 0, 0),
1089         F(685000000, P_GPLL3, 2, 0, 0),
1090         F(725000000, P_GPLL3, 2, 0, 0),
1091         { }
1092 };
1093
1094 static struct clk_rcg2 gfx3d_clk_src = {
1095         .cmd_rcgr = 0x59000,
1096         .hid_width = 5,
1097         .freq_tbl = ftbl_gfx3d_clk_src,
1098         .parent_map = gcc_gfx3d_map,
1099         .clkr.hw.init = &(struct clk_init_data) {
1100                 .name = "gfx3d_clk_src",
1101                 .parent_data = gcc_gfx3d_data,
1102                 .num_parents = ARRAY_SIZE(gcc_gfx3d_data),
1103                 .ops = &clk_rcg2_floor_ops,
1104                 .flags = CLK_SET_RATE_PARENT,
1105         }
1106 };
1107
1108 static const struct freq_tbl ftbl_gp_clk_src[] = {
1109         F(19200000, P_XO, 1, 0, 0),
1110         { }
1111 };
1112
1113 static struct clk_rcg2 gp1_clk_src = {
1114         .cmd_rcgr = 0x08004,
1115         .hid_width = 5,
1116         .mnd_width = 8,
1117         .freq_tbl = ftbl_gp_clk_src,
1118         .parent_map = gcc_gp_map,
1119         .clkr.hw.init = &(struct clk_init_data) {
1120                 .name = "gp1_clk_src",
1121                 .parent_data = gcc_gp_data,
1122                 .num_parents = ARRAY_SIZE(gcc_gp_data),
1123                 .ops = &clk_rcg2_ops,
1124         }
1125 };
1126
1127 static struct clk_rcg2 gp2_clk_src = {
1128         .cmd_rcgr = 0x09004,
1129         .hid_width = 5,
1130         .mnd_width = 8,
1131         .freq_tbl = ftbl_gp_clk_src,
1132         .parent_map = gcc_gp_map,
1133         .clkr.hw.init = &(struct clk_init_data) {
1134                 .name = "gp2_clk_src",
1135                 .parent_data = gcc_gp_data,
1136                 .num_parents = ARRAY_SIZE(gcc_gp_data),
1137                 .ops = &clk_rcg2_ops,
1138         }
1139 };
1140
1141 static struct clk_rcg2 gp3_clk_src = {
1142         .cmd_rcgr = 0x0a004,
1143         .hid_width = 5,
1144         .mnd_width = 8,
1145         .freq_tbl = ftbl_gp_clk_src,
1146         .parent_map = gcc_gp_map,
1147         .clkr.hw.init = &(struct clk_init_data) {
1148                 .name = "gp3_clk_src",
1149                 .parent_data = gcc_gp_data,
1150                 .num_parents = ARRAY_SIZE(gcc_gp_data),
1151                 .ops = &clk_rcg2_ops,
1152         }
1153 };
1154
1155 static const struct parent_map gcc_jpeg0_map[] = {
1156         { P_XO, 0 },
1157         { P_GPLL0, 1 },
1158         { P_GPLL6, 2 },
1159         { P_GPLL0_DIV2, 4 },
1160         { P_GPLL2, 5 },
1161 };
1162
1163 static const struct clk_parent_data gcc_jpeg0_data[] = {
1164         { .fw_name = "xo" },
1165         { .hw = &gpll0.clkr.hw },
1166         { .hw = &gpll6.clkr.hw },
1167         { .hw = &gpll0_early_div.hw },
1168         { .hw = &gpll2.clkr.hw },
1169 };
1170
1171 static const struct freq_tbl ftbl_jpeg0_clk_src[] = {
1172         F(66670000, P_GPLL0_DIV2, 6, 0, 0),
1173         F(133330000, P_GPLL0, 6, 0, 0),
1174         F(200000000, P_GPLL0, 4, 0, 0),
1175         F(266670000, P_GPLL0, 3, 0, 0),
1176         F(310000000, P_GPLL2, 3, 0, 0),
1177         F(320000000, P_GPLL0, 2.5, 0, 0),
1178         { }
1179 };
1180
1181 static struct clk_rcg2 jpeg0_clk_src = {
1182         .cmd_rcgr = 0x57000,
1183         .hid_width = 5,
1184         .freq_tbl = ftbl_jpeg0_clk_src,
1185         .parent_map = gcc_jpeg0_map,
1186         .clkr.hw.init = &(struct clk_init_data) {
1187                 .name = "jpeg0_clk_src",
1188                 .parent_data = gcc_jpeg0_data,
1189                 .num_parents = ARRAY_SIZE(gcc_jpeg0_data),
1190                 .ops = &clk_rcg2_ops,
1191         }
1192 };
1193
1194 static const struct parent_map gcc_mclk_map[] = {
1195         { P_XO, 0 },
1196         { P_GPLL0, 1 },
1197         { P_GPLL6, 2 },
1198         { P_GPLL0_DIV2, 4 },
1199         { P_GPLL6_DIV2, 5 },
1200         { P_SLEEP_CLK, 6 },
1201 };
1202
1203 static const struct clk_parent_data gcc_mclk_data[] = {
1204         { .fw_name = "xo" },
1205         { .hw = &gpll0.clkr.hw },
1206         { .hw = &gpll6.clkr.hw },
1207         { .hw = &gpll0_early_div.hw },
1208         { .hw = &gpll6_early_div.hw },
1209         { .fw_name = "sleep", .name = "sleep" },
1210 };
1211
1212 static const struct freq_tbl ftbl_mclk_clk_src[] = {
1213         F(19200000, P_GPLL6, 5, 4, 45),
1214         F(24000000, P_GPLL6_DIV2, 1, 2, 45),
1215         F(26000000, P_GPLL0, 1, 4, 123),
1216         F(33330000, P_GPLL0_DIV2, 12, 0, 0),
1217         F(36610000, P_GPLL6, 1, 2, 59),
1218         F(66667000, P_GPLL0, 12, 0, 0),
1219         { }
1220 };
1221
1222 static struct clk_rcg2 mclk0_clk_src = {
1223         .cmd_rcgr = 0x52000,
1224         .hid_width = 5,
1225         .mnd_width = 8,
1226         .freq_tbl = ftbl_mclk_clk_src,
1227         .parent_map = gcc_mclk_map,
1228         .clkr.hw.init = &(struct clk_init_data) {
1229                 .name = "mclk0_clk_src",
1230                 .parent_data = gcc_mclk_data,
1231                 .num_parents = ARRAY_SIZE(gcc_mclk_data),
1232                 .ops = &clk_rcg2_ops,
1233         }
1234 };
1235
1236 static struct clk_rcg2 mclk1_clk_src = {
1237         .cmd_rcgr = 0x53000,
1238         .hid_width = 5,
1239         .mnd_width = 8,
1240         .freq_tbl = ftbl_mclk_clk_src,
1241         .parent_map = gcc_mclk_map,
1242         .clkr.hw.init = &(struct clk_init_data) {
1243                 .name = "mclk1_clk_src",
1244                 .parent_data = gcc_mclk_data,
1245                 .num_parents = ARRAY_SIZE(gcc_mclk_data),
1246                 .ops = &clk_rcg2_ops,
1247         }
1248 };
1249
1250 static struct clk_rcg2 mclk2_clk_src = {
1251         .cmd_rcgr = 0x5c000,
1252         .hid_width = 5,
1253         .mnd_width = 8,
1254         .freq_tbl = ftbl_mclk_clk_src,
1255         .parent_map = gcc_mclk_map,
1256         .clkr.hw.init = &(struct clk_init_data) {
1257                 .name = "mclk2_clk_src",
1258                 .parent_data = gcc_mclk_data,
1259                 .num_parents = ARRAY_SIZE(gcc_mclk_data),
1260                 .ops = &clk_rcg2_ops,
1261         }
1262 };
1263
1264 static struct clk_rcg2 mclk3_clk_src = {
1265         .cmd_rcgr = 0x5e000,
1266         .hid_width = 5,
1267         .mnd_width = 8,
1268         .freq_tbl = ftbl_mclk_clk_src,
1269         .parent_map = gcc_mclk_map,
1270         .clkr.hw.init = &(struct clk_init_data) {
1271                 .name = "mclk3_clk_src",
1272                 .parent_data = gcc_mclk_data,
1273                 .num_parents = ARRAY_SIZE(gcc_mclk_data),
1274                 .ops = &clk_rcg2_ops,
1275         }
1276 };
1277
1278 static const struct parent_map gcc_mdp_map[] = {
1279         { P_XO, 0 },
1280         { P_GPLL0, 1 },
1281         { P_GPLL6, 3 },
1282         { P_GPLL0_DIV2, 4 },
1283 };
1284
1285 static const struct clk_parent_data gcc_mdp_data[] = {
1286         { .fw_name = "xo" },
1287         { .hw = &gpll0.clkr.hw },
1288         { .hw = &gpll6.clkr.hw },
1289         { .hw = &gpll0_early_div.hw },
1290 };
1291
1292 static const struct freq_tbl ftbl_mdp_clk_src[] = {
1293         F(50000000, P_GPLL0_DIV2, 8, 0, 0),
1294         F(80000000, P_GPLL0_DIV2, 5, 0, 0),
1295         F(160000000, P_GPLL0_DIV2, 2.5, 0, 0),
1296         F(200000000, P_GPLL0, 4, 0, 0),
1297         F(266670000, P_GPLL0, 3, 0, 0),
1298         F(320000000, P_GPLL0, 2.5, 0, 0),
1299         F(400000000, P_GPLL0, 2, 0, 0),
1300         { }
1301 };
1302
1303 static struct clk_rcg2 mdp_clk_src = {
1304         .cmd_rcgr = 0x4d014,
1305         .hid_width = 5,
1306         .freq_tbl = ftbl_mdp_clk_src,
1307         .parent_map = gcc_mdp_map,
1308         .clkr.hw.init = &(struct clk_init_data) {
1309                 .name = "mdp_clk_src",
1310                 .parent_data = gcc_mdp_data,
1311                 .num_parents = ARRAY_SIZE(gcc_mdp_data),
1312                 .ops = &clk_rcg2_ops,
1313         }
1314 };
1315
1316 static const struct parent_map gcc_pclk0_map[] = {
1317         { P_XO, 0 },
1318         { P_DSI0PLL, 1 },
1319         { P_DSI1PLL, 3 },
1320 };
1321
1322 static const struct parent_map gcc_pclk1_map[] = {
1323         { P_XO, 0 },
1324         { P_DSI0PLL, 3 },
1325         { P_DSI1PLL, 1 },
1326 };
1327
1328 static const struct clk_parent_data gcc_pclk_data[] = {
1329         { .fw_name = "xo" },
1330         { .fw_name = "dsi0pll", .name = "dsi0pll" },
1331         { .fw_name = "dsi1pll", .name = "dsi1pll" },
1332 };
1333
1334 static struct clk_rcg2 pclk0_clk_src = {
1335         .cmd_rcgr = 0x4d000,
1336         .hid_width = 5,
1337         .mnd_width = 8,
1338         .parent_map = gcc_pclk0_map,
1339         .clkr.hw.init = &(struct clk_init_data) {
1340                 .name = "pclk0_clk_src",
1341                 .parent_data = gcc_pclk_data,
1342                 .num_parents = ARRAY_SIZE(gcc_pclk_data),
1343                 .ops = &clk_pixel_ops,
1344                 .flags = CLK_SET_RATE_PARENT,
1345         }
1346 };
1347
1348 static struct clk_rcg2 pclk1_clk_src = {
1349         .cmd_rcgr = 0x4d0b8,
1350         .hid_width = 5,
1351         .mnd_width = 8,
1352         .parent_map = gcc_pclk1_map,
1353         .clkr.hw.init = &(struct clk_init_data) {
1354                 .name = "pclk1_clk_src",
1355                 .parent_data = gcc_pclk_data,
1356                 .num_parents = ARRAY_SIZE(gcc_pclk_data),
1357                 .ops = &clk_pixel_ops,
1358                 .flags = CLK_SET_RATE_PARENT,
1359         }
1360 };
1361
1362 static const struct freq_tbl ftbl_pdm2_clk_src[] = {
1363         F(32000000, P_GPLL0_DIV2, 12.5, 0, 0),
1364         F(64000000, P_GPLL0, 12.5, 0, 0),
1365         { }
1366 };
1367
1368 static struct clk_rcg2 pdm2_clk_src = {
1369         .cmd_rcgr = 0x44010,
1370         .hid_width = 5,
1371         .freq_tbl = ftbl_pdm2_clk_src,
1372         .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
1373         .clkr.hw.init = &(struct clk_init_data) {
1374                 .name = "pdm2_clk_src",
1375                 .parent_data = gcc_xo_gpll0_gpll0div2_data,
1376                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
1377                 .ops = &clk_rcg2_ops,
1378         }
1379 };
1380
1381 static const struct freq_tbl ftbl_rbcpr_gfx_clk_src[] = {
1382         F(19200000, P_XO, 1, 0, 0),
1383         F(50000000, P_GPLL0, 16, 0, 0),
1384         { }
1385 };
1386
1387 static struct clk_rcg2 rbcpr_gfx_clk_src = {
1388         .cmd_rcgr = 0x3a00c,
1389         .hid_width = 5,
1390         .freq_tbl = ftbl_rbcpr_gfx_clk_src,
1391         .parent_map = gcc_xo_gpll0_gpll0div2_4_map,
1392         .clkr.hw.init = &(struct clk_init_data) {
1393                 .name = "rbcpr_gfx_clk_src",
1394                 .parent_data = gcc_xo_gpll0_gpll0div2_data,
1395                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
1396                 .ops = &clk_rcg2_ops,
1397         }
1398 };
1399
1400 static const struct parent_map gcc_sdcc1_ice_core_map[] = {
1401         { P_XO, 0 },
1402         { P_GPLL0, 1 },
1403         { P_GPLL6, 2 },
1404         { P_GPLL0_DIV2, 4 },
1405 };
1406
1407 static const struct clk_parent_data gcc_sdcc1_ice_core_data[] = {
1408         { .fw_name = "xo" },
1409         { .hw = &gpll0.clkr.hw },
1410         { .hw = &gpll6.clkr.hw },
1411         { .hw = &gpll0_early_div.hw },
1412 };
1413
1414 static const struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = {
1415         F(80000000, P_GPLL0_DIV2, 5, 0, 0),
1416         F(160000000, P_GPLL0, 5, 0, 0),
1417         F(270000000, P_GPLL6, 4, 0, 0),
1418         { }
1419 };
1420
1421 static struct clk_rcg2 sdcc1_ice_core_clk_src = {
1422         .cmd_rcgr = 0x5d000,
1423         .hid_width = 5,
1424         .freq_tbl = ftbl_sdcc1_ice_core_clk_src,
1425         .parent_map = gcc_sdcc1_ice_core_map,
1426         .clkr.hw.init = &(struct clk_init_data) {
1427                 .name = "sdcc1_ice_core_clk_src",
1428                 .parent_data = gcc_sdcc1_ice_core_data,
1429                 .num_parents = ARRAY_SIZE(gcc_sdcc1_ice_core_data),
1430                 .ops = &clk_rcg2_ops,
1431         }
1432 };
1433
1434 static const struct parent_map gcc_sdcc_apps_map[] = {
1435         { P_XO, 0 },
1436         { P_GPLL0, 1 },
1437         { P_GPLL4, 2 },
1438         { P_GPLL0_DIV2, 4 },
1439 };
1440
1441 static const struct clk_parent_data gcc_sdcc_apss_data[] = {
1442         { .fw_name = "xo" },
1443         { .hw = &gpll0.clkr.hw },
1444         { .hw = &gpll4.clkr.hw },
1445         { .hw = &gpll0_early_div.hw },
1446 };
1447
1448 static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
1449         F(144000, P_XO, 16, 3, 25),
1450         F(400000, P_XO, 12, 1, 4),
1451         F(20000000, P_GPLL0_DIV2, 5, 1, 4),
1452         F(25000000, P_GPLL0_DIV2, 16, 0, 0),
1453         F(50000000, P_GPLL0, 16, 0, 0),
1454         F(100000000, P_GPLL0, 8, 0, 0),
1455         F(177770000, P_GPLL0, 4.5, 0, 0),
1456         F(192000000, P_GPLL4, 6, 0, 0),
1457         F(384000000, P_GPLL4, 3, 0, 0),
1458         { }
1459 };
1460
1461 static struct clk_rcg2 sdcc1_apps_clk_src = {
1462         .cmd_rcgr = 0x42004,
1463         .hid_width = 5,
1464         .mnd_width = 8,
1465         .freq_tbl = ftbl_sdcc1_apps_clk_src,
1466         .parent_map = gcc_sdcc_apps_map,
1467         .clkr.hw.init = &(struct clk_init_data) {
1468                 .name = "sdcc1_apps_clk_src",
1469                 .parent_data = gcc_sdcc_apss_data,
1470                 .num_parents = ARRAY_SIZE(gcc_sdcc_apss_data),
1471                 .ops = &clk_rcg2_floor_ops,
1472         }
1473 };
1474
1475 static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = {
1476         F(144000, P_XO, 16, 3, 25),
1477         F(400000, P_XO, 12, 1, 4),
1478         F(20000000, P_GPLL0_DIV2, 5, 1, 4),
1479         F(25000000, P_GPLL0_DIV2, 16, 0, 0),
1480         F(50000000, P_GPLL0, 16, 0, 0),
1481         F(100000000, P_GPLL0, 8, 0, 0),
1482         F(177770000, P_GPLL0, 4.5, 0, 0),
1483         F(192000000, P_GPLL4, 6, 0, 0),
1484         F(200000000, P_GPLL0, 4, 0, 0),
1485         { }
1486 };
1487
1488 static struct clk_rcg2 sdcc2_apps_clk_src = {
1489         .cmd_rcgr = 0x43004,
1490         .hid_width = 5,
1491         .mnd_width = 8,
1492         .freq_tbl = ftbl_sdcc2_apps_clk_src,
1493         .parent_map = gcc_sdcc_apps_map,
1494         .clkr.hw.init = &(struct clk_init_data) {
1495                 .name = "sdcc2_apps_clk_src",
1496                 .parent_data = gcc_sdcc_apss_data,
1497                 .num_parents = ARRAY_SIZE(gcc_sdcc_apss_data),
1498                 .ops = &clk_rcg2_floor_ops,
1499         }
1500 };
1501
1502 static const struct freq_tbl ftbl_usb30_master_clk_src[] = {
1503         F(80000000, P_GPLL0_DIV2, 5, 0, 0),
1504         F(100000000, P_GPLL0, 8, 0, 0),
1505         F(133330000, P_GPLL0, 6, 0, 0),
1506         { }
1507 };
1508
1509 static struct clk_rcg2 usb30_master_clk_src = {
1510         .cmd_rcgr = 0x3f00c,
1511         .hid_width = 5,
1512         .freq_tbl = ftbl_usb30_master_clk_src,
1513         .parent_map = gcc_xo_gpll0_gpll0div2_2_map,
1514         .clkr.hw.init = &(struct clk_init_data) {
1515                 .name = "usb30_master_clk_src",
1516                 .parent_data = gcc_xo_gpll0_gpll0div2_data,
1517                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0div2_data),
1518                 .ops = &clk_rcg2_ops,
1519         }
1520 };
1521
1522 static const struct parent_map gcc_usb30_mock_utmi_map[] = {
1523         { P_XO, 0 },
1524         { P_GPLL6, 1 },
1525         { P_GPLL6_DIV2, 2 },
1526         { P_GPLL0, 3 },
1527         { P_GPLL0_DIV2, 4 },
1528 };
1529
1530 static const struct clk_parent_data gcc_usb30_mock_utmi_data[] = {
1531         { .fw_name = "xo" },
1532         { .hw = &gpll6.clkr.hw },
1533         { .hw = &gpll6_early_div.hw },
1534         { .hw = &gpll0.clkr.hw },
1535         { .hw = &gpll0_early_div.hw },
1536 };
1537
1538 static const struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = {
1539         F(19200000, P_XO, 1, 0, 0),
1540         F(60000000, P_GPLL6_DIV2, 9, 1, 1),
1541         { }
1542 };
1543
1544 static struct clk_rcg2 usb30_mock_utmi_clk_src = {
1545         .cmd_rcgr = 0x3f020,
1546         .hid_width = 5,
1547         .mnd_width = 8,
1548         .freq_tbl = ftbl_usb30_mock_utmi_clk_src,
1549         .parent_map = gcc_usb30_mock_utmi_map,
1550         .clkr.hw.init = &(struct clk_init_data) {
1551                 .name = "usb30_mock_utmi_clk_src",
1552                 .parent_data = gcc_usb30_mock_utmi_data,
1553                 .num_parents = ARRAY_SIZE(gcc_usb30_mock_utmi_data),
1554                 .ops = &clk_rcg2_ops,
1555         }
1556 };
1557
1558 static const struct parent_map gcc_usb3_aux_map[] = {
1559         { P_XO, 0 },
1560         { P_SLEEP_CLK, 6 },
1561 };
1562
1563 static const struct clk_parent_data gcc_usb3_aux_data[] = {
1564         { .fw_name = "xo" },
1565         { .fw_name = "sleep", .name = "sleep" },
1566 };
1567
1568 static const struct freq_tbl ftbl_usb3_aux_clk_src[] = {
1569         F(19200000, P_XO, 1, 0, 0),
1570         { }
1571 };
1572
1573 static struct clk_rcg2 usb3_aux_clk_src = {
1574         .cmd_rcgr = 0x3f05c,
1575         .hid_width = 5,
1576         .mnd_width = 8,
1577         .freq_tbl = ftbl_usb3_aux_clk_src,
1578         .parent_map = gcc_usb3_aux_map,
1579         .clkr.hw.init = &(struct clk_init_data) {
1580                 .name = "usb3_aux_clk_src",
1581                 .parent_data = gcc_usb3_aux_data,
1582                 .num_parents = ARRAY_SIZE(gcc_usb3_aux_data),
1583                 .ops = &clk_rcg2_ops,
1584         }
1585 };
1586
1587 static const struct parent_map gcc_vcodec0_map[] = {
1588         { P_XO, 0 },
1589         { P_GPLL0, 1 },
1590         { P_GPLL6, 2 },
1591         { P_GPLL2, 3 },
1592         { P_GPLL0_DIV2, 4 },
1593 };
1594
1595 static const struct clk_parent_data gcc_vcodec0_data[] = {
1596         { .fw_name = "xo" },
1597         { .hw = &gpll0.clkr.hw },
1598         { .hw = &gpll6.clkr.hw },
1599         { .hw = &gpll2.clkr.hw },
1600         { .hw = &gpll0_early_div.hw },
1601 };
1602
1603 static const struct freq_tbl ftbl_vcodec0_clk_src[] = {
1604         F(114290000, P_GPLL0_DIV2, 3.5, 0, 0),
1605         F(228570000, P_GPLL0, 3.5, 0, 0),
1606         F(310000000, P_GPLL2, 3, 0, 0),
1607         F(360000000, P_GPLL6, 3, 0, 0),
1608         F(400000000, P_GPLL0, 2, 0, 0),
1609         F(465000000, P_GPLL2, 2, 0, 0),
1610         F(540000000, P_GPLL6, 2, 0, 0),
1611         { }
1612 };
1613
1614 static struct clk_rcg2 vcodec0_clk_src = {
1615         .cmd_rcgr = 0x4c000,
1616         .hid_width = 5,
1617         .freq_tbl = ftbl_vcodec0_clk_src,
1618         .parent_map = gcc_vcodec0_map,
1619         .clkr.hw.init = &(struct clk_init_data) {
1620                 .name = "vcodec0_clk_src",
1621                 .parent_data = gcc_vcodec0_data,
1622                 .num_parents = ARRAY_SIZE(gcc_vcodec0_data),
1623                 .ops = &clk_rcg2_ops,
1624         }
1625 };
1626
1627 static const struct parent_map gcc_vfe_map[] = {
1628         { P_XO, 0 },
1629         { P_GPLL0, 1 },
1630         { P_GPLL6, 2 },
1631         { P_GPLL4, 3 },
1632         { P_GPLL2, 4 },
1633         { P_GPLL0_DIV2, 5 },
1634 };
1635
1636 static const struct clk_parent_data gcc_vfe_data[] = {
1637         { .fw_name = "xo" },
1638         { .hw = &gpll0.clkr.hw },
1639         { .hw = &gpll6.clkr.hw },
1640         { .hw = &gpll4.clkr.hw },
1641         { .hw = &gpll2.clkr.hw },
1642         { .hw = &gpll0_early_div.hw },
1643 };
1644
1645 static const struct freq_tbl ftbl_vfe_clk_src[] = {
1646         F(50000000, P_GPLL0_DIV2, 8, 0, 0),
1647         F(100000000, P_GPLL0_DIV2, 4, 0, 0),
1648         F(133330000, P_GPLL0, 6, 0, 0),
1649         F(160000000, P_GPLL0, 5, 0, 0),
1650         F(200000000, P_GPLL0, 4, 0, 0),
1651         F(266670000, P_GPLL0, 3, 0, 0),
1652         F(310000000, P_GPLL2, 3, 0, 0),
1653         F(400000000, P_GPLL0, 2, 0, 0),
1654         F(465000000, P_GPLL2, 2, 0, 0),
1655         { }
1656 };
1657
1658 static struct clk_rcg2 vfe0_clk_src = {
1659         .cmd_rcgr = 0x58000,
1660         .hid_width = 5,
1661         .freq_tbl = ftbl_vfe_clk_src,
1662         .parent_map = gcc_vfe_map,
1663         .clkr.hw.init = &(struct clk_init_data) {
1664                 .name = "vfe0_clk_src",
1665                 .parent_data = gcc_vfe_data,
1666                 .num_parents = ARRAY_SIZE(gcc_vfe_data),
1667                 .ops = &clk_rcg2_ops,
1668         }
1669 };
1670
1671 static struct clk_rcg2 vfe1_clk_src = {
1672         .cmd_rcgr = 0x58054,
1673         .hid_width = 5,
1674         .freq_tbl = ftbl_vfe_clk_src,
1675         .parent_map = gcc_vfe_map,
1676         .clkr.hw.init = &(struct clk_init_data) {
1677                 .name = "vfe1_clk_src",
1678                 .parent_data = gcc_vfe_data,
1679                 .num_parents = ARRAY_SIZE(gcc_vfe_data),
1680                 .ops = &clk_rcg2_ops,
1681         }
1682 };
1683
1684 static const struct parent_map gcc_vsync_map[] = {
1685         { P_XO, 0 },
1686         { P_GPLL0, 2 },
1687 };
1688
1689 static const struct freq_tbl ftbl_vsync_clk_src[] = {
1690         F(19200000, P_XO, 1, 0, 0),
1691         { }
1692 };
1693
1694 static struct clk_rcg2 vsync_clk_src = {
1695         .cmd_rcgr = 0x4d02c,
1696         .hid_width = 5,
1697         .freq_tbl = ftbl_vsync_clk_src,
1698         .parent_map = gcc_vsync_map,
1699         .clkr.hw.init = &(struct clk_init_data) {
1700                 .name = "vsync_clk_src",
1701                 .parent_data = gcc_esc_vsync_data,
1702                 .num_parents = ARRAY_SIZE(gcc_esc_vsync_data),
1703                 .ops = &clk_rcg2_ops,
1704         }
1705 };
1706
1707 static struct clk_branch gcc_apc0_droop_detector_gpll0_clk = {
1708         .halt_reg = 0x78004,
1709         .halt_check = BRANCH_HALT,
1710         .clkr = {
1711                 .enable_reg = 0x78004,
1712                 .enable_mask = BIT(0),
1713                 .hw.init = &(struct clk_init_data) {
1714                         .name = "gcc_apc0_droop_detector_gpll0_clk",
1715                         .parent_hws = (const struct clk_hw*[]){
1716                                 &apc0_droop_detector_clk_src.clkr.hw,
1717                         },
1718                         .num_parents = 1,
1719                         .ops = &clk_branch2_ops,
1720                         .flags = CLK_SET_RATE_PARENT,
1721                 }
1722         }
1723 };
1724
1725 static struct clk_branch gcc_apc1_droop_detector_gpll0_clk = {
1726         .halt_reg = 0x79004,
1727         .halt_check = BRANCH_HALT,
1728         .clkr = {
1729                 .enable_reg = 0x79004,
1730                 .enable_mask = BIT(0),
1731                 .hw.init = &(struct clk_init_data) {
1732                         .name = "gcc_apc1_droop_detector_gpll0_clk",
1733                         .parent_hws = (const struct clk_hw*[]){
1734                                 &apc1_droop_detector_clk_src.clkr.hw,
1735                         },
1736                         .num_parents = 1,
1737                         .ops = &clk_branch2_ops,
1738                         .flags = CLK_SET_RATE_PARENT,
1739                 }
1740         }
1741 };
1742
1743 static struct clk_branch gcc_apss_ahb_clk = {
1744         .halt_reg = 0x4601c,
1745         .halt_check = BRANCH_HALT_VOTED,
1746         .clkr = {
1747                 .enable_reg = 0x45004,
1748                 .enable_mask = BIT(14),
1749                 .hw.init = &(struct clk_init_data) {
1750                         .name = "gcc_apss_ahb_clk",
1751                         .parent_hws = (const struct clk_hw*[]){
1752                                 &apss_ahb_clk_src.clkr.hw,
1753                         },
1754                         .num_parents = 1,
1755                         .ops = &clk_branch2_ops,
1756                         .flags = CLK_SET_RATE_PARENT,
1757                 }
1758         }
1759 };
1760
1761 static struct clk_branch gcc_apss_axi_clk = {
1762         .halt_reg = 0x46020,
1763         .halt_check = BRANCH_HALT_VOTED,
1764         .clkr = {
1765                 .enable_reg = 0x45004,
1766                 .enable_mask = BIT(13),
1767                 .hw.init = &(struct clk_init_data) {
1768                         .name = "gcc_apss_axi_clk",
1769                         .ops = &clk_branch2_ops,
1770                 }
1771         }
1772 };
1773
1774 static struct clk_branch gcc_apss_tcu_async_clk = {
1775         .halt_reg = 0x12018,
1776         .halt_check = BRANCH_HALT_VOTED,
1777         .clkr = {
1778                 .enable_reg = 0x4500c,
1779                 .enable_mask = BIT(1),
1780                 .hw.init = &(struct clk_init_data) {
1781                         .name = "gcc_apss_tcu_async_clk",
1782                         .ops = &clk_branch2_ops,
1783                 }
1784         }
1785 };
1786
1787 static struct clk_branch gcc_bimc_gfx_clk = {
1788         .halt_reg = 0x59034,
1789         .halt_check = BRANCH_HALT,
1790         .clkr = {
1791                 .enable_reg = 0x59034,
1792                 .enable_mask = BIT(0),
1793                 .hw.init = &(struct clk_init_data) {
1794                         .name = "gcc_bimc_gfx_clk",
1795                         .ops = &clk_branch2_ops,
1796                 }
1797         }
1798 };
1799
1800 static struct clk_branch gcc_bimc_gpu_clk = {
1801         .halt_reg = 0x59030,
1802         .halt_check = BRANCH_HALT,
1803         .clkr = {
1804                 .enable_reg = 0x59030,
1805                 .enable_mask = BIT(0),
1806                 .hw.init = &(struct clk_init_data) {
1807                         .name = "gcc_bimc_gpu_clk",
1808                         .ops = &clk_branch2_ops,
1809                 }
1810         }
1811 };
1812
1813 static struct clk_branch gcc_blsp1_ahb_clk = {
1814         .halt_reg = 0x01008,
1815         .halt_check = BRANCH_HALT_VOTED,
1816         .clkr = {
1817                 .enable_reg = 0x45004,
1818                 .enable_mask = BIT(10),
1819                 .hw.init = &(struct clk_init_data) {
1820                         .name = "gcc_blsp1_ahb_clk",
1821                         .ops = &clk_branch2_ops,
1822                 }
1823         }
1824 };
1825
1826 static struct clk_branch gcc_blsp2_ahb_clk = {
1827         .halt_reg = 0x0b008,
1828         .halt_check = BRANCH_HALT_VOTED,
1829         .clkr = {
1830                 .enable_reg = 0x45004,
1831                 .enable_mask = BIT(20),
1832                 .hw.init = &(struct clk_init_data) {
1833                         .name = "gcc_blsp2_ahb_clk",
1834                         .ops = &clk_branch2_ops,
1835                 }
1836         }
1837 };
1838
1839 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1840         .halt_reg = 0x02008,
1841         .halt_check = BRANCH_HALT,
1842         .clkr = {
1843                 .enable_reg = 0x02008,
1844                 .enable_mask = BIT(0),
1845                 .hw.init = &(struct clk_init_data) {
1846                         .name = "gcc_blsp1_qup1_i2c_apps_clk",
1847                         .parent_hws = (const struct clk_hw*[]){
1848                                 &blsp1_qup1_i2c_apps_clk_src.clkr.hw,
1849                         },
1850                         .num_parents = 1,
1851                         .ops = &clk_branch2_ops,
1852                         .flags = CLK_SET_RATE_PARENT,
1853                 }
1854         }
1855 };
1856
1857 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1858         .halt_reg = 0x03010,
1859         .halt_check = BRANCH_HALT,
1860         .clkr = {
1861                 .enable_reg = 0x03010,
1862                 .enable_mask = BIT(0),
1863                 .hw.init = &(struct clk_init_data) {
1864                         .name = "gcc_blsp1_qup2_i2c_apps_clk",
1865                         .parent_hws = (const struct clk_hw*[]){
1866                                 &blsp1_qup2_i2c_apps_clk_src.clkr.hw,
1867                         },
1868                         .num_parents = 1,
1869                         .ops = &clk_branch2_ops,
1870                         .flags = CLK_SET_RATE_PARENT,
1871                 }
1872         }
1873 };
1874
1875 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1876         .halt_reg = 0x04020,
1877         .halt_check = BRANCH_HALT,
1878         .clkr = {
1879                 .enable_reg = 0x04020,
1880                 .enable_mask = BIT(0),
1881                 .hw.init = &(struct clk_init_data) {
1882                         .name = "gcc_blsp1_qup3_i2c_apps_clk",
1883                         .parent_hws = (const struct clk_hw*[]){
1884                                 &blsp1_qup3_i2c_apps_clk_src.clkr.hw,
1885                         },
1886                         .num_parents = 1,
1887                         .ops = &clk_branch2_ops,
1888                         .flags = CLK_SET_RATE_PARENT,
1889                 }
1890         }
1891 };
1892
1893 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1894         .halt_reg = 0x05020,
1895         .halt_check = BRANCH_HALT,
1896         .clkr = {
1897                 .enable_reg = 0x05020,
1898                 .enable_mask = BIT(0),
1899                 .hw.init = &(struct clk_init_data) {
1900                         .name = "gcc_blsp1_qup4_i2c_apps_clk",
1901                         .parent_hws = (const struct clk_hw*[]){
1902                                 &blsp1_qup4_i2c_apps_clk_src.clkr.hw,
1903                         },
1904                         .num_parents = 1,
1905                         .ops = &clk_branch2_ops,
1906                         .flags = CLK_SET_RATE_PARENT,
1907                 }
1908         }
1909 };
1910
1911 static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
1912         .halt_reg = 0x0c008,
1913         .halt_check = BRANCH_HALT,
1914         .clkr = {
1915                 .enable_reg = 0x0c008,
1916                 .enable_mask = BIT(0),
1917                 .hw.init = &(struct clk_init_data) {
1918                         .name = "gcc_blsp2_qup1_i2c_apps_clk",
1919                         .parent_hws = (const struct clk_hw*[]){
1920                                 &blsp2_qup1_i2c_apps_clk_src.clkr.hw,
1921                         },
1922                         .num_parents = 1,
1923                         .ops = &clk_branch2_ops,
1924                         .flags = CLK_SET_RATE_PARENT,
1925                 }
1926         }
1927 };
1928
1929 static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
1930         .halt_reg = 0x0d010,
1931         .halt_check = BRANCH_HALT,
1932         .clkr = {
1933                 .enable_reg = 0x0d010,
1934                 .enable_mask = BIT(0),
1935                 .hw.init = &(struct clk_init_data) {
1936                         .name = "gcc_blsp2_qup2_i2c_apps_clk",
1937                         .parent_hws = (const struct clk_hw*[]){
1938                                 &blsp2_qup2_i2c_apps_clk_src.clkr.hw,
1939                         },
1940                         .num_parents = 1,
1941                         .ops = &clk_branch2_ops,
1942                         .flags = CLK_SET_RATE_PARENT,
1943                 }
1944         }
1945 };
1946
1947 static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
1948         .halt_reg = 0x0f020,
1949         .halt_check = BRANCH_HALT,
1950         .clkr = {
1951                 .enable_reg = 0x0f020,
1952                 .enable_mask = BIT(0),
1953                 .hw.init = &(struct clk_init_data) {
1954                         .name = "gcc_blsp2_qup3_i2c_apps_clk",
1955                         .parent_hws = (const struct clk_hw*[]){
1956                                 &blsp2_qup3_i2c_apps_clk_src.clkr.hw,
1957                         },
1958                         .num_parents = 1,
1959                         .ops = &clk_branch2_ops,
1960                         .flags = CLK_SET_RATE_PARENT,
1961                 }
1962         }
1963 };
1964
1965 static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
1966         .halt_reg = 0x18020,
1967         .halt_check = BRANCH_HALT,
1968         .clkr = {
1969                 .enable_reg = 0x18020,
1970                 .enable_mask = BIT(0),
1971                 .hw.init = &(struct clk_init_data) {
1972                         .name = "gcc_blsp2_qup4_i2c_apps_clk",
1973                         .parent_hws = (const struct clk_hw*[]){
1974                                 &blsp2_qup4_i2c_apps_clk_src.clkr.hw,
1975                         },
1976                         .num_parents = 1,
1977                         .ops = &clk_branch2_ops,
1978                         .flags = CLK_SET_RATE_PARENT,
1979                 }
1980         }
1981 };
1982
1983 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1984         .halt_reg = 0x02004,
1985         .halt_check = BRANCH_HALT,
1986         .clkr = {
1987                 .enable_reg = 0x02004,
1988                 .enable_mask = BIT(0),
1989                 .hw.init = &(struct clk_init_data) {
1990                         .name = "gcc_blsp1_qup1_spi_apps_clk",
1991                         .parent_hws = (const struct clk_hw*[]){
1992                                 &blsp1_qup1_spi_apps_clk_src.clkr.hw,
1993                         },
1994                         .num_parents = 1,
1995                         .ops = &clk_branch2_ops,
1996                         .flags = CLK_SET_RATE_PARENT,
1997                 }
1998         }
1999 };
2000
2001 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
2002         .halt_reg = 0x0300c,
2003         .halt_check = BRANCH_HALT,
2004         .clkr = {
2005                 .enable_reg = 0x0300c,
2006                 .enable_mask = BIT(0),
2007                 .hw.init = &(struct clk_init_data) {
2008                         .name = "gcc_blsp1_qup2_spi_apps_clk",
2009                         .parent_hws = (const struct clk_hw*[]){
2010                                 &blsp1_qup2_spi_apps_clk_src.clkr.hw,
2011                         },
2012                         .num_parents = 1,
2013                         .ops = &clk_branch2_ops,
2014                         .flags = CLK_SET_RATE_PARENT,
2015                 }
2016         }
2017 };
2018
2019 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
2020         .halt_reg = 0x0401c,
2021         .halt_check = BRANCH_HALT,
2022         .clkr = {
2023                 .enable_reg = 0x0401c,
2024                 .enable_mask = BIT(0),
2025                 .hw.init = &(struct clk_init_data) {
2026                         .name = "gcc_blsp1_qup3_spi_apps_clk",
2027                         .parent_hws = (const struct clk_hw*[]){
2028                                 &blsp1_qup3_spi_apps_clk_src.clkr.hw,
2029                         },
2030                         .num_parents = 1,
2031                         .ops = &clk_branch2_ops,
2032                         .flags = CLK_SET_RATE_PARENT,
2033                 }
2034         }
2035 };
2036
2037 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
2038         .halt_reg = 0x0501c,
2039         .halt_check = BRANCH_HALT,
2040         .clkr = {
2041                 .enable_reg = 0x0501c,
2042                 .enable_mask = BIT(0),
2043                 .hw.init = &(struct clk_init_data) {
2044                         .name = "gcc_blsp1_qup4_spi_apps_clk",
2045                         .parent_hws = (const struct clk_hw*[]){
2046                                 &blsp1_qup4_spi_apps_clk_src.clkr.hw,
2047                         },
2048                         .num_parents = 1,
2049                         .ops = &clk_branch2_ops,
2050                         .flags = CLK_SET_RATE_PARENT,
2051                 }
2052         }
2053 };
2054
2055 static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
2056         .halt_reg = 0x0c004,
2057         .halt_check = BRANCH_HALT,
2058         .clkr = {
2059                 .enable_reg = 0x0c004,
2060                 .enable_mask = BIT(0),
2061                 .hw.init = &(struct clk_init_data) {
2062                         .name = "gcc_blsp2_qup1_spi_apps_clk",
2063                         .parent_hws = (const struct clk_hw*[]){
2064                                 &blsp2_qup1_spi_apps_clk_src.clkr.hw,
2065                         },
2066                         .num_parents = 1,
2067                         .ops = &clk_branch2_ops,
2068                         .flags = CLK_SET_RATE_PARENT,
2069                 }
2070         }
2071 };
2072
2073 static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
2074         .halt_reg = 0x0d00c,
2075         .halt_check = BRANCH_HALT,
2076         .clkr = {
2077                 .enable_reg = 0x0d00c,
2078                 .enable_mask = BIT(0),
2079                 .hw.init = &(struct clk_init_data) {
2080                         .name = "gcc_blsp2_qup2_spi_apps_clk",
2081                         .parent_hws = (const struct clk_hw*[]){
2082                                 &blsp2_qup2_spi_apps_clk_src.clkr.hw,
2083                         },
2084                         .num_parents = 1,
2085                         .ops = &clk_branch2_ops,
2086                         .flags = CLK_SET_RATE_PARENT,
2087                 }
2088         }
2089 };
2090
2091 static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
2092         .halt_reg = 0x0f01c,
2093         .halt_check = BRANCH_HALT,
2094         .clkr = {
2095                 .enable_reg = 0x0f01c,
2096                 .enable_mask = BIT(0),
2097                 .hw.init = &(struct clk_init_data) {
2098                         .name = "gcc_blsp2_qup3_spi_apps_clk",
2099                         .parent_hws = (const struct clk_hw*[]){
2100                                 &blsp2_qup3_spi_apps_clk_src.clkr.hw,
2101                         },
2102                         .num_parents = 1,
2103                         .ops = &clk_branch2_ops,
2104                         .flags = CLK_SET_RATE_PARENT,
2105                 }
2106         }
2107 };
2108
2109 static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
2110         .halt_reg = 0x1801c,
2111         .halt_check = BRANCH_HALT,
2112         .clkr = {
2113                 .enable_reg = 0x1801c,
2114                 .enable_mask = BIT(0),
2115                 .hw.init = &(struct clk_init_data) {
2116                         .name = "gcc_blsp2_qup4_spi_apps_clk",
2117                         .parent_hws = (const struct clk_hw*[]){
2118                                 &blsp2_qup4_spi_apps_clk_src.clkr.hw,
2119                         },
2120                         .num_parents = 1,
2121                         .ops = &clk_branch2_ops,
2122                         .flags = CLK_SET_RATE_PARENT,
2123                 }
2124         }
2125 };
2126
2127 static struct clk_branch gcc_blsp1_uart1_apps_clk = {
2128         .halt_reg = 0x0203c,
2129         .halt_check = BRANCH_HALT,
2130         .clkr = {
2131                 .enable_reg = 0x0203c,
2132                 .enable_mask = BIT(0),
2133                 .hw.init = &(struct clk_init_data) {
2134                         .name = "gcc_blsp1_uart1_apps_clk",
2135                         .parent_hws = (const struct clk_hw*[]){
2136                                 &blsp1_uart1_apps_clk_src.clkr.hw,
2137                         },
2138                         .num_parents = 1,
2139                         .ops = &clk_branch2_ops,
2140                         .flags = CLK_SET_RATE_PARENT,
2141                 }
2142         }
2143 };
2144
2145 static struct clk_branch gcc_blsp1_uart2_apps_clk = {
2146         .halt_reg = 0x0302c,
2147         .halt_check = BRANCH_HALT,
2148         .clkr = {
2149                 .enable_reg = 0x0302c,
2150                 .enable_mask = BIT(0),
2151                 .hw.init = &(struct clk_init_data) {
2152                         .name = "gcc_blsp1_uart2_apps_clk",
2153                         .parent_hws = (const struct clk_hw*[]){
2154                                 &blsp1_uart2_apps_clk_src.clkr.hw,
2155                         },
2156                         .num_parents = 1,
2157                         .ops = &clk_branch2_ops,
2158                         .flags = CLK_SET_RATE_PARENT,
2159                 }
2160         }
2161 };
2162
2163 static struct clk_branch gcc_blsp2_uart1_apps_clk = {
2164         .halt_reg = 0x0c03c,
2165         .halt_check = BRANCH_HALT,
2166         .clkr = {
2167                 .enable_reg = 0x0c03c,
2168                 .enable_mask = BIT(0),
2169                 .hw.init = &(struct clk_init_data) {
2170                         .name = "gcc_blsp2_uart1_apps_clk",
2171                         .parent_hws = (const struct clk_hw*[]){
2172                                 &blsp2_uart1_apps_clk_src.clkr.hw,
2173                         },
2174                         .num_parents = 1,
2175                         .ops = &clk_branch2_ops,
2176                         .flags = CLK_SET_RATE_PARENT,
2177                 }
2178         }
2179 };
2180
2181 static struct clk_branch gcc_blsp2_uart2_apps_clk = {
2182         .halt_reg = 0x0d02c,
2183         .halt_check = BRANCH_HALT,
2184         .clkr = {
2185                 .enable_reg = 0x0d02c,
2186                 .enable_mask = BIT(0),
2187                 .hw.init = &(struct clk_init_data) {
2188                         .name = "gcc_blsp2_uart2_apps_clk",
2189                         .parent_hws = (const struct clk_hw*[]){
2190                                 &blsp2_uart2_apps_clk_src.clkr.hw,
2191                         },
2192                         .num_parents = 1,
2193                         .ops = &clk_branch2_ops,
2194                         .flags = CLK_SET_RATE_PARENT,
2195                 }
2196         }
2197 };
2198
2199 static struct clk_branch gcc_boot_rom_ahb_clk = {
2200         .halt_reg = 0x1300c,
2201         .halt_check = BRANCH_HALT_VOTED,
2202         .clkr = {
2203                 .enable_reg = 0x45004,
2204                 .enable_mask = BIT(7),
2205                 .hw.init = &(struct clk_init_data) {
2206                         .name = "gcc_boot_rom_ahb_clk",
2207                         .ops = &clk_branch2_ops,
2208                 }
2209         }
2210 };
2211
2212 static struct clk_branch gcc_camss_ahb_clk = {
2213         .halt_reg = 0x56004,
2214         .halt_check = BRANCH_HALT,
2215         .clkr = {
2216                 .enable_reg = 0x56004,
2217                 .enable_mask = BIT(0),
2218                 .hw.init = &(struct clk_init_data) {
2219                         .name = "gcc_camss_ahb_clk",
2220                         .ops = &clk_branch2_ops,
2221                 }
2222         }
2223 };
2224
2225 static struct clk_branch gcc_camss_cci_ahb_clk = {
2226         .halt_reg = 0x5101c,
2227         .halt_check = BRANCH_HALT,
2228         .clkr = {
2229                 .enable_reg = 0x5101c,
2230                 .enable_mask = BIT(0),
2231                 .hw.init = &(struct clk_init_data) {
2232                         .name = "gcc_camss_cci_ahb_clk",
2233                         .parent_hws = (const struct clk_hw*[]){
2234                                 &camss_top_ahb_clk_src.clkr.hw,
2235                         },
2236                         .num_parents = 1,
2237                         .ops = &clk_branch2_ops,
2238                         .flags = CLK_SET_RATE_PARENT,
2239                 }
2240         }
2241 };
2242
2243 static struct clk_branch gcc_camss_cci_clk = {
2244         .halt_reg = 0x51018,
2245         .halt_check = BRANCH_HALT,
2246         .clkr = {
2247                 .enable_reg = 0x51018,
2248                 .enable_mask = BIT(0),
2249                 .hw.init = &(struct clk_init_data) {
2250                         .name = "gcc_camss_cci_clk",
2251                         .parent_hws = (const struct clk_hw*[]){
2252                                 &cci_clk_src.clkr.hw,
2253                         },
2254                         .num_parents = 1,
2255                         .ops = &clk_branch2_ops,
2256                         .flags = CLK_SET_RATE_PARENT,
2257                 }
2258         }
2259 };
2260
2261 static struct clk_branch gcc_camss_cpp_ahb_clk = {
2262         .halt_reg = 0x58040,
2263         .halt_check = BRANCH_HALT,
2264         .clkr = {
2265                 .enable_reg = 0x58040,
2266                 .enable_mask = BIT(0),
2267                 .hw.init = &(struct clk_init_data) {
2268                         .name = "gcc_camss_cpp_ahb_clk",
2269                         .parent_hws = (const struct clk_hw*[]){
2270                                 &camss_top_ahb_clk_src.clkr.hw,
2271                         },
2272                         .num_parents = 1,
2273                         .ops = &clk_branch2_ops,
2274                         .flags = CLK_SET_RATE_PARENT,
2275                 }
2276         }
2277 };
2278
2279 static struct clk_branch gcc_camss_cpp_axi_clk = {
2280         .halt_reg = 0x58064,
2281         .halt_check = BRANCH_HALT,
2282         .clkr = {
2283                 .enable_reg = 0x58064,
2284                 .enable_mask = BIT(0),
2285                 .hw.init = &(struct clk_init_data) {
2286                         .name = "gcc_camss_cpp_axi_clk",
2287                         .ops = &clk_branch2_ops,
2288                 }
2289         }
2290 };
2291
2292 static struct clk_branch gcc_camss_cpp_clk = {
2293         .halt_reg = 0x5803c,
2294         .halt_check = BRANCH_HALT,
2295         .clkr = {
2296                 .enable_reg = 0x5803c,
2297                 .enable_mask = BIT(0),
2298                 .hw.init = &(struct clk_init_data) {
2299                         .name = "gcc_camss_cpp_clk",
2300                         .parent_hws = (const struct clk_hw*[]){
2301                                 &cpp_clk_src.clkr.hw,
2302                         },
2303                         .num_parents = 1,
2304                         .ops = &clk_branch2_ops,
2305                         .flags = CLK_SET_RATE_PARENT,
2306                 }
2307         }
2308 };
2309
2310 static struct clk_branch gcc_camss_csi0_ahb_clk = {
2311         .halt_reg = 0x4e040,
2312         .halt_check = BRANCH_HALT,
2313         .clkr = {
2314                 .enable_reg = 0x4e040,
2315                 .enable_mask = BIT(0),
2316                 .hw.init = &(struct clk_init_data) {
2317                         .name = "gcc_camss_csi0_ahb_clk",
2318                         .parent_hws = (const struct clk_hw*[]){
2319                                 &camss_top_ahb_clk_src.clkr.hw,
2320                         },
2321                         .num_parents = 1,
2322                         .ops = &clk_branch2_ops,
2323                         .flags = CLK_SET_RATE_PARENT,
2324                 }
2325         }
2326 };
2327
2328 static struct clk_branch gcc_camss_csi1_ahb_clk = {
2329         .halt_reg = 0x4f040,
2330         .halt_check = BRANCH_HALT,
2331         .clkr = {
2332                 .enable_reg = 0x4f040,
2333                 .enable_mask = BIT(0),
2334                 .hw.init = &(struct clk_init_data) {
2335                         .name = "gcc_camss_csi1_ahb_clk",
2336                         .parent_hws = (const struct clk_hw*[]){
2337                                 &camss_top_ahb_clk_src.clkr.hw,
2338                         },
2339                         .num_parents = 1,
2340                         .ops = &clk_branch2_ops,
2341                         .flags = CLK_SET_RATE_PARENT,
2342                 }
2343         }
2344 };
2345
2346 static struct clk_branch gcc_camss_csi2_ahb_clk = {
2347         .halt_reg = 0x3c040,
2348         .halt_check = BRANCH_HALT,
2349         .clkr = {
2350                 .enable_reg = 0x3c040,
2351                 .enable_mask = BIT(0),
2352                 .hw.init = &(struct clk_init_data) {
2353                         .name = "gcc_camss_csi2_ahb_clk",
2354                         .parent_hws = (const struct clk_hw*[]){
2355                                 &camss_top_ahb_clk_src.clkr.hw,
2356                         },
2357                         .num_parents = 1,
2358                         .ops = &clk_branch2_ops,
2359                         .flags = CLK_SET_RATE_PARENT,
2360                 }
2361         }
2362 };
2363
2364 static struct clk_branch gcc_camss_csi0_clk = {
2365         .halt_reg = 0x4e03c,
2366         .halt_check = BRANCH_HALT,
2367         .clkr = {
2368                 .enable_reg = 0x4e03c,
2369                 .enable_mask = BIT(0),
2370                 .hw.init = &(struct clk_init_data) {
2371                         .name = "gcc_camss_csi0_clk",
2372                         .parent_hws = (const struct clk_hw*[]){
2373                                 &csi0_clk_src.clkr.hw,
2374                         },
2375                         .num_parents = 1,
2376                         .ops = &clk_branch2_ops,
2377                         .flags = CLK_SET_RATE_PARENT,
2378                 }
2379         }
2380 };
2381
2382 static struct clk_branch gcc_camss_csi1_clk = {
2383         .halt_reg = 0x4f03c,
2384         .halt_check = BRANCH_HALT,
2385         .clkr = {
2386                 .enable_reg = 0x4f03c,
2387                 .enable_mask = BIT(0),
2388                 .hw.init = &(struct clk_init_data) {
2389                         .name = "gcc_camss_csi1_clk",
2390                         .parent_hws = (const struct clk_hw*[]){
2391                                 &csi1_clk_src.clkr.hw,
2392                         },
2393                         .num_parents = 1,
2394                         .ops = &clk_branch2_ops,
2395                         .flags = CLK_SET_RATE_PARENT,
2396                 }
2397         }
2398 };
2399
2400 static struct clk_branch gcc_camss_csi2_clk = {
2401         .halt_reg = 0x3c03c,
2402         .halt_check = BRANCH_HALT,
2403         .clkr = {
2404                 .enable_reg = 0x3c03c,
2405                 .enable_mask = BIT(0),
2406                 .hw.init = &(struct clk_init_data) {
2407                         .name = "gcc_camss_csi2_clk",
2408                         .parent_hws = (const struct clk_hw*[]){
2409                                 &csi2_clk_src.clkr.hw,
2410                         },
2411                         .num_parents = 1,
2412                         .ops = &clk_branch2_ops,
2413                         .flags = CLK_SET_RATE_PARENT,
2414                 }
2415         }
2416 };
2417
2418 static struct clk_branch gcc_camss_csi0_csiphy_3p_clk = {
2419         .halt_reg = 0x58090,
2420         .halt_check = BRANCH_HALT,
2421         .clkr = {
2422                 .enable_reg = 0x58090,
2423                 .enable_mask = BIT(0),
2424                 .hw.init = &(struct clk_init_data) {
2425                         .name = "gcc_camss_csi0_csiphy_3p_clk",
2426                         .parent_hws = (const struct clk_hw*[]){
2427                                 &csi0p_clk_src.clkr.hw,
2428                         },
2429                         .num_parents = 1,
2430                         .ops = &clk_branch2_ops,
2431                         .flags = CLK_SET_RATE_PARENT,
2432                 }
2433         }
2434 };
2435
2436 static struct clk_branch gcc_camss_csi1_csiphy_3p_clk = {
2437         .halt_reg = 0x580a0,
2438         .halt_check = BRANCH_HALT,
2439         .clkr = {
2440                 .enable_reg = 0x580a0,
2441                 .enable_mask = BIT(0),
2442                 .hw.init = &(struct clk_init_data) {
2443                         .name = "gcc_camss_csi1_csiphy_3p_clk",
2444                         .parent_hws = (const struct clk_hw*[]){
2445                                 &csi1p_clk_src.clkr.hw,
2446                         },
2447                         .num_parents = 1,
2448                         .ops = &clk_branch2_ops,
2449                         .flags = CLK_SET_RATE_PARENT,
2450                 }
2451         }
2452 };
2453
2454 static struct clk_branch gcc_camss_csi2_csiphy_3p_clk = {
2455         .halt_reg = 0x580b0,
2456         .halt_check = BRANCH_HALT,
2457         .clkr = {
2458                 .enable_reg = 0x580b0,
2459                 .enable_mask = BIT(0),
2460                 .hw.init = &(struct clk_init_data) {
2461                         .name = "gcc_camss_csi2_csiphy_3p_clk",
2462                         .parent_hws = (const struct clk_hw*[]){
2463                                 &csi2p_clk_src.clkr.hw,
2464                         },
2465                         .num_parents = 1,
2466                         .ops = &clk_branch2_ops,
2467                         .flags = CLK_SET_RATE_PARENT,
2468                 }
2469         }
2470 };
2471
2472 static struct clk_branch gcc_camss_csi0phy_clk = {
2473         .halt_reg = 0x4e048,
2474         .halt_check = BRANCH_HALT,
2475         .clkr = {
2476                 .enable_reg = 0x4e048,
2477                 .enable_mask = BIT(0),
2478                 .hw.init = &(struct clk_init_data) {
2479                         .name = "gcc_camss_csi0phy_clk",
2480                         .parent_hws = (const struct clk_hw*[]){
2481                                 &csi0_clk_src.clkr.hw,
2482                         },
2483                         .num_parents = 1,
2484                         .ops = &clk_branch2_ops,
2485                         .flags = CLK_SET_RATE_PARENT,
2486                 }
2487         }
2488 };
2489
2490 static struct clk_branch gcc_camss_csi1phy_clk = {
2491         .halt_reg = 0x4f048,
2492         .halt_check = BRANCH_HALT,
2493         .clkr = {
2494                 .enable_reg = 0x4f048,
2495                 .enable_mask = BIT(0),
2496                 .hw.init = &(struct clk_init_data) {
2497                         .name = "gcc_camss_csi1phy_clk",
2498                         .parent_hws = (const struct clk_hw*[]){
2499                                 &csi1_clk_src.clkr.hw,
2500                         },
2501                         .num_parents = 1,
2502                         .ops = &clk_branch2_ops,
2503                         .flags = CLK_SET_RATE_PARENT,
2504                 }
2505         }
2506 };
2507
2508 static struct clk_branch gcc_camss_csi2phy_clk = {
2509         .halt_reg = 0x3c048,
2510         .halt_check = BRANCH_HALT,
2511         .clkr = {
2512                 .enable_reg = 0x3c048,
2513                 .enable_mask = BIT(0),
2514                 .hw.init = &(struct clk_init_data) {
2515                         .name = "gcc_camss_csi2phy_clk",
2516                         .parent_hws = (const struct clk_hw*[]){
2517                                 &csi2_clk_src.clkr.hw,
2518                         },
2519                         .num_parents = 1,
2520                         .ops = &clk_branch2_ops,
2521                         .flags = CLK_SET_RATE_PARENT,
2522                 }
2523         }
2524 };
2525
2526 static struct clk_branch gcc_camss_csi0phytimer_clk = {
2527         .halt_reg = 0x4e01c,
2528         .halt_check = BRANCH_HALT,
2529         .clkr = {
2530                 .enable_reg = 0x4e01c,
2531                 .enable_mask = BIT(0),
2532                 .hw.init = &(struct clk_init_data) {
2533                         .name = "gcc_camss_csi0phytimer_clk",
2534                         .parent_hws = (const struct clk_hw*[]){
2535                                 &csi0phytimer_clk_src.clkr.hw,
2536                         },
2537                         .num_parents = 1,
2538                         .ops = &clk_branch2_ops,
2539                         .flags = CLK_SET_RATE_PARENT,
2540                 }
2541         }
2542 };
2543
2544 static struct clk_branch gcc_camss_csi1phytimer_clk = {
2545         .halt_reg = 0x4f01c,
2546         .halt_check = BRANCH_HALT,
2547         .clkr = {
2548                 .enable_reg = 0x4f01c,
2549                 .enable_mask = BIT(0),
2550                 .hw.init = &(struct clk_init_data) {
2551                         .name = "gcc_camss_csi1phytimer_clk",
2552                         .parent_hws = (const struct clk_hw*[]){
2553                                 &csi1phytimer_clk_src.clkr.hw,
2554                         },
2555                         .num_parents = 1,
2556                         .ops = &clk_branch2_ops,
2557                         .flags = CLK_SET_RATE_PARENT,
2558                 }
2559         }
2560 };
2561
2562 static struct clk_branch gcc_camss_csi2phytimer_clk = {
2563         .halt_reg = 0x4f068,
2564         .halt_check = BRANCH_HALT,
2565         .clkr = {
2566                 .enable_reg = 0x4f068,
2567                 .enable_mask = BIT(0),
2568                 .hw.init = &(struct clk_init_data) {
2569                         .name = "gcc_camss_csi2phytimer_clk",
2570                         .parent_hws = (const struct clk_hw*[]){
2571                                 &csi2phytimer_clk_src.clkr.hw,
2572                         },
2573                         .num_parents = 1,
2574                         .ops = &clk_branch2_ops,
2575                         .flags = CLK_SET_RATE_PARENT,
2576                 }
2577         }
2578 };
2579
2580 static struct clk_branch gcc_camss_csi0pix_clk = {
2581         .halt_reg = 0x4e058,
2582         .halt_check = BRANCH_HALT,
2583         .clkr = {
2584                 .enable_reg = 0x4e058,
2585                 .enable_mask = BIT(0),
2586                 .hw.init = &(struct clk_init_data) {
2587                         .name = "gcc_camss_csi0pix_clk",
2588                         .parent_hws = (const struct clk_hw*[]){
2589                                 &csi0_clk_src.clkr.hw,
2590                         },
2591                         .num_parents = 1,
2592                         .ops = &clk_branch2_ops,
2593                         .flags = CLK_SET_RATE_PARENT,
2594                 }
2595         }
2596 };
2597
2598 static struct clk_branch gcc_camss_csi1pix_clk = {
2599         .halt_reg = 0x4f058,
2600         .halt_check = BRANCH_HALT,
2601         .clkr = {
2602                 .enable_reg = 0x4f058,
2603                 .enable_mask = BIT(0),
2604                 .hw.init = &(struct clk_init_data) {
2605                         .name = "gcc_camss_csi1pix_clk",
2606                         .parent_hws = (const struct clk_hw*[]){
2607                                 &csi1_clk_src.clkr.hw,
2608                         },
2609                         .num_parents = 1,
2610                         .ops = &clk_branch2_ops,
2611                         .flags = CLK_SET_RATE_PARENT,
2612                 }
2613         }
2614 };
2615
2616 static struct clk_branch gcc_camss_csi2pix_clk = {
2617         .halt_reg = 0x3c058,
2618         .halt_check = BRANCH_HALT,
2619         .clkr = {
2620                 .enable_reg = 0x3c058,
2621                 .enable_mask = BIT(0),
2622                 .hw.init = &(struct clk_init_data) {
2623                         .name = "gcc_camss_csi2pix_clk",
2624                         .parent_hws = (const struct clk_hw*[]){
2625                                 &csi2_clk_src.clkr.hw,
2626                         },
2627                         .num_parents = 1,
2628                         .ops = &clk_branch2_ops,
2629                         .flags = CLK_SET_RATE_PARENT,
2630                 }
2631         }
2632 };
2633
2634 static struct clk_branch gcc_camss_csi0rdi_clk = {
2635         .halt_reg = 0x4e050,
2636         .halt_check = BRANCH_HALT,
2637         .clkr = {
2638                 .enable_reg = 0x4e050,
2639                 .enable_mask = BIT(0),
2640                 .hw.init = &(struct clk_init_data) {
2641                         .name = "gcc_camss_csi0rdi_clk",
2642                         .parent_hws = (const struct clk_hw*[]){
2643                                 &csi0_clk_src.clkr.hw,
2644                         },
2645                         .num_parents = 1,
2646                         .ops = &clk_branch2_ops,
2647                         .flags = CLK_SET_RATE_PARENT,
2648                 }
2649         }
2650 };
2651
2652 static struct clk_branch gcc_camss_csi1rdi_clk = {
2653         .halt_reg = 0x4f050,
2654         .halt_check = BRANCH_HALT,
2655         .clkr = {
2656                 .enable_reg = 0x4f050,
2657                 .enable_mask = BIT(0),
2658                 .hw.init = &(struct clk_init_data) {
2659                         .name = "gcc_camss_csi1rdi_clk",
2660                         .parent_hws = (const struct clk_hw*[]){
2661                                 &csi1_clk_src.clkr.hw,
2662                         },
2663                         .num_parents = 1,
2664                         .ops = &clk_branch2_ops,
2665                         .flags = CLK_SET_RATE_PARENT,
2666                 }
2667         }
2668 };
2669
2670 static struct clk_branch gcc_camss_csi2rdi_clk = {
2671         .halt_reg = 0x3c050,
2672         .halt_check = BRANCH_HALT,
2673         .clkr = {
2674                 .enable_reg = 0x3c050,
2675                 .enable_mask = BIT(0),
2676                 .hw.init = &(struct clk_init_data) {
2677                         .name = "gcc_camss_csi2rdi_clk",
2678                         .parent_hws = (const struct clk_hw*[]){
2679                                 &csi2_clk_src.clkr.hw,
2680                         },
2681                         .num_parents = 1,
2682                         .ops = &clk_branch2_ops,
2683                         .flags = CLK_SET_RATE_PARENT,
2684                 }
2685         }
2686 };
2687
2688 static struct clk_branch gcc_camss_csi_vfe0_clk = {
2689         .halt_reg = 0x58050,
2690         .halt_check = BRANCH_HALT,
2691         .clkr = {
2692                 .enable_reg = 0x58050,
2693                 .enable_mask = BIT(0),
2694                 .hw.init = &(struct clk_init_data) {
2695                         .name = "gcc_camss_csi_vfe0_clk",
2696                         .parent_hws = (const struct clk_hw*[]){
2697                                 &vfe0_clk_src.clkr.hw,
2698                         },
2699                         .num_parents = 1,
2700                         .ops = &clk_branch2_ops,
2701                         .flags = CLK_SET_RATE_PARENT,
2702                 }
2703         }
2704 };
2705
2706 static struct clk_branch gcc_camss_csi_vfe1_clk = {
2707         .halt_reg = 0x58074,
2708         .halt_check = BRANCH_HALT,
2709         .clkr = {
2710                 .enable_reg = 0x58074,
2711                 .enable_mask = BIT(0),
2712                 .hw.init = &(struct clk_init_data) {
2713                         .name = "gcc_camss_csi_vfe1_clk",
2714                         .parent_hws = (const struct clk_hw*[]){
2715                                 &vfe1_clk_src.clkr.hw,
2716                         },
2717                         .num_parents = 1,
2718                         .ops = &clk_branch2_ops,
2719                         .flags = CLK_SET_RATE_PARENT,
2720                 }
2721         }
2722 };
2723
2724 static struct clk_branch gcc_camss_gp0_clk = {
2725         .halt_reg = 0x54018,
2726         .halt_check = BRANCH_HALT,
2727         .clkr = {
2728                 .enable_reg = 0x54018,
2729                 .enable_mask = BIT(0),
2730                 .hw.init = &(struct clk_init_data) {
2731                         .name = "gcc_camss_gp0_clk",
2732                         .parent_hws = (const struct clk_hw*[]){
2733                                 &camss_gp0_clk_src.clkr.hw,
2734                         },
2735                         .num_parents = 1,
2736                         .ops = &clk_branch2_ops,
2737                         .flags = CLK_SET_RATE_PARENT,
2738                 }
2739         }
2740 };
2741
2742 static struct clk_branch gcc_camss_gp1_clk = {
2743         .halt_reg = 0x55018,
2744         .halt_check = BRANCH_HALT,
2745         .clkr = {
2746                 .enable_reg = 0x55018,
2747                 .enable_mask = BIT(0),
2748                 .hw.init = &(struct clk_init_data) {
2749                         .name = "gcc_camss_gp1_clk",
2750                         .parent_hws = (const struct clk_hw*[]){
2751                                 &camss_gp1_clk_src.clkr.hw,
2752                         },
2753                         .num_parents = 1,
2754                         .ops = &clk_branch2_ops,
2755                         .flags = CLK_SET_RATE_PARENT,
2756                 }
2757         }
2758 };
2759
2760 static struct clk_branch gcc_camss_ispif_ahb_clk = {
2761         .halt_reg = 0x50004,
2762         .halt_check = BRANCH_HALT,
2763         .clkr = {
2764                 .enable_reg = 0x50004,
2765                 .enable_mask = BIT(0),
2766                 .hw.init = &(struct clk_init_data) {
2767                         .name = "gcc_camss_ispif_ahb_clk",
2768                         .parent_hws = (const struct clk_hw*[]){
2769                                 &camss_top_ahb_clk_src.clkr.hw,
2770                         },
2771                         .num_parents = 1,
2772                         .ops = &clk_branch2_ops,
2773                         .flags = CLK_SET_RATE_PARENT,
2774                 }
2775         }
2776 };
2777
2778 static struct clk_branch gcc_camss_jpeg0_clk = {
2779         .halt_reg = 0x57020,
2780         .halt_check = BRANCH_HALT,
2781         .clkr = {
2782                 .enable_reg = 0x57020,
2783                 .enable_mask = BIT(0),
2784                 .hw.init = &(struct clk_init_data) {
2785                         .name = "gcc_camss_jpeg0_clk",
2786                         .parent_hws = (const struct clk_hw*[]){
2787                                 &jpeg0_clk_src.clkr.hw,
2788                         },
2789                         .num_parents = 1,
2790                         .ops = &clk_branch2_ops,
2791                         .flags = CLK_SET_RATE_PARENT,
2792                 }
2793         }
2794 };
2795
2796 static struct clk_branch gcc_camss_jpeg_ahb_clk = {
2797         .halt_reg = 0x57024,
2798         .halt_check = BRANCH_HALT,
2799         .clkr = {
2800                 .enable_reg = 0x57024,
2801                 .enable_mask = BIT(0),
2802                 .hw.init = &(struct clk_init_data) {
2803                         .name = "gcc_camss_jpeg_ahb_clk",
2804                         .parent_hws = (const struct clk_hw*[]){
2805                                 &camss_top_ahb_clk_src.clkr.hw,
2806                         },
2807                         .num_parents = 1,
2808                         .ops = &clk_branch2_ops,
2809                         .flags = CLK_SET_RATE_PARENT,
2810                 }
2811         }
2812 };
2813
2814 static struct clk_branch gcc_camss_jpeg_axi_clk = {
2815         .halt_reg = 0x57028,
2816         .halt_check = BRANCH_HALT,
2817         .clkr = {
2818                 .enable_reg = 0x57028,
2819                 .enable_mask = BIT(0),
2820                 .hw.init = &(struct clk_init_data) {
2821                         .name = "gcc_camss_jpeg_axi_clk",
2822                         .ops = &clk_branch2_ops,
2823                 }
2824         }
2825 };
2826
2827 static struct clk_branch gcc_camss_mclk0_clk = {
2828         .halt_reg = 0x52018,
2829         .halt_check = BRANCH_HALT,
2830         .clkr = {
2831                 .enable_reg = 0x52018,
2832                 .enable_mask = BIT(0),
2833                 .hw.init = &(struct clk_init_data) {
2834                         .name = "gcc_camss_mclk0_clk",
2835                         .parent_hws = (const struct clk_hw*[]){
2836                                 &mclk0_clk_src.clkr.hw,
2837                         },
2838                         .num_parents = 1,
2839                         .ops = &clk_branch2_ops,
2840                         .flags = CLK_SET_RATE_PARENT,
2841                 }
2842         }
2843 };
2844
2845 static struct clk_branch gcc_camss_mclk1_clk = {
2846         .halt_reg = 0x53018,
2847         .halt_check = BRANCH_HALT,
2848         .clkr = {
2849                 .enable_reg = 0x53018,
2850                 .enable_mask = BIT(0),
2851                 .hw.init = &(struct clk_init_data) {
2852                         .name = "gcc_camss_mclk1_clk",
2853                         .parent_hws = (const struct clk_hw*[]){
2854                                 &mclk1_clk_src.clkr.hw,
2855                         },
2856                         .num_parents = 1,
2857                         .ops = &clk_branch2_ops,
2858                         .flags = CLK_SET_RATE_PARENT,
2859                 }
2860         }
2861 };
2862
2863 static struct clk_branch gcc_camss_mclk2_clk = {
2864         .halt_reg = 0x5c018,
2865         .halt_check = BRANCH_HALT,
2866         .clkr = {
2867                 .enable_reg = 0x5c018,
2868                 .enable_mask = BIT(0),
2869                 .hw.init = &(struct clk_init_data) {
2870                         .name = "gcc_camss_mclk2_clk",
2871                         .parent_hws = (const struct clk_hw*[]){
2872                                 &mclk2_clk_src.clkr.hw,
2873                         },
2874                         .num_parents = 1,
2875                         .ops = &clk_branch2_ops,
2876                         .flags = CLK_SET_RATE_PARENT,
2877                 }
2878         }
2879 };
2880
2881 static struct clk_branch gcc_camss_mclk3_clk = {
2882         .halt_reg = 0x5e018,
2883         .halt_check = BRANCH_HALT,
2884         .clkr = {
2885                 .enable_reg = 0x5e018,
2886                 .enable_mask = BIT(0),
2887                 .hw.init = &(struct clk_init_data) {
2888                         .name = "gcc_camss_mclk3_clk",
2889                         .parent_hws = (const struct clk_hw*[]){
2890                                 &mclk3_clk_src.clkr.hw,
2891                         },
2892                         .num_parents = 1,
2893                         .ops = &clk_branch2_ops,
2894                         .flags = CLK_SET_RATE_PARENT,
2895                 }
2896         }
2897 };
2898
2899 static struct clk_branch gcc_camss_micro_ahb_clk = {
2900         .halt_reg = 0x5600c,
2901         .halt_check = BRANCH_HALT,
2902         .clkr = {
2903                 .enable_reg = 0x5600c,
2904                 .enable_mask = BIT(0),
2905                 .hw.init = &(struct clk_init_data) {
2906                         .name = "gcc_camss_micro_ahb_clk",
2907                         .parent_hws = (const struct clk_hw*[]){
2908                                 &camss_top_ahb_clk_src.clkr.hw,
2909                         },
2910                         .num_parents = 1,
2911                         .ops = &clk_branch2_ops,
2912                         .flags = CLK_SET_RATE_PARENT,
2913                 }
2914         }
2915 };
2916
2917 static struct clk_branch gcc_camss_top_ahb_clk = {
2918         .halt_reg = 0x5a014,
2919         .halt_check = BRANCH_HALT,
2920         .clkr = {
2921                 .enable_reg = 0x5a014,
2922                 .enable_mask = BIT(0),
2923                 .hw.init = &(struct clk_init_data) {
2924                         .name = "gcc_camss_top_ahb_clk",
2925                         .parent_hws = (const struct clk_hw*[]){
2926                                 &camss_top_ahb_clk_src.clkr.hw,
2927                         },
2928                         .num_parents = 1,
2929                         .ops = &clk_branch2_ops,
2930                         .flags = CLK_SET_RATE_PARENT,
2931                 }
2932         }
2933 };
2934
2935 static struct clk_branch gcc_camss_vfe0_ahb_clk = {
2936         .halt_reg = 0x58044,
2937         .halt_check = BRANCH_HALT,
2938         .clkr = {
2939                 .enable_reg = 0x58044,
2940                 .enable_mask = BIT(0),
2941                 .hw.init = &(struct clk_init_data) {
2942                         .name = "gcc_camss_vfe0_ahb_clk",
2943                         .parent_hws = (const struct clk_hw*[]){
2944                                 &camss_top_ahb_clk_src.clkr.hw,
2945                         },
2946                         .num_parents = 1,
2947                         .ops = &clk_branch2_ops,
2948                         .flags = CLK_SET_RATE_PARENT,
2949                 }
2950         }
2951 };
2952
2953 static struct clk_branch gcc_camss_vfe0_axi_clk = {
2954         .halt_reg = 0x58048,
2955         .halt_check = BRANCH_HALT,
2956         .clkr = {
2957                 .enable_reg = 0x58048,
2958                 .enable_mask = BIT(0),
2959                 .hw.init = &(struct clk_init_data) {
2960                         .name = "gcc_camss_vfe0_axi_clk",
2961                         .ops = &clk_branch2_ops,
2962                 }
2963         }
2964 };
2965
2966 static struct clk_branch gcc_camss_vfe0_clk = {
2967         .halt_reg = 0x58038,
2968         .halt_check = BRANCH_HALT,
2969         .clkr = {
2970                 .enable_reg = 0x58038,
2971                 .enable_mask = BIT(0),
2972                 .hw.init = &(struct clk_init_data) {
2973                         .name = "gcc_camss_vfe0_clk",
2974                         .parent_hws = (const struct clk_hw*[]){
2975                                 &vfe0_clk_src.clkr.hw,
2976                         },
2977                         .num_parents = 1,
2978                         .ops = &clk_branch2_ops,
2979                         .flags = CLK_SET_RATE_PARENT,
2980                 }
2981         }
2982 };
2983
2984 static struct clk_branch gcc_camss_vfe1_ahb_clk = {
2985         .halt_reg = 0x58060,
2986         .halt_check = BRANCH_HALT,
2987         .clkr = {
2988                 .enable_reg = 0x58060,
2989                 .enable_mask = BIT(0),
2990                 .hw.init = &(struct clk_init_data) {
2991                         .name = "gcc_camss_vfe1_ahb_clk",
2992                         .parent_hws = (const struct clk_hw*[]){
2993                                 &camss_top_ahb_clk_src.clkr.hw,
2994                         },
2995                         .num_parents = 1,
2996                         .ops = &clk_branch2_ops,
2997                         .flags = CLK_SET_RATE_PARENT,
2998                 }
2999         }
3000 };
3001
3002 static struct clk_branch gcc_camss_vfe1_axi_clk = {
3003         .halt_reg = 0x58068,
3004         .halt_check = BRANCH_HALT,
3005         .clkr = {
3006                 .enable_reg = 0x58068,
3007                 .enable_mask = BIT(0),
3008                 .hw.init = &(struct clk_init_data) {
3009                         .name = "gcc_camss_vfe1_axi_clk",
3010                         .ops = &clk_branch2_ops,
3011                 }
3012         }
3013 };
3014
3015 static struct clk_branch gcc_camss_vfe1_clk = {
3016         .halt_reg = 0x5805c,
3017         .halt_check = BRANCH_HALT,
3018         .clkr = {
3019                 .enable_reg = 0x5805c,
3020                 .enable_mask = BIT(0),
3021                 .hw.init = &(struct clk_init_data) {
3022                         .name = "gcc_camss_vfe1_clk",
3023                         .parent_hws = (const struct clk_hw*[]){
3024                                 &vfe1_clk_src.clkr.hw,
3025                         },
3026                         .num_parents = 1,
3027                         .ops = &clk_branch2_ops,
3028                         .flags = CLK_SET_RATE_PARENT,
3029                 }
3030         }
3031 };
3032
3033 static struct clk_branch gcc_cpp_tbu_clk = {
3034         .halt_reg = 0x12040,
3035         .halt_check = BRANCH_HALT_VOTED,
3036         .clkr = {
3037                 .enable_reg = 0x4500c,
3038                 .enable_mask = BIT(14),
3039                 .hw.init = &(struct clk_init_data) {
3040                         .name = "gcc_cpp_tbu_clk",
3041                         .ops = &clk_branch2_ops,
3042                 }
3043         }
3044 };
3045
3046 static struct clk_branch gcc_crypto_ahb_clk = {
3047         .halt_reg = 0x16024,
3048         .halt_check = BRANCH_HALT_VOTED,
3049         .clkr = {
3050                 .enable_reg = 0x45004,
3051                 .enable_mask = BIT(0),
3052                 .hw.init = &(struct clk_init_data) {
3053                         .name = "gcc_crypto_ahb_clk",
3054                         .ops = &clk_branch2_ops,
3055                 }
3056         }
3057 };
3058
3059 static struct clk_branch gcc_crypto_axi_clk = {
3060         .halt_reg = 0x16020,
3061         .halt_check = BRANCH_HALT_VOTED,
3062         .clkr = {
3063                 .enable_reg = 0x45004,
3064                 .enable_mask = BIT(1),
3065                 .hw.init = &(struct clk_init_data) {
3066                         .name = "gcc_crypto_axi_clk",
3067                         .ops = &clk_branch2_ops,
3068                 }
3069         }
3070 };
3071
3072 static struct clk_branch gcc_crypto_clk = {
3073         .halt_reg = 0x1601c,
3074         .halt_check = BRANCH_HALT_VOTED,
3075         .clkr = {
3076                 .enable_reg = 0x45004,
3077                 .enable_mask = BIT(2),
3078                 .hw.init = &(struct clk_init_data) {
3079                         .name = "gcc_crypto_clk",
3080                         .parent_hws = (const struct clk_hw*[]){
3081                                 &crypto_clk_src.clkr.hw,
3082                         },
3083                         .num_parents = 1,
3084                         .ops = &clk_branch2_ops,
3085                         .flags = CLK_SET_RATE_PARENT,
3086                 }
3087         }
3088 };
3089
3090 static struct clk_branch gcc_dcc_clk = {
3091         .halt_reg = 0x77004,
3092         .halt_check = BRANCH_HALT,
3093         .clkr = {
3094                 .enable_reg = 0x77004,
3095                 .enable_mask = BIT(0),
3096                 .hw.init = &(struct clk_init_data) {
3097                         .name = "gcc_dcc_clk",
3098                         .ops = &clk_branch2_ops,
3099                 }
3100         }
3101 };
3102
3103 static struct clk_branch gcc_gp1_clk = {
3104         .halt_reg = 0x08000,
3105         .halt_check = BRANCH_HALT,
3106         .clkr = {
3107                 .enable_reg = 0x08000,
3108                 .enable_mask = BIT(0),
3109                 .hw.init = &(struct clk_init_data) {
3110                         .name = "gcc_gp1_clk",
3111                         .parent_hws = (const struct clk_hw*[]){
3112                                 &gp1_clk_src.clkr.hw,
3113                         },
3114                         .num_parents = 1,
3115                         .ops = &clk_branch2_ops,
3116                         .flags = CLK_SET_RATE_PARENT,
3117                 }
3118         }
3119 };
3120
3121 static struct clk_branch gcc_gp2_clk = {
3122         .halt_reg = 0x09000,
3123         .halt_check = BRANCH_HALT,
3124         .clkr = {
3125                 .enable_reg = 0x09000,
3126                 .enable_mask = BIT(0),
3127                 .hw.init = &(struct clk_init_data) {
3128                         .name = "gcc_gp2_clk",
3129                         .parent_hws = (const struct clk_hw*[]){
3130                                 &gp2_clk_src.clkr.hw,
3131                         },
3132                         .num_parents = 1,
3133                         .ops = &clk_branch2_ops,
3134                         .flags = CLK_SET_RATE_PARENT,
3135                 }
3136         }
3137 };
3138
3139 static struct clk_branch gcc_gp3_clk = {
3140         .halt_reg = 0x0a000,
3141         .halt_check = BRANCH_HALT,
3142         .clkr = {
3143                 .enable_reg = 0x0a000,
3144                 .enable_mask = BIT(0),
3145                 .hw.init = &(struct clk_init_data) {
3146                         .name = "gcc_gp3_clk",
3147                         .parent_hws = (const struct clk_hw*[]){
3148                                 &gp3_clk_src.clkr.hw,
3149                         },
3150                         .num_parents = 1,
3151                         .ops = &clk_branch2_ops,
3152                         .flags = CLK_SET_RATE_PARENT,
3153                 }
3154         }
3155 };
3156
3157 static struct clk_branch gcc_jpeg_tbu_clk = {
3158         .halt_reg = 0x12034,
3159         .halt_check = BRANCH_HALT_VOTED,
3160         .clkr = {
3161                 .enable_reg = 0x4500c,
3162                 .enable_mask = BIT(10),
3163                 .hw.init = &(struct clk_init_data) {
3164                         .name = "gcc_jpeg_tbu_clk",
3165                         .ops = &clk_branch2_ops,
3166                 }
3167         }
3168 };
3169
3170 static struct clk_branch gcc_mdp_tbu_clk = {
3171         .halt_reg = 0x1201c,
3172         .halt_check = BRANCH_HALT_VOTED,
3173         .clkr = {
3174                 .enable_reg = 0x4500c,
3175                 .enable_mask = BIT(4),
3176                 .hw.init = &(struct clk_init_data) {
3177                         .name = "gcc_mdp_tbu_clk",
3178                         .ops = &clk_branch2_ops,
3179                 }
3180         }
3181 };
3182
3183 static struct clk_branch gcc_mdss_ahb_clk = {
3184         .halt_reg = 0x4d07c,
3185         .halt_check = BRANCH_HALT,
3186         .clkr = {
3187                 .enable_reg = 0x4d07c,
3188                 .enable_mask = BIT(0),
3189                 .hw.init = &(struct clk_init_data) {
3190                         .name = "gcc_mdss_ahb_clk",
3191                         .ops = &clk_branch2_ops,
3192                 }
3193         }
3194 };
3195
3196 static struct clk_branch gcc_mdss_axi_clk = {
3197         .halt_reg = 0x4d080,
3198         .halt_check = BRANCH_HALT,
3199         .clkr = {
3200                 .enable_reg = 0x4d080,
3201                 .enable_mask = BIT(0),
3202                 .hw.init = &(struct clk_init_data) {
3203                         .name = "gcc_mdss_axi_clk",
3204                         .ops = &clk_branch2_ops,
3205                 }
3206         }
3207 };
3208
3209 static struct clk_branch gcc_mdss_byte0_clk = {
3210         .halt_reg = 0x4d094,
3211         .halt_check = BRANCH_HALT,
3212         .clkr = {
3213                 .enable_reg = 0x4d094,
3214                 .enable_mask = BIT(0),
3215                 .hw.init = &(struct clk_init_data) {
3216                         .name = "gcc_mdss_byte0_clk",
3217                         .parent_hws = (const struct clk_hw*[]){
3218                                 &byte0_clk_src.clkr.hw,
3219                         },
3220                         .num_parents = 1,
3221                         .ops = &clk_branch2_ops,
3222                         .flags = CLK_SET_RATE_PARENT,
3223                 }
3224         }
3225 };
3226
3227 static struct clk_branch gcc_mdss_byte1_clk = {
3228         .halt_reg = 0x4d0a0,
3229         .halt_check = BRANCH_HALT,
3230         .clkr = {
3231                 .enable_reg = 0x4d0a0,
3232                 .enable_mask = BIT(0),
3233                 .hw.init = &(struct clk_init_data) {
3234                         .name = "gcc_mdss_byte1_clk",
3235                         .parent_hws = (const struct clk_hw*[]){
3236                                 &byte1_clk_src.clkr.hw,
3237                         },
3238                         .num_parents = 1,
3239                         .ops = &clk_branch2_ops,
3240                         .flags = CLK_SET_RATE_PARENT,
3241                 }
3242         }
3243 };
3244
3245 static struct clk_branch gcc_mdss_esc0_clk = {
3246         .halt_reg = 0x4d098,
3247         .halt_check = BRANCH_HALT,
3248         .clkr = {
3249                 .enable_reg = 0x4d098,
3250                 .enable_mask = BIT(0),
3251                 .hw.init = &(struct clk_init_data) {
3252                         .name = "gcc_mdss_esc0_clk",
3253                         .parent_hws = (const struct clk_hw*[]){
3254                                 &esc0_clk_src.clkr.hw,
3255                         },
3256                         .num_parents = 1,
3257                         .ops = &clk_branch2_ops,
3258                         .flags = CLK_SET_RATE_PARENT,
3259                 }
3260         }
3261 };
3262
3263 static struct clk_branch gcc_mdss_esc1_clk = {
3264         .halt_reg = 0x4d09c,
3265         .halt_check = BRANCH_HALT,
3266         .clkr = {
3267                 .enable_reg = 0x4d09c,
3268                 .enable_mask = BIT(0),
3269                 .hw.init = &(struct clk_init_data) {
3270                         .name = "gcc_mdss_esc1_clk",
3271                         .parent_hws = (const struct clk_hw*[]){
3272                                 &esc1_clk_src.clkr.hw,
3273                         },
3274                         .num_parents = 1,
3275                         .ops = &clk_branch2_ops,
3276                         .flags = CLK_SET_RATE_PARENT,
3277                 }
3278         }
3279 };
3280
3281 static struct clk_branch gcc_mdss_mdp_clk = {
3282         .halt_reg = 0x4d088,
3283         .halt_check = BRANCH_HALT,
3284         .clkr = {
3285                 .enable_reg = 0x4d088,
3286                 .enable_mask = BIT(0),
3287                 .hw.init = &(struct clk_init_data) {
3288                         .name = "gcc_mdss_mdp_clk",
3289                         .parent_hws = (const struct clk_hw*[]){
3290                                 &mdp_clk_src.clkr.hw,
3291                         },
3292                         .num_parents = 1,
3293                         .ops = &clk_branch2_ops,
3294                         .flags = CLK_SET_RATE_PARENT,
3295                 }
3296         }
3297 };
3298
3299 static struct clk_branch gcc_mdss_pclk0_clk = {
3300         .halt_reg = 0x4d084,
3301         .halt_check = BRANCH_HALT,
3302         .clkr = {
3303                 .enable_reg = 0x4d084,
3304                 .enable_mask = BIT(0),
3305                 .hw.init = &(struct clk_init_data) {
3306                         .name = "gcc_mdss_pclk0_clk",
3307                         .parent_hws = (const struct clk_hw*[]){
3308                                 &pclk0_clk_src.clkr.hw,
3309                         },
3310                         .num_parents = 1,
3311                         .ops = &clk_branch2_ops,
3312                         .flags = CLK_SET_RATE_PARENT,
3313                 }
3314         }
3315 };
3316
3317 static struct clk_branch gcc_mdss_pclk1_clk = {
3318         .halt_reg = 0x4d0a4,
3319         .halt_check = BRANCH_HALT,
3320         .clkr = {
3321                 .enable_reg = 0x4d0a4,
3322                 .enable_mask = BIT(0),
3323                 .hw.init = &(struct clk_init_data) {
3324                         .name = "gcc_mdss_pclk1_clk",
3325                         .parent_hws = (const struct clk_hw*[]){
3326                                 &pclk1_clk_src.clkr.hw,
3327                         },
3328                         .num_parents = 1,
3329                         .ops = &clk_branch2_ops,
3330                         .flags = CLK_SET_RATE_PARENT,
3331                 }
3332         }
3333 };
3334
3335 static struct clk_branch gcc_mdss_vsync_clk = {
3336         .halt_reg = 0x4d090,
3337         .halt_check = BRANCH_HALT,
3338         .clkr = {
3339                 .enable_reg = 0x4d090,
3340                 .enable_mask = BIT(0),
3341                 .hw.init = &(struct clk_init_data) {
3342                         .name = "gcc_mdss_vsync_clk",
3343                         .parent_hws = (const struct clk_hw*[]){
3344                                 &vsync_clk_src.clkr.hw,
3345                         },
3346                         .num_parents = 1,
3347                         .ops = &clk_branch2_ops,
3348                         .flags = CLK_SET_RATE_PARENT,
3349                 }
3350         }
3351 };
3352
3353 static struct clk_branch gcc_mss_cfg_ahb_clk = {
3354         .halt_reg = 0x49000,
3355         .halt_check = BRANCH_HALT,
3356         .clkr = {
3357                 .enable_reg = 0x49000,
3358                 .enable_mask = BIT(0),
3359                 .hw.init = &(struct clk_init_data) {
3360                         .name = "gcc_mss_cfg_ahb_clk",
3361                         .ops = &clk_branch2_ops,
3362                 }
3363         }
3364 };
3365
3366 static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
3367         .halt_reg = 0x49004,
3368         .halt_check = BRANCH_HALT,
3369         .clkr = {
3370                 .enable_reg = 0x49004,
3371                 .enable_mask = BIT(0),
3372                 .hw.init = &(struct clk_init_data) {
3373                         .name = "gcc_mss_q6_bimc_axi_clk",
3374                         .ops = &clk_branch2_ops,
3375                 }
3376         }
3377 };
3378
3379 static struct clk_branch gcc_oxili_ahb_clk = {
3380         .halt_reg = 0x59028,
3381         .halt_check = BRANCH_HALT,
3382         .clkr = {
3383                 .enable_reg = 0x59028,
3384                 .enable_mask = BIT(0),
3385                 .hw.init = &(struct clk_init_data) {
3386                         .name = "gcc_oxili_ahb_clk",
3387                         .ops = &clk_branch2_ops,
3388                 }
3389         }
3390 };
3391
3392 static struct clk_branch gcc_oxili_aon_clk = {
3393         .halt_reg = 0x59044,
3394         .halt_check = BRANCH_HALT,
3395         .clkr = {
3396                 .enable_reg = 0x59044,
3397                 .enable_mask = BIT(0),
3398                 .hw.init = &(struct clk_init_data) {
3399                         .name = "gcc_oxili_aon_clk",
3400                         .parent_hws = (const struct clk_hw*[]){
3401                                 &gfx3d_clk_src.clkr.hw,
3402                         },
3403                         .num_parents = 1,
3404                         .ops = &clk_branch2_ops,
3405                 }
3406         }
3407 };
3408
3409 static struct clk_branch gcc_oxili_gfx3d_clk = {
3410         .halt_reg = 0x59020,
3411         .halt_check = BRANCH_HALT,
3412         .clkr = {
3413                 .enable_reg = 0x59020,
3414                 .enable_mask = BIT(0),
3415                 .hw.init = &(struct clk_init_data) {
3416                         .name = "gcc_oxili_gfx3d_clk",
3417                         .parent_hws = (const struct clk_hw*[]){
3418                                 &gfx3d_clk_src.clkr.hw,
3419                         },
3420                         .num_parents = 1,
3421                         .ops = &clk_branch2_ops,
3422                         .flags = CLK_SET_RATE_PARENT,
3423                 }
3424         }
3425 };
3426
3427 static struct clk_branch gcc_oxili_timer_clk = {
3428         .halt_reg = 0x59040,
3429         .halt_check = BRANCH_HALT,
3430         .clkr = {
3431                 .enable_reg = 0x59040,
3432                 .enable_mask = BIT(0),
3433                 .hw.init = &(struct clk_init_data) {
3434                         .name = "gcc_oxili_timer_clk",
3435                         .ops = &clk_branch2_ops,
3436                 }
3437         }
3438 };
3439
3440 static struct clk_branch gcc_pcnoc_usb3_axi_clk = {
3441         .halt_reg = 0x3f038,
3442         .halt_check = BRANCH_HALT,
3443         .clkr = {
3444                 .enable_reg = 0x3f038,
3445                 .enable_mask = BIT(0),
3446                 .hw.init = &(struct clk_init_data) {
3447                         .name = "gcc_pcnoc_usb3_axi_clk",
3448                         .parent_hws = (const struct clk_hw*[]){
3449                                 &usb30_master_clk_src.clkr.hw,
3450                         },
3451                         .num_parents = 1,
3452                         .ops = &clk_branch2_ops,
3453                         .flags = CLK_SET_RATE_PARENT,
3454                 }
3455         }
3456 };
3457
3458 static struct clk_branch gcc_pdm2_clk = {
3459         .halt_reg = 0x4400c,
3460         .halt_check = BRANCH_HALT,
3461         .clkr = {
3462                 .enable_reg = 0x4400c,
3463                 .enable_mask = BIT(0),
3464                 .hw.init = &(struct clk_init_data) {
3465                         .name = "gcc_pdm2_clk",
3466                         .parent_hws = (const struct clk_hw*[]){
3467                                 &pdm2_clk_src.clkr.hw,
3468                         },
3469                         .num_parents = 1,
3470                         .ops = &clk_branch2_ops,
3471                         .flags = CLK_SET_RATE_PARENT,
3472                 }
3473         }
3474 };
3475
3476 static struct clk_branch gcc_pdm_ahb_clk = {
3477         .halt_reg = 0x44004,
3478         .halt_check = BRANCH_HALT,
3479         .clkr = {
3480                 .enable_reg = 0x44004,
3481                 .enable_mask = BIT(0),
3482                 .hw.init = &(struct clk_init_data) {
3483                         .name = "gcc_pdm_ahb_clk",
3484                         .ops = &clk_branch2_ops,
3485                 }
3486         }
3487 };
3488
3489 static struct clk_branch gcc_prng_ahb_clk = {
3490         .halt_reg = 0x13004,
3491         .halt_check = BRANCH_HALT_VOTED,
3492         .clkr = {
3493                 .enable_reg = 0x45004,
3494                 .enable_mask = BIT(8),
3495                 .hw.init = &(struct clk_init_data) {
3496                         .name = "gcc_prng_ahb_clk",
3497                         .ops = &clk_branch2_ops,
3498                 }
3499         }
3500 };
3501
3502 static struct clk_branch gcc_qdss_dap_clk = {
3503         .halt_reg = 0x29084,
3504         .halt_check = BRANCH_HALT_VOTED,
3505         .clkr = {
3506                 .enable_reg = 0x45004,
3507                 .enable_mask = BIT(11),
3508                 .hw.init = &(struct clk_init_data) {
3509                         .name = "gcc_qdss_dap_clk",
3510                         .ops = &clk_branch2_ops,
3511                 }
3512         }
3513 };
3514
3515 static struct clk_branch gcc_qusb_ref_clk = {
3516         .halt_reg = 0,
3517         .halt_check = BRANCH_HALT_SKIP,
3518         .clkr = {
3519                 .enable_reg = 0x41030,
3520                 .enable_mask = BIT(0),
3521                 .hw.init = &(struct clk_init_data) {
3522                         .name = "gcc_qusb_ref_clk",
3523                         .ops = &clk_branch2_ops,
3524                 }
3525         }
3526 };
3527
3528 static struct clk_branch gcc_rbcpr_gfx_clk = {
3529         .halt_reg = 0x3a004,
3530         .halt_check = BRANCH_HALT,
3531         .clkr = {
3532                 .enable_reg = 0x3a004,
3533                 .enable_mask = BIT(0),
3534                 .hw.init = &(struct clk_init_data) {
3535                         .name = "gcc_rbcpr_gfx_clk",
3536                         .parent_hws = (const struct clk_hw*[]){
3537                                 &rbcpr_gfx_clk_src.clkr.hw,
3538                         },
3539                         .num_parents = 1,
3540                         .ops = &clk_branch2_ops,
3541                         .flags = CLK_SET_RATE_PARENT,
3542                 }
3543         }
3544 };
3545
3546 static struct clk_branch gcc_sdcc1_ice_core_clk = {
3547         .halt_reg = 0x5d014,
3548         .halt_check = BRANCH_HALT,
3549         .clkr = {
3550                 .enable_reg = 0x5d014,
3551                 .enable_mask = BIT(0),
3552                 .hw.init = &(struct clk_init_data) {
3553                         .name = "gcc_sdcc1_ice_core_clk",
3554                         .parent_hws = (const struct clk_hw*[]){
3555                                 &sdcc1_ice_core_clk_src.clkr.hw,
3556                         },
3557                         .num_parents = 1,
3558                         .ops = &clk_branch2_ops,
3559                         .flags = CLK_SET_RATE_PARENT,
3560                 }
3561         }
3562 };
3563
3564 static struct clk_branch gcc_sdcc1_ahb_clk = {
3565         .halt_reg = 0x4201c,
3566         .halt_check = BRANCH_HALT,
3567         .clkr = {
3568                 .enable_reg = 0x4201c,
3569                 .enable_mask = BIT(0),
3570                 .hw.init = &(struct clk_init_data) {
3571                         .name = "gcc_sdcc1_ahb_clk",
3572                         .ops = &clk_branch2_ops,
3573                 }
3574         }
3575 };
3576
3577 static struct clk_branch gcc_sdcc2_ahb_clk = {
3578         .halt_reg = 0x4301c,
3579         .halt_check = BRANCH_HALT,
3580         .clkr = {
3581                 .enable_reg = 0x4301c,
3582                 .enable_mask = BIT(0),
3583                 .hw.init = &(struct clk_init_data) {
3584                         .name = "gcc_sdcc2_ahb_clk",
3585                         .ops = &clk_branch2_ops,
3586                 }
3587         }
3588 };
3589
3590 static struct clk_branch gcc_sdcc1_apps_clk = {
3591         .halt_reg = 0x42018,
3592         .halt_check = BRANCH_HALT,
3593         .clkr = {
3594                 .enable_reg = 0x42018,
3595                 .enable_mask = BIT(0),
3596                 .hw.init = &(struct clk_init_data) {
3597                         .name = "gcc_sdcc1_apps_clk",
3598                         .parent_hws = (const struct clk_hw*[]){
3599                                 &sdcc1_apps_clk_src.clkr.hw,
3600                         },
3601                         .num_parents = 1,
3602                         .ops = &clk_branch2_ops,
3603                         .flags = CLK_SET_RATE_PARENT,
3604                 }
3605         }
3606 };
3607
3608 static struct clk_branch gcc_sdcc2_apps_clk = {
3609         .halt_reg = 0x43018,
3610         .halt_check = BRANCH_HALT,
3611         .clkr = {
3612                 .enable_reg = 0x43018,
3613                 .enable_mask = BIT(0),
3614                 .hw.init = &(struct clk_init_data) {
3615                         .name = "gcc_sdcc2_apps_clk",
3616                         .parent_hws = (const struct clk_hw*[]){
3617                                 &sdcc2_apps_clk_src.clkr.hw,
3618                         },
3619                         .num_parents = 1,
3620                         .ops = &clk_branch2_ops,
3621                         .flags = CLK_SET_RATE_PARENT,
3622                 }
3623         }
3624 };
3625
3626 static struct clk_branch gcc_smmu_cfg_clk = {
3627         .halt_reg = 0x12038,
3628         .halt_check = BRANCH_HALT_VOTED,
3629         .clkr = {
3630                 .enable_reg = 0x4500c,
3631                 .enable_mask = BIT(12),
3632                 .hw.init = &(struct clk_init_data) {
3633                         .name = "gcc_smmu_cfg_clk",
3634                         .ops = &clk_branch2_ops,
3635                 }
3636         }
3637 };
3638
3639 static struct clk_branch gcc_usb30_master_clk = {
3640         .halt_reg = 0x3f000,
3641         .halt_check = BRANCH_HALT,
3642         .clkr = {
3643                 .enable_reg = 0x3f000,
3644                 .enable_mask = BIT(0),
3645                 .hw.init = &(struct clk_init_data) {
3646                         .name = "gcc_usb30_master_clk",
3647                         .parent_hws = (const struct clk_hw*[]){
3648                                 &usb30_master_clk_src.clkr.hw,
3649                         },
3650                         .num_parents = 1,
3651                         .ops = &clk_branch2_ops,
3652                         .flags = CLK_SET_RATE_PARENT,
3653                 }
3654         }
3655 };
3656
3657 static struct clk_branch gcc_usb30_mock_utmi_clk = {
3658         .halt_reg = 0x3f008,
3659         .halt_check = BRANCH_HALT,
3660         .clkr = {
3661                 .enable_reg = 0x3f008,
3662                 .enable_mask = BIT(0),
3663                 .hw.init = &(struct clk_init_data) {
3664                         .name = "gcc_usb30_mock_utmi_clk",
3665                         .parent_hws = (const struct clk_hw*[]){
3666                                 &usb30_mock_utmi_clk_src.clkr.hw,
3667                         },
3668                         .num_parents = 1,
3669                         .ops = &clk_branch2_ops,
3670                         .flags = CLK_SET_RATE_PARENT,
3671                 }
3672         }
3673 };
3674
3675 static struct clk_branch gcc_usb30_sleep_clk = {
3676         .halt_reg = 0x3f004,
3677         .halt_check = BRANCH_HALT,
3678         .clkr = {
3679                 .enable_reg = 0x3f004,
3680                 .enable_mask = BIT(0),
3681                 .hw.init = &(struct clk_init_data) {
3682                         .name = "gcc_usb30_sleep_clk",
3683                         .ops = &clk_branch2_ops,
3684                 }
3685         }
3686 };
3687
3688 static struct clk_branch gcc_usb3_aux_clk = {
3689         .halt_reg = 0x3f044,
3690         .halt_check = BRANCH_HALT,
3691         .clkr = {
3692                 .enable_reg = 0x3f044,
3693                 .enable_mask = BIT(0),
3694                 .hw.init = &(struct clk_init_data) {
3695                         .name = "gcc_usb3_aux_clk",
3696                         .parent_hws = (const struct clk_hw*[]){
3697                                 &usb3_aux_clk_src.clkr.hw,
3698                         },
3699                         .num_parents = 1,
3700                         .ops = &clk_branch2_ops,
3701                         .flags = CLK_SET_RATE_PARENT,
3702                 }
3703         }
3704 };
3705
3706 static struct clk_branch gcc_usb3_pipe_clk = {
3707         .halt_reg = 0,
3708         .halt_check = BRANCH_HALT_DELAY,
3709         .clkr = {
3710                 .enable_reg = 0x3f040,
3711                 .enable_mask = BIT(0),
3712                 .hw.init = &(struct clk_init_data) {
3713                         .name = "gcc_usb3_pipe_clk",
3714                         .ops = &clk_branch2_ops,
3715                 }
3716         }
3717 };
3718
3719 static struct clk_branch gcc_usb_phy_cfg_ahb_clk = {
3720         .halt_reg = 0x3f080,
3721         .halt_check = BRANCH_VOTED,
3722         .clkr = {
3723                 .enable_reg = 0x3f080,
3724                 .enable_mask = BIT(0),
3725                 .hw.init = &(struct clk_init_data) {
3726                         .name = "gcc_usb_phy_cfg_ahb_clk",
3727                         .ops = &clk_branch2_ops,
3728                 }
3729         }
3730 };
3731
3732 static struct clk_branch gcc_usb_ss_ref_clk = {
3733         .halt_reg = 0,
3734         .halt_check = BRANCH_HALT_SKIP,
3735         .clkr = {
3736                 .enable_reg = 0x3f07c,
3737                 .enable_mask = BIT(0),
3738                 .hw.init = &(struct clk_init_data) {
3739                         .name = "gcc_usb_ss_ref_clk",
3740                         .ops = &clk_branch2_ops,
3741                 }
3742         }
3743 };
3744
3745 static struct clk_branch gcc_venus0_ahb_clk = {
3746         .halt_reg = 0x4c020,
3747         .halt_check = BRANCH_HALT,
3748         .clkr = {
3749                 .enable_reg = 0x4c020,
3750                 .enable_mask = BIT(0),
3751                 .hw.init = &(struct clk_init_data) {
3752                         .name = "gcc_venus0_ahb_clk",
3753                         .ops = &clk_branch2_ops,
3754                 }
3755         }
3756 };
3757
3758 static struct clk_branch gcc_venus0_axi_clk = {
3759         .halt_reg = 0x4c024,
3760         .halt_check = BRANCH_HALT,
3761         .clkr = {
3762                 .enable_reg = 0x4c024,
3763                 .enable_mask = BIT(0),
3764                 .hw.init = &(struct clk_init_data) {
3765                         .name = "gcc_venus0_axi_clk",
3766                         .ops = &clk_branch2_ops,
3767                 }
3768         }
3769 };
3770
3771 static struct clk_branch gcc_venus0_core0_vcodec0_clk = {
3772         .halt_reg = 0x4c02c,
3773         .halt_check = BRANCH_HALT,
3774         .clkr = {
3775                 .enable_reg = 0x4c02c,
3776                 .enable_mask = BIT(0),
3777                 .hw.init = &(struct clk_init_data) {
3778                         .name = "gcc_venus0_core0_vcodec0_clk",
3779                         .parent_hws = (const struct clk_hw*[]){
3780                                 &vcodec0_clk_src.clkr.hw,
3781                         },
3782                         .num_parents = 1,
3783                         .ops = &clk_branch2_ops,
3784                         .flags = CLK_SET_RATE_PARENT,
3785                 }
3786         }
3787 };
3788
3789 static struct clk_branch gcc_venus0_vcodec0_clk = {
3790         .halt_reg = 0x4c01c,
3791         .halt_check = BRANCH_HALT,
3792         .clkr = {
3793                 .enable_reg = 0x4c01c,
3794                 .enable_mask = BIT(0),
3795                 .hw.init = &(struct clk_init_data) {
3796                         .name = "gcc_venus0_vcodec0_clk",
3797                         .parent_hws = (const struct clk_hw*[]){
3798                                 &vcodec0_clk_src.clkr.hw,
3799                         },
3800                         .num_parents = 1,
3801                         .ops = &clk_branch2_ops,
3802                         .flags = CLK_SET_RATE_PARENT,
3803                 }
3804         }
3805 };
3806
3807 static struct clk_branch gcc_venus_tbu_clk = {
3808         .halt_reg = 0x12014,
3809         .halt_check = BRANCH_HALT_VOTED,
3810         .clkr = {
3811                 .enable_reg = 0x4500c,
3812                 .enable_mask = BIT(5),
3813                 .hw.init = &(struct clk_init_data) {
3814                         .name = "gcc_venus_tbu_clk",
3815                         .ops = &clk_branch2_ops,
3816                 }
3817         }
3818 };
3819
3820 static struct clk_branch gcc_vfe1_tbu_clk = {
3821         .halt_reg = 0x12090,
3822         .halt_check = BRANCH_HALT_VOTED,
3823         .clkr = {
3824                 .enable_reg = 0x4500c,
3825                 .enable_mask = BIT(17),
3826                 .hw.init = &(struct clk_init_data) {
3827                         .name = "gcc_vfe1_tbu_clk",
3828                         .ops = &clk_branch2_ops,
3829                 }
3830         }
3831 };
3832
3833 static struct clk_branch gcc_vfe_tbu_clk = {
3834         .halt_reg = 0x1203c,
3835         .halt_check = BRANCH_HALT_VOTED,
3836         .clkr = {
3837                 .enable_reg = 0x4500c,
3838                 .enable_mask = BIT(9),
3839                 .hw.init = &(struct clk_init_data) {
3840                         .name = "gcc_vfe_tbu_clk",
3841                         .ops = &clk_branch2_ops,
3842                 }
3843         }
3844 };
3845
3846 static struct gdsc usb30_gdsc = {
3847         .gdscr = 0x3f078,
3848         .pd = {
3849                 .name = "usb30_gdsc",
3850         },
3851         .pwrsts = PWRSTS_OFF_ON,
3852         /*
3853          * FIXME: dwc3 usb gadget cannot resume after GDSC power off
3854          * dwc3 7000000.dwc3: failed to enable ep0out
3855          */
3856         .flags = ALWAYS_ON,
3857 };
3858
3859 static struct gdsc venus_gdsc = {
3860         .gdscr = 0x4c018,
3861         .cxcs = (unsigned int []){ 0x4c024, 0x4c01c },
3862         .cxc_count = 2,
3863         .pd = {
3864                 .name = "venus_gdsc",
3865         },
3866         .pwrsts = PWRSTS_OFF_ON,
3867 };
3868
3869 static struct gdsc venus_core0_gdsc = {
3870         .gdscr = 0x4c028,
3871         .cxcs = (unsigned int []){ 0x4c02c },
3872         .cxc_count = 1,
3873         .pd = {
3874                 .name = "venus_core0",
3875         },
3876         .flags = HW_CTRL,
3877         .pwrsts = PWRSTS_OFF_ON,
3878 };
3879
3880 static struct gdsc mdss_gdsc = {
3881         .gdscr = 0x4d078,
3882         .cxcs = (unsigned int []){ 0x4d080, 0x4d088 },
3883         .cxc_count = 2,
3884         .pd = {
3885                 .name = "mdss_gdsc",
3886         },
3887         .pwrsts = PWRSTS_OFF_ON,
3888 };
3889
3890 static struct gdsc jpeg_gdsc = {
3891         .gdscr = 0x5701c,
3892         .cxcs = (unsigned int []){ 0x57020, 0x57028 },
3893         .cxc_count = 2,
3894         .pd = {
3895                 .name = "jpeg_gdsc",
3896         },
3897         .pwrsts = PWRSTS_OFF_ON,
3898 };
3899
3900 static struct gdsc vfe0_gdsc = {
3901         .gdscr = 0x58034,
3902         .cxcs = (unsigned int []){ 0x58038, 0x58048, 0x5600c, 0x58050 },
3903         .cxc_count = 4,
3904         .pd = {
3905                 .name = "vfe0_gdsc",
3906         },
3907         .pwrsts = PWRSTS_OFF_ON,
3908 };
3909
3910 static struct gdsc vfe1_gdsc = {
3911         .gdscr = 0x5806c,
3912         .cxcs = (unsigned int []){ 0x5805c, 0x58068, 0x5600c, 0x58074 },
3913         .cxc_count = 4,
3914         .pd = {
3915                 .name = "vfe1_gdsc",
3916         },
3917         .pwrsts = PWRSTS_OFF_ON,
3918 };
3919
3920 static struct gdsc oxili_gx_gdsc = {
3921         .gdscr = 0x5901c,
3922         .clamp_io_ctrl = 0x5b00c,
3923         .cxcs = (unsigned int []){ 0x59000, 0x59024 },
3924         .cxc_count = 2,
3925         .pd = {
3926                 .name = "oxili_gx_gdsc",
3927         },
3928         .pwrsts = PWRSTS_OFF_ON,
3929         .flags = CLAMP_IO,
3930 };
3931
3932 static struct gdsc oxili_cx_gdsc = {
3933         .gdscr = 0x5904c,
3934         .cxcs = (unsigned int []){ 0x59020 },
3935         .cxc_count = 1,
3936         .pd = {
3937                 .name = "oxili_cx_gdsc",
3938         },
3939         .pwrsts = PWRSTS_OFF_ON,
3940 };
3941
3942 static struct gdsc cpp_gdsc = {
3943         .gdscr = 0x58078,
3944         .cxcs = (unsigned int []){ 0x5803c, 0x58064 },
3945         .cxc_count = 2,
3946         .pd = {
3947                 .name = "cpp_gdsc",
3948         },
3949         .flags = ALWAYS_ON,
3950         .pwrsts = PWRSTS_OFF_ON,
3951 };
3952
3953 static struct clk_hw *gcc_msm8953_hws[] = {
3954         &gpll0_early_div.hw,
3955         &gpll6_early_div.hw,
3956 };
3957
3958 static struct clk_regmap *gcc_msm8953_clocks[] = {
3959         [GPLL0] = &gpll0.clkr,
3960         [GPLL0_EARLY] = &gpll0_early.clkr,
3961         [GPLL2] = &gpll2.clkr,
3962         [GPLL2_EARLY] = &gpll2_early.clkr,
3963         [GPLL3] = &gpll3.clkr,
3964         [GPLL3_EARLY] = &gpll3_early.clkr,
3965         [GPLL4] = &gpll4.clkr,
3966         [GPLL4_EARLY] = &gpll4_early.clkr,
3967         [GPLL6] = &gpll6.clkr,
3968         [GPLL6_EARLY] = &gpll6_early.clkr,
3969         [GCC_APSS_AHB_CLK] = &gcc_apss_ahb_clk.clkr,
3970         [GCC_APSS_AXI_CLK] = &gcc_apss_axi_clk.clkr,
3971         [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
3972         [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
3973         [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3974         [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
3975         [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
3976         [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
3977         [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3978         [GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr,
3979         [GCC_APSS_TCU_ASYNC_CLK] = &gcc_apss_tcu_async_clk.clkr,
3980         [GCC_CPP_TBU_CLK] = &gcc_cpp_tbu_clk.clkr,
3981         [GCC_JPEG_TBU_CLK] = &gcc_jpeg_tbu_clk.clkr,
3982         [GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr,
3983         [GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,
3984         [GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr,
3985         [GCC_VFE1_TBU_CLK] = &gcc_vfe1_tbu_clk.clkr,
3986         [GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr,
3987         [CAMSS_TOP_AHB_CLK_SRC] = &camss_top_ahb_clk_src.clkr,
3988         [CSI0_CLK_SRC] = &csi0_clk_src.clkr,
3989         [APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
3990         [CSI1_CLK_SRC] = &csi1_clk_src.clkr,
3991         [CSI2_CLK_SRC] = &csi2_clk_src.clkr,
3992         [VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
3993         [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
3994         [CPP_CLK_SRC] = &cpp_clk_src.clkr,
3995         [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
3996         [USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
3997         [VFE1_CLK_SRC] = &vfe1_clk_src.clkr,
3998         [APC0_DROOP_DETECTOR_CLK_SRC] = &apc0_droop_detector_clk_src.clkr,
3999         [APC1_DROOP_DETECTOR_CLK_SRC] = &apc1_droop_detector_clk_src.clkr,
4000         [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
4001         [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
4002         [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
4003         [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
4004         [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
4005         [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
4006         [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
4007         [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
4008         [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
4009         [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
4010         [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
4011         [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
4012         [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
4013         [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
4014         [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
4015         [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
4016         [BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
4017         [BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
4018         [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
4019         [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
4020         [CCI_CLK_SRC] = &cci_clk_src.clkr,
4021         [CSI0P_CLK_SRC] = &csi0p_clk_src.clkr,
4022         [CSI1P_CLK_SRC] = &csi1p_clk_src.clkr,
4023         [CSI2P_CLK_SRC] = &csi2p_clk_src.clkr,
4024         [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
4025         [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
4026         [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
4027         [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
4028         [MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,
4029         [MCLK3_CLK_SRC] = &mclk3_clk_src.clkr,
4030         [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
4031         [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
4032         [CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr,
4033         [CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
4034         [GP1_CLK_SRC] = &gp1_clk_src.clkr,
4035         [GP2_CLK_SRC] = &gp2_clk_src.clkr,
4036         [GP3_CLK_SRC] = &gp3_clk_src.clkr,
4037         [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
4038         [RBCPR_GFX_CLK_SRC] = &rbcpr_gfx_clk_src.clkr,
4039         [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
4040         [SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
4041         [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
4042         [USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
4043         [USB3_AUX_CLK_SRC] = &usb3_aux_clk_src.clkr,
4044         [GCC_APC0_DROOP_DETECTOR_GPLL0_CLK] = &gcc_apc0_droop_detector_gpll0_clk.clkr,
4045         [GCC_APC1_DROOP_DETECTOR_GPLL0_CLK] = &gcc_apc1_droop_detector_gpll0_clk.clkr,
4046         [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
4047         [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
4048         [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
4049         [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
4050         [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
4051         [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
4052         [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
4053         [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
4054         [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
4055         [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
4056         [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
4057         [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
4058         [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
4059         [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
4060         [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
4061         [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
4062         [GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
4063         [GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
4064         [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
4065         [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
4066         [GCC_CAMSS_CCI_AHB_CLK] = &gcc_camss_cci_ahb_clk.clkr,
4067         [GCC_CAMSS_CCI_CLK] = &gcc_camss_cci_clk.clkr,
4068         [GCC_CAMSS_CPP_AHB_CLK] = &gcc_camss_cpp_ahb_clk.clkr,
4069         [GCC_CAMSS_CPP_AXI_CLK] = &gcc_camss_cpp_axi_clk.clkr,
4070         [GCC_CAMSS_CPP_CLK] = &gcc_camss_cpp_clk.clkr,
4071         [GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr,
4072         [GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr,
4073         [GCC_CAMSS_CSI0_CSIPHY_3P_CLK] = &gcc_camss_csi0_csiphy_3p_clk.clkr,
4074         [GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr,
4075         [GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr,
4076         [GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr,
4077         [GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr,
4078         [GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr,
4079         [GCC_CAMSS_CSI1_CSIPHY_3P_CLK] = &gcc_camss_csi1_csiphy_3p_clk.clkr,
4080         [GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr,
4081         [GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr,
4082         [GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr,
4083         [GCC_CAMSS_CSI2_AHB_CLK] = &gcc_camss_csi2_ahb_clk.clkr,
4084         [GCC_CAMSS_CSI2_CLK] = &gcc_camss_csi2_clk.clkr,
4085         [GCC_CAMSS_CSI2_CSIPHY_3P_CLK] = &gcc_camss_csi2_csiphy_3p_clk.clkr,
4086         [GCC_CAMSS_CSI2PHY_CLK] = &gcc_camss_csi2phy_clk.clkr,
4087         [GCC_CAMSS_CSI2PIX_CLK] = &gcc_camss_csi2pix_clk.clkr,
4088         [GCC_CAMSS_CSI2RDI_CLK] = &gcc_camss_csi2rdi_clk.clkr,
4089         [GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr,
4090         [GCC_CAMSS_CSI_VFE1_CLK] = &gcc_camss_csi_vfe1_clk.clkr,
4091         [GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr,
4092         [GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr,
4093         [GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr,
4094         [GCC_CAMSS_JPEG0_CLK] = &gcc_camss_jpeg0_clk.clkr,
4095         [GCC_CAMSS_JPEG_AHB_CLK] = &gcc_camss_jpeg_ahb_clk.clkr,
4096         [GCC_CAMSS_JPEG_AXI_CLK] = &gcc_camss_jpeg_axi_clk.clkr,
4097         [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
4098         [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
4099         [GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr,
4100         [GCC_CAMSS_MCLK3_CLK] = &gcc_camss_mclk3_clk.clkr,
4101         [GCC_CAMSS_MICRO_AHB_CLK] = &gcc_camss_micro_ahb_clk.clkr,
4102         [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
4103         [GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
4104         [GCC_CAMSS_CSI2PHYTIMER_CLK] = &gcc_camss_csi2phytimer_clk.clkr,
4105         [GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr,
4106         [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
4107         [GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr,
4108         [GCC_CAMSS_VFE0_AHB_CLK] = &gcc_camss_vfe0_ahb_clk.clkr,
4109         [GCC_CAMSS_VFE0_AXI_CLK] = &gcc_camss_vfe0_axi_clk.clkr,
4110         [GCC_CAMSS_VFE1_AHB_CLK] = &gcc_camss_vfe1_ahb_clk.clkr,
4111         [GCC_CAMSS_VFE1_AXI_CLK] = &gcc_camss_vfe1_axi_clk.clkr,
4112         [GCC_CAMSS_VFE1_CLK] = &gcc_camss_vfe1_clk.clkr,
4113         [GCC_DCC_CLK] = &gcc_dcc_clk.clkr,
4114         [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
4115         [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
4116         [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
4117         [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
4118         [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
4119         [GCC_PCNOC_USB3_AXI_CLK] = &gcc_pcnoc_usb3_axi_clk.clkr,
4120         [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
4121         [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
4122         [GCC_RBCPR_GFX_CLK] = &gcc_rbcpr_gfx_clk.clkr,
4123         [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
4124         [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
4125         [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
4126         [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
4127         [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
4128         [GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
4129         [GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
4130         [GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,
4131         [GCC_USB3_AUX_CLK] = &gcc_usb3_aux_clk.clkr,
4132         [GCC_USB_PHY_CFG_AHB_CLK] = &gcc_usb_phy_cfg_ahb_clk.clkr,
4133         [GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr,
4134         [GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr,
4135         [GCC_VENUS0_CORE0_VCODEC0_CLK] = &gcc_venus0_core0_vcodec0_clk.clkr,
4136         [GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr,
4137         [GCC_QUSB_REF_CLK] = &gcc_qusb_ref_clk.clkr,
4138         [GCC_USB_SS_REF_CLK] = &gcc_usb_ss_ref_clk.clkr,
4139         [GCC_USB3_PIPE_CLK] = &gcc_usb3_pipe_clk.clkr,
4140         [MDP_CLK_SRC] = &mdp_clk_src.clkr,
4141         [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
4142         [BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
4143         [ESC0_CLK_SRC] = &esc0_clk_src.clkr,
4144         [PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,
4145         [BYTE1_CLK_SRC] = &byte1_clk_src.clkr,
4146         [ESC1_CLK_SRC] = &esc1_clk_src.clkr,
4147         [VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
4148         [GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr,
4149         [GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr,
4150         [GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr,
4151         [GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr,
4152         [GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr,
4153         [GCC_MDSS_PCLK1_CLK] = &gcc_mdss_pclk1_clk.clkr,
4154         [GCC_MDSS_BYTE1_CLK] = &gcc_mdss_byte1_clk.clkr,
4155         [GCC_MDSS_ESC1_CLK] = &gcc_mdss_esc1_clk.clkr,
4156         [GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr,
4157         [GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr,
4158         [GCC_OXILI_TIMER_CLK] = &gcc_oxili_timer_clk.clkr,
4159         [GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr,
4160         [GCC_OXILI_AON_CLK] = &gcc_oxili_aon_clk.clkr,
4161         [GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr,
4162         [GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
4163         [GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr,
4164         [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
4165 };
4166
4167 static const struct qcom_reset_map gcc_msm8953_resets[] = {
4168         [GCC_CAMSS_MICRO_BCR]   = { 0x56008 },
4169         [GCC_MSS_BCR]           = { 0x71000 },
4170         [GCC_QUSB2_PHY_BCR]     = { 0x4103c },
4171         [GCC_USB3PHY_PHY_BCR]   = { 0x3f03c },
4172         [GCC_USB3_PHY_BCR]      = { 0x3f034 },
4173         [GCC_USB_30_BCR]        = { 0x3f070 },
4174 };
4175
4176 static const struct regmap_config gcc_msm8953_regmap_config = {
4177         .reg_bits       = 32,
4178         .reg_stride     = 4,
4179         .val_bits       = 32,
4180         .max_register   = 0x80000,
4181         .fast_io        = true,
4182 };
4183
4184 static struct gdsc *gcc_msm8953_gdscs[] = {
4185         [CPP_GDSC] = &cpp_gdsc,
4186         [JPEG_GDSC] = &jpeg_gdsc,
4187         [MDSS_GDSC] = &mdss_gdsc,
4188         [OXILI_CX_GDSC] = &oxili_cx_gdsc,
4189         [OXILI_GX_GDSC] = &oxili_gx_gdsc,
4190         [USB30_GDSC] = &usb30_gdsc,
4191         [VENUS_CORE0_GDSC] = &venus_core0_gdsc,
4192         [VENUS_GDSC] = &venus_gdsc,
4193         [VFE0_GDSC] = &vfe0_gdsc,
4194         [VFE1_GDSC] = &vfe1_gdsc,
4195 };
4196
4197 static const struct qcom_cc_desc gcc_msm8953_desc = {
4198         .config = &gcc_msm8953_regmap_config,
4199         .clks = gcc_msm8953_clocks,
4200         .num_clks = ARRAY_SIZE(gcc_msm8953_clocks),
4201         .resets = gcc_msm8953_resets,
4202         .num_resets = ARRAY_SIZE(gcc_msm8953_resets),
4203         .gdscs = gcc_msm8953_gdscs,
4204         .num_gdscs = ARRAY_SIZE(gcc_msm8953_gdscs),
4205         .clk_hws = gcc_msm8953_hws,
4206         .num_clk_hws = ARRAY_SIZE(gcc_msm8953_hws),
4207 };
4208
4209 static int gcc_msm8953_probe(struct platform_device *pdev)
4210 {
4211         struct regmap *regmap;
4212
4213         regmap  = qcom_cc_map(pdev, &gcc_msm8953_desc);
4214         if (IS_ERR(regmap))
4215                 return PTR_ERR(regmap);
4216
4217         clk_alpha_pll_configure(&gpll3_early, regmap, &gpll3_early_config);
4218
4219         return qcom_cc_really_probe(pdev, &gcc_msm8953_desc, regmap);
4220 }
4221
4222 static const struct of_device_id gcc_msm8953_match_table[] = {
4223         { .compatible = "qcom,gcc-msm8953" },
4224         {},
4225 };
4226
4227 static struct platform_driver gcc_msm8953_driver = {
4228         .probe = gcc_msm8953_probe,
4229         .driver = {
4230                 .name = "gcc-msm8953",
4231                 .of_match_table = gcc_msm8953_match_table,
4232         },
4233 };
4234
4235 static int __init gcc_msm8953_init(void)
4236 {
4237         return platform_driver_register(&gcc_msm8953_driver);
4238 }
4239 core_initcall(gcc_msm8953_init);
4240
4241 static void __exit gcc_msm8953_exit(void)
4242 {
4243         platform_driver_unregister(&gcc_msm8953_driver);
4244 }
4245 module_exit(gcc_msm8953_exit);
4246
4247 MODULE_DESCRIPTION("Qualcomm GCC MSM8953 Driver");
4248 MODULE_LICENSE("GPL v2");