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