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