3850 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * Copyright (c) 2021, The Linux Foundation. All rights reserved.4 * Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.5 * Copyright (c) 2023, Linaro Limited6 */7 8#include <linux/clk-provider.h>9#include <linux/mod_devicetable.h>10#include <linux/module.h>11#include <linux/platform_device.h>12#include <linux/regmap.h>13 14#include <dt-bindings/clock/qcom,sm8650-gcc.h>15 16#include "clk-alpha-pll.h"17#include "clk-branch.h"18#include "clk-rcg.h"19#include "clk-regmap.h"20#include "clk-regmap-divider.h"21#include "clk-regmap-mux.h"22#include "clk-regmap-phy-mux.h"23#include "gdsc.h"24#include "reset.h"25 26/* Need to match the order of clocks in DT binding */27enum {28 DT_BI_TCXO,29 DT_BI_TCXO_AO,30 DT_SLEEP_CLK,31 32 DT_PCIE_0_PIPE,33 DT_PCIE_1_PIPE,34 DT_PCIE_1_PHY_AUX,35 36 DT_UFS_PHY_RX_SYMBOL_0,37 DT_UFS_PHY_RX_SYMBOL_1,38 DT_UFS_PHY_TX_SYMBOL_0,39 40 DT_USB3_PHY_WRAPPER_GCC_USB30_PIPE,41};42 43enum {44 P_BI_TCXO,45 P_GCC_GPLL0_OUT_EVEN,46 P_GCC_GPLL0_OUT_MAIN,47 P_GCC_GPLL1_OUT_MAIN,48 P_GCC_GPLL3_OUT_MAIN,49 P_GCC_GPLL4_OUT_MAIN,50 P_GCC_GPLL6_OUT_MAIN,51 P_GCC_GPLL7_OUT_MAIN,52 P_GCC_GPLL9_OUT_MAIN,53 P_PCIE_0_PIPE_CLK,54 P_PCIE_1_PHY_AUX_CLK,55 P_PCIE_1_PIPE_CLK,56 P_SLEEP_CLK,57 P_UFS_PHY_RX_SYMBOL_0_CLK,58 P_UFS_PHY_RX_SYMBOL_1_CLK,59 P_UFS_PHY_TX_SYMBOL_0_CLK,60 P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,61};62 63static struct clk_alpha_pll gcc_gpll0 = {64 .offset = 0x0,65 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],66 .clkr = {67 .enable_reg = 0x52020,68 .enable_mask = BIT(0),69 .hw.init = &(const struct clk_init_data) {70 .name = "gcc_gpll0",71 .parent_data = &(const struct clk_parent_data) {72 .index = DT_BI_TCXO,73 },74 .num_parents = 1,75 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,76 },77 },78};79 80static struct clk_alpha_pll gcc_gpll0_ao = {81 .offset = 0x0,82 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],83 .clkr = {84 .enable_reg = 0x57020,85 .enable_mask = BIT(0),86 .hw.init = &(const struct clk_init_data) {87 .name = "gcc_gpll0_ao",88 .parent_data = &(const struct clk_parent_data) {89 .index = DT_BI_TCXO_AO,90 },91 .num_parents = 1,92 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,93 },94 },95};96 97static const struct clk_div_table post_div_table_gcc_gpll0_out_even[] = {98 { 0x1, 2 },99 { }100};101 102static struct clk_alpha_pll_postdiv gcc_gpll0_out_even = {103 .offset = 0x0,104 .post_div_shift = 10,105 .post_div_table = post_div_table_gcc_gpll0_out_even,106 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),107 .width = 4,108 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],109 .clkr.hw.init = &(const struct clk_init_data) {110 .name = "gcc_gpll0_out_even",111 .parent_hws = (const struct clk_hw*[]) {112 &gcc_gpll0.clkr.hw,113 },114 .num_parents = 1,115 .ops = &clk_alpha_pll_postdiv_lucid_ole_ops,116 },117};118 119static struct clk_alpha_pll_postdiv gcc_gpll0_out_even_ao = {120 .offset = 0x0,121 .post_div_shift = 10,122 .post_div_table = post_div_table_gcc_gpll0_out_even,123 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),124 .width = 4,125 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],126 .clkr.hw.init = &(const struct clk_init_data) {127 .name = "gcc_gpll0_out_even_ao",128 .parent_hws = (const struct clk_hw*[]) {129 &gcc_gpll0_ao.clkr.hw,130 },131 .num_parents = 1,132 .ops = &clk_alpha_pll_postdiv_lucid_ole_ops,133 },134};135 136static struct clk_alpha_pll gcc_gpll1 = {137 .offset = 0x4000,138 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],139 .clkr = {140 .enable_reg = 0x52020,141 .enable_mask = BIT(1),142 .hw.init = &(const struct clk_init_data) {143 .name = "gcc_gpll1",144 .parent_data = &(const struct clk_parent_data) {145 .index = DT_BI_TCXO,146 },147 .num_parents = 1,148 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,149 },150 },151};152 153static struct clk_alpha_pll gcc_gpll1_ao = {154 .offset = 0x1000,155 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],156 .clkr = {157 .enable_reg = 0x57020,158 .enable_mask = BIT(1),159 .hw.init = &(const struct clk_init_data) {160 .name = "gcc_gpll1_ao",161 .parent_data = &(const struct clk_parent_data) {162 .index = DT_BI_TCXO_AO,163 },164 .num_parents = 1,165 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,166 },167 },168};169 170static struct clk_alpha_pll gcc_gpll3 = {171 .offset = 0x3000,172 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],173 .clkr = {174 .enable_reg = 0x52020,175 .enable_mask = BIT(3),176 .hw.init = &(const struct clk_init_data) {177 .name = "gcc_gpll3",178 .parent_data = &(const struct clk_parent_data) {179 .index = DT_BI_TCXO,180 },181 .num_parents = 1,182 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,183 },184 },185};186 187static struct clk_alpha_pll gcc_gpll3_ao = {188 .offset = 0x3000,189 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],190 .clkr = {191 .enable_reg = 0x57020,192 .enable_mask = BIT(3),193 .hw.init = &(const struct clk_init_data) {194 .name = "gcc_gpll3_ao",195 .parent_data = &(const struct clk_parent_data) {196 .index = DT_BI_TCXO_AO,197 },198 .num_parents = 1,199 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,200 },201 },202};203 204static struct clk_alpha_pll gcc_gpll4 = {205 .offset = 0x4000,206 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],207 .clkr = {208 .enable_reg = 0x52020,209 .enable_mask = BIT(4),210 .hw.init = &(const struct clk_init_data) {211 .name = "gcc_gpll4",212 .parent_data = &(const struct clk_parent_data) {213 .index = DT_BI_TCXO,214 },215 .num_parents = 1,216 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,217 },218 },219};220 221static struct clk_alpha_pll gcc_gpll4_ao = {222 .offset = 0x4000,223 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],224 .clkr = {225 .enable_reg = 0x57020,226 .enable_mask = BIT(4),227 .hw.init = &(const struct clk_init_data) {228 .name = "gcc_gpll4_ao",229 .parent_data = &(const struct clk_parent_data) {230 .index = DT_BI_TCXO_AO,231 },232 .num_parents = 1,233 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,234 },235 },236};237 238static struct clk_alpha_pll gcc_gpll6 = {239 .offset = 0x6000,240 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],241 .clkr = {242 .enable_reg = 0x52020,243 .enable_mask = BIT(6),244 .hw.init = &(const struct clk_init_data) {245 .name = "gcc_gpll6",246 .parent_data = &(const struct clk_parent_data) {247 .index = DT_BI_TCXO,248 },249 .num_parents = 1,250 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,251 },252 },253};254 255static struct clk_alpha_pll gcc_gpll6_ao = {256 .offset = 0x6000,257 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],258 .clkr = {259 .enable_reg = 0x57020,260 .enable_mask = BIT(6),261 .hw.init = &(const struct clk_init_data) {262 .name = "gcc_gpll6_ao",263 .parent_data = &(const struct clk_parent_data) {264 .index = DT_BI_TCXO_AO,265 },266 .num_parents = 1,267 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,268 },269 },270};271 272static struct clk_alpha_pll gcc_gpll7 = {273 .offset = 0x7000,274 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],275 .clkr = {276 .enable_reg = 0x52020,277 .enable_mask = BIT(7),278 .hw.init = &(const struct clk_init_data) {279 .name = "gcc_gpll7",280 .parent_data = &(const struct clk_parent_data) {281 .index = DT_BI_TCXO,282 },283 .num_parents = 1,284 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,285 },286 },287};288 289static struct clk_alpha_pll gcc_gpll9 = {290 .offset = 0x9000,291 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],292 .clkr = {293 .enable_reg = 0x52020,294 .enable_mask = BIT(9),295 .hw.init = &(const struct clk_init_data) {296 .name = "gcc_gpll9",297 .parent_data = &(const struct clk_parent_data) {298 .index = DT_BI_TCXO,299 },300 .num_parents = 1,301 .ops = &clk_alpha_pll_fixed_lucid_ole_ops,302 },303 },304};305 306static const struct parent_map gcc_parent_map_0[] = {307 { P_BI_TCXO, 0 },308 { P_GCC_GPLL0_OUT_MAIN, 1 },309 { P_GCC_GPLL0_OUT_EVEN, 6 },310};311 312static const struct clk_parent_data gcc_parent_data_0[] = {313 { .index = DT_BI_TCXO },314 { .hw = &gcc_gpll0.clkr.hw },315 { .hw = &gcc_gpll0_out_even.clkr.hw },316};317 318static const struct parent_map gcc_parent_map_1[] = {319 { P_BI_TCXO, 0 },320 { P_GCC_GPLL0_OUT_MAIN, 1 },321 { P_SLEEP_CLK, 5 },322 { P_GCC_GPLL0_OUT_EVEN, 6 },323};324 325static const struct clk_parent_data gcc_parent_data_1[] = {326 { .index = DT_BI_TCXO },327 { .hw = &gcc_gpll0.clkr.hw },328 { .index = DT_SLEEP_CLK },329 { .hw = &gcc_gpll0_out_even.clkr.hw },330};331 332static const struct parent_map gcc_parent_map_2[] = {333 { P_BI_TCXO, 0 },334 { P_GCC_GPLL0_OUT_MAIN, 1 },335 { P_GCC_GPLL1_OUT_MAIN, 4 },336 { P_GCC_GPLL4_OUT_MAIN, 5 },337 { P_GCC_GPLL0_OUT_EVEN, 6 },338};339 340static const struct clk_parent_data gcc_parent_data_2[] = {341 { .index = DT_BI_TCXO },342 { .hw = &gcc_gpll0.clkr.hw },343 { .hw = &gcc_gpll1.clkr.hw },344 { .hw = &gcc_gpll4.clkr.hw },345 { .hw = &gcc_gpll0_out_even.clkr.hw },346};347 348static const struct parent_map gcc_parent_map_3[] = {349 { P_BI_TCXO, 0 },350 { P_GCC_GPLL0_OUT_MAIN, 1 },351 { P_GCC_GPLL4_OUT_MAIN, 5 },352 { P_GCC_GPLL0_OUT_EVEN, 6 },353};354 355static const struct clk_parent_data gcc_parent_data_3[] = {356 { .index = DT_BI_TCXO },357 { .hw = &gcc_gpll0.clkr.hw },358 { .hw = &gcc_gpll4.clkr.hw },359 { .hw = &gcc_gpll0_out_even.clkr.hw },360};361 362static const struct parent_map gcc_parent_map_4[] = {363 { P_BI_TCXO, 0 },364 { P_SLEEP_CLK, 5 },365};366 367static const struct clk_parent_data gcc_parent_data_4[] = {368 { .index = DT_BI_TCXO },369 { .index = DT_SLEEP_CLK },370};371 372static const struct parent_map gcc_parent_map_5[] = {373 { P_BI_TCXO, 0 },374};375 376static const struct clk_parent_data gcc_parent_data_5[] = {377 { .index = DT_BI_TCXO },378};379 380static const struct parent_map gcc_parent_map_8[] = {381 { P_PCIE_1_PHY_AUX_CLK, 0 },382 { P_BI_TCXO, 2 },383};384 385static const struct clk_parent_data gcc_parent_data_8[] = {386 { .index = DT_PCIE_1_PHY_AUX },387 { .index = DT_BI_TCXO },388};389 390static const struct parent_map gcc_parent_map_10[] = {391 { P_BI_TCXO, 0 },392 { P_GCC_GPLL0_OUT_MAIN, 1 },393 { P_GCC_GPLL7_OUT_MAIN, 2 },394 { P_GCC_GPLL0_OUT_EVEN, 6 },395};396 397static const struct clk_parent_data gcc_parent_data_10[] = {398 { .index = DT_BI_TCXO },399 { .hw = &gcc_gpll0.clkr.hw },400 { .hw = &gcc_gpll7.clkr.hw },401 { .hw = &gcc_gpll0_out_even.clkr.hw },402};403 404static const struct parent_map gcc_parent_map_11[] = {405 { P_BI_TCXO, 0 },406 { P_GCC_GPLL0_OUT_MAIN, 1 },407 { P_GCC_GPLL9_OUT_MAIN, 2 },408 { P_GCC_GPLL4_OUT_MAIN, 5 },409 { P_GCC_GPLL0_OUT_EVEN, 6 },410};411 412static const struct clk_parent_data gcc_parent_data_11[] = {413 { .index = DT_BI_TCXO },414 { .hw = &gcc_gpll0.clkr.hw },415 { .hw = &gcc_gpll9.clkr.hw },416 { .hw = &gcc_gpll4.clkr.hw },417 { .hw = &gcc_gpll0_out_even.clkr.hw },418};419 420static const struct parent_map gcc_parent_map_12[] = {421 { P_UFS_PHY_RX_SYMBOL_0_CLK, 0 },422 { P_BI_TCXO, 2 },423};424 425static const struct clk_parent_data gcc_parent_data_12[] = {426 { .index = DT_UFS_PHY_RX_SYMBOL_0 },427 { .index = DT_BI_TCXO },428};429 430static const struct parent_map gcc_parent_map_13[] = {431 { P_UFS_PHY_RX_SYMBOL_1_CLK, 0 },432 { P_BI_TCXO, 2 },433};434 435static const struct clk_parent_data gcc_parent_data_13[] = {436 { .index = DT_UFS_PHY_RX_SYMBOL_1 },437 { .index = DT_BI_TCXO },438};439 440static const struct parent_map gcc_parent_map_14[] = {441 { P_UFS_PHY_TX_SYMBOL_0_CLK, 0 },442 { P_BI_TCXO, 2 },443};444 445static const struct clk_parent_data gcc_parent_data_14[] = {446 { .index = DT_UFS_PHY_TX_SYMBOL_0 },447 { .index = DT_BI_TCXO },448};449 450static const struct parent_map gcc_parent_map_15[] = {451 { P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 0 },452 { P_BI_TCXO, 2 },453};454 455static const struct clk_parent_data gcc_parent_data_15[] = {456 { .index = DT_USB3_PHY_WRAPPER_GCC_USB30_PIPE },457 { .index = DT_BI_TCXO },458};459 460static struct clk_regmap_phy_mux gcc_pcie_0_pipe_clk_src = {461 .reg = 0x6b070,462 .clkr = {463 .hw.init = &(const struct clk_init_data) {464 .name = "gcc_pcie_0_pipe_clk_src",465 .parent_data = &(const struct clk_parent_data){466 .index = DT_PCIE_0_PIPE,467 },468 .num_parents = 1,469 .ops = &clk_regmap_phy_mux_ops,470 },471 },472};473 474static struct clk_regmap_mux gcc_pcie_1_phy_aux_clk_src = {475 .reg = 0x8d094,476 .shift = 0,477 .width = 2,478 .parent_map = gcc_parent_map_8,479 .clkr = {480 .hw.init = &(const struct clk_init_data) {481 .name = "gcc_pcie_1_phy_aux_clk_src",482 .parent_data = gcc_parent_data_8,483 .num_parents = ARRAY_SIZE(gcc_parent_data_8),484 .ops = &clk_regmap_mux_closest_ops,485 },486 },487};488 489static struct clk_regmap_phy_mux gcc_pcie_1_pipe_clk_src = {490 .reg = 0x8d078,491 .clkr = {492 .hw.init = &(const struct clk_init_data) {493 .name = "gcc_pcie_1_pipe_clk_src",494 .parent_data = &(const struct clk_parent_data){495 .index = DT_PCIE_1_PIPE,496 },497 .num_parents = 1,498 .ops = &clk_regmap_phy_mux_ops,499 },500 },501};502 503static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_0_clk_src = {504 .reg = 0x77064,505 .shift = 0,506 .width = 2,507 .parent_map = gcc_parent_map_12,508 .clkr = {509 .hw.init = &(const struct clk_init_data) {510 .name = "gcc_ufs_phy_rx_symbol_0_clk_src",511 .parent_data = gcc_parent_data_12,512 .num_parents = ARRAY_SIZE(gcc_parent_data_12),513 .ops = &clk_regmap_mux_closest_ops,514 },515 },516};517 518static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_1_clk_src = {519 .reg = 0x770e0,520 .shift = 0,521 .width = 2,522 .parent_map = gcc_parent_map_13,523 .clkr = {524 .hw.init = &(const struct clk_init_data) {525 .name = "gcc_ufs_phy_rx_symbol_1_clk_src",526 .parent_data = gcc_parent_data_13,527 .num_parents = ARRAY_SIZE(gcc_parent_data_13),528 .ops = &clk_regmap_mux_closest_ops,529 },530 },531};532 533static struct clk_regmap_mux gcc_ufs_phy_tx_symbol_0_clk_src = {534 .reg = 0x77054,535 .shift = 0,536 .width = 2,537 .parent_map = gcc_parent_map_14,538 .clkr = {539 .hw.init = &(const struct clk_init_data) {540 .name = "gcc_ufs_phy_tx_symbol_0_clk_src",541 .parent_data = gcc_parent_data_14,542 .num_parents = ARRAY_SIZE(gcc_parent_data_14),543 .ops = &clk_regmap_mux_closest_ops,544 },545 },546};547 548static struct clk_regmap_mux gcc_usb3_prim_phy_pipe_clk_src = {549 .reg = 0x3906c,550 .shift = 0,551 .width = 2,552 .parent_map = gcc_parent_map_15,553 .clkr = {554 .hw.init = &(const struct clk_init_data) {555 .name = "gcc_usb3_prim_phy_pipe_clk_src",556 .parent_data = gcc_parent_data_15,557 .num_parents = ARRAY_SIZE(gcc_parent_data_15),558 .ops = &clk_regmap_mux_closest_ops,559 },560 },561};562 563static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {564 F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),565 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),566 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),567 { }568};569 570static struct clk_rcg2 gcc_gp1_clk_src = {571 .cmd_rcgr = 0x64004,572 .mnd_width = 16,573 .hid_width = 5,574 .parent_map = gcc_parent_map_1,575 .freq_tbl = ftbl_gcc_gp1_clk_src,576 .clkr.hw.init = &(const struct clk_init_data) {577 .name = "gcc_gp1_clk_src",578 .parent_data = gcc_parent_data_1,579 .num_parents = ARRAY_SIZE(gcc_parent_data_1),580 .flags = CLK_SET_RATE_PARENT,581 .ops = &clk_rcg2_shared_ops,582 },583};584 585static struct clk_rcg2 gcc_gp2_clk_src = {586 .cmd_rcgr = 0x65004,587 .mnd_width = 16,588 .hid_width = 5,589 .parent_map = gcc_parent_map_1,590 .freq_tbl = ftbl_gcc_gp1_clk_src,591 .clkr.hw.init = &(const struct clk_init_data) {592 .name = "gcc_gp2_clk_src",593 .parent_data = gcc_parent_data_1,594 .num_parents = ARRAY_SIZE(gcc_parent_data_1),595 .flags = CLK_SET_RATE_PARENT,596 .ops = &clk_rcg2_shared_ops,597 },598};599 600static struct clk_rcg2 gcc_gp3_clk_src = {601 .cmd_rcgr = 0x66004,602 .mnd_width = 16,603 .hid_width = 5,604 .parent_map = gcc_parent_map_1,605 .freq_tbl = ftbl_gcc_gp1_clk_src,606 .clkr.hw.init = &(const struct clk_init_data) {607 .name = "gcc_gp3_clk_src",608 .parent_data = gcc_parent_data_1,609 .num_parents = ARRAY_SIZE(gcc_parent_data_1),610 .flags = CLK_SET_RATE_PARENT,611 .ops = &clk_rcg2_shared_ops,612 },613};614 615static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {616 F(19200000, P_BI_TCXO, 1, 0, 0),617 { }618};619 620static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {621 .cmd_rcgr = 0x6b074,622 .mnd_width = 16,623 .hid_width = 5,624 .parent_map = gcc_parent_map_4,625 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,626 .clkr.hw.init = &(const struct clk_init_data) {627 .name = "gcc_pcie_0_aux_clk_src",628 .parent_data = gcc_parent_data_4,629 .num_parents = ARRAY_SIZE(gcc_parent_data_4),630 .flags = CLK_SET_RATE_PARENT,631 .ops = &clk_rcg2_shared_ops,632 },633};634 635static const struct freq_tbl ftbl_gcc_pcie_0_phy_rchng_clk_src[] = {636 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),637 { }638};639 640static struct clk_rcg2 gcc_pcie_0_phy_rchng_clk_src = {641 .cmd_rcgr = 0x6b058,642 .mnd_width = 0,643 .hid_width = 5,644 .parent_map = gcc_parent_map_0,645 .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,646 .clkr.hw.init = &(const struct clk_init_data) {647 .name = "gcc_pcie_0_phy_rchng_clk_src",648 .parent_data = gcc_parent_data_0,649 .num_parents = ARRAY_SIZE(gcc_parent_data_0),650 .flags = CLK_SET_RATE_PARENT,651 .ops = &clk_rcg2_shared_ops,652 },653};654 655static struct clk_rcg2 gcc_pcie_1_aux_clk_src = {656 .cmd_rcgr = 0x8d07c,657 .mnd_width = 16,658 .hid_width = 5,659 .parent_map = gcc_parent_map_4,660 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,661 .clkr.hw.init = &(const struct clk_init_data) {662 .name = "gcc_pcie_1_aux_clk_src",663 .parent_data = gcc_parent_data_4,664 .num_parents = ARRAY_SIZE(gcc_parent_data_4),665 .flags = CLK_SET_RATE_PARENT,666 .ops = &clk_rcg2_shared_ops,667 },668};669 670static struct clk_rcg2 gcc_pcie_1_phy_rchng_clk_src = {671 .cmd_rcgr = 0x8d060,672 .mnd_width = 0,673 .hid_width = 5,674 .parent_map = gcc_parent_map_0,675 .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,676 .clkr.hw.init = &(const struct clk_init_data) {677 .name = "gcc_pcie_1_phy_rchng_clk_src",678 .parent_data = gcc_parent_data_0,679 .num_parents = ARRAY_SIZE(gcc_parent_data_0),680 .flags = CLK_SET_RATE_PARENT,681 .ops = &clk_rcg2_shared_ops,682 },683};684 685static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {686 F(60000000, P_GCC_GPLL0_OUT_MAIN, 10, 0, 0),687 { }688};689 690static struct clk_rcg2 gcc_pdm2_clk_src = {691 .cmd_rcgr = 0x33010,692 .mnd_width = 0,693 .hid_width = 5,694 .parent_map = gcc_parent_map_0,695 .freq_tbl = ftbl_gcc_pdm2_clk_src,696 .clkr.hw.init = &(const struct clk_init_data) {697 .name = "gcc_pdm2_clk_src",698 .parent_data = gcc_parent_data_0,699 .num_parents = ARRAY_SIZE(gcc_parent_data_0),700 .flags = CLK_SET_RATE_PARENT,701 .ops = &clk_rcg2_shared_ops,702 },703};704 705static struct clk_rcg2 gcc_qupv3_i2c_s0_clk_src = {706 .cmd_rcgr = 0x17008,707 .mnd_width = 0,708 .hid_width = 5,709 .parent_map = gcc_parent_map_0,710 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,711 .clkr.hw.init = &(const struct clk_init_data) {712 .name = "gcc_qupv3_i2c_s0_clk_src",713 .parent_data = gcc_parent_data_0,714 .num_parents = ARRAY_SIZE(gcc_parent_data_0),715 .flags = CLK_SET_RATE_PARENT,716 .ops = &clk_rcg2_ops,717 },718};719 720static struct clk_rcg2 gcc_qupv3_i2c_s1_clk_src = {721 .cmd_rcgr = 0x17024,722 .mnd_width = 0,723 .hid_width = 5,724 .parent_map = gcc_parent_map_0,725 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,726 .clkr.hw.init = &(const struct clk_init_data) {727 .name = "gcc_qupv3_i2c_s1_clk_src",728 .parent_data = gcc_parent_data_0,729 .num_parents = ARRAY_SIZE(gcc_parent_data_0),730 .flags = CLK_SET_RATE_PARENT,731 .ops = &clk_rcg2_ops,732 },733};734 735static struct clk_rcg2 gcc_qupv3_i2c_s2_clk_src = {736 .cmd_rcgr = 0x17040,737 .mnd_width = 0,738 .hid_width = 5,739 .parent_map = gcc_parent_map_0,740 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,741 .clkr.hw.init = &(const struct clk_init_data) {742 .name = "gcc_qupv3_i2c_s2_clk_src",743 .parent_data = gcc_parent_data_0,744 .num_parents = ARRAY_SIZE(gcc_parent_data_0),745 .flags = CLK_SET_RATE_PARENT,746 .ops = &clk_rcg2_ops,747 },748};749 750static struct clk_rcg2 gcc_qupv3_i2c_s3_clk_src = {751 .cmd_rcgr = 0x1705c,752 .mnd_width = 0,753 .hid_width = 5,754 .parent_map = gcc_parent_map_0,755 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,756 .clkr.hw.init = &(const struct clk_init_data) {757 .name = "gcc_qupv3_i2c_s3_clk_src",758 .parent_data = gcc_parent_data_0,759 .num_parents = ARRAY_SIZE(gcc_parent_data_0),760 .flags = CLK_SET_RATE_PARENT,761 .ops = &clk_rcg2_ops,762 },763};764 765static struct clk_rcg2 gcc_qupv3_i2c_s4_clk_src = {766 .cmd_rcgr = 0x17078,767 .mnd_width = 0,768 .hid_width = 5,769 .parent_map = gcc_parent_map_0,770 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,771 .clkr.hw.init = &(const struct clk_init_data) {772 .name = "gcc_qupv3_i2c_s4_clk_src",773 .parent_data = gcc_parent_data_0,774 .num_parents = ARRAY_SIZE(gcc_parent_data_0),775 .flags = CLK_SET_RATE_PARENT,776 .ops = &clk_rcg2_ops,777 },778};779 780static struct clk_rcg2 gcc_qupv3_i2c_s5_clk_src = {781 .cmd_rcgr = 0x17094,782 .mnd_width = 0,783 .hid_width = 5,784 .parent_map = gcc_parent_map_0,785 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,786 .clkr.hw.init = &(const struct clk_init_data) {787 .name = "gcc_qupv3_i2c_s5_clk_src",788 .parent_data = gcc_parent_data_0,789 .num_parents = ARRAY_SIZE(gcc_parent_data_0),790 .flags = CLK_SET_RATE_PARENT,791 .ops = &clk_rcg2_ops,792 },793};794 795static struct clk_rcg2 gcc_qupv3_i2c_s6_clk_src = {796 .cmd_rcgr = 0x170b0,797 .mnd_width = 0,798 .hid_width = 5,799 .parent_map = gcc_parent_map_0,800 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,801 .clkr.hw.init = &(const struct clk_init_data) {802 .name = "gcc_qupv3_i2c_s6_clk_src",803 .parent_data = gcc_parent_data_0,804 .num_parents = ARRAY_SIZE(gcc_parent_data_0),805 .flags = CLK_SET_RATE_PARENT,806 .ops = &clk_rcg2_ops,807 },808};809 810static struct clk_rcg2 gcc_qupv3_i2c_s7_clk_src = {811 .cmd_rcgr = 0x170cc,812 .mnd_width = 0,813 .hid_width = 5,814 .parent_map = gcc_parent_map_0,815 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,816 .clkr.hw.init = &(const struct clk_init_data) {817 .name = "gcc_qupv3_i2c_s7_clk_src",818 .parent_data = gcc_parent_data_0,819 .num_parents = ARRAY_SIZE(gcc_parent_data_0),820 .flags = CLK_SET_RATE_PARENT,821 .ops = &clk_rcg2_ops,822 },823};824 825static struct clk_rcg2 gcc_qupv3_i2c_s8_clk_src = {826 .cmd_rcgr = 0x170e8,827 .mnd_width = 0,828 .hid_width = 5,829 .parent_map = gcc_parent_map_0,830 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,831 .clkr.hw.init = &(const struct clk_init_data) {832 .name = "gcc_qupv3_i2c_s8_clk_src",833 .parent_data = gcc_parent_data_0,834 .num_parents = ARRAY_SIZE(gcc_parent_data_0),835 .flags = CLK_SET_RATE_PARENT,836 .ops = &clk_rcg2_ops,837 },838};839 840static struct clk_rcg2 gcc_qupv3_i2c_s9_clk_src = {841 .cmd_rcgr = 0x17104,842 .mnd_width = 0,843 .hid_width = 5,844 .parent_map = gcc_parent_map_0,845 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,846 .clkr.hw.init = &(const struct clk_init_data) {847 .name = "gcc_qupv3_i2c_s9_clk_src",848 .parent_data = gcc_parent_data_0,849 .num_parents = ARRAY_SIZE(gcc_parent_data_0),850 .flags = CLK_SET_RATE_PARENT,851 .ops = &clk_rcg2_ops,852 },853};854 855static const struct freq_tbl ftbl_gcc_qupv3_wrap1_qspi_ref_clk_src[] = {856 F(150000000, P_GCC_GPLL0_OUT_EVEN, 2, 0, 0),857 F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0),858 { }859};860 861static struct clk_init_data gcc_qupv3_wrap1_qspi_ref_clk_src_init = {862 .name = "gcc_qupv3_wrap1_qspi_ref_clk_src",863 .parent_data = gcc_parent_data_0,864 .num_parents = ARRAY_SIZE(gcc_parent_data_0),865 .flags = CLK_SET_RATE_PARENT,866 .ops = &clk_rcg2_ops,867};868 869static struct clk_rcg2 gcc_qupv3_wrap1_qspi_ref_clk_src = {870 .cmd_rcgr = 0x188a0,871 .mnd_width = 16,872 .hid_width = 5,873 .parent_map = gcc_parent_map_0,874 .freq_tbl = ftbl_gcc_qupv3_wrap1_qspi_ref_clk_src,875 .clkr.hw.init = &gcc_qupv3_wrap1_qspi_ref_clk_src_init,876};877 878static const struct freq_tbl ftbl_gcc_qupv3_wrap1_s0_clk_src[] = {879 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),880 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),881 F(19200000, P_BI_TCXO, 1, 0, 0),882 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),883 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),884 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),885 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),886 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),887 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),888 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),889 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),890 F(102400000, P_GCC_GPLL0_OUT_EVEN, 1, 128, 375),891 F(112000000, P_GCC_GPLL0_OUT_EVEN, 1, 28, 75),892 F(117964800, P_GCC_GPLL0_OUT_EVEN, 1, 6144, 15625),893 F(120000000, P_GCC_GPLL0_OUT_MAIN, 5, 0, 0),894 { }895};896 897static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {898 .name = "gcc_qupv3_wrap1_s0_clk_src",899 .parent_data = gcc_parent_data_0,900 .num_parents = ARRAY_SIZE(gcc_parent_data_0),901 .flags = CLK_SET_RATE_PARENT,902 .ops = &clk_rcg2_ops,903};904 905static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {906 .cmd_rcgr = 0x18010,907 .mnd_width = 16,908 .hid_width = 5,909 .parent_map = gcc_parent_map_0,910 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,911 .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,912};913 914static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {915 .name = "gcc_qupv3_wrap1_s1_clk_src",916 .parent_data = gcc_parent_data_0,917 .num_parents = ARRAY_SIZE(gcc_parent_data_0),918 .flags = CLK_SET_RATE_PARENT,919 .ops = &clk_rcg2_ops,920};921 922static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {923 .cmd_rcgr = 0x18148,924 .mnd_width = 16,925 .hid_width = 5,926 .parent_map = gcc_parent_map_0,927 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,928 .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,929};930 931static const struct freq_tbl ftbl_gcc_qupv3_wrap1_s3_clk_src[] = {932 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),933 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),934 F(19200000, P_BI_TCXO, 1, 0, 0),935 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),936 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),937 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),938 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),939 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),940 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),941 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),942 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),943 { }944};945 946static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {947 .name = "gcc_qupv3_wrap1_s3_clk_src",948 .parent_data = gcc_parent_data_0,949 .num_parents = ARRAY_SIZE(gcc_parent_data_0),950 .flags = CLK_SET_RATE_PARENT,951 .ops = &clk_rcg2_ops,952};953 954static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {955 .cmd_rcgr = 0x18290,956 .mnd_width = 16,957 .hid_width = 5,958 .parent_map = gcc_parent_map_0,959 .freq_tbl = ftbl_gcc_qupv3_wrap1_s3_clk_src,960 .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,961};962 963static const struct freq_tbl ftbl_gcc_qupv3_wrap1_s4_clk_src[] = {964 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),965 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),966 F(19200000, P_BI_TCXO, 1, 0, 0),967 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),968 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),969 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),970 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),971 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),972 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),973 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),974 F(120000000, P_GCC_GPLL0_OUT_MAIN, 5, 0, 0),975 { }976};977 978static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {979 .name = "gcc_qupv3_wrap1_s4_clk_src",980 .parent_data = gcc_parent_data_0,981 .num_parents = ARRAY_SIZE(gcc_parent_data_0),982 .flags = CLK_SET_RATE_PARENT,983 .ops = &clk_rcg2_ops,984};985 986static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {987 .cmd_rcgr = 0x183c8,988 .mnd_width = 16,989 .hid_width = 5,990 .parent_map = gcc_parent_map_0,991 .freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src,992 .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,993};994 995static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {996 .name = "gcc_qupv3_wrap1_s5_clk_src",997 .parent_data = gcc_parent_data_0,998 .num_parents = ARRAY_SIZE(gcc_parent_data_0),999 .flags = CLK_SET_RATE_PARENT,1000 .ops = &clk_rcg2_ops,1001};1002 1003static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {1004 .cmd_rcgr = 0x18500,1005 .mnd_width = 16,1006 .hid_width = 5,1007 .parent_map = gcc_parent_map_0,1008 .freq_tbl = ftbl_gcc_qupv3_wrap1_s3_clk_src,1009 .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,1010};1011 1012static struct clk_init_data gcc_qupv3_wrap1_s6_clk_src_init = {1013 .name = "gcc_qupv3_wrap1_s6_clk_src",1014 .parent_data = gcc_parent_data_0,1015 .num_parents = ARRAY_SIZE(gcc_parent_data_0),1016 .flags = CLK_SET_RATE_PARENT,1017 .ops = &clk_rcg2_ops,1018};1019 1020static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = {1021 .cmd_rcgr = 0x18638,1022 .mnd_width = 16,1023 .hid_width = 5,1024 .parent_map = gcc_parent_map_0,1025 .freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src,1026 .clkr.hw.init = &gcc_qupv3_wrap1_s6_clk_src_init,1027};1028 1029static struct clk_init_data gcc_qupv3_wrap1_s7_clk_src_init = {1030 .name = "gcc_qupv3_wrap1_s7_clk_src",1031 .parent_data = gcc_parent_data_0,1032 .num_parents = ARRAY_SIZE(gcc_parent_data_0),1033 .flags = CLK_SET_RATE_PARENT,1034 .ops = &clk_rcg2_ops,1035};1036 1037static struct clk_rcg2 gcc_qupv3_wrap1_s7_clk_src = {1038 .cmd_rcgr = 0x18770,1039 .mnd_width = 16,1040 .hid_width = 5,1041 .parent_map = gcc_parent_map_0,1042 .freq_tbl = ftbl_gcc_qupv3_wrap1_s3_clk_src,1043 .clkr.hw.init = &gcc_qupv3_wrap1_s7_clk_src_init,1044};1045 1046static const struct freq_tbl ftbl_gcc_qupv3_wrap2_ibi_ctrl_0_clk_src[] = {1047 F(37500000, P_GCC_GPLL0_OUT_EVEN, 8, 0, 0),1048 { }1049};1050 1051static struct clk_rcg2 gcc_qupv3_wrap2_ibi_ctrl_0_clk_src = {1052 .cmd_rcgr = 0x1e9d4,1053 .mnd_width = 0,1054 .hid_width = 5,1055 .parent_map = gcc_parent_map_2,1056 .freq_tbl = ftbl_gcc_qupv3_wrap2_ibi_ctrl_0_clk_src,1057 .clkr.hw.init = &(const struct clk_init_data) {1058 .name = "gcc_qupv3_wrap2_ibi_ctrl_0_clk_src",1059 .parent_data = gcc_parent_data_2,1060 .num_parents = ARRAY_SIZE(gcc_parent_data_2),1061 .flags = CLK_SET_RATE_PARENT,1062 .ops = &clk_rcg2_ops,1063 },1064};1065 1066static struct clk_init_data gcc_qupv3_wrap2_s0_clk_src_init = {1067 .name = "gcc_qupv3_wrap2_s0_clk_src",1068 .parent_data = gcc_parent_data_0,1069 .num_parents = ARRAY_SIZE(gcc_parent_data_0),1070 .flags = CLK_SET_RATE_PARENT,1071 .ops = &clk_rcg2_ops,1072};1073 1074static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = {1075 .cmd_rcgr = 0x1e010,1076 .mnd_width = 16,1077 .hid_width = 5,1078 .parent_map = gcc_parent_map_0,1079 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,1080 .clkr.hw.init = &gcc_qupv3_wrap2_s0_clk_src_init,1081};1082 1083static struct clk_init_data gcc_qupv3_wrap2_s1_clk_src_init = {1084 .name = "gcc_qupv3_wrap2_s1_clk_src",1085 .parent_data = gcc_parent_data_0,1086 .num_parents = ARRAY_SIZE(gcc_parent_data_0),1087 .flags = CLK_SET_RATE_PARENT,1088 .ops = &clk_rcg2_ops,1089};1090 1091static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = {1092 .cmd_rcgr = 0x1e148,1093 .mnd_width = 16,1094 .hid_width = 5,1095 .parent_map = gcc_parent_map_0,1096 .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,1097 .clkr.hw.init = &gcc_qupv3_wrap2_s1_clk_src_init,1098};1099 1100static struct clk_init_data gcc_qupv3_wrap2_s2_clk_src_init = {1101 .name = "gcc_qupv3_wrap2_s2_clk_src",1102 .parent_data = gcc_parent_data_0,1103 .num_parents = ARRAY_SIZE(gcc_parent_data_0),1104 .flags = CLK_SET_RATE_PARENT,1105 .ops = &clk_rcg2_ops,1106};1107 1108static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src = {1109 .cmd_rcgr = 0x1e280,1110 .mnd_width = 16,1111 .hid_width = 5,1112 .parent_map = gcc_parent_map_0,1113 .freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src,1114 .clkr.hw.init = &gcc_qupv3_wrap2_s2_clk_src_init,1115};1116 1117static struct clk_init_data gcc_qupv3_wrap2_s3_clk_src_init = {1118 .name = "gcc_qupv3_wrap2_s3_clk_src",1119 .parent_data = gcc_parent_data_0,1120 .num_parents = ARRAY_SIZE(gcc_parent_data_0),1121 .flags = CLK_SET_RATE_PARENT,1122 .ops = &clk_rcg2_ops,1123};1124 1125static struct clk_rcg2 gcc_qupv3_wrap2_s3_clk_src = {1126 .cmd_rcgr = 0x1e3b8,1127 .mnd_width = 16,1128 .hid_width = 5,1129 .parent_map = gcc_parent_map_0,1130 .freq_tbl = ftbl_gcc_qupv3_wrap1_s4_clk_src,1131 .clkr.hw.init = &gcc_qupv3_wrap2_s3_clk_src_init,1132};1133 1134static struct clk_init_data gcc_qupv3_wrap2_s4_clk_src_init = {1135 .name = "gcc_qupv3_wrap2_s4_clk_src",1136 .parent_data = gcc_parent_data_0,1137 .num_parents = ARRAY_SIZE(gcc_parent_data_0),1138 .flags = CLK_SET_RATE_PARENT,1139 .ops = &clk_rcg2_ops,1140};1141 1142static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = {1143 .cmd_rcgr = 0x1e4f0,1144 .mnd_width = 16,1145 .hid_width = 5,1146 .parent_map = gcc_parent_map_0,1147 .freq_tbl = ftbl_gcc_qupv3_wrap1_s3_clk_src,1148 .clkr.hw.init = &gcc_qupv3_wrap2_s4_clk_src_init,1149};1150 1151static struct clk_init_data gcc_qupv3_wrap2_s5_clk_src_init = {1152 .name = "gcc_qupv3_wrap2_s5_clk_src",1153 .parent_data = gcc_parent_data_0,1154 .num_parents = ARRAY_SIZE(gcc_parent_data_0),1155 .flags = CLK_SET_RATE_PARENT,1156 .ops = &clk_rcg2_ops,1157};1158 1159static struct clk_rcg2 gcc_qupv3_wrap2_s5_clk_src = {1160 .cmd_rcgr = 0x1e628,1161 .mnd_width = 16,1162 .hid_width = 5,1163 .parent_map = gcc_parent_map_0,1164 .freq_tbl = ftbl_gcc_qupv3_wrap1_s3_clk_src,1165 .clkr.hw.init = &gcc_qupv3_wrap2_s5_clk_src_init,1166};1167 1168static const struct freq_tbl ftbl_gcc_qupv3_wrap2_s6_clk_src[] = {1169 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),1170 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),1171 F(19200000, P_BI_TCXO, 1, 0, 0),1172 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),1173 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),1174 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),1175 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),1176 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),1177 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),1178 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),1179 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),1180 F(128000000, P_GCC_GPLL0_OUT_MAIN, 1, 16, 75),1181 { }1182};1183 1184static struct clk_init_data gcc_qupv3_wrap2_s6_clk_src_init = {1185 .name = "gcc_qupv3_wrap2_s6_clk_src",1186 .parent_data = gcc_parent_data_10,1187 .num_parents = ARRAY_SIZE(gcc_parent_data_10),1188 .flags = CLK_SET_RATE_PARENT,1189 .ops = &clk_rcg2_ops,1190};1191 1192static struct clk_rcg2 gcc_qupv3_wrap2_s6_clk_src = {1193 .cmd_rcgr = 0x1e760,1194 .mnd_width = 16,1195 .hid_width = 5,1196 .parent_map = gcc_parent_map_10,1197 .freq_tbl = ftbl_gcc_qupv3_wrap2_s6_clk_src,1198 .clkr.hw.init = &gcc_qupv3_wrap2_s6_clk_src_init,1199};1200 1201static struct clk_init_data gcc_qupv3_wrap2_s7_clk_src_init = {1202 .name = "gcc_qupv3_wrap2_s7_clk_src",1203 .parent_data = gcc_parent_data_0,1204 .num_parents = ARRAY_SIZE(gcc_parent_data_0),1205 .flags = CLK_SET_RATE_PARENT,1206 .ops = &clk_rcg2_ops,1207};1208 1209static struct clk_rcg2 gcc_qupv3_wrap2_s7_clk_src = {1210 .cmd_rcgr = 0x1e898,1211 .mnd_width = 16,1212 .hid_width = 5,1213 .parent_map = gcc_parent_map_0,1214 .freq_tbl = ftbl_gcc_qupv3_wrap1_s3_clk_src,1215 .clkr.hw.init = &gcc_qupv3_wrap2_s7_clk_src_init,1216};1217 1218static const struct freq_tbl ftbl_gcc_qupv3_wrap3_qspi_ref_clk_src[] = {1219 F(300000000, P_GCC_GPLL0_OUT_EVEN, 1, 0, 0),1220 F(400000000, P_GCC_GPLL0_OUT_MAIN, 1.5, 0, 0),1221 { }1222};1223 1224static struct clk_init_data gcc_qupv3_wrap3_qspi_ref_clk_src_init = {1225 .name = "gcc_qupv3_wrap3_qspi_ref_clk_src",1226 .parent_data = gcc_parent_data_0,1227 .num_parents = ARRAY_SIZE(gcc_parent_data_0),1228 .flags = CLK_SET_RATE_PARENT,1229 .ops = &clk_rcg2_ops,1230};1231 1232static struct clk_rcg2 gcc_qupv3_wrap3_qspi_ref_clk_src = {1233 .cmd_rcgr = 0x19018,1234 .mnd_width = 16,1235 .hid_width = 5,1236 .parent_map = gcc_parent_map_0,1237 .freq_tbl = ftbl_gcc_qupv3_wrap3_qspi_ref_clk_src,1238 .clkr.hw.init = &gcc_qupv3_wrap3_qspi_ref_clk_src_init,1239};1240 1241static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {1242 F(400000, P_BI_TCXO, 12, 1, 4),1243 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),1244 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),1245 F(202000000, P_GCC_GPLL9_OUT_MAIN, 4, 0, 0),1246 { }1247};1248 1249static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {1250 .cmd_rcgr = 0x14018,1251 .mnd_width = 8,1252 .hid_width = 5,1253 .parent_map = gcc_parent_map_11,1254 .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,1255 .clkr.hw.init = &(const struct clk_init_data) {1256 .name = "gcc_sdcc2_apps_clk_src",1257 .parent_data = gcc_parent_data_11,1258 .num_parents = ARRAY_SIZE(gcc_parent_data_11),1259 .flags = CLK_SET_RATE_PARENT,1260 .ops = &clk_rcg2_shared_ops,1261 },1262};1263 1264static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = {1265 F(400000, P_BI_TCXO, 12, 1, 4),1266 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),1267 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),1268 { }1269};1270 1271static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {1272 .cmd_rcgr = 0x16018,1273 .mnd_width = 8,1274 .hid_width = 5,1275 .parent_map = gcc_parent_map_0,1276 .freq_tbl = ftbl_gcc_sdcc4_apps_clk_src,1277 .clkr.hw.init = &(const struct clk_init_data) {1278 .name = "gcc_sdcc4_apps_clk_src",1279 .parent_data = gcc_parent_data_0,1280 .num_parents = ARRAY_SIZE(gcc_parent_data_0),1281 .flags = CLK_SET_RATE_PARENT,1282 .ops = &clk_rcg2_shared_ops,1283 },1284};1285 1286static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {1287 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),1288 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),1289 F(201500000, P_GCC_GPLL4_OUT_MAIN, 4, 0, 0),1290 F(403000000, P_GCC_GPLL4_OUT_MAIN, 2, 0, 0),1291 { }1292};1293 1294static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {1295 .cmd_rcgr = 0x77030,1296 .mnd_width = 8,1297 .hid_width = 5,1298 .parent_map = gcc_parent_map_3,1299 .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,1300 .clkr.hw.init = &(const struct clk_init_data) {1301 .name = "gcc_ufs_phy_axi_clk_src",1302 .parent_data = gcc_parent_data_3,1303 .num_parents = ARRAY_SIZE(gcc_parent_data_3),1304 .flags = CLK_SET_RATE_PARENT,1305 .ops = &clk_rcg2_shared_ops,1306 },1307};1308 1309static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {1310 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),1311 F(201500000, P_GCC_GPLL4_OUT_MAIN, 4, 0, 0),1312 F(403000000, P_GCC_GPLL4_OUT_MAIN, 2, 0, 0),1313 { }1314};1315 1316static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {1317 .cmd_rcgr = 0x77080,1318 .mnd_width = 0,1319 .hid_width = 5,1320 .parent_map = gcc_parent_map_3,1321 .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,1322 .clkr.hw.init = &(const struct clk_init_data) {1323 .name = "gcc_ufs_phy_ice_core_clk_src",1324 .parent_data = gcc_parent_data_3,1325 .num_parents = ARRAY_SIZE(gcc_parent_data_3),1326 .flags = CLK_SET_RATE_PARENT,1327 .ops = &clk_rcg2_shared_ops,1328 },1329};1330 1331static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = {1332 F(9600000, P_BI_TCXO, 2, 0, 0),1333 F(19200000, P_BI_TCXO, 1, 0, 0),1334 { }1335};1336 1337static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {1338 .cmd_rcgr = 0x770b4,1339 .mnd_width = 0,1340 .hid_width = 5,1341 .parent_map = gcc_parent_map_5,1342 .freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src,1343 .clkr.hw.init = &(const struct clk_init_data) {1344 .name = "gcc_ufs_phy_phy_aux_clk_src",1345 .parent_data = gcc_parent_data_5,1346 .num_parents = ARRAY_SIZE(gcc_parent_data_5),1347 .flags = CLK_SET_RATE_PARENT,1348 .ops = &clk_rcg2_shared_ops,1349 },1350};1351 1352static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {1353 .cmd_rcgr = 0x77098,1354 .mnd_width = 0,1355 .hid_width = 5,1356 .parent_map = gcc_parent_map_3,1357 .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,1358 .clkr.hw.init = &(const struct clk_init_data) {1359 .name = "gcc_ufs_phy_unipro_core_clk_src",1360 .parent_data = gcc_parent_data_3,1361 .num_parents = ARRAY_SIZE(gcc_parent_data_3),1362 .flags = CLK_SET_RATE_PARENT,1363 .ops = &clk_rcg2_shared_ops,1364 },1365};1366 1367static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {1368 F(66666667, P_GCC_GPLL0_OUT_EVEN, 4.5, 0, 0),1369 F(133333333, P_GCC_GPLL0_OUT_MAIN, 4.5, 0, 0),1370 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),1371 F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0),1372 { }1373};1374 1375static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {1376 .cmd_rcgr = 0x3902c,1377 .mnd_width = 8,1378 .hid_width = 5,1379 .parent_map = gcc_parent_map_0,1380 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,1381 .clkr.hw.init = &(const struct clk_init_data) {1382 .name = "gcc_usb30_prim_master_clk_src",1383 .parent_data = gcc_parent_data_0,1384 .num_parents = ARRAY_SIZE(gcc_parent_data_0),1385 .flags = CLK_SET_RATE_PARENT,1386 .ops = &clk_rcg2_shared_ops,1387 },1388};1389 1390static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {1391 .cmd_rcgr = 0x39044,1392 .mnd_width = 0,1393 .hid_width = 5,1394 .parent_map = gcc_parent_map_0,1395 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,1396 .clkr.hw.init = &(const struct clk_init_data) {1397 .name = "gcc_usb30_prim_mock_utmi_clk_src",1398 .parent_data = gcc_parent_data_0,1399 .num_parents = ARRAY_SIZE(gcc_parent_data_0),1400 .flags = CLK_SET_RATE_PARENT,1401 .ops = &clk_rcg2_shared_ops,1402 },1403};1404 1405static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {1406 .cmd_rcgr = 0x39070,1407 .mnd_width = 0,1408 .hid_width = 5,1409 .parent_map = gcc_parent_map_4,1410 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,1411 .clkr.hw.init = &(const struct clk_init_data) {1412 .name = "gcc_usb3_prim_phy_aux_clk_src",1413 .parent_data = gcc_parent_data_4,1414 .num_parents = ARRAY_SIZE(gcc_parent_data_4),1415 .flags = CLK_SET_RATE_PARENT,1416 .ops = &clk_rcg2_shared_ops,1417 },1418};1419 1420static struct clk_regmap_div gcc_qupv3_wrap1_s2_clk_src = {1421 .reg = 0x18280,1422 .shift = 0,1423 .width = 4,1424 .clkr.hw.init = &(const struct clk_init_data) {1425 .name = "gcc_qupv3_wrap1_s2_clk_src",1426 .parent_hws = (const struct clk_hw*[]) {1427 &gcc_qupv3_wrap1_qspi_ref_clk_src.clkr.hw,1428 },1429 .num_parents = 1,1430 .flags = CLK_SET_RATE_PARENT,1431 .ops = &clk_regmap_div_ro_ops,1432 },1433};1434 1435static struct clk_regmap_div gcc_qupv3_wrap3_s0_clk_src = {1436 .reg = 0x19010,1437 .shift = 0,1438 .width = 4,1439 .clkr.hw.init = &(const struct clk_init_data) {1440 .name = "gcc_qupv3_wrap3_s0_clk_src",1441 .parent_hws = (const struct clk_hw*[]) {1442 &gcc_qupv3_wrap3_qspi_ref_clk_src.clkr.hw,1443 },1444 .num_parents = 1,1445 .flags = CLK_SET_RATE_PARENT,1446 .ops = &clk_regmap_div_ro_ops,1447 },1448};1449 1450static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {1451 .reg = 0x3905c,1452 .shift = 0,1453 .width = 4,1454 .clkr.hw.init = &(const struct clk_init_data) {1455 .name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",1456 .parent_hws = (const struct clk_hw*[]) {1457 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,1458 },1459 .num_parents = 1,1460 .flags = CLK_SET_RATE_PARENT,1461 .ops = &clk_regmap_div_ro_ops,1462 },1463};1464 1465static struct clk_branch gcc_aggre_noc_pcie_axi_clk = {1466 .halt_reg = 0x10064,1467 .halt_check = BRANCH_HALT_SKIP,1468 .hwcg_reg = 0x10064,1469 .hwcg_bit = 1,1470 .clkr = {1471 .enable_reg = 0x52000,1472 .enable_mask = BIT(12),1473 .hw.init = &(const struct clk_init_data) {1474 .name = "gcc_aggre_noc_pcie_axi_clk",1475 .ops = &clk_branch2_ops,1476 },1477 },1478};1479 1480static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {1481 .halt_reg = 0x770e4,1482 .halt_check = BRANCH_HALT_VOTED,1483 .hwcg_reg = 0x770e4,1484 .hwcg_bit = 1,1485 .clkr = {1486 .enable_reg = 0x770e4,1487 .enable_mask = BIT(0),1488 .hw.init = &(const struct clk_init_data) {1489 .name = "gcc_aggre_ufs_phy_axi_clk",1490 .parent_hws = (const struct clk_hw*[]) {1491 &gcc_ufs_phy_axi_clk_src.clkr.hw,1492 },1493 .num_parents = 1,1494 .flags = CLK_SET_RATE_PARENT,1495 .ops = &clk_branch2_ops,1496 },1497 },1498};1499 1500static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = {1501 .halt_reg = 0x770e4,1502 .halt_check = BRANCH_HALT_VOTED,1503 .hwcg_reg = 0x770e4,1504 .hwcg_bit = 1,1505 .clkr = {1506 .enable_reg = 0x770e4,1507 .enable_mask = BIT(1),1508 .hw.init = &(const struct clk_init_data) {1509 .name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk",1510 .parent_hws = (const struct clk_hw*[]) {1511 &gcc_ufs_phy_axi_clk_src.clkr.hw,1512 },1513 .num_parents = 1,1514 .flags = CLK_SET_RATE_PARENT,1515 .ops = &clk_branch2_ops,1516 },1517 },1518};1519 1520static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {1521 .halt_reg = 0x3908c,1522 .halt_check = BRANCH_HALT_VOTED,1523 .hwcg_reg = 0x3908c,1524 .hwcg_bit = 1,1525 .clkr = {1526 .enable_reg = 0x3908c,1527 .enable_mask = BIT(0),1528 .hw.init = &(const struct clk_init_data) {1529 .name = "gcc_aggre_usb3_prim_axi_clk",1530 .parent_hws = (const struct clk_hw*[]) {1531 &gcc_usb30_prim_master_clk_src.clkr.hw,1532 },1533 .num_parents = 1,1534 .flags = CLK_SET_RATE_PARENT,1535 .ops = &clk_branch2_ops,1536 },1537 },1538};1539 1540static struct clk_branch gcc_boot_rom_ahb_clk = {1541 .halt_reg = 0x38004,1542 .halt_check = BRANCH_HALT_VOTED,1543 .hwcg_reg = 0x38004,1544 .hwcg_bit = 1,1545 .clkr = {1546 .enable_reg = 0x52000,1547 .enable_mask = BIT(10),1548 .hw.init = &(const struct clk_init_data) {1549 .name = "gcc_boot_rom_ahb_clk",1550 .ops = &clk_branch2_ops,1551 },1552 },1553};1554 1555static struct clk_branch gcc_camera_hf_axi_clk = {1556 .halt_reg = 0x26010,1557 .halt_check = BRANCH_HALT_SKIP,1558 .hwcg_reg = 0x26010,1559 .hwcg_bit = 1,1560 .clkr = {1561 .enable_reg = 0x26010,1562 .enable_mask = BIT(0),1563 .hw.init = &(const struct clk_init_data) {1564 .name = "gcc_camera_hf_axi_clk",1565 .ops = &clk_branch2_ops,1566 },1567 },1568};1569 1570static struct clk_branch gcc_camera_sf_axi_clk = {1571 .halt_reg = 0x2601c,1572 .halt_check = BRANCH_HALT_SKIP,1573 .hwcg_reg = 0x2601c,1574 .hwcg_bit = 1,1575 .clkr = {1576 .enable_reg = 0x2601c,1577 .enable_mask = BIT(0),1578 .hw.init = &(const struct clk_init_data) {1579 .name = "gcc_camera_sf_axi_clk",1580 .ops = &clk_branch2_ops,1581 },1582 },1583};1584 1585static struct clk_branch gcc_cfg_noc_pcie_anoc_ahb_clk = {1586 .halt_reg = 0x10050,1587 .halt_check = BRANCH_HALT_SKIP,1588 .hwcg_reg = 0x10050,1589 .hwcg_bit = 1,1590 .clkr = {1591 .enable_reg = 0x52000,1592 .enable_mask = BIT(20),1593 .hw.init = &(const struct clk_init_data) {1594 .name = "gcc_cfg_noc_pcie_anoc_ahb_clk",1595 .ops = &clk_branch2_ops,1596 },1597 },1598};1599 1600static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {1601 .halt_reg = 0x39088,1602 .halt_check = BRANCH_HALT_VOTED,1603 .hwcg_reg = 0x39088,1604 .hwcg_bit = 1,1605 .clkr = {1606 .enable_reg = 0x39088,1607 .enable_mask = BIT(0),1608 .hw.init = &(const struct clk_init_data) {1609 .name = "gcc_cfg_noc_usb3_prim_axi_clk",1610 .parent_hws = (const struct clk_hw*[]) {1611 &gcc_usb30_prim_master_clk_src.clkr.hw,1612 },1613 .num_parents = 1,1614 .flags = CLK_SET_RATE_PARENT,1615 .ops = &clk_branch2_ops,1616 },1617 },1618};1619 1620static struct clk_branch gcc_cnoc_pcie_sf_axi_clk = {1621 .halt_reg = 0x10058,1622 .halt_check = BRANCH_HALT_VOTED,1623 .hwcg_reg = 0x10058,1624 .hwcg_bit = 1,1625 .clkr = {1626 .enable_reg = 0x52008,1627 .enable_mask = BIT(6),1628 .hw.init = &(const struct clk_init_data) {1629 .name = "gcc_cnoc_pcie_sf_axi_clk",1630 .ops = &clk_branch2_ops,1631 },1632 },1633};1634 1635static struct clk_branch gcc_ddrss_gpu_axi_clk = {1636 .halt_reg = 0x71154,1637 .halt_check = BRANCH_HALT_SKIP,1638 .hwcg_reg = 0x71154,1639 .hwcg_bit = 1,1640 .clkr = {1641 .enable_reg = 0x71154,1642 .enable_mask = BIT(0),1643 .hw.init = &(const struct clk_init_data) {1644 .name = "gcc_ddrss_gpu_axi_clk",1645 .ops = &clk_branch2_aon_ops,1646 },1647 },1648};1649 1650static struct clk_branch gcc_ddrss_pcie_sf_qtb_clk = {1651 .halt_reg = 0x10074,1652 .halt_check = BRANCH_HALT_SKIP,1653 .hwcg_reg = 0x10074,1654 .hwcg_bit = 1,1655 .clkr = {1656 .enable_reg = 0x52000,1657 .enable_mask = BIT(19),1658 .hw.init = &(const struct clk_init_data) {1659 .name = "gcc_ddrss_pcie_sf_qtb_clk",1660 .ops = &clk_branch2_ops,1661 },1662 },1663};1664 1665static struct clk_branch gcc_disp_hf_axi_clk = {1666 .halt_reg = 0x2700c,1667 .halt_check = BRANCH_HALT_SKIP,1668 .hwcg_reg = 0x2700c,1669 .hwcg_bit = 1,1670 .clkr = {1671 .enable_reg = 0x2700c,1672 .enable_mask = BIT(0),1673 .hw.init = &(const struct clk_init_data) {1674 .name = "gcc_disp_hf_axi_clk",1675 .ops = &clk_branch2_ops,1676 },1677 },1678};1679 1680static struct clk_branch gcc_gp1_clk = {1681 .halt_reg = 0x64000,1682 .halt_check = BRANCH_HALT,1683 .clkr = {1684 .enable_reg = 0x64000,1685 .enable_mask = BIT(0),1686 .hw.init = &(const struct clk_init_data) {1687 .name = "gcc_gp1_clk",1688 .parent_hws = (const struct clk_hw*[]) {1689 &gcc_gp1_clk_src.clkr.hw,1690 },1691 .num_parents = 1,1692 .flags = CLK_SET_RATE_PARENT,1693 .ops = &clk_branch2_ops,1694 },1695 },1696};1697 1698static struct clk_branch gcc_gp2_clk = {1699 .halt_reg = 0x65000,1700 .halt_check = BRANCH_HALT,1701 .clkr = {1702 .enable_reg = 0x65000,1703 .enable_mask = BIT(0),1704 .hw.init = &(const struct clk_init_data) {1705 .name = "gcc_gp2_clk",1706 .parent_hws = (const struct clk_hw*[]) {1707 &gcc_gp2_clk_src.clkr.hw,1708 },1709 .num_parents = 1,1710 .flags = CLK_SET_RATE_PARENT,1711 .ops = &clk_branch2_ops,1712 },1713 },1714};1715 1716static struct clk_branch gcc_gp3_clk = {1717 .halt_reg = 0x66000,1718 .halt_check = BRANCH_HALT,1719 .clkr = {1720 .enable_reg = 0x66000,1721 .enable_mask = BIT(0),1722 .hw.init = &(const struct clk_init_data) {1723 .name = "gcc_gp3_clk",1724 .parent_hws = (const struct clk_hw*[]) {1725 &gcc_gp3_clk_src.clkr.hw,1726 },1727 .num_parents = 1,1728 .flags = CLK_SET_RATE_PARENT,1729 .ops = &clk_branch2_ops,1730 },1731 },1732};1733 1734static struct clk_branch gcc_gpu_gpll0_clk_src = {1735 .halt_check = BRANCH_HALT_DELAY,1736 .clkr = {1737 .enable_reg = 0x52000,1738 .enable_mask = BIT(15),1739 .hw.init = &(const struct clk_init_data) {1740 .name = "gcc_gpu_gpll0_clk_src",1741 .parent_hws = (const struct clk_hw*[]) {1742 &gcc_gpll0.clkr.hw,1743 },1744 .num_parents = 1,1745 .flags = CLK_SET_RATE_PARENT,1746 .ops = &clk_branch2_ops,1747 },1748 },1749};1750 1751static struct clk_branch gcc_gpu_gpll0_div_clk_src = {1752 .halt_check = BRANCH_HALT_DELAY,1753 .clkr = {1754 .enable_reg = 0x52000,1755 .enable_mask = BIT(16),1756 .hw.init = &(const struct clk_init_data) {1757 .name = "gcc_gpu_gpll0_div_clk_src",1758 .parent_hws = (const struct clk_hw*[]) {1759 &gcc_gpll0_out_even.clkr.hw,1760 },1761 .num_parents = 1,1762 .flags = CLK_SET_RATE_PARENT,1763 .ops = &clk_branch2_ops,1764 },1765 },1766};1767 1768static struct clk_branch gcc_gpu_memnoc_gfx_clk = {1769 .halt_reg = 0x71010,1770 .halt_check = BRANCH_HALT_VOTED,1771 .hwcg_reg = 0x71010,1772 .hwcg_bit = 1,1773 .clkr = {1774 .enable_reg = 0x71010,1775 .enable_mask = BIT(0),1776 .hw.init = &(const struct clk_init_data) {1777 .name = "gcc_gpu_memnoc_gfx_clk",1778 .ops = &clk_branch2_ops,1779 },1780 },1781};1782 1783static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {1784 .halt_reg = 0x71018,1785 .halt_check = BRANCH_HALT_DELAY,1786 .clkr = {1787 .enable_reg = 0x71018,1788 .enable_mask = BIT(0),1789 .hw.init = &(const struct clk_init_data) {1790 .name = "gcc_gpu_snoc_dvm_gfx_clk",1791 .ops = &clk_branch2_ops,1792 },1793 },1794};1795 1796static struct clk_branch gcc_pcie_0_aux_clk = {1797 .halt_reg = 0x6b03c,1798 .halt_check = BRANCH_HALT_VOTED,1799 .clkr = {1800 .enable_reg = 0x52008,1801 .enable_mask = BIT(3),1802 .hw.init = &(const struct clk_init_data) {1803 .name = "gcc_pcie_0_aux_clk",1804 .parent_hws = (const struct clk_hw*[]) {1805 &gcc_pcie_0_aux_clk_src.clkr.hw,1806 },1807 .num_parents = 1,1808 .flags = CLK_SET_RATE_PARENT,1809 .ops = &clk_branch2_ops,1810 },1811 },1812};1813 1814static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {1815 .halt_reg = 0x6b038,1816 .halt_check = BRANCH_HALT_VOTED,1817 .hwcg_reg = 0x6b038,1818 .hwcg_bit = 1,1819 .clkr = {1820 .enable_reg = 0x52008,1821 .enable_mask = BIT(2),1822 .hw.init = &(const struct clk_init_data) {1823 .name = "gcc_pcie_0_cfg_ahb_clk",1824 .ops = &clk_branch2_ops,1825 },1826 },1827};1828 1829static struct clk_branch gcc_pcie_0_mstr_axi_clk = {1830 .halt_reg = 0x6b02c,1831 .halt_check = BRANCH_HALT_SKIP,1832 .hwcg_reg = 0x6b02c,1833 .hwcg_bit = 1,1834 .clkr = {1835 .enable_reg = 0x52008,1836 .enable_mask = BIT(1),1837 .hw.init = &(const struct clk_init_data) {1838 .name = "gcc_pcie_0_mstr_axi_clk",1839 .ops = &clk_branch2_ops,1840 },1841 },1842};1843 1844static struct clk_branch gcc_pcie_0_phy_rchng_clk = {1845 .halt_reg = 0x6b054,1846 .halt_check = BRANCH_HALT_VOTED,1847 .clkr = {1848 .enable_reg = 0x52000,1849 .enable_mask = BIT(22),1850 .hw.init = &(const struct clk_init_data) {1851 .name = "gcc_pcie_0_phy_rchng_clk",1852 .parent_hws = (const struct clk_hw*[]) {1853 &gcc_pcie_0_phy_rchng_clk_src.clkr.hw,1854 },1855 .num_parents = 1,1856 .flags = CLK_SET_RATE_PARENT,1857 .ops = &clk_branch2_ops,1858 },1859 },1860};1861 1862static struct clk_branch gcc_pcie_0_pipe_clk = {1863 .halt_reg = 0x6b048,1864 .halt_check = BRANCH_HALT_SKIP,1865 .clkr = {1866 .enable_reg = 0x52008,1867 .enable_mask = BIT(4),1868 .hw.init = &(const struct clk_init_data) {1869 .name = "gcc_pcie_0_pipe_clk",1870 .parent_hws = (const struct clk_hw*[]) {1871 &gcc_pcie_0_pipe_clk_src.clkr.hw,1872 },1873 .num_parents = 1,1874 .flags = CLK_SET_RATE_PARENT,1875 .ops = &clk_branch2_ops,1876 },1877 },1878};1879 1880static struct clk_branch gcc_pcie_0_slv_axi_clk = {1881 .halt_reg = 0x6b020,1882 .halt_check = BRANCH_HALT_VOTED,1883 .hwcg_reg = 0x6b020,1884 .hwcg_bit = 1,1885 .clkr = {1886 .enable_reg = 0x52008,1887 .enable_mask = BIT(0),1888 .hw.init = &(const struct clk_init_data) {1889 .name = "gcc_pcie_0_slv_axi_clk",1890 .ops = &clk_branch2_ops,1891 },1892 },1893};1894 1895static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {1896 .halt_reg = 0x6b01c,1897 .halt_check = BRANCH_HALT_VOTED,1898 .clkr = {1899 .enable_reg = 0x52008,1900 .enable_mask = BIT(5),1901 .hw.init = &(const struct clk_init_data) {1902 .name = "gcc_pcie_0_slv_q2a_axi_clk",1903 .ops = &clk_branch2_ops,1904 },1905 },1906};1907 1908static struct clk_branch gcc_pcie_1_aux_clk = {1909 .halt_reg = 0x8d038,1910 .halt_check = BRANCH_HALT_VOTED,1911 .clkr = {1912 .enable_reg = 0x52000,1913 .enable_mask = BIT(29),1914 .hw.init = &(const struct clk_init_data) {1915 .name = "gcc_pcie_1_aux_clk",1916 .parent_hws = (const struct clk_hw*[]) {1917 &gcc_pcie_1_aux_clk_src.clkr.hw,1918 },1919 .num_parents = 1,1920 .flags = CLK_SET_RATE_PARENT,1921 .ops = &clk_branch2_ops,1922 },1923 },1924};1925 1926static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {1927 .halt_reg = 0x8d034,1928 .halt_check = BRANCH_HALT_VOTED,1929 .hwcg_reg = 0x8d034,1930 .hwcg_bit = 1,1931 .clkr = {1932 .enable_reg = 0x52000,1933 .enable_mask = BIT(28),1934 .hw.init = &(const struct clk_init_data) {1935 .name = "gcc_pcie_1_cfg_ahb_clk",1936 .ops = &clk_branch2_ops,1937 },1938 },1939};1940 1941static struct clk_branch gcc_pcie_1_mstr_axi_clk = {1942 .halt_reg = 0x8d028,1943 .halt_check = BRANCH_HALT_SKIP,1944 .hwcg_reg = 0x8d028,1945 .hwcg_bit = 1,1946 .clkr = {1947 .enable_reg = 0x52000,1948 .enable_mask = BIT(27),1949 .hw.init = &(const struct clk_init_data) {1950 .name = "gcc_pcie_1_mstr_axi_clk",1951 .ops = &clk_branch2_ops,1952 },1953 },1954};1955 1956static struct clk_branch gcc_pcie_1_phy_aux_clk = {1957 .halt_reg = 0x8d044,1958 .halt_check = BRANCH_HALT_VOTED,1959 .clkr = {1960 .enable_reg = 0x52000,1961 .enable_mask = BIT(24),1962 .hw.init = &(const struct clk_init_data) {1963 .name = "gcc_pcie_1_phy_aux_clk",1964 .parent_hws = (const struct clk_hw*[]) {1965 &gcc_pcie_1_phy_aux_clk_src.clkr.hw,1966 },1967 .num_parents = 1,1968 .flags = CLK_SET_RATE_PARENT,1969 .ops = &clk_branch2_ops,1970 },1971 },1972};1973 1974static struct clk_branch gcc_pcie_1_phy_rchng_clk = {1975 .halt_reg = 0x8d05c,1976 .halt_check = BRANCH_HALT_VOTED,1977 .clkr = {1978 .enable_reg = 0x52000,1979 .enable_mask = BIT(23),1980 .hw.init = &(const struct clk_init_data) {1981 .name = "gcc_pcie_1_phy_rchng_clk",1982 .parent_hws = (const struct clk_hw*[]) {1983 &gcc_pcie_1_phy_rchng_clk_src.clkr.hw,1984 },1985 .num_parents = 1,1986 .flags = CLK_SET_RATE_PARENT,1987 .ops = &clk_branch2_ops,1988 },1989 },1990};1991 1992static struct clk_branch gcc_pcie_1_pipe_clk = {1993 .halt_reg = 0x8d050,1994 .halt_check = BRANCH_HALT_SKIP,1995 .clkr = {1996 .enable_reg = 0x52000,1997 .enable_mask = BIT(30),1998 .hw.init = &(const struct clk_init_data) {1999 .name = "gcc_pcie_1_pipe_clk",2000 .parent_hws = (const struct clk_hw*[]) {2001 &gcc_pcie_1_pipe_clk_src.clkr.hw,2002 },2003 .num_parents = 1,2004 .flags = CLK_SET_RATE_PARENT,2005 .ops = &clk_branch2_ops,2006 },2007 },2008};2009 2010static struct clk_branch gcc_pcie_1_slv_axi_clk = {2011 .halt_reg = 0x8d01c,2012 .halt_check = BRANCH_HALT_VOTED,2013 .hwcg_reg = 0x8d01c,2014 .hwcg_bit = 1,2015 .clkr = {2016 .enable_reg = 0x52000,2017 .enable_mask = BIT(26),2018 .hw.init = &(const struct clk_init_data) {2019 .name = "gcc_pcie_1_slv_axi_clk",2020 .ops = &clk_branch2_ops,2021 },2022 },2023};2024 2025static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = {2026 .halt_reg = 0x8d018,2027 .halt_check = BRANCH_HALT_VOTED,2028 .clkr = {2029 .enable_reg = 0x52000,2030 .enable_mask = BIT(25),2031 .hw.init = &(const struct clk_init_data) {2032 .name = "gcc_pcie_1_slv_q2a_axi_clk",2033 .ops = &clk_branch2_ops,2034 },2035 },2036};2037 2038static struct clk_branch gcc_pdm2_clk = {2039 .halt_reg = 0x3300c,2040 .halt_check = BRANCH_HALT,2041 .clkr = {2042 .enable_reg = 0x3300c,2043 .enable_mask = BIT(0),2044 .hw.init = &(const struct clk_init_data) {2045 .name = "gcc_pdm2_clk",2046 .parent_hws = (const struct clk_hw*[]) {2047 &gcc_pdm2_clk_src.clkr.hw,2048 },2049 .num_parents = 1,2050 .flags = CLK_SET_RATE_PARENT,2051 .ops = &clk_branch2_ops,2052 },2053 },2054};2055 2056static struct clk_branch gcc_pdm_ahb_clk = {2057 .halt_reg = 0x33004,2058 .halt_check = BRANCH_HALT_VOTED,2059 .hwcg_reg = 0x33004,2060 .hwcg_bit = 1,2061 .clkr = {2062 .enable_reg = 0x33004,2063 .enable_mask = BIT(0),2064 .hw.init = &(const struct clk_init_data) {2065 .name = "gcc_pdm_ahb_clk",2066 .ops = &clk_branch2_ops,2067 },2068 },2069};2070 2071static struct clk_branch gcc_pdm_xo4_clk = {2072 .halt_reg = 0x33008,2073 .halt_check = BRANCH_HALT,2074 .clkr = {2075 .enable_reg = 0x33008,2076 .enable_mask = BIT(0),2077 .hw.init = &(const struct clk_init_data) {2078 .name = "gcc_pdm_xo4_clk",2079 .ops = &clk_branch2_ops,2080 },2081 },2082};2083 2084static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {2085 .halt_reg = 0x26008,2086 .halt_check = BRANCH_HALT_VOTED,2087 .hwcg_reg = 0x26008,2088 .hwcg_bit = 1,2089 .clkr = {2090 .enable_reg = 0x26008,2091 .enable_mask = BIT(0),2092 .hw.init = &(const struct clk_init_data) {2093 .name = "gcc_qmip_camera_nrt_ahb_clk",2094 .ops = &clk_branch2_ops,2095 },2096 },2097};2098 2099static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {2100 .halt_reg = 0x2600c,2101 .halt_check = BRANCH_HALT_VOTED,2102 .hwcg_reg = 0x2600c,2103 .hwcg_bit = 1,2104 .clkr = {2105 .enable_reg = 0x2600c,2106 .enable_mask = BIT(0),2107 .hw.init = &(const struct clk_init_data) {2108 .name = "gcc_qmip_camera_rt_ahb_clk",2109 .ops = &clk_branch2_ops,2110 },2111 },2112};2113 2114static struct clk_branch gcc_qmip_disp_ahb_clk = {2115 .halt_reg = 0x27008,2116 .halt_check = BRANCH_HALT_VOTED,2117 .hwcg_reg = 0x27008,2118 .hwcg_bit = 1,2119 .clkr = {2120 .enable_reg = 0x27008,2121 .enable_mask = BIT(0),2122 .hw.init = &(const struct clk_init_data) {2123 .name = "gcc_qmip_disp_ahb_clk",2124 .ops = &clk_branch2_ops,2125 },2126 },2127};2128 2129static struct clk_branch gcc_qmip_gpu_ahb_clk = {2130 .halt_reg = 0x71008,2131 .halt_check = BRANCH_HALT_VOTED,2132 .hwcg_reg = 0x71008,2133 .hwcg_bit = 1,2134 .clkr = {2135 .enable_reg = 0x71008,2136 .enable_mask = BIT(0),2137 .hw.init = &(const struct clk_init_data) {2138 .name = "gcc_qmip_gpu_ahb_clk",2139 .ops = &clk_branch2_ops,2140 },2141 },2142};2143 2144static struct clk_branch gcc_qmip_pcie_ahb_clk = {2145 .halt_reg = 0x6b018,2146 .halt_check = BRANCH_HALT_VOTED,2147 .hwcg_reg = 0x6b018,2148 .hwcg_bit = 1,2149 .clkr = {2150 .enable_reg = 0x52000,2151 .enable_mask = BIT(11),2152 .hw.init = &(const struct clk_init_data) {2153 .name = "gcc_qmip_pcie_ahb_clk",2154 .ops = &clk_branch2_ops,2155 },2156 },2157};2158 2159static struct clk_branch gcc_qmip_video_cv_cpu_ahb_clk = {2160 .halt_reg = 0x32014,2161 .halt_check = BRANCH_HALT_VOTED,2162 .hwcg_reg = 0x32014,2163 .hwcg_bit = 1,2164 .clkr = {2165 .enable_reg = 0x32014,2166 .enable_mask = BIT(0),2167 .hw.init = &(const struct clk_init_data) {2168 .name = "gcc_qmip_video_cv_cpu_ahb_clk",2169 .ops = &clk_branch2_ops,2170 },2171 },2172};2173 2174static struct clk_branch gcc_qmip_video_cvp_ahb_clk = {2175 .halt_reg = 0x32008,2176 .halt_check = BRANCH_HALT_VOTED,2177 .hwcg_reg = 0x32008,2178 .hwcg_bit = 1,2179 .clkr = {2180 .enable_reg = 0x32008,2181 .enable_mask = BIT(0),2182 .hw.init = &(const struct clk_init_data) {2183 .name = "gcc_qmip_video_cvp_ahb_clk",2184 .ops = &clk_branch2_ops,2185 },2186 },2187};2188 2189static struct clk_branch gcc_qmip_video_v_cpu_ahb_clk = {2190 .halt_reg = 0x32010,2191 .halt_check = BRANCH_HALT_VOTED,2192 .hwcg_reg = 0x32010,2193 .hwcg_bit = 1,2194 .clkr = {2195 .enable_reg = 0x32010,2196 .enable_mask = BIT(0),2197 .hw.init = &(const struct clk_init_data) {2198 .name = "gcc_qmip_video_v_cpu_ahb_clk",2199 .ops = &clk_branch2_ops,2200 },2201 },2202};2203 2204static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {2205 .halt_reg = 0x3200c,2206 .halt_check = BRANCH_HALT_VOTED,2207 .hwcg_reg = 0x3200c,2208 .hwcg_bit = 1,2209 .clkr = {2210 .enable_reg = 0x3200c,2211 .enable_mask = BIT(0),2212 .hw.init = &(const struct clk_init_data) {2213 .name = "gcc_qmip_video_vcodec_ahb_clk",2214 .ops = &clk_branch2_ops,2215 },2216 },2217};2218 2219static struct clk_branch gcc_qupv3_i2c_core_clk = {2220 .halt_reg = 0x23004,2221 .halt_check = BRANCH_HALT_VOTED,2222 .clkr = {2223 .enable_reg = 0x52008,2224 .enable_mask = BIT(8),2225 .hw.init = &(const struct clk_init_data) {2226 .name = "gcc_qupv3_i2c_core_clk",2227 .ops = &clk_branch2_ops,2228 },2229 },2230};2231 2232static struct clk_branch gcc_qupv3_i2c_s0_clk = {2233 .halt_reg = 0x17004,2234 .halt_check = BRANCH_HALT_VOTED,2235 .clkr = {2236 .enable_reg = 0x52008,2237 .enable_mask = BIT(10),2238 .hw.init = &(const struct clk_init_data) {2239 .name = "gcc_qupv3_i2c_s0_clk",2240 .parent_hws = (const struct clk_hw*[]) {2241 &gcc_qupv3_i2c_s0_clk_src.clkr.hw,2242 },2243 .num_parents = 1,2244 .flags = CLK_SET_RATE_PARENT,2245 .ops = &clk_branch2_ops,2246 },2247 },2248};2249 2250static struct clk_branch gcc_qupv3_i2c_s1_clk = {2251 .halt_reg = 0x17020,2252 .halt_check = BRANCH_HALT_VOTED,2253 .clkr = {2254 .enable_reg = 0x52008,2255 .enable_mask = BIT(11),2256 .hw.init = &(const struct clk_init_data) {2257 .name = "gcc_qupv3_i2c_s1_clk",2258 .parent_hws = (const struct clk_hw*[]) {2259 &gcc_qupv3_i2c_s1_clk_src.clkr.hw,2260 },2261 .num_parents = 1,2262 .flags = CLK_SET_RATE_PARENT,2263 .ops = &clk_branch2_ops,2264 },2265 },2266};2267 2268static struct clk_branch gcc_qupv3_i2c_s2_clk = {2269 .halt_reg = 0x1703c,2270 .halt_check = BRANCH_HALT_VOTED,2271 .clkr = {2272 .enable_reg = 0x52008,2273 .enable_mask = BIT(12),2274 .hw.init = &(const struct clk_init_data) {2275 .name = "gcc_qupv3_i2c_s2_clk",2276 .parent_hws = (const struct clk_hw*[]) {2277 &gcc_qupv3_i2c_s2_clk_src.clkr.hw,2278 },2279 .num_parents = 1,2280 .flags = CLK_SET_RATE_PARENT,2281 .ops = &clk_branch2_ops,2282 },2283 },2284};2285 2286static struct clk_branch gcc_qupv3_i2c_s3_clk = {2287 .halt_reg = 0x17058,2288 .halt_check = BRANCH_HALT_VOTED,2289 .clkr = {2290 .enable_reg = 0x52008,2291 .enable_mask = BIT(13),2292 .hw.init = &(const struct clk_init_data) {2293 .name = "gcc_qupv3_i2c_s3_clk",2294 .parent_hws = (const struct clk_hw*[]) {2295 &gcc_qupv3_i2c_s3_clk_src.clkr.hw,2296 },2297 .num_parents = 1,2298 .flags = CLK_SET_RATE_PARENT,2299 .ops = &clk_branch2_ops,2300 },2301 },2302};2303 2304static struct clk_branch gcc_qupv3_i2c_s4_clk = {2305 .halt_reg = 0x17074,2306 .halt_check = BRANCH_HALT_VOTED,2307 .clkr = {2308 .enable_reg = 0x52008,2309 .enable_mask = BIT(14),2310 .hw.init = &(const struct clk_init_data) {2311 .name = "gcc_qupv3_i2c_s4_clk",2312 .parent_hws = (const struct clk_hw*[]) {2313 &gcc_qupv3_i2c_s4_clk_src.clkr.hw,2314 },2315 .num_parents = 1,2316 .flags = CLK_SET_RATE_PARENT,2317 .ops = &clk_branch2_ops,2318 },2319 },2320};2321 2322static struct clk_branch gcc_qupv3_i2c_s5_clk = {2323 .halt_reg = 0x17090,2324 .halt_check = BRANCH_HALT_VOTED,2325 .clkr = {2326 .enable_reg = 0x52008,2327 .enable_mask = BIT(15),2328 .hw.init = &(const struct clk_init_data) {2329 .name = "gcc_qupv3_i2c_s5_clk",2330 .parent_hws = (const struct clk_hw*[]) {2331 &gcc_qupv3_i2c_s5_clk_src.clkr.hw,2332 },2333 .num_parents = 1,2334 .flags = CLK_SET_RATE_PARENT,2335 .ops = &clk_branch2_ops,2336 },2337 },2338};2339 2340static struct clk_branch gcc_qupv3_i2c_s6_clk = {2341 .halt_reg = 0x170ac,2342 .halt_check = BRANCH_HALT_VOTED,2343 .clkr = {2344 .enable_reg = 0x52008,2345 .enable_mask = BIT(16),2346 .hw.init = &(const struct clk_init_data) {2347 .name = "gcc_qupv3_i2c_s6_clk",2348 .parent_hws = (const struct clk_hw*[]) {2349 &gcc_qupv3_i2c_s6_clk_src.clkr.hw,2350 },2351 .num_parents = 1,2352 .flags = CLK_SET_RATE_PARENT,2353 .ops = &clk_branch2_ops,2354 },2355 },2356};2357 2358static struct clk_branch gcc_qupv3_i2c_s7_clk = {2359 .halt_reg = 0x170c8,2360 .halt_check = BRANCH_HALT_VOTED,2361 .clkr = {2362 .enable_reg = 0x52008,2363 .enable_mask = BIT(17),2364 .hw.init = &(const struct clk_init_data) {2365 .name = "gcc_qupv3_i2c_s7_clk",2366 .parent_hws = (const struct clk_hw*[]) {2367 &gcc_qupv3_i2c_s7_clk_src.clkr.hw,2368 },2369 .num_parents = 1,2370 .flags = CLK_SET_RATE_PARENT,2371 .ops = &clk_branch2_ops,2372 },2373 },2374};2375 2376static struct clk_branch gcc_qupv3_i2c_s8_clk = {2377 .halt_reg = 0x170e4,2378 .halt_check = BRANCH_HALT_VOTED,2379 .clkr = {2380 .enable_reg = 0x52010,2381 .enable_mask = BIT(14),2382 .hw.init = &(const struct clk_init_data) {2383 .name = "gcc_qupv3_i2c_s8_clk",2384 .parent_hws = (const struct clk_hw*[]) {2385 &gcc_qupv3_i2c_s8_clk_src.clkr.hw,2386 },2387 .num_parents = 1,2388 .flags = CLK_SET_RATE_PARENT,2389 .ops = &clk_branch2_ops,2390 },2391 },2392};2393 2394static struct clk_branch gcc_qupv3_i2c_s9_clk = {2395 .halt_reg = 0x17100,2396 .halt_check = BRANCH_HALT_VOTED,2397 .clkr = {2398 .enable_reg = 0x52010,2399 .enable_mask = BIT(15),2400 .hw.init = &(const struct clk_init_data) {2401 .name = "gcc_qupv3_i2c_s9_clk",2402 .parent_hws = (const struct clk_hw*[]) {2403 &gcc_qupv3_i2c_s9_clk_src.clkr.hw,2404 },2405 .num_parents = 1,2406 .flags = CLK_SET_RATE_PARENT,2407 .ops = &clk_branch2_ops,2408 },2409 },2410};2411 2412static struct clk_branch gcc_qupv3_i2c_s_ahb_clk = {2413 .halt_reg = 0x23000,2414 .halt_check = BRANCH_HALT_VOTED,2415 .hwcg_reg = 0x23000,2416 .hwcg_bit = 1,2417 .clkr = {2418 .enable_reg = 0x52008,2419 .enable_mask = BIT(7),2420 .hw.init = &(const struct clk_init_data) {2421 .name = "gcc_qupv3_i2c_s_ahb_clk",2422 .ops = &clk_branch2_ops,2423 },2424 },2425};2426 2427static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {2428 .halt_reg = 0x23154,2429 .halt_check = BRANCH_HALT_VOTED,2430 .clkr = {2431 .enable_reg = 0x52008,2432 .enable_mask = BIT(18),2433 .hw.init = &(const struct clk_init_data) {2434 .name = "gcc_qupv3_wrap1_core_2x_clk",2435 .ops = &clk_branch2_ops,2436 },2437 },2438};2439 2440static struct clk_branch gcc_qupv3_wrap1_core_clk = {2441 .halt_reg = 0x23144,2442 .halt_check = BRANCH_HALT_VOTED,2443 .clkr = {2444 .enable_reg = 0x52008,2445 .enable_mask = BIT(19),2446 .hw.init = &(const struct clk_init_data) {2447 .name = "gcc_qupv3_wrap1_core_clk",2448 .ops = &clk_branch2_ops,2449 },2450 },2451};2452 2453static struct clk_branch gcc_qupv3_wrap1_qspi_ref_clk = {2454 .halt_reg = 0x1889c,2455 .halt_check = BRANCH_HALT_VOTED,2456 .clkr = {2457 .enable_reg = 0x52010,2458 .enable_mask = BIT(29),2459 .hw.init = &(const struct clk_init_data) {2460 .name = "gcc_qupv3_wrap1_qspi_ref_clk",2461 .parent_hws = (const struct clk_hw*[]) {2462 &gcc_qupv3_wrap1_qspi_ref_clk_src.clkr.hw,2463 },2464 .num_parents = 1,2465 .flags = CLK_SET_RATE_PARENT,2466 .ops = &clk_branch2_ops,2467 },2468 },2469};2470 2471static struct clk_branch gcc_qupv3_wrap1_s0_clk = {2472 .halt_reg = 0x18004,2473 .halt_check = BRANCH_HALT_VOTED,2474 .clkr = {2475 .enable_reg = 0x52008,2476 .enable_mask = BIT(22),2477 .hw.init = &(const struct clk_init_data) {2478 .name = "gcc_qupv3_wrap1_s0_clk",2479 .parent_hws = (const struct clk_hw*[]) {2480 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw,2481 },2482 .num_parents = 1,2483 .flags = CLK_SET_RATE_PARENT,2484 .ops = &clk_branch2_ops,2485 },2486 },2487};2488 2489static struct clk_branch gcc_qupv3_wrap1_s1_clk = {2490 .halt_reg = 0x1813c,2491 .halt_check = BRANCH_HALT_VOTED,2492 .clkr = {2493 .enable_reg = 0x52008,2494 .enable_mask = BIT(23),2495 .hw.init = &(const struct clk_init_data) {2496 .name = "gcc_qupv3_wrap1_s1_clk",2497 .parent_hws = (const struct clk_hw*[]) {2498 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw,2499 },2500 .num_parents = 1,2501 .flags = CLK_SET_RATE_PARENT,2502 .ops = &clk_branch2_ops,2503 },2504 },2505};2506 2507static struct clk_branch gcc_qupv3_wrap1_s2_clk = {2508 .halt_reg = 0x18274,2509 .halt_check = BRANCH_HALT_VOTED,2510 .clkr = {2511 .enable_reg = 0x52008,2512 .enable_mask = BIT(24),2513 .hw.init = &(const struct clk_init_data) {2514 .name = "gcc_qupv3_wrap1_s2_clk",2515 .parent_hws = (const struct clk_hw*[]) {2516 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw,2517 },2518 .num_parents = 1,2519 .flags = CLK_SET_RATE_PARENT,2520 .ops = &clk_branch2_ops,2521 },2522 },2523};2524 2525static struct clk_branch gcc_qupv3_wrap1_s3_clk = {2526 .halt_reg = 0x18284,2527 .halt_check = BRANCH_HALT_VOTED,2528 .clkr = {2529 .enable_reg = 0x52008,2530 .enable_mask = BIT(25),2531 .hw.init = &(const struct clk_init_data) {2532 .name = "gcc_qupv3_wrap1_s3_clk",2533 .parent_hws = (const struct clk_hw*[]) {2534 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw,2535 },2536 .num_parents = 1,2537 .flags = CLK_SET_RATE_PARENT,2538 .ops = &clk_branch2_ops,2539 },2540 },2541};2542 2543static struct clk_branch gcc_qupv3_wrap1_s4_clk = {2544 .halt_reg = 0x183bc,2545 .halt_check = BRANCH_HALT_VOTED,2546 .clkr = {2547 .enable_reg = 0x52008,2548 .enable_mask = BIT(26),2549 .hw.init = &(const struct clk_init_data) {2550 .name = "gcc_qupv3_wrap1_s4_clk",2551 .parent_hws = (const struct clk_hw*[]) {2552 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw,2553 },2554 .num_parents = 1,2555 .flags = CLK_SET_RATE_PARENT,2556 .ops = &clk_branch2_ops,2557 },2558 },2559};2560 2561static struct clk_branch gcc_qupv3_wrap1_s5_clk = {2562 .halt_reg = 0x184f4,2563 .halt_check = BRANCH_HALT_VOTED,2564 .clkr = {2565 .enable_reg = 0x52008,2566 .enable_mask = BIT(27),2567 .hw.init = &(const struct clk_init_data) {2568 .name = "gcc_qupv3_wrap1_s5_clk",2569 .parent_hws = (const struct clk_hw*[]) {2570 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw,2571 },2572 .num_parents = 1,2573 .flags = CLK_SET_RATE_PARENT,2574 .ops = &clk_branch2_ops,2575 },2576 },2577};2578 2579static struct clk_branch gcc_qupv3_wrap1_s6_clk = {2580 .halt_reg = 0x1862c,2581 .halt_check = BRANCH_HALT_VOTED,2582 .clkr = {2583 .enable_reg = 0x52008,2584 .enable_mask = BIT(28),2585 .hw.init = &(const struct clk_init_data) {2586 .name = "gcc_qupv3_wrap1_s6_clk",2587 .parent_hws = (const struct clk_hw*[]) {2588 &gcc_qupv3_wrap1_s6_clk_src.clkr.hw,2589 },2590 .num_parents = 1,2591 .flags = CLK_SET_RATE_PARENT,2592 .ops = &clk_branch2_ops,2593 },2594 },2595};2596 2597static struct clk_branch gcc_qupv3_wrap1_s7_clk = {2598 .halt_reg = 0x18764,2599 .halt_check = BRANCH_HALT_VOTED,2600 .clkr = {2601 .enable_reg = 0x52010,2602 .enable_mask = BIT(16),2603 .hw.init = &(const struct clk_init_data) {2604 .name = "gcc_qupv3_wrap1_s7_clk",2605 .parent_hws = (const struct clk_hw*[]) {2606 &gcc_qupv3_wrap1_s7_clk_src.clkr.hw,2607 },2608 .num_parents = 1,2609 .flags = CLK_SET_RATE_PARENT,2610 .ops = &clk_branch2_ops,2611 },2612 },2613};2614 2615static struct clk_branch gcc_qupv3_wrap2_core_2x_clk = {2616 .halt_reg = 0x232a4,2617 .halt_check = BRANCH_HALT_VOTED,2618 .clkr = {2619 .enable_reg = 0x52010,2620 .enable_mask = BIT(3),2621 .hw.init = &(const struct clk_init_data) {2622 .name = "gcc_qupv3_wrap2_core_2x_clk",2623 .ops = &clk_branch2_ops,2624 },2625 },2626};2627 2628static struct clk_branch gcc_qupv3_wrap2_core_clk = {2629 .halt_reg = 0x23294,2630 .halt_check = BRANCH_HALT_VOTED,2631 .clkr = {2632 .enable_reg = 0x52010,2633 .enable_mask = BIT(0),2634 .hw.init = &(const struct clk_init_data) {2635 .name = "gcc_qupv3_wrap2_core_clk",2636 .ops = &clk_branch2_ops,2637 },2638 },2639};2640 2641static struct clk_branch gcc_qupv3_wrap2_ibi_ctrl_2_clk = {2642 .halt_reg = 0x1e9cc,2643 .halt_check = BRANCH_HALT_VOTED,2644 .hwcg_reg = 0x1e9cc,2645 .hwcg_bit = 1,2646 .clkr = {2647 .enable_reg = 0x52010,2648 .enable_mask = BIT(27),2649 .hw.init = &(const struct clk_init_data) {2650 .name = "gcc_qupv3_wrap2_ibi_ctrl_2_clk",2651 .parent_hws = (const struct clk_hw*[]) {2652 &gcc_qupv3_wrap2_ibi_ctrl_0_clk_src.clkr.hw,2653 },2654 .num_parents = 1,2655 .flags = CLK_SET_RATE_PARENT,2656 .ops = &clk_branch2_ops,2657 },2658 },2659};2660 2661static struct clk_branch gcc_qupv3_wrap2_ibi_ctrl_3_clk = {2662 .halt_reg = 0x1e9d0,2663 .halt_check = BRANCH_HALT_VOTED,2664 .hwcg_reg = 0x1e9d0,2665 .hwcg_bit = 1,2666 .clkr = {2667 .enable_reg = 0x52010,2668 .enable_mask = BIT(28),2669 .hw.init = &(const struct clk_init_data) {2670 .name = "gcc_qupv3_wrap2_ibi_ctrl_3_clk",2671 .parent_hws = (const struct clk_hw*[]) {2672 &gcc_qupv3_wrap2_ibi_ctrl_0_clk_src.clkr.hw,2673 },2674 .num_parents = 1,2675 .flags = CLK_SET_RATE_PARENT,2676 .ops = &clk_branch2_ops,2677 },2678 },2679};2680 2681static struct clk_branch gcc_qupv3_wrap2_s0_clk = {2682 .halt_reg = 0x1e004,2683 .halt_check = BRANCH_HALT_VOTED,2684 .clkr = {2685 .enable_reg = 0x52010,2686 .enable_mask = BIT(4),2687 .hw.init = &(const struct clk_init_data) {2688 .name = "gcc_qupv3_wrap2_s0_clk",2689 .parent_hws = (const struct clk_hw*[]) {2690 &gcc_qupv3_wrap2_s0_clk_src.clkr.hw,2691 },2692 .num_parents = 1,2693 .flags = CLK_SET_RATE_PARENT,2694 .ops = &clk_branch2_ops,2695 },2696 },2697};2698 2699static struct clk_branch gcc_qupv3_wrap2_s1_clk = {2700 .halt_reg = 0x1e13c,2701 .halt_check = BRANCH_HALT_VOTED,2702 .clkr = {2703 .enable_reg = 0x52010,2704 .enable_mask = BIT(5),2705 .hw.init = &(const struct clk_init_data) {2706 .name = "gcc_qupv3_wrap2_s1_clk",2707 .parent_hws = (const struct clk_hw*[]) {2708 &gcc_qupv3_wrap2_s1_clk_src.clkr.hw,2709 },2710 .num_parents = 1,2711 .flags = CLK_SET_RATE_PARENT,2712 .ops = &clk_branch2_ops,2713 },2714 },2715};2716 2717static struct clk_branch gcc_qupv3_wrap2_s2_clk = {2718 .halt_reg = 0x1e274,2719 .halt_check = BRANCH_HALT_VOTED,2720 .clkr = {2721 .enable_reg = 0x52010,2722 .enable_mask = BIT(6),2723 .hw.init = &(const struct clk_init_data) {2724 .name = "gcc_qupv3_wrap2_s2_clk",2725 .parent_hws = (const struct clk_hw*[]) {2726 &gcc_qupv3_wrap2_s2_clk_src.clkr.hw,2727 },2728 .num_parents = 1,2729 .flags = CLK_SET_RATE_PARENT,2730 .ops = &clk_branch2_ops,2731 },2732 },2733};2734 2735static struct clk_branch gcc_qupv3_wrap2_s3_clk = {2736 .halt_reg = 0x1e3ac,2737 .halt_check = BRANCH_HALT_VOTED,2738 .clkr = {2739 .enable_reg = 0x52010,2740 .enable_mask = BIT(7),2741 .hw.init = &(const struct clk_init_data) {2742 .name = "gcc_qupv3_wrap2_s3_clk",2743 .parent_hws = (const struct clk_hw*[]) {2744 &gcc_qupv3_wrap2_s3_clk_src.clkr.hw,2745 },2746 .num_parents = 1,2747 .flags = CLK_SET_RATE_PARENT,2748 .ops = &clk_branch2_ops,2749 },2750 },2751};2752 2753static struct clk_branch gcc_qupv3_wrap2_s4_clk = {2754 .halt_reg = 0x1e4e4,2755 .halt_check = BRANCH_HALT_VOTED,2756 .clkr = {2757 .enable_reg = 0x52010,2758 .enable_mask = BIT(8),2759 .hw.init = &(const struct clk_init_data) {2760 .name = "gcc_qupv3_wrap2_s4_clk",2761 .parent_hws = (const struct clk_hw*[]) {2762 &gcc_qupv3_wrap2_s4_clk_src.clkr.hw,2763 },2764 .num_parents = 1,2765 .flags = CLK_SET_RATE_PARENT,2766 .ops = &clk_branch2_ops,2767 },2768 },2769};2770 2771static struct clk_branch gcc_qupv3_wrap2_s5_clk = {2772 .halt_reg = 0x1e61c,2773 .halt_check = BRANCH_HALT_VOTED,2774 .clkr = {2775 .enable_reg = 0x52010,2776 .enable_mask = BIT(9),2777 .hw.init = &(const struct clk_init_data) {2778 .name = "gcc_qupv3_wrap2_s5_clk",2779 .parent_hws = (const struct clk_hw*[]) {2780 &gcc_qupv3_wrap2_s5_clk_src.clkr.hw,2781 },2782 .num_parents = 1,2783 .flags = CLK_SET_RATE_PARENT,2784 .ops = &clk_branch2_ops,2785 },2786 },2787};2788 2789static struct clk_branch gcc_qupv3_wrap2_s6_clk = {2790 .halt_reg = 0x1e754,2791 .halt_check = BRANCH_HALT_VOTED,2792 .clkr = {2793 .enable_reg = 0x52010,2794 .enable_mask = BIT(10),2795 .hw.init = &(const struct clk_init_data) {2796 .name = "gcc_qupv3_wrap2_s6_clk",2797 .parent_hws = (const struct clk_hw*[]) {2798 &gcc_qupv3_wrap2_s6_clk_src.clkr.hw,2799 },2800 .num_parents = 1,2801 .flags = CLK_SET_RATE_PARENT,2802 .ops = &clk_branch2_ops,2803 },2804 },2805};2806 2807static struct clk_branch gcc_qupv3_wrap2_s7_clk = {2808 .halt_reg = 0x1e88c,2809 .halt_check = BRANCH_HALT_VOTED,2810 .clkr = {2811 .enable_reg = 0x52010,2812 .enable_mask = BIT(17),2813 .hw.init = &(const struct clk_init_data) {2814 .name = "gcc_qupv3_wrap2_s7_clk",2815 .parent_hws = (const struct clk_hw*[]) {2816 &gcc_qupv3_wrap2_s7_clk_src.clkr.hw,2817 },2818 .num_parents = 1,2819 .flags = CLK_SET_RATE_PARENT,2820 .ops = &clk_branch2_ops,2821 },2822 },2823};2824 2825static struct clk_branch gcc_qupv3_wrap3_core_2x_clk = {2826 .halt_reg = 0x233f4,2827 .halt_check = BRANCH_HALT_VOTED,2828 .clkr = {2829 .enable_reg = 0x52018,2830 .enable_mask = BIT(1),2831 .hw.init = &(const struct clk_init_data) {2832 .name = "gcc_qupv3_wrap3_core_2x_clk",2833 .ops = &clk_branch2_ops,2834 },2835 },2836};2837 2838static struct clk_branch gcc_qupv3_wrap3_core_clk = {2839 .halt_reg = 0x233e4,2840 .halt_check = BRANCH_HALT_VOTED,2841 .clkr = {2842 .enable_reg = 0x52018,2843 .enable_mask = BIT(0),2844 .hw.init = &(const struct clk_init_data) {2845 .name = "gcc_qupv3_wrap3_core_clk",2846 .ops = &clk_branch2_ops,2847 },2848 },2849};2850 2851static struct clk_branch gcc_qupv3_wrap3_qspi_ref_clk = {2852 .halt_reg = 0x19014,2853 .halt_check = BRANCH_HALT_VOTED,2854 .clkr = {2855 .enable_reg = 0x52018,2856 .enable_mask = BIT(3),2857 .hw.init = &(const struct clk_init_data) {2858 .name = "gcc_qupv3_wrap3_qspi_ref_clk",2859 .parent_hws = (const struct clk_hw*[]) {2860 &gcc_qupv3_wrap3_qspi_ref_clk_src.clkr.hw,2861 },2862 .num_parents = 1,2863 .flags = CLK_SET_RATE_PARENT,2864 .ops = &clk_branch2_ops,2865 },2866 },2867};2868 2869static struct clk_branch gcc_qupv3_wrap3_s0_clk = {2870 .halt_reg = 0x19004,2871 .halt_check = BRANCH_HALT_VOTED,2872 .clkr = {2873 .enable_reg = 0x52018,2874 .enable_mask = BIT(2),2875 .hw.init = &(const struct clk_init_data) {2876 .name = "gcc_qupv3_wrap3_s0_clk",2877 .parent_hws = (const struct clk_hw*[]) {2878 &gcc_qupv3_wrap3_s0_clk_src.clkr.hw,2879 },2880 .num_parents = 1,2881 .flags = CLK_SET_RATE_PARENT,2882 .ops = &clk_branch2_ops,2883 },2884 },2885};2886 2887static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {2888 .halt_reg = 0x2313c,2889 .halt_check = BRANCH_HALT_VOTED,2890 .hwcg_reg = 0x2313c,2891 .hwcg_bit = 1,2892 .clkr = {2893 .enable_reg = 0x52008,2894 .enable_mask = BIT(20),2895 .hw.init = &(const struct clk_init_data) {2896 .name = "gcc_qupv3_wrap_1_m_ahb_clk",2897 .ops = &clk_branch2_ops,2898 },2899 },2900};2901 2902static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {2903 .halt_reg = 0x23140,2904 .halt_check = BRANCH_HALT_VOTED,2905 .hwcg_reg = 0x23140,2906 .hwcg_bit = 1,2907 .clkr = {2908 .enable_reg = 0x52008,2909 .enable_mask = BIT(21),2910 .hw.init = &(const struct clk_init_data) {2911 .name = "gcc_qupv3_wrap_1_s_ahb_clk",2912 .ops = &clk_branch2_ops,2913 },2914 },2915};2916 2917static struct clk_branch gcc_qupv3_wrap_2_ibi_2_ahb_clk = {2918 .halt_reg = 0x1e9c4,2919 .halt_check = BRANCH_HALT_VOTED,2920 .hwcg_reg = 0x1e9c4,2921 .hwcg_bit = 1,2922 .clkr = {2923 .enable_reg = 0x52010,2924 .enable_mask = BIT(25),2925 .hw.init = &(const struct clk_init_data) {2926 .name = "gcc_qupv3_wrap_2_ibi_2_ahb_clk",2927 .ops = &clk_branch2_ops,2928 },2929 },2930};2931 2932static struct clk_branch gcc_qupv3_wrap_2_ibi_3_ahb_clk = {2933 .halt_reg = 0x1e9c8,2934 .halt_check = BRANCH_HALT_VOTED,2935 .hwcg_reg = 0x1e9c8,2936 .hwcg_bit = 1,2937 .clkr = {2938 .enable_reg = 0x52010,2939 .enable_mask = BIT(26),2940 .hw.init = &(const struct clk_init_data) {2941 .name = "gcc_qupv3_wrap_2_ibi_3_ahb_clk",2942 .ops = &clk_branch2_ops,2943 },2944 },2945};2946 2947static struct clk_branch gcc_qupv3_wrap_2_m_ahb_clk = {2948 .halt_reg = 0x2328c,2949 .halt_check = BRANCH_HALT_VOTED,2950 .hwcg_reg = 0x2328c,2951 .hwcg_bit = 1,2952 .clkr = {2953 .enable_reg = 0x52010,2954 .enable_mask = BIT(2),2955 .hw.init = &(const struct clk_init_data) {2956 .name = "gcc_qupv3_wrap_2_m_ahb_clk",2957 .ops = &clk_branch2_ops,2958 },2959 },2960};2961 2962static struct clk_branch gcc_qupv3_wrap_2_s_ahb_clk = {2963 .halt_reg = 0x23290,2964 .halt_check = BRANCH_HALT_VOTED,2965 .hwcg_reg = 0x23290,2966 .hwcg_bit = 1,2967 .clkr = {2968 .enable_reg = 0x52010,2969 .enable_mask = BIT(1),2970 .hw.init = &(const struct clk_init_data) {2971 .name = "gcc_qupv3_wrap_2_s_ahb_clk",2972 .ops = &clk_branch2_ops,2973 },2974 },2975};2976 2977static struct clk_branch gcc_qupv3_wrap_3_m_ahb_clk = {2978 .halt_reg = 0x233dc,2979 .halt_check = BRANCH_HALT_VOTED,2980 .hwcg_reg = 0x233dc,2981 .hwcg_bit = 1,2982 .clkr = {2983 .enable_reg = 0x52010,2984 .enable_mask = BIT(30),2985 .hw.init = &(const struct clk_init_data) {2986 .name = "gcc_qupv3_wrap_3_m_ahb_clk",2987 .ops = &clk_branch2_ops,2988 },2989 },2990};2991 2992static struct clk_branch gcc_qupv3_wrap_3_s_ahb_clk = {2993 .halt_reg = 0x233e0,2994 .halt_check = BRANCH_HALT_VOTED,2995 .hwcg_reg = 0x233e0,2996 .hwcg_bit = 1,2997 .clkr = {2998 .enable_reg = 0x52010,2999 .enable_mask = BIT(31),3000 .hw.init = &(const struct clk_init_data) {3001 .name = "gcc_qupv3_wrap_3_s_ahb_clk",3002 .ops = &clk_branch2_ops,3003 },3004 },3005};3006 3007static struct clk_branch gcc_sdcc2_ahb_clk = {3008 .halt_reg = 0x14010,3009 .halt_check = BRANCH_HALT,3010 .clkr = {3011 .enable_reg = 0x14010,3012 .enable_mask = BIT(0),3013 .hw.init = &(const struct clk_init_data) {3014 .name = "gcc_sdcc2_ahb_clk",3015 .ops = &clk_branch2_ops,3016 },3017 },3018};3019 3020static struct clk_branch gcc_sdcc2_apps_clk = {3021 .halt_reg = 0x14004,3022 .halt_check = BRANCH_HALT,3023 .clkr = {3024 .enable_reg = 0x14004,3025 .enable_mask = BIT(0),3026 .hw.init = &(const struct clk_init_data) {3027 .name = "gcc_sdcc2_apps_clk",3028 .parent_hws = (const struct clk_hw*[]) {3029 &gcc_sdcc2_apps_clk_src.clkr.hw,3030 },3031 .num_parents = 1,3032 .flags = CLK_SET_RATE_PARENT,3033 .ops = &clk_branch2_ops,3034 },3035 },3036};3037 3038static struct clk_branch gcc_sdcc4_ahb_clk = {3039 .halt_reg = 0x16010,3040 .halt_check = BRANCH_HALT,3041 .clkr = {3042 .enable_reg = 0x16010,3043 .enable_mask = BIT(0),3044 .hw.init = &(const struct clk_init_data) {3045 .name = "gcc_sdcc4_ahb_clk",3046 .ops = &clk_branch2_ops,3047 },3048 },3049};3050 3051static struct clk_branch gcc_sdcc4_apps_clk = {3052 .halt_reg = 0x16004,3053 .halt_check = BRANCH_HALT,3054 .clkr = {3055 .enable_reg = 0x16004,3056 .enable_mask = BIT(0),3057 .hw.init = &(const struct clk_init_data) {3058 .name = "gcc_sdcc4_apps_clk",3059 .parent_hws = (const struct clk_hw*[]) {3060 &gcc_sdcc4_apps_clk_src.clkr.hw,3061 },3062 .num_parents = 1,3063 .flags = CLK_SET_RATE_PARENT,3064 .ops = &clk_branch2_ops,3065 },3066 },3067};3068 3069static struct clk_branch gcc_ufs_phy_ahb_clk = {3070 .halt_reg = 0x77024,3071 .halt_check = BRANCH_HALT_VOTED,3072 .hwcg_reg = 0x77024,3073 .hwcg_bit = 1,3074 .clkr = {3075 .enable_reg = 0x77024,3076 .enable_mask = BIT(0),3077 .hw.init = &(const struct clk_init_data) {3078 .name = "gcc_ufs_phy_ahb_clk",3079 .ops = &clk_branch2_ops,3080 },3081 },3082};3083 3084static struct clk_branch gcc_ufs_phy_axi_clk = {3085 .halt_reg = 0x77018,3086 .halt_check = BRANCH_HALT_VOTED,3087 .hwcg_reg = 0x77018,3088 .hwcg_bit = 1,3089 .clkr = {3090 .enable_reg = 0x77018,3091 .enable_mask = BIT(0),3092 .hw.init = &(const struct clk_init_data) {3093 .name = "gcc_ufs_phy_axi_clk",3094 .parent_hws = (const struct clk_hw*[]) {3095 &gcc_ufs_phy_axi_clk_src.clkr.hw,3096 },3097 .num_parents = 1,3098 .flags = CLK_SET_RATE_PARENT,3099 .ops = &clk_branch2_ops,3100 },3101 },3102};3103 3104static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = {3105 .halt_reg = 0x77018,3106 .halt_check = BRANCH_HALT_VOTED,3107 .hwcg_reg = 0x77018,3108 .hwcg_bit = 1,3109 .clkr = {3110 .enable_reg = 0x77018,3111 .enable_mask = BIT(1),3112 .hw.init = &(const struct clk_init_data) {3113 .name = "gcc_ufs_phy_axi_hw_ctl_clk",3114 .parent_hws = (const struct clk_hw*[]) {3115 &gcc_ufs_phy_axi_clk_src.clkr.hw,3116 },3117 .num_parents = 1,3118 .flags = CLK_SET_RATE_PARENT,3119 .ops = &clk_branch2_ops,3120 },3121 },3122};3123 3124static struct clk_branch gcc_ufs_phy_ice_core_clk = {3125 .halt_reg = 0x77074,3126 .halt_check = BRANCH_HALT_VOTED,3127 .hwcg_reg = 0x77074,3128 .hwcg_bit = 1,3129 .clkr = {3130 .enable_reg = 0x77074,3131 .enable_mask = BIT(0),3132 .hw.init = &(const struct clk_init_data) {3133 .name = "gcc_ufs_phy_ice_core_clk",3134 .parent_hws = (const struct clk_hw*[]) {3135 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,3136 },3137 .num_parents = 1,3138 .flags = CLK_SET_RATE_PARENT,3139 .ops = &clk_branch2_ops,3140 },3141 },3142};3143 3144static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = {3145 .halt_reg = 0x77074,3146 .halt_check = BRANCH_HALT_VOTED,3147 .hwcg_reg = 0x77074,3148 .hwcg_bit = 1,3149 .clkr = {3150 .enable_reg = 0x77074,3151 .enable_mask = BIT(1),3152 .hw.init = &(const struct clk_init_data) {3153 .name = "gcc_ufs_phy_ice_core_hw_ctl_clk",3154 .parent_hws = (const struct clk_hw*[]) {3155 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,3156 },3157 .num_parents = 1,3158 .flags = CLK_SET_RATE_PARENT,3159 .ops = &clk_branch2_ops,3160 },3161 },3162};3163 3164static struct clk_branch gcc_ufs_phy_phy_aux_clk = {3165 .halt_reg = 0x770b0,3166 .halt_check = BRANCH_HALT_VOTED,3167 .hwcg_reg = 0x770b0,3168 .hwcg_bit = 1,3169 .clkr = {3170 .enable_reg = 0x770b0,3171 .enable_mask = BIT(0),3172 .hw.init = &(const struct clk_init_data) {3173 .name = "gcc_ufs_phy_phy_aux_clk",3174 .parent_hws = (const struct clk_hw*[]) {3175 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,3176 },3177 .num_parents = 1,3178 .flags = CLK_SET_RATE_PARENT,3179 .ops = &clk_branch2_ops,3180 },3181 },3182};3183 3184static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = {3185 .halt_reg = 0x770b0,3186 .halt_check = BRANCH_HALT_VOTED,3187 .hwcg_reg = 0x770b0,3188 .hwcg_bit = 1,3189 .clkr = {3190 .enable_reg = 0x770b0,3191 .enable_mask = BIT(1),3192 .hw.init = &(const struct clk_init_data) {3193 .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk",3194 .parent_hws = (const struct clk_hw*[]) {3195 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,3196 },3197 .num_parents = 1,3198 .flags = CLK_SET_RATE_PARENT,3199 .ops = &clk_branch2_ops,3200 },3201 },3202};3203 3204static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {3205 .halt_reg = 0x7702c,3206 .halt_check = BRANCH_HALT_DELAY,3207 .clkr = {3208 .enable_reg = 0x7702c,3209 .enable_mask = BIT(0),3210 .hw.init = &(const struct clk_init_data) {3211 .name = "gcc_ufs_phy_rx_symbol_0_clk",3212 .parent_hws = (const struct clk_hw*[]) {3213 &gcc_ufs_phy_rx_symbol_0_clk_src.clkr.hw,3214 },3215 .num_parents = 1,3216 .flags = CLK_SET_RATE_PARENT,3217 .ops = &clk_branch2_ops,3218 },3219 },3220};3221 3222static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {3223 .halt_reg = 0x770cc,3224 .halt_check = BRANCH_HALT_DELAY,3225 .clkr = {3226 .enable_reg = 0x770cc,3227 .enable_mask = BIT(0),3228 .hw.init = &(const struct clk_init_data) {3229 .name = "gcc_ufs_phy_rx_symbol_1_clk",3230 .parent_hws = (const struct clk_hw*[]) {3231 &gcc_ufs_phy_rx_symbol_1_clk_src.clkr.hw,3232 },3233 .num_parents = 1,3234 .flags = CLK_SET_RATE_PARENT,3235 .ops = &clk_branch2_ops,3236 },3237 },3238};3239 3240static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {3241 .halt_reg = 0x77028,3242 .halt_check = BRANCH_HALT_DELAY,3243 .clkr = {3244 .enable_reg = 0x77028,3245 .enable_mask = BIT(0),3246 .hw.init = &(const struct clk_init_data) {3247 .name = "gcc_ufs_phy_tx_symbol_0_clk",3248 .parent_hws = (const struct clk_hw*[]) {3249 &gcc_ufs_phy_tx_symbol_0_clk_src.clkr.hw,3250 },3251 .num_parents = 1,3252 .flags = CLK_SET_RATE_PARENT,3253 .ops = &clk_branch2_ops,3254 },3255 },3256};3257 3258static struct clk_branch gcc_ufs_phy_unipro_core_clk = {3259 .halt_reg = 0x77068,3260 .halt_check = BRANCH_HALT_VOTED,3261 .hwcg_reg = 0x77068,3262 .hwcg_bit = 1,3263 .clkr = {3264 .enable_reg = 0x77068,3265 .enable_mask = BIT(0),3266 .hw.init = &(const struct clk_init_data) {3267 .name = "gcc_ufs_phy_unipro_core_clk",3268 .parent_hws = (const struct clk_hw*[]) {3269 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,3270 },3271 .num_parents = 1,3272 .flags = CLK_SET_RATE_PARENT,3273 .ops = &clk_branch2_ops,3274 },3275 },3276};3277 3278static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = {3279 .halt_reg = 0x77068,3280 .halt_check = BRANCH_HALT_VOTED,3281 .hwcg_reg = 0x77068,3282 .hwcg_bit = 1,3283 .clkr = {3284 .enable_reg = 0x77068,3285 .enable_mask = BIT(1),3286 .hw.init = &(const struct clk_init_data) {3287 .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk",3288 .parent_hws = (const struct clk_hw*[]) {3289 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,3290 },3291 .num_parents = 1,3292 .flags = CLK_SET_RATE_PARENT,3293 .ops = &clk_branch2_ops,3294 },3295 },3296};3297 3298static struct clk_branch gcc_usb30_prim_master_clk = {3299 .halt_reg = 0x39018,3300 .halt_check = BRANCH_HALT,3301 .clkr = {3302 .enable_reg = 0x39018,3303 .enable_mask = BIT(0),3304 .hw.init = &(const struct clk_init_data) {3305 .name = "gcc_usb30_prim_master_clk",3306 .parent_hws = (const struct clk_hw*[]) {3307 &gcc_usb30_prim_master_clk_src.clkr.hw,3308 },3309 .num_parents = 1,3310 .flags = CLK_SET_RATE_PARENT,3311 .ops = &clk_branch2_ops,3312 },3313 },3314};3315 3316static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {3317 .halt_reg = 0x39028,3318 .halt_check = BRANCH_HALT,3319 .clkr = {3320 .enable_reg = 0x39028,3321 .enable_mask = BIT(0),3322 .hw.init = &(const struct clk_init_data) {3323 .name = "gcc_usb30_prim_mock_utmi_clk",3324 .parent_hws = (const struct clk_hw*[]) {3325 &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,3326 },3327 .num_parents = 1,3328 .flags = CLK_SET_RATE_PARENT,3329 .ops = &clk_branch2_ops,3330 },3331 },3332};3333 3334static struct clk_branch gcc_usb30_prim_sleep_clk = {3335 .halt_reg = 0x39024,3336 .halt_check = BRANCH_HALT,3337 .clkr = {3338 .enable_reg = 0x39024,3339 .enable_mask = BIT(0),3340 .hw.init = &(const struct clk_init_data) {3341 .name = "gcc_usb30_prim_sleep_clk",3342 .ops = &clk_branch2_ops,3343 },3344 },3345};3346 3347static struct clk_branch gcc_usb3_prim_phy_aux_clk = {3348 .halt_reg = 0x39060,3349 .halt_check = BRANCH_HALT,3350 .clkr = {3351 .enable_reg = 0x39060,3352 .enable_mask = BIT(0),3353 .hw.init = &(const struct clk_init_data) {3354 .name = "gcc_usb3_prim_phy_aux_clk",3355 .parent_hws = (const struct clk_hw*[]) {3356 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,3357 },3358 .num_parents = 1,3359 .flags = CLK_SET_RATE_PARENT,3360 .ops = &clk_branch2_ops,3361 },3362 },3363};3364 3365static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {3366 .halt_reg = 0x39064,3367 .halt_check = BRANCH_HALT,3368 .clkr = {3369 .enable_reg = 0x39064,3370 .enable_mask = BIT(0),3371 .hw.init = &(const struct clk_init_data) {3372 .name = "gcc_usb3_prim_phy_com_aux_clk",3373 .parent_hws = (const struct clk_hw*[]) {3374 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,3375 },3376 .num_parents = 1,3377 .flags = CLK_SET_RATE_PARENT,3378 .ops = &clk_branch2_ops,3379 },3380 },3381};3382 3383static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {3384 .halt_reg = 0x39068,3385 .halt_check = BRANCH_HALT_DELAY,3386 .hwcg_reg = 0x39068,3387 .hwcg_bit = 1,3388 .clkr = {3389 .enable_reg = 0x39068,3390 .enable_mask = BIT(0),3391 .hw.init = &(const struct clk_init_data) {3392 .name = "gcc_usb3_prim_phy_pipe_clk",3393 .parent_hws = (const struct clk_hw*[]) {3394 &gcc_usb3_prim_phy_pipe_clk_src.clkr.hw,3395 },3396 .num_parents = 1,3397 .flags = CLK_SET_RATE_PARENT,3398 .ops = &clk_branch2_ops,3399 },3400 },3401};3402 3403static struct clk_branch gcc_video_axi0_clk = {3404 .halt_reg = 0x32018,3405 .halt_check = BRANCH_HALT_SKIP,3406 .hwcg_reg = 0x32018,3407 .hwcg_bit = 1,3408 .clkr = {3409 .enable_reg = 0x32018,3410 .enable_mask = BIT(0),3411 .hw.init = &(const struct clk_init_data) {3412 .name = "gcc_video_axi0_clk",3413 .ops = &clk_branch2_ops,3414 },3415 },3416};3417 3418static struct clk_branch gcc_video_axi1_clk = {3419 .halt_reg = 0x32024,3420 .halt_check = BRANCH_HALT_SKIP,3421 .hwcg_reg = 0x32024,3422 .hwcg_bit = 1,3423 .clkr = {3424 .enable_reg = 0x32024,3425 .enable_mask = BIT(0),3426 .hw.init = &(const struct clk_init_data) {3427 .name = "gcc_video_axi1_clk",3428 .ops = &clk_branch2_ops,3429 },3430 },3431};3432 3433static struct gdsc pcie_0_gdsc = {3434 .gdscr = 0x6b004,3435 .collapse_ctrl = 0x5214c,3436 .collapse_mask = BIT(0),3437 .pd = {3438 .name = "pcie_0_gdsc",3439 },3440 .pwrsts = PWRSTS_OFF_ON,3441 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | VOTABLE,3442};3443 3444static struct gdsc pcie_0_phy_gdsc = {3445 .gdscr = 0x6c000,3446 .collapse_ctrl = 0x5214c,3447 .collapse_mask = BIT(3),3448 .pd = {3449 .name = "pcie_0_phy_gdsc",3450 },3451 .pwrsts = PWRSTS_OFF_ON,3452 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | VOTABLE,3453};3454 3455static struct gdsc pcie_1_gdsc = {3456 .gdscr = 0x8d004,3457 .collapse_ctrl = 0x5214c,3458 .collapse_mask = BIT(1),3459 .pd = {3460 .name = "pcie_1_gdsc",3461 },3462 .pwrsts = PWRSTS_OFF_ON,3463 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | VOTABLE,3464};3465 3466static struct gdsc pcie_1_phy_gdsc = {3467 .gdscr = 0x8e000,3468 .collapse_ctrl = 0x5214c,3469 .collapse_mask = BIT(4),3470 .pd = {3471 .name = "pcie_1_phy_gdsc",3472 },3473 .pwrsts = PWRSTS_OFF_ON,3474 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | VOTABLE,3475};3476 3477static struct gdsc ufs_phy_gdsc = {3478 .gdscr = 0x77004,3479 .pd = {3480 .name = "ufs_phy_gdsc",3481 },3482 .pwrsts = PWRSTS_OFF_ON,3483 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,3484};3485 3486static struct gdsc ufs_mem_phy_gdsc = {3487 .gdscr = 0x9e000,3488 .pd = {3489 .name = "ufs_mem_phy_gdsc",3490 },3491 .pwrsts = PWRSTS_OFF_ON,3492 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,3493};3494 3495static struct gdsc usb30_prim_gdsc = {3496 .gdscr = 0x39004,3497 .pd = {3498 .name = "usb30_prim_gdsc",3499 },3500 .pwrsts = PWRSTS_OFF_ON,3501 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,3502};3503 3504static struct gdsc usb3_phy_gdsc = {3505 .gdscr = 0x50018,3506 .pd = {3507 .name = "usb3_phy_gdsc",3508 },3509 .pwrsts = PWRSTS_OFF_ON,3510 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,3511};3512 3513static struct clk_regmap *gcc_sm8650_clocks[] = {3514 [GCC_AGGRE_NOC_PCIE_AXI_CLK] = &gcc_aggre_noc_pcie_axi_clk.clkr,3515 [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,3516 [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr,3517 [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,3518 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,3519 [GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,3520 [GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr,3521 [GCC_CFG_NOC_PCIE_ANOC_AHB_CLK] = &gcc_cfg_noc_pcie_anoc_ahb_clk.clkr,3522 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,3523 [GCC_CNOC_PCIE_SF_AXI_CLK] = &gcc_cnoc_pcie_sf_axi_clk.clkr,3524 [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,3525 [GCC_DDRSS_PCIE_SF_QTB_CLK] = &gcc_ddrss_pcie_sf_qtb_clk.clkr,3526 [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,3527 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,3528 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,3529 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,3530 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,3531 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,3532 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,3533 [GCC_GPLL0] = &gcc_gpll0.clkr,3534 [GCC_GPLL0_OUT_EVEN] = &gcc_gpll0_out_even.clkr,3535 [GCC_GPLL1] = &gcc_gpll1.clkr,3536 [GCC_GPLL3] = &gcc_gpll3.clkr,3537 [GCC_GPLL4] = &gcc_gpll4.clkr,3538 [GCC_GPLL6] = &gcc_gpll6.clkr,3539 [GCC_GPLL7] = &gcc_gpll7.clkr,3540 [GCC_GPLL9] = &gcc_gpll9.clkr,3541 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,3542 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,3543 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,3544 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,3545 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,3546 [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,3547 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,3548 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,3549 [GCC_PCIE_0_PHY_RCHNG_CLK] = &gcc_pcie_0_phy_rchng_clk.clkr,3550 [GCC_PCIE_0_PHY_RCHNG_CLK_SRC] = &gcc_pcie_0_phy_rchng_clk_src.clkr,3551 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,3552 [GCC_PCIE_0_PIPE_CLK_SRC] = &gcc_pcie_0_pipe_clk_src.clkr,3553 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,3554 [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,3555 [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,3556 [GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr,3557 [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,3558 [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,3559 [GCC_PCIE_1_PHY_AUX_CLK] = &gcc_pcie_1_phy_aux_clk.clkr,3560 [GCC_PCIE_1_PHY_AUX_CLK_SRC] = &gcc_pcie_1_phy_aux_clk_src.clkr,3561 [GCC_PCIE_1_PHY_RCHNG_CLK] = &gcc_pcie_1_phy_rchng_clk.clkr,3562 [GCC_PCIE_1_PHY_RCHNG_CLK_SRC] = &gcc_pcie_1_phy_rchng_clk_src.clkr,3563 [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,3564 [GCC_PCIE_1_PIPE_CLK_SRC] = &gcc_pcie_1_pipe_clk_src.clkr,3565 [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,3566 [GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr,3567 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,3568 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,3569 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,3570 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,3571 [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,3572 [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,3573 [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,3574 [GCC_QMIP_GPU_AHB_CLK] = &gcc_qmip_gpu_ahb_clk.clkr,3575 [GCC_QMIP_PCIE_AHB_CLK] = &gcc_qmip_pcie_ahb_clk.clkr,3576 [GCC_QMIP_VIDEO_CV_CPU_AHB_CLK] = &gcc_qmip_video_cv_cpu_ahb_clk.clkr,3577 [GCC_QMIP_VIDEO_CVP_AHB_CLK] = &gcc_qmip_video_cvp_ahb_clk.clkr,3578 [GCC_QMIP_VIDEO_V_CPU_AHB_CLK] = &gcc_qmip_video_v_cpu_ahb_clk.clkr,3579 [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,3580 [GCC_QUPV3_I2C_CORE_CLK] = &gcc_qupv3_i2c_core_clk.clkr,3581 [GCC_QUPV3_I2C_S0_CLK] = &gcc_qupv3_i2c_s0_clk.clkr,3582 [GCC_QUPV3_I2C_S0_CLK_SRC] = &gcc_qupv3_i2c_s0_clk_src.clkr,3583 [GCC_QUPV3_I2C_S1_CLK] = &gcc_qupv3_i2c_s1_clk.clkr,3584 [GCC_QUPV3_I2C_S1_CLK_SRC] = &gcc_qupv3_i2c_s1_clk_src.clkr,3585 [GCC_QUPV3_I2C_S2_CLK] = &gcc_qupv3_i2c_s2_clk.clkr,3586 [GCC_QUPV3_I2C_S2_CLK_SRC] = &gcc_qupv3_i2c_s2_clk_src.clkr,3587 [GCC_QUPV3_I2C_S3_CLK] = &gcc_qupv3_i2c_s3_clk.clkr,3588 [GCC_QUPV3_I2C_S3_CLK_SRC] = &gcc_qupv3_i2c_s3_clk_src.clkr,3589 [GCC_QUPV3_I2C_S4_CLK] = &gcc_qupv3_i2c_s4_clk.clkr,3590 [GCC_QUPV3_I2C_S4_CLK_SRC] = &gcc_qupv3_i2c_s4_clk_src.clkr,3591 [GCC_QUPV3_I2C_S5_CLK] = &gcc_qupv3_i2c_s5_clk.clkr,3592 [GCC_QUPV3_I2C_S5_CLK_SRC] = &gcc_qupv3_i2c_s5_clk_src.clkr,3593 [GCC_QUPV3_I2C_S6_CLK] = &gcc_qupv3_i2c_s6_clk.clkr,3594 [GCC_QUPV3_I2C_S6_CLK_SRC] = &gcc_qupv3_i2c_s6_clk_src.clkr,3595 [GCC_QUPV3_I2C_S7_CLK] = &gcc_qupv3_i2c_s7_clk.clkr,3596 [GCC_QUPV3_I2C_S7_CLK_SRC] = &gcc_qupv3_i2c_s7_clk_src.clkr,3597 [GCC_QUPV3_I2C_S8_CLK] = &gcc_qupv3_i2c_s8_clk.clkr,3598 [GCC_QUPV3_I2C_S8_CLK_SRC] = &gcc_qupv3_i2c_s8_clk_src.clkr,3599 [GCC_QUPV3_I2C_S9_CLK] = &gcc_qupv3_i2c_s9_clk.clkr,3600 [GCC_QUPV3_I2C_S9_CLK_SRC] = &gcc_qupv3_i2c_s9_clk_src.clkr,3601 [GCC_QUPV3_I2C_S_AHB_CLK] = &gcc_qupv3_i2c_s_ahb_clk.clkr,3602 [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,3603 [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,3604 [GCC_QUPV3_WRAP1_QSPI_REF_CLK] = &gcc_qupv3_wrap1_qspi_ref_clk.clkr,3605 [GCC_QUPV3_WRAP1_QSPI_REF_CLK_SRC] = &gcc_qupv3_wrap1_qspi_ref_clk_src.clkr,3606 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,3607 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,3608 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,3609 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,3610 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,3611 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,3612 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,3613 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,3614 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,3615 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,3616 [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,3617 [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,3618 [GCC_QUPV3_WRAP1_S6_CLK] = &gcc_qupv3_wrap1_s6_clk.clkr,3619 [GCC_QUPV3_WRAP1_S6_CLK_SRC] = &gcc_qupv3_wrap1_s6_clk_src.clkr,3620 [GCC_QUPV3_WRAP1_S7_CLK] = &gcc_qupv3_wrap1_s7_clk.clkr,3621 [GCC_QUPV3_WRAP1_S7_CLK_SRC] = &gcc_qupv3_wrap1_s7_clk_src.clkr,3622 [GCC_QUPV3_WRAP2_CORE_2X_CLK] = &gcc_qupv3_wrap2_core_2x_clk.clkr,3623 [GCC_QUPV3_WRAP2_CORE_CLK] = &gcc_qupv3_wrap2_core_clk.clkr,3624 [GCC_QUPV3_WRAP2_IBI_CTRL_0_CLK_SRC] = &gcc_qupv3_wrap2_ibi_ctrl_0_clk_src.clkr,3625 [GCC_QUPV3_WRAP2_IBI_CTRL_2_CLK] = &gcc_qupv3_wrap2_ibi_ctrl_2_clk.clkr,3626 [GCC_QUPV3_WRAP2_IBI_CTRL_3_CLK] = &gcc_qupv3_wrap2_ibi_ctrl_3_clk.clkr,3627 [GCC_QUPV3_WRAP2_S0_CLK] = &gcc_qupv3_wrap2_s0_clk.clkr,3628 [GCC_QUPV3_WRAP2_S0_CLK_SRC] = &gcc_qupv3_wrap2_s0_clk_src.clkr,3629 [GCC_QUPV3_WRAP2_S1_CLK] = &gcc_qupv3_wrap2_s1_clk.clkr,3630 [GCC_QUPV3_WRAP2_S1_CLK_SRC] = &gcc_qupv3_wrap2_s1_clk_src.clkr,3631 [GCC_QUPV3_WRAP2_S2_CLK] = &gcc_qupv3_wrap2_s2_clk.clkr,3632 [GCC_QUPV3_WRAP2_S2_CLK_SRC] = &gcc_qupv3_wrap2_s2_clk_src.clkr,3633 [GCC_QUPV3_WRAP2_S3_CLK] = &gcc_qupv3_wrap2_s3_clk.clkr,3634 [GCC_QUPV3_WRAP2_S3_CLK_SRC] = &gcc_qupv3_wrap2_s3_clk_src.clkr,3635 [GCC_QUPV3_WRAP2_S4_CLK] = &gcc_qupv3_wrap2_s4_clk.clkr,3636 [GCC_QUPV3_WRAP2_S4_CLK_SRC] = &gcc_qupv3_wrap2_s4_clk_src.clkr,3637 [GCC_QUPV3_WRAP2_S5_CLK] = &gcc_qupv3_wrap2_s5_clk.clkr,3638 [GCC_QUPV3_WRAP2_S5_CLK_SRC] = &gcc_qupv3_wrap2_s5_clk_src.clkr,3639 [GCC_QUPV3_WRAP2_S6_CLK] = &gcc_qupv3_wrap2_s6_clk.clkr,3640 [GCC_QUPV3_WRAP2_S6_CLK_SRC] = &gcc_qupv3_wrap2_s6_clk_src.clkr,3641 [GCC_QUPV3_WRAP2_S7_CLK] = &gcc_qupv3_wrap2_s7_clk.clkr,3642 [GCC_QUPV3_WRAP2_S7_CLK_SRC] = &gcc_qupv3_wrap2_s7_clk_src.clkr,3643 [GCC_QUPV3_WRAP3_CORE_2X_CLK] = &gcc_qupv3_wrap3_core_2x_clk.clkr,3644 [GCC_QUPV3_WRAP3_CORE_CLK] = &gcc_qupv3_wrap3_core_clk.clkr,3645 [GCC_QUPV3_WRAP3_QSPI_REF_CLK] = &gcc_qupv3_wrap3_qspi_ref_clk.clkr,3646 [GCC_QUPV3_WRAP3_QSPI_REF_CLK_SRC] = &gcc_qupv3_wrap3_qspi_ref_clk_src.clkr,3647 [GCC_QUPV3_WRAP3_S0_CLK] = &gcc_qupv3_wrap3_s0_clk.clkr,3648 [GCC_QUPV3_WRAP3_S0_CLK_SRC] = &gcc_qupv3_wrap3_s0_clk_src.clkr,3649 [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,3650 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,3651 [GCC_QUPV3_WRAP_2_IBI_2_AHB_CLK] = &gcc_qupv3_wrap_2_ibi_2_ahb_clk.clkr,3652 [GCC_QUPV3_WRAP_2_IBI_3_AHB_CLK] = &gcc_qupv3_wrap_2_ibi_3_ahb_clk.clkr,3653 [GCC_QUPV3_WRAP_2_M_AHB_CLK] = &gcc_qupv3_wrap_2_m_ahb_clk.clkr,3654 [GCC_QUPV3_WRAP_2_S_AHB_CLK] = &gcc_qupv3_wrap_2_s_ahb_clk.clkr,3655 [GCC_QUPV3_WRAP_3_M_AHB_CLK] = &gcc_qupv3_wrap_3_m_ahb_clk.clkr,3656 [GCC_QUPV3_WRAP_3_S_AHB_CLK] = &gcc_qupv3_wrap_3_s_ahb_clk.clkr,3657 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,3658 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,3659 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,3660 [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,3661 [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,3662 [GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr,3663 [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,3664 [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,3665 [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,3666 [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr,3667 [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,3668 [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,3669 [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] = &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr,3670 [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,3671 [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,3672 [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr,3673 [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,3674 [GCC_UFS_PHY_RX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_rx_symbol_0_clk_src.clkr,3675 [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,3676 [GCC_UFS_PHY_RX_SYMBOL_1_CLK_SRC] = &gcc_ufs_phy_rx_symbol_1_clk_src.clkr,3677 [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,3678 [GCC_UFS_PHY_TX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_tx_symbol_0_clk_src.clkr,3679 [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,3680 [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_phy_unipro_core_clk_src.clkr,3681 [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] = &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr,3682 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,3683 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,3684 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,3685 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr,3686 [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,3687 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,3688 [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,3689 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,3690 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,3691 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,3692 [GCC_USB3_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb3_prim_phy_pipe_clk_src.clkr,3693 [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,3694 [GCC_VIDEO_AXI1_CLK] = &gcc_video_axi1_clk.clkr,3695 [GCC_GPLL0_AO] = &gcc_gpll0_ao.clkr,3696 [GCC_GPLL0_OUT_EVEN_AO] = &gcc_gpll0_out_even_ao.clkr,3697 [GCC_GPLL1_AO] = &gcc_gpll1_ao.clkr,3698 [GCC_GPLL3_AO] = &gcc_gpll3_ao.clkr,3699 [GCC_GPLL4_AO] = &gcc_gpll4_ao.clkr,3700 [GCC_GPLL6_AO] = &gcc_gpll6_ao.clkr,3701};3702 3703static const struct qcom_reset_map gcc_sm8650_resets[] = {3704 [GCC_CAMERA_BCR] = { 0x26000 },3705 [GCC_DISPLAY_BCR] = { 0x27000 },3706 [GCC_GPU_BCR] = { 0x71000 },3707 [GCC_PCIE_0_BCR] = { 0x6b000 },3708 [GCC_PCIE_0_LINK_DOWN_BCR] = { 0x6c014 },3709 [GCC_PCIE_0_NOCSR_COM_PHY_BCR] = { 0x6c020 },3710 [GCC_PCIE_0_PHY_BCR] = { 0x6c01c },3711 [GCC_PCIE_0_PHY_NOCSR_COM_PHY_BCR] = { 0x6c028 },3712 [GCC_PCIE_1_BCR] = { 0x8d000 },3713 [GCC_PCIE_1_LINK_DOWN_BCR] = { 0x8e014 },3714 [GCC_PCIE_1_NOCSR_COM_PHY_BCR] = { 0x8e020 },3715 [GCC_PCIE_1_PHY_BCR] = { 0x8e01c },3716 [GCC_PCIE_1_PHY_NOCSR_COM_PHY_BCR] = { 0x8e024 },3717 [GCC_PCIE_PHY_BCR] = { 0x6f000 },3718 [GCC_PCIE_PHY_CFG_AHB_BCR] = { 0x6f00c },3719 [GCC_PCIE_PHY_COM_BCR] = { 0x6f010 },3720 [GCC_PDM_BCR] = { 0x33000 },3721 [GCC_QUPV3_WRAPPER_1_BCR] = { 0x18000 },3722 [GCC_QUPV3_WRAPPER_2_BCR] = { 0x1e000 },3723 [GCC_QUPV3_WRAPPER_3_BCR] = { 0x19000 },3724 [GCC_QUPV3_WRAPPER_I2C_BCR] = { 0x17000 },3725 [GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 },3726 [GCC_QUSB2PHY_SEC_BCR] = { 0x12004 },3727 [GCC_SDCC2_BCR] = { 0x14000 },3728 [GCC_SDCC4_BCR] = { 0x16000 },3729 [GCC_UFS_PHY_BCR] = { 0x77000 },3730 [GCC_USB30_PRIM_BCR] = { 0x39000 },3731 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x50008 },3732 [GCC_USB3_DP_PHY_SEC_BCR] = { 0x50014 },3733 [GCC_USB3_PHY_PRIM_BCR] = { 0x50000 },3734 [GCC_USB3_PHY_SEC_BCR] = { 0x5000c },3735 [GCC_USB3PHY_PHY_PRIM_BCR] = { 0x50004 },3736 [GCC_USB3PHY_PHY_SEC_BCR] = { 0x50010 },3737 [GCC_VIDEO_AXI0_CLK_ARES] = { .reg = 0x32018, .bit = 2, .udelay = 1000 },3738 [GCC_VIDEO_AXI1_CLK_ARES] = { .reg = 0x32024, .bit = 2, .udelay = 1000 },3739 [GCC_VIDEO_BCR] = { 0x32000 },3740};3741 3742static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {3743 DEFINE_RCG_DFS(gcc_qupv3_wrap1_qspi_ref_clk_src),3744 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),3745 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),3746 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),3747 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),3748 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),3749 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src),3750 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s7_clk_src),3751 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s0_clk_src),3752 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s1_clk_src),3753 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s2_clk_src),3754 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s3_clk_src),3755 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s4_clk_src),3756 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s5_clk_src),3757 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s6_clk_src),3758 DEFINE_RCG_DFS(gcc_qupv3_wrap2_s7_clk_src),3759 DEFINE_RCG_DFS(gcc_qupv3_wrap3_qspi_ref_clk_src),3760};3761 3762static struct gdsc *gcc_sm8650_gdscs[] = {3763 [PCIE_0_GDSC] = &pcie_0_gdsc,3764 [PCIE_0_PHY_GDSC] = &pcie_0_phy_gdsc,3765 [PCIE_1_GDSC] = &pcie_1_gdsc,3766 [PCIE_1_PHY_GDSC] = &pcie_1_phy_gdsc,3767 [UFS_PHY_GDSC] = &ufs_phy_gdsc,3768 [UFS_MEM_PHY_GDSC] = &ufs_mem_phy_gdsc,3769 [USB30_PRIM_GDSC] = &usb30_prim_gdsc,3770 [USB3_PHY_GDSC] = &usb3_phy_gdsc,3771};3772 3773static const struct regmap_config gcc_sm8650_regmap_config = {3774 .reg_bits = 32,3775 .reg_stride = 4,3776 .val_bits = 32,3777 .max_register = 0x1f41f0,3778 .fast_io = true,3779};3780 3781static const struct qcom_cc_desc gcc_sm8650_desc = {3782 .config = &gcc_sm8650_regmap_config,3783 .clks = gcc_sm8650_clocks,3784 .num_clks = ARRAY_SIZE(gcc_sm8650_clocks),3785 .resets = gcc_sm8650_resets,3786 .num_resets = ARRAY_SIZE(gcc_sm8650_resets),3787 .gdscs = gcc_sm8650_gdscs,3788 .num_gdscs = ARRAY_SIZE(gcc_sm8650_gdscs),3789};3790 3791static const struct of_device_id gcc_sm8650_match_table[] = {3792 { .compatible = "qcom,sm8650-gcc" },3793 { }3794};3795MODULE_DEVICE_TABLE(of, gcc_sm8650_match_table);3796 3797static int gcc_sm8650_probe(struct platform_device *pdev)3798{3799 struct regmap *regmap;3800 int ret;3801 3802 regmap = qcom_cc_map(pdev, &gcc_sm8650_desc);3803 if (IS_ERR(regmap))3804 return PTR_ERR(regmap);3805 3806 ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,3807 ARRAY_SIZE(gcc_dfs_clocks));3808 if (ret)3809 return ret;3810 3811 /* Keep some clocks always-on */3812 qcom_branch_set_clk_en(regmap, 0x26004); /* GCC_CAMERA_AHB_CLK */3813 qcom_branch_set_clk_en(regmap, 0x26028); /* GCC_CAMERA_XO_CLK */3814 qcom_branch_set_clk_en(regmap, 0x27004); /* GCC_DISP_AHB_CLK */3815 qcom_branch_set_clk_en(regmap, 0x27018); /* GCC_DISP_XO_CLK */3816 qcom_branch_set_clk_en(regmap, 0x71004); /* GCC_GPU_CFG_AHB_CLK */3817 qcom_branch_set_clk_en(regmap, 0x32004); /* GCC_VIDEO_AHB_CLK */3818 qcom_branch_set_clk_en(regmap, 0x32030); /* GCC_VIDEO_XO_CLK */3819 3820 qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_ice_core_clk, true);3821 3822 /* Clear GDSC_SLEEP_ENA_VOTE to stop votes being auto-removed in sleep. */3823 regmap_write(regmap, 0x52150, 0x0);3824 3825 return qcom_cc_really_probe(&pdev->dev, &gcc_sm8650_desc, regmap);3826}3827 3828static struct platform_driver gcc_sm8650_driver = {3829 .probe = gcc_sm8650_probe,3830 .driver = {3831 .name = "gcc-sm8650",3832 .of_match_table = gcc_sm8650_match_table,3833 },3834};3835 3836static int __init gcc_sm8650_init(void)3837{3838 return platform_driver_register(&gcc_sm8650_driver);3839}3840subsys_initcall(gcc_sm8650_init);3841 3842static void __exit gcc_sm8650_exit(void)3843{3844 platform_driver_unregister(&gcc_sm8650_driver);3845}3846module_exit(gcc_sm8650_exit);3847 3848MODULE_DESCRIPTION("QTI GCC SM8650 Driver");3849MODULE_LICENSE("GPL");3850