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