1 // SPDX-License-Identifier: GPL-2.0
3 * Qualcomm Global Clock Controller driver for MSM8956/76
5 * Copyright (c) 2016-2021, AngeloGioacchino Del Regno
8 * Driver cleanup and modernization
14 #include <linux/clk-provider.h>
15 #include <linux/err.h>
16 #include <linux/kernel.h>
17 #include <linux/module.h>
19 #include <linux/platform_device.h>
20 #include <linux/regmap.h>
22 #include <dt-bindings/clock/qcom,gcc-msm8976.h>
25 #include "clk-branch.h"
55 static struct clk_pll gpll0 = {
59 .config_reg = 0x21014,
61 .status_reg = 0x2101c,
63 .clkr.hw.init = &(struct clk_init_data){
65 .parent_data = &(const struct clk_parent_data){
73 static struct clk_regmap gpll0_vote = {
74 .enable_reg = 0x45000,
75 .enable_mask = BIT(0),
76 .hw.init = &(struct clk_init_data){
78 .parent_hws = (const struct clk_hw *[]) {
82 /* This clock is required for other ones to function. */
83 .flags = CLK_IS_CRITICAL,
84 .ops = &clk_pll_vote_ops,
88 static struct clk_pll gpll2 = {
92 .config_reg = 0x4a014,
94 .status_reg = 0x4a01c,
96 .clkr.hw.init = &(struct clk_init_data){
98 .parent_data = &(const struct clk_parent_data){
106 static struct clk_regmap gpll2_vote = {
107 .enable_reg = 0x45000,
108 .enable_mask = BIT(2),
109 .hw.init = &(struct clk_init_data){
110 .name = "gpll2_vote",
111 .parent_hws = (const struct clk_hw *[]) {
115 .ops = &clk_pll_vote_ops,
119 static const struct pll_freq_tbl gpll3_freq_tbl[] = {
120 { 1100000000, 57, 7, 24, 0 },
124 static struct clk_pll gpll3 = {
128 .config_reg = 0x22010,
130 .status_reg = 0x22024,
132 .freq_tbl = gpll3_freq_tbl,
133 .clkr.hw.init = &(struct clk_init_data) {
135 .parent_data = &(const struct clk_parent_data){
143 static struct clk_regmap gpll3_vote = {
144 .enable_reg = 0x45000,
145 .enable_mask = BIT(4),
146 .hw.init = &(struct clk_init_data){
147 .name = "gpll3_vote",
148 .parent_hws = (const struct clk_hw *[]) {
152 .ops = &clk_pll_vote_ops,
156 /* GPLL3 at 1100MHz, main output enabled. */
157 static const struct pll_config gpll3_config = {
162 .vco_mask = 0x3 << 20,
164 .pre_div_mask = 0x7 << 12,
166 .post_div_mask = 0x3 << 8,
167 .mn_ena_mask = BIT(24),
168 .main_output_mask = BIT(0),
169 .aux_output_mask = BIT(1),
172 static struct clk_pll gpll4 = {
176 .config_reg = 0x24018,
178 .status_reg = 0x24024,
180 .clkr.hw.init = &(struct clk_init_data){
182 .parent_data = &(const struct clk_parent_data){
190 static struct clk_regmap gpll4_vote = {
191 .enable_reg = 0x45000,
192 .enable_mask = BIT(5),
193 .hw.init = &(struct clk_init_data){
194 .name = "gpll4_vote",
195 .parent_hws = (const struct clk_hw *[]) {
199 .ops = &clk_pll_vote_ops,
203 static struct clk_pll gpll6 = {
208 .config_reg = 0x37014,
209 .status_reg = 0x3701c,
211 .clkr.hw.init = &(struct clk_init_data){
213 .parent_data = &(const struct clk_parent_data){
221 static struct clk_regmap gpll6_vote = {
222 .enable_reg = 0x45000,
223 .enable_mask = BIT(7),
224 .hw.init = &(struct clk_init_data){
225 .name = "gpll6_vote",
226 .parent_hws = (const struct clk_hw *[]) {
230 .ops = &clk_pll_vote_ops,
234 static const struct parent_map gcc_parent_map_1[] = {
236 { P_GPLL0_OUT_MAIN, 1 },
240 static const struct clk_parent_data gcc_parent_data_1[] = {
242 { .hw = &gpll0_vote.hw },
243 { .hw = &gpll4_vote.hw },
246 static const struct parent_map gcc_parent_map_v1_1[] = {
248 { P_GPLL0_OUT_MAIN, 1 },
252 static const struct clk_parent_data gcc_parent_data_v1_1[] = {
254 { .hw = &gpll0_vote.hw },
255 { .hw = &gpll2_vote.hw },
258 static const struct parent_map gcc_parent_map_2[] = {
260 { P_GPLL0_OUT_MAIN, 1 },
265 static const struct clk_parent_data gcc_parent_data_2[] = {
267 { .hw = &gpll0_vote.hw },
268 { .hw = &gpll2_vote.hw },
269 { .hw = &gpll4_vote.hw },
272 static const struct parent_map gcc_parent_map_3[] = {
274 { P_GPLL0_OUT_MAIN, 1 },
279 static const struct clk_parent_data gcc_parent_data_3[] = {
281 { .hw = &gpll0_vote.hw },
282 { .hw = &gpll2_vote.hw },
283 { .hw = &gpll6_vote.hw },
286 static const struct parent_map gcc_parent_map_4[] = {
288 { P_GPLL0_OUT_MAIN, 1 },
291 static const struct parent_map gcc_parent_map_4_fs[] = {
296 static const struct parent_map gcc_parent_map_5[] = {
299 { P_GPLL6_OUT_MAIN, 1 },
302 static const struct clk_parent_data gcc_parent_data_5[] = {
304 { .hw = &gpll4_vote.hw },
305 { .hw = &gpll6_vote.hw },
308 static const struct parent_map gcc_parent_map_6[] = {
310 { P_GPLL0_OUT_MAIN, 1 },
311 { P_GPLL4_OUT_MAIN, 5 },
314 static const struct clk_parent_data gcc_parent_data_6[] = {
316 { .hw = &gpll0_vote.hw },
317 { .hw = &gpll4_vote.hw },
320 static const struct parent_map gcc_parent_map_7_mdp[] = {
323 { P_GPLL0_OUT_MDP, 6 },
326 static const struct clk_parent_data gcc_parent_data_7_mdp[] = {
328 { .hw = &gpll6_vote.hw },
329 { .hw = &gpll0_vote.hw },
332 static const struct parent_map gcc_parent_map_7[] = {
333 { P_GPLL0_OUT_MAIN, 1 },
337 static const struct clk_hw * gcc_parent_hws_7[] = {
342 static const struct parent_map gcc_parent_map_8[] = {
344 { P_GPLL0_OUT_MAIN, 1 },
347 static const struct clk_parent_data gcc_parent_data_4_8[] = {
349 { .hw = &gpll0_vote.hw },
352 static const struct parent_map gcc_parent_map_8_a[] = {
354 { P_GPLL0_OUT_MAIN, 1 },
357 static const struct clk_parent_data gcc_parent_data_8_a[] = {
358 { .fw_name = "xo_a" },
359 { .hw = &gpll0_vote.hw },
362 static const struct parent_map gcc_parent_map_8_gp[] = {
363 { P_GPLL0_OUT_MAIN, 1 },
366 static const struct clk_hw *gcc_parent_hws_8_gp[] = {
370 static const struct parent_map gcc_parent_map_9[] = {
372 { P_GPLL6_OUT_MAIN, 6 },
375 static const struct clk_parent_data gcc_parent_data_9[] = {
377 { .hw = &gpll6_vote.hw },
380 static const struct parent_map gcc_parent_map_10[] = {
384 static const struct clk_parent_data gcc_parent_data_10[] = {
388 static const struct parent_map gcc_parent_map_sdcc_ice[] = {
390 { P_GPLL0_OUT_M, 3 },
393 static const struct parent_map gcc_parent_map_cci[] = {
398 static const struct parent_map gcc_parent_map_cpp[] = {
400 { P_GPLL0_OUT_MAIN, 1 },
404 static const struct parent_map gcc_parent_map_mdss_pix0[] = {
409 static const struct clk_parent_data gcc_parent_data_mdss_pix0[] = {
411 { .fw_name = "dsi0pll" },
414 static const struct parent_map gcc_parent_map_mdss_pix1[] = {
420 static const struct clk_parent_data gcc_parent_data_mdss_pix1[] = {
422 { .fw_name = "dsi0pll" },
423 { .fw_name = "dsi1pll" },
426 static const struct parent_map gcc_parent_map_mdss_byte0[] = {
428 { P_DSI0PLL_BYTE, 1 },
431 static const struct clk_parent_data gcc_parent_data_mdss_byte0[] = {
433 { .fw_name = "dsi0pllbyte" },
436 static const struct parent_map gcc_parent_map_mdss_byte1[] = {
438 { P_DSI0PLL_BYTE, 3 },
439 { P_DSI1PLL_BYTE, 1 },
442 static const struct clk_parent_data gcc_parent_data_mdss_byte1[] = {
444 { .fw_name = "dsi0pllbyte" },
445 { .fw_name = "dsi1pllbyte" },
448 static const struct parent_map gcc_parent_map_gfx3d[] = {
450 { P_GPLL0_OUT_MAIN, 1 },
451 { P_GPLL4_GFX3D, 5 },
452 { P_GPLL6_GFX3D, 3 },
455 static const struct clk_parent_data gcc_parent_data_gfx3d[] = {
457 { .hw = &gpll0_vote.hw },
458 { .hw = &gpll4_vote.hw },
459 { .hw = &gpll6_vote.hw },
462 static const struct freq_tbl ftbl_aps_0_clk_src[] = {
463 F(19200000, P_XO, 1, 0, 0),
464 F(300000000, P_GPLL4_OUT, 4, 0, 0),
465 F(540000000, P_GPLL6_OUT_MAIN, 2, 0, 0),
469 static struct clk_rcg2 aps_0_clk_src = {
472 .parent_map = gcc_parent_map_5,
473 .freq_tbl = ftbl_aps_0_clk_src,
474 .clkr.hw.init = &(struct clk_init_data){
475 .name = "aps_0_clk_src",
476 .parent_data = gcc_parent_data_5,
477 .num_parents = ARRAY_SIZE(gcc_parent_data_5),
478 .ops = &clk_rcg2_ops,
482 static const struct freq_tbl ftbl_aps_1_clk_src[] = {
483 F(19200000, P_XO, 1, 0, 0),
484 F(300000000, P_GPLL4_OUT, 4, 0, 0),
485 F(540000000, P_GPLL6_OUT_MAIN, 2, 0, 0),
489 static struct clk_rcg2 aps_1_clk_src = {
492 .parent_map = gcc_parent_map_5,
493 .freq_tbl = ftbl_aps_1_clk_src,
494 .clkr.hw.init = &(struct clk_init_data){
495 .name = "aps_1_clk_src",
496 .parent_data = gcc_parent_data_5,
497 .num_parents = ARRAY_SIZE(gcc_parent_data_5),
498 .ops = &clk_rcg2_ops,
502 static const struct freq_tbl ftbl_apss_ahb_clk_src[] = {
503 F(19200000, P_XO_A, 1, 0, 0),
504 F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
505 F(88890000, P_GPLL0_OUT_MAIN, 9, 0, 0),
506 F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
510 static struct clk_rcg2 apss_ahb_clk_src = {
513 .parent_map = gcc_parent_map_8_a,
514 .freq_tbl = ftbl_apss_ahb_clk_src,
515 .clkr.hw.init = &(struct clk_init_data){
516 .name = "apss_ahb_clk_src",
517 .parent_data = gcc_parent_data_8_a,
518 .num_parents = ARRAY_SIZE(gcc_parent_data_8_a),
519 .ops = &clk_rcg2_ops,
521 * This clock allows the CPUs to communicate with
522 * the rest of the SoC. Without it, the brain will
523 * operate without the rest of the body.
525 .flags = CLK_IS_CRITICAL,
529 static const struct freq_tbl ftbl_blsp_i2c_apps_clk_src[] = {
530 F(19200000, P_XO, 1, 0, 0),
531 F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
535 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
538 .parent_map = gcc_parent_map_8,
539 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
540 .clkr.hw.init = &(struct clk_init_data){
541 .name = "blsp1_qup1_i2c_apps_clk_src",
542 .parent_data = gcc_parent_data_4_8,
543 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
544 .ops = &clk_rcg2_ops,
548 static const struct freq_tbl ftbl_blsp_spi_apps_clk_src[] = {
549 F(960000, P_XO, 10, 1, 2),
550 F(4800000, P_XO, 4, 0, 0),
551 F(9600000, P_XO, 2, 0, 0),
552 F(16000000, P_GPLL0_OUT_MAIN, 10, 1, 5),
553 F(19200000, P_XO, 1, 0, 0),
554 F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2),
555 F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
559 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
563 .parent_map = gcc_parent_map_8,
564 .freq_tbl = ftbl_blsp_spi_apps_clk_src,
565 .clkr.hw.init = &(struct clk_init_data){
566 .name = "blsp1_qup1_spi_apps_clk_src",
567 .parent_data = gcc_parent_data_4_8,
568 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
569 .ops = &clk_rcg2_ops,
573 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
576 .parent_map = gcc_parent_map_8,
577 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
578 .clkr.hw.init = &(struct clk_init_data){
579 .name = "blsp1_qup2_i2c_apps_clk_src",
580 .parent_data = gcc_parent_data_4_8,
581 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
582 .ops = &clk_rcg2_ops,
586 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
590 .parent_map = gcc_parent_map_8,
591 .freq_tbl = ftbl_blsp_spi_apps_clk_src,
592 .clkr.hw.init = &(struct clk_init_data){
593 .name = "blsp1_qup2_spi_apps_clk_src",
594 .parent_data = gcc_parent_data_4_8,
595 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
596 .ops = &clk_rcg2_ops,
600 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
603 .parent_map = gcc_parent_map_8,
604 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
605 .clkr.hw.init = &(struct clk_init_data){
606 .name = "blsp1_qup3_i2c_apps_clk_src",
607 .parent_data = gcc_parent_data_4_8,
608 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
609 .ops = &clk_rcg2_ops,
613 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
617 .parent_map = gcc_parent_map_8,
618 .freq_tbl = ftbl_blsp_spi_apps_clk_src,
619 .clkr.hw.init = &(struct clk_init_data){
620 .name = "blsp1_qup3_spi_apps_clk_src",
621 .parent_data = gcc_parent_data_4_8,
622 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
623 .ops = &clk_rcg2_ops,
627 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
630 .parent_map = gcc_parent_map_8,
631 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
632 .clkr.hw.init = &(struct clk_init_data){
633 .name = "blsp1_qup4_i2c_apps_clk_src",
634 .parent_data = gcc_parent_data_4_8,
635 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
636 .ops = &clk_rcg2_ops,
640 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
644 .parent_map = gcc_parent_map_8,
645 .freq_tbl = ftbl_blsp_spi_apps_clk_src,
646 .clkr.hw.init = &(struct clk_init_data){
647 .name = "blsp1_qup4_spi_apps_clk_src",
648 .parent_data = gcc_parent_data_4_8,
649 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
650 .ops = &clk_rcg2_ops,
654 static const struct freq_tbl ftbl_blsp_uart_apps_clk_src[] = {
655 F(3686400, P_GPLL0_OUT_MAIN, 1, 72, 15625),
656 F(7372800, P_GPLL0_OUT_MAIN, 1, 144, 15625),
657 F(14745600, P_GPLL0_OUT_MAIN, 1, 288, 15625),
658 F(16000000, P_GPLL0_OUT_MAIN, 10, 1, 5),
659 F(19200000, P_XO, 1, 0, 0),
660 F(24000000, P_GPLL0_OUT_MAIN, 1, 3, 100),
661 F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2),
662 F(32000000, P_GPLL0_OUT_MAIN, 1, 1, 25),
663 F(40000000, P_GPLL0_OUT_MAIN, 1, 1, 20),
664 F(46400000, P_GPLL0_OUT_MAIN, 1, 29, 500),
665 F(48000000, P_GPLL0_OUT_MAIN, 1, 3, 50),
666 F(51200000, P_GPLL0_OUT_MAIN, 1, 8, 125),
667 F(56000000, P_GPLL0_OUT_MAIN, 1, 7, 100),
668 F(58982400, P_GPLL0_OUT_MAIN, 1, 1152, 15625),
669 F(60000000, P_GPLL0_OUT_MAIN, 1, 3, 40),
670 F(64000000, P_GPLL0_OUT_MAIN, 1, 2, 25),
674 static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
678 .parent_map = gcc_parent_map_8,
679 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
680 .clkr.hw.init = &(struct clk_init_data){
681 .name = "blsp1_uart1_apps_clk_src",
682 .parent_data = gcc_parent_data_4_8,
683 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
684 .ops = &clk_rcg2_ops,
688 static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
692 .parent_map = gcc_parent_map_8,
693 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
694 .clkr.hw.init = &(struct clk_init_data){
695 .name = "blsp1_uart2_apps_clk_src",
696 .parent_data = gcc_parent_data_4_8,
697 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
698 .ops = &clk_rcg2_ops,
702 static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
705 .parent_map = gcc_parent_map_8,
706 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
707 .clkr.hw.init = &(struct clk_init_data){
708 .name = "blsp2_qup1_i2c_apps_clk_src",
709 .parent_data = gcc_parent_data_4_8,
710 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
711 .ops = &clk_rcg2_ops,
715 static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
719 .parent_map = gcc_parent_map_8,
720 .freq_tbl = ftbl_blsp_spi_apps_clk_src,
721 .clkr.hw.init = &(struct clk_init_data){
722 .name = "blsp2_qup1_spi_apps_clk_src",
723 .parent_data = gcc_parent_data_4_8,
724 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
725 .ops = &clk_rcg2_ops,
729 static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
732 .parent_map = gcc_parent_map_8,
733 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
734 .clkr.hw.init = &(struct clk_init_data){
735 .name = "blsp2_qup2_i2c_apps_clk_src",
736 .parent_data = gcc_parent_data_4_8,
737 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
738 .ops = &clk_rcg2_ops,
742 static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
746 .parent_map = gcc_parent_map_8,
747 .freq_tbl = ftbl_blsp_spi_apps_clk_src,
748 .clkr.hw.init = &(struct clk_init_data){
749 .name = "blsp2_qup2_spi_apps_clk_src",
750 .parent_data = gcc_parent_data_4_8,
751 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
752 .ops = &clk_rcg2_ops,
756 static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
759 .parent_map = gcc_parent_map_8,
760 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
761 .clkr.hw.init = &(struct clk_init_data){
762 .name = "blsp2_qup3_i2c_apps_clk_src",
763 .parent_data = gcc_parent_data_4_8,
764 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
765 .ops = &clk_rcg2_ops,
769 static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
773 .parent_map = gcc_parent_map_8,
774 .freq_tbl = ftbl_blsp_spi_apps_clk_src,
775 .clkr.hw.init = &(struct clk_init_data){
776 .name = "blsp2_qup3_spi_apps_clk_src",
777 .parent_data = gcc_parent_data_4_8,
778 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
779 .ops = &clk_rcg2_ops,
783 static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
786 .parent_map = gcc_parent_map_8,
787 .freq_tbl = ftbl_blsp_i2c_apps_clk_src,
788 .clkr.hw.init = &(struct clk_init_data){
789 .name = "blsp2_qup4_i2c_apps_clk_src",
790 .parent_data = gcc_parent_data_4_8,
791 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
792 .ops = &clk_rcg2_ops,
796 static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
800 .parent_map = gcc_parent_map_8,
801 .freq_tbl = ftbl_blsp_spi_apps_clk_src,
802 .clkr.hw.init = &(struct clk_init_data){
803 .name = "blsp2_qup4_spi_apps_clk_src",
804 .parent_data = gcc_parent_data_4_8,
805 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
806 .ops = &clk_rcg2_ops,
810 static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
814 .parent_map = gcc_parent_map_8,
815 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
816 .clkr.hw.init = &(struct clk_init_data){
817 .name = "blsp2_uart1_apps_clk_src",
818 .parent_data = gcc_parent_data_4_8,
819 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
820 .ops = &clk_rcg2_ops,
824 static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
828 .parent_map = gcc_parent_map_8,
829 .freq_tbl = ftbl_blsp_uart_apps_clk_src,
830 .clkr.hw.init = &(struct clk_init_data){
831 .name = "blsp2_uart2_apps_clk_src",
832 .parent_data = gcc_parent_data_4_8,
833 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
834 .ops = &clk_rcg2_ops,
838 static const struct freq_tbl ftbl_cci_clk_src[] = {
839 F(19200000, P_XO, 1, 0, 0),
840 F(37500000, P_GPLL0_AUX, 1, 3, 64),
844 static struct clk_rcg2 cci_clk_src = {
848 .parent_map = gcc_parent_map_cci,
849 .freq_tbl = ftbl_cci_clk_src,
850 .clkr.hw.init = &(struct clk_init_data){
851 .name = "cci_clk_src",
852 .parent_data = gcc_parent_data_4_8,
853 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
854 .ops = &clk_rcg2_ops,
858 static const struct freq_tbl ftbl_cpp_clk_src[] = {
859 F(160000000, P_GPLL0_OUT_MAIN, 5, 0, 0),
860 F(240000000, P_GPLL4_AUX, 5, 0, 0),
861 F(320000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
862 F(400000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
863 F(480000000, P_GPLL4_AUX, 2.5, 0, 0),
867 static struct clk_rcg2 cpp_clk_src = {
870 .parent_map = gcc_parent_map_cpp,
871 .freq_tbl = ftbl_cpp_clk_src,
872 .clkr.hw.init = &(struct clk_init_data){
873 .name = "cpp_clk_src",
874 .parent_data = gcc_parent_data_6,
875 .num_parents = ARRAY_SIZE(gcc_parent_data_6),
876 .ops = &clk_rcg2_ops,
880 static const struct freq_tbl ftbl_csi0_clk_src[] = {
881 F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
882 F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
883 F(266670000, P_GPLL0_OUT_MAIN, 3, 0, 0),
887 static struct clk_rcg2 csi0_clk_src = {
890 .parent_map = gcc_parent_map_8,
891 .freq_tbl = ftbl_csi0_clk_src,
892 .clkr.hw.init = &(struct clk_init_data){
893 .name = "csi0_clk_src",
894 .parent_data = gcc_parent_data_4_8,
895 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
896 .ops = &clk_rcg2_ops,
900 static const struct freq_tbl ftbl_csi1_clk_src[] = {
901 F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
902 F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
903 F(266670000, P_GPLL0_OUT_MAIN, 3, 0, 0),
907 static struct clk_rcg2 csi1_clk_src = {
910 .parent_map = gcc_parent_map_8,
911 .freq_tbl = ftbl_csi1_clk_src,
912 .clkr.hw.init = &(struct clk_init_data){
913 .name = "csi1_clk_src",
914 .parent_data = gcc_parent_data_4_8,
915 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
916 .ops = &clk_rcg2_ops,
920 static const struct freq_tbl ftbl_csi2_clk_src[] = {
921 F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
922 F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
923 F(266670000, P_GPLL0_OUT_MAIN, 3, 0, 0),
927 static struct clk_rcg2 csi2_clk_src = {
930 .parent_map = gcc_parent_map_8,
931 .freq_tbl = ftbl_csi2_clk_src,
932 .clkr.hw.init = &(struct clk_init_data){
933 .name = "csi2_clk_src",
934 .parent_data = gcc_parent_data_4_8,
935 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
936 .ops = &clk_rcg2_ops,
940 static const struct freq_tbl ftbl_camss_gp0_clk_src[] = {
941 F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
942 F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
943 F(266670000, P_GPLL0_OUT_MAIN, 3, 0, 0),
947 static struct clk_rcg2 camss_gp0_clk_src = {
951 .parent_map = gcc_parent_map_8_gp,
952 .freq_tbl = ftbl_camss_gp0_clk_src,
953 .clkr.hw.init = &(struct clk_init_data){
954 .name = "camss_gp0_clk_src",
955 .parent_hws = gcc_parent_hws_8_gp,
956 .num_parents = ARRAY_SIZE(gcc_parent_hws_8_gp),
957 .ops = &clk_rcg2_ops,
961 static const struct freq_tbl ftbl_camss_gp1_clk_src[] = {
962 F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
963 F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
964 F(266670000, P_GPLL0_OUT_MAIN, 3, 0, 0),
968 static struct clk_rcg2 camss_gp1_clk_src = {
972 .parent_map = gcc_parent_map_8_gp,
973 .freq_tbl = ftbl_camss_gp1_clk_src,
974 .clkr.hw.init = &(struct clk_init_data){
975 .name = "camss_gp1_clk_src",
976 .parent_hws = gcc_parent_hws_8_gp,
977 .num_parents = ARRAY_SIZE(gcc_parent_hws_8_gp),
978 .ops = &clk_rcg2_ops,
982 static const struct freq_tbl ftbl_jpeg0_clk_src[] = {
983 F(133330000, P_GPLL0_OUT_MAIN, 6, 0, 0),
984 F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
985 F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0),
986 F(320000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
990 static struct clk_rcg2 jpeg0_clk_src = {
993 .parent_map = gcc_parent_map_6,
994 .freq_tbl = ftbl_jpeg0_clk_src,
995 .clkr.hw.init = &(struct clk_init_data){
996 .name = "jpeg0_clk_src",
997 .parent_data = gcc_parent_data_6,
998 .num_parents = ARRAY_SIZE(gcc_parent_data_6),
999 .ops = &clk_rcg2_ops,
1003 static const struct freq_tbl ftbl_mclk_clk_src[] = {
1004 F(8000000, P_GPLL0_OUT_MAIN, 1, 1, 100),
1005 F(24000000, P_GPLL6_OUT, 1, 1, 45),
1006 F(66670000, P_GPLL0_OUT_MAIN, 12, 0, 0),
1010 static struct clk_rcg2 mclk0_clk_src = {
1011 .cmd_rcgr = 0x52000,
1014 .parent_map = gcc_parent_map_7,
1015 .freq_tbl = ftbl_mclk_clk_src,
1016 .clkr.hw.init = &(struct clk_init_data){
1017 .name = "mclk0_clk_src",
1018 .parent_hws = gcc_parent_hws_7,
1019 .num_parents = ARRAY_SIZE(gcc_parent_hws_7),
1020 .ops = &clk_rcg2_ops,
1024 static struct clk_rcg2 mclk1_clk_src = {
1025 .cmd_rcgr = 0x53000,
1028 .parent_map = gcc_parent_map_7,
1029 .freq_tbl = ftbl_mclk_clk_src,
1030 .clkr.hw.init = &(struct clk_init_data){
1031 .name = "mclk1_clk_src",
1032 .parent_hws = gcc_parent_hws_7,
1033 .num_parents = ARRAY_SIZE(gcc_parent_hws_7),
1034 .ops = &clk_rcg2_ops,
1038 static struct clk_rcg2 mclk2_clk_src = {
1039 .cmd_rcgr = 0x5c000,
1042 .parent_map = gcc_parent_map_7,
1043 .freq_tbl = ftbl_mclk_clk_src,
1044 .clkr.hw.init = &(struct clk_init_data){
1045 .name = "mclk2_clk_src",
1046 .parent_hws = gcc_parent_hws_7,
1047 .num_parents = ARRAY_SIZE(gcc_parent_hws_7),
1048 .ops = &clk_rcg2_ops,
1052 static const struct freq_tbl ftbl_csi0phytimer_clk_src[] = {
1053 F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
1054 F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
1055 F(266670000, P_GPLL0_OUT_MAIN, 3, 0, 0),
1059 static struct clk_rcg2 csi0phytimer_clk_src = {
1060 .cmd_rcgr = 0x4e000,
1062 .parent_map = gcc_parent_map_8,
1063 .freq_tbl = ftbl_csi0phytimer_clk_src,
1064 .clkr.hw.init = &(struct clk_init_data){
1065 .name = "csi0phytimer_clk_src",
1066 .parent_data = gcc_parent_data_4_8,
1067 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
1068 .ops = &clk_rcg2_ops,
1072 static const struct freq_tbl ftbl_csi1phytimer_clk_src[] = {
1073 F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
1074 F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
1075 F(266670000, P_GPLL0_OUT_MAIN, 3, 0, 0),
1079 static struct clk_rcg2 csi1phytimer_clk_src = {
1080 .cmd_rcgr = 0x4f000,
1082 .parent_map = gcc_parent_map_8,
1083 .freq_tbl = ftbl_csi1phytimer_clk_src,
1084 .clkr.hw.init = &(struct clk_init_data){
1085 .name = "csi1phytimer_clk_src",
1086 .parent_data = gcc_parent_data_4_8,
1087 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
1088 .ops = &clk_rcg2_ops,
1092 static const struct freq_tbl ftbl_camss_top_ahb_clk_src[] = {
1093 F(40000000, P_GPLL0_OUT_MAIN, 10, 1, 2),
1094 F(80000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
1098 static struct clk_rcg2 camss_top_ahb_clk_src = {
1099 .cmd_rcgr = 0x5a000,
1102 .parent_map = gcc_parent_map_8,
1103 .freq_tbl = ftbl_camss_top_ahb_clk_src,
1104 .clkr.hw.init = &(struct clk_init_data){
1105 .name = "camss_top_ahb_clk_src",
1106 .parent_data = gcc_parent_data_4_8,
1107 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
1108 .ops = &clk_rcg2_ops,
1112 static const struct freq_tbl ftbl_vfe0_clk_src[] = {
1113 F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
1114 F(80000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
1115 F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
1116 F(133333333, P_GPLL0_OUT_MAIN, 6, 0, 0),
1117 F(160000000, P_GPLL0_OUT_MAIN, 5, 0, 0),
1118 F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
1119 F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
1120 F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0),
1121 F(300000000, P_GPLL4_OUT, 4, 0, 0),
1122 F(320000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
1123 F(466000000, P_GPLL2_AUX, 2, 0, 0),
1127 static struct clk_rcg2 vfe0_clk_src = {
1128 .cmd_rcgr = 0x58000,
1130 .parent_map = gcc_parent_map_2,
1131 .freq_tbl = ftbl_vfe0_clk_src,
1132 .clkr.hw.init = &(struct clk_init_data){
1133 .name = "vfe0_clk_src",
1134 .parent_data = gcc_parent_data_2,
1135 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
1136 .ops = &clk_rcg2_ops,
1140 static const struct freq_tbl ftbl_vfe1_clk_src[] = {
1141 F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
1142 F(80000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
1143 F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
1144 F(133333333, P_GPLL0_OUT_MAIN, 6, 0, 0),
1145 F(160000000, P_GPLL0_OUT_MAIN, 5, 0, 0),
1146 F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
1147 F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
1148 F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0),
1149 F(300000000, P_GPLL4_OUT, 4, 0, 0),
1150 F(320000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
1151 F(466000000, P_GPLL2_AUX, 2, 0, 0),
1155 static struct clk_rcg2 vfe1_clk_src = {
1156 .cmd_rcgr = 0x58054,
1158 .parent_map = gcc_parent_map_2,
1159 .freq_tbl = ftbl_vfe1_clk_src,
1160 .clkr.hw.init = &(struct clk_init_data){
1161 .name = "vfe1_clk_src",
1162 .parent_data = gcc_parent_data_2,
1163 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
1164 .ops = &clk_rcg2_ops,
1168 static const struct freq_tbl ftbl_crypto_clk_src[] = {
1169 F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
1170 F(80000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
1171 F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
1172 F(160000000, P_GPLL0_OUT_MAIN, 5, 0, 0),
1176 static struct clk_rcg2 crypto_clk_src = {
1177 .cmd_rcgr = 0x16004,
1179 .parent_map = gcc_parent_map_8,
1180 .freq_tbl = ftbl_crypto_clk_src,
1181 .clkr.hw.init = &(struct clk_init_data){
1182 .name = "crypto_clk_src",
1183 .parent_data = gcc_parent_data_4_8,
1184 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
1185 .ops = &clk_rcg2_ops,
1189 static const struct freq_tbl ftbl_gp1_clk_src[] = {
1190 F(19200000, P_XO, 1, 0, 0),
1194 static struct clk_rcg2 gp1_clk_src = {
1198 .parent_map = gcc_parent_map_8_gp,
1199 .freq_tbl = ftbl_gp1_clk_src,
1200 .clkr.hw.init = &(struct clk_init_data){
1201 .name = "gp1_clk_src",
1202 .parent_hws = (const struct clk_hw *[]) {
1206 .ops = &clk_rcg2_ops,
1210 static const struct freq_tbl ftbl_gp2_clk_src[] = {
1211 F(19200000, P_XO, 1, 0, 0),
1215 static struct clk_rcg2 gp2_clk_src = {
1219 .parent_map = gcc_parent_map_8_gp,
1220 .freq_tbl = ftbl_gp2_clk_src,
1221 .clkr.hw.init = &(struct clk_init_data){
1222 .name = "gp2_clk_src",
1223 .parent_hws = (const struct clk_hw *[]) {
1227 .ops = &clk_rcg2_ops,
1231 static const struct freq_tbl ftbl_gp3_clk_src[] = {
1232 F(19200000, P_XO, 1, 0, 0),
1236 static struct clk_rcg2 gp3_clk_src = {
1240 .parent_map = gcc_parent_map_8_gp,
1241 .freq_tbl = ftbl_gp3_clk_src,
1242 .clkr.hw.init = &(struct clk_init_data){
1243 .name = "gp3_clk_src",
1244 .parent_hws = (const struct clk_hw *[]) {
1248 .ops = &clk_rcg2_ops,
1252 static struct clk_rcg2 byte0_clk_src = {
1253 .cmd_rcgr = 0x4d044,
1256 .parent_map = gcc_parent_map_mdss_byte0,
1257 .clkr.hw.init = &(struct clk_init_data){
1258 .name = "byte0_clk_src",
1259 .parent_data = gcc_parent_data_mdss_byte0,
1260 .num_parents = ARRAY_SIZE(gcc_parent_data_mdss_byte0),
1261 .ops = &clk_byte2_ops,
1262 .flags = CLK_SET_RATE_PARENT,
1266 static struct clk_rcg2 byte1_clk_src = {
1267 .cmd_rcgr = 0x4d0b0,
1270 .parent_map = gcc_parent_map_mdss_byte1,
1271 .clkr.hw.init = &(struct clk_init_data){
1272 .name = "byte1_clk_src",
1273 .parent_data = gcc_parent_data_mdss_byte1,
1274 .num_parents = ARRAY_SIZE(gcc_parent_data_mdss_byte1),
1275 .ops = &clk_byte2_ops,
1276 .flags = CLK_SET_RATE_PARENT,
1280 static const struct freq_tbl ftbl_esc0_1_clk_src[] = {
1281 F(19200000, P_XO, 1, 0, 0),
1285 static struct clk_rcg2 esc0_clk_src = {
1286 .cmd_rcgr = 0x4d05c,
1288 .freq_tbl = ftbl_esc0_1_clk_src,
1289 .parent_map = gcc_parent_map_mdss_byte0,
1290 .clkr.hw.init = &(struct clk_init_data){
1291 .name = "esc0_clk_src",
1292 .parent_data = gcc_parent_data_mdss_byte0,
1293 .num_parents = ARRAY_SIZE(gcc_parent_data_mdss_byte0),
1294 .ops = &clk_rcg2_ops,
1298 static struct clk_rcg2 esc1_clk_src = {
1299 .cmd_rcgr = 0x4d0a8,
1301 .freq_tbl = ftbl_esc0_1_clk_src,
1302 .parent_map = gcc_parent_map_mdss_byte1,
1303 .clkr.hw.init = &(struct clk_init_data){
1304 .name = "esc1_clk_src",
1305 .parent_data = gcc_parent_data_mdss_byte1,
1306 .num_parents = ARRAY_SIZE(gcc_parent_data_mdss_byte1),
1307 .ops = &clk_rcg2_ops,
1311 static const struct freq_tbl ftbl_mdp_clk_src[] = {
1312 F(50000000, P_GPLL0_OUT_MDP, 16, 0, 0),
1313 F(80000000, P_GPLL0_OUT_MDP, 10, 0, 0),
1314 F(100000000, P_GPLL0_OUT_MDP, 8, 0, 0),
1315 F(145454545, P_GPLL0_OUT_MDP, 5.5, 0, 0),
1316 F(160000000, P_GPLL0_OUT_MDP, 5, 0, 0),
1317 F(177777778, P_GPLL0_OUT_MDP, 4.5, 0, 0),
1318 F(200000000, P_GPLL0_OUT_MDP, 4, 0, 0),
1319 F(270000000, P_GPLL6_OUT, 4, 0, 0),
1320 F(320000000, P_GPLL0_OUT_MDP, 2.5, 0, 0),
1321 F(360000000, P_GPLL6_OUT, 3, 0, 0),
1325 static struct clk_rcg2 mdp_clk_src = {
1326 .cmd_rcgr = 0x4d014,
1328 .parent_map = gcc_parent_map_7_mdp,
1329 .freq_tbl = ftbl_mdp_clk_src,
1330 .clkr.hw.init = &(struct clk_init_data){
1331 .name = "mdp_clk_src",
1332 .parent_data = gcc_parent_data_7_mdp,
1333 .num_parents = ARRAY_SIZE(gcc_parent_data_7_mdp),
1334 .ops = &clk_rcg2_ops,
1338 static struct clk_rcg2 pclk0_clk_src = {
1339 .cmd_rcgr = 0x4d000,
1342 .parent_map = gcc_parent_map_mdss_pix0,
1343 .clkr.hw.init = &(struct clk_init_data){
1344 .name = "pclk0_clk_src",
1345 .parent_data = gcc_parent_data_mdss_pix0,
1346 .num_parents = ARRAY_SIZE(gcc_parent_data_mdss_pix0),
1347 .ops = &clk_pixel_ops,
1348 .flags = CLK_SET_RATE_PARENT,
1352 static struct clk_rcg2 pclk1_clk_src = {
1353 .cmd_rcgr = 0x4d0b8,
1356 .parent_map = gcc_parent_map_mdss_pix1,
1357 .clkr.hw.init = &(struct clk_init_data){
1358 .name = "pclk1_clk_src",
1359 .parent_data = gcc_parent_data_mdss_pix1,
1360 .num_parents = ARRAY_SIZE(gcc_parent_data_mdss_pix1),
1361 .ops = &clk_pixel_ops,
1362 .flags = CLK_SET_RATE_PARENT,
1366 static const struct freq_tbl ftbl_vsync_clk_src[] = {
1367 F(19200000, P_XO, 1, 0, 0),
1371 static struct clk_rcg2 vsync_clk_src = {
1372 .cmd_rcgr = 0x4d02c,
1374 .parent_map = gcc_parent_map_10,
1375 .freq_tbl = ftbl_vsync_clk_src,
1376 .clkr.hw.init = &(struct clk_init_data){
1377 .name = "vsync_clk_src",
1378 .parent_data = gcc_parent_data_10,
1379 .num_parents = ARRAY_SIZE(gcc_parent_data_10),
1380 .ops = &clk_rcg2_ops,
1384 static const struct freq_tbl ftbl_gfx3d_clk_src[] = {
1385 F(19200000, P_XO, 1, 0, 0),
1386 F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
1387 F(80000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
1388 F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
1389 F(133333333, P_GPLL0_OUT_MAIN, 6, 0, 0),
1390 F(160000000, P_GPLL0_OUT_MAIN, 5, 0, 0),
1391 F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
1392 F(228571429, P_GPLL0_OUT_MAIN, 3.5, 0, 0),
1393 F(240000000, P_GPLL6_GFX3D, 4.5, 0, 0),
1394 F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0),
1395 F(300000000, P_GPLL4_GFX3D, 4, 0, 0),
1396 F(360000000, P_GPLL6_GFX3D, 3, 0, 0),
1397 F(400000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
1398 F(432000000, P_GPLL6_GFX3D, 2.5, 0, 0),
1399 F(480000000, P_GPLL4_GFX3D, 2.5, 0, 0),
1400 F(540000000, P_GPLL6_GFX3D, 2, 0, 0),
1401 F(600000000, P_GPLL4_GFX3D, 2, 0, 0),
1405 static const struct clk_init_data gfx3d_clk_params = {
1406 .name = "gfx3d_clk_src",
1407 .parent_data = gcc_parent_data_gfx3d,
1408 .num_parents = ARRAY_SIZE(gcc_parent_data_gfx3d),
1409 .ops = &clk_rcg2_ops,
1412 static struct clk_rcg2 gfx3d_clk_src = {
1413 .cmd_rcgr = 0x59000,
1415 .parent_map = gcc_parent_map_gfx3d,
1416 .freq_tbl = ftbl_gfx3d_clk_src,
1417 .clkr.hw.init = &gfx3d_clk_params,
1420 static const struct freq_tbl ftbl_pdm2_clk_src[] = {
1421 F(64000000, P_GPLL0_OUT_MAIN, 12.5, 0, 0),
1425 static struct clk_rcg2 pdm2_clk_src = {
1426 .cmd_rcgr = 0x44010,
1428 .parent_map = gcc_parent_map_8,
1429 .freq_tbl = ftbl_pdm2_clk_src,
1430 .clkr.hw.init = &(struct clk_init_data){
1431 .name = "pdm2_clk_src",
1432 .parent_data = gcc_parent_data_4_8,
1433 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
1434 .ops = &clk_rcg2_ops,
1438 static const struct freq_tbl ftbl_rbcpr_gfx_clk_src[] = {
1439 F(19200000, P_XO, 1, 0, 0),
1440 F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
1444 static struct clk_rcg2 rbcpr_gfx_clk_src = {
1445 .cmd_rcgr = 0x3a00c,
1447 .parent_map = gcc_parent_map_8,
1448 .freq_tbl = ftbl_rbcpr_gfx_clk_src,
1449 .clkr.hw.init = &(struct clk_init_data){
1450 .name = "rbcpr_gfx_clk_src",
1451 .parent_data = gcc_parent_data_4_8,
1452 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
1453 .ops = &clk_rcg2_ops,
1457 static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
1458 F(144000, P_XO, 16, 3, 25),
1459 F(400000, P_XO, 12, 1, 4),
1460 F(20000000, P_GPLL0_OUT_MAIN, 10, 1, 4),
1461 F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2),
1462 F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
1463 F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
1464 F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
1465 F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
1466 F(342850000, P_GPLL4_OUT, 3.5, 0, 0),
1467 F(400000000, P_GPLL4_OUT, 3, 0, 0),
1471 static const struct freq_tbl ftbl_sdcc1_8976_v1_1_apps_clk_src[] = {
1472 F(144000, P_XO, 16, 3, 25),
1473 F(400000, P_XO, 12, 1, 4),
1474 F(20000000, P_GPLL0_OUT_MAIN, 10, 1, 4),
1475 F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2),
1476 F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
1477 F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
1478 F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
1479 F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
1480 F(186400000, P_GPLL2_OUT, 5, 0, 0),
1481 F(372800000, P_GPLL2_OUT, 2.5, 0, 0),
1485 static const struct clk_init_data sdcc1_apps_clk_src_8976v1_1_init = {
1486 .name = "sdcc1_apps_clk_src",
1487 .parent_data = gcc_parent_data_v1_1,
1488 .num_parents = ARRAY_SIZE(gcc_parent_data_v1_1),
1489 .ops = &clk_rcg2_floor_ops,
1492 static struct clk_rcg2 sdcc1_apps_clk_src = {
1493 .cmd_rcgr = 0x42004,
1496 .parent_map = gcc_parent_map_1,
1497 .freq_tbl = ftbl_sdcc1_apps_clk_src,
1498 .clkr.hw.init = &(struct clk_init_data){
1499 .name = "sdcc1_apps_clk_src",
1500 .parent_data = gcc_parent_data_1,
1501 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1502 .ops = &clk_rcg2_floor_ops,
1506 static const struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = {
1507 F(100000000, P_GPLL0_OUT_M, 8, 0, 0),
1508 F(200000000, P_GPLL0_OUT_M, 4, 0, 0),
1512 static struct clk_rcg2 sdcc1_ice_core_clk_src = {
1513 .cmd_rcgr = 0x5d000,
1516 .parent_map = gcc_parent_map_sdcc_ice,
1517 .freq_tbl = ftbl_sdcc1_ice_core_clk_src,
1518 .clkr.hw.init = &(struct clk_init_data){
1519 .name = "sdcc1_ice_core_clk_src",
1520 .parent_data = gcc_parent_data_4_8,
1521 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
1522 .ops = &clk_rcg2_ops,
1526 static const struct freq_tbl ftbl_sdcc2_4_apps_clk_src[] = {
1527 F(144000, P_XO, 16, 3, 25),
1528 F(400000, P_XO, 12, 1, 4),
1529 F(20000000, P_GPLL0_OUT_MAIN, 10, 1, 4),
1530 F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2),
1531 F(40000000, P_GPLL0_OUT_MAIN, 10, 1, 2),
1532 F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
1533 F(80000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
1534 F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
1535 F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
1536 F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
1540 static struct clk_rcg2 sdcc2_apps_clk_src = {
1541 .cmd_rcgr = 0x43004,
1544 .parent_map = gcc_parent_map_4,
1545 .freq_tbl = ftbl_sdcc2_4_apps_clk_src,
1546 .clkr.hw.init = &(struct clk_init_data){
1547 .name = "sdcc2_apps_clk_src",
1548 .parent_data = gcc_parent_data_4_8,
1549 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
1550 .ops = &clk_rcg2_floor_ops,
1554 static struct clk_rcg2 sdcc3_apps_clk_src = {
1555 .cmd_rcgr = 0x39004,
1558 .parent_map = gcc_parent_map_4,
1559 .freq_tbl = ftbl_sdcc2_4_apps_clk_src,
1560 .clkr.hw.init = &(struct clk_init_data){
1561 .name = "sdcc3_apps_clk_src",
1562 .parent_data = gcc_parent_data_4_8,
1563 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
1564 .ops = &clk_rcg2_ops,
1568 static const struct freq_tbl ftbl_usb_fs_ic_clk_src[] = {
1569 F(60000000, P_GPLL6_OUT_MAIN, 6, 1, 3),
1573 static struct clk_rcg2 usb_fs_ic_clk_src = {
1574 .cmd_rcgr = 0x3f034,
1577 .parent_map = gcc_parent_map_9,
1578 .freq_tbl = ftbl_usb_fs_ic_clk_src,
1579 .clkr.hw.init = &(struct clk_init_data){
1580 .name = "usb_fs_ic_clk_src",
1581 .parent_data = gcc_parent_data_9,
1582 .num_parents = ARRAY_SIZE(gcc_parent_data_9),
1583 .ops = &clk_rcg2_ops,
1587 static const struct freq_tbl ftbl_usb_fs_system_clk_src[] = {
1588 F(64000000, P_GPLL0_OUT, 12.5, 0, 0),
1592 static struct clk_rcg2 usb_fs_system_clk_src = {
1593 .cmd_rcgr = 0x3f010,
1596 .parent_map = gcc_parent_map_4_fs,
1597 .freq_tbl = ftbl_usb_fs_system_clk_src,
1598 .clkr.hw.init = &(struct clk_init_data){
1599 .name = "usb_fs_system_clk_src",
1600 .parent_data = gcc_parent_data_4_8,
1601 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
1602 .ops = &clk_rcg2_ops,
1606 static const struct freq_tbl ftbl_usb_hs_system_clk_src[] = {
1607 F(57140000, P_GPLL0_OUT_MAIN, 14, 0, 0),
1608 F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
1609 F(133333333, P_GPLL0_OUT_MAIN, 6, 0, 0),
1610 F(177780000, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
1614 static struct clk_rcg2 usb_hs_system_clk_src = {
1615 .cmd_rcgr = 0x41010,
1617 .parent_map = gcc_parent_map_4,
1618 .freq_tbl = ftbl_usb_hs_system_clk_src,
1619 .clkr.hw.init = &(struct clk_init_data){
1620 .name = "usb_hs_system_clk_src",
1621 .parent_data = gcc_parent_data_4_8,
1622 .num_parents = ARRAY_SIZE(gcc_parent_data_4_8),
1623 .ops = &clk_rcg2_ops,
1627 static const struct freq_tbl ftbl_vcodec0_clk_src[] = {
1628 F(72727200, P_GPLL0_OUT_MAIN, 11, 0, 0),
1629 F(80000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
1630 F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
1631 F(133333333, P_GPLL0_OUT_MAIN, 6, 0, 0),
1632 F(228570000, P_GPLL0_OUT_MAIN, 3.5, 0, 0),
1633 F(310667000, P_GPLL2_AUX, 3, 0, 0),
1634 F(360000000, P_GPLL6_AUX, 3, 0, 0),
1635 F(400000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
1636 F(466000000, P_GPLL2_AUX, 2, 0, 0),
1640 static struct clk_rcg2 vcodec0_clk_src = {
1641 .cmd_rcgr = 0x4c000,
1644 .parent_map = gcc_parent_map_3,
1645 .freq_tbl = ftbl_vcodec0_clk_src,
1646 .clkr.hw.init = &(struct clk_init_data){
1647 .name = "vcodec0_clk_src",
1648 .parent_data = gcc_parent_data_3,
1649 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
1650 .ops = &clk_rcg2_ops,
1654 static struct clk_branch gcc_aps_0_clk = {
1655 .halt_reg = 0x78004,
1657 .enable_reg = 0x78004,
1658 .enable_mask = BIT(0),
1659 .hw.init = &(struct clk_init_data) {
1660 .name = "gcc_aps_0_clk",
1661 .parent_hws = (const struct clk_hw *[]) {
1662 &aps_0_clk_src.clkr.hw,
1665 .flags = CLK_SET_RATE_PARENT,
1666 .ops = &clk_branch2_ops,
1671 static struct clk_branch gcc_aps_1_clk = {
1672 .halt_reg = 0x79004,
1674 .enable_reg = 0x79004,
1675 .enable_mask = BIT(0),
1676 .hw.init = &(struct clk_init_data) {
1677 .name = "gcc_aps_1_clk",
1678 .parent_hws = (const struct clk_hw *[]) {
1679 &aps_1_clk_src.clkr.hw,
1682 .flags = CLK_SET_RATE_PARENT,
1683 .ops = &clk_branch2_ops,
1688 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1690 .halt_check = BRANCH_HALT,
1692 .enable_reg = 0x2008,
1693 .enable_mask = BIT(0),
1694 .hw.init = &(struct clk_init_data) {
1695 .name = "gcc_blsp1_qup1_i2c_apps_clk",
1696 .parent_hws = (const struct clk_hw *[]) {
1697 &blsp1_qup1_i2c_apps_clk_src.clkr.hw,
1700 .flags = CLK_SET_RATE_PARENT,
1701 .ops = &clk_branch2_ops,
1706 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1708 .halt_check = BRANCH_HALT,
1710 .enable_reg = 0x2004,
1711 .enable_mask = BIT(0),
1712 .hw.init = &(struct clk_init_data) {
1713 .name = "gcc_blsp1_qup1_spi_apps_clk",
1714 .parent_hws = (const struct clk_hw *[]) {
1715 &blsp1_qup1_spi_apps_clk_src.clkr.hw,
1718 .flags = CLK_SET_RATE_PARENT,
1719 .ops = &clk_branch2_ops,
1724 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1726 .halt_check = BRANCH_HALT,
1728 .enable_reg = 0x3010,
1729 .enable_mask = BIT(0),
1730 .hw.init = &(struct clk_init_data) {
1731 .name = "gcc_blsp1_qup2_i2c_apps_clk",
1732 .parent_hws = (const struct clk_hw *[]) {
1733 &blsp1_qup2_i2c_apps_clk_src.clkr.hw,
1736 .flags = CLK_SET_RATE_PARENT,
1737 .ops = &clk_branch2_ops,
1742 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1744 .halt_check = BRANCH_HALT,
1746 .enable_reg = 0x300c,
1747 .enable_mask = BIT(0),
1748 .hw.init = &(struct clk_init_data) {
1749 .name = "gcc_blsp1_qup2_spi_apps_clk",
1750 .parent_hws = (const struct clk_hw *[]) {
1751 &blsp1_qup2_spi_apps_clk_src.clkr.hw,
1754 .flags = CLK_SET_RATE_PARENT,
1755 .ops = &clk_branch2_ops,
1760 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1762 .halt_check = BRANCH_HALT,
1764 .enable_reg = 0x4020,
1765 .enable_mask = BIT(0),
1766 .hw.init = &(struct clk_init_data) {
1767 .name = "gcc_blsp1_qup3_i2c_apps_clk",
1768 .parent_hws = (const struct clk_hw *[]) {
1769 &blsp1_qup3_i2c_apps_clk_src.clkr.hw,
1772 .flags = CLK_SET_RATE_PARENT,
1773 .ops = &clk_branch2_ops,
1778 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1780 .halt_check = BRANCH_HALT,
1782 .enable_reg = 0x401c,
1783 .enable_mask = BIT(0),
1784 .hw.init = &(struct clk_init_data) {
1785 .name = "gcc_blsp1_qup3_spi_apps_clk",
1786 .parent_hws = (const struct clk_hw *[]) {
1787 &blsp1_qup3_spi_apps_clk_src.clkr.hw,
1790 .flags = CLK_SET_RATE_PARENT,
1791 .ops = &clk_branch2_ops,
1796 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1798 .halt_check = BRANCH_HALT,
1800 .enable_reg = 0x5020,
1801 .enable_mask = BIT(0),
1802 .hw.init = &(struct clk_init_data) {
1803 .name = "gcc_blsp1_qup4_i2c_apps_clk",
1804 .parent_hws = (const struct clk_hw *[]) {
1805 &blsp1_qup4_i2c_apps_clk_src.clkr.hw,
1808 .flags = CLK_SET_RATE_PARENT,
1809 .ops = &clk_branch2_ops,
1814 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1816 .halt_check = BRANCH_HALT,
1818 .enable_reg = 0x501c,
1819 .enable_mask = BIT(0),
1820 .hw.init = &(struct clk_init_data) {
1821 .name = "gcc_blsp1_qup4_spi_apps_clk",
1822 .parent_hws = (const struct clk_hw *[]) {
1823 &blsp1_qup4_spi_apps_clk_src.clkr.hw,
1826 .flags = CLK_SET_RATE_PARENT,
1827 .ops = &clk_branch2_ops,
1832 static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1834 .halt_check = BRANCH_HALT,
1836 .enable_reg = 0x203c,
1837 .enable_mask = BIT(0),
1838 .hw.init = &(struct clk_init_data) {
1839 .name = "gcc_blsp1_uart1_apps_clk",
1840 .parent_hws = (const struct clk_hw *[]) {
1841 &blsp1_uart1_apps_clk_src.clkr.hw,
1844 .flags = CLK_SET_RATE_PARENT,
1845 .ops = &clk_branch2_ops,
1850 static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1852 .halt_check = BRANCH_HALT,
1854 .enable_reg = 0x302c,
1855 .enable_mask = BIT(0),
1856 .hw.init = &(struct clk_init_data) {
1857 .name = "gcc_blsp1_uart2_apps_clk",
1858 .parent_hws = (const struct clk_hw *[]) {
1859 &blsp1_uart2_apps_clk_src.clkr.hw,
1862 .flags = CLK_SET_RATE_PARENT,
1863 .ops = &clk_branch2_ops,
1868 static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
1870 .halt_check = BRANCH_HALT,
1872 .enable_reg = 0xc008,
1873 .enable_mask = BIT(0),
1874 .hw.init = &(struct clk_init_data) {
1875 .name = "gcc_blsp2_qup1_i2c_apps_clk",
1876 .parent_hws = (const struct clk_hw *[]) {
1877 &blsp2_qup1_i2c_apps_clk_src.clkr.hw,
1880 .flags = CLK_SET_RATE_PARENT,
1881 .ops = &clk_branch2_ops,
1886 static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
1888 .halt_check = BRANCH_HALT,
1890 .enable_reg = 0xc004,
1891 .enable_mask = BIT(0),
1892 .hw.init = &(struct clk_init_data) {
1893 .name = "gcc_blsp2_qup1_spi_apps_clk",
1894 .parent_hws = (const struct clk_hw *[]) {
1895 &blsp2_qup1_spi_apps_clk_src.clkr.hw,
1898 .flags = CLK_SET_RATE_PARENT,
1899 .ops = &clk_branch2_ops,
1904 static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
1906 .halt_check = BRANCH_HALT,
1908 .enable_reg = 0xd010,
1909 .enable_mask = BIT(0),
1910 .hw.init = &(struct clk_init_data) {
1911 .name = "gcc_blsp2_qup2_i2c_apps_clk",
1912 .parent_hws = (const struct clk_hw *[]) {
1913 &blsp2_qup2_i2c_apps_clk_src.clkr.hw,
1916 .flags = CLK_SET_RATE_PARENT,
1917 .ops = &clk_branch2_ops,
1922 static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
1924 .halt_check = BRANCH_HALT,
1926 .enable_reg = 0xd00c,
1927 .enable_mask = BIT(0),
1928 .hw.init = &(struct clk_init_data) {
1929 .name = "gcc_blsp2_qup2_spi_apps_clk",
1930 .parent_hws = (const struct clk_hw *[]) {
1931 &blsp2_qup2_spi_apps_clk_src.clkr.hw,
1934 .flags = CLK_SET_RATE_PARENT,
1935 .ops = &clk_branch2_ops,
1940 static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
1942 .halt_check = BRANCH_HALT,
1944 .enable_reg = 0xf020,
1945 .enable_mask = BIT(0),
1946 .hw.init = &(struct clk_init_data) {
1947 .name = "gcc_blsp2_qup3_i2c_apps_clk",
1948 .parent_hws = (const struct clk_hw *[]) {
1949 &blsp2_qup3_i2c_apps_clk_src.clkr.hw,
1952 .flags = CLK_SET_RATE_PARENT,
1953 .ops = &clk_branch2_ops,
1958 static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
1960 .halt_check = BRANCH_HALT,
1962 .enable_reg = 0xf01c,
1963 .enable_mask = BIT(0),
1964 .hw.init = &(struct clk_init_data) {
1965 .name = "gcc_blsp2_qup3_spi_apps_clk",
1966 .parent_hws = (const struct clk_hw *[]) {
1967 &blsp2_qup3_spi_apps_clk_src.clkr.hw,
1970 .flags = CLK_SET_RATE_PARENT,
1971 .ops = &clk_branch2_ops,
1976 static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
1977 .halt_reg = 0x18020,
1978 .halt_check = BRANCH_HALT,
1980 .enable_reg = 0x18020,
1981 .enable_mask = BIT(0),
1982 .hw.init = &(struct clk_init_data) {
1983 .name = "gcc_blsp2_qup4_i2c_apps_clk",
1984 .parent_hws = (const struct clk_hw *[]) {
1985 &blsp2_qup4_i2c_apps_clk_src.clkr.hw,
1988 .flags = CLK_SET_RATE_PARENT,
1989 .ops = &clk_branch2_ops,
1994 static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
1995 .halt_reg = 0x1801c,
1996 .halt_check = BRANCH_HALT,
1998 .enable_reg = 0x1801c,
1999 .enable_mask = BIT(0),
2000 .hw.init = &(struct clk_init_data) {
2001 .name = "gcc_blsp2_qup4_spi_apps_clk",
2002 .parent_hws = (const struct clk_hw *[]) {
2003 &blsp2_qup4_spi_apps_clk_src.clkr.hw,
2006 .flags = CLK_SET_RATE_PARENT,
2007 .ops = &clk_branch2_ops,
2012 static struct clk_branch gcc_blsp2_uart1_apps_clk = {
2014 .halt_check = BRANCH_HALT,
2016 .enable_reg = 0xc03c,
2017 .enable_mask = BIT(0),
2018 .hw.init = &(struct clk_init_data) {
2019 .name = "gcc_blsp2_uart1_apps_clk",
2020 .parent_hws = (const struct clk_hw *[]) {
2021 &blsp2_uart1_apps_clk_src.clkr.hw,
2024 .flags = CLK_SET_RATE_PARENT,
2025 .ops = &clk_branch2_ops,
2030 static struct clk_branch gcc_blsp2_uart2_apps_clk = {
2032 .halt_check = BRANCH_HALT,
2034 .enable_reg = 0xd02c,
2035 .enable_mask = BIT(0),
2036 .hw.init = &(struct clk_init_data) {
2037 .name = "gcc_blsp2_uart2_apps_clk",
2038 .parent_hws = (const struct clk_hw *[]) {
2039 &blsp2_uart2_apps_clk_src.clkr.hw,
2042 .flags = CLK_SET_RATE_PARENT,
2043 .ops = &clk_branch2_ops,
2048 static struct clk_branch gcc_camss_cci_ahb_clk = {
2049 .halt_reg = 0x5101c,
2051 .enable_reg = 0x5101c,
2052 .enable_mask = BIT(0),
2053 .hw.init = &(struct clk_init_data) {
2054 .name = "gcc_camss_cci_ahb_clk",
2055 .parent_hws = (const struct clk_hw *[]) {
2056 &camss_top_ahb_clk_src.clkr.hw,
2059 .flags = CLK_SET_RATE_PARENT,
2060 .ops = &clk_branch2_ops,
2065 static struct clk_branch gcc_camss_cci_clk = {
2066 .halt_reg = 0x51018,
2068 .enable_reg = 0x51018,
2069 .enable_mask = BIT(0),
2070 .hw.init = &(struct clk_init_data) {
2071 .name = "gcc_camss_cci_clk",
2072 .parent_hws = (const struct clk_hw *[]) {
2073 &cci_clk_src.clkr.hw,
2076 .flags = CLK_SET_RATE_PARENT,
2077 .ops = &clk_branch2_ops,
2082 static struct clk_branch gcc_camss_cpp_ahb_clk = {
2083 .halt_reg = 0x58040,
2085 .enable_reg = 0x58040,
2086 .enable_mask = BIT(0),
2087 .hw.init = &(struct clk_init_data) {
2088 .name = "gcc_camss_cpp_ahb_clk",
2089 .parent_hws = (const struct clk_hw *[]) {
2090 &camss_top_ahb_clk_src.clkr.hw,
2093 .flags = CLK_SET_RATE_PARENT,
2094 .ops = &clk_branch2_ops,
2099 static struct clk_branch gcc_camss_cpp_axi_clk = {
2100 .halt_reg = 0x58064,
2102 .enable_reg = 0x58064,
2103 .enable_mask = BIT(0),
2104 .hw.init = &(struct clk_init_data) {
2105 .name = "gcc_camss_cpp_axi_clk",
2106 .ops = &clk_branch2_ops,
2111 static struct clk_branch gcc_camss_cpp_clk = {
2112 .halt_reg = 0x5803c,
2114 .enable_reg = 0x5803c,
2115 .enable_mask = BIT(0),
2116 .hw.init = &(struct clk_init_data) {
2117 .name = "gcc_camss_cpp_clk",
2118 .parent_hws = (const struct clk_hw *[]) {
2119 &cpp_clk_src.clkr.hw,
2122 .flags = CLK_SET_RATE_PARENT,
2123 .ops = &clk_branch2_ops,
2128 static struct clk_branch gcc_camss_csi0_ahb_clk = {
2129 .halt_reg = 0x4e040,
2131 .enable_reg = 0x4e040,
2132 .enable_mask = BIT(0),
2133 .hw.init = &(struct clk_init_data) {
2134 .name = "gcc_camss_csi0_ahb_clk",
2135 .parent_hws = (const struct clk_hw *[]) {
2136 &camss_top_ahb_clk_src.clkr.hw,
2139 .flags = CLK_SET_RATE_PARENT,
2140 .ops = &clk_branch2_ops,
2145 static struct clk_branch gcc_camss_csi0_clk = {
2146 .halt_reg = 0x4e03c,
2148 .enable_reg = 0x4e03c,
2149 .enable_mask = BIT(0),
2150 .hw.init = &(struct clk_init_data) {
2151 .name = "gcc_camss_csi0_clk",
2152 .parent_hws = (const struct clk_hw *[]) {
2153 &csi0_clk_src.clkr.hw,
2156 .flags = CLK_SET_RATE_PARENT,
2157 .ops = &clk_branch2_ops,
2162 static struct clk_branch gcc_camss_csi0phy_clk = {
2163 .halt_reg = 0x4e048,
2165 .enable_reg = 0x4e048,
2166 .enable_mask = BIT(0),
2167 .hw.init = &(struct clk_init_data) {
2168 .name = "gcc_camss_csi0phy_clk",
2169 .parent_hws = (const struct clk_hw *[]) {
2170 &csi0_clk_src.clkr.hw,
2173 .flags = CLK_SET_RATE_PARENT,
2174 .ops = &clk_branch2_ops,
2179 static struct clk_branch gcc_camss_csi0pix_clk = {
2180 .halt_reg = 0x4e058,
2182 .enable_reg = 0x4e058,
2183 .enable_mask = BIT(0),
2184 .hw.init = &(struct clk_init_data) {
2185 .name = "gcc_camss_csi0pix_clk",
2186 .parent_hws = (const struct clk_hw *[]) {
2187 &csi0_clk_src.clkr.hw,
2190 .flags = CLK_SET_RATE_PARENT,
2191 .ops = &clk_branch2_ops,
2196 static struct clk_branch gcc_camss_csi0rdi_clk = {
2197 .halt_reg = 0x4e050,
2199 .enable_reg = 0x4e050,
2200 .enable_mask = BIT(0),
2201 .hw.init = &(struct clk_init_data) {
2202 .name = "gcc_camss_csi0rdi_clk",
2203 .parent_hws = (const struct clk_hw *[]) {
2204 &csi0_clk_src.clkr.hw,
2207 .flags = CLK_SET_RATE_PARENT,
2208 .ops = &clk_branch2_ops,
2213 static struct clk_branch gcc_camss_csi1_ahb_clk = {
2214 .halt_reg = 0x4f040,
2216 .enable_reg = 0x4f040,
2217 .enable_mask = BIT(0),
2218 .hw.init = &(struct clk_init_data) {
2219 .name = "gcc_camss_csi1_ahb_clk",
2220 .parent_hws = (const struct clk_hw *[]) {
2221 &camss_top_ahb_clk_src.clkr.hw,
2224 .flags = CLK_SET_RATE_PARENT,
2225 .ops = &clk_branch2_ops,
2230 static struct clk_branch gcc_camss_csi1_clk = {
2231 .halt_reg = 0x4f03c,
2233 .enable_reg = 0x4f03c,
2234 .enable_mask = BIT(0),
2235 .hw.init = &(struct clk_init_data) {
2236 .name = "gcc_camss_csi1_clk",
2237 .parent_hws = (const struct clk_hw *[]) {
2238 &csi1_clk_src.clkr.hw,
2241 .flags = CLK_SET_RATE_PARENT,
2242 .ops = &clk_branch2_ops,
2247 static struct clk_branch gcc_camss_csi1phy_clk = {
2248 .halt_reg = 0x4f048,
2250 .enable_reg = 0x4f048,
2251 .enable_mask = BIT(0),
2252 .hw.init = &(struct clk_init_data) {
2253 .name = "gcc_camss_csi1phy_clk",
2254 .parent_hws = (const struct clk_hw *[]) {
2255 &csi1_clk_src.clkr.hw,
2258 .flags = CLK_SET_RATE_PARENT,
2259 .ops = &clk_branch2_ops,
2264 static struct clk_branch gcc_camss_csi1pix_clk = {
2265 .halt_reg = 0x4f058,
2267 .enable_reg = 0x4f058,
2268 .enable_mask = BIT(0),
2269 .hw.init = &(struct clk_init_data) {
2270 .name = "gcc_camss_csi1pix_clk",
2271 .parent_hws = (const struct clk_hw *[]) {
2272 &csi1_clk_src.clkr.hw,
2275 .flags = CLK_SET_RATE_PARENT,
2276 .ops = &clk_branch2_ops,
2281 static struct clk_branch gcc_camss_csi1rdi_clk = {
2282 .halt_reg = 0x4f050,
2284 .enable_reg = 0x4f050,
2285 .enable_mask = BIT(0),
2286 .hw.init = &(struct clk_init_data) {
2287 .name = "gcc_camss_csi1rdi_clk",
2288 .parent_hws = (const struct clk_hw *[]) {
2289 &csi1_clk_src.clkr.hw,
2292 .flags = CLK_SET_RATE_PARENT,
2293 .ops = &clk_branch2_ops,
2298 static struct clk_branch gcc_camss_csi2_ahb_clk = {
2299 .halt_reg = 0x3c040,
2301 .enable_reg = 0x3c040,
2302 .enable_mask = BIT(0),
2303 .hw.init = &(struct clk_init_data) {
2304 .name = "gcc_camss_csi2_ahb_clk",
2305 .parent_hws = (const struct clk_hw *[]) {
2306 &camss_top_ahb_clk_src.clkr.hw,
2309 .flags = CLK_SET_RATE_PARENT,
2310 .ops = &clk_branch2_ops,
2315 static struct clk_branch gcc_camss_csi2_clk = {
2316 .halt_reg = 0x3c03c,
2318 .enable_reg = 0x3c03c,
2319 .enable_mask = BIT(0),
2320 .hw.init = &(struct clk_init_data) {
2321 .name = "gcc_camss_csi2_clk",
2322 .parent_hws = (const struct clk_hw *[]) {
2323 &csi2_clk_src.clkr.hw,
2326 .flags = CLK_SET_RATE_PARENT,
2327 .ops = &clk_branch2_ops,
2332 static struct clk_branch gcc_camss_csi2phy_clk = {
2333 .halt_reg = 0x3c048,
2335 .enable_reg = 0x3c048,
2336 .enable_mask = BIT(0),
2337 .hw.init = &(struct clk_init_data) {
2338 .name = "gcc_camss_csi2phy_clk",
2339 .parent_hws = (const struct clk_hw *[]) {
2340 &csi2_clk_src.clkr.hw,
2343 .flags = CLK_SET_RATE_PARENT,
2344 .ops = &clk_branch2_ops,
2349 static struct clk_branch gcc_camss_csi2pix_clk = {
2350 .halt_reg = 0x3c058,
2352 .enable_reg = 0x3c058,
2353 .enable_mask = BIT(0),
2354 .hw.init = &(struct clk_init_data) {
2355 .name = "gcc_camss_csi2pix_clk",
2356 .parent_hws = (const struct clk_hw *[]) {
2357 &csi2_clk_src.clkr.hw,
2360 .flags = CLK_SET_RATE_PARENT,
2361 .ops = &clk_branch2_ops,
2366 static struct clk_branch gcc_camss_csi2rdi_clk = {
2367 .halt_reg = 0x3c050,
2369 .enable_reg = 0x3c050,
2370 .enable_mask = BIT(0),
2371 .hw.init = &(struct clk_init_data) {
2372 .name = "gcc_camss_csi2rdi_clk",
2373 .parent_hws = (const struct clk_hw *[]) {
2374 &csi2_clk_src.clkr.hw,
2377 .flags = CLK_SET_RATE_PARENT,
2378 .ops = &clk_branch2_ops,
2383 static struct clk_branch gcc_camss_csi_vfe0_clk = {
2384 .halt_reg = 0x58050,
2386 .enable_reg = 0x58050,
2387 .enable_mask = BIT(0),
2388 .hw.init = &(struct clk_init_data) {
2389 .name = "gcc_camss_csi_vfe0_clk",
2390 .parent_hws = (const struct clk_hw *[]) {
2391 &vfe0_clk_src.clkr.hw,
2394 .flags = CLK_SET_RATE_PARENT,
2395 .ops = &clk_branch2_ops,
2400 static struct clk_branch gcc_camss_csi_vfe1_clk = {
2401 .halt_reg = 0x58074,
2403 .enable_reg = 0x58074,
2404 .enable_mask = BIT(0),
2405 .hw.init = &(struct clk_init_data) {
2406 .name = "gcc_camss_csi_vfe1_clk",
2407 .parent_hws = (const struct clk_hw *[]) {
2408 &vfe1_clk_src.clkr.hw,
2411 .flags = CLK_SET_RATE_PARENT,
2412 .ops = &clk_branch2_ops,
2417 static struct clk_branch gcc_camss_gp0_clk = {
2418 .halt_reg = 0x54018,
2420 .enable_reg = 0x54018,
2421 .enable_mask = BIT(0),
2422 .hw.init = &(struct clk_init_data) {
2423 .name = "gcc_camss_gp0_clk",
2424 .parent_hws = (const struct clk_hw *[]) {
2425 &camss_gp0_clk_src.clkr.hw,
2428 .flags = CLK_SET_RATE_PARENT,
2429 .ops = &clk_branch2_ops,
2434 static struct clk_branch gcc_camss_gp1_clk = {
2435 .halt_reg = 0x55018,
2437 .enable_reg = 0x55018,
2438 .enable_mask = BIT(0),
2439 .hw.init = &(struct clk_init_data) {
2440 .name = "gcc_camss_gp1_clk",
2441 .parent_hws = (const struct clk_hw *[]) {
2442 &camss_gp1_clk_src.clkr.hw,
2445 .flags = CLK_SET_RATE_PARENT,
2446 .ops = &clk_branch2_ops,
2451 static struct clk_branch gcc_camss_ispif_ahb_clk = {
2452 .halt_reg = 0x50004,
2454 .enable_reg = 0x50004,
2455 .enable_mask = BIT(0),
2456 .hw.init = &(struct clk_init_data) {
2457 .name = "gcc_camss_ispif_ahb_clk",
2458 .parent_hws = (const struct clk_hw *[]) {
2459 &camss_top_ahb_clk_src.clkr.hw,
2462 .flags = CLK_SET_RATE_PARENT,
2463 .ops = &clk_branch2_ops,
2468 static struct clk_branch gcc_camss_jpeg0_clk = {
2469 .halt_reg = 0x57020,
2470 .halt_check = BRANCH_HALT,
2472 .enable_reg = 0x57020,
2473 .enable_mask = BIT(0),
2474 .hw.init = &(struct clk_init_data) {
2475 .name = "gcc_camss_jpeg0_clk",
2476 .parent_hws = (const struct clk_hw *[]) {
2477 &jpeg0_clk_src.clkr.hw,
2480 .flags = CLK_SET_RATE_PARENT,
2481 .ops = &clk_branch2_ops,
2486 static struct clk_branch gcc_camss_jpeg_ahb_clk = {
2487 .halt_reg = 0x57024,
2489 .enable_reg = 0x57024,
2490 .enable_mask = BIT(0),
2491 .hw.init = &(struct clk_init_data) {
2492 .name = "gcc_camss_jpeg_ahb_clk",
2493 .parent_hws = (const struct clk_hw *[]) {
2494 &camss_top_ahb_clk_src.clkr.hw,
2497 .flags = CLK_SET_RATE_PARENT,
2498 .ops = &clk_branch2_ops,
2503 static struct clk_branch gcc_camss_jpeg_axi_clk = {
2504 .halt_reg = 0x57028,
2506 .enable_reg = 0x57028,
2507 .enable_mask = BIT(0),
2508 .hw.init = &(struct clk_init_data) {
2509 .name = "gcc_camss_jpeg_axi_clk",
2510 .ops = &clk_branch2_ops,
2515 static struct clk_branch gcc_camss_mclk0_clk = {
2516 .halt_reg = 0x52018,
2518 .enable_reg = 0x52018,
2519 .enable_mask = BIT(0),
2520 .hw.init = &(struct clk_init_data) {
2521 .name = "gcc_camss_mclk0_clk",
2522 .parent_hws = (const struct clk_hw *[]) {
2523 &mclk0_clk_src.clkr.hw,
2526 .flags = CLK_SET_RATE_PARENT,
2527 .ops = &clk_branch2_ops,
2532 static struct clk_branch gcc_camss_mclk1_clk = {
2533 .halt_reg = 0x53018,
2535 .enable_reg = 0x53018,
2536 .enable_mask = BIT(0),
2537 .hw.init = &(struct clk_init_data) {
2538 .name = "gcc_camss_mclk1_clk",
2539 .parent_hws = (const struct clk_hw *[]) {
2540 &mclk1_clk_src.clkr.hw,
2543 .flags = CLK_SET_RATE_PARENT,
2544 .ops = &clk_branch2_ops,
2549 static struct clk_branch gcc_camss_mclk2_clk = {
2550 .halt_reg = 0x5c018,
2552 .enable_reg = 0x5c018,
2553 .enable_mask = BIT(0),
2554 .hw.init = &(struct clk_init_data) {
2555 .name = "gcc_camss_mclk2_clk",
2556 .parent_hws = (const struct clk_hw *[]) {
2557 &mclk2_clk_src.clkr.hw,
2560 .ops = &clk_branch2_ops,
2565 static struct clk_branch gcc_camss_micro_ahb_clk = {
2566 .halt_reg = 0x5600c,
2568 .enable_reg = 0x5600c,
2569 .enable_mask = BIT(0),
2570 .hw.init = &(struct clk_init_data) {
2571 .name = "gcc_camss_micro_ahb_clk",
2572 .parent_hws = (const struct clk_hw *[]) {
2573 &camss_top_ahb_clk_src.clkr.hw,
2576 .flags = CLK_SET_RATE_PARENT,
2577 .ops = &clk_branch2_ops,
2582 static struct clk_branch gcc_camss_csi0phytimer_clk = {
2583 .halt_reg = 0x4e01c,
2585 .enable_reg = 0x4e01c,
2586 .enable_mask = BIT(0),
2587 .hw.init = &(struct clk_init_data) {
2588 .name = "gcc_camss_csi0phytimer_clk",
2589 .parent_hws = (const struct clk_hw *[]) {
2590 &csi0phytimer_clk_src.clkr.hw,
2593 .flags = CLK_SET_RATE_PARENT,
2594 .ops = &clk_branch2_ops,
2599 static struct clk_branch gcc_camss_csi1phytimer_clk = {
2600 .halt_reg = 0x4f01c,
2602 .enable_reg = 0x4f01c,
2603 .enable_mask = BIT(0),
2604 .hw.init = &(struct clk_init_data) {
2605 .name = "gcc_camss_csi1phytimer_clk",
2606 .parent_hws = (const struct clk_hw *[]) {
2607 &csi1phytimer_clk_src.clkr.hw,
2610 .flags = CLK_SET_RATE_PARENT,
2611 .ops = &clk_branch2_ops,
2616 static struct clk_branch gcc_camss_ahb_clk = {
2617 .halt_reg = 0x56004,
2619 .enable_reg = 0x56004,
2620 .enable_mask = BIT(0),
2621 .hw.init = &(struct clk_init_data) {
2622 .name = "gcc_camss_ahb_clk",
2623 .ops = &clk_branch2_ops,
2628 static struct clk_branch gcc_camss_top_ahb_clk = {
2629 .halt_reg = 0x5a014,
2631 .enable_reg = 0x5a014,
2632 .enable_mask = BIT(0),
2633 .hw.init = &(struct clk_init_data) {
2634 .name = "gcc_camss_top_ahb_clk",
2635 .parent_hws = (const struct clk_hw *[]) {
2636 &camss_top_ahb_clk_src.clkr.hw,
2639 .flags = CLK_SET_RATE_PARENT,
2640 .ops = &clk_branch2_ops,
2645 static struct clk_branch gcc_camss_vfe0_clk = {
2646 .halt_reg = 0x58038,
2648 .enable_reg = 0x58038,
2649 .enable_mask = BIT(0),
2650 .hw.init = &(struct clk_init_data) {
2651 .name = "gcc_camss_vfe0_clk",
2652 .parent_hws = (const struct clk_hw *[]) {
2653 &vfe0_clk_src.clkr.hw,
2656 .flags = CLK_SET_RATE_PARENT,
2657 .ops = &clk_branch2_ops,
2662 static struct clk_branch gcc_camss_vfe_ahb_clk = {
2663 .halt_reg = 0x58044,
2665 .enable_reg = 0x58044,
2666 .enable_mask = BIT(0),
2667 .hw.init = &(struct clk_init_data) {
2668 .name = "gcc_camss_vfe_ahb_clk",
2669 .parent_hws = (const struct clk_hw *[]) {
2670 &camss_top_ahb_clk_src.clkr.hw,
2673 .flags = CLK_SET_RATE_PARENT,
2674 .ops = &clk_branch2_ops,
2679 static struct clk_branch gcc_camss_vfe_axi_clk = {
2680 .halt_reg = 0x58048,
2682 .enable_reg = 0x58048,
2683 .enable_mask = BIT(0),
2684 .hw.init = &(struct clk_init_data) {
2685 .name = "gcc_camss_vfe_axi_clk",
2686 .ops = &clk_branch2_ops,
2691 static struct clk_branch gcc_camss_vfe1_ahb_clk = {
2692 .halt_reg = 0x58060,
2694 .enable_reg = 0x58060,
2695 .enable_mask = BIT(0),
2696 .hw.init = &(struct clk_init_data) {
2697 .name = "gcc_camss_vfe1_ahb_clk",
2698 .parent_hws = (const struct clk_hw *[]) {
2699 &camss_top_ahb_clk_src.clkr.hw,
2702 .flags = CLK_SET_RATE_PARENT,
2703 .ops = &clk_branch2_ops,
2708 static struct clk_branch gcc_camss_vfe1_axi_clk = {
2709 .halt_reg = 0x58068,
2711 .enable_reg = 0x58068,
2712 .enable_mask = BIT(0),
2713 .hw.init = &(struct clk_init_data) {
2714 .name = "gcc_camss_vfe1_axi_clk",
2715 .ops = &clk_branch2_ops,
2720 static struct clk_branch gcc_camss_vfe1_clk = {
2721 .halt_reg = 0x5805c,
2723 .enable_reg = 0x5805c,
2724 .enable_mask = BIT(0),
2725 .hw.init = &(struct clk_init_data) {
2726 .name = "gcc_camss_vfe1_clk",
2727 .parent_hws = (const struct clk_hw *[]) {
2728 &vfe1_clk_src.clkr.hw,
2731 .flags = CLK_SET_RATE_PARENT,
2732 .ops = &clk_branch2_ops,
2737 static struct clk_branch gcc_dcc_clk = {
2738 .halt_reg = 0x77004,
2740 .enable_reg = 0x77004,
2741 .enable_mask = BIT(0),
2742 .hw.init = &(struct clk_init_data) {
2743 .name = "gcc_dcc_clk",
2744 .ops = &clk_branch2_ops,
2749 static struct clk_branch gcc_oxili_gmem_clk = {
2750 .halt_reg = 0x59024,
2752 .enable_reg = 0x59024,
2753 .enable_mask = BIT(0),
2754 .hw.init = &(struct clk_init_data) {
2755 .name = "gcc_oxili_gmem_clk",
2756 .parent_hws = (const struct clk_hw *[]) {
2757 &gfx3d_clk_src.clkr.hw,
2760 .flags = CLK_SET_RATE_PARENT,
2761 .ops = &clk_branch2_ops,
2766 static struct clk_branch gcc_gp1_clk = {
2768 .halt_check = BRANCH_HALT,
2770 .enable_reg = 0x8000,
2771 .enable_mask = BIT(0),
2772 .hw.init = &(struct clk_init_data) {
2773 .name = "gcc_gp1_clk",
2774 .parent_hws = (const struct clk_hw *[]) {
2775 &gp1_clk_src.clkr.hw,
2778 .flags = CLK_SET_RATE_PARENT,
2779 .ops = &clk_branch2_ops,
2784 static struct clk_branch gcc_gp2_clk = {
2786 .halt_check = BRANCH_HALT,
2788 .enable_reg = 0x9000,
2789 .enable_mask = BIT(0),
2790 .hw.init = &(struct clk_init_data) {
2791 .name = "gcc_gp2_clk",
2792 .parent_hws = (const struct clk_hw *[]) {
2793 &gp2_clk_src.clkr.hw,
2796 .flags = CLK_SET_RATE_PARENT,
2797 .ops = &clk_branch2_ops,
2802 static struct clk_branch gcc_gp3_clk = {
2804 .halt_check = BRANCH_HALT,
2806 .enable_reg = 0xa000,
2807 .enable_mask = BIT(0),
2808 .hw.init = &(struct clk_init_data) {
2809 .name = "gcc_gp3_clk",
2810 .parent_hws = (const struct clk_hw *[]) {
2811 &gp3_clk_src.clkr.hw,
2814 .flags = CLK_SET_RATE_PARENT,
2815 .ops = &clk_branch2_ops,
2820 static struct clk_branch gcc_mdss_ahb_clk = {
2821 .halt_reg = 0x4d07c,
2822 .halt_check = BRANCH_HALT,
2824 .enable_reg = 0x4d07c,
2825 .enable_mask = BIT(0),
2826 .hw.init = &(struct clk_init_data) {
2827 .name = "gcc_mdss_ahb_clk",
2828 .ops = &clk_branch2_ops,
2833 static struct clk_branch gcc_mdss_axi_clk = {
2834 .halt_reg = 0x4d080,
2835 .halt_check = BRANCH_HALT,
2837 .enable_reg = 0x4d080,
2838 .enable_mask = BIT(0),
2839 .hw.init = &(struct clk_init_data) {
2840 .name = "gcc_mdss_axi_clk",
2841 .ops = &clk_branch2_ops,
2846 static struct clk_branch gcc_mdss_byte0_clk = {
2847 .halt_reg = 0x4d094,
2848 .halt_check = BRANCH_HALT,
2850 .enable_reg = 0x4d094,
2851 .enable_mask = BIT(0),
2852 .hw.init = &(struct clk_init_data) {
2853 .name = "gcc_mdss_byte0_clk",
2854 .parent_hws = (const struct clk_hw *[]) {
2855 &byte0_clk_src.clkr.hw,
2858 .flags = CLK_SET_RATE_PARENT,
2859 .ops = &clk_branch2_ops,
2864 static struct clk_branch gcc_mdss_byte1_clk = {
2865 .halt_reg = 0x4d0a0,
2866 .halt_check = BRANCH_HALT,
2868 .enable_reg = 0x4d0a0,
2869 .enable_mask = BIT(0),
2870 .hw.init = &(struct clk_init_data) {
2871 .name = "gcc_mdss_byte1_clk",
2872 .parent_hws = (const struct clk_hw *[]) {
2873 &byte1_clk_src.clkr.hw,
2876 .flags = CLK_SET_RATE_PARENT,
2877 .ops = &clk_branch2_ops,
2882 static struct clk_branch gcc_mdss_esc0_clk = {
2883 .halt_reg = 0x4d098,
2884 .halt_check = BRANCH_HALT,
2886 .enable_reg = 0x4d098,
2887 .enable_mask = BIT(0),
2888 .hw.init = &(struct clk_init_data) {
2889 .name = "gcc_mdss_esc0_clk",
2890 .parent_hws = (const struct clk_hw *[]) {
2891 &esc0_clk_src.clkr.hw,
2894 .flags = CLK_SET_RATE_PARENT,
2895 .ops = &clk_branch2_ops,
2900 static struct clk_branch gcc_mdss_esc1_clk = {
2901 .halt_reg = 0x4d09c,
2902 .halt_check = BRANCH_HALT,
2904 .enable_reg = 0x4d09c,
2905 .enable_mask = BIT(0),
2906 .hw.init = &(struct clk_init_data) {
2907 .name = "gcc_mdss_esc1_clk",
2908 .parent_hws = (const struct clk_hw *[]) {
2909 &esc1_clk_src.clkr.hw,
2912 .flags = CLK_SET_RATE_PARENT,
2913 .ops = &clk_branch2_ops,
2918 static struct clk_branch gcc_mdss_mdp_clk = {
2919 .halt_reg = 0x4d088,
2920 .halt_check = BRANCH_HALT,
2922 .enable_reg = 0x4d088,
2923 .enable_mask = BIT(0),
2924 .hw.init = &(struct clk_init_data) {
2925 .name = "gcc_mdss_mdp_clk",
2926 .parent_hws = (const struct clk_hw *[]) {
2927 &mdp_clk_src.clkr.hw,
2930 .flags = CLK_SET_RATE_PARENT,
2931 .ops = &clk_branch2_ops,
2936 static struct clk_branch gcc_mdss_pclk0_clk = {
2937 .halt_reg = 0x4d084,
2938 .halt_check = BRANCH_HALT,
2940 .enable_reg = 0x4d084,
2941 .enable_mask = BIT(0),
2942 .hw.init = &(struct clk_init_data) {
2943 .name = "gcc_mdss_pclk0_clk",
2944 .parent_hws = (const struct clk_hw *[]) {
2945 &pclk0_clk_src.clkr.hw,
2948 .flags = CLK_SET_RATE_PARENT,
2949 .ops = &clk_branch2_ops,
2954 static struct clk_branch gcc_mdss_pclk1_clk = {
2955 .halt_reg = 0x4d0a4,
2956 .halt_check = BRANCH_HALT,
2958 .enable_reg = 0x4d0a4,
2959 .enable_mask = BIT(0),
2960 .hw.init = &(struct clk_init_data) {
2961 .name = "gcc_mdss_pclk1_clk",
2962 .parent_hws = (const struct clk_hw *[]) {
2963 &pclk1_clk_src.clkr.hw,
2966 .flags = CLK_SET_RATE_PARENT,
2967 .ops = &clk_branch2_ops,
2972 static struct clk_branch gcc_mdss_vsync_clk = {
2973 .halt_reg = 0x4d090,
2974 .halt_check = BRANCH_HALT,
2976 .enable_reg = 0x4d090,
2977 .enable_mask = BIT(0),
2978 .hw.init = &(struct clk_init_data) {
2979 .name = "gcc_mdss_vsync_clk",
2980 .parent_hws = (const struct clk_hw *[]) {
2981 &vsync_clk_src.clkr.hw,
2984 .flags = CLK_SET_RATE_PARENT,
2985 .ops = &clk_branch2_ops,
2990 static struct clk_branch gcc_mss_cfg_ahb_clk = {
2991 .halt_reg = 0x49000,
2993 .enable_reg = 0x49000,
2994 .enable_mask = BIT(0),
2995 .hw.init = &(struct clk_init_data) {
2996 .name = "gcc_mss_cfg_ahb_clk",
2997 .ops = &clk_branch2_ops,
3002 static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
3003 .halt_reg = 0x49004,
3004 .halt_check = BRANCH_HALT,
3006 .enable_reg = 0x49004,
3007 .enable_mask = BIT(0),
3008 .hw.init = &(struct clk_init_data) {
3009 .name = "gcc_mss_q6_bimc_axi_clk",
3010 .ops = &clk_branch2_ops,
3015 static struct clk_branch gcc_bimc_gfx_clk = {
3016 .halt_reg = 0x59048,
3018 .enable_reg = 0x59048,
3019 .enable_mask = BIT(0),
3020 .hw.init = &(struct clk_init_data) {
3021 .name = "gcc_bimc_gfx_clk",
3022 .ops = &clk_branch2_ops,
3027 static struct clk_branch gcc_oxili_ahb_clk = {
3028 .halt_reg = 0x59028,
3030 .enable_reg = 0x59028,
3031 .enable_mask = BIT(0),
3032 .hw.init = &(struct clk_init_data) {
3033 .name = "gcc_oxili_ahb_clk",
3034 .ops = &clk_branch2_ops,
3039 static struct clk_branch gcc_oxili_aon_clk = {
3040 .halt_reg = 0x59044,
3042 .enable_reg = 0x59044,
3043 .enable_mask = BIT(0),
3044 .hw.init = &(struct clk_init_data) {
3045 .name = "gcc_oxili_aon_clk",
3046 .parent_hws = (const struct clk_hw *[]) {
3047 &gfx3d_clk_src.clkr.hw,
3050 .flags = CLK_SET_RATE_PARENT,
3051 .ops = &clk_branch2_ops,
3056 static struct clk_branch gcc_oxili_gfx3d_clk = {
3057 .halt_reg = 0x59020,
3059 .enable_reg = 0x59020,
3060 .enable_mask = BIT(0),
3061 .hw.init = &(struct clk_init_data) {
3062 .name = "gcc_oxili_gfx3d_clk",
3063 .parent_hws = (const struct clk_hw *[]) {
3064 &gfx3d_clk_src.clkr.hw,
3067 .flags = CLK_SET_RATE_PARENT,
3068 .ops = &clk_branch2_ops,
3073 static struct clk_branch gcc_oxili_timer_clk = {
3074 .halt_reg = 0x59040,
3076 .enable_reg = 0x59040,
3077 .enable_mask = BIT(0),
3078 .hw.init = &(struct clk_init_data) {
3079 .name = "gcc_oxili_timer_clk",
3080 .parent_data = &(const struct clk_parent_data){
3084 .ops = &clk_branch2_ops,
3089 static struct clk_branch gcc_pdm2_clk = {
3090 .halt_reg = 0x4400c,
3091 .halt_check = BRANCH_HALT,
3093 .enable_reg = 0x4400c,
3094 .enable_mask = BIT(0),
3095 .hw.init = &(struct clk_init_data) {
3096 .name = "gcc_pdm2_clk",
3097 .parent_hws = (const struct clk_hw *[]) {
3098 &pdm2_clk_src.clkr.hw,
3101 .flags = CLK_SET_RATE_PARENT,
3102 .ops = &clk_branch2_ops,
3107 static struct clk_branch gcc_pdm_ahb_clk = {
3108 .halt_reg = 0x44004,
3109 .halt_check = BRANCH_HALT,
3111 .enable_reg = 0x44004,
3112 .enable_mask = BIT(0),
3113 .hw.init = &(struct clk_init_data) {
3114 .name = "gcc_pdm_ahb_clk",
3115 .ops = &clk_branch2_ops,
3120 static struct clk_branch gcc_rbcpr_gfx_ahb_clk = {
3121 .halt_reg = 0x3a008,
3123 .enable_reg = 0x3a008,
3124 .enable_mask = BIT(0),
3125 .hw.init = &(struct clk_init_data) {
3126 .name = "gcc_rbcpr_gfx_ahb_clk",
3127 .ops = &clk_branch2_ops,
3132 static struct clk_branch gcc_rbcpr_gfx_clk = {
3133 .halt_reg = 0x3a004,
3135 .enable_reg = 0x3a004,
3136 .enable_mask = BIT(0),
3137 .hw.init = &(struct clk_init_data) {
3138 .name = "gcc_rbcpr_gfx_clk",
3139 .parent_hws = (const struct clk_hw *[]) {
3140 &rbcpr_gfx_clk_src.clkr.hw,
3143 .flags = CLK_SET_RATE_PARENT,
3144 .ops = &clk_branch2_ops,
3149 static struct clk_branch gcc_sdcc1_ahb_clk = {
3150 .halt_reg = 0x4201c,
3151 .halt_check = BRANCH_HALT,
3153 .enable_reg = 0x4201c,
3154 .enable_mask = BIT(0),
3155 .hw.init = &(struct clk_init_data) {
3156 .name = "gcc_sdcc1_ahb_clk",
3157 .ops = &clk_branch2_ops,
3162 static struct clk_branch gcc_sdcc1_apps_clk = {
3163 .halt_reg = 0x42018,
3164 .halt_check = BRANCH_HALT,
3166 .enable_reg = 0x42018,
3167 .enable_mask = BIT(0),
3168 .hw.init = &(struct clk_init_data) {
3169 .name = "gcc_sdcc1_apps_clk",
3170 .parent_hws = (const struct clk_hw *[]) {
3171 &sdcc1_apps_clk_src.clkr.hw,
3174 .flags = CLK_SET_RATE_PARENT,
3175 .ops = &clk_branch2_ops,
3180 static struct clk_branch gcc_sdcc1_ice_core_clk = {
3181 .halt_reg = 0x5d014,
3182 .halt_check = BRANCH_HALT,
3184 .enable_reg = 0x5d014,
3185 .enable_mask = BIT(0),
3186 .hw.init = &(struct clk_init_data) {
3187 .name = "gcc_sdcc1_ice_core_clk",
3188 .parent_hws = (const struct clk_hw *[]) {
3189 &sdcc1_ice_core_clk_src.clkr.hw,
3192 .flags = CLK_SET_RATE_PARENT,
3193 .ops = &clk_branch2_ops,
3198 static struct clk_branch gcc_sdcc2_ahb_clk = {
3199 .halt_reg = 0x4301c,
3200 .halt_check = BRANCH_HALT,
3202 .enable_reg = 0x4301c,
3203 .enable_mask = BIT(0),
3204 .hw.init = &(struct clk_init_data) {
3205 .name = "gcc_sdcc2_ahb_clk",
3206 .ops = &clk_branch2_ops,
3211 static struct clk_branch gcc_sdcc2_apps_clk = {
3212 .halt_reg = 0x43018,
3213 .halt_check = BRANCH_HALT,
3215 .enable_reg = 0x43018,
3216 .enable_mask = BIT(0),
3217 .hw.init = &(struct clk_init_data) {
3218 .name = "gcc_sdcc2_apps_clk",
3219 .parent_hws = (const struct clk_hw *[]) {
3220 &sdcc2_apps_clk_src.clkr.hw,
3223 .flags = CLK_SET_RATE_PARENT,
3224 .ops = &clk_branch2_ops,
3229 static struct clk_branch gcc_sdcc3_ahb_clk = {
3230 .halt_reg = 0x3901c,
3231 .halt_check = BRANCH_HALT,
3233 .enable_reg = 0x3901c,
3234 .enable_mask = BIT(0),
3235 .hw.init = &(struct clk_init_data) {
3236 .name = "gcc_sdcc3_ahb_clk",
3237 .ops = &clk_branch2_ops,
3242 static struct clk_branch gcc_sdcc3_apps_clk = {
3243 .halt_reg = 0x39018,
3244 .halt_check = BRANCH_HALT,
3246 .enable_reg = 0x39018,
3247 .enable_mask = BIT(0),
3248 .hw.init = &(struct clk_init_data) {
3249 .name = "gcc_sdcc3_apps_clk",
3250 .parent_hws = (const struct clk_hw *[]) {
3251 &sdcc3_apps_clk_src.clkr.hw,
3254 .flags = CLK_SET_RATE_PARENT,
3255 .ops = &clk_branch2_ops,
3260 static struct clk_branch gcc_usb2a_phy_sleep_clk = {
3261 .halt_reg = 0x4102c,
3263 .enable_reg = 0x4102c,
3264 .enable_mask = BIT(0),
3265 .hw.init = &(struct clk_init_data) {
3266 .name = "gcc_usb2a_phy_sleep_clk",
3267 .ops = &clk_branch2_ops,
3272 static struct clk_branch gcc_usb_hs_phy_cfg_ahb_clk = {
3273 .halt_reg = 0x41030,
3275 .enable_reg = 0x41030,
3276 .enable_mask = BIT(0),
3277 .hw.init = &(struct clk_init_data) {
3278 .name = "gcc_usb_hs_phy_cfg_ahb_clk",
3279 .ops = &clk_branch2_ops,
3284 static struct clk_branch gcc_usb_fs_ahb_clk = {
3285 .halt_reg = 0x3f008,
3287 .enable_reg = 0x3f008,
3288 .enable_mask = BIT(0),
3289 .hw.init = &(struct clk_init_data) {
3290 .name = "gcc_usb_fs_ahb_clk",
3291 .ops = &clk_branch2_ops,
3296 static struct clk_branch gcc_usb_fs_ic_clk = {
3297 .halt_reg = 0x3f030,
3299 .enable_reg = 0x3f030,
3300 .enable_mask = BIT(0),
3301 .hw.init = &(struct clk_init_data) {
3302 .name = "gcc_usb_fs_ic_clk",
3303 .parent_hws = (const struct clk_hw *[]) {
3304 &usb_fs_ic_clk_src.clkr.hw,
3307 .flags = CLK_SET_RATE_PARENT,
3308 .ops = &clk_branch2_ops,
3313 static struct clk_branch gcc_usb_fs_system_clk = {
3314 .halt_reg = 0x3f004,
3316 .enable_reg = 0x3f004,
3317 .enable_mask = BIT(0),
3318 .hw.init = &(struct clk_init_data) {
3319 .name = "gcc_usb_fs_system_clk",
3320 .parent_hws = (const struct clk_hw *[]) {
3321 &usb_fs_system_clk_src.clkr.hw,
3324 .flags = CLK_SET_RATE_PARENT,
3325 .ops = &clk_branch2_ops,
3330 static struct clk_branch gcc_usb_hs_ahb_clk = {
3331 .halt_reg = 0x41008,
3333 .enable_reg = 0x41008,
3334 .enable_mask = BIT(0),
3335 .hw.init = &(struct clk_init_data) {
3336 .name = "gcc_usb_hs_ahb_clk",
3337 .ops = &clk_branch2_ops,
3342 static struct clk_branch gcc_usb_hs_system_clk = {
3343 .halt_reg = 0x41004,
3345 .enable_reg = 0x41004,
3346 .enable_mask = BIT(0),
3347 .hw.init = &(struct clk_init_data) {
3348 .name = "gcc_usb_hs_system_clk",
3349 .parent_hws = (const struct clk_hw *[]) {
3350 &usb_hs_system_clk_src.clkr.hw,
3353 .flags = CLK_SET_RATE_PARENT,
3354 .ops = &clk_branch2_ops,
3359 static struct clk_branch gcc_venus0_ahb_clk = {
3360 .halt_reg = 0x4c020,
3362 .enable_reg = 0x4c020,
3363 .enable_mask = BIT(0),
3364 .hw.init = &(struct clk_init_data) {
3365 .name = "gcc_venus0_ahb_clk",
3366 .ops = &clk_branch2_ops,
3371 static struct clk_branch gcc_venus0_axi_clk = {
3372 .halt_reg = 0x4c024,
3374 .enable_reg = 0x4c024,
3375 .enable_mask = BIT(0),
3376 .hw.init = &(struct clk_init_data) {
3377 .name = "gcc_venus0_axi_clk",
3378 .ops = &clk_branch2_ops,
3383 static struct clk_branch gcc_venus0_core0_vcodec0_clk = {
3384 .halt_reg = 0x4c02c,
3386 .enable_reg = 0x4c02c,
3387 .enable_mask = BIT(0),
3388 .hw.init = &(struct clk_init_data) {
3389 .name = "gcc_venus0_core0_vcodec0_clk",
3390 .parent_hws = (const struct clk_hw *[]) {
3391 &vcodec0_clk_src.clkr.hw,
3394 .flags = CLK_SET_RATE_PARENT,
3395 .ops = &clk_branch2_ops,
3400 static struct clk_branch gcc_venus0_core1_vcodec0_clk = {
3401 .halt_reg = 0x4c034,
3403 .enable_reg = 0x4c034,
3404 .enable_mask = BIT(0),
3405 .hw.init = &(struct clk_init_data) {
3406 .name = "gcc_venus0_core1_vcodec0_clk",
3407 .parent_hws = (const struct clk_hw *[]) {
3408 &vcodec0_clk_src.clkr.hw,
3411 .flags = CLK_SET_RATE_PARENT,
3412 .ops = &clk_branch2_ops,
3417 static struct clk_branch gcc_venus0_vcodec0_clk = {
3418 .halt_reg = 0x4c01c,
3420 .enable_reg = 0x4c01c,
3421 .enable_mask = BIT(0),
3422 .hw.init = &(struct clk_init_data) {
3423 .name = "gcc_venus0_vcodec0_clk",
3424 .parent_hws = (const struct clk_hw *[]) {
3425 &vcodec0_clk_src.clkr.hw,
3428 .flags = CLK_SET_RATE_PARENT,
3429 .ops = &clk_branch2_ops,
3435 static struct clk_branch gcc_apss_ahb_clk = {
3436 .halt_reg = 0x4601c,
3437 .halt_check = BRANCH_HALT_VOTED,
3439 .enable_reg = 0x45004,
3440 .enable_mask = BIT(14),
3441 .hw.init = &(struct clk_init_data){
3442 .name = "gcc_apss_ahb_clk",
3443 .ops = &clk_branch2_ops,
3448 static struct clk_branch gcc_apss_axi_clk = {
3449 .halt_reg = 0x46020,
3450 .halt_check = BRANCH_HALT_VOTED,
3452 .enable_reg = 0x45004,
3453 .enable_mask = BIT(13),
3454 .hw.init = &(struct clk_init_data){
3455 .name = "gcc_apss_axi_clk",
3456 .ops = &clk_branch2_ops,
3461 static struct clk_branch gcc_blsp1_ahb_clk = {
3463 .halt_check = BRANCH_HALT_VOTED,
3465 .enable_reg = 0x45004,
3466 .enable_mask = BIT(10),
3467 .hw.init = &(struct clk_init_data){
3468 .name = "gcc_blsp1_ahb_clk",
3469 .ops = &clk_branch2_ops,
3474 static struct clk_branch gcc_blsp2_ahb_clk = {
3476 .halt_check = BRANCH_HALT_VOTED,
3478 .enable_reg = 0x45004,
3479 .enable_mask = BIT(20),
3480 .hw.init = &(struct clk_init_data){
3481 .name = "gcc_blsp2_ahb_clk",
3482 .ops = &clk_branch2_ops,
3487 static struct clk_branch gcc_prng_ahb_clk = {
3488 .halt_reg = 0x13004,
3489 .halt_check = BRANCH_HALT_VOTED,
3491 .enable_reg = 0x45004,
3492 .enable_mask = BIT(8),
3493 .hw.init = &(struct clk_init_data){
3494 .name = "gcc_prng_ahb_clk",
3495 .ops = &clk_branch2_ops,
3500 static struct clk_branch gcc_boot_rom_ahb_clk = {
3501 .halt_reg = 0x1300c,
3502 .halt_check = BRANCH_HALT_VOTED,
3504 .enable_reg = 0x45004,
3505 .enable_mask = BIT(7),
3506 .hw.init = &(struct clk_init_data){
3507 .name = "gcc_boot_rom_ahb_clk",
3508 .ops = &clk_branch2_ops,
3513 static struct clk_branch gcc_crypto_ahb_clk = {
3514 .halt_reg = 0x16024,
3515 .halt_check = BRANCH_HALT_VOTED,
3517 .enable_reg = 0x45004,
3518 .enable_mask = BIT(0),
3519 .hw.init = &(struct clk_init_data){
3520 .name = "gcc_crypto_ahb_clk",
3521 .ops = &clk_branch2_ops,
3526 static struct clk_branch gcc_crypto_axi_clk = {
3527 .halt_reg = 0x16020,
3528 .halt_check = BRANCH_HALT_VOTED,
3530 .enable_reg = 0x45004,
3531 .enable_mask = BIT(1),
3532 .hw.init = &(struct clk_init_data){
3533 .name = "gcc_crypto_axi_clk",
3534 .ops = &clk_branch2_ops,
3539 static struct clk_branch gcc_crypto_clk = {
3540 .halt_reg = 0x1601c,
3541 .halt_check = BRANCH_HALT_VOTED,
3543 .enable_reg = 0x45004,
3544 .enable_mask = BIT(2),
3545 .hw.init = &(struct clk_init_data){
3546 .name = "gcc_crypto_clk",
3547 .parent_hws = (const struct clk_hw *[]) {
3548 &crypto_clk_src.clkr.hw,
3551 .flags = CLK_SET_RATE_PARENT,
3552 .ops = &clk_branch2_ops,
3557 static struct clk_branch gcc_cpp_tbu_clk = {
3558 .halt_reg = 0x12040,
3559 .halt_check = BRANCH_HALT_VOTED,
3561 .enable_reg = 0x4500c,
3562 .enable_mask = BIT(14),
3563 .hw.init = &(struct clk_init_data){
3564 .name = "gcc_cpp_tbu_clk",
3565 .ops = &clk_branch2_ops,
3570 static struct clk_branch gcc_gfx_1_tbu_clk = {
3571 .halt_reg = 0x12098,
3572 .halt_check = BRANCH_HALT_VOTED,
3574 .enable_reg = 0x4500c,
3575 .enable_mask = BIT(19),
3576 .hw.init = &(struct clk_init_data){
3577 .name = "gcc_gfx_1_tbu_clk",
3578 .ops = &clk_branch2_ops,
3583 static struct clk_branch gcc_gfx_tbu_clk = {
3584 .halt_reg = 0x12010,
3585 .halt_check = BRANCH_HALT_VOTED,
3587 .enable_reg = 0x4500c,
3588 .enable_mask = BIT(3),
3589 .hw.init = &(struct clk_init_data){
3590 .name = "gcc_gfx_tbu_clk",
3591 .ops = &clk_branch2_ops,
3596 static struct clk_branch gcc_gfx_tcu_clk = {
3597 .halt_reg = 0x12020,
3598 .halt_check = BRANCH_HALT_VOTED,
3600 .enable_reg = 0x4500c,
3601 .enable_mask = BIT(2),
3602 .hw.init = &(struct clk_init_data){
3603 .name = "gcc_gfx_tcu_clk",
3604 .ops = &clk_branch2_ops,
3609 static struct clk_branch gcc_apss_tcu_clk = {
3610 .halt_reg = 0x12018,
3611 .halt_check = BRANCH_HALT_VOTED,
3613 .enable_reg = 0x4500c,
3614 .enable_mask = BIT(1),
3615 .hw.init = &(struct clk_init_data){
3616 .name = "gcc_apss_tcu_clk",
3617 .ops = &clk_branch2_ops,
3622 static struct clk_branch gcc_gtcu_ahb_clk = {
3623 .halt_reg = 0x12044,
3624 .halt_check = BRANCH_HALT_VOTED,
3626 .enable_reg = 0x4500c,
3627 .enable_mask = BIT(13),
3628 .hw.init = &(struct clk_init_data){
3629 .name = "gcc_gtcu_ahb_clk",
3630 .ops = &clk_branch2_ops,
3635 static struct clk_branch gcc_jpeg_tbu_clk = {
3636 .halt_reg = 0x12034,
3637 .halt_check = BRANCH_HALT_VOTED,
3639 .enable_reg = 0x4500c,
3640 .enable_mask = BIT(10),
3641 .hw.init = &(struct clk_init_data){
3642 .name = "gcc_jpeg_tbu_clk",
3643 .ops = &clk_branch2_ops,
3648 static struct clk_branch gcc_mdp_rt_tbu_clk = {
3649 .halt_reg = 0x1204c,
3650 .halt_check = BRANCH_HALT_VOTED,
3652 .enable_reg = 0x4500c,
3653 .enable_mask = BIT(15),
3654 .hw.init = &(struct clk_init_data){
3655 .name = "gcc_mdp_rt_tbu_clk",
3656 .ops = &clk_branch2_ops,
3661 static struct clk_branch gcc_mdp_tbu_clk = {
3662 .halt_reg = 0x1201c,
3663 .halt_check = BRANCH_HALT_VOTED,
3665 .enable_reg = 0x4500c,
3666 .enable_mask = BIT(4),
3667 .hw.init = &(struct clk_init_data){
3668 .name = "gcc_mdp_tbu_clk",
3669 .ops = &clk_branch2_ops,
3674 static struct clk_branch gcc_smmu_cfg_clk = {
3675 .halt_reg = 0x12038,
3676 .halt_check = BRANCH_HALT_VOTED,
3678 .enable_reg = 0x4500c,
3679 .enable_mask = BIT(12),
3680 .hw.init = &(struct clk_init_data){
3681 .name = "gcc_smmu_cfg_clk",
3682 .ops = &clk_branch2_ops,
3687 static struct clk_branch gcc_venus_1_tbu_clk = {
3688 .halt_reg = 0x1209c,
3689 .halt_check = BRANCH_HALT_VOTED,
3691 .enable_reg = 0x4500c,
3692 .enable_mask = BIT(20),
3693 .hw.init = &(struct clk_init_data){
3694 .name = "gcc_venus_1_tbu_clk",
3695 .ops = &clk_branch2_ops,
3700 static struct clk_branch gcc_venus_tbu_clk = {
3701 .halt_reg = 0x12014,
3702 .halt_check = BRANCH_HALT_VOTED,
3704 .enable_reg = 0x4500c,
3705 .enable_mask = BIT(5),
3706 .hw.init = &(struct clk_init_data){
3707 .name = "gcc_venus_tbu_clk",
3708 .ops = &clk_branch2_ops,
3713 static struct clk_branch gcc_vfe1_tbu_clk = {
3714 .halt_reg = 0x12090,
3715 .halt_check = BRANCH_HALT_VOTED,
3717 .enable_reg = 0x4500c,
3718 .enable_mask = BIT(17),
3719 .hw.init = &(struct clk_init_data){
3720 .name = "gcc_vfe1_tbu_clk",
3721 .ops = &clk_branch2_ops,
3726 static struct clk_branch gcc_vfe_tbu_clk = {
3727 .halt_reg = 0x1203c,
3728 .halt_check = BRANCH_HALT_VOTED,
3730 .enable_reg = 0x4500c,
3731 .enable_mask = BIT(9),
3732 .hw.init = &(struct clk_init_data){
3733 .name = "gcc_vfe_tbu_clk",
3734 .ops = &clk_branch2_ops,
3739 static struct gdsc venus_gdsc = {
3741 .cxcs = (unsigned int []){ 0x4c024, 0x4c01c },
3744 .name = "venus_gdsc",
3746 .pwrsts = PWRSTS_OFF_ON,
3749 static struct gdsc venus_core0_gdsc = {
3751 .cxcs = (unsigned int []){ 0x4c02c },
3754 .name = "venus_core0_gdsc",
3756 .pwrsts = PWRSTS_OFF_ON,
3759 static struct gdsc venus_core1_gdsc = {
3762 .name = "venus_core1_gdsc",
3764 .pwrsts = PWRSTS_OFF_ON,
3767 static struct gdsc mdss_gdsc = {
3769 .cxcs = (unsigned int []){ 0x4d080, 0x4d088 },
3772 .name = "mdss_gdsc",
3774 .pwrsts = PWRSTS_OFF_ON,
3777 static struct gdsc jpeg_gdsc = {
3779 .cxcs = (unsigned int []){ 0x57020, 0x57028 },
3782 .name = "jpeg_gdsc",
3784 .pwrsts = PWRSTS_OFF_ON,
3787 static struct gdsc vfe0_gdsc = {
3789 .cxcs = (unsigned int []){ 0x58038, 0x58048, 0x5600c, 0x58050 },
3792 .name = "vfe0_gdsc",
3794 .pwrsts = PWRSTS_OFF_ON,
3797 static struct gdsc vfe1_gdsc = {
3799 .cxcs = (unsigned int []){ 0x5805c, 0x58068, 0x5600c, 0x58074 },
3802 .name = "vfe1_gdsc",
3804 .pwrsts = PWRSTS_OFF_ON,
3807 static struct gdsc cpp_gdsc = {
3809 .cxcs = (unsigned int []){ 0x5803c, 0x58064 },
3814 .pwrsts = PWRSTS_OFF_ON,
3817 static struct gdsc oxili_cx_gdsc = {
3819 .cxcs = (unsigned int []){ 0x59020 },
3822 .name = "oxili_cx_gdsc",
3824 .pwrsts = PWRSTS_OFF_ON,
3828 static struct gdsc oxili_gx_gdsc = {
3830 .clamp_io_ctrl = 0x5b00c,
3831 .cxcs = (unsigned int []){ 0x59000, 0x59024 },
3834 .name = "oxili_gx_gdsc",
3836 .pwrsts = PWRSTS_OFF_ON,
3837 .supply = "vdd_gfx",
3841 static struct clk_regmap *gcc_msm8976_clocks[] = {
3842 [GPLL0] = &gpll0.clkr,
3843 [GPLL2] = &gpll2.clkr,
3844 [GPLL3] = &gpll3.clkr,
3845 [GPLL4] = &gpll4.clkr,
3846 [GPLL6] = &gpll6.clkr,
3847 [GPLL0_CLK_SRC] = &gpll0_vote,
3848 [GPLL2_CLK_SRC] = &gpll2_vote,
3849 [GPLL3_CLK_SRC] = &gpll3_vote,
3850 [GPLL4_CLK_SRC] = &gpll4_vote,
3851 [GPLL6_CLK_SRC] = &gpll6_vote,
3852 [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
3853 [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
3854 [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
3855 [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
3856 [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
3857 [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
3858 [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
3859 [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
3860 [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
3861 [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
3862 [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
3863 [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
3864 [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
3865 [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
3866 [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
3867 [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
3868 [GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
3869 [GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
3870 [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
3871 [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
3872 [GCC_CAMSS_CCI_AHB_CLK] = &gcc_camss_cci_ahb_clk.clkr,
3873 [GCC_CAMSS_CCI_CLK] = &gcc_camss_cci_clk.clkr,
3874 [GCC_CAMSS_CPP_AHB_CLK] = &gcc_camss_cpp_ahb_clk.clkr,
3875 [GCC_CAMSS_CPP_AXI_CLK] = &gcc_camss_cpp_axi_clk.clkr,
3876 [GCC_CAMSS_CPP_CLK] = &gcc_camss_cpp_clk.clkr,
3877 [GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr,
3878 [GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr,
3879 [GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr,
3880 [GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr,
3881 [GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr,
3882 [GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr,
3883 [GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr,
3884 [GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr,
3885 [GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr,
3886 [GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr,
3887 [GCC_CAMSS_CSI2_AHB_CLK] = &gcc_camss_csi2_ahb_clk.clkr,
3888 [GCC_CAMSS_CSI2_CLK] = &gcc_camss_csi2_clk.clkr,
3889 [GCC_CAMSS_CSI2PHY_CLK] = &gcc_camss_csi2phy_clk.clkr,
3890 [GCC_CAMSS_CSI2PIX_CLK] = &gcc_camss_csi2pix_clk.clkr,
3891 [GCC_CAMSS_CSI2RDI_CLK] = &gcc_camss_csi2rdi_clk.clkr,
3892 [GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr,
3893 [GCC_CAMSS_CSI_VFE1_CLK] = &gcc_camss_csi_vfe1_clk.clkr,
3894 [GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr,
3895 [GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr,
3896 [GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr,
3897 [GCC_CAMSS_JPEG0_CLK] = &gcc_camss_jpeg0_clk.clkr,
3898 [GCC_CAMSS_JPEG_AHB_CLK] = &gcc_camss_jpeg_ahb_clk.clkr,
3899 [GCC_CAMSS_JPEG_AXI_CLK] = &gcc_camss_jpeg_axi_clk.clkr,
3900 [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
3901 [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
3902 [GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr,
3903 [GCC_CAMSS_MICRO_AHB_CLK] = &gcc_camss_micro_ahb_clk.clkr,
3904 [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
3905 [GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
3906 [GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr,
3907 [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
3908 [GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr,
3909 [GCC_CAMSS_VFE_AHB_CLK] = &gcc_camss_vfe_ahb_clk.clkr,
3910 [GCC_CAMSS_VFE_AXI_CLK] = &gcc_camss_vfe_axi_clk.clkr,
3911 [GCC_CAMSS_VFE1_AHB_CLK] = &gcc_camss_vfe1_ahb_clk.clkr,
3912 [GCC_CAMSS_VFE1_AXI_CLK] = &gcc_camss_vfe1_axi_clk.clkr,
3913 [GCC_CAMSS_VFE1_CLK] = &gcc_camss_vfe1_clk.clkr,
3914 [GCC_DCC_CLK] = &gcc_dcc_clk.clkr,
3915 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3916 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3917 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3918 [GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr,
3919 [GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr,
3920 [GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr,
3921 [GCC_MDSS_ESC1_CLK] = &gcc_mdss_esc1_clk.clkr,
3922 [GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr,
3923 [GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr,
3924 [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
3925 [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
3926 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3927 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3928 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3929 [GCC_RBCPR_GFX_AHB_CLK] = &gcc_rbcpr_gfx_ahb_clk.clkr,
3930 [GCC_RBCPR_GFX_CLK] = &gcc_rbcpr_gfx_clk.clkr,
3931 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
3932 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
3933 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
3934 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3935 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3936 [GCC_SDCC3_AHB_CLK] = &gcc_sdcc3_ahb_clk.clkr,
3937 [GCC_SDCC3_APPS_CLK] = &gcc_sdcc3_apps_clk.clkr,
3938 [GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
3939 [GCC_USB_HS_PHY_CFG_AHB_CLK] = &gcc_usb_hs_phy_cfg_ahb_clk.clkr,
3940 [GCC_USB_FS_AHB_CLK] = &gcc_usb_fs_ahb_clk.clkr,
3941 [GCC_USB_FS_IC_CLK] = &gcc_usb_fs_ic_clk.clkr,
3942 [GCC_USB_FS_SYSTEM_CLK] = &gcc_usb_fs_system_clk.clkr,
3943 [GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
3944 [GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
3945 [GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr,
3946 [GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr,
3947 [GCC_VENUS0_CORE0_VCODEC0_CLK] = &gcc_venus0_core0_vcodec0_clk.clkr,
3948 [GCC_VENUS0_CORE1_VCODEC0_CLK] = &gcc_venus0_core1_vcodec0_clk.clkr,
3949 [GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr,
3950 [GCC_APSS_AHB_CLK] = &gcc_apss_ahb_clk.clkr,
3951 [GCC_APSS_AXI_CLK] = &gcc_apss_axi_clk.clkr,
3952 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
3953 [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
3954 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3955 [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
3956 [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
3957 [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
3958 [GCC_CPP_TBU_CLK] = &gcc_cpp_tbu_clk.clkr,
3959 [GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr,
3960 [GCC_JPEG_TBU_CLK] = &gcc_jpeg_tbu_clk.clkr,
3961 [GCC_MDP_RT_TBU_CLK] = &gcc_mdp_rt_tbu_clk.clkr,
3962 [GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr,
3963 [GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,
3964 [GCC_VENUS_1_TBU_CLK] = &gcc_venus_1_tbu_clk.clkr,
3965 [GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr,
3966 [GCC_VFE1_TBU_CLK] = &gcc_vfe1_tbu_clk.clkr,
3967 [GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr,
3968 [GCC_APS_0_CLK] = &gcc_aps_0_clk.clkr,
3969 [GCC_APS_1_CLK] = &gcc_aps_1_clk.clkr,
3970 [APS_0_CLK_SRC] = &aps_0_clk_src.clkr,
3971 [APS_1_CLK_SRC] = &aps_1_clk_src.clkr,
3972 [APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
3973 [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
3974 [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
3975 [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
3976 [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
3977 [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
3978 [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
3979 [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
3980 [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
3981 [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
3982 [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
3983 [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
3984 [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
3985 [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
3986 [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
3987 [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
3988 [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
3989 [BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
3990 [BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
3991 [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
3992 [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
3993 [CCI_CLK_SRC] = &cci_clk_src.clkr,
3994 [CPP_CLK_SRC] = &cpp_clk_src.clkr,
3995 [CSI0_CLK_SRC] = &csi0_clk_src.clkr,
3996 [CSI1_CLK_SRC] = &csi1_clk_src.clkr,
3997 [CSI2_CLK_SRC] = &csi2_clk_src.clkr,
3998 [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
3999 [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
4000 [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
4001 [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
4002 [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
4003 [MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,
4004 [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
4005 [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
4006 [CAMSS_TOP_AHB_CLK_SRC] = &camss_top_ahb_clk_src.clkr,
4007 [VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
4008 [VFE1_CLK_SRC] = &vfe1_clk_src.clkr,
4009 [CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
4010 [GP1_CLK_SRC] = &gp1_clk_src.clkr,
4011 [GP2_CLK_SRC] = &gp2_clk_src.clkr,
4012 [GP3_CLK_SRC] = &gp3_clk_src.clkr,
4013 [ESC0_CLK_SRC] = &esc0_clk_src.clkr,
4014 [ESC1_CLK_SRC] = &esc1_clk_src.clkr,
4015 [MDP_CLK_SRC] = &mdp_clk_src.clkr,
4016 [VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
4017 [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
4018 [RBCPR_GFX_CLK_SRC] = &rbcpr_gfx_clk_src.clkr,
4019 [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
4020 [SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
4021 [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
4022 [SDCC3_APPS_CLK_SRC] = &sdcc3_apps_clk_src.clkr,
4023 [USB_FS_IC_CLK_SRC] = &usb_fs_ic_clk_src.clkr,
4024 [USB_FS_SYSTEM_CLK_SRC] = &usb_fs_system_clk_src.clkr,
4025 [USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
4026 [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
4027 [GCC_MDSS_BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
4028 [GCC_MDSS_BYTE1_CLK_SRC] = &byte1_clk_src.clkr,
4029 [GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr,
4030 [GCC_MDSS_BYTE1_CLK] = &gcc_mdss_byte1_clk.clkr,
4031 [GCC_MDSS_PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
4032 [GCC_MDSS_PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,
4033 [GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr,
4034 [GCC_MDSS_PCLK1_CLK] = &gcc_mdss_pclk1_clk.clkr,
4035 [GCC_GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
4036 [GCC_GFX3D_OXILI_CLK] = &gcc_oxili_gfx3d_clk.clkr,
4037 [GCC_GFX3D_BIMC_CLK] = &gcc_bimc_gfx_clk.clkr,
4038 [GCC_GFX3D_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr,
4039 [GCC_GFX3D_OXILI_AON_CLK] = &gcc_oxili_aon_clk.clkr,
4040 [GCC_GFX3D_OXILI_GMEM_CLK] = &gcc_oxili_gmem_clk.clkr,
4041 [GCC_GFX3D_OXILI_TIMER_CLK] = &gcc_oxili_timer_clk.clkr,
4042 [GCC_GFX3D_TBU0_CLK] = &gcc_gfx_tbu_clk.clkr,
4043 [GCC_GFX3D_TBU1_CLK] = &gcc_gfx_1_tbu_clk.clkr,
4044 [GCC_GFX3D_TCU_CLK] = &gcc_gfx_tcu_clk.clkr,
4045 [GCC_GFX3D_GTCU_AHB_CLK] = &gcc_gtcu_ahb_clk.clkr,
4048 static const struct qcom_reset_map gcc_msm8976_resets[] = {
4049 [RST_CAMSS_MICRO_BCR] = { 0x56008 },
4050 [RST_USB_HS_BCR] = { 0x41000 },
4051 [RST_QUSB2_PHY_BCR] = { 0x4103c },
4052 [RST_USB2_HS_PHY_ONLY_BCR] = { 0x41034 },
4053 [RST_USB_HS_PHY_CFG_AHB_BCR] = { 0x41038 },
4054 [RST_USB_FS_BCR] = { 0x3f000 },
4055 [RST_CAMSS_CSI1PIX_BCR] = { 0x4f054 },
4056 [RST_CAMSS_CSI_VFE1_BCR] = { 0x58070 },
4057 [RST_CAMSS_VFE1_BCR] = { 0x5807c },
4058 [RST_CAMSS_CPP_BCR] = { 0x58080 },
4059 [RST_MSS_BCR] = { 0x71000 },
4062 static struct gdsc *gcc_msm8976_gdscs[] = {
4063 [VENUS_GDSC] = &venus_gdsc,
4064 [VENUS_CORE0_GDSC] = &venus_core0_gdsc,
4065 [VENUS_CORE1_GDSC] = &venus_core1_gdsc,
4066 [MDSS_GDSC] = &mdss_gdsc,
4067 [JPEG_GDSC] = &jpeg_gdsc,
4068 [VFE0_GDSC] = &vfe0_gdsc,
4069 [VFE1_GDSC] = &vfe1_gdsc,
4070 [CPP_GDSC] = &cpp_gdsc,
4071 [OXILI_GX_GDSC] = &oxili_gx_gdsc,
4072 [OXILI_CX_GDSC] = &oxili_cx_gdsc,
4075 static const struct regmap_config gcc_msm8976_regmap_config = {
4079 .max_register = 0x7fffc,
4083 static const struct qcom_cc_desc gcc_msm8976_desc = {
4084 .config = &gcc_msm8976_regmap_config,
4085 .clks = gcc_msm8976_clocks,
4086 .num_clks = ARRAY_SIZE(gcc_msm8976_clocks),
4087 .resets = gcc_msm8976_resets,
4088 .num_resets = ARRAY_SIZE(gcc_msm8976_resets),
4089 .gdscs = gcc_msm8976_gdscs,
4090 .num_gdscs = ARRAY_SIZE(gcc_msm8976_gdscs),
4093 static const struct of_device_id gcc_msm8976_match_table[] = {
4094 { .compatible = "qcom,gcc-msm8976" }, /* Also valid for 8x56 */
4095 { .compatible = "qcom,gcc-msm8976-v1.1" },
4098 MODULE_DEVICE_TABLE(of, gcc_msm8976_match_table);
4100 static int gcc_msm8976_probe(struct platform_device *pdev)
4102 struct regmap *regmap;
4105 if (of_device_is_compatible(pdev->dev.of_node, "qcom,gcc-msm8976-v1.1")) {
4106 sdcc1_apps_clk_src.parent_map = gcc_parent_map_v1_1;
4107 sdcc1_apps_clk_src.freq_tbl = ftbl_sdcc1_8976_v1_1_apps_clk_src;
4108 sdcc1_apps_clk_src.clkr.hw.init = &sdcc1_apps_clk_src_8976v1_1_init;
4111 regmap = qcom_cc_map(pdev, &gcc_msm8976_desc);
4113 return PTR_ERR(regmap);
4115 /* Set Sleep and Wakeup cycles to 0 for GMEM clock */
4116 ret = regmap_update_bits(regmap, gcc_oxili_gmem_clk.clkr.enable_reg, 0xff0, 0);
4120 clk_pll_configure_sr_hpm_lp(&gpll3, regmap, &gpll3_config, true);
4122 /* Enable AUX2 clock for APSS */
4123 ret = regmap_update_bits(regmap, 0x60000, BIT(2), BIT(2));
4127 /* Set Sleep cycles to 0 for OXILI clock */
4128 ret = regmap_update_bits(regmap, gcc_oxili_gfx3d_clk.clkr.enable_reg, 0xf0, 0);
4132 return qcom_cc_really_probe(pdev, &gcc_msm8976_desc, regmap);
4135 static struct platform_driver gcc_msm8976_driver = {
4136 .probe = gcc_msm8976_probe,
4138 .name = "qcom,gcc-msm8976",
4139 .of_match_table = gcc_msm8976_match_table,
4143 static int __init gcc_msm8976_init(void)
4145 return platform_driver_register(&gcc_msm8976_driver);
4147 core_initcall(gcc_msm8976_init);
4149 static void __exit gcc_msm8976_exit(void)
4151 platform_driver_unregister(&gcc_msm8976_driver);
4153 module_exit(gcc_msm8976_exit);
4156 MODULE_LICENSE("GPL v2");