GNU Linux-libre 6.7.9-gnu
[releases.git] / drivers / clk / qcom / gcc-msm8909.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (C) 2022 Kernkonzept GmbH.
4  *
5  * Based on gcc-msm8916.c:
6  *   Copyright 2015 Linaro Limited
7  * adapted with data from clock-gcc-8909.c in Qualcomm's msm-3.18 release:
8  *   Copyright (c) 2014-2016, The Linux Foundation. All rights reserved.
9  */
10
11 #include <linux/bitops.h>
12 #include <linux/clk-provider.h>
13 #include <linux/err.h>
14 #include <linux/kernel.h>
15 #include <linux/module.h>
16 #include <linux/of.h>
17 #include <linux/platform_device.h>
18 #include <linux/regmap.h>
19 #include <linux/reset-controller.h>
20
21 #include <dt-bindings/clock/qcom,gcc-msm8909.h>
22
23 #include "clk-alpha-pll.h"
24 #include "clk-branch.h"
25 #include "clk-pll.h"
26 #include "clk-rcg.h"
27 #include "clk-regmap.h"
28 #include "common.h"
29 #include "gdsc.h"
30 #include "reset.h"
31
32 /* Need to match the order of clocks in DT binding */
33 enum {
34         DT_XO,
35         DT_SLEEP_CLK,
36         DT_DSI0PLL,
37         DT_DSI0PLL_BYTE,
38 };
39
40 enum {
41         P_XO,
42         P_SLEEP_CLK,
43         P_GPLL0,
44         P_GPLL1,
45         P_GPLL2,
46         P_BIMC,
47         P_DSI0PLL,
48         P_DSI0PLL_BYTE,
49 };
50
51 static const struct parent_map gcc_xo_map[] = {
52         { P_XO, 0 },
53 };
54
55 static const struct clk_parent_data gcc_xo_data[] = {
56         { .index = DT_XO },
57 };
58
59 static const struct clk_parent_data gcc_sleep_clk_data[] = {
60         { .index = DT_SLEEP_CLK },
61 };
62
63 static struct clk_alpha_pll gpll0_early = {
64         .offset = 0x21000,
65         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
66         .clkr = {
67                 .enable_reg = 0x45000,
68                 .enable_mask = BIT(0),
69                 .hw.init = &(struct clk_init_data) {
70                         .name = "gpll0_early",
71                         .parent_data = gcc_xo_data,
72                         .num_parents = ARRAY_SIZE(gcc_xo_data),
73                         /* Avoid rate changes for shared clock */
74                         .ops = &clk_alpha_pll_fixed_ops,
75                 },
76         },
77 };
78
79 static struct clk_alpha_pll_postdiv gpll0 = {
80         .offset = 0x21000,
81         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
82         .clkr.hw.init = &(struct clk_init_data) {
83                 .name = "gpll0",
84                 .parent_hws = (const struct clk_hw*[]) {
85                         &gpll0_early.clkr.hw,
86                 },
87                 .num_parents = 1,
88                 /* Avoid rate changes for shared clock */
89                 .ops = &clk_alpha_pll_postdiv_ro_ops,
90         },
91 };
92
93 static struct clk_pll gpll1 = {
94         .l_reg = 0x20004,
95         .m_reg = 0x20008,
96         .n_reg = 0x2000c,
97         .config_reg = 0x20010,
98         .mode_reg = 0x20000,
99         .status_reg = 0x2001c,
100         .status_bit = 17,
101         .clkr.hw.init = &(struct clk_init_data) {
102                 .name = "gpll1",
103                 .parent_data = gcc_xo_data,
104                 .num_parents = ARRAY_SIZE(gcc_xo_data),
105                 .ops = &clk_pll_ops,
106         },
107 };
108
109 static struct clk_regmap gpll1_vote = {
110         .enable_reg = 0x45000,
111         .enable_mask = BIT(1),
112         .hw.init = &(struct clk_init_data) {
113                 .name = "gpll1_vote",
114                 .parent_hws = (const struct clk_hw*[]) {
115                         &gpll1.clkr.hw,
116                 },
117                 .num_parents = 1,
118                 .ops = &clk_pll_vote_ops,
119         },
120 };
121
122 static struct clk_alpha_pll gpll2_early = {
123         .offset = 0x25000,
124         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
125         .clkr = {
126                 .enable_reg = 0x45000,
127                 .enable_mask = BIT(3),
128                 .hw.init = &(struct clk_init_data) {
129                         .name = "gpll2_early",
130                         .parent_data = gcc_xo_data,
131                         .num_parents = ARRAY_SIZE(gcc_xo_data),
132                         /* Avoid rate changes for shared clock */
133                         .ops = &clk_alpha_pll_fixed_ops,
134                 },
135         },
136 };
137
138 static struct clk_alpha_pll_postdiv gpll2 = {
139         .offset = 0x25000,
140         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
141         .clkr.hw.init = &(struct clk_init_data) {
142                 .name = "gpll2",
143                 .parent_hws = (const struct clk_hw*[]) {
144                         &gpll2_early.clkr.hw,
145                 },
146                 .num_parents = 1,
147                 /* Avoid rate changes for shared clock */
148                 .ops = &clk_alpha_pll_postdiv_ro_ops,
149         },
150 };
151
152 static struct clk_alpha_pll bimc_pll_early = {
153         .offset = 0x23000,
154         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
155         .clkr = {
156                 .enable_reg = 0x45000,
157                 .enable_mask = BIT(2),
158                 .hw.init = &(struct clk_init_data) {
159                         .name = "bimc_pll_early",
160                         .parent_data = gcc_xo_data,
161                         .num_parents = ARRAY_SIZE(gcc_xo_data),
162                         /* Avoid rate changes for shared clock */
163                         .ops = &clk_alpha_pll_fixed_ops,
164                 },
165         },
166 };
167
168 static struct clk_alpha_pll_postdiv bimc_pll = {
169         .offset = 0x23000,
170         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
171         .clkr.hw.init = &(struct clk_init_data) {
172                 .name = "bimc_pll",
173                 .parent_hws = (const struct clk_hw*[]) {
174                         &bimc_pll_early.clkr.hw,
175                 },
176                 .num_parents = 1,
177                 /* Avoid rate changes for shared clock */
178                 .ops = &clk_alpha_pll_postdiv_ro_ops,
179         },
180 };
181
182 static const struct parent_map gcc_xo_gpll0_map[] = {
183         { P_XO, 0 },
184         { P_GPLL0, 1 },
185 };
186
187 static const struct clk_parent_data gcc_xo_gpll0_data[] = {
188         { .index = DT_XO },
189         { .hw = &gpll0.clkr.hw },
190 };
191
192 static const struct parent_map gcc_xo_gpll0_bimc_map[] = {
193         { P_XO, 0 },
194         { P_GPLL0, 1 },
195         { P_BIMC, 2 },
196 };
197
198 static const struct clk_parent_data gcc_xo_gpll0_bimc_data[] = {
199         { .index = DT_XO },
200         { .hw = &gpll0.clkr.hw },
201         { .hw = &bimc_pll.clkr.hw },
202 };
203
204 static const struct freq_tbl ftbl_apss_ahb_clk_src[] = {
205         F(19200000, P_XO, 1, 0, 0),
206         F(50000000, P_GPLL0, 16, 0, 0),
207         F(100000000, P_GPLL0, 8, 0, 0),
208         { }
209 };
210
211 static struct clk_rcg2 apss_ahb_clk_src = {
212         .cmd_rcgr = 0x46000,
213         .hid_width = 5,
214         .freq_tbl = ftbl_apss_ahb_clk_src,
215         .parent_map = gcc_xo_gpll0_map,
216         .clkr.hw.init = &(struct clk_init_data) {
217                 .name = "apss_ahb_clk_src",
218                 .parent_data = gcc_xo_gpll0_data,
219                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
220                 .ops = &clk_rcg2_ops,
221         }
222 };
223
224 static struct clk_rcg2 bimc_ddr_clk_src = {
225         .cmd_rcgr = 0x32004,
226         .hid_width = 5,
227         .parent_map = gcc_xo_gpll0_bimc_map,
228         .clkr.hw.init = &(struct clk_init_data) {
229                 .name = "bimc_ddr_clk_src",
230                 .parent_data = gcc_xo_gpll0_bimc_data,
231                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc_data),
232                 .ops = &clk_rcg2_ops,
233                 .flags = CLK_GET_RATE_NOCACHE,
234         },
235 };
236
237 static struct clk_rcg2 bimc_gpu_clk_src = {
238         .cmd_rcgr = 0x31028,
239         .hid_width = 5,
240         .parent_map = gcc_xo_gpll0_bimc_map,
241         .clkr.hw.init = &(struct clk_init_data) {
242                 .name = "bimc_gpu_clk_src",
243                 .parent_data = gcc_xo_gpll0_bimc_data,
244                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc_data),
245                 .ops = &clk_rcg2_ops,
246                 .flags = CLK_GET_RATE_NOCACHE,
247         },
248 };
249
250 static const struct freq_tbl ftbl_blsp_i2c_apps_clk_src[] = {
251         F(19200000, P_XO, 1, 0, 0),
252         F(50000000, P_GPLL0, 16, 0, 0),
253         { }
254 };
255
256 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
257         .cmd_rcgr = 0x0200c,
258         .hid_width = 5,
259         .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
260         .parent_map = gcc_xo_gpll0_map,
261         .clkr.hw.init = &(struct clk_init_data) {
262                 .name = "blsp1_qup1_i2c_apps_clk_src",
263                 .parent_data = gcc_xo_gpll0_data,
264                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
265                 .ops = &clk_rcg2_ops,
266         }
267 };
268
269 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
270         .cmd_rcgr = 0x03000,
271         .hid_width = 5,
272         .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
273         .parent_map = gcc_xo_gpll0_map,
274         .clkr.hw.init = &(struct clk_init_data) {
275                 .name = "blsp1_qup2_i2c_apps_clk_src",
276                 .parent_data = gcc_xo_gpll0_data,
277                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
278                 .ops = &clk_rcg2_ops,
279         }
280 };
281
282 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
283         .cmd_rcgr = 0x04000,
284         .hid_width = 5,
285         .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
286         .parent_map = gcc_xo_gpll0_map,
287         .clkr.hw.init = &(struct clk_init_data) {
288                 .name = "blsp1_qup3_i2c_apps_clk_src",
289                 .parent_data = gcc_xo_gpll0_data,
290                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
291                 .ops = &clk_rcg2_ops,
292         }
293 };
294
295 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
296         .cmd_rcgr = 0x05000,
297         .hid_width = 5,
298         .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
299         .parent_map = gcc_xo_gpll0_map,
300         .clkr.hw.init = &(struct clk_init_data) {
301                 .name = "blsp1_qup4_i2c_apps_clk_src",
302                 .parent_data = gcc_xo_gpll0_data,
303                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
304                 .ops = &clk_rcg2_ops,
305         }
306 };
307
308 static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
309         .cmd_rcgr = 0x06000,
310         .hid_width = 5,
311         .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
312         .parent_map = gcc_xo_gpll0_map,
313         .clkr.hw.init = &(struct clk_init_data) {
314                 .name = "blsp1_qup5_i2c_apps_clk_src",
315                 .parent_data = gcc_xo_gpll0_data,
316                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
317                 .ops = &clk_rcg2_ops,
318         }
319 };
320
321 static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
322         .cmd_rcgr = 0x07000,
323         .hid_width = 5,
324         .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
325         .parent_map = gcc_xo_gpll0_map,
326         .clkr.hw.init = &(struct clk_init_data) {
327                 .name = "blsp1_qup6_i2c_apps_clk_src",
328                 .parent_data = gcc_xo_gpll0_data,
329                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
330                 .ops = &clk_rcg2_ops,
331         }
332 };
333
334 static const struct freq_tbl ftbl_blsp_spi_apps_clk_src[] = {
335         F(960000, P_XO, 10, 1, 2),
336         F(4800000, P_XO, 4, 0, 0),
337         F(9600000, P_XO, 2, 0, 0),
338         F(16000000, P_GPLL0, 10, 1, 5),
339         F(19200000, P_XO, 1, 0, 0),
340         F(25000000, P_GPLL0, 16, 1, 2),
341         F(50000000, P_GPLL0, 16, 0, 0),
342         { }
343 };
344
345 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
346         .cmd_rcgr = 0x02024,
347         .hid_width = 5,
348         .mnd_width = 8,
349         .freq_tbl = ftbl_blsp_spi_apps_clk_src,
350         .parent_map = gcc_xo_gpll0_map,
351         .clkr.hw.init = &(struct clk_init_data) {
352                 .name = "blsp1_qup1_spi_apps_clk_src",
353                 .parent_data = gcc_xo_gpll0_data,
354                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
355                 .ops = &clk_rcg2_ops,
356         }
357 };
358
359 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
360         .cmd_rcgr = 0x03014,
361         .hid_width = 5,
362         .mnd_width = 8,
363         .freq_tbl = ftbl_blsp_spi_apps_clk_src,
364         .parent_map = gcc_xo_gpll0_map,
365         .clkr.hw.init = &(struct clk_init_data) {
366                 .name = "blsp1_qup2_spi_apps_clk_src",
367                 .parent_data = gcc_xo_gpll0_data,
368                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
369                 .ops = &clk_rcg2_ops,
370         }
371 };
372
373 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
374         .cmd_rcgr = 0x04024,
375         .hid_width = 5,
376         .mnd_width = 8,
377         .freq_tbl = ftbl_blsp_spi_apps_clk_src,
378         .parent_map = gcc_xo_gpll0_map,
379         .clkr.hw.init = &(struct clk_init_data) {
380                 .name = "blsp1_qup3_spi_apps_clk_src",
381                 .parent_data = gcc_xo_gpll0_data,
382                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
383                 .ops = &clk_rcg2_ops,
384         }
385 };
386
387 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
388         .cmd_rcgr = 0x05024,
389         .hid_width = 5,
390         .mnd_width = 8,
391         .freq_tbl = ftbl_blsp_spi_apps_clk_src,
392         .parent_map = gcc_xo_gpll0_map,
393         .clkr.hw.init = &(struct clk_init_data) {
394                 .name = "blsp1_qup4_spi_apps_clk_src",
395                 .parent_data = gcc_xo_gpll0_data,
396                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
397                 .ops = &clk_rcg2_ops,
398         }
399 };
400
401 static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
402         .cmd_rcgr = 0x06024,
403         .hid_width = 5,
404         .mnd_width = 8,
405         .freq_tbl = ftbl_blsp_spi_apps_clk_src,
406         .parent_map = gcc_xo_gpll0_map,
407         .clkr.hw.init = &(struct clk_init_data) {
408                 .name = "blsp1_qup5_spi_apps_clk_src",
409                 .parent_data = gcc_xo_gpll0_data,
410                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
411                 .ops = &clk_rcg2_ops,
412         }
413 };
414
415 static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
416         .cmd_rcgr = 0x07024,
417         .hid_width = 5,
418         .mnd_width = 8,
419         .freq_tbl = ftbl_blsp_spi_apps_clk_src,
420         .parent_map = gcc_xo_gpll0_map,
421         .clkr.hw.init = &(struct clk_init_data) {
422                 .name = "blsp1_qup6_spi_apps_clk_src",
423                 .parent_data = gcc_xo_gpll0_data,
424                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
425                 .ops = &clk_rcg2_ops,
426         }
427 };
428
429 static const struct freq_tbl ftbl_blsp_uart_apps_clk_src[] = {
430         F(3686400, P_GPLL0, 1, 72, 15625),
431         F(7372800, P_GPLL0, 1, 144, 15625),
432         F(14745600, P_GPLL0, 1, 288, 15625),
433         F(16000000, P_GPLL0, 10, 1, 5),
434         F(19200000, P_XO, 1, 0, 0),
435         F(24000000, P_GPLL0, 1, 3, 100),
436         F(25000000, P_GPLL0, 16, 1, 2),
437         F(32000000, P_GPLL0, 1, 1, 25),
438         F(40000000, P_GPLL0, 1, 1, 20),
439         F(46400000, P_GPLL0, 1, 29, 500),
440         F(48000000, P_GPLL0, 1, 3, 50),
441         F(51200000, P_GPLL0, 1, 8, 125),
442         F(56000000, P_GPLL0, 1, 7, 100),
443         F(58982400, P_GPLL0, 1, 1152, 15625),
444         F(60000000, P_GPLL0, 1, 3, 40),
445         { }
446 };
447
448 static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
449         .cmd_rcgr = 0x02044,
450         .hid_width = 5,
451         .mnd_width = 16,
452         .freq_tbl = ftbl_blsp_uart_apps_clk_src,
453         .parent_map = gcc_xo_gpll0_map,
454         .clkr.hw.init = &(struct clk_init_data) {
455                 .name = "blsp1_uart1_apps_clk_src",
456                 .parent_data = gcc_xo_gpll0_data,
457                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
458                 .ops = &clk_rcg2_ops,
459         }
460 };
461
462 static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
463         .cmd_rcgr = 0x03034,
464         .hid_width = 5,
465         .mnd_width = 16,
466         .freq_tbl = ftbl_blsp_uart_apps_clk_src,
467         .parent_map = gcc_xo_gpll0_map,
468         .clkr.hw.init = &(struct clk_init_data) {
469                 .name = "blsp1_uart2_apps_clk_src",
470                 .parent_data = gcc_xo_gpll0_data,
471                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
472                 .ops = &clk_rcg2_ops,
473         }
474 };
475
476 static const struct parent_map gcc_byte0_map[] = {
477         { P_XO, 0 },
478         { P_DSI0PLL_BYTE, 1 },
479 };
480
481 static const struct clk_parent_data gcc_byte_data[] = {
482         { .index = DT_XO },
483         { .index = DT_DSI0PLL_BYTE },
484 };
485
486 static struct clk_rcg2 byte0_clk_src = {
487         .cmd_rcgr = 0x4d044,
488         .hid_width = 5,
489         .parent_map = gcc_byte0_map,
490         .clkr.hw.init = &(struct clk_init_data) {
491                 .name = "byte0_clk_src",
492                 .parent_data = gcc_byte_data,
493                 .num_parents = ARRAY_SIZE(gcc_byte_data),
494                 .ops = &clk_byte2_ops,
495                 .flags = CLK_SET_RATE_PARENT,
496         }
497 };
498
499 static const struct freq_tbl ftbl_camss_gp_clk_src[] = {
500         F(100000000, P_GPLL0, 8, 0, 0),
501         F(200000000, P_GPLL0, 4, 0, 0),
502         { }
503 };
504
505 static struct clk_rcg2 camss_gp0_clk_src = {
506         .cmd_rcgr = 0x54000,
507         .hid_width = 5,
508         .mnd_width = 8,
509         .freq_tbl = ftbl_camss_gp_clk_src,
510         .parent_map = gcc_xo_gpll0_map,
511         .clkr.hw.init = &(struct clk_init_data) {
512                 .name = "camss_gp0_clk_src",
513                 .parent_data = gcc_xo_gpll0_data,
514                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
515                 .ops = &clk_rcg2_ops,
516         }
517 };
518
519 static struct clk_rcg2 camss_gp1_clk_src = {
520         .cmd_rcgr = 0x55000,
521         .hid_width = 5,
522         .mnd_width = 8,
523         .freq_tbl = ftbl_camss_gp_clk_src,
524         .parent_map = gcc_xo_gpll0_map,
525         .clkr.hw.init = &(struct clk_init_data) {
526                 .name = "camss_gp1_clk_src",
527                 .parent_data = gcc_xo_gpll0_data,
528                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
529                 .ops = &clk_rcg2_ops,
530         }
531 };
532
533 static const struct freq_tbl ftbl_camss_top_ahb_clk_src[] = {
534         F(40000000, P_GPLL0, 10, 1, 2),
535         F(80000000, P_GPLL0, 10, 0, 0),
536         { }
537 };
538
539 static struct clk_rcg2 camss_top_ahb_clk_src = {
540         .cmd_rcgr = 0x5a000,
541         .hid_width = 5,
542         .mnd_width = 8,
543         .freq_tbl = ftbl_camss_top_ahb_clk_src,
544         .parent_map = gcc_xo_gpll0_map,
545         .clkr.hw.init = &(struct clk_init_data) {
546                 .name = "camss_top_ahb_clk_src",
547                 .parent_data = gcc_xo_gpll0_data,
548                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
549                 .ops = &clk_rcg2_ops,
550         }
551 };
552
553 static const struct freq_tbl ftbl_crypto_clk_src[] = {
554         F(50000000, P_GPLL0, 16, 0, 0),
555         F(80000000, P_GPLL0, 10, 0, 0),
556         F(100000000, P_GPLL0, 8, 0, 0),
557         F(160000000, P_GPLL0, 5, 0, 0),
558         { }
559 };
560
561 static struct clk_rcg2 crypto_clk_src = {
562         .cmd_rcgr = 0x16004,
563         .hid_width = 5,
564         .freq_tbl = ftbl_crypto_clk_src,
565         .parent_map = gcc_xo_gpll0_map,
566         .clkr.hw.init = &(struct clk_init_data) {
567                 .name = "crypto_clk_src",
568                 .parent_data = gcc_xo_gpll0_data,
569                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
570                 .ops = &clk_rcg2_ops,
571         }
572 };
573
574 static const struct freq_tbl ftbl_csi_clk_src[] = {
575         F(100000000, P_GPLL0, 8, 0, 0),
576         F(200000000, P_GPLL0, 4, 0, 0),
577         { }
578 };
579
580 static struct clk_rcg2 csi0_clk_src = {
581         .cmd_rcgr = 0x4e020,
582         .hid_width = 5,
583         .freq_tbl = ftbl_csi_clk_src,
584         .parent_map = gcc_xo_gpll0_map,
585         .clkr.hw.init = &(struct clk_init_data) {
586                 .name = "csi0_clk_src",
587                 .parent_data = gcc_xo_gpll0_data,
588                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_map),
589                 .ops = &clk_rcg2_ops,
590         }
591 };
592
593 static struct clk_rcg2 csi1_clk_src = {
594         .cmd_rcgr = 0x4f020,
595         .hid_width = 5,
596         .freq_tbl = ftbl_csi_clk_src,
597         .parent_map = gcc_xo_gpll0_map,
598         .clkr.hw.init = &(struct clk_init_data) {
599                 .name = "csi1_clk_src",
600                 .parent_data = gcc_xo_gpll0_data,
601                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
602                 .ops = &clk_rcg2_ops,
603         }
604 };
605
606 static const struct freq_tbl ftbl_csi_phytimer_clk_src[] = {
607         F(100000000, P_GPLL0, 8, 0, 0),
608         F(200000000, P_GPLL0, 4, 0, 0),
609         { }
610 };
611
612 static struct clk_rcg2 csi0phytimer_clk_src = {
613         .cmd_rcgr = 0x4e000,
614         .hid_width = 5,
615         .freq_tbl = ftbl_csi_phytimer_clk_src,
616         .parent_map = gcc_xo_gpll0_map,
617         .clkr.hw.init = &(struct clk_init_data) {
618                 .name = "csi0phytimer_clk_src",
619                 .parent_data = gcc_xo_gpll0_data,
620                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
621                 .ops = &clk_rcg2_ops,
622         }
623 };
624
625 static const struct freq_tbl ftbl_esc0_clk_src[] = {
626         F(19200000, P_XO, 1, 0, 0),
627         { }
628 };
629
630 static struct clk_rcg2 esc0_clk_src = {
631         .cmd_rcgr = 0x4d05c,
632         .hid_width = 5,
633         .freq_tbl = ftbl_esc0_clk_src,
634         .parent_map = gcc_xo_map,
635         .clkr.hw.init = &(struct clk_init_data) {
636                 .name = "esc0_clk_src",
637                 .parent_data = gcc_xo_data,
638                 .num_parents = ARRAY_SIZE(gcc_xo_data),
639                 .ops = &clk_rcg2_ops,
640         }
641 };
642
643 static const struct parent_map gcc_gfx3d_map[] = {
644         { P_XO, 0 },
645         { P_GPLL0, 1 },
646         { P_GPLL1, 2 },
647 };
648
649 static const struct clk_parent_data gcc_gfx3d_data[] = {
650         { .index = DT_XO },
651         { .hw = &gpll0.clkr.hw },
652         { .hw = &gpll1_vote.hw },
653 };
654
655 static const struct freq_tbl ftbl_gfx3d_clk_src[] = {
656         F(19200000, P_XO, 1, 0, 0),
657         F(50000000, P_GPLL0, 16, 0, 0),
658         F(80000000, P_GPLL0, 10, 0, 0),
659         F(100000000, P_GPLL0, 8, 0, 0),
660         F(160000000, P_GPLL0, 5, 0, 0),
661         F(177780000, P_GPLL0, 4.5, 0, 0),
662         F(200000000, P_GPLL0, 4, 0, 0),
663         F(266670000, P_GPLL0, 3, 0, 0),
664         F(307200000, P_GPLL1, 4, 0, 0),
665         F(409600000, P_GPLL1, 3, 0, 0),
666         { }
667 };
668
669 static struct clk_rcg2 gfx3d_clk_src = {
670         .cmd_rcgr = 0x59000,
671         .hid_width = 5,
672         .freq_tbl = ftbl_gfx3d_clk_src,
673         .parent_map = gcc_gfx3d_map,
674         .clkr.hw.init = &(struct clk_init_data) {
675                 .name = "gfx3d_clk_src",
676                 .parent_data = gcc_gfx3d_data,
677                 .num_parents = ARRAY_SIZE(gcc_gfx3d_data),
678                 .ops = &clk_rcg2_ops,
679         }
680 };
681
682 static const struct freq_tbl ftbl_gp_clk_src[] = {
683         F(150000, P_XO, 1, 1, 128),
684         F(19200000, P_XO, 1, 0, 0),
685         { }
686 };
687
688 static struct clk_rcg2 gp1_clk_src = {
689         .cmd_rcgr = 0x08004,
690         .hid_width = 5,
691         .mnd_width = 8,
692         .freq_tbl = ftbl_gp_clk_src,
693         .parent_map = gcc_xo_map,
694         .clkr.hw.init = &(struct clk_init_data) {
695                 .name = "gp1_clk_src",
696                 .parent_data = gcc_xo_data,
697                 .num_parents = ARRAY_SIZE(gcc_xo_data),
698                 .ops = &clk_rcg2_ops,
699         }
700 };
701
702 static struct clk_rcg2 gp2_clk_src = {
703         .cmd_rcgr = 0x09004,
704         .hid_width = 5,
705         .mnd_width = 8,
706         .freq_tbl = ftbl_gp_clk_src,
707         .parent_map = gcc_xo_map,
708         .clkr.hw.init = &(struct clk_init_data) {
709                 .name = "gp2_clk_src",
710                 .parent_data = gcc_xo_data,
711                 .num_parents = ARRAY_SIZE(gcc_xo_data),
712                 .ops = &clk_rcg2_ops,
713         }
714 };
715
716 static struct clk_rcg2 gp3_clk_src = {
717         .cmd_rcgr = 0x0a004,
718         .hid_width = 5,
719         .mnd_width = 8,
720         .freq_tbl = ftbl_gp_clk_src,
721         .parent_map = gcc_xo_map,
722         .clkr.hw.init = &(struct clk_init_data) {
723                 .name = "gp3_clk_src",
724                 .parent_data = gcc_xo_data,
725                 .num_parents = ARRAY_SIZE(gcc_xo_data),
726                 .ops = &clk_rcg2_ops,
727         }
728 };
729
730 static const struct parent_map gcc_mclk_map[] = {
731         { P_XO, 0 },
732         { P_GPLL0, 1 },
733         { P_GPLL2, 3 },
734 };
735
736 static const struct clk_parent_data gcc_mclk_data[] = {
737         { .index = DT_XO },
738         { .hw = &gpll0.clkr.hw },
739         { .hw = &gpll2.clkr.hw },
740 };
741
742 static const struct freq_tbl ftbl_mclk_clk_src[] = {
743         F(24000000, P_GPLL2, 1, 1, 33),
744         F(66667000, P_GPLL0, 12, 0, 0),
745         { }
746 };
747
748 static struct clk_rcg2 mclk0_clk_src = {
749         .cmd_rcgr = 0x52000,
750         .hid_width = 5,
751         .mnd_width = 8,
752         .freq_tbl = ftbl_mclk_clk_src,
753         .parent_map = gcc_mclk_map,
754         .clkr.hw.init = &(struct clk_init_data) {
755                 .name = "mclk0_clk_src",
756                 .parent_data = gcc_mclk_data,
757                 .num_parents = ARRAY_SIZE(gcc_mclk_data),
758                 .ops = &clk_rcg2_ops,
759         }
760 };
761
762 static struct clk_rcg2 mclk1_clk_src = {
763         .cmd_rcgr = 0x53000,
764         .hid_width = 5,
765         .mnd_width = 8,
766         .freq_tbl = ftbl_mclk_clk_src,
767         .parent_map = gcc_mclk_map,
768         .clkr.hw.init = &(struct clk_init_data) {
769                 .name = "mclk1_clk_src",
770                 .parent_data = gcc_mclk_data,
771                 .num_parents = ARRAY_SIZE(gcc_mclk_data),
772                 .ops = &clk_rcg2_ops,
773         }
774 };
775
776 static const struct parent_map gcc_mdp_map[] = {
777         { P_XO, 0 },
778         { P_GPLL0, 1 },
779         { P_GPLL1, 3 },
780 };
781
782 static const struct clk_parent_data gcc_mdp_data[] = {
783         { .index = DT_XO },
784         { .hw = &gpll0.clkr.hw },
785         { .hw = &gpll1_vote.hw },
786 };
787
788 static const struct freq_tbl ftbl_mdp_clk_src[] = {
789         F(50000000, P_GPLL0, 16, 0, 0),
790         F(80000000, P_GPLL0, 10, 0, 0),
791         F(100000000, P_GPLL0, 8, 0, 0),
792         F(160000000, P_GPLL0, 5, 0, 0),
793         F(177780000, P_GPLL0, 4.5, 0, 0),
794         F(200000000, P_GPLL0, 4, 0, 0),
795         F(266670000, P_GPLL0, 3, 0, 0),
796         F(307200000, P_GPLL1, 4, 0, 0),
797         { }
798 };
799
800 static struct clk_rcg2 mdp_clk_src = {
801         .cmd_rcgr = 0x4d014,
802         .hid_width = 5,
803         .freq_tbl = ftbl_mdp_clk_src,
804         .parent_map = gcc_mdp_map,
805         .clkr.hw.init = &(struct clk_init_data) {
806                 .name = "mdp_clk_src",
807                 .parent_data = gcc_mdp_data,
808                 .num_parents = ARRAY_SIZE(gcc_mdp_data),
809                 .ops = &clk_rcg2_ops,
810         }
811 };
812
813 static const struct parent_map gcc_pclk0_map[] = {
814         { P_XO, 0 },
815         { P_DSI0PLL, 1 },
816 };
817
818 static const struct clk_parent_data gcc_pclk_data[] = {
819         { .index = DT_XO },
820         { .index = DT_DSI0PLL },
821 };
822
823 static struct clk_rcg2 pclk0_clk_src = {
824         .cmd_rcgr = 0x4d000,
825         .hid_width = 5,
826         .mnd_width = 8,
827         .parent_map = gcc_pclk0_map,
828         .clkr.hw.init = &(struct clk_init_data) {
829                 .name = "pclk0_clk_src",
830                 .parent_data = gcc_pclk_data,
831                 .num_parents = ARRAY_SIZE(gcc_pclk_data),
832                 .ops = &clk_pixel_ops,
833                 .flags = CLK_SET_RATE_PARENT,
834         }
835 };
836
837 static struct clk_rcg2 pcnoc_bfdcd_clk_src = {
838         .cmd_rcgr = 0x27000,
839         .hid_width = 5,
840         .parent_map = gcc_xo_gpll0_bimc_map,
841         .clkr.hw.init = &(struct clk_init_data) {
842                 .name = "pcnoc_bfdcd_clk_src",
843                 .parent_data = gcc_xo_gpll0_bimc_data,
844                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc_data),
845                 .ops = &clk_rcg2_ops,
846         },
847 };
848
849 static const struct freq_tbl ftbl_pdm2_clk_src[] = {
850         F(64000000, P_GPLL0, 12.5, 0, 0),
851         { }
852 };
853
854 static struct clk_rcg2 pdm2_clk_src = {
855         .cmd_rcgr = 0x44010,
856         .hid_width = 5,
857         .freq_tbl = ftbl_pdm2_clk_src,
858         .parent_map = gcc_xo_gpll0_map,
859         .clkr.hw.init = &(struct clk_init_data) {
860                 .name = "pdm2_clk_src",
861                 .parent_data = gcc_xo_gpll0_data,
862                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
863                 .ops = &clk_rcg2_ops,
864         }
865 };
866
867 static const struct freq_tbl ftbl_gcc_sdcc1_2_apps_clk[] = {
868         F(144000, P_XO, 16, 3, 25),
869         F(400000, P_XO, 12, 1, 4),
870         F(20000000, P_GPLL0, 10, 1, 4),
871         F(25000000, P_GPLL0, 16, 1, 2),
872         F(50000000, P_GPLL0, 16, 0, 0),
873         F(100000000, P_GPLL0, 8, 0, 0),
874         F(177770000, P_GPLL0, 4.5, 0, 0),
875         F(200000000, P_GPLL0, 4, 0, 0),
876         { }
877 };
878
879 static struct clk_rcg2 sdcc1_apps_clk_src = {
880         .cmd_rcgr = 0x42004,
881         .hid_width = 5,
882         .mnd_width = 8,
883         .freq_tbl = ftbl_gcc_sdcc1_2_apps_clk,
884         .parent_map = gcc_xo_gpll0_map,
885         .clkr.hw.init = &(struct clk_init_data) {
886                 .name = "sdcc1_apps_clk_src",
887                 .parent_data = gcc_xo_gpll0_data,
888                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
889                 .ops = &clk_rcg2_floor_ops,
890         }
891 };
892
893 static struct clk_rcg2 sdcc2_apps_clk_src = {
894         .cmd_rcgr = 0x43004,
895         .hid_width = 5,
896         .mnd_width = 8,
897         .freq_tbl = ftbl_gcc_sdcc1_2_apps_clk,
898         .parent_map = gcc_xo_gpll0_map,
899         .clkr.hw.init = &(struct clk_init_data) {
900                 .name = "sdcc2_apps_clk_src",
901                 .parent_data = gcc_xo_gpll0_data,
902                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
903                 .ops = &clk_rcg2_floor_ops,
904         }
905 };
906
907 static struct clk_rcg2 system_noc_bfdcd_clk_src = {
908         .cmd_rcgr = 0x26004,
909         .hid_width = 5,
910         .parent_map = gcc_xo_gpll0_bimc_map,
911         .clkr.hw.init = &(struct clk_init_data) {
912                 .name = "system_noc_bfdcd_clk_src",
913                 .parent_data = gcc_xo_gpll0_bimc_data,
914                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc_data),
915                 .ops = &clk_rcg2_ops,
916         },
917 };
918
919 static const struct freq_tbl ftbl_gcc_usb_hs_system_clk[] = {
920         F(57140000, P_GPLL0, 14, 0, 0),
921         F(80000000, P_GPLL0, 10, 0, 0),
922         F(100000000, P_GPLL0, 8, 0, 0),
923         { }
924 };
925
926 static struct clk_rcg2 usb_hs_system_clk_src = {
927         .cmd_rcgr = 0x41010,
928         .hid_width = 5,
929         .freq_tbl = ftbl_gcc_usb_hs_system_clk,
930         .parent_map = gcc_xo_gpll0_map,
931         .clkr.hw.init = &(struct clk_init_data) {
932                 .name = "usb_hs_system_clk_src",
933                 .parent_data = gcc_xo_gpll0_data,
934                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
935                 .ops = &clk_rcg2_ops,
936         }
937 };
938
939 static const struct parent_map gcc_vcodec0_map[] = {
940         { P_XO, 0 },
941         { P_GPLL0, 1 },
942         { P_GPLL1, 3 },
943 };
944
945 static const struct clk_parent_data gcc_vcodec0_data[] = {
946         { .index = DT_XO },
947         { .hw = &gpll0.clkr.hw },
948         { .hw = &gpll1_vote.hw },
949 };
950
951 static const struct freq_tbl ftbl_vcodec0_clk_src[] = {
952         F(133330000, P_GPLL0, 6, 0, 0),
953         F(266670000, P_GPLL0, 3, 0, 0),
954         F(307200000, P_GPLL1, 4, 0, 0),
955         { }
956 };
957
958 static struct clk_rcg2 vcodec0_clk_src = {
959         .cmd_rcgr = 0x4c000,
960         .hid_width = 5,
961         .mnd_width = 8,
962         .freq_tbl = ftbl_vcodec0_clk_src,
963         .parent_map = gcc_vcodec0_map,
964         .clkr.hw.init = &(struct clk_init_data) {
965                 .name = "vcodec0_clk_src",
966                 .parent_data = gcc_vcodec0_data,
967                 .num_parents = ARRAY_SIZE(gcc_vcodec0_data),
968                 .ops = &clk_rcg2_ops,
969         }
970 };
971
972 static const struct freq_tbl ftbl_gcc_camss_vfe0_clk[] = {
973         F(50000000, P_GPLL0, 16, 0, 0),
974         F(80000000, P_GPLL0, 10, 0, 0),
975         F(100000000, P_GPLL0, 8, 0, 0),
976         F(133330000, P_GPLL0, 6, 0, 0),
977         F(160000000, P_GPLL0, 5, 0, 0),
978         F(177780000, P_GPLL0, 4.5, 0, 0),
979         F(200000000, P_GPLL0, 4, 0, 0),
980         F(266670000, P_GPLL0, 3, 0, 0),
981         F(320000000, P_GPLL0, 2.5, 0, 0),
982         { }
983 };
984
985 static struct clk_rcg2 vfe0_clk_src = {
986         .cmd_rcgr = 0x58000,
987         .hid_width = 5,
988         .freq_tbl = ftbl_gcc_camss_vfe0_clk,
989         .parent_map = gcc_xo_gpll0_map,
990         .clkr.hw.init = &(struct clk_init_data) {
991                 .name = "vfe0_clk_src",
992                 .parent_data = gcc_xo_gpll0_data,
993                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
994                 .ops = &clk_rcg2_ops,
995         }
996 };
997
998 static const struct freq_tbl ftbl_vsync_clk_src[] = {
999         F(19200000, P_XO, 1, 0, 0),
1000         { }
1001 };
1002
1003 static struct clk_rcg2 vsync_clk_src = {
1004         .cmd_rcgr = 0x4d02c,
1005         .hid_width = 5,
1006         .freq_tbl = ftbl_vsync_clk_src,
1007         .parent_map = gcc_xo_map,
1008         .clkr.hw.init = &(struct clk_init_data) {
1009                 .name = "vsync_clk_src",
1010                 .parent_data = gcc_xo_data,
1011                 .num_parents = ARRAY_SIZE(gcc_xo_data),
1012                 .ops = &clk_rcg2_ops,
1013         }
1014 };
1015
1016 static struct clk_branch gcc_apss_tcu_clk = {
1017         .halt_reg = 0x12018,
1018         .halt_check = BRANCH_HALT_VOTED,
1019         .clkr = {
1020                 .enable_reg = 0x4500c,
1021                 .enable_mask = BIT(1),
1022                 .hw.init = &(struct clk_init_data) {
1023                         .name = "gcc_apss_tcu_clk",
1024                         .parent_hws = (const struct clk_hw*[]) {
1025                                 &bimc_ddr_clk_src.clkr.hw,
1026                         },
1027                         .num_parents = 1,
1028                         .ops = &clk_branch2_ops,
1029                 }
1030         }
1031 };
1032
1033 static struct clk_branch gcc_blsp1_ahb_clk = {
1034         .halt_reg = 0x01008,
1035         .halt_check = BRANCH_HALT_VOTED,
1036         .clkr = {
1037                 .enable_reg = 0x45004,
1038                 .enable_mask = BIT(10),
1039                 .hw.init = &(struct clk_init_data) {
1040                         .name = "gcc_blsp1_ahb_clk",
1041                         .parent_hws = (const struct clk_hw*[]) {
1042                                 &pcnoc_bfdcd_clk_src.clkr.hw,
1043                         },
1044                         .num_parents = 1,
1045                         .ops = &clk_branch2_ops,
1046                 }
1047         }
1048 };
1049
1050 static struct clk_branch gcc_blsp1_sleep_clk = {
1051         .halt_reg = 0x01004,
1052         .halt_check = BRANCH_HALT_VOTED,
1053         .clkr = {
1054                 .enable_reg = 0x45004,
1055                 .enable_mask = BIT(9),
1056                 .hw.init = &(struct clk_init_data) {
1057                         .name = "gcc_blsp1_sleep_clk",
1058                         .parent_data = gcc_sleep_clk_data,
1059                         .num_parents = ARRAY_SIZE(gcc_sleep_clk_data),
1060                         .ops = &clk_branch2_ops,
1061                 }
1062         }
1063 };
1064
1065 static struct clk_branch gcc_boot_rom_ahb_clk = {
1066         .halt_reg = 0x1300c,
1067         .halt_check = BRANCH_HALT_VOTED,
1068         .clkr = {
1069                 .enable_reg = 0x45004,
1070                 .enable_mask = BIT(7),
1071                 .hw.init = &(struct clk_init_data) {
1072                         .name = "gcc_boot_rom_ahb_clk",
1073                         .parent_hws = (const struct clk_hw*[]) {
1074                                 &pcnoc_bfdcd_clk_src.clkr.hw,
1075                         },
1076                         .num_parents = 1,
1077                         .ops = &clk_branch2_ops,
1078                 }
1079         }
1080 };
1081
1082 static struct clk_branch gcc_crypto_clk = {
1083         .halt_reg = 0x1601c,
1084         .halt_check = BRANCH_HALT_VOTED,
1085         .clkr = {
1086                 .enable_reg = 0x45004,
1087                 .enable_mask = BIT(2),
1088                 .hw.init = &(struct clk_init_data) {
1089                         .name = "gcc_crypto_clk",
1090                         .parent_hws = (const struct clk_hw*[]) {
1091                                 &crypto_clk_src.clkr.hw,
1092                         },
1093                         .num_parents = 1,
1094                         .ops = &clk_branch2_ops,
1095                         .flags = CLK_SET_RATE_PARENT,
1096                 }
1097         }
1098 };
1099
1100 static struct clk_branch gcc_crypto_ahb_clk = {
1101         .halt_reg = 0x16024,
1102         .halt_check = BRANCH_HALT_VOTED,
1103         .clkr = {
1104                 .enable_reg = 0x45004,
1105                 .enable_mask = BIT(0),
1106                 .hw.init = &(struct clk_init_data) {
1107                         .name = "gcc_crypto_ahb_clk",
1108                         .parent_hws = (const struct clk_hw*[]) {
1109                                 &pcnoc_bfdcd_clk_src.clkr.hw,
1110                         },
1111                         .num_parents = 1,
1112                         .ops = &clk_branch2_ops,
1113                 }
1114         }
1115 };
1116
1117 static struct clk_branch gcc_crypto_axi_clk = {
1118         .halt_reg = 0x16020,
1119         .halt_check = BRANCH_HALT_VOTED,
1120         .clkr = {
1121                 .enable_reg = 0x45004,
1122                 .enable_mask = BIT(1),
1123                 .hw.init = &(struct clk_init_data) {
1124                         .name = "gcc_crypto_axi_clk",
1125                         .parent_hws = (const struct clk_hw*[]) {
1126                                 &pcnoc_bfdcd_clk_src.clkr.hw,
1127                         },
1128                         .num_parents = 1,
1129                         .ops = &clk_branch2_ops,
1130                 }
1131         }
1132 };
1133
1134 static struct clk_branch gcc_gfx_tbu_clk = {
1135         .halt_reg = 0x12010,
1136         .halt_check = BRANCH_HALT_VOTED,
1137         .clkr = {
1138                 .enable_reg = 0x4500c,
1139                 .enable_mask = BIT(3),
1140                 .hw.init = &(struct clk_init_data) {
1141                         .name = "gcc_gfx_tbu_clk",
1142                         .parent_hws = (const struct clk_hw*[]) {
1143                                 &bimc_ddr_clk_src.clkr.hw,
1144                         },
1145                         .num_parents = 1,
1146                         .ops = &clk_branch2_ops,
1147                 }
1148         }
1149 };
1150
1151 static struct clk_branch gcc_gfx_tcu_clk = {
1152         .halt_reg = 0x12020,
1153         .halt_check = BRANCH_HALT_VOTED,
1154         .clkr = {
1155                 .enable_reg = 0x4500c,
1156                 .enable_mask = BIT(2),
1157                 .hw.init = &(struct clk_init_data) {
1158                         .name = "gcc_gfx_tcu_clk",
1159                         .parent_hws = (const struct clk_hw*[]) {
1160                                 &bimc_ddr_clk_src.clkr.hw,
1161                         },
1162                         .num_parents = 1,
1163                         .ops = &clk_branch2_ops,
1164                 }
1165         }
1166 };
1167
1168 static struct clk_branch gcc_gtcu_ahb_clk = {
1169         .halt_reg = 0x12044,
1170         .halt_check = BRANCH_HALT_VOTED,
1171         .clkr = {
1172                 .enable_reg = 0x4500c,
1173                 .enable_mask = BIT(13),
1174                 .hw.init = &(struct clk_init_data) {
1175                         .name = "gcc_gtcu_ahb_clk",
1176                         .parent_hws = (const struct clk_hw*[]) {
1177                                 &pcnoc_bfdcd_clk_src.clkr.hw,
1178                         },
1179                         .num_parents = 1,
1180                         .ops = &clk_branch2_ops,
1181                 }
1182         }
1183 };
1184
1185 static struct clk_branch gcc_mdp_tbu_clk = {
1186         .halt_reg = 0x1201c,
1187         .halt_check = BRANCH_HALT_VOTED,
1188         .clkr = {
1189                 .enable_reg = 0x4500c,
1190                 .enable_mask = BIT(4),
1191                 .hw.init = &(struct clk_init_data) {
1192                         .name = "gcc_mdp_tbu_clk",
1193                         .parent_hws = (const struct clk_hw*[]) {
1194                                 &system_noc_bfdcd_clk_src.clkr.hw,
1195                         },
1196                         .num_parents = 1,
1197                         .ops = &clk_branch2_ops,
1198                 }
1199         }
1200 };
1201
1202 static struct clk_branch gcc_prng_ahb_clk = {
1203         .halt_reg = 0x13004,
1204         .halt_check = BRANCH_HALT_VOTED,
1205         .clkr = {
1206                 .enable_reg = 0x45004,
1207                 .enable_mask = BIT(8),
1208                 .hw.init = &(struct clk_init_data) {
1209                         .name = "gcc_prng_ahb_clk",
1210                         .parent_hws = (const struct clk_hw*[]) {
1211                                 &pcnoc_bfdcd_clk_src.clkr.hw,
1212                         },
1213                         .num_parents = 1,
1214                         .ops = &clk_branch2_ops,
1215                 }
1216         }
1217 };
1218
1219 static struct clk_branch gcc_smmu_cfg_clk = {
1220         .halt_reg = 0x12038,
1221         .halt_check = BRANCH_HALT_VOTED,
1222         .clkr = {
1223                 .enable_reg = 0x4500c,
1224                 .enable_mask = BIT(12),
1225                 .hw.init = &(struct clk_init_data) {
1226                         .name = "gcc_smmu_cfg_clk",
1227                         .parent_hws = (const struct clk_hw*[]) {
1228                                 &pcnoc_bfdcd_clk_src.clkr.hw,
1229                         },
1230                         .num_parents = 1,
1231                         .ops = &clk_branch2_ops,
1232                 }
1233         }
1234 };
1235
1236 static struct clk_branch gcc_venus_tbu_clk = {
1237         .halt_reg = 0x12014,
1238         .halt_check = BRANCH_HALT_VOTED,
1239         .clkr = {
1240                 .enable_reg = 0x4500c,
1241                 .enable_mask = BIT(5),
1242                 .hw.init = &(struct clk_init_data) {
1243                         .name = "gcc_venus_tbu_clk",
1244                         .parent_hws = (const struct clk_hw*[]) {
1245                                 &system_noc_bfdcd_clk_src.clkr.hw,
1246                         },
1247                         .num_parents = 1,
1248                         .ops = &clk_branch2_ops,
1249                 }
1250         }
1251 };
1252
1253 static struct clk_branch gcc_vfe_tbu_clk = {
1254         .halt_reg = 0x1203c,
1255         .halt_check = BRANCH_HALT_VOTED,
1256         .clkr = {
1257                 .enable_reg = 0x4500c,
1258                 .enable_mask = BIT(9),
1259                 .hw.init = &(struct clk_init_data) {
1260                         .name = "gcc_vfe_tbu_clk",
1261                         .parent_hws = (const struct clk_hw*[]) {
1262                                 &system_noc_bfdcd_clk_src.clkr.hw,
1263                         },
1264                         .num_parents = 1,
1265                         .ops = &clk_branch2_ops,
1266                 }
1267         }
1268 };
1269
1270 static struct clk_branch gcc_bimc_gfx_clk = {
1271         .halt_reg = 0x31024,
1272         .halt_check = BRANCH_HALT,
1273         .clkr = {
1274                 .enable_reg = 0x31024,
1275                 .enable_mask = BIT(0),
1276                 .hw.init = &(struct clk_init_data) {
1277                         .name = "gcc_bimc_gfx_clk",
1278                         .parent_hws = (const struct clk_hw*[]) {
1279                                 &bimc_gpu_clk_src.clkr.hw,
1280                         },
1281                         .num_parents = 1,
1282                         .ops = &clk_branch2_ops,
1283                 }
1284         }
1285 };
1286
1287 static struct clk_branch gcc_bimc_gpu_clk = {
1288         .halt_reg = 0x31040,
1289         .halt_check = BRANCH_HALT,
1290         .clkr = {
1291                 .enable_reg = 0x31040,
1292                 .enable_mask = BIT(0),
1293                 .hw.init = &(struct clk_init_data) {
1294                         .name = "gcc_bimc_gpu_clk",
1295                         .parent_hws = (const struct clk_hw*[]) {
1296                                 &bimc_gpu_clk_src.clkr.hw,
1297                         },
1298                         .num_parents = 1,
1299                         .ops = &clk_branch2_ops,
1300                 }
1301         }
1302 };
1303
1304 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1305         .halt_reg = 0x02008,
1306         .halt_check = BRANCH_HALT,
1307         .clkr = {
1308                 .enable_reg = 0x02008,
1309                 .enable_mask = BIT(0),
1310                 .hw.init = &(struct clk_init_data) {
1311                         .name = "gcc_blsp1_qup1_i2c_apps_clk",
1312                         .parent_hws = (const struct clk_hw*[]) {
1313                                 &blsp1_qup1_i2c_apps_clk_src.clkr.hw,
1314                         },
1315                         .num_parents = 1,
1316                         .ops = &clk_branch2_ops,
1317                         .flags = CLK_SET_RATE_PARENT,
1318                 }
1319         }
1320 };
1321
1322 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1323         .halt_reg = 0x03010,
1324         .halt_check = BRANCH_HALT,
1325         .clkr = {
1326                 .enable_reg = 0x03010,
1327                 .enable_mask = BIT(0),
1328                 .hw.init = &(struct clk_init_data) {
1329                         .name = "gcc_blsp1_qup2_i2c_apps_clk",
1330                         .parent_hws = (const struct clk_hw*[]) {
1331                                 &blsp1_qup2_i2c_apps_clk_src.clkr.hw,
1332                         },
1333                         .num_parents = 1,
1334                         .ops = &clk_branch2_ops,
1335                         .flags = CLK_SET_RATE_PARENT,
1336                 }
1337         }
1338 };
1339
1340 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1341         .halt_reg = 0x04020,
1342         .halt_check = BRANCH_HALT,
1343         .clkr = {
1344                 .enable_reg = 0x04020,
1345                 .enable_mask = BIT(0),
1346                 .hw.init = &(struct clk_init_data) {
1347                         .name = "gcc_blsp1_qup3_i2c_apps_clk",
1348                         .parent_hws = (const struct clk_hw*[]) {
1349                                 &blsp1_qup3_i2c_apps_clk_src.clkr.hw,
1350                         },
1351                         .num_parents = 1,
1352                         .ops = &clk_branch2_ops,
1353                         .flags = CLK_SET_RATE_PARENT,
1354                 }
1355         }
1356 };
1357
1358 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1359         .halt_reg = 0x05020,
1360         .halt_check = BRANCH_HALT,
1361         .clkr = {
1362                 .enable_reg = 0x05020,
1363                 .enable_mask = BIT(0),
1364                 .hw.init = &(struct clk_init_data) {
1365                         .name = "gcc_blsp1_qup4_i2c_apps_clk",
1366                         .parent_hws = (const struct clk_hw*[]) {
1367                                 &blsp1_qup4_i2c_apps_clk_src.clkr.hw,
1368                         },
1369                         .num_parents = 1,
1370                         .ops = &clk_branch2_ops,
1371                         .flags = CLK_SET_RATE_PARENT,
1372                 }
1373         }
1374 };
1375
1376 static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
1377         .halt_reg = 0x06020,
1378         .halt_check = BRANCH_HALT,
1379         .clkr = {
1380                 .enable_reg = 0x06020,
1381                 .enable_mask = BIT(0),
1382                 .hw.init = &(struct clk_init_data) {
1383                         .name = "gcc_blsp1_qup5_i2c_apps_clk",
1384                         .parent_hws = (const struct clk_hw*[]) {
1385                                 &blsp1_qup5_i2c_apps_clk_src.clkr.hw,
1386                         },
1387                         .num_parents = 1,
1388                         .ops = &clk_branch2_ops,
1389                         .flags = CLK_SET_RATE_PARENT,
1390                 }
1391         }
1392 };
1393
1394 static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
1395         .halt_reg = 0x07020,
1396         .halt_check = BRANCH_HALT,
1397         .clkr = {
1398                 .enable_reg = 0x07020,
1399                 .enable_mask = BIT(0),
1400                 .hw.init = &(struct clk_init_data) {
1401                         .name = "gcc_blsp1_qup6_i2c_apps_clk",
1402                         .parent_hws = (const struct clk_hw*[]) {
1403                                 &blsp1_qup6_i2c_apps_clk_src.clkr.hw,
1404                         },
1405                         .num_parents = 1,
1406                         .ops = &clk_branch2_ops,
1407                         .flags = CLK_SET_RATE_PARENT,
1408                 }
1409         }
1410 };
1411
1412 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1413         .halt_reg = 0x02004,
1414         .halt_check = BRANCH_HALT,
1415         .clkr = {
1416                 .enable_reg = 0x02004,
1417                 .enable_mask = BIT(0),
1418                 .hw.init = &(struct clk_init_data) {
1419                         .name = "gcc_blsp1_qup1_spi_apps_clk",
1420                         .parent_hws = (const struct clk_hw*[]) {
1421                                 &blsp1_qup1_spi_apps_clk_src.clkr.hw,
1422                         },
1423                         .num_parents = 1,
1424                         .ops = &clk_branch2_ops,
1425                         .flags = CLK_SET_RATE_PARENT,
1426                 }
1427         }
1428 };
1429
1430 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1431         .halt_reg = 0x0300c,
1432         .halt_check = BRANCH_HALT,
1433         .clkr = {
1434                 .enable_reg = 0x0300c,
1435                 .enable_mask = BIT(0),
1436                 .hw.init = &(struct clk_init_data) {
1437                         .name = "gcc_blsp1_qup2_spi_apps_clk",
1438                         .parent_hws = (const struct clk_hw*[]) {
1439                                 &blsp1_qup2_spi_apps_clk_src.clkr.hw,
1440                         },
1441                         .num_parents = 1,
1442                         .ops = &clk_branch2_ops,
1443                         .flags = CLK_SET_RATE_PARENT,
1444                 }
1445         }
1446 };
1447
1448 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1449         .halt_reg = 0x0401c,
1450         .halt_check = BRANCH_HALT,
1451         .clkr = {
1452                 .enable_reg = 0x0401c,
1453                 .enable_mask = BIT(0),
1454                 .hw.init = &(struct clk_init_data) {
1455                         .name = "gcc_blsp1_qup3_spi_apps_clk",
1456                         .parent_hws = (const struct clk_hw*[]) {
1457                                 &blsp1_qup3_spi_apps_clk_src.clkr.hw,
1458                         },
1459                         .num_parents = 1,
1460                         .ops = &clk_branch2_ops,
1461                         .flags = CLK_SET_RATE_PARENT,
1462                 }
1463         }
1464 };
1465
1466 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1467         .halt_reg = 0x0501c,
1468         .halt_check = BRANCH_HALT,
1469         .clkr = {
1470                 .enable_reg = 0x0501c,
1471                 .enable_mask = BIT(0),
1472                 .hw.init = &(struct clk_init_data) {
1473                         .name = "gcc_blsp1_qup4_spi_apps_clk",
1474                         .parent_hws = (const struct clk_hw*[]) {
1475                                 &blsp1_qup4_spi_apps_clk_src.clkr.hw,
1476                         },
1477                         .num_parents = 1,
1478                         .ops = &clk_branch2_ops,
1479                         .flags = CLK_SET_RATE_PARENT,
1480                 }
1481         }
1482 };
1483
1484 static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
1485         .halt_reg = 0x0601c,
1486         .halt_check = BRANCH_HALT,
1487         .clkr = {
1488                 .enable_reg = 0x0601c,
1489                 .enable_mask = BIT(0),
1490                 .hw.init = &(struct clk_init_data) {
1491                         .name = "gcc_blsp1_qup5_spi_apps_clk",
1492                         .parent_hws = (const struct clk_hw*[]) {
1493                                 &blsp1_qup5_spi_apps_clk_src.clkr.hw,
1494                         },
1495                         .num_parents = 1,
1496                         .ops = &clk_branch2_ops,
1497                         .flags = CLK_SET_RATE_PARENT,
1498                 }
1499         }
1500 };
1501
1502 static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
1503         .halt_reg = 0x0701c,
1504         .halt_check = BRANCH_HALT,
1505         .clkr = {
1506                 .enable_reg = 0x0701c,
1507                 .enable_mask = BIT(0),
1508                 .hw.init = &(struct clk_init_data) {
1509                         .name = "gcc_blsp1_qup6_spi_apps_clk",
1510                         .parent_hws = (const struct clk_hw*[]) {
1511                                 &blsp1_qup6_spi_apps_clk_src.clkr.hw,
1512                         },
1513                         .num_parents = 1,
1514                         .ops = &clk_branch2_ops,
1515                         .flags = CLK_SET_RATE_PARENT,
1516                 }
1517         }
1518 };
1519
1520 static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1521         .halt_reg = 0x0203c,
1522         .halt_check = BRANCH_HALT,
1523         .clkr = {
1524                 .enable_reg = 0x0203c,
1525                 .enable_mask = BIT(0),
1526                 .hw.init = &(struct clk_init_data) {
1527                         .name = "gcc_blsp1_uart1_apps_clk",
1528                         .parent_hws = (const struct clk_hw*[]) {
1529                                 &blsp1_uart1_apps_clk_src.clkr.hw,
1530                         },
1531                         .num_parents = 1,
1532                         .ops = &clk_branch2_ops,
1533                         .flags = CLK_SET_RATE_PARENT,
1534                 }
1535         }
1536 };
1537
1538 static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1539         .halt_reg = 0x0302c,
1540         .halt_check = BRANCH_HALT,
1541         .clkr = {
1542                 .enable_reg = 0x0302c,
1543                 .enable_mask = BIT(0),
1544                 .hw.init = &(struct clk_init_data) {
1545                         .name = "gcc_blsp1_uart2_apps_clk",
1546                         .parent_hws = (const struct clk_hw*[]) {
1547                                 &blsp1_uart2_apps_clk_src.clkr.hw,
1548                         },
1549                         .num_parents = 1,
1550                         .ops = &clk_branch2_ops,
1551                         .flags = CLK_SET_RATE_PARENT,
1552                 }
1553         }
1554 };
1555
1556 static struct clk_branch gcc_camss_ahb_clk = {
1557         .halt_reg = 0x5a014,
1558         .halt_check = BRANCH_HALT,
1559         .clkr = {
1560                 .enable_reg = 0x5a014,
1561                 .enable_mask = BIT(0),
1562                 .hw.init = &(struct clk_init_data) {
1563                         .name = "gcc_camss_ahb_clk",
1564                         .parent_hws = (const struct clk_hw*[]) {
1565                                 &pcnoc_bfdcd_clk_src.clkr.hw,
1566                         },
1567                         .num_parents = 1,
1568                         .ops = &clk_branch2_ops,
1569                 }
1570         }
1571 };
1572
1573 static struct clk_branch gcc_camss_csi0_clk = {
1574         .halt_reg = 0x4e03c,
1575         .halt_check = BRANCH_HALT,
1576         .clkr = {
1577                 .enable_reg = 0x4e03c,
1578                 .enable_mask = BIT(0),
1579                 .hw.init = &(struct clk_init_data) {
1580                         .name = "gcc_camss_csi0_clk",
1581                         .parent_hws = (const struct clk_hw*[]) {
1582                                 &csi0_clk_src.clkr.hw,
1583                         },
1584                         .num_parents = 1,
1585                         .ops = &clk_branch2_ops,
1586                         .flags = CLK_SET_RATE_PARENT,
1587                 }
1588         }
1589 };
1590
1591 static struct clk_branch gcc_camss_csi0_ahb_clk = {
1592         .halt_reg = 0x4e040,
1593         .halt_check = BRANCH_HALT,
1594         .clkr = {
1595                 .enable_reg = 0x4e040,
1596                 .enable_mask = BIT(0),
1597                 .hw.init = &(struct clk_init_data) {
1598                         .name = "gcc_camss_csi0_ahb_clk",
1599                         .parent_hws = (const struct clk_hw*[]) {
1600                                 &camss_top_ahb_clk_src.clkr.hw,
1601                         },
1602                         .num_parents = 1,
1603                         .ops = &clk_branch2_ops,
1604                         .flags = CLK_SET_RATE_PARENT,
1605                 }
1606         }
1607 };
1608
1609 static struct clk_branch gcc_camss_csi0phy_clk = {
1610         .halt_reg = 0x4e048,
1611         .halt_check = BRANCH_HALT,
1612         .clkr = {
1613                 .enable_reg = 0x4e048,
1614                 .enable_mask = BIT(0),
1615                 .hw.init = &(struct clk_init_data) {
1616                         .name = "gcc_camss_csi0phy_clk",
1617                         .parent_hws = (const struct clk_hw*[]) {
1618                                 &csi0_clk_src.clkr.hw,
1619                         },
1620                         .num_parents = 1,
1621                         .ops = &clk_branch2_ops,
1622                         .flags = CLK_SET_RATE_PARENT,
1623                 }
1624         }
1625 };
1626
1627 static struct clk_branch gcc_camss_csi0phytimer_clk = {
1628         .halt_reg = 0x4e01c,
1629         .halt_check = BRANCH_HALT,
1630         .clkr = {
1631                 .enable_reg = 0x4e01c,
1632                 .enable_mask = BIT(0),
1633                 .hw.init = &(struct clk_init_data) {
1634                         .name = "gcc_camss_csi0phytimer_clk",
1635                         .parent_hws = (const struct clk_hw*[]) {
1636                                 &csi0phytimer_clk_src.clkr.hw,
1637                         },
1638                         .num_parents = 1,
1639                         .ops = &clk_branch2_ops,
1640                         .flags = CLK_SET_RATE_PARENT,
1641                 }
1642         }
1643 };
1644
1645 static struct clk_branch gcc_camss_csi0pix_clk = {
1646         .halt_reg = 0x4e058,
1647         .halt_check = BRANCH_HALT,
1648         .clkr = {
1649                 .enable_reg = 0x4e058,
1650                 .enable_mask = BIT(0),
1651                 .hw.init = &(struct clk_init_data) {
1652                         .name = "gcc_camss_csi0pix_clk",
1653                         .parent_hws = (const struct clk_hw*[]) {
1654                                 &csi0_clk_src.clkr.hw,
1655                         },
1656                         .num_parents = 1,
1657                         .ops = &clk_branch2_ops,
1658                         .flags = CLK_SET_RATE_PARENT,
1659                 }
1660         }
1661 };
1662
1663 static struct clk_branch gcc_camss_csi0rdi_clk = {
1664         .halt_reg = 0x4e050,
1665         .halt_check = BRANCH_HALT,
1666         .clkr = {
1667                 .enable_reg = 0x4e050,
1668                 .enable_mask = BIT(0),
1669                 .hw.init = &(struct clk_init_data) {
1670                         .name = "gcc_camss_csi0rdi_clk",
1671                         .parent_hws = (const struct clk_hw*[]) {
1672                                 &csi0_clk_src.clkr.hw,
1673                         },
1674                         .num_parents = 1,
1675                         .ops = &clk_branch2_ops,
1676                         .flags = CLK_SET_RATE_PARENT,
1677                 }
1678         }
1679 };
1680
1681 static struct clk_branch gcc_camss_csi1_clk = {
1682         .halt_reg = 0x4f03c,
1683         .halt_check = BRANCH_HALT,
1684         .clkr = {
1685                 .enable_reg = 0x4f03c,
1686                 .enable_mask = BIT(0),
1687                 .hw.init = &(struct clk_init_data) {
1688                         .name = "gcc_camss_csi1_clk",
1689                         .parent_hws = (const struct clk_hw*[]) {
1690                                 &csi1_clk_src.clkr.hw,
1691                         },
1692                         .num_parents = 1,
1693                         .ops = &clk_branch2_ops,
1694                         .flags = CLK_SET_RATE_PARENT,
1695                 }
1696         }
1697 };
1698
1699 static struct clk_branch gcc_camss_csi1_ahb_clk = {
1700         .halt_reg = 0x4f040,
1701         .halt_check = BRANCH_HALT,
1702         .clkr = {
1703                 .enable_reg = 0x4f040,
1704                 .enable_mask = BIT(0),
1705                 .hw.init = &(struct clk_init_data) {
1706                         .name = "gcc_camss_csi1_ahb_clk",
1707                         .parent_hws = (const struct clk_hw*[]) {
1708                                 &camss_top_ahb_clk_src.clkr.hw,
1709                         },
1710                         .num_parents = 1,
1711                         .ops = &clk_branch2_ops,
1712                         .flags = CLK_SET_RATE_PARENT,
1713                 }
1714         }
1715 };
1716
1717 static struct clk_branch gcc_camss_csi1phy_clk = {
1718         .halt_reg = 0x4f048,
1719         .halt_check = BRANCH_HALT,
1720         .clkr = {
1721                 .enable_reg = 0x4f048,
1722                 .enable_mask = BIT(0),
1723                 .hw.init = &(struct clk_init_data) {
1724                         .name = "gcc_camss_csi1phy_clk",
1725                         .parent_hws = (const struct clk_hw*[]) {
1726                                 &csi1_clk_src.clkr.hw,
1727                         },
1728                         .num_parents = 1,
1729                         .ops = &clk_branch2_ops,
1730                         .flags = CLK_SET_RATE_PARENT,
1731                 }
1732         }
1733 };
1734
1735 static struct clk_branch gcc_camss_csi1pix_clk = {
1736         .halt_reg = 0x4f058,
1737         .halt_check = BRANCH_HALT,
1738         .clkr = {
1739                 .enable_reg = 0x4f058,
1740                 .enable_mask = BIT(0),
1741                 .hw.init = &(struct clk_init_data) {
1742                         .name = "gcc_camss_csi1pix_clk",
1743                         .parent_hws = (const struct clk_hw*[]) {
1744                                 &csi1_clk_src.clkr.hw,
1745                         },
1746                         .num_parents = 1,
1747                         .ops = &clk_branch2_ops,
1748                         .flags = CLK_SET_RATE_PARENT,
1749                 }
1750         }
1751 };
1752
1753 static struct clk_branch gcc_camss_csi1rdi_clk = {
1754         .halt_reg = 0x4f050,
1755         .halt_check = BRANCH_HALT,
1756         .clkr = {
1757                 .enable_reg = 0x4f050,
1758                 .enable_mask = BIT(0),
1759                 .hw.init = &(struct clk_init_data) {
1760                         .name = "gcc_camss_csi1rdi_clk",
1761                         .parent_hws = (const struct clk_hw*[]) {
1762                                 &csi1_clk_src.clkr.hw,
1763                         },
1764                         .num_parents = 1,
1765                         .ops = &clk_branch2_ops,
1766                         .flags = CLK_SET_RATE_PARENT,
1767                 }
1768         }
1769 };
1770
1771 static struct clk_branch gcc_camss_csi_vfe0_clk = {
1772         .halt_reg = 0x58050,
1773         .halt_check = BRANCH_HALT,
1774         .clkr = {
1775                 .enable_reg = 0x58050,
1776                 .enable_mask = BIT(0),
1777                 .hw.init = &(struct clk_init_data) {
1778                         .name = "gcc_camss_csi_vfe0_clk",
1779                         .parent_hws = (const struct clk_hw*[]) {
1780                                 &vfe0_clk_src.clkr.hw,
1781                         },
1782                         .num_parents = 1,
1783                         .ops = &clk_branch2_ops,
1784                         .flags = CLK_SET_RATE_PARENT,
1785                 }
1786         }
1787 };
1788
1789 static struct clk_branch gcc_camss_gp0_clk = {
1790         .halt_reg = 0x54018,
1791         .halt_check = BRANCH_HALT,
1792         .clkr = {
1793                 .enable_reg = 0x54018,
1794                 .enable_mask = BIT(0),
1795                 .hw.init = &(struct clk_init_data) {
1796                         .name = "gcc_camss_gp0_clk",
1797                         .parent_hws = (const struct clk_hw*[]) {
1798                                 &camss_gp0_clk_src.clkr.hw,
1799                         },
1800                         .num_parents = 1,
1801                         .ops = &clk_branch2_ops,
1802                         .flags = CLK_SET_RATE_PARENT,
1803                 }
1804         }
1805 };
1806
1807 static struct clk_branch gcc_camss_gp1_clk = {
1808         .halt_reg = 0x55018,
1809         .halt_check = BRANCH_HALT,
1810         .clkr = {
1811                 .enable_reg = 0x55018,
1812                 .enable_mask = BIT(0),
1813                 .hw.init = &(struct clk_init_data) {
1814                         .name = "gcc_camss_gp1_clk",
1815                         .parent_hws = (const struct clk_hw*[]) {
1816                                 &camss_gp1_clk_src.clkr.hw,
1817                         },
1818                         .num_parents = 1,
1819                         .ops = &clk_branch2_ops,
1820                         .flags = CLK_SET_RATE_PARENT,
1821                 }
1822         }
1823 };
1824
1825 static struct clk_branch gcc_camss_ispif_ahb_clk = {
1826         .halt_reg = 0x50004,
1827         .halt_check = BRANCH_HALT,
1828         .clkr = {
1829                 .enable_reg = 0x50004,
1830                 .enable_mask = BIT(0),
1831                 .hw.init = &(struct clk_init_data) {
1832                         .name = "gcc_camss_ispif_ahb_clk",
1833                         .parent_hws = (const struct clk_hw*[]) {
1834                                 &camss_top_ahb_clk_src.clkr.hw,
1835                         },
1836                         .num_parents = 1,
1837                         .ops = &clk_branch2_ops,
1838                         .flags = CLK_SET_RATE_PARENT,
1839                 }
1840         }
1841 };
1842
1843 static struct clk_branch gcc_camss_mclk0_clk = {
1844         .halt_reg = 0x52018,
1845         .halt_check = BRANCH_HALT,
1846         .clkr = {
1847                 .enable_reg = 0x52018,
1848                 .enable_mask = BIT(0),
1849                 .hw.init = &(struct clk_init_data) {
1850                         .name = "gcc_camss_mclk0_clk",
1851                         .parent_hws = (const struct clk_hw*[]) {
1852                                 &mclk0_clk_src.clkr.hw,
1853                         },
1854                         .num_parents = 1,
1855                         .ops = &clk_branch2_ops,
1856                         .flags = CLK_SET_RATE_PARENT,
1857                 }
1858         }
1859 };
1860
1861 static struct clk_branch gcc_camss_mclk1_clk = {
1862         .halt_reg = 0x53018,
1863         .halt_check = BRANCH_HALT,
1864         .clkr = {
1865                 .enable_reg = 0x53018,
1866                 .enable_mask = BIT(0),
1867                 .hw.init = &(struct clk_init_data) {
1868                         .name = "gcc_camss_mclk1_clk",
1869                         .parent_hws = (const struct clk_hw*[]) {
1870                                 &mclk1_clk_src.clkr.hw,
1871                         },
1872                         .num_parents = 1,
1873                         .ops = &clk_branch2_ops,
1874                         .flags = CLK_SET_RATE_PARENT,
1875                 }
1876         }
1877 };
1878
1879 static struct clk_branch gcc_camss_top_ahb_clk = {
1880         .halt_reg = 0x56004,
1881         .halt_check = BRANCH_HALT,
1882         .clkr = {
1883                 .enable_reg = 0x56004,
1884                 .enable_mask = BIT(0),
1885                 .hw.init = &(struct clk_init_data) {
1886                         .name = "gcc_camss_top_ahb_clk",
1887                         .parent_hws = (const struct clk_hw*[]) {
1888                                 &camss_top_ahb_clk_src.clkr.hw,
1889                         },
1890                         .num_parents = 1,
1891                         .ops = &clk_branch2_ops,
1892                         .flags = CLK_SET_RATE_PARENT,
1893                 }
1894         }
1895 };
1896
1897 static struct clk_branch gcc_camss_vfe0_clk = {
1898         .halt_reg = 0x58038,
1899         .halt_check = BRANCH_HALT,
1900         .clkr = {
1901                 .enable_reg = 0x58038,
1902                 .enable_mask = BIT(0),
1903                 .hw.init = &(struct clk_init_data) {
1904                         .name = "gcc_camss_vfe0_clk",
1905                         .parent_hws = (const struct clk_hw*[]) {
1906                                 &vfe0_clk_src.clkr.hw,
1907                         },
1908                         .num_parents = 1,
1909                         .ops = &clk_branch2_ops,
1910                         .flags = CLK_SET_RATE_PARENT,
1911                 }
1912         }
1913 };
1914
1915 static struct clk_branch gcc_camss_vfe_ahb_clk = {
1916         .halt_reg = 0x58044,
1917         .halt_check = BRANCH_HALT,
1918         .clkr = {
1919                 .enable_reg = 0x58044,
1920                 .enable_mask = BIT(0),
1921                 .hw.init = &(struct clk_init_data) {
1922                         .name = "gcc_camss_vfe_ahb_clk",
1923                         .parent_hws = (const struct clk_hw*[]) {
1924                                 &camss_top_ahb_clk_src.clkr.hw,
1925                         },
1926                         .num_parents = 1,
1927                         .ops = &clk_branch2_ops,
1928                         .flags = CLK_SET_RATE_PARENT,
1929                 }
1930         }
1931 };
1932
1933 static struct clk_branch gcc_camss_vfe_axi_clk = {
1934         .halt_reg = 0x58048,
1935         .halt_check = BRANCH_HALT,
1936         .clkr = {
1937                 .enable_reg = 0x58048,
1938                 .enable_mask = BIT(0),
1939                 .hw.init = &(struct clk_init_data) {
1940                         .name = "gcc_camss_vfe_axi_clk",
1941                         .parent_hws = (const struct clk_hw*[]) {
1942                                 &system_noc_bfdcd_clk_src.clkr.hw,
1943                         },
1944                         .num_parents = 1,
1945                         .ops = &clk_branch2_ops,
1946                 }
1947         }
1948 };
1949
1950 static struct clk_branch gcc_gp1_clk = {
1951         .halt_reg = 0x08000,
1952         .halt_check = BRANCH_HALT,
1953         .clkr = {
1954                 .enable_reg = 0x08000,
1955                 .enable_mask = BIT(0),
1956                 .hw.init = &(struct clk_init_data) {
1957                         .name = "gcc_gp1_clk",
1958                         .parent_hws = (const struct clk_hw*[]) {
1959                                 &gp1_clk_src.clkr.hw,
1960                         },
1961                         .num_parents = 1,
1962                         .ops = &clk_branch2_ops,
1963                         .flags = CLK_SET_RATE_PARENT,
1964                 }
1965         }
1966 };
1967
1968 static struct clk_branch gcc_gp2_clk = {
1969         .halt_reg = 0x09000,
1970         .halt_check = BRANCH_HALT,
1971         .clkr = {
1972                 .enable_reg = 0x09000,
1973                 .enable_mask = BIT(0),
1974                 .hw.init = &(struct clk_init_data) {
1975                         .name = "gcc_gp2_clk",
1976                         .parent_hws = (const struct clk_hw*[]) {
1977                                 &gp2_clk_src.clkr.hw,
1978                         },
1979                         .num_parents = 1,
1980                         .ops = &clk_branch2_ops,
1981                         .flags = CLK_SET_RATE_PARENT,
1982                 }
1983         }
1984 };
1985
1986 static struct clk_branch gcc_gp3_clk = {
1987         .halt_reg = 0x0a000,
1988         .halt_check = BRANCH_HALT,
1989         .clkr = {
1990                 .enable_reg = 0x0a000,
1991                 .enable_mask = BIT(0),
1992                 .hw.init = &(struct clk_init_data) {
1993                         .name = "gcc_gp3_clk",
1994                         .parent_hws = (const struct clk_hw*[]) {
1995                                 &gp3_clk_src.clkr.hw,
1996                         },
1997                         .num_parents = 1,
1998                         .ops = &clk_branch2_ops,
1999                         .flags = CLK_SET_RATE_PARENT,
2000                 }
2001         }
2002 };
2003
2004 static struct clk_branch gcc_mdss_ahb_clk = {
2005         .halt_reg = 0x4d07c,
2006         .halt_check = BRANCH_HALT,
2007         .clkr = {
2008                 .enable_reg = 0x4d07c,
2009                 .enable_mask = BIT(0),
2010                 .hw.init = &(struct clk_init_data) {
2011                         .name = "gcc_mdss_ahb_clk",
2012                         .parent_hws = (const struct clk_hw*[]) {
2013                                 &pcnoc_bfdcd_clk_src.clkr.hw,
2014                         },
2015                         .num_parents = 1,
2016                         .ops = &clk_branch2_ops,
2017                 }
2018         }
2019 };
2020
2021 static struct clk_branch gcc_mdss_axi_clk = {
2022         .halt_reg = 0x4d080,
2023         .halt_check = BRANCH_HALT,
2024         .clkr = {
2025                 .enable_reg = 0x4d080,
2026                 .enable_mask = BIT(0),
2027                 .hw.init = &(struct clk_init_data) {
2028                         .name = "gcc_mdss_axi_clk",
2029                         .parent_hws = (const struct clk_hw*[]) {
2030                                 &system_noc_bfdcd_clk_src.clkr.hw,
2031                         },
2032                         .num_parents = 1,
2033                         .ops = &clk_branch2_ops,
2034                 }
2035         }
2036 };
2037
2038 static struct clk_branch gcc_mdss_byte0_clk = {
2039         .halt_reg = 0x4d094,
2040         .halt_check = BRANCH_HALT,
2041         .clkr = {
2042                 .enable_reg = 0x4d094,
2043                 .enable_mask = BIT(0),
2044                 .hw.init = &(struct clk_init_data) {
2045                         .name = "gcc_mdss_byte0_clk",
2046                         .parent_hws = (const struct clk_hw*[]) {
2047                                 &byte0_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_mdss_esc0_clk = {
2057         .halt_reg = 0x4d098,
2058         .halt_check = BRANCH_HALT,
2059         .clkr = {
2060                 .enable_reg = 0x4d098,
2061                 .enable_mask = BIT(0),
2062                 .hw.init = &(struct clk_init_data) {
2063                         .name = "gcc_mdss_esc0_clk",
2064                         .parent_hws = (const struct clk_hw*[]) {
2065                                 &esc0_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_mdss_mdp_clk = {
2075         .halt_reg = 0x4d088,
2076         .halt_check = BRANCH_HALT,
2077         .clkr = {
2078                 .enable_reg = 0x4d088,
2079                 .enable_mask = BIT(0),
2080                 .hw.init = &(struct clk_init_data) {
2081                         .name = "gcc_mdss_mdp_clk",
2082                         .parent_hws = (const struct clk_hw*[]) {
2083                                 &mdp_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_mdss_pclk0_clk = {
2093         .halt_reg = 0x4d084,
2094         .halt_check = BRANCH_HALT,
2095         .clkr = {
2096                 .enable_reg = 0x4d084,
2097                 .enable_mask = BIT(0),
2098                 .hw.init = &(struct clk_init_data) {
2099                         .name = "gcc_mdss_pclk0_clk",
2100                         .parent_hws = (const struct clk_hw*[]) {
2101                                 &pclk0_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_mdss_vsync_clk = {
2111         .halt_reg = 0x4d090,
2112         .halt_check = BRANCH_HALT,
2113         .clkr = {
2114                 .enable_reg = 0x4d090,
2115                 .enable_mask = BIT(0),
2116                 .hw.init = &(struct clk_init_data) {
2117                         .name = "gcc_mdss_vsync_clk",
2118                         .parent_hws = (const struct clk_hw*[]) {
2119                                 &vsync_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_mss_cfg_ahb_clk = {
2129         .halt_reg = 0x49000,
2130         .halt_check = BRANCH_HALT,
2131         .clkr = {
2132                 .enable_reg = 0x49000,
2133                 .enable_mask = BIT(0),
2134                 .hw.init = &(struct clk_init_data) {
2135                         .name = "gcc_mss_cfg_ahb_clk",
2136                         .parent_hws = (const struct clk_hw*[]) {
2137                                 &pcnoc_bfdcd_clk_src.clkr.hw,
2138                         },
2139                         .num_parents = 1,
2140                         .ops = &clk_branch2_ops,
2141                 }
2142         }
2143 };
2144
2145 static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
2146         .halt_reg = 0x49004,
2147         .halt_check = BRANCH_HALT,
2148         .clkr = {
2149                 .enable_reg = 0x49004,
2150                 .enable_mask = BIT(0),
2151                 .hw.init = &(struct clk_init_data) {
2152                         .name = "gcc_mss_q6_bimc_axi_clk",
2153                         .parent_hws = (const struct clk_hw*[]) {
2154                                 &bimc_ddr_clk_src.clkr.hw,
2155                         },
2156                         .num_parents = 1,
2157                         .ops = &clk_branch2_ops,
2158                 }
2159         }
2160 };
2161
2162 static struct clk_branch gcc_oxili_ahb_clk = {
2163         .halt_reg = 0x59028,
2164         .halt_check = BRANCH_HALT,
2165         .clkr = {
2166                 .enable_reg = 0x59028,
2167                 .enable_mask = BIT(0),
2168                 .hw.init = &(struct clk_init_data) {
2169                         .name = "gcc_oxili_ahb_clk",
2170                         .parent_hws = (const struct clk_hw*[]) {
2171                                 &pcnoc_bfdcd_clk_src.clkr.hw,
2172                         },
2173                         .num_parents = 1,
2174                         .ops = &clk_branch2_ops,
2175                 }
2176         }
2177 };
2178
2179 static struct clk_branch gcc_oxili_gfx3d_clk = {
2180         .halt_reg = 0x59020,
2181         .halt_check = BRANCH_HALT,
2182         .clkr = {
2183                 .enable_reg = 0x59020,
2184                 .enable_mask = BIT(0),
2185                 .hw.init = &(struct clk_init_data) {
2186                         .name = "gcc_oxili_gfx3d_clk",
2187                         .parent_hws = (const struct clk_hw*[]) {
2188                                 &gfx3d_clk_src.clkr.hw,
2189                         },
2190                         .num_parents = 1,
2191                         .ops = &clk_branch2_ops,
2192                         .flags = CLK_SET_RATE_PARENT,
2193                 }
2194         }
2195 };
2196
2197 static struct clk_branch gcc_pdm2_clk = {
2198         .halt_reg = 0x4400c,
2199         .halt_check = BRANCH_HALT,
2200         .clkr = {
2201                 .enable_reg = 0x4400c,
2202                 .enable_mask = BIT(0),
2203                 .hw.init = &(struct clk_init_data) {
2204                         .name = "gcc_pdm2_clk",
2205                         .parent_hws = (const struct clk_hw*[]) {
2206                                 &pdm2_clk_src.clkr.hw,
2207                         },
2208                         .num_parents = 1,
2209                         .ops = &clk_branch2_ops,
2210                         .flags = CLK_SET_RATE_PARENT,
2211                 }
2212         }
2213 };
2214
2215 static struct clk_branch gcc_pdm_ahb_clk = {
2216         .halt_reg = 0x44004,
2217         .halt_check = BRANCH_HALT,
2218         .clkr = {
2219                 .enable_reg = 0x44004,
2220                 .enable_mask = BIT(0),
2221                 .hw.init = &(struct clk_init_data) {
2222                         .name = "gcc_pdm_ahb_clk",
2223                         .parent_hws = (const struct clk_hw*[]) {
2224                                 &pcnoc_bfdcd_clk_src.clkr.hw,
2225                         },
2226                         .num_parents = 1,
2227                         .ops = &clk_branch2_ops,
2228                 }
2229         }
2230 };
2231
2232 static struct clk_branch gcc_sdcc1_ahb_clk = {
2233         .halt_reg = 0x4201c,
2234         .halt_check = BRANCH_HALT,
2235         .clkr = {
2236                 .enable_reg = 0x4201c,
2237                 .enable_mask = BIT(0),
2238                 .hw.init = &(struct clk_init_data) {
2239                         .name = "gcc_sdcc1_ahb_clk",
2240                         .parent_hws = (const struct clk_hw*[]) {
2241                                 &pcnoc_bfdcd_clk_src.clkr.hw,
2242                         },
2243                         .num_parents = 1,
2244                         .ops = &clk_branch2_ops,
2245                 }
2246         }
2247 };
2248
2249 static struct clk_branch gcc_sdcc1_apps_clk = {
2250         .halt_reg = 0x42018,
2251         .halt_check = BRANCH_HALT,
2252         .clkr = {
2253                 .enable_reg = 0x42018,
2254                 .enable_mask = BIT(0),
2255                 .hw.init = &(struct clk_init_data) {
2256                         .name = "gcc_sdcc1_apps_clk",
2257                         .parent_hws = (const struct clk_hw*[]) {
2258                                 &sdcc1_apps_clk_src.clkr.hw,
2259                         },
2260                         .num_parents = 1,
2261                         .ops = &clk_branch2_ops,
2262                         .flags = CLK_SET_RATE_PARENT,
2263                 }
2264         }
2265 };
2266
2267 static struct clk_branch gcc_sdcc2_ahb_clk = {
2268         .halt_reg = 0x4301c,
2269         .halt_check = BRANCH_HALT,
2270         .clkr = {
2271                 .enable_reg = 0x4301c,
2272                 .enable_mask = BIT(0),
2273                 .hw.init = &(struct clk_init_data) {
2274                         .name = "gcc_sdcc2_ahb_clk",
2275                         .parent_hws = (const struct clk_hw*[]) {
2276                                 &pcnoc_bfdcd_clk_src.clkr.hw,
2277                         },
2278                         .num_parents = 1,
2279                         .ops = &clk_branch2_ops,
2280                 }
2281         }
2282 };
2283
2284 static struct clk_branch gcc_sdcc2_apps_clk = {
2285         .halt_reg = 0x43018,
2286         .halt_check = BRANCH_HALT,
2287         .clkr = {
2288                 .enable_reg = 0x43018,
2289                 .enable_mask = BIT(0),
2290                 .hw.init = &(struct clk_init_data) {
2291                         .name = "gcc_sdcc2_apps_clk",
2292                         .parent_hws = (const struct clk_hw*[]) {
2293                                 &sdcc2_apps_clk_src.clkr.hw,
2294                         },
2295                         .num_parents = 1,
2296                         .ops = &clk_branch2_ops,
2297                         .flags = CLK_SET_RATE_PARENT,
2298                 }
2299         }
2300 };
2301
2302 static struct clk_branch gcc_usb2a_phy_sleep_clk = {
2303         .halt_reg = 0x4102c,
2304         .halt_check = BRANCH_HALT,
2305         .clkr = {
2306                 .enable_reg = 0x4102c,
2307                 .enable_mask = BIT(0),
2308                 .hw.init = &(struct clk_init_data) {
2309                         .name = "gcc_usb2a_phy_sleep_clk",
2310                         .parent_data = gcc_sleep_clk_data,
2311                         .num_parents = ARRAY_SIZE(gcc_sleep_clk_data),
2312                         .ops = &clk_branch2_ops,
2313                 }
2314         }
2315 };
2316
2317 static struct clk_branch gcc_usb_hs_ahb_clk = {
2318         .halt_reg = 0x41008,
2319         .halt_check = BRANCH_HALT,
2320         .clkr = {
2321                 .enable_reg = 0x41008,
2322                 .enable_mask = BIT(0),
2323                 .hw.init = &(struct clk_init_data) {
2324                         .name = "gcc_usb_hs_ahb_clk",
2325                         .parent_hws = (const struct clk_hw*[]) {
2326                                 &pcnoc_bfdcd_clk_src.clkr.hw,
2327                         },
2328                         .num_parents = 1,
2329                         .ops = &clk_branch2_ops,
2330                 }
2331         }
2332 };
2333
2334 static struct clk_branch gcc_usb_hs_phy_cfg_ahb_clk = {
2335         .halt_reg = 0x41030,
2336         .halt_check = BRANCH_HALT,
2337         .clkr = {
2338                 .enable_reg = 0x41030,
2339                 .enable_mask = BIT(0),
2340                 .hw.init = &(struct clk_init_data) {
2341                         .name = "gcc_usb_hs_phy_cfg_ahb_clk",
2342                         .parent_hws = (const struct clk_hw*[]) {
2343                                 &pcnoc_bfdcd_clk_src.clkr.hw,
2344                         },
2345                         .num_parents = 1,
2346                         .ops = &clk_branch2_ops,
2347                 }
2348         }
2349 };
2350
2351 static struct clk_branch gcc_usb_hs_system_clk = {
2352         .halt_reg = 0x41004,
2353         .halt_check = BRANCH_HALT,
2354         .clkr = {
2355                 .enable_reg = 0x41004,
2356                 .enable_mask = BIT(0),
2357                 .hw.init = &(struct clk_init_data) {
2358                         .name = "gcc_usb_hs_system_clk",
2359                         .parent_hws = (const struct clk_hw*[]) {
2360                                 &usb_hs_system_clk_src.clkr.hw,
2361                         },
2362                         .num_parents = 1,
2363                         .ops = &clk_branch2_ops,
2364                         .flags = CLK_SET_RATE_PARENT,
2365                 }
2366         }
2367 };
2368
2369 static struct clk_branch gcc_venus0_ahb_clk = {
2370         .halt_reg = 0x4c020,
2371         .halt_check = BRANCH_HALT,
2372         .clkr = {
2373                 .enable_reg = 0x4c020,
2374                 .enable_mask = BIT(0),
2375                 .hw.init = &(struct clk_init_data) {
2376                         .name = "gcc_venus0_ahb_clk",
2377                         .parent_hws = (const struct clk_hw*[]) {
2378                                 &pcnoc_bfdcd_clk_src.clkr.hw,
2379                         },
2380                         .num_parents = 1,
2381                         .ops = &clk_branch2_ops,
2382                 }
2383         }
2384 };
2385
2386 static struct clk_branch gcc_venus0_axi_clk = {
2387         .halt_reg = 0x4c024,
2388         .halt_check = BRANCH_HALT,
2389         .clkr = {
2390                 .enable_reg = 0x4c024,
2391                 .enable_mask = BIT(0),
2392                 .hw.init = &(struct clk_init_data) {
2393                         .name = "gcc_venus0_axi_clk",
2394                         .parent_hws = (const struct clk_hw*[]) {
2395                                 &system_noc_bfdcd_clk_src.clkr.hw,
2396                         },
2397                         .num_parents = 1,
2398                         .ops = &clk_branch2_ops,
2399                 }
2400         }
2401 };
2402
2403 static struct clk_branch gcc_venus0_core0_vcodec0_clk = {
2404         .halt_reg = 0x4c02c,
2405         .halt_check = BRANCH_HALT,
2406         .clkr = {
2407                 .enable_reg = 0x4c02c,
2408                 .enable_mask = BIT(0),
2409                 .hw.init = &(struct clk_init_data) {
2410                         .name = "gcc_venus0_core0_vcodec0_clk",
2411                         .parent_hws = (const struct clk_hw*[]) {
2412                                 &vcodec0_clk_src.clkr.hw,
2413                         },
2414                         .num_parents = 1,
2415                         .ops = &clk_branch2_ops,
2416                         .flags = CLK_SET_RATE_PARENT,
2417                 }
2418         }
2419 };
2420
2421 static struct clk_branch gcc_venus0_vcodec0_clk = {
2422         .halt_reg = 0x4c01c,
2423         .halt_check = BRANCH_HALT,
2424         .clkr = {
2425                 .enable_reg = 0x4c01c,
2426                 .enable_mask = BIT(0),
2427                 .hw.init = &(struct clk_init_data) {
2428                         .name = "gcc_venus0_vcodec0_clk",
2429                         .parent_hws = (const struct clk_hw*[]) {
2430                                 &vcodec0_clk_src.clkr.hw,
2431                         },
2432                         .num_parents = 1,
2433                         .ops = &clk_branch2_ops,
2434                         .flags = CLK_SET_RATE_PARENT,
2435                 }
2436         }
2437 };
2438
2439 static struct gdsc mdss_gdsc = {
2440         .gdscr = 0x4d078,
2441         .cxcs = (unsigned int []) { 0x4d080, 0x4d088 },
2442         .cxc_count = 2,
2443         .pd = {
2444                 .name = "mdss_gdsc",
2445         },
2446         .pwrsts = PWRSTS_OFF_ON,
2447 };
2448
2449 static struct gdsc oxili_gdsc = {
2450         .gdscr = 0x5901c,
2451         .cxcs = (unsigned int []) { 0x59020 },
2452         .cxc_count = 1,
2453         .pd = {
2454                 .name = "oxili_gdsc",
2455         },
2456         .pwrsts = PWRSTS_OFF_ON,
2457 };
2458
2459 static struct gdsc venus_gdsc = {
2460         .gdscr = 0x4c018,
2461         .cxcs = (unsigned int []) { 0x4c024, 0x4c01c },
2462         .cxc_count = 2,
2463         .pd = {
2464                 .name = "venus_gdsc",
2465         },
2466         .pwrsts = PWRSTS_OFF_ON,
2467 };
2468
2469 static struct gdsc venus_core0_gdsc = {
2470         .gdscr = 0x4c028,
2471         .cxcs = (unsigned int []) { 0x4c02c },
2472         .cxc_count = 1,
2473         .pd = {
2474                 .name = "venus_core0_gdsc",
2475         },
2476         .flags = HW_CTRL,
2477         .pwrsts = PWRSTS_OFF_ON,
2478 };
2479
2480 static struct gdsc vfe_gdsc = {
2481         .gdscr = 0x58034,
2482         .cxcs = (unsigned int []) { 0x58038, 0x58048, 0x58050 },
2483         .cxc_count = 3,
2484         .pd = {
2485                 .name = "vfe_gdsc",
2486         },
2487         .pwrsts = PWRSTS_OFF_ON,
2488 };
2489
2490 static struct clk_regmap *gcc_msm8909_clocks[] = {
2491         [GPLL0_EARLY] = &gpll0_early.clkr,
2492         [GPLL0] = &gpll0.clkr,
2493         [GPLL1] = &gpll1.clkr,
2494         [GPLL1_VOTE] = &gpll1_vote,
2495         [GPLL2_EARLY] = &gpll2_early.clkr,
2496         [GPLL2] = &gpll2.clkr,
2497         [BIMC_PLL_EARLY] = &bimc_pll_early.clkr,
2498         [BIMC_PLL] = &bimc_pll.clkr,
2499         [APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
2500         [BIMC_DDR_CLK_SRC] = &bimc_ddr_clk_src.clkr,
2501         [BIMC_GPU_CLK_SRC] = &bimc_gpu_clk_src.clkr,
2502         [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
2503         [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
2504         [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
2505         [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
2506         [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
2507         [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
2508         [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
2509         [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
2510         [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
2511         [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
2512         [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
2513         [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
2514         [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
2515         [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
2516         [BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
2517         [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
2518         [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
2519         [CAMSS_TOP_AHB_CLK_SRC] = &camss_top_ahb_clk_src.clkr,
2520         [CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
2521         [CSI0_CLK_SRC] = &csi0_clk_src.clkr,
2522         [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
2523         [CSI1_CLK_SRC] = &csi1_clk_src.clkr,
2524         [ESC0_CLK_SRC] = &esc0_clk_src.clkr,
2525         [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
2526         [GP1_CLK_SRC] = &gp1_clk_src.clkr,
2527         [GP2_CLK_SRC] = &gp2_clk_src.clkr,
2528         [GP3_CLK_SRC] = &gp3_clk_src.clkr,
2529         [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
2530         [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
2531         [MDP_CLK_SRC] = &mdp_clk_src.clkr,
2532         [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
2533         [PCNOC_BFDCD_CLK_SRC] = &pcnoc_bfdcd_clk_src.clkr,
2534         [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
2535         [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
2536         [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
2537         [SYSTEM_NOC_BFDCD_CLK_SRC] = &system_noc_bfdcd_clk_src.clkr,
2538         [USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
2539         [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
2540         [VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
2541         [VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
2542         [GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr,
2543         [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
2544         [GCC_BLSP1_SLEEP_CLK] = &gcc_blsp1_sleep_clk.clkr,
2545         [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2546         [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
2547         [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
2548         [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
2549         [GCC_GFX_TBU_CLK] = &gcc_gfx_tbu_clk.clkr,
2550         [GCC_GFX_TCU_CLK] = &gcc_gfx_tcu_clk.clkr,
2551         [GCC_GTCU_AHB_CLK] = &gcc_gtcu_ahb_clk.clkr,
2552         [GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr,
2553         [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
2554         [GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,
2555         [GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr,
2556         [GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr,
2557         [GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
2558         [GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr,
2559         [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
2560         [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
2561         [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
2562         [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
2563         [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
2564         [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
2565         [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
2566         [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
2567         [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
2568         [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
2569         [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
2570         [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
2571         [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
2572         [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
2573         [GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr,
2574         [GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr,
2575         [GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr,
2576         [GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr,
2577         [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
2578         [GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr,
2579         [GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr,
2580         [GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr,
2581         [GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr,
2582         [GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr,
2583         [GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr,
2584         [GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr,
2585         [GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr,
2586         [GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr,
2587         [GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr,
2588         [GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr,
2589         [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
2590         [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
2591         [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
2592         [GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr,
2593         [GCC_CAMSS_VFE_AHB_CLK] = &gcc_camss_vfe_ahb_clk.clkr,
2594         [GCC_CAMSS_VFE_AXI_CLK] = &gcc_camss_vfe_axi_clk.clkr,
2595         [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2596         [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2597         [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2598         [GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr,
2599         [GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr,
2600         [GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr,
2601         [GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr,
2602         [GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr,
2603         [GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr,
2604         [GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr,
2605         [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
2606         [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
2607         [GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr,
2608         [GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr,
2609         [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2610         [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2611         [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2612         [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2613         [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2614         [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2615         [GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
2616         [GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
2617         [GCC_USB_HS_PHY_CFG_AHB_CLK] = &gcc_usb_hs_phy_cfg_ahb_clk.clkr,
2618         [GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
2619         [GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr,
2620         [GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr,
2621         [GCC_VENUS0_CORE0_VCODEC0_CLK] = &gcc_venus0_core0_vcodec0_clk.clkr,
2622         [GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr,
2623 };
2624
2625 static struct gdsc *gcc_msm8909_gdscs[] = {
2626         [MDSS_GDSC] = &mdss_gdsc,
2627         [OXILI_GDSC] = &oxili_gdsc,
2628         [VENUS_GDSC] = &venus_gdsc,
2629         [VENUS_CORE0_GDSC] = &venus_core0_gdsc,
2630         [VFE_GDSC] = &vfe_gdsc,
2631 };
2632
2633 static const struct qcom_reset_map gcc_msm8909_resets[] = {
2634         [GCC_AUDIO_CORE_BCR] = { 0x1c008 },
2635         [GCC_BLSP1_BCR] = { 0x01000 },
2636         [GCC_BLSP1_QUP1_BCR] = { 0x02000 },
2637         [GCC_BLSP1_QUP2_BCR] = { 0x03008 },
2638         [GCC_BLSP1_QUP3_BCR] = { 0x04018 },
2639         [GCC_BLSP1_QUP4_BCR] = { 0x05018 },
2640         [GCC_BLSP1_QUP5_BCR] = { 0x06018 },
2641         [GCC_BLSP1_QUP6_BCR] = { 0x07018 },
2642         [GCC_BLSP1_UART1_BCR] = { 0x02038 },
2643         [GCC_BLSP1_UART2_BCR] = { 0x03028 },
2644         [GCC_CAMSS_CSI0_BCR] = { 0x4e038 },
2645         [GCC_CAMSS_CSI0PHY_BCR] = { 0x4e044 },
2646         [GCC_CAMSS_CSI0PIX_BCR] = { 0x4e054 },
2647         [GCC_CAMSS_CSI0RDI_BCR] = { 0x4e04c },
2648         [GCC_CAMSS_CSI1_BCR] = { 0x4f038 },
2649         [GCC_CAMSS_CSI1PHY_BCR] = { 0x4f044 },
2650         [GCC_CAMSS_CSI1PIX_BCR] = { 0x4f054 },
2651         [GCC_CAMSS_CSI1RDI_BCR] = { 0x4f04c },
2652         [GCC_CAMSS_CSI_VFE0_BCR] = { 0x5804c },
2653         [GCC_CAMSS_GP0_BCR] = { 0x54014 },
2654         [GCC_CAMSS_GP1_BCR] = { 0x55014 },
2655         [GCC_CAMSS_ISPIF_BCR] = { 0x50000 },
2656         [GCC_CAMSS_MCLK0_BCR] = { 0x52014 },
2657         [GCC_CAMSS_MCLK1_BCR] = { 0x53014 },
2658         [GCC_CAMSS_PHY0_BCR] = { 0x4e018 },
2659         [GCC_CAMSS_TOP_BCR] = { 0x56000 },
2660         [GCC_CAMSS_TOP_AHB_BCR] = { 0x5a018 },
2661         [GCC_CAMSS_VFE_BCR] = { 0x58030 },
2662         [GCC_CRYPTO_BCR] = { 0x16000 },
2663         [GCC_MDSS_BCR] = { 0x4d074 },
2664         [GCC_OXILI_BCR] = { 0x59018 },
2665         [GCC_PDM_BCR] = { 0x44000 },
2666         [GCC_PRNG_BCR] = { 0x13000 },
2667         [GCC_QUSB2_PHY_BCR] = { 0x4103c },
2668         [GCC_SDCC1_BCR] = { 0x42000 },
2669         [GCC_SDCC2_BCR] = { 0x43000 },
2670         [GCC_ULT_AUDIO_BCR] = { 0x1c0b4 },
2671         [GCC_USB2A_PHY_BCR] = { 0x41028 },
2672         [GCC_USB2_HS_PHY_ONLY_BCR] = { .reg = 0x41034, .udelay = 15 },
2673         [GCC_USB_HS_BCR] = { 0x41000 },
2674         [GCC_VENUS0_BCR] = { 0x4c014 },
2675         /* Subsystem Restart */
2676         [GCC_MSS_RESTART] = { 0x3e000 },
2677 };
2678
2679 static const struct regmap_config gcc_msm8909_regmap_config = {
2680         .reg_bits       = 32,
2681         .reg_stride     = 4,
2682         .val_bits       = 32,
2683         .max_register   = 0x80000,
2684         .fast_io        = true,
2685 };
2686
2687 static const struct qcom_cc_desc gcc_msm8909_desc = {
2688         .config = &gcc_msm8909_regmap_config,
2689         .clks = gcc_msm8909_clocks,
2690         .num_clks = ARRAY_SIZE(gcc_msm8909_clocks),
2691         .resets = gcc_msm8909_resets,
2692         .num_resets = ARRAY_SIZE(gcc_msm8909_resets),
2693         .gdscs = gcc_msm8909_gdscs,
2694         .num_gdscs = ARRAY_SIZE(gcc_msm8909_gdscs),
2695 };
2696
2697 static const struct of_device_id gcc_msm8909_match_table[] = {
2698         { .compatible = "qcom,gcc-msm8909" },
2699         { }
2700 };
2701 MODULE_DEVICE_TABLE(of, gcc_msm8909_match_table);
2702
2703 static int gcc_msm8909_probe(struct platform_device *pdev)
2704 {
2705         return qcom_cc_probe(pdev, &gcc_msm8909_desc);
2706 }
2707
2708 static struct platform_driver gcc_msm8909_driver = {
2709         .probe          = gcc_msm8909_probe,
2710         .driver         = {
2711                 .name   = "gcc-msm8909",
2712                 .of_match_table = gcc_msm8909_match_table,
2713         },
2714 };
2715
2716 static int __init gcc_msm8909_init(void)
2717 {
2718         return platform_driver_register(&gcc_msm8909_driver);
2719 }
2720 core_initcall(gcc_msm8909_init);
2721
2722 static void __exit gcc_msm8909_exit(void)
2723 {
2724         platform_driver_unregister(&gcc_msm8909_driver);
2725 }
2726 module_exit(gcc_msm8909_exit);
2727
2728 MODULE_DESCRIPTION("Qualcomm GCC MSM8909 Driver");
2729 MODULE_LICENSE("GPL");
2730 MODULE_ALIAS("platform:gcc-msm8909");