1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (C) 2023 Otto Pflüger
5 * Based on gcc-msm8953.c:
6 * Copyright 2021, The Linux Foundation. All rights reserved.
7 * with parts taken from gcc-qcs404.c:
8 * Copyright 2018, The Linux Foundation. All rights reserved.
10 * Copyright 2020 Linaro Limited
11 * adapted with data from clock-gcc-8952.c in Qualcomm's msm-4.9 release:
12 * Copyright (c) 2014-2020, The Linux Foundation. All rights reserved.
15 #include <linux/bitops.h>
16 #include <linux/clk-provider.h>
17 #include <linux/err.h>
18 #include <linux/kernel.h>
19 #include <linux/module.h>
21 #include <linux/of_device.h>
22 #include <linux/platform_device.h>
23 #include <linux/regmap.h>
24 #include <linux/reset-controller.h>
26 #include <dt-bindings/clock/qcom,gcc-msm8917.h>
28 #include "clk-alpha-pll.h"
29 #include "clk-branch.h"
54 static struct clk_alpha_pll gpll0_sleep_clk_src = {
56 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
58 .enable_reg = 0x45008,
59 .enable_mask = BIT(23),
60 .enable_is_inverted = true,
61 .hw.init = &(struct clk_init_data){
62 .name = "gpll0_sleep_clk_src",
63 .parent_data = &(const struct clk_parent_data) {
67 .ops = &clk_alpha_pll_ops,
72 static struct clk_alpha_pll gpll0_early = {
74 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
76 .enable_reg = 0x45000,
77 .enable_mask = BIT(0),
78 .hw.init = &(struct clk_init_data) {
79 .name = "gpll0_early",
80 .parent_hws = (const struct clk_hw*[]){
81 &gpll0_sleep_clk_src.clkr.hw,
84 .ops = &clk_alpha_pll_fixed_ops,
89 static struct clk_alpha_pll_postdiv gpll0 = {
91 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
92 .clkr.hw.init = &(struct clk_init_data){
94 .parent_hws = (const struct clk_hw*[]){
98 .ops = &clk_alpha_pll_postdiv_ro_ops,
102 static const struct pll_vco gpll3_p_vco[] = {
103 { 700000000, 1400000000, 0 },
106 static const struct alpha_pll_config gpll3_early_config = {
108 .config_ctl_val = 0x4001055b,
109 .early_output_mask = 0,
110 .post_div_mask = GENMASK(11, 8),
111 .post_div_val = BIT(8),
114 static struct clk_alpha_pll gpll3_early = {
116 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
117 .vco_table = gpll3_p_vco,
118 .num_vco = ARRAY_SIZE(gpll3_p_vco),
119 .flags = SUPPORTS_DYNAMIC_UPDATE,
121 .hw.init = &(struct clk_init_data){
122 .name = "gpll3_early",
123 .parent_data = &(const struct clk_parent_data) {
127 .ops = &clk_alpha_pll_ops,
132 static struct clk_alpha_pll_postdiv gpll3 = {
134 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
135 .clkr.hw.init = &(struct clk_init_data){
137 .parent_hws = (const struct clk_hw*[]){
138 &gpll3_early.clkr.hw,
141 .ops = &clk_alpha_pll_postdiv_ops,
142 .flags = CLK_SET_RATE_PARENT,
146 static struct clk_alpha_pll gpll4_early = {
148 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
150 .enable_reg = 0x45000,
151 .enable_mask = BIT(5),
152 .hw.init = &(struct clk_init_data){
153 .name = "gpll4_early",
154 .parent_data = &(const struct clk_parent_data) {
158 .ops = &clk_alpha_pll_fixed_ops,
163 static struct clk_alpha_pll_postdiv gpll4 = {
165 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
166 .clkr.hw.init = &(struct clk_init_data){
168 .parent_hws = (const struct clk_hw*[]){
169 &gpll4_early.clkr.hw,
172 .ops = &clk_alpha_pll_postdiv_ro_ops,
176 static struct clk_pll gpll6_early = {
180 .config_reg = 0x37014,
182 .status_reg = 0x3701c,
184 .clkr.hw.init = &(struct clk_init_data){
185 .name = "gpll6_early",
186 .parent_data = &(const struct clk_parent_data) {
194 static struct clk_regmap gpll6 = {
195 .enable_reg = 0x45000,
196 .enable_mask = BIT(7),
197 .hw.init = &(struct clk_init_data){
199 .parent_hws = (const struct clk_hw*[]){
200 &gpll6_early.clkr.hw,
203 .ops = &clk_pll_vote_ops,
207 static const struct parent_map gcc_xo_gpll0_map[] = {
212 static const struct parent_map gcc_xo_gpll0_out_aux_map[] = {
217 static const struct clk_parent_data gcc_xo_gpll0_data[] = {
219 { .hw = &gpll0.clkr.hw },
222 static const struct parent_map gcc_xo_gpll0_gpll6_sleep_map[] = {
229 static const struct clk_parent_data gcc_xo_gpll0_gpll6_sleep_data[] = {
231 { .hw = &gpll0.clkr.hw },
233 { .index = DT_SLEEP_CLK },
236 static const struct parent_map gcc_xo_gpll0_gpll6_gpll4_map[] = {
243 static const struct clk_parent_data gcc_xo_gpll0_gpll6_gpll4_data[] = {
245 { .hw = &gpll0.clkr.hw },
247 { .hw = &gpll4.clkr.hw },
250 static const struct freq_tbl ftbl_apss_ahb_clk_src[] = {
251 F(19200000, P_XO, 1, 0, 0),
252 F(50000000, P_GPLL0, 16, 0, 0),
253 F(100000000, P_GPLL0, 8, 0, 0),
254 F(133330000, P_GPLL0, 6, 0, 0),
258 static struct clk_rcg2 apss_ahb_clk_src = {
261 .freq_tbl = ftbl_apss_ahb_clk_src,
262 .parent_map = gcc_xo_gpll0_map,
263 .clkr.hw.init = &(struct clk_init_data) {
264 .name = "apss_ahb_clk_src",
265 .parent_data = gcc_xo_gpll0_data,
266 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
267 .ops = &clk_rcg2_ops,
271 static const struct freq_tbl ftbl_blsp_i2c_apps_clk_src[] = {
272 F(19200000, P_XO, 1, 0, 0),
273 F(50000000, P_GPLL0, 16, 0, 0),
277 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
280 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
281 .parent_map = gcc_xo_gpll0_map,
282 .clkr.hw.init = &(struct clk_init_data) {
283 .name = "blsp1_qup2_i2c_apps_clk_src",
284 .parent_data = gcc_xo_gpll0_data,
285 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
286 .ops = &clk_rcg2_ops,
290 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
293 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
294 .parent_map = gcc_xo_gpll0_map,
295 .clkr.hw.init = &(struct clk_init_data) {
296 .name = "blsp1_qup3_i2c_apps_clk_src",
297 .parent_data = gcc_xo_gpll0_data,
298 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
299 .ops = &clk_rcg2_ops,
303 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
306 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
307 .parent_map = gcc_xo_gpll0_map,
308 .clkr.hw.init = &(struct clk_init_data) {
309 .name = "blsp1_qup4_i2c_apps_clk_src",
310 .parent_data = gcc_xo_gpll0_data,
311 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
312 .ops = &clk_rcg2_ops,
316 static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
319 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
320 .parent_map = gcc_xo_gpll0_map,
321 .clkr.hw.init = &(struct clk_init_data) {
322 .name = "blsp2_qup1_i2c_apps_clk_src",
323 .parent_data = gcc_xo_gpll0_data,
324 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
325 .ops = &clk_rcg2_ops,
329 static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
332 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
333 .parent_map = gcc_xo_gpll0_map,
334 .clkr.hw.init = &(struct clk_init_data) {
335 .name = "blsp2_qup2_i2c_apps_clk_src",
336 .parent_data = gcc_xo_gpll0_data,
337 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
338 .ops = &clk_rcg2_ops,
342 static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
345 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
346 .parent_map = gcc_xo_gpll0_map,
347 .clkr.hw.init = &(struct clk_init_data) {
348 .name = "blsp2_qup3_i2c_apps_clk_src",
349 .parent_data = gcc_xo_gpll0_data,
350 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
351 .ops = &clk_rcg2_ops,
355 static const struct freq_tbl ftbl_blsp_spi_apps_clk_src[] = {
356 F(960000, P_XO, 10, 1, 2),
357 F(4800000, P_XO, 4, 0, 0),
358 F(9600000, P_XO, 2, 0, 0),
359 F(16000000, P_GPLL0, 10, 1, 5),
360 F(19200000, P_XO, 1, 0, 0),
361 F(25000000, P_GPLL0, 16, 1, 2),
362 F(50000000, P_GPLL0, 16, 0, 0),
366 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
370 .freq_tbl = ftbl_blsp_spi_apps_clk_src,
371 .parent_map = gcc_xo_gpll0_map,
372 .clkr.hw.init = &(struct clk_init_data) {
373 .name = "blsp1_qup2_spi_apps_clk_src",
374 .parent_data = gcc_xo_gpll0_data,
375 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
376 .ops = &clk_rcg2_ops,
380 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
384 .freq_tbl = ftbl_blsp_spi_apps_clk_src,
385 .parent_map = gcc_xo_gpll0_map,
386 .clkr.hw.init = &(struct clk_init_data) {
387 .name = "blsp1_qup3_spi_apps_clk_src",
388 .parent_data = gcc_xo_gpll0_data,
389 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
390 .ops = &clk_rcg2_ops,
394 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
398 .freq_tbl = ftbl_blsp_spi_apps_clk_src,
399 .parent_map = gcc_xo_gpll0_map,
400 .clkr.hw.init = &(struct clk_init_data) {
401 .name = "blsp1_qup4_spi_apps_clk_src",
402 .parent_data = gcc_xo_gpll0_data,
403 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
404 .ops = &clk_rcg2_ops,
408 static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
412 .freq_tbl = ftbl_blsp_spi_apps_clk_src,
413 .parent_map = gcc_xo_gpll0_map,
414 .clkr.hw.init = &(struct clk_init_data) {
415 .name = "blsp2_qup1_spi_apps_clk_src",
416 .parent_data = gcc_xo_gpll0_data,
417 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
418 .ops = &clk_rcg2_ops,
422 static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
426 .freq_tbl = ftbl_blsp_spi_apps_clk_src,
427 .parent_map = gcc_xo_gpll0_map,
428 .clkr.hw.init = &(struct clk_init_data) {
429 .name = "blsp2_qup2_spi_apps_clk_src",
430 .parent_data = gcc_xo_gpll0_data,
431 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
432 .ops = &clk_rcg2_ops,
436 static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
440 .freq_tbl = ftbl_blsp_spi_apps_clk_src,
441 .parent_map = gcc_xo_gpll0_map,
442 .clkr.hw.init = &(struct clk_init_data) {
443 .name = "blsp2_qup3_spi_apps_clk_src",
444 .parent_data = gcc_xo_gpll0_data,
445 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
446 .ops = &clk_rcg2_ops,
450 static const struct freq_tbl ftbl_blsp_uart_apps_clk_src[] = {
451 F(3686400, P_GPLL0, 1, 72, 15625),
452 F(7372800, P_GPLL0, 1, 144, 15625),
453 F(14745600, P_GPLL0, 1, 288, 15625),
454 F(16000000, P_GPLL0, 10, 1, 5),
455 F(19200000, P_XO, 1, 0, 0),
456 F(24000000, P_GPLL0, 1, 3, 100),
457 F(25000000, P_GPLL0, 16, 1, 2),
458 F(32000000, P_GPLL0, 1, 1, 25),
459 F(40000000, P_GPLL0, 1, 1, 20),
460 F(46400000, P_GPLL0, 1, 29, 500),
461 F(48000000, P_GPLL0, 1, 3, 50),
462 F(51200000, P_GPLL0, 1, 8, 125),
463 F(56000000, P_GPLL0, 1, 7, 100),
464 F(58982400, P_GPLL0, 1, 1152, 15625),
465 F(60000000, P_GPLL0, 1, 3, 40),
466 F(64000000, P_GPLL0, 1, 2, 25),
470 static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
474 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
475 .parent_map = gcc_xo_gpll0_map,
476 .clkr.hw.init = &(struct clk_init_data) {
477 .name = "blsp1_uart1_apps_clk_src",
478 .parent_data = gcc_xo_gpll0_data,
479 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
480 .ops = &clk_rcg2_ops,
484 static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
488 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
489 .parent_map = gcc_xo_gpll0_map,
490 .clkr.hw.init = &(struct clk_init_data) {
491 .name = "blsp1_uart2_apps_clk_src",
492 .parent_data = gcc_xo_gpll0_data,
493 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
494 .ops = &clk_rcg2_ops,
498 static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
502 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
503 .parent_map = gcc_xo_gpll0_map,
504 .clkr.hw.init = &(struct clk_init_data) {
505 .name = "blsp2_uart1_apps_clk_src",
506 .parent_data = gcc_xo_gpll0_data,
507 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
508 .ops = &clk_rcg2_ops,
512 static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
516 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
517 .parent_map = gcc_xo_gpll0_map,
518 .clkr.hw.init = &(struct clk_init_data) {
519 .name = "blsp2_uart2_apps_clk_src",
520 .parent_data = gcc_xo_gpll0_data,
521 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
522 .ops = &clk_rcg2_ops,
526 static const struct parent_map gcc_byte0_map[] = {
528 { P_DSI0PLL_BYTE, 1 },
531 static const struct clk_parent_data gcc_byte_data[] = {
533 { .index = DT_DSI0PLL_BYTE },
536 static struct clk_rcg2 byte0_clk_src = {
539 .parent_map = gcc_byte0_map,
540 .clkr.hw.init = &(struct clk_init_data) {
541 .name = "byte0_clk_src",
542 .parent_data = gcc_byte_data,
543 .num_parents = ARRAY_SIZE(gcc_byte_data),
544 .ops = &clk_byte2_ops,
545 .flags = CLK_SET_RATE_PARENT,
549 static const struct freq_tbl ftbl_camss_gp_clk_src[] = {
550 F(100000000, P_GPLL0, 8, 0, 0),
551 F(160000000, P_GPLL0, 5, 0, 0),
552 F(200000000, P_GPLL0, 4, 0, 0),
556 static struct clk_rcg2 camss_gp0_clk_src = {
560 .freq_tbl = ftbl_camss_gp_clk_src,
561 .parent_map = gcc_xo_gpll0_gpll6_sleep_map,
562 .clkr.hw.init = &(struct clk_init_data) {
563 .name = "camss_gp0_clk_src",
564 .parent_data = gcc_xo_gpll0_gpll6_sleep_data,
565 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
566 .ops = &clk_rcg2_ops,
570 static struct clk_rcg2 camss_gp1_clk_src = {
574 .freq_tbl = ftbl_camss_gp_clk_src,
575 .parent_map = gcc_xo_gpll0_gpll6_sleep_map,
576 .clkr.hw.init = &(struct clk_init_data) {
577 .name = "camss_gp1_clk_src",
578 .parent_data = gcc_xo_gpll0_gpll6_sleep_data,
579 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
580 .ops = &clk_rcg2_ops,
584 static const struct freq_tbl ftbl_camss_top_ahb_clk_src[] = {
585 F(40000000, P_GPLL0, 10, 1, 2),
586 F(61540000, P_GPLL0, 13, 0, 0),
587 F(80000000, P_GPLL0, 10, 0, 0),
591 static struct clk_rcg2 camss_top_ahb_clk_src = {
594 .freq_tbl = ftbl_camss_top_ahb_clk_src,
595 .parent_map = gcc_xo_gpll0_map,
596 .clkr.hw.init = &(struct clk_init_data) {
597 .name = "camss_top_ahb_clk_src",
598 .parent_data = gcc_xo_gpll0_data,
599 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
600 .ops = &clk_rcg2_ops,
604 static const struct freq_tbl ftbl_cci_clk_src[] = {
605 F(19200000, P_XO, 1, 0, 0),
606 F(37500000, P_GPLL0, 1, 3, 64),
610 static struct clk_rcg2 cci_clk_src = {
614 .freq_tbl = ftbl_cci_clk_src,
615 .parent_map = gcc_xo_gpll0_out_aux_map,
616 .clkr.hw.init = &(struct clk_init_data) {
617 .name = "cci_clk_src",
618 .parent_data = gcc_xo_gpll0_data,
619 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
620 .ops = &clk_rcg2_ops,
624 static const struct parent_map gcc_cpp_map[] = {
630 static const struct clk_parent_data gcc_cpp_data[] = {
632 { .hw = &gpll0.clkr.hw },
636 static const struct freq_tbl ftbl_cpp_clk_src[] = {
637 F(133330000, P_GPLL0, 6, 0, 0),
638 F(160000000, P_GPLL0, 5, 0, 0),
639 F(266670000, P_GPLL0, 3, 0, 0),
640 F(308570000, P_GPLL0, 3.5, 0, 0),
641 F(320000000, P_GPLL0, 2.5, 0, 0),
642 F(360000000, P_GPLL6, 3, 0, 0),
646 static struct clk_rcg2 cpp_clk_src = {
649 .freq_tbl = ftbl_cpp_clk_src,
650 .parent_map = gcc_cpp_map,
651 .clkr.hw.init = &(struct clk_init_data) {
652 .name = "cpp_clk_src",
653 .parent_data = gcc_cpp_data,
654 .num_parents = ARRAY_SIZE(gcc_cpp_data),
655 .ops = &clk_rcg2_ops,
659 static const struct freq_tbl ftbl_crypto_clk_src[] = {
660 F(50000000, P_GPLL0, 16, 0, 0),
661 F(80000000, P_GPLL0, 10, 0, 0),
662 F(100000000, P_GPLL0, 8, 0, 0),
663 F(160000000, P_GPLL0, 5, 0, 0),
667 static struct clk_rcg2 crypto_clk_src = {
670 .freq_tbl = ftbl_crypto_clk_src,
671 .parent_map = gcc_xo_gpll0_map,
672 .clkr.hw.init = &(struct clk_init_data) {
673 .name = "crypto_clk_src",
674 .parent_data = gcc_xo_gpll0_data,
675 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
676 .ops = &clk_rcg2_ops,
680 static const struct freq_tbl ftbl_csi_clk_src[] = {
681 F(100000000, P_GPLL0, 8, 0, 0),
682 F(160000000, P_GPLL0, 5, 0, 0),
683 F(200000000, P_GPLL0, 4, 0, 0),
687 static struct clk_rcg2 csi0_clk_src = {
690 .freq_tbl = ftbl_csi_clk_src,
691 .parent_map = gcc_xo_gpll0_map,
692 .clkr.hw.init = &(struct clk_init_data) {
693 .name = "csi0_clk_src",
694 .parent_data = gcc_xo_gpll0_data,
695 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
696 .ops = &clk_rcg2_ops,
700 static struct clk_rcg2 csi1_clk_src = {
703 .freq_tbl = ftbl_csi_clk_src,
704 .parent_map = gcc_xo_gpll0_map,
705 .clkr.hw.init = &(struct clk_init_data) {
706 .name = "csi1_clk_src",
707 .parent_data = gcc_xo_gpll0_data,
708 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
709 .ops = &clk_rcg2_ops,
713 static struct clk_rcg2 csi2_clk_src = {
716 .freq_tbl = ftbl_csi_clk_src,
717 .parent_map = gcc_xo_gpll0_map,
718 .clkr.hw.init = &(struct clk_init_data) {
719 .name = "csi2_clk_src",
720 .parent_data = gcc_xo_gpll0_data,
721 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
722 .ops = &clk_rcg2_ops,
726 static const struct freq_tbl ftbl_csi_phytimer_clk_src[] = {
727 F(100000000, P_GPLL0, 8, 0, 0),
728 F(160000000, P_GPLL0, 5, 0, 0),
729 F(200000000, P_GPLL0, 4, 0, 0),
730 F(266670000, P_GPLL0, 3, 0, 0),
734 static struct clk_rcg2 csi0phytimer_clk_src = {
737 .freq_tbl = ftbl_csi_phytimer_clk_src,
738 .parent_map = gcc_xo_gpll0_map,
739 .clkr.hw.init = &(struct clk_init_data) {
740 .name = "csi0phytimer_clk_src",
741 .parent_data = gcc_xo_gpll0_data,
742 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
743 .ops = &clk_rcg2_ops,
747 static struct clk_rcg2 csi1phytimer_clk_src = {
750 .freq_tbl = ftbl_csi_phytimer_clk_src,
751 .parent_map = gcc_xo_gpll0_map,
752 .clkr.hw.init = &(struct clk_init_data) {
753 .name = "csi1phytimer_clk_src",
754 .parent_data = gcc_xo_gpll0_data,
755 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
756 .ops = &clk_rcg2_ops,
760 static const struct freq_tbl ftbl_esc0_1_clk_src[] = {
761 F(19200000, P_XO, 1, 0, 0),
765 static struct clk_rcg2 esc0_clk_src = {
768 .freq_tbl = ftbl_esc0_1_clk_src,
769 .parent_map = gcc_xo_gpll0_out_aux_map,
770 .clkr.hw.init = &(struct clk_init_data) {
771 .name = "esc0_clk_src",
772 .parent_data = gcc_xo_gpll0_data,
773 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
774 .ops = &clk_rcg2_ops,
778 static const struct parent_map gcc_gfx3d_map[] = {
785 static const struct parent_map gcc_gfx3d_map_qm215[] = {
792 static const struct clk_parent_data gcc_gfx3d_data[] = {
794 { .hw = &gpll0.clkr.hw },
795 { .hw = &gpll3.clkr.hw },
799 static const struct freq_tbl ftbl_gfx3d_clk_src[] = {
800 F(19200000, P_XO, 1, 0, 0),
801 F(50000000, P_GPLL0, 16, 0, 0),
802 F(80000000, P_GPLL0, 10, 0, 0),
803 F(100000000, P_GPLL0, 8, 0, 0),
804 F(160000000, P_GPLL0, 5, 0, 0),
805 F(200000000, P_GPLL0, 4, 0, 0),
806 F(228570000, P_GPLL0, 3.5, 0, 0),
807 F(240000000, P_GPLL6, 4.5, 0, 0),
808 F(266670000, P_GPLL0, 3, 0, 0),
809 F(270000000, P_GPLL6, 4, 0, 0),
810 F(320000000, P_GPLL0, 2.5, 0, 0),
811 F(400000000, P_GPLL0, 2, 0, 0),
812 F(465000000, P_GPLL3, 1, 0, 0),
813 F(484800000, P_GPLL3, 1, 0, 0),
814 F(500000000, P_GPLL3, 1, 0, 0),
815 F(523200000, P_GPLL3, 1, 0, 0),
816 F(550000000, P_GPLL3, 1, 0, 0),
817 F(598000000, P_GPLL3, 1, 0, 0),
821 static struct clk_rcg2 gfx3d_clk_src = {
824 .freq_tbl = ftbl_gfx3d_clk_src,
825 .parent_map = gcc_gfx3d_map,
826 .clkr.hw.init = &(struct clk_init_data) {
827 .name = "gfx3d_clk_src",
828 .parent_data = gcc_gfx3d_data,
829 .num_parents = ARRAY_SIZE(gcc_gfx3d_data),
830 .ops = &clk_rcg2_ops,
831 .flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
835 static const struct freq_tbl ftbl_gp_clk_src[] = {
836 F(19200000, P_XO, 1, 0, 0),
840 static struct clk_rcg2 gp1_clk_src = {
844 .freq_tbl = ftbl_gp_clk_src,
845 .parent_map = gcc_xo_gpll0_gpll6_sleep_map,
846 .clkr.hw.init = &(struct clk_init_data) {
847 .name = "gp1_clk_src",
848 .parent_data = gcc_xo_gpll0_gpll6_sleep_data,
849 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
850 .ops = &clk_rcg2_ops,
854 static struct clk_rcg2 gp2_clk_src = {
858 .freq_tbl = ftbl_gp_clk_src,
859 .parent_map = gcc_xo_gpll0_gpll6_sleep_map,
860 .clkr.hw.init = &(struct clk_init_data) {
861 .name = "gp2_clk_src",
862 .parent_data = gcc_xo_gpll0_gpll6_sleep_data,
863 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
864 .ops = &clk_rcg2_ops,
868 static struct clk_rcg2 gp3_clk_src = {
872 .freq_tbl = ftbl_gp_clk_src,
873 .parent_map = gcc_xo_gpll0_gpll6_sleep_map,
874 .clkr.hw.init = &(struct clk_init_data) {
875 .name = "gp3_clk_src",
876 .parent_data = gcc_xo_gpll0_gpll6_sleep_data,
877 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
878 .ops = &clk_rcg2_ops,
882 static const struct freq_tbl ftbl_jpeg0_clk_src[] = {
883 F(133330000, P_GPLL0, 6, 0, 0),
884 F(266670000, P_GPLL0, 3, 0, 0),
885 F(320000000, P_GPLL0, 2.5, 0, 0),
889 static struct clk_rcg2 jpeg0_clk_src = {
892 .freq_tbl = ftbl_jpeg0_clk_src,
893 .parent_map = gcc_xo_gpll0_map,
894 .clkr.hw.init = &(struct clk_init_data) {
895 .name = "jpeg0_clk_src",
896 .parent_data = gcc_xo_gpll0_data,
897 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
898 .ops = &clk_rcg2_ops,
902 static const struct freq_tbl ftbl_mclk_clk_src[] = {
903 F(19200000, P_XO, 1, 0, 0),
904 F(24000000, P_GPLL6, 1, 1, 45),
905 F(66667000, P_GPLL0, 12, 0, 0),
909 static struct clk_rcg2 mclk0_clk_src = {
913 .freq_tbl = ftbl_mclk_clk_src,
914 .parent_map = gcc_xo_gpll0_gpll6_sleep_map,
915 .clkr.hw.init = &(struct clk_init_data) {
916 .name = "mclk0_clk_src",
917 .parent_data = gcc_xo_gpll0_gpll6_sleep_data,
918 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
919 .ops = &clk_rcg2_ops,
923 static struct clk_rcg2 mclk1_clk_src = {
927 .freq_tbl = ftbl_mclk_clk_src,
928 .parent_map = gcc_xo_gpll0_gpll6_sleep_map,
929 .clkr.hw.init = &(struct clk_init_data) {
930 .name = "mclk1_clk_src",
931 .parent_data = gcc_xo_gpll0_gpll6_sleep_data,
932 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
933 .ops = &clk_rcg2_ops,
937 static struct clk_rcg2 mclk2_clk_src = {
941 .freq_tbl = ftbl_mclk_clk_src,
942 .parent_map = gcc_xo_gpll0_gpll6_sleep_map,
943 .clkr.hw.init = &(struct clk_init_data) {
944 .name = "mclk2_clk_src",
945 .parent_data = gcc_xo_gpll0_gpll6_sleep_data,
946 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_sleep_data),
947 .ops = &clk_rcg2_ops,
951 static const struct freq_tbl ftbl_mdp_clk_src[] = {
952 F(50000000, P_GPLL0, 16, 0, 0),
953 F(80000000, P_GPLL0, 10, 0, 0),
954 F(100000000, P_GPLL0, 8, 0, 0),
955 F(145450000, P_GPLL0, 5.5, 0, 0),
956 F(160000000, P_GPLL0, 5, 0, 0),
957 F(177780000, P_GPLL0, 4.5, 0, 0),
958 F(200000000, P_GPLL0, 4, 0, 0),
959 F(266670000, P_GPLL0, 3, 0, 0),
960 F(320000000, P_GPLL0, 2.5, 0, 0),
964 static struct clk_rcg2 mdp_clk_src = {
967 .freq_tbl = ftbl_mdp_clk_src,
968 .parent_map = gcc_xo_gpll0_map,
969 .clkr.hw.init = &(struct clk_init_data) {
970 .name = "mdp_clk_src",
971 .parent_data = gcc_xo_gpll0_data,
972 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
973 .ops = &clk_rcg2_ops,
977 static const struct parent_map gcc_pclk_map[] = {
982 static const struct clk_parent_data gcc_pclk_data[] = {
984 { .index = DT_DSI0PLL },
987 static struct clk_rcg2 pclk0_clk_src = {
991 .parent_map = gcc_pclk_map,
992 .clkr.hw.init = &(struct clk_init_data) {
993 .name = "pclk0_clk_src",
994 .parent_data = gcc_pclk_data,
995 .num_parents = ARRAY_SIZE(gcc_pclk_data),
996 .ops = &clk_pixel_ops,
997 .flags = CLK_SET_RATE_PARENT,
1001 static const struct freq_tbl ftbl_pdm2_clk_src[] = {
1002 F(64000000, P_GPLL0, 12.5, 0, 0),
1006 static struct clk_rcg2 pdm2_clk_src = {
1007 .cmd_rcgr = 0x44010,
1009 .freq_tbl = ftbl_pdm2_clk_src,
1010 .parent_map = gcc_xo_gpll0_map,
1011 .clkr.hw.init = &(struct clk_init_data) {
1012 .name = "pdm2_clk_src",
1013 .parent_data = gcc_xo_gpll0_data,
1014 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
1015 .ops = &clk_rcg2_ops,
1019 static const struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = {
1020 F(100000000, P_GPLL0, 8, 0, 0),
1021 F(200000000, P_GPLL0, 4, 0, 0),
1025 static struct clk_rcg2 sdcc1_ice_core_clk_src = {
1026 .cmd_rcgr = 0x5d000,
1028 .freq_tbl = ftbl_sdcc1_ice_core_clk_src,
1029 .parent_map = gcc_xo_gpll0_map,
1030 .clkr.hw.init = &(struct clk_init_data) {
1031 .name = "sdcc1_ice_core_clk_src",
1032 .parent_data = gcc_xo_gpll0_data,
1033 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
1034 .ops = &clk_rcg2_ops,
1038 static const struct parent_map gcc_sdcc1_apps_map[] = {
1044 static const struct clk_parent_data gcc_sdcc1_apss_data[] = {
1046 { .hw = &gpll0.clkr.hw },
1047 { .hw = &gpll4.clkr.hw },
1050 static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
1051 F(144000, P_XO, 16, 3, 25),
1052 F(400000, P_XO, 12, 1, 4),
1053 F(20000000, P_GPLL0, 10, 1, 4),
1054 F(25000000, P_GPLL0, 16, 1, 2),
1055 F(50000000, P_GPLL0, 16, 0, 0),
1056 F(100000000, P_GPLL0, 8, 0, 0),
1057 F(177770000, P_GPLL0, 4.5, 0, 0),
1058 F(192000000, P_GPLL4, 6, 0, 0),
1059 F(200000000, P_GPLL0, 4, 0, 0),
1060 F(384000000, P_GPLL4, 3, 0, 0),
1064 static struct clk_rcg2 sdcc1_apps_clk_src = {
1065 .cmd_rcgr = 0x42004,
1068 .freq_tbl = ftbl_sdcc1_apps_clk_src,
1069 .parent_map = gcc_sdcc1_apps_map,
1070 .clkr.hw.init = &(struct clk_init_data) {
1071 .name = "sdcc1_apps_clk_src",
1072 .parent_data = gcc_sdcc1_apss_data,
1073 .num_parents = ARRAY_SIZE(gcc_sdcc1_apss_data),
1074 .ops = &clk_rcg2_floor_ops,
1078 static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = {
1079 F(144000, P_XO, 16, 3, 25),
1080 F(400000, P_XO, 12, 1, 4),
1081 F(20000000, P_GPLL0, 10, 1, 4),
1082 F(25000000, P_GPLL0, 16, 1, 2),
1083 F(50000000, P_GPLL0, 16, 0, 0),
1084 F(100000000, P_GPLL0, 8, 0, 0),
1085 F(177770000, P_GPLL0, 4.5, 0, 0),
1086 F(200000000, P_GPLL0, 4, 0, 0),
1090 static struct clk_rcg2 sdcc2_apps_clk_src = {
1091 .cmd_rcgr = 0x43004,
1094 .freq_tbl = ftbl_sdcc2_apps_clk_src,
1095 .parent_map = gcc_xo_gpll0_map,
1096 .clkr.hw.init = &(struct clk_init_data) {
1097 .name = "sdcc2_apps_clk_src",
1098 .parent_data = gcc_xo_gpll0_data,
1099 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
1100 .ops = &clk_rcg2_floor_ops,
1104 static const struct freq_tbl ftbl_usb_hs_system_clk_src[] = {
1105 F(80000000, P_GPLL0, 10, 0, 0),
1106 F(100000000, P_GPLL0, 8, 0, 0),
1107 F(133330000, P_GPLL0, 6, 0, 0),
1108 F(177780000, P_GPLL0, 4.5, 0, 0),
1112 static struct clk_rcg2 usb_hs_system_clk_src = {
1113 .cmd_rcgr = 0x41010,
1115 .parent_map = gcc_xo_gpll0_map,
1116 .freq_tbl = ftbl_usb_hs_system_clk_src,
1117 .clkr.hw.init = &(struct clk_init_data){
1118 .name = "usb_hs_system_clk_src",
1119 .parent_data = gcc_xo_gpll0_data,
1120 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
1121 .ops = &clk_rcg2_ops,
1125 static const struct freq_tbl ftbl_vcodec0_clk_src[] = {
1126 F(133330000, P_GPLL0, 6, 0, 0),
1127 F(180000000, P_GPLL6, 6, 0, 0),
1128 F(228570000, P_GPLL0, 3.5, 0, 0),
1129 F(266670000, P_GPLL0, 3, 0, 0),
1130 F(308570000, P_GPLL6, 3.5, 0, 0),
1131 F(329140000, P_GPLL4, 3.5, 0, 0),
1132 F(360000000, P_GPLL6, 3, 0, 0),
1136 static struct clk_rcg2 vcodec0_clk_src = {
1137 .cmd_rcgr = 0x4c000,
1139 .freq_tbl = ftbl_vcodec0_clk_src,
1140 .parent_map = gcc_xo_gpll0_gpll6_gpll4_map,
1141 .clkr.hw.init = &(struct clk_init_data) {
1142 .name = "vcodec0_clk_src",
1143 .parent_data = gcc_xo_gpll0_gpll6_gpll4_data,
1144 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_gpll4_data),
1145 .ops = &clk_rcg2_ops,
1149 static const struct freq_tbl ftbl_vfe_clk_src[] = {
1150 F(50000000, P_GPLL0, 16, 0, 0),
1151 F(80000000, P_GPLL0, 10, 0, 0),
1152 F(100000000, P_GPLL0, 8, 0, 0),
1153 F(133330000, P_GPLL0, 6, 0, 0),
1154 F(160000000, P_GPLL0, 5, 0, 0),
1155 F(200000000, P_GPLL0, 4, 0, 0),
1156 F(266670000, P_GPLL0, 3, 0, 0),
1157 F(308570000, P_GPLL6, 3.5, 0, 0),
1158 F(320000000, P_GPLL0, 2.5, 0, 0),
1159 F(329140000, P_GPLL4, 3.5, 0, 0),
1160 F(360000000, P_GPLL6, 3, 0, 0),
1164 static struct clk_rcg2 vfe0_clk_src = {
1165 .cmd_rcgr = 0x58000,
1167 .freq_tbl = ftbl_vfe_clk_src,
1168 .parent_map = gcc_xo_gpll0_gpll6_gpll4_map,
1169 .clkr.hw.init = &(struct clk_init_data) {
1170 .name = "vfe0_clk_src",
1171 .parent_data = gcc_xo_gpll0_gpll6_gpll4_data,
1172 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_gpll4_data),
1173 .ops = &clk_rcg2_ops,
1177 static struct clk_rcg2 vfe1_clk_src = {
1178 .cmd_rcgr = 0x58054,
1180 .freq_tbl = ftbl_vfe_clk_src,
1181 .parent_map = gcc_xo_gpll0_gpll6_gpll4_map,
1182 .clkr.hw.init = &(struct clk_init_data) {
1183 .name = "vfe1_clk_src",
1184 .parent_data = gcc_xo_gpll0_gpll6_gpll4_data,
1185 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_gpll4_data),
1186 .ops = &clk_rcg2_ops,
1190 static const struct freq_tbl ftbl_vsync_clk_src[] = {
1191 F(19200000, P_XO, 1, 0, 0),
1195 static struct clk_rcg2 vsync_clk_src = {
1196 .cmd_rcgr = 0x4d02c,
1198 .freq_tbl = ftbl_vsync_clk_src,
1199 .parent_map = gcc_xo_gpll0_out_aux_map,
1200 .clkr.hw.init = &(struct clk_init_data) {
1201 .name = "vsync_clk_src",
1202 .parent_data = gcc_xo_gpll0_data,
1203 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
1204 .ops = &clk_rcg2_ops,
1208 static struct clk_branch gcc_apss_tcu_clk = {
1209 .halt_reg = 0x12018,
1210 .halt_check = BRANCH_HALT_VOTED,
1212 .enable_reg = 0x4500c,
1213 .enable_mask = BIT(1),
1214 .hw.init = &(struct clk_init_data) {
1215 .name = "gcc_apss_tcu_clk",
1216 .ops = &clk_branch2_ops,
1221 static struct clk_branch gcc_bimc_gfx_clk = {
1222 .halt_reg = 0x59034,
1223 .halt_check = BRANCH_HALT,
1225 .enable_reg = 0x59034,
1226 .enable_mask = BIT(0),
1227 .hw.init = &(struct clk_init_data) {
1228 .name = "gcc_bimc_gfx_clk",
1229 .ops = &clk_branch2_ops,
1234 static struct clk_branch gcc_bimc_gpu_clk = {
1235 .halt_reg = 0x59030,
1236 .halt_check = BRANCH_HALT,
1238 .enable_reg = 0x59030,
1239 .enable_mask = BIT(0),
1240 .hw.init = &(struct clk_init_data) {
1241 .name = "gcc_bimc_gpu_clk",
1242 .ops = &clk_branch2_ops,
1247 static struct clk_branch gcc_blsp1_ahb_clk = {
1248 .halt_reg = 0x01008,
1249 .halt_check = BRANCH_HALT_VOTED,
1251 .enable_reg = 0x45004,
1252 .enable_mask = BIT(10),
1253 .hw.init = &(struct clk_init_data) {
1254 .name = "gcc_blsp1_ahb_clk",
1255 .ops = &clk_branch2_ops,
1260 static struct clk_branch gcc_blsp2_ahb_clk = {
1261 .halt_reg = 0x0b008,
1262 .halt_check = BRANCH_HALT_VOTED,
1264 .enable_reg = 0x45004,
1265 .enable_mask = BIT(20),
1266 .hw.init = &(struct clk_init_data) {
1267 .name = "gcc_blsp2_ahb_clk",
1268 .ops = &clk_branch2_ops,
1273 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1274 .halt_reg = 0x03010,
1275 .halt_check = BRANCH_HALT,
1277 .enable_reg = 0x03010,
1278 .enable_mask = BIT(0),
1279 .hw.init = &(struct clk_init_data) {
1280 .name = "gcc_blsp1_qup2_i2c_apps_clk",
1281 .parent_hws = (const struct clk_hw*[]){
1282 &blsp1_qup2_i2c_apps_clk_src.clkr.hw,
1285 .ops = &clk_branch2_ops,
1286 .flags = CLK_SET_RATE_PARENT,
1291 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1292 .halt_reg = 0x04020,
1293 .halt_check = BRANCH_HALT,
1295 .enable_reg = 0x04020,
1296 .enable_mask = BIT(0),
1297 .hw.init = &(struct clk_init_data) {
1298 .name = "gcc_blsp1_qup3_i2c_apps_clk",
1299 .parent_hws = (const struct clk_hw*[]){
1300 &blsp1_qup3_i2c_apps_clk_src.clkr.hw,
1303 .ops = &clk_branch2_ops,
1304 .flags = CLK_SET_RATE_PARENT,
1309 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1310 .halt_reg = 0x05020,
1311 .halt_check = BRANCH_HALT,
1313 .enable_reg = 0x05020,
1314 .enable_mask = BIT(0),
1315 .hw.init = &(struct clk_init_data) {
1316 .name = "gcc_blsp1_qup4_i2c_apps_clk",
1317 .parent_hws = (const struct clk_hw*[]){
1318 &blsp1_qup4_i2c_apps_clk_src.clkr.hw,
1321 .ops = &clk_branch2_ops,
1322 .flags = CLK_SET_RATE_PARENT,
1327 static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
1328 .halt_reg = 0x0c008,
1329 .halt_check = BRANCH_HALT,
1331 .enable_reg = 0x0c008,
1332 .enable_mask = BIT(0),
1333 .hw.init = &(struct clk_init_data) {
1334 .name = "gcc_blsp2_qup1_i2c_apps_clk",
1335 .parent_hws = (const struct clk_hw*[]){
1336 &blsp2_qup1_i2c_apps_clk_src.clkr.hw,
1339 .ops = &clk_branch2_ops,
1340 .flags = CLK_SET_RATE_PARENT,
1345 static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
1346 .halt_reg = 0x0d010,
1347 .halt_check = BRANCH_HALT,
1349 .enable_reg = 0x0d010,
1350 .enable_mask = BIT(0),
1351 .hw.init = &(struct clk_init_data) {
1352 .name = "gcc_blsp2_qup2_i2c_apps_clk",
1353 .parent_hws = (const struct clk_hw*[]){
1354 &blsp2_qup2_i2c_apps_clk_src.clkr.hw,
1357 .ops = &clk_branch2_ops,
1358 .flags = CLK_SET_RATE_PARENT,
1363 static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
1364 .halt_reg = 0x0f020,
1365 .halt_check = BRANCH_HALT,
1367 .enable_reg = 0x0f020,
1368 .enable_mask = BIT(0),
1369 .hw.init = &(struct clk_init_data) {
1370 .name = "gcc_blsp2_qup3_i2c_apps_clk",
1371 .parent_hws = (const struct clk_hw*[]){
1372 &blsp2_qup3_i2c_apps_clk_src.clkr.hw,
1375 .ops = &clk_branch2_ops,
1376 .flags = CLK_SET_RATE_PARENT,
1381 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1382 .halt_reg = 0x0300c,
1383 .halt_check = BRANCH_HALT,
1385 .enable_reg = 0x0300c,
1386 .enable_mask = BIT(0),
1387 .hw.init = &(struct clk_init_data) {
1388 .name = "gcc_blsp1_qup2_spi_apps_clk",
1389 .parent_hws = (const struct clk_hw*[]){
1390 &blsp1_qup2_spi_apps_clk_src.clkr.hw,
1393 .ops = &clk_branch2_ops,
1394 .flags = CLK_SET_RATE_PARENT,
1399 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1400 .halt_reg = 0x0401c,
1401 .halt_check = BRANCH_HALT,
1403 .enable_reg = 0x0401c,
1404 .enable_mask = BIT(0),
1405 .hw.init = &(struct clk_init_data) {
1406 .name = "gcc_blsp1_qup3_spi_apps_clk",
1407 .parent_hws = (const struct clk_hw*[]){
1408 &blsp1_qup3_spi_apps_clk_src.clkr.hw,
1411 .ops = &clk_branch2_ops,
1412 .flags = CLK_SET_RATE_PARENT,
1417 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1418 .halt_reg = 0x0501c,
1419 .halt_check = BRANCH_HALT,
1421 .enable_reg = 0x0501c,
1422 .enable_mask = BIT(0),
1423 .hw.init = &(struct clk_init_data) {
1424 .name = "gcc_blsp1_qup4_spi_apps_clk",
1425 .parent_hws = (const struct clk_hw*[]){
1426 &blsp1_qup4_spi_apps_clk_src.clkr.hw,
1429 .ops = &clk_branch2_ops,
1430 .flags = CLK_SET_RATE_PARENT,
1435 static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
1436 .halt_reg = 0x0c004,
1437 .halt_check = BRANCH_HALT,
1439 .enable_reg = 0x0c004,
1440 .enable_mask = BIT(0),
1441 .hw.init = &(struct clk_init_data) {
1442 .name = "gcc_blsp2_qup1_spi_apps_clk",
1443 .parent_hws = (const struct clk_hw*[]){
1444 &blsp2_qup1_spi_apps_clk_src.clkr.hw,
1447 .ops = &clk_branch2_ops,
1448 .flags = CLK_SET_RATE_PARENT,
1453 static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
1454 .halt_reg = 0x0d00c,
1455 .halt_check = BRANCH_HALT,
1457 .enable_reg = 0x0d00c,
1458 .enable_mask = BIT(0),
1459 .hw.init = &(struct clk_init_data) {
1460 .name = "gcc_blsp2_qup2_spi_apps_clk",
1461 .parent_hws = (const struct clk_hw*[]){
1462 &blsp2_qup2_spi_apps_clk_src.clkr.hw,
1465 .ops = &clk_branch2_ops,
1466 .flags = CLK_SET_RATE_PARENT,
1471 static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
1472 .halt_reg = 0x0f01c,
1473 .halt_check = BRANCH_HALT,
1475 .enable_reg = 0x0f01c,
1476 .enable_mask = BIT(0),
1477 .hw.init = &(struct clk_init_data) {
1478 .name = "gcc_blsp2_qup3_spi_apps_clk",
1479 .parent_hws = (const struct clk_hw*[]){
1480 &blsp2_qup3_spi_apps_clk_src.clkr.hw,
1483 .ops = &clk_branch2_ops,
1484 .flags = CLK_SET_RATE_PARENT,
1489 static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1490 .halt_reg = 0x0203c,
1491 .halt_check = BRANCH_HALT,
1493 .enable_reg = 0x0203c,
1494 .enable_mask = BIT(0),
1495 .hw.init = &(struct clk_init_data) {
1496 .name = "gcc_blsp1_uart1_apps_clk",
1497 .parent_hws = (const struct clk_hw*[]){
1498 &blsp1_uart1_apps_clk_src.clkr.hw,
1501 .ops = &clk_branch2_ops,
1502 .flags = CLK_SET_RATE_PARENT,
1507 static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1508 .halt_reg = 0x0302c,
1509 .halt_check = BRANCH_HALT,
1511 .enable_reg = 0x0302c,
1512 .enable_mask = BIT(0),
1513 .hw.init = &(struct clk_init_data) {
1514 .name = "gcc_blsp1_uart2_apps_clk",
1515 .parent_hws = (const struct clk_hw*[]){
1516 &blsp1_uart2_apps_clk_src.clkr.hw,
1519 .ops = &clk_branch2_ops,
1520 .flags = CLK_SET_RATE_PARENT,
1525 static struct clk_branch gcc_blsp2_uart1_apps_clk = {
1526 .halt_reg = 0x0c03c,
1527 .halt_check = BRANCH_HALT,
1529 .enable_reg = 0x0c03c,
1530 .enable_mask = BIT(0),
1531 .hw.init = &(struct clk_init_data) {
1532 .name = "gcc_blsp2_uart1_apps_clk",
1533 .parent_hws = (const struct clk_hw*[]){
1534 &blsp2_uart1_apps_clk_src.clkr.hw,
1537 .ops = &clk_branch2_ops,
1538 .flags = CLK_SET_RATE_PARENT,
1543 static struct clk_branch gcc_blsp2_uart2_apps_clk = {
1544 .halt_reg = 0x0d02c,
1545 .halt_check = BRANCH_HALT,
1547 .enable_reg = 0x0d02c,
1548 .enable_mask = BIT(0),
1549 .hw.init = &(struct clk_init_data) {
1550 .name = "gcc_blsp2_uart2_apps_clk",
1551 .parent_hws = (const struct clk_hw*[]){
1552 &blsp2_uart2_apps_clk_src.clkr.hw,
1555 .ops = &clk_branch2_ops,
1556 .flags = CLK_SET_RATE_PARENT,
1561 static struct clk_branch gcc_boot_rom_ahb_clk = {
1562 .halt_reg = 0x1300c,
1563 .halt_check = BRANCH_HALT_VOTED,
1565 .enable_reg = 0x45004,
1566 .enable_mask = BIT(7),
1567 .hw.init = &(struct clk_init_data) {
1568 .name = "gcc_boot_rom_ahb_clk",
1569 .ops = &clk_branch2_ops,
1574 static struct clk_branch gcc_camss_ahb_clk = {
1575 .halt_reg = 0x56004,
1576 .halt_check = BRANCH_HALT,
1578 .enable_reg = 0x56004,
1579 .enable_mask = BIT(0),
1580 .hw.init = &(struct clk_init_data) {
1581 .name = "gcc_camss_ahb_clk",
1582 .ops = &clk_branch2_ops,
1587 static struct clk_branch gcc_camss_cci_ahb_clk = {
1588 .halt_reg = 0x5101c,
1589 .halt_check = BRANCH_HALT,
1591 .enable_reg = 0x5101c,
1592 .enable_mask = BIT(0),
1593 .hw.init = &(struct clk_init_data) {
1594 .name = "gcc_camss_cci_ahb_clk",
1595 .parent_hws = (const struct clk_hw*[]){
1596 &camss_top_ahb_clk_src.clkr.hw,
1599 .ops = &clk_branch2_ops,
1600 .flags = CLK_SET_RATE_PARENT,
1605 static struct clk_branch gcc_camss_cci_clk = {
1606 .halt_reg = 0x51018,
1607 .halt_check = BRANCH_HALT,
1609 .enable_reg = 0x51018,
1610 .enable_mask = BIT(0),
1611 .hw.init = &(struct clk_init_data) {
1612 .name = "gcc_camss_cci_clk",
1613 .parent_hws = (const struct clk_hw*[]){
1614 &cci_clk_src.clkr.hw,
1617 .ops = &clk_branch2_ops,
1618 .flags = CLK_SET_RATE_PARENT,
1623 static struct clk_branch gcc_camss_cpp_ahb_clk = {
1624 .halt_reg = 0x58040,
1625 .halt_check = BRANCH_HALT,
1627 .enable_reg = 0x58040,
1628 .enable_mask = BIT(0),
1629 .hw.init = &(struct clk_init_data) {
1630 .name = "gcc_camss_cpp_ahb_clk",
1631 .parent_hws = (const struct clk_hw*[]){
1632 &camss_top_ahb_clk_src.clkr.hw,
1635 .ops = &clk_branch2_ops,
1636 .flags = CLK_SET_RATE_PARENT,
1641 static struct clk_branch gcc_camss_cpp_clk = {
1642 .halt_reg = 0x5803c,
1643 .halt_check = BRANCH_HALT,
1645 .enable_reg = 0x5803c,
1646 .enable_mask = BIT(0),
1647 .hw.init = &(struct clk_init_data) {
1648 .name = "gcc_camss_cpp_clk",
1649 .parent_hws = (const struct clk_hw*[]){
1650 &cpp_clk_src.clkr.hw,
1653 .ops = &clk_branch2_ops,
1654 .flags = CLK_SET_RATE_PARENT,
1659 static struct clk_branch gcc_camss_csi0_ahb_clk = {
1660 .halt_reg = 0x4e040,
1661 .halt_check = BRANCH_HALT,
1663 .enable_reg = 0x4e040,
1664 .enable_mask = BIT(0),
1665 .hw.init = &(struct clk_init_data) {
1666 .name = "gcc_camss_csi0_ahb_clk",
1667 .parent_hws = (const struct clk_hw*[]){
1668 &camss_top_ahb_clk_src.clkr.hw,
1671 .ops = &clk_branch2_ops,
1672 .flags = CLK_SET_RATE_PARENT,
1677 static struct clk_branch gcc_camss_csi1_ahb_clk = {
1678 .halt_reg = 0x4f040,
1679 .halt_check = BRANCH_HALT,
1681 .enable_reg = 0x4f040,
1682 .enable_mask = BIT(0),
1683 .hw.init = &(struct clk_init_data) {
1684 .name = "gcc_camss_csi1_ahb_clk",
1685 .parent_hws = (const struct clk_hw*[]){
1686 &camss_top_ahb_clk_src.clkr.hw,
1689 .ops = &clk_branch2_ops,
1690 .flags = CLK_SET_RATE_PARENT,
1695 static struct clk_branch gcc_camss_csi2_ahb_clk = {
1696 .halt_reg = 0x3c040,
1697 .halt_check = BRANCH_HALT,
1699 .enable_reg = 0x3c040,
1700 .enable_mask = BIT(0),
1701 .hw.init = &(struct clk_init_data) {
1702 .name = "gcc_camss_csi2_ahb_clk",
1703 .parent_hws = (const struct clk_hw*[]){
1704 &camss_top_ahb_clk_src.clkr.hw,
1707 .ops = &clk_branch2_ops,
1708 .flags = CLK_SET_RATE_PARENT,
1713 static struct clk_branch gcc_camss_csi0_clk = {
1714 .halt_reg = 0x4e03c,
1715 .halt_check = BRANCH_HALT,
1717 .enable_reg = 0x4e03c,
1718 .enable_mask = BIT(0),
1719 .hw.init = &(struct clk_init_data) {
1720 .name = "gcc_camss_csi0_clk",
1721 .parent_hws = (const struct clk_hw*[]){
1722 &csi0_clk_src.clkr.hw,
1725 .ops = &clk_branch2_ops,
1726 .flags = CLK_SET_RATE_PARENT,
1731 static struct clk_branch gcc_camss_csi1_clk = {
1732 .halt_reg = 0x4f03c,
1733 .halt_check = BRANCH_HALT,
1735 .enable_reg = 0x4f03c,
1736 .enable_mask = BIT(0),
1737 .hw.init = &(struct clk_init_data) {
1738 .name = "gcc_camss_csi1_clk",
1739 .parent_hws = (const struct clk_hw*[]){
1740 &csi1_clk_src.clkr.hw,
1743 .ops = &clk_branch2_ops,
1744 .flags = CLK_SET_RATE_PARENT,
1749 static struct clk_branch gcc_camss_csi2_clk = {
1750 .halt_reg = 0x3c03c,
1751 .halt_check = BRANCH_HALT,
1753 .enable_reg = 0x3c03c,
1754 .enable_mask = BIT(0),
1755 .hw.init = &(struct clk_init_data) {
1756 .name = "gcc_camss_csi2_clk",
1757 .parent_hws = (const struct clk_hw*[]){
1758 &csi2_clk_src.clkr.hw,
1761 .ops = &clk_branch2_ops,
1762 .flags = CLK_SET_RATE_PARENT,
1767 static struct clk_branch gcc_camss_csi0phy_clk = {
1768 .halt_reg = 0x4e048,
1769 .halt_check = BRANCH_HALT,
1771 .enable_reg = 0x4e048,
1772 .enable_mask = BIT(0),
1773 .hw.init = &(struct clk_init_data) {
1774 .name = "gcc_camss_csi0phy_clk",
1775 .parent_hws = (const struct clk_hw*[]){
1776 &csi0_clk_src.clkr.hw,
1779 .ops = &clk_branch2_ops,
1780 .flags = CLK_SET_RATE_PARENT,
1785 static struct clk_branch gcc_camss_csi1phy_clk = {
1786 .halt_reg = 0x4f048,
1787 .halt_check = BRANCH_HALT,
1789 .enable_reg = 0x4f048,
1790 .enable_mask = BIT(0),
1791 .hw.init = &(struct clk_init_data) {
1792 .name = "gcc_camss_csi1phy_clk",
1793 .parent_hws = (const struct clk_hw*[]){
1794 &csi1_clk_src.clkr.hw,
1797 .ops = &clk_branch2_ops,
1798 .flags = CLK_SET_RATE_PARENT,
1803 static struct clk_branch gcc_camss_csi2phy_clk = {
1804 .halt_reg = 0x3c048,
1805 .halt_check = BRANCH_HALT,
1807 .enable_reg = 0x3c048,
1808 .enable_mask = BIT(0),
1809 .hw.init = &(struct clk_init_data) {
1810 .name = "gcc_camss_csi2phy_clk",
1811 .parent_hws = (const struct clk_hw*[]){
1812 &csi2_clk_src.clkr.hw,
1815 .ops = &clk_branch2_ops,
1816 .flags = CLK_SET_RATE_PARENT,
1821 static struct clk_branch gcc_camss_csi0phytimer_clk = {
1822 .halt_reg = 0x4e01c,
1823 .halt_check = BRANCH_HALT,
1825 .enable_reg = 0x4e01c,
1826 .enable_mask = BIT(0),
1827 .hw.init = &(struct clk_init_data) {
1828 .name = "gcc_camss_csi0phytimer_clk",
1829 .parent_hws = (const struct clk_hw*[]){
1830 &csi0phytimer_clk_src.clkr.hw,
1833 .ops = &clk_branch2_ops,
1834 .flags = CLK_SET_RATE_PARENT,
1839 static struct clk_branch gcc_camss_csi1phytimer_clk = {
1840 .halt_reg = 0x4f01c,
1841 .halt_check = BRANCH_HALT,
1843 .enable_reg = 0x4f01c,
1844 .enable_mask = BIT(0),
1845 .hw.init = &(struct clk_init_data) {
1846 .name = "gcc_camss_csi1phytimer_clk",
1847 .parent_hws = (const struct clk_hw*[]){
1848 &csi1phytimer_clk_src.clkr.hw,
1851 .ops = &clk_branch2_ops,
1852 .flags = CLK_SET_RATE_PARENT,
1857 static struct clk_branch gcc_camss_csi0pix_clk = {
1858 .halt_reg = 0x4e058,
1859 .halt_check = BRANCH_HALT,
1861 .enable_reg = 0x4e058,
1862 .enable_mask = BIT(0),
1863 .hw.init = &(struct clk_init_data) {
1864 .name = "gcc_camss_csi0pix_clk",
1865 .parent_hws = (const struct clk_hw*[]){
1866 &csi0_clk_src.clkr.hw,
1869 .ops = &clk_branch2_ops,
1870 .flags = CLK_SET_RATE_PARENT,
1875 static struct clk_branch gcc_camss_csi1pix_clk = {
1876 .halt_reg = 0x4f058,
1877 .halt_check = BRANCH_HALT,
1879 .enable_reg = 0x4f058,
1880 .enable_mask = BIT(0),
1881 .hw.init = &(struct clk_init_data) {
1882 .name = "gcc_camss_csi1pix_clk",
1883 .parent_hws = (const struct clk_hw*[]){
1884 &csi1_clk_src.clkr.hw,
1887 .ops = &clk_branch2_ops,
1888 .flags = CLK_SET_RATE_PARENT,
1893 static struct clk_branch gcc_camss_csi2pix_clk = {
1894 .halt_reg = 0x3c058,
1895 .halt_check = BRANCH_HALT,
1897 .enable_reg = 0x3c058,
1898 .enable_mask = BIT(0),
1899 .hw.init = &(struct clk_init_data) {
1900 .name = "gcc_camss_csi2pix_clk",
1901 .parent_hws = (const struct clk_hw*[]){
1902 &csi2_clk_src.clkr.hw,
1905 .ops = &clk_branch2_ops,
1906 .flags = CLK_SET_RATE_PARENT,
1911 static struct clk_branch gcc_camss_csi0rdi_clk = {
1912 .halt_reg = 0x4e050,
1913 .halt_check = BRANCH_HALT,
1915 .enable_reg = 0x4e050,
1916 .enable_mask = BIT(0),
1917 .hw.init = &(struct clk_init_data) {
1918 .name = "gcc_camss_csi0rdi_clk",
1919 .parent_hws = (const struct clk_hw*[]){
1920 &csi0_clk_src.clkr.hw,
1923 .ops = &clk_branch2_ops,
1924 .flags = CLK_SET_RATE_PARENT,
1929 static struct clk_branch gcc_camss_csi1rdi_clk = {
1930 .halt_reg = 0x4f050,
1931 .halt_check = BRANCH_HALT,
1933 .enable_reg = 0x4f050,
1934 .enable_mask = BIT(0),
1935 .hw.init = &(struct clk_init_data) {
1936 .name = "gcc_camss_csi1rdi_clk",
1937 .parent_hws = (const struct clk_hw*[]){
1938 &csi1_clk_src.clkr.hw,
1941 .ops = &clk_branch2_ops,
1942 .flags = CLK_SET_RATE_PARENT,
1947 static struct clk_branch gcc_camss_csi2rdi_clk = {
1948 .halt_reg = 0x3c050,
1949 .halt_check = BRANCH_HALT,
1951 .enable_reg = 0x3c050,
1952 .enable_mask = BIT(0),
1953 .hw.init = &(struct clk_init_data) {
1954 .name = "gcc_camss_csi2rdi_clk",
1955 .parent_hws = (const struct clk_hw*[]){
1956 &csi2_clk_src.clkr.hw,
1959 .ops = &clk_branch2_ops,
1960 .flags = CLK_SET_RATE_PARENT,
1965 static struct clk_branch gcc_camss_csi_vfe0_clk = {
1966 .halt_reg = 0x58050,
1967 .halt_check = BRANCH_HALT,
1969 .enable_reg = 0x58050,
1970 .enable_mask = BIT(0),
1971 .hw.init = &(struct clk_init_data) {
1972 .name = "gcc_camss_csi_vfe0_clk",
1973 .parent_hws = (const struct clk_hw*[]){
1974 &vfe0_clk_src.clkr.hw,
1977 .ops = &clk_branch2_ops,
1978 .flags = CLK_SET_RATE_PARENT,
1983 static struct clk_branch gcc_camss_csi_vfe1_clk = {
1984 .halt_reg = 0x58074,
1985 .halt_check = BRANCH_HALT,
1987 .enable_reg = 0x58074,
1988 .enable_mask = BIT(0),
1989 .hw.init = &(struct clk_init_data) {
1990 .name = "gcc_camss_csi_vfe1_clk",
1991 .parent_hws = (const struct clk_hw*[]){
1992 &vfe1_clk_src.clkr.hw,
1995 .ops = &clk_branch2_ops,
1996 .flags = CLK_SET_RATE_PARENT,
2001 static struct clk_branch gcc_camss_gp0_clk = {
2002 .halt_reg = 0x54018,
2003 .halt_check = BRANCH_HALT,
2005 .enable_reg = 0x54018,
2006 .enable_mask = BIT(0),
2007 .hw.init = &(struct clk_init_data) {
2008 .name = "gcc_camss_gp0_clk",
2009 .parent_hws = (const struct clk_hw*[]){
2010 &camss_gp0_clk_src.clkr.hw,
2013 .ops = &clk_branch2_ops,
2014 .flags = CLK_SET_RATE_PARENT,
2019 static struct clk_branch gcc_camss_gp1_clk = {
2020 .halt_reg = 0x55018,
2021 .halt_check = BRANCH_HALT,
2023 .enable_reg = 0x55018,
2024 .enable_mask = BIT(0),
2025 .hw.init = &(struct clk_init_data) {
2026 .name = "gcc_camss_gp1_clk",
2027 .parent_hws = (const struct clk_hw*[]){
2028 &camss_gp1_clk_src.clkr.hw,
2031 .ops = &clk_branch2_ops,
2032 .flags = CLK_SET_RATE_PARENT,
2037 static struct clk_branch gcc_camss_ispif_ahb_clk = {
2038 .halt_reg = 0x50004,
2039 .halt_check = BRANCH_HALT,
2041 .enable_reg = 0x50004,
2042 .enable_mask = BIT(0),
2043 .hw.init = &(struct clk_init_data) {
2044 .name = "gcc_camss_ispif_ahb_clk",
2045 .parent_hws = (const struct clk_hw*[]){
2046 &camss_top_ahb_clk_src.clkr.hw,
2049 .ops = &clk_branch2_ops,
2050 .flags = CLK_SET_RATE_PARENT,
2055 static struct clk_branch gcc_camss_jpeg0_clk = {
2056 .halt_reg = 0x57020,
2057 .halt_check = BRANCH_HALT,
2059 .enable_reg = 0x57020,
2060 .enable_mask = BIT(0),
2061 .hw.init = &(struct clk_init_data) {
2062 .name = "gcc_camss_jpeg0_clk",
2063 .parent_hws = (const struct clk_hw*[]){
2064 &jpeg0_clk_src.clkr.hw,
2067 .ops = &clk_branch2_ops,
2068 .flags = CLK_SET_RATE_PARENT,
2073 static struct clk_branch gcc_camss_jpeg_ahb_clk = {
2074 .halt_reg = 0x57024,
2075 .halt_check = BRANCH_HALT,
2077 .enable_reg = 0x57024,
2078 .enable_mask = BIT(0),
2079 .hw.init = &(struct clk_init_data) {
2080 .name = "gcc_camss_jpeg_ahb_clk",
2081 .parent_hws = (const struct clk_hw*[]){
2082 &camss_top_ahb_clk_src.clkr.hw,
2085 .ops = &clk_branch2_ops,
2086 .flags = CLK_SET_RATE_PARENT,
2091 static struct clk_branch gcc_camss_jpeg_axi_clk = {
2092 .halt_reg = 0x57028,
2093 .halt_check = BRANCH_HALT,
2095 .enable_reg = 0x57028,
2096 .enable_mask = BIT(0),
2097 .hw.init = &(struct clk_init_data) {
2098 .name = "gcc_camss_jpeg_axi_clk",
2099 .ops = &clk_branch2_ops,
2104 static struct clk_branch gcc_camss_mclk0_clk = {
2105 .halt_reg = 0x52018,
2106 .halt_check = BRANCH_HALT,
2108 .enable_reg = 0x52018,
2109 .enable_mask = BIT(0),
2110 .hw.init = &(struct clk_init_data) {
2111 .name = "gcc_camss_mclk0_clk",
2112 .parent_hws = (const struct clk_hw*[]){
2113 &mclk0_clk_src.clkr.hw,
2116 .ops = &clk_branch2_ops,
2117 .flags = CLK_SET_RATE_PARENT,
2122 static struct clk_branch gcc_camss_mclk1_clk = {
2123 .halt_reg = 0x53018,
2124 .halt_check = BRANCH_HALT,
2126 .enable_reg = 0x53018,
2127 .enable_mask = BIT(0),
2128 .hw.init = &(struct clk_init_data) {
2129 .name = "gcc_camss_mclk1_clk",
2130 .parent_hws = (const struct clk_hw*[]){
2131 &mclk1_clk_src.clkr.hw,
2134 .ops = &clk_branch2_ops,
2135 .flags = CLK_SET_RATE_PARENT,
2140 static struct clk_branch gcc_camss_mclk2_clk = {
2141 .halt_reg = 0x5c018,
2142 .halt_check = BRANCH_HALT,
2144 .enable_reg = 0x5c018,
2145 .enable_mask = BIT(0),
2146 .hw.init = &(struct clk_init_data) {
2147 .name = "gcc_camss_mclk2_clk",
2148 .parent_hws = (const struct clk_hw*[]){
2149 &mclk2_clk_src.clkr.hw,
2152 .ops = &clk_branch2_ops,
2153 .flags = CLK_SET_RATE_PARENT,
2158 static struct clk_branch gcc_camss_micro_ahb_clk = {
2159 .halt_reg = 0x5600c,
2160 .halt_check = BRANCH_HALT,
2162 .enable_reg = 0x5600c,
2163 .enable_mask = BIT(0),
2164 .hw.init = &(struct clk_init_data) {
2165 .name = "gcc_camss_micro_ahb_clk",
2166 .parent_hws = (const struct clk_hw*[]){
2167 &camss_top_ahb_clk_src.clkr.hw,
2170 .ops = &clk_branch2_ops,
2171 .flags = CLK_SET_RATE_PARENT,
2176 static struct clk_branch gcc_camss_top_ahb_clk = {
2177 .halt_reg = 0x5a014,
2178 .halt_check = BRANCH_HALT,
2180 .enable_reg = 0x5a014,
2181 .enable_mask = BIT(0),
2182 .hw.init = &(struct clk_init_data) {
2183 .name = "gcc_camss_top_ahb_clk",
2184 .parent_hws = (const struct clk_hw*[]){
2185 &camss_top_ahb_clk_src.clkr.hw,
2188 .ops = &clk_branch2_ops,
2189 .flags = CLK_SET_RATE_PARENT,
2194 static struct clk_branch gcc_camss_vfe0_ahb_clk = {
2195 .halt_reg = 0x58044,
2196 .halt_check = BRANCH_HALT,
2198 .enable_reg = 0x58044,
2199 .enable_mask = BIT(0),
2200 .hw.init = &(struct clk_init_data) {
2201 .name = "gcc_camss_vfe0_ahb_clk",
2202 .parent_hws = (const struct clk_hw*[]){
2203 &camss_top_ahb_clk_src.clkr.hw,
2206 .ops = &clk_branch2_ops,
2207 .flags = CLK_SET_RATE_PARENT,
2212 static struct clk_branch gcc_camss_vfe0_axi_clk = {
2213 .halt_reg = 0x58048,
2214 .halt_check = BRANCH_HALT,
2216 .enable_reg = 0x58048,
2217 .enable_mask = BIT(0),
2218 .hw.init = &(struct clk_init_data) {
2219 .name = "gcc_camss_vfe0_axi_clk",
2220 .ops = &clk_branch2_ops,
2225 static struct clk_branch gcc_camss_vfe0_clk = {
2226 .halt_reg = 0x58038,
2227 .halt_check = BRANCH_HALT,
2229 .enable_reg = 0x58038,
2230 .enable_mask = BIT(0),
2231 .hw.init = &(struct clk_init_data) {
2232 .name = "gcc_camss_vfe0_clk",
2233 .parent_hws = (const struct clk_hw*[]){
2234 &vfe0_clk_src.clkr.hw,
2237 .ops = &clk_branch2_ops,
2238 .flags = CLK_SET_RATE_PARENT,
2243 static struct clk_branch gcc_camss_vfe1_ahb_clk = {
2244 .halt_reg = 0x58060,
2245 .halt_check = BRANCH_HALT,
2247 .enable_reg = 0x58060,
2248 .enable_mask = BIT(0),
2249 .hw.init = &(struct clk_init_data) {
2250 .name = "gcc_camss_vfe1_ahb_clk",
2251 .parent_hws = (const struct clk_hw*[]){
2252 &camss_top_ahb_clk_src.clkr.hw,
2255 .ops = &clk_branch2_ops,
2256 .flags = CLK_SET_RATE_PARENT,
2261 static struct clk_branch gcc_camss_vfe1_axi_clk = {
2262 .halt_reg = 0x58068,
2263 .halt_check = BRANCH_HALT,
2265 .enable_reg = 0x58068,
2266 .enable_mask = BIT(0),
2267 .hw.init = &(struct clk_init_data) {
2268 .name = "gcc_camss_vfe1_axi_clk",
2269 .ops = &clk_branch2_ops,
2274 static struct clk_branch gcc_camss_vfe1_clk = {
2275 .halt_reg = 0x5805c,
2276 .halt_check = BRANCH_HALT,
2278 .enable_reg = 0x5805c,
2279 .enable_mask = BIT(0),
2280 .hw.init = &(struct clk_init_data) {
2281 .name = "gcc_camss_vfe1_clk",
2282 .parent_hws = (const struct clk_hw*[]){
2283 &vfe1_clk_src.clkr.hw,
2286 .ops = &clk_branch2_ops,
2287 .flags = CLK_SET_RATE_PARENT,
2292 static struct clk_branch gcc_cpp_tbu_clk = {
2293 .halt_reg = 0x12040,
2294 .halt_check = BRANCH_HALT_VOTED,
2296 .enable_reg = 0x4500c,
2297 .enable_mask = BIT(14),
2298 .hw.init = &(struct clk_init_data) {
2299 .name = "gcc_cpp_tbu_clk",
2300 .ops = &clk_branch2_ops,
2305 static struct clk_branch gcc_crypto_ahb_clk = {
2306 .halt_reg = 0x16024,
2307 .halt_check = BRANCH_HALT_VOTED,
2309 .enable_reg = 0x45004,
2310 .enable_mask = BIT(0),
2311 .hw.init = &(struct clk_init_data) {
2312 .name = "gcc_crypto_ahb_clk",
2313 .ops = &clk_branch2_ops,
2318 static struct clk_branch gcc_crypto_axi_clk = {
2319 .halt_reg = 0x16020,
2320 .halt_check = BRANCH_HALT_VOTED,
2322 .enable_reg = 0x45004,
2323 .enable_mask = BIT(1),
2324 .hw.init = &(struct clk_init_data) {
2325 .name = "gcc_crypto_axi_clk",
2326 .ops = &clk_branch2_ops,
2331 static struct clk_branch gcc_crypto_clk = {
2332 .halt_reg = 0x1601c,
2333 .halt_check = BRANCH_HALT_VOTED,
2335 .enable_reg = 0x45004,
2336 .enable_mask = BIT(2),
2337 .hw.init = &(struct clk_init_data) {
2338 .name = "gcc_crypto_clk",
2339 .parent_hws = (const struct clk_hw*[]){
2340 &crypto_clk_src.clkr.hw,
2343 .ops = &clk_branch2_ops,
2344 .flags = CLK_SET_RATE_PARENT,
2349 static struct clk_branch gcc_dcc_clk = {
2350 .halt_reg = 0x77004,
2351 .halt_check = BRANCH_HALT,
2353 .enable_reg = 0x77004,
2354 .enable_mask = BIT(0),
2355 .hw.init = &(struct clk_init_data) {
2356 .name = "gcc_dcc_clk",
2357 .ops = &clk_branch2_ops,
2362 static struct clk_branch gcc_gfx_tbu_clk = {
2363 .halt_reg = 0x12010,
2364 .halt_check = BRANCH_HALT_VOTED,
2366 .enable_reg = 0x4500c,
2367 .enable_mask = BIT(3),
2368 .hw.init = &(struct clk_init_data){
2369 .name = "gcc_gfx_tbu_clk",
2370 .ops = &clk_branch2_ops,
2375 static struct clk_branch gcc_gfx_tcu_clk = {
2376 .halt_reg = 0x12020,
2377 .halt_check = BRANCH_HALT_VOTED,
2379 .enable_reg = 0x4500c,
2380 .enable_mask = BIT(2),
2381 .hw.init = &(struct clk_init_data){
2382 .name = "gcc_gfx_tcu_clk",
2383 .ops = &clk_branch2_ops,
2388 static struct clk_branch gcc_gtcu_ahb_clk = {
2389 .halt_reg = 0x12044,
2390 .halt_check = BRANCH_HALT_VOTED,
2392 .enable_reg = 0x4500c,
2393 .enable_mask = BIT(13),
2394 .hw.init = &(struct clk_init_data){
2395 .name = "gcc_gtcu_ahb_clk",
2396 .ops = &clk_branch2_ops,
2401 static struct clk_branch gcc_gp1_clk = {
2402 .halt_reg = 0x08000,
2403 .halt_check = BRANCH_HALT,
2405 .enable_reg = 0x08000,
2406 .enable_mask = BIT(0),
2407 .hw.init = &(struct clk_init_data) {
2408 .name = "gcc_gp1_clk",
2409 .parent_hws = (const struct clk_hw*[]){
2410 &gp1_clk_src.clkr.hw,
2413 .ops = &clk_branch2_ops,
2414 .flags = CLK_SET_RATE_PARENT,
2419 static struct clk_branch gcc_gp2_clk = {
2420 .halt_reg = 0x09000,
2421 .halt_check = BRANCH_HALT,
2423 .enable_reg = 0x09000,
2424 .enable_mask = BIT(0),
2425 .hw.init = &(struct clk_init_data) {
2426 .name = "gcc_gp2_clk",
2427 .parent_hws = (const struct clk_hw*[]){
2428 &gp2_clk_src.clkr.hw,
2431 .ops = &clk_branch2_ops,
2432 .flags = CLK_SET_RATE_PARENT,
2437 static struct clk_branch gcc_gp3_clk = {
2438 .halt_reg = 0x0a000,
2439 .halt_check = BRANCH_HALT,
2441 .enable_reg = 0x0a000,
2442 .enable_mask = BIT(0),
2443 .hw.init = &(struct clk_init_data) {
2444 .name = "gcc_gp3_clk",
2445 .parent_hws = (const struct clk_hw*[]){
2446 &gp3_clk_src.clkr.hw,
2449 .ops = &clk_branch2_ops,
2450 .flags = CLK_SET_RATE_PARENT,
2455 static struct clk_branch gcc_jpeg_tbu_clk = {
2456 .halt_reg = 0x12034,
2457 .halt_check = BRANCH_HALT_VOTED,
2459 .enable_reg = 0x4500c,
2460 .enable_mask = BIT(10),
2461 .hw.init = &(struct clk_init_data) {
2462 .name = "gcc_jpeg_tbu_clk",
2463 .ops = &clk_branch2_ops,
2468 static struct clk_branch gcc_mdp_tbu_clk = {
2469 .halt_reg = 0x1201c,
2470 .halt_check = BRANCH_HALT_VOTED,
2472 .enable_reg = 0x4500c,
2473 .enable_mask = BIT(4),
2474 .hw.init = &(struct clk_init_data) {
2475 .name = "gcc_mdp_tbu_clk",
2476 .ops = &clk_branch2_ops,
2481 static struct clk_branch gcc_mdss_ahb_clk = {
2482 .halt_reg = 0x4d07c,
2483 .halt_check = BRANCH_HALT,
2485 .enable_reg = 0x4d07c,
2486 .enable_mask = BIT(0),
2487 .hw.init = &(struct clk_init_data) {
2488 .name = "gcc_mdss_ahb_clk",
2489 .ops = &clk_branch2_ops,
2494 static struct clk_branch gcc_mdss_axi_clk = {
2495 .halt_reg = 0x4d080,
2496 .halt_check = BRANCH_HALT,
2498 .enable_reg = 0x4d080,
2499 .enable_mask = BIT(0),
2500 .hw.init = &(struct clk_init_data) {
2501 .name = "gcc_mdss_axi_clk",
2502 .ops = &clk_branch2_ops,
2507 static struct clk_branch gcc_mdss_byte0_clk = {
2508 .halt_reg = 0x4d094,
2509 .halt_check = BRANCH_HALT,
2511 .enable_reg = 0x4d094,
2512 .enable_mask = BIT(0),
2513 .hw.init = &(struct clk_init_data) {
2514 .name = "gcc_mdss_byte0_clk",
2515 .parent_hws = (const struct clk_hw*[]){
2516 &byte0_clk_src.clkr.hw,
2519 .ops = &clk_branch2_ops,
2520 .flags = CLK_SET_RATE_PARENT,
2525 static struct clk_branch gcc_mdss_esc0_clk = {
2526 .halt_reg = 0x4d098,
2527 .halt_check = BRANCH_HALT,
2529 .enable_reg = 0x4d098,
2530 .enable_mask = BIT(0),
2531 .hw.init = &(struct clk_init_data) {
2532 .name = "gcc_mdss_esc0_clk",
2533 .parent_hws = (const struct clk_hw*[]){
2534 &esc0_clk_src.clkr.hw,
2537 .ops = &clk_branch2_ops,
2538 .flags = CLK_SET_RATE_PARENT,
2543 static struct clk_branch gcc_mdss_mdp_clk = {
2544 .halt_reg = 0x4d088,
2545 .halt_check = BRANCH_HALT,
2547 .enable_reg = 0x4d088,
2548 .enable_mask = BIT(0),
2549 .hw.init = &(struct clk_init_data) {
2550 .name = "gcc_mdss_mdp_clk",
2551 .parent_hws = (const struct clk_hw*[]){
2552 &mdp_clk_src.clkr.hw,
2555 .ops = &clk_branch2_ops,
2556 .flags = CLK_SET_RATE_PARENT,
2561 static struct clk_branch gcc_mdss_pclk0_clk = {
2562 .halt_reg = 0x4d084,
2563 .halt_check = BRANCH_HALT,
2565 .enable_reg = 0x4d084,
2566 .enable_mask = BIT(0),
2567 .hw.init = &(struct clk_init_data) {
2568 .name = "gcc_mdss_pclk0_clk",
2569 .parent_hws = (const struct clk_hw*[]){
2570 &pclk0_clk_src.clkr.hw,
2573 .ops = &clk_branch2_ops,
2574 .flags = CLK_SET_RATE_PARENT,
2579 static struct clk_branch gcc_mdss_vsync_clk = {
2580 .halt_reg = 0x4d090,
2581 .halt_check = BRANCH_HALT,
2583 .enable_reg = 0x4d090,
2584 .enable_mask = BIT(0),
2585 .hw.init = &(struct clk_init_data) {
2586 .name = "gcc_mdss_vsync_clk",
2587 .parent_hws = (const struct clk_hw*[]){
2588 &vsync_clk_src.clkr.hw,
2591 .ops = &clk_branch2_ops,
2592 .flags = CLK_SET_RATE_PARENT,
2597 static struct clk_branch gcc_mss_cfg_ahb_clk = {
2598 .halt_reg = 0x49000,
2599 .halt_check = BRANCH_HALT,
2601 .enable_reg = 0x49000,
2602 .enable_mask = BIT(0),
2603 .hw.init = &(struct clk_init_data) {
2604 .name = "gcc_mss_cfg_ahb_clk",
2605 .ops = &clk_branch2_ops,
2610 static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
2611 .halt_reg = 0x49004,
2612 .halt_check = BRANCH_HALT,
2614 .enable_reg = 0x49004,
2615 .enable_mask = BIT(0),
2616 .hw.init = &(struct clk_init_data) {
2617 .name = "gcc_mss_q6_bimc_axi_clk",
2618 .ops = &clk_branch2_ops,
2623 static struct clk_branch gcc_oxili_ahb_clk = {
2624 .halt_reg = 0x59028,
2625 .halt_check = BRANCH_HALT,
2627 .enable_reg = 0x59028,
2628 .enable_mask = BIT(0),
2629 .hw.init = &(struct clk_init_data) {
2630 .name = "gcc_oxili_ahb_clk",
2631 .ops = &clk_branch2_ops,
2636 static struct clk_branch gcc_oxili_gfx3d_clk = {
2637 .halt_reg = 0x59020,
2638 .halt_check = BRANCH_HALT,
2640 .enable_reg = 0x59020,
2641 .enable_mask = BIT(0),
2642 .hw.init = &(struct clk_init_data) {
2643 .name = "gcc_oxili_gfx3d_clk",
2644 .parent_hws = (const struct clk_hw*[]){
2645 &gfx3d_clk_src.clkr.hw,
2648 .ops = &clk_branch2_ops,
2649 .flags = CLK_SET_RATE_PARENT,
2654 static struct clk_branch gcc_pdm2_clk = {
2655 .halt_reg = 0x4400c,
2656 .halt_check = BRANCH_HALT,
2658 .enable_reg = 0x4400c,
2659 .enable_mask = BIT(0),
2660 .hw.init = &(struct clk_init_data) {
2661 .name = "gcc_pdm2_clk",
2662 .parent_hws = (const struct clk_hw*[]){
2663 &pdm2_clk_src.clkr.hw,
2666 .ops = &clk_branch2_ops,
2667 .flags = CLK_SET_RATE_PARENT,
2672 static struct clk_branch gcc_pdm_ahb_clk = {
2673 .halt_reg = 0x44004,
2674 .halt_check = BRANCH_HALT,
2676 .enable_reg = 0x44004,
2677 .enable_mask = BIT(0),
2678 .hw.init = &(struct clk_init_data) {
2679 .name = "gcc_pdm_ahb_clk",
2680 .ops = &clk_branch2_ops,
2685 static struct clk_branch gcc_prng_ahb_clk = {
2686 .halt_reg = 0x13004,
2687 .halt_check = BRANCH_HALT_VOTED,
2689 .enable_reg = 0x45004,
2690 .enable_mask = BIT(8),
2691 .hw.init = &(struct clk_init_data) {
2692 .name = "gcc_prng_ahb_clk",
2693 .ops = &clk_branch2_ops,
2698 static struct clk_branch gcc_qdss_dap_clk = {
2699 .halt_reg = 0x29084,
2700 .halt_check = BRANCH_HALT_VOTED,
2702 .enable_reg = 0x45004,
2703 .enable_mask = BIT(11),
2704 .hw.init = &(struct clk_init_data) {
2705 .name = "gcc_qdss_dap_clk",
2706 .ops = &clk_branch2_ops,
2711 static struct clk_branch gcc_sdcc1_ice_core_clk = {
2712 .halt_reg = 0x5d014,
2713 .halt_check = BRANCH_HALT,
2715 .enable_reg = 0x5d014,
2716 .enable_mask = BIT(0),
2717 .hw.init = &(struct clk_init_data) {
2718 .name = "gcc_sdcc1_ice_core_clk",
2719 .parent_hws = (const struct clk_hw*[]){
2720 &sdcc1_ice_core_clk_src.clkr.hw,
2723 .ops = &clk_branch2_ops,
2724 .flags = CLK_SET_RATE_PARENT,
2729 static struct clk_branch gcc_sdcc1_ahb_clk = {
2730 .halt_reg = 0x4201c,
2731 .halt_check = BRANCH_HALT,
2733 .enable_reg = 0x4201c,
2734 .enable_mask = BIT(0),
2735 .hw.init = &(struct clk_init_data) {
2736 .name = "gcc_sdcc1_ahb_clk",
2737 .ops = &clk_branch2_ops,
2742 static struct clk_branch gcc_sdcc2_ahb_clk = {
2743 .halt_reg = 0x4301c,
2744 .halt_check = BRANCH_HALT,
2746 .enable_reg = 0x4301c,
2747 .enable_mask = BIT(0),
2748 .hw.init = &(struct clk_init_data) {
2749 .name = "gcc_sdcc2_ahb_clk",
2750 .ops = &clk_branch2_ops,
2755 static struct clk_branch gcc_sdcc1_apps_clk = {
2756 .halt_reg = 0x42018,
2757 .halt_check = BRANCH_HALT,
2759 .enable_reg = 0x42018,
2760 .enable_mask = BIT(0),
2761 .hw.init = &(struct clk_init_data) {
2762 .name = "gcc_sdcc1_apps_clk",
2763 .parent_hws = (const struct clk_hw*[]){
2764 &sdcc1_apps_clk_src.clkr.hw,
2767 .ops = &clk_branch2_ops,
2768 .flags = CLK_SET_RATE_PARENT,
2773 static struct clk_branch gcc_sdcc2_apps_clk = {
2774 .halt_reg = 0x43018,
2775 .halt_check = BRANCH_HALT,
2777 .enable_reg = 0x43018,
2778 .enable_mask = BIT(0),
2779 .hw.init = &(struct clk_init_data) {
2780 .name = "gcc_sdcc2_apps_clk",
2781 .parent_hws = (const struct clk_hw*[]){
2782 &sdcc2_apps_clk_src.clkr.hw,
2785 .ops = &clk_branch2_ops,
2786 .flags = CLK_SET_RATE_PARENT,
2791 static struct clk_branch gcc_smmu_cfg_clk = {
2792 .halt_reg = 0x12038,
2793 .halt_check = BRANCH_HALT_VOTED,
2795 .enable_reg = 0x4500c,
2796 .enable_mask = BIT(12),
2797 .hw.init = &(struct clk_init_data) {
2798 .name = "gcc_smmu_cfg_clk",
2799 .ops = &clk_branch2_ops,
2804 static struct clk_branch gcc_usb2a_phy_sleep_clk = {
2805 .halt_reg = 0x4102c,
2807 .enable_reg = 0x4102c,
2808 .enable_mask = BIT(0),
2809 .hw.init = &(struct clk_init_data){
2810 .name = "gcc_usb2a_phy_sleep_clk",
2811 .ops = &clk_branch2_ops,
2816 static struct clk_branch gcc_usb_hs_ahb_clk = {
2817 .halt_reg = 0x41008,
2819 .enable_reg = 0x41008,
2820 .enable_mask = BIT(0),
2821 .hw.init = &(struct clk_init_data){
2822 .name = "gcc_usb_hs_ahb_clk",
2823 .ops = &clk_branch2_ops,
2828 static struct clk_branch gcc_usb_hs_phy_cfg_ahb_clk = {
2829 .halt_reg = 0x41030,
2831 .enable_reg = 0x41030,
2832 .enable_mask = BIT(0),
2833 .hw.init = &(struct clk_init_data){
2834 .name = "gcc_usb_hs_phy_cfg_ahb_clk",
2835 .ops = &clk_branch2_ops,
2840 static struct clk_branch gcc_usb_hs_system_clk = {
2841 .halt_reg = 0x41004,
2843 .enable_reg = 0x41004,
2844 .enable_mask = BIT(0),
2845 .hw.init = &(struct clk_init_data){
2846 .name = "gcc_usb_hs_system_clk",
2847 .parent_hws = (const struct clk_hw*[]){
2848 &usb_hs_system_clk_src.clkr.hw,
2851 .flags = CLK_SET_RATE_PARENT,
2852 .ops = &clk_branch2_ops,
2857 static struct clk_branch gcc_venus0_ahb_clk = {
2858 .halt_reg = 0x4c020,
2859 .halt_check = BRANCH_HALT,
2861 .enable_reg = 0x4c020,
2862 .enable_mask = BIT(0),
2863 .hw.init = &(struct clk_init_data) {
2864 .name = "gcc_venus0_ahb_clk",
2865 .ops = &clk_branch2_ops,
2870 static struct clk_branch gcc_venus0_axi_clk = {
2871 .halt_reg = 0x4c024,
2872 .halt_check = BRANCH_HALT,
2874 .enable_reg = 0x4c024,
2875 .enable_mask = BIT(0),
2876 .hw.init = &(struct clk_init_data) {
2877 .name = "gcc_venus0_axi_clk",
2878 .ops = &clk_branch2_ops,
2883 static struct clk_branch gcc_venus0_core0_vcodec0_clk = {
2884 .halt_reg = 0x4c02c,
2885 .halt_check = BRANCH_HALT,
2887 .enable_reg = 0x4c02c,
2888 .enable_mask = BIT(0),
2889 .hw.init = &(struct clk_init_data) {
2890 .name = "gcc_venus0_core0_vcodec0_clk",
2891 .parent_hws = (const struct clk_hw*[]){
2892 &vcodec0_clk_src.clkr.hw,
2895 .ops = &clk_branch2_ops,
2896 .flags = CLK_SET_RATE_PARENT,
2901 static struct clk_branch gcc_venus0_vcodec0_clk = {
2902 .halt_reg = 0x4c01c,
2903 .halt_check = BRANCH_HALT,
2905 .enable_reg = 0x4c01c,
2906 .enable_mask = BIT(0),
2907 .hw.init = &(struct clk_init_data) {
2908 .name = "gcc_venus0_vcodec0_clk",
2909 .parent_hws = (const struct clk_hw*[]){
2910 &vcodec0_clk_src.clkr.hw,
2913 .ops = &clk_branch2_ops,
2914 .flags = CLK_SET_RATE_PARENT,
2919 static struct clk_branch gcc_venus_tbu_clk = {
2920 .halt_reg = 0x12014,
2921 .halt_check = BRANCH_HALT_VOTED,
2923 .enable_reg = 0x4500c,
2924 .enable_mask = BIT(5),
2925 .hw.init = &(struct clk_init_data) {
2926 .name = "gcc_venus_tbu_clk",
2927 .ops = &clk_branch2_ops,
2932 static struct clk_branch gcc_vfe1_tbu_clk = {
2933 .halt_reg = 0x12090,
2934 .halt_check = BRANCH_HALT_VOTED,
2936 .enable_reg = 0x4500c,
2937 .enable_mask = BIT(17),
2938 .hw.init = &(struct clk_init_data) {
2939 .name = "gcc_vfe1_tbu_clk",
2940 .ops = &clk_branch2_ops,
2945 static struct clk_branch gcc_vfe_tbu_clk = {
2946 .halt_reg = 0x1203c,
2947 .halt_check = BRANCH_HALT_VOTED,
2949 .enable_reg = 0x4500c,
2950 .enable_mask = BIT(9),
2951 .hw.init = &(struct clk_init_data) {
2952 .name = "gcc_vfe_tbu_clk",
2953 .ops = &clk_branch2_ops,
2958 static struct gdsc venus_gdsc = {
2960 .cxcs = (unsigned int []){ 0x4c024, 0x4c01c },
2963 .name = "venus_gdsc",
2965 .pwrsts = PWRSTS_OFF_ON,
2968 static struct gdsc venus_core0_gdsc = {
2970 .cxcs = (unsigned int []){ 0x4c02c },
2973 .name = "venus_core0",
2976 .pwrsts = PWRSTS_OFF_ON,
2979 static struct gdsc mdss_gdsc = {
2981 .cxcs = (unsigned int []){ 0x4d080, 0x4d088 },
2984 .name = "mdss_gdsc",
2986 .pwrsts = PWRSTS_OFF_ON,
2989 static struct gdsc jpeg_gdsc = {
2991 .cxcs = (unsigned int []){ 0x57020, 0x57028 },
2994 .name = "jpeg_gdsc",
2996 .pwrsts = PWRSTS_OFF_ON,
2999 static struct gdsc vfe0_gdsc = {
3001 .cxcs = (unsigned int []){ 0x58038, 0x58048, 0x5600c, 0x58050 },
3004 .name = "vfe0_gdsc",
3006 .pwrsts = PWRSTS_OFF_ON,
3009 static struct gdsc vfe1_gdsc = {
3011 .cxcs = (unsigned int []){ 0x5805c, 0x58068, 0x5600c, 0x58074 },
3014 .name = "vfe1_gdsc",
3016 .pwrsts = PWRSTS_OFF_ON,
3019 static struct gdsc oxili_gx_gdsc = {
3021 .clamp_io_ctrl = 0x5b00c,
3022 .cxcs = (unsigned int []){ 0x59000, 0x59020 },
3025 .name = "oxili_gx_gdsc",
3027 .pwrsts = PWRSTS_OFF_ON,
3031 static struct gdsc cpp_gdsc = {
3033 .cxcs = (unsigned int []){ 0x5803c, 0x58064 },
3039 .pwrsts = PWRSTS_OFF_ON,
3042 static struct clk_regmap *gcc_msm8917_clocks[] = {
3043 [GPLL0] = &gpll0.clkr,
3044 [GPLL0_EARLY] = &gpll0_early.clkr,
3045 [GPLL3] = &gpll3.clkr,
3046 [GPLL3_EARLY] = &gpll3_early.clkr,
3047 [GPLL4] = &gpll4.clkr,
3048 [GPLL4_EARLY] = &gpll4_early.clkr,
3050 [GPLL6_EARLY] = &gpll6_early.clkr,
3051 [APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
3052 [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
3053 [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
3054 [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
3055 [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
3056 [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
3057 [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
3058 [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
3059 [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
3060 [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
3061 [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
3062 [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
3063 [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
3064 [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
3065 [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
3066 [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
3067 [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
3068 [BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
3069 [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
3070 [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
3071 [CAMSS_TOP_AHB_CLK_SRC] = &camss_top_ahb_clk_src.clkr,
3072 [CCI_CLK_SRC] = &cci_clk_src.clkr,
3073 [CPP_CLK_SRC] = &cpp_clk_src.clkr,
3074 [CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
3075 [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
3076 [CSI0_CLK_SRC] = &csi0_clk_src.clkr,
3077 [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
3078 [CSI1_CLK_SRC] = &csi1_clk_src.clkr,
3079 [CSI2_CLK_SRC] = &csi2_clk_src.clkr,
3080 [ESC0_CLK_SRC] = &esc0_clk_src.clkr,
3081 [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
3082 [GP1_CLK_SRC] = &gp1_clk_src.clkr,
3083 [GP2_CLK_SRC] = &gp2_clk_src.clkr,
3084 [GP3_CLK_SRC] = &gp3_clk_src.clkr,
3085 [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
3086 [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
3087 [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
3088 [MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,
3089 [MDP_CLK_SRC] = &mdp_clk_src.clkr,
3090 [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
3091 [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
3092 [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
3093 [SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
3094 [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
3095 [USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
3096 [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
3097 [VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
3098 [VFE1_CLK_SRC] = &vfe1_clk_src.clkr,
3099 [VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
3100 [GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr,
3101 [GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
3102 [GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr,
3103 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
3104 [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
3105 [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
3106 [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
3107 [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
3108 [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
3109 [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
3110 [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
3111 [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
3112 [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
3113 [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
3114 [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
3115 [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
3116 [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
3117 [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
3118 [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
3119 [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
3120 [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
3121 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3122 [GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr,
3123 [GCC_CAMSS_CCI_AHB_CLK] = &gcc_camss_cci_ahb_clk.clkr,
3124 [GCC_CAMSS_CCI_CLK] = &gcc_camss_cci_clk.clkr,
3125 [GCC_CAMSS_CPP_AHB_CLK] = &gcc_camss_cpp_ahb_clk.clkr,
3126 [GCC_CAMSS_CPP_CLK] = &gcc_camss_cpp_clk.clkr,
3127 [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
3128 [GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr,
3129 [GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr,
3130 [GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr,
3131 [GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr,
3132 [GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr,
3133 [GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
3134 [GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr,
3135 [GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr,
3136 [GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr,
3137 [GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr,
3138 [GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr,
3139 [GCC_CAMSS_CSI2PHY_CLK] = &gcc_camss_csi2phy_clk.clkr,
3140 [GCC_CAMSS_CSI2PIX_CLK] = &gcc_camss_csi2pix_clk.clkr,
3141 [GCC_CAMSS_CSI2RDI_CLK] = &gcc_camss_csi2rdi_clk.clkr,
3142 [GCC_CAMSS_CSI2_AHB_CLK] = &gcc_camss_csi2_ahb_clk.clkr,
3143 [GCC_CAMSS_CSI2_CLK] = &gcc_camss_csi2_clk.clkr,
3144 [GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr,
3145 [GCC_CAMSS_CSI_VFE1_CLK] = &gcc_camss_csi_vfe1_clk.clkr,
3146 [GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr,
3147 [GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr,
3148 [GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr,
3149 [GCC_CAMSS_JPEG0_CLK] = &gcc_camss_jpeg0_clk.clkr,
3150 [GCC_CAMSS_JPEG_AHB_CLK] = &gcc_camss_jpeg_ahb_clk.clkr,
3151 [GCC_CAMSS_JPEG_AXI_CLK] = &gcc_camss_jpeg_axi_clk.clkr,
3152 [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
3153 [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
3154 [GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr,
3155 [GCC_CAMSS_MICRO_AHB_CLK] = &gcc_camss_micro_ahb_clk.clkr,
3156 [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
3157 [GCC_CAMSS_VFE0_AHB_CLK] = &gcc_camss_vfe0_ahb_clk.clkr,
3158 [GCC_CAMSS_VFE0_AXI_CLK] = &gcc_camss_vfe0_axi_clk.clkr,
3159 [GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr,
3160 [GCC_CAMSS_VFE1_AHB_CLK] = &gcc_camss_vfe1_ahb_clk.clkr,
3161 [GCC_CAMSS_VFE1_AXI_CLK] = &gcc_camss_vfe1_axi_clk.clkr,
3162 [GCC_CAMSS_VFE1_CLK] = &gcc_camss_vfe1_clk.clkr,
3163 [GCC_CPP_TBU_CLK] = &gcc_cpp_tbu_clk.clkr,
3164 [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
3165 [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
3166 [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
3167 [GCC_DCC_CLK] = &gcc_dcc_clk.clkr,
3168 [GCC_GFX_TBU_CLK] = &gcc_gfx_tbu_clk.clkr,
3169 [GCC_GFX_TCU_CLK] = &gcc_gfx_tcu_clk.clkr,
3170 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3171 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3172 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3173 [GCC_GTCU_AHB_CLK] = &gcc_gtcu_ahb_clk.clkr,
3174 [GCC_JPEG_TBU_CLK] = &gcc_jpeg_tbu_clk.clkr,
3175 [GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr,
3176 [GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr,
3177 [GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr,
3178 [GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr,
3179 [GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr,
3180 [GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr,
3181 [GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr,
3182 [GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr,
3183 [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
3184 [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
3185 [GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr,
3186 [GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr,
3187 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3188 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3189 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3190 [GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr,
3191 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
3192 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
3193 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
3194 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3195 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3196 [GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,
3197 [GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
3198 [GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
3199 [GCC_USB_HS_PHY_CFG_AHB_CLK] = &gcc_usb_hs_phy_cfg_ahb_clk.clkr,
3200 [GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
3201 [GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr,
3202 [GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr,
3203 [GCC_VENUS0_CORE0_VCODEC0_CLK] = &gcc_venus0_core0_vcodec0_clk.clkr,
3204 [GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr,
3205 [GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr,
3206 [GCC_VFE1_TBU_CLK] = &gcc_vfe1_tbu_clk.clkr,
3207 [GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr,
3210 static const struct qcom_reset_map gcc_msm8917_resets[] = {
3211 [GCC_CAMSS_MICRO_BCR] = { 0x56008 },
3212 [GCC_MSS_BCR] = { 0x71000 },
3213 [GCC_QUSB2_PHY_BCR] = { 0x4103c },
3214 [GCC_USB_HS_BCR] = { 0x41000 },
3215 [GCC_USB2_HS_PHY_ONLY_BCR] = { 0x41034 },
3218 static const struct regmap_config gcc_msm8917_regmap_config = {
3222 .max_register = 0x80000,
3226 static struct gdsc *gcc_msm8917_gdscs[] = {
3227 [CPP_GDSC] = &cpp_gdsc,
3228 [JPEG_GDSC] = &jpeg_gdsc,
3229 [MDSS_GDSC] = &mdss_gdsc,
3230 [OXILI_GX_GDSC] = &oxili_gx_gdsc,
3231 [VENUS_CORE0_GDSC] = &venus_core0_gdsc,
3232 [VENUS_GDSC] = &venus_gdsc,
3233 [VFE0_GDSC] = &vfe0_gdsc,
3234 [VFE1_GDSC] = &vfe1_gdsc,
3237 static const struct qcom_cc_desc gcc_msm8917_desc = {
3238 .config = &gcc_msm8917_regmap_config,
3239 .clks = gcc_msm8917_clocks,
3240 .num_clks = ARRAY_SIZE(gcc_msm8917_clocks),
3241 .resets = gcc_msm8917_resets,
3242 .num_resets = ARRAY_SIZE(gcc_msm8917_resets),
3243 .gdscs = gcc_msm8917_gdscs,
3244 .num_gdscs = ARRAY_SIZE(gcc_msm8917_gdscs),
3247 static const struct qcom_cc_desc gcc_qm215_desc = {
3248 .config = &gcc_msm8917_regmap_config,
3249 .clks = gcc_msm8917_clocks,
3250 .num_clks = ARRAY_SIZE(gcc_msm8917_clocks),
3251 .resets = gcc_msm8917_resets,
3252 .num_resets = ARRAY_SIZE(gcc_msm8917_resets),
3253 .gdscs = gcc_msm8917_gdscs,
3254 .num_gdscs = ARRAY_SIZE(gcc_msm8917_gdscs),
3257 static int gcc_msm8917_probe(struct platform_device *pdev)
3259 struct regmap *regmap;
3260 const struct qcom_cc_desc *gcc_desc;
3262 gcc_desc = of_device_get_match_data(&pdev->dev);
3264 if (gcc_desc == &gcc_qm215_desc)
3265 gfx3d_clk_src.parent_map = gcc_gfx3d_map_qm215;
3267 regmap = qcom_cc_map(pdev, gcc_desc);
3269 return PTR_ERR(regmap);
3271 clk_alpha_pll_configure(&gpll3_early, regmap, &gpll3_early_config);
3273 return qcom_cc_really_probe(pdev, gcc_desc, regmap);
3276 static const struct of_device_id gcc_msm8917_match_table[] = {
3277 { .compatible = "qcom,gcc-msm8917", .data = &gcc_msm8917_desc },
3278 { .compatible = "qcom,gcc-qm215", .data = &gcc_qm215_desc },
3282 static struct platform_driver gcc_msm8917_driver = {
3283 .probe = gcc_msm8917_probe,
3285 .name = "gcc-msm8917",
3286 .of_match_table = gcc_msm8917_match_table,
3290 static int __init gcc_msm8917_init(void)
3292 return platform_driver_register(&gcc_msm8917_driver);
3294 core_initcall(gcc_msm8917_init);
3296 static void __exit gcc_msm8917_exit(void)
3298 platform_driver_unregister(&gcc_msm8917_driver);
3300 module_exit(gcc_msm8917_exit);
3302 MODULE_DESCRIPTION("Qualcomm GCC MSM8917 Driver");
3303 MODULE_LICENSE("GPL");