3509 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.4 * Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved.5 */6 7#include <linux/clk-provider.h>8#include <linux/kernel.h>9#include <linux/module.h>10#include <linux/of.h>11#include <linux/platform_device.h>12#include <linux/regmap.h>13 14#include <dt-bindings/clock/qcom,gcc-sc7280.h>15 16#include "clk-alpha-pll.h"17#include "clk-branch.h"18#include "clk-rcg.h"19#include "clk-regmap-divider.h"20#include "clk-regmap-mux.h"21#include "clk-regmap-phy-mux.h"22#include "common.h"23#include "gdsc.h"24#include "reset.h"25 26enum {27 P_BI_TCXO,28 P_GCC_GPLL0_OUT_EVEN,29 P_GCC_GPLL0_OUT_MAIN,30 P_GCC_GPLL0_OUT_ODD,31 P_GCC_GPLL10_OUT_MAIN,32 P_GCC_GPLL4_OUT_MAIN,33 P_GCC_GPLL9_OUT_MAIN,34 P_PCIE_0_PIPE_CLK,35 P_PCIE_1_PIPE_CLK,36 P_SLEEP_CLK,37 P_UFS_PHY_RX_SYMBOL_0_CLK,38 P_UFS_PHY_RX_SYMBOL_1_CLK,39 P_UFS_PHY_TX_SYMBOL_0_CLK,40 P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,41 P_GCC_MSS_GPLL0_MAIN_DIV_CLK,42};43 44static struct clk_alpha_pll gcc_gpll0 = {45 .offset = 0x0,46 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],47 .clkr = {48 .enable_reg = 0x52010,49 .enable_mask = BIT(0),50 .hw.init = &(struct clk_init_data){51 .name = "gcc_gpll0",52 .parent_data = &(const struct clk_parent_data){53 .fw_name = "bi_tcxo",54 },55 .num_parents = 1,56 .ops = &clk_alpha_pll_fixed_lucid_ops,57 },58 },59};60 61static const struct clk_div_table post_div_table_gcc_gpll0_out_even[] = {62 { 0x1, 2 },63 { }64};65 66static struct clk_alpha_pll_postdiv gcc_gpll0_out_even = {67 .offset = 0x0,68 .post_div_shift = 8,69 .post_div_table = post_div_table_gcc_gpll0_out_even,70 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),71 .width = 4,72 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],73 .clkr.hw.init = &(struct clk_init_data){74 .name = "gcc_gpll0_out_even",75 .parent_hws = (const struct clk_hw*[]){76 &gcc_gpll0.clkr.hw,77 },78 .num_parents = 1,79 .ops = &clk_alpha_pll_postdiv_lucid_ops,80 },81};82 83static const struct clk_div_table post_div_table_gcc_gpll0_out_odd[] = {84 { 0x3, 3 },85 { }86};87 88static struct clk_alpha_pll_postdiv gcc_gpll0_out_odd = {89 .offset = 0x0,90 .post_div_shift = 12,91 .post_div_table = post_div_table_gcc_gpll0_out_odd,92 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_odd),93 .width = 4,94 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],95 .clkr.hw.init = &(struct clk_init_data){96 .name = "gcc_gpll0_out_odd",97 .parent_hws = (const struct clk_hw*[]){98 &gcc_gpll0.clkr.hw,99 },100 .num_parents = 1,101 .ops = &clk_alpha_pll_postdiv_lucid_ops,102 },103};104 105static struct clk_alpha_pll gcc_gpll1 = {106 .offset = 0x1000,107 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],108 .clkr = {109 .enable_reg = 0x52010,110 .enable_mask = BIT(1),111 .hw.init = &(struct clk_init_data){112 .name = "gcc_gpll1",113 .parent_data = &(const struct clk_parent_data){114 .fw_name = "bi_tcxo",115 },116 .num_parents = 1,117 .ops = &clk_alpha_pll_fixed_lucid_ops,118 },119 },120};121 122static struct clk_alpha_pll gcc_gpll10 = {123 .offset = 0x1e000,124 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],125 .clkr = {126 .enable_reg = 0x52010,127 .enable_mask = BIT(9),128 .hw.init = &(struct clk_init_data){129 .name = "gcc_gpll10",130 .parent_data = &(const struct clk_parent_data){131 .fw_name = "bi_tcxo",132 },133 .num_parents = 1,134 .ops = &clk_alpha_pll_fixed_lucid_ops,135 },136 },137};138 139static struct clk_alpha_pll gcc_gpll4 = {140 .offset = 0x76000,141 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],142 .clkr = {143 .enable_reg = 0x52010,144 .enable_mask = BIT(4),145 .hw.init = &(struct clk_init_data){146 .name = "gcc_gpll4",147 .parent_data = &(const struct clk_parent_data){148 .fw_name = "bi_tcxo",149 },150 .num_parents = 1,151 .ops = &clk_alpha_pll_fixed_lucid_ops,152 },153 },154};155 156static struct clk_alpha_pll gcc_gpll9 = {157 .offset = 0x1c000,158 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],159 .clkr = {160 .enable_reg = 0x52010,161 .enable_mask = BIT(8),162 .hw.init = &(struct clk_init_data){163 .name = "gcc_gpll9",164 .parent_data = &(const struct clk_parent_data){165 .fw_name = "bi_tcxo",166 },167 .num_parents = 1,168 .ops = &clk_alpha_pll_fixed_lucid_ops,169 },170 },171};172 173static struct clk_branch gcc_mss_gpll0_main_div_clk_src = {174 .halt_check = BRANCH_HALT_DELAY,175 .clkr = {176 .enable_reg = 0x52000,177 .enable_mask = BIT(17),178 .hw.init = &(struct clk_init_data){179 .name = "gcc_mss_gpll0_main_div_clk_src",180 .parent_hws = (const struct clk_hw*[]){181 &gcc_gpll0_out_even.clkr.hw,182 },183 .num_parents = 1,184 .flags = CLK_SET_RATE_PARENT,185 .ops = &clk_branch2_ops,186 },187 },188};189 190static const struct parent_map gcc_parent_map_0[] = {191 { P_BI_TCXO, 0 },192 { P_GCC_GPLL0_OUT_MAIN, 1 },193 { P_GCC_GPLL0_OUT_EVEN, 6 },194};195 196static const struct clk_parent_data gcc_parent_data_0[] = {197 { .fw_name = "bi_tcxo" },198 { .hw = &gcc_gpll0.clkr.hw },199 { .hw = &gcc_gpll0_out_even.clkr.hw },200};201 202static const struct parent_map gcc_parent_map_1[] = {203 { P_BI_TCXO, 0 },204 { P_GCC_GPLL0_OUT_MAIN, 1 },205 { P_GCC_GPLL0_OUT_ODD, 3 },206 { P_GCC_GPLL0_OUT_EVEN, 6 },207};208 209static const struct clk_parent_data gcc_parent_data_1[] = {210 { .fw_name = "bi_tcxo" },211 { .hw = &gcc_gpll0.clkr.hw },212 { .hw = &gcc_gpll0_out_odd.clkr.hw },213 { .hw = &gcc_gpll0_out_even.clkr.hw },214};215 216static const struct parent_map gcc_parent_map_2[] = {217 { P_BI_TCXO, 0 },218 { P_SLEEP_CLK, 5 },219};220 221static const struct clk_parent_data gcc_parent_data_2[] = {222 { .fw_name = "bi_tcxo" },223 { .fw_name = "sleep_clk" },224};225 226static const struct parent_map gcc_parent_map_3[] = {227 { P_BI_TCXO, 0 },228};229 230static const struct clk_parent_data gcc_parent_data_3[] = {231 { .fw_name = "bi_tcxo" },232};233 234static const struct parent_map gcc_parent_map_4[] = {235 { P_BI_TCXO, 0 },236 { P_GCC_GPLL0_OUT_MAIN, 1 },237 { P_GCC_GPLL0_OUT_ODD, 3 },238 { P_SLEEP_CLK, 5 },239 { P_GCC_GPLL0_OUT_EVEN, 6 },240};241 242static const struct clk_parent_data gcc_parent_data_4[] = {243 { .fw_name = "bi_tcxo" },244 { .hw = &gcc_gpll0.clkr.hw },245 { .hw = &gcc_gpll0_out_odd.clkr.hw },246 { .fw_name = "sleep_clk" },247 { .hw = &gcc_gpll0_out_even.clkr.hw },248};249 250static const struct parent_map gcc_parent_map_5[] = {251 { P_BI_TCXO, 0 },252 { P_GCC_GPLL0_OUT_EVEN, 6 },253};254 255static const struct clk_parent_data gcc_parent_data_5[] = {256 { .fw_name = "bi_tcxo" },257 { .hw = &gcc_gpll0_out_even.clkr.hw },258};259 260static const struct parent_map gcc_parent_map_8[] = {261 { P_BI_TCXO, 0 },262 { P_GCC_GPLL0_OUT_MAIN, 1 },263 { P_GCC_GPLL0_OUT_ODD, 3 },264 { P_GCC_GPLL10_OUT_MAIN, 5 },265 { P_GCC_GPLL0_OUT_EVEN, 6 },266};267 268static const struct clk_parent_data gcc_parent_data_8[] = {269 { .fw_name = "bi_tcxo" },270 { .hw = &gcc_gpll0.clkr.hw },271 { .hw = &gcc_gpll0_out_odd.clkr.hw },272 { .hw = &gcc_gpll10.clkr.hw },273 { .hw = &gcc_gpll0_out_even.clkr.hw },274};275 276static const struct parent_map gcc_parent_map_9[] = {277 { P_BI_TCXO, 0 },278 { P_GCC_GPLL0_OUT_MAIN, 1 },279 { P_GCC_GPLL9_OUT_MAIN, 2 },280 { P_GCC_GPLL0_OUT_ODD, 3 },281 { P_GCC_GPLL4_OUT_MAIN, 5 },282 { P_GCC_GPLL0_OUT_EVEN, 6 },283};284 285static const struct clk_parent_data gcc_parent_data_9[] = {286 { .fw_name = "bi_tcxo" },287 { .hw = &gcc_gpll0.clkr.hw },288 { .hw = &gcc_gpll9.clkr.hw },289 { .hw = &gcc_gpll0_out_odd.clkr.hw },290 { .hw = &gcc_gpll4.clkr.hw },291 { .hw = &gcc_gpll0_out_even.clkr.hw },292};293 294static const struct parent_map gcc_parent_map_10[] = {295 { P_UFS_PHY_RX_SYMBOL_0_CLK, 0 },296 { P_BI_TCXO, 2 },297};298 299static const struct clk_parent_data gcc_parent_data_10[] = {300 { .fw_name = "ufs_phy_rx_symbol_0_clk" },301 { .fw_name = "bi_tcxo" },302};303 304static const struct parent_map gcc_parent_map_11[] = {305 { P_UFS_PHY_RX_SYMBOL_1_CLK, 0 },306 { P_BI_TCXO, 2 },307};308 309static const struct clk_parent_data gcc_parent_data_11[] = {310 { .fw_name = "ufs_phy_rx_symbol_1_clk" },311 { .fw_name = "bi_tcxo" },312};313 314static const struct parent_map gcc_parent_map_12[] = {315 { P_UFS_PHY_TX_SYMBOL_0_CLK, 0 },316 { P_BI_TCXO, 2 },317};318 319static const struct clk_parent_data gcc_parent_data_12[] = {320 { .fw_name = "ufs_phy_tx_symbol_0_clk" },321 { .fw_name = "bi_tcxo" },322};323 324static const struct parent_map gcc_parent_map_13[] = {325 { P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 0 },326 { P_BI_TCXO, 2 },327};328 329static const struct clk_parent_data gcc_parent_data_13[] = {330 { .fw_name = "usb3_phy_wrapper_gcc_usb30_pipe_clk" },331 { .fw_name = "bi_tcxo" },332};333 334static const struct parent_map gcc_parent_map_14[] = {335 { P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 0 },336 { P_BI_TCXO, 2 },337};338 339static const struct clk_parent_data gcc_parent_data_14[] = {340 { .fw_name = "usb3_phy_wrapper_gcc_usb30_pipe_clk" },341 { .fw_name = "bi_tcxo" },342};343 344static const struct parent_map gcc_parent_map_15[] = {345 { P_BI_TCXO, 0 },346 { P_GCC_MSS_GPLL0_MAIN_DIV_CLK, 1 },347};348 349static const struct clk_parent_data gcc_parent_data_15[] = {350 { .fw_name = "bi_tcxo" },351 { .hw = &gcc_mss_gpll0_main_div_clk_src.clkr.hw },352};353 354static struct clk_regmap_phy_mux gcc_pcie_0_pipe_clk_src = {355 .reg = 0x6b054,356 .clkr = {357 .hw.init = &(struct clk_init_data){358 .name = "gcc_pcie_0_pipe_clk_src",359 .parent_data = &(const struct clk_parent_data){360 .fw_name = "pcie_0_pipe_clk",361 .name = "pcie_0_pipe_clk",362 },363 .num_parents = 1,364 .ops = &clk_regmap_phy_mux_ops,365 },366 },367};368 369static struct clk_regmap_phy_mux gcc_pcie_1_pipe_clk_src = {370 .reg = 0x8d054,371 .clkr = {372 .hw.init = &(struct clk_init_data){373 .name = "gcc_pcie_1_pipe_clk_src",374 .parent_data = &(const struct clk_parent_data){375 .fw_name = "pcie_1_pipe_clk",376 .name = "pcie_1_pipe_clk",377 },378 .num_parents = 1,379 .ops = &clk_regmap_phy_mux_ops,380 },381 },382};383 384static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_0_clk_src = {385 .reg = 0x77058,386 .shift = 0,387 .width = 2,388 .parent_map = gcc_parent_map_10,389 .clkr = {390 .hw.init = &(struct clk_init_data){391 .name = "gcc_ufs_phy_rx_symbol_0_clk_src",392 .parent_data = gcc_parent_data_10,393 .num_parents = ARRAY_SIZE(gcc_parent_data_10),394 .ops = &clk_regmap_mux_closest_ops,395 },396 },397};398 399static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_1_clk_src = {400 .reg = 0x770c8,401 .shift = 0,402 .width = 2,403 .parent_map = gcc_parent_map_11,404 .clkr = {405 .hw.init = &(struct clk_init_data){406 .name = "gcc_ufs_phy_rx_symbol_1_clk_src",407 .parent_data = gcc_parent_data_11,408 .num_parents = ARRAY_SIZE(gcc_parent_data_11),409 .ops = &clk_regmap_mux_closest_ops,410 },411 },412};413 414static struct clk_regmap_mux gcc_ufs_phy_tx_symbol_0_clk_src = {415 .reg = 0x77048,416 .shift = 0,417 .width = 2,418 .parent_map = gcc_parent_map_12,419 .clkr = {420 .hw.init = &(struct clk_init_data){421 .name = "gcc_ufs_phy_tx_symbol_0_clk_src",422 .parent_data = gcc_parent_data_12,423 .num_parents = ARRAY_SIZE(gcc_parent_data_12),424 .ops = &clk_regmap_mux_closest_ops,425 },426 },427};428 429static struct clk_regmap_mux gcc_usb3_prim_phy_pipe_clk_src = {430 .reg = 0xf060,431 .shift = 0,432 .width = 2,433 .parent_map = gcc_parent_map_13,434 .clkr = {435 .hw.init = &(struct clk_init_data){436 .name = "gcc_usb3_prim_phy_pipe_clk_src",437 .parent_data = gcc_parent_data_13,438 .num_parents = ARRAY_SIZE(gcc_parent_data_13),439 .ops = &clk_regmap_mux_closest_ops,440 },441 },442};443 444static struct clk_regmap_mux gcc_usb3_sec_phy_pipe_clk_src = {445 .reg = 0x9e060,446 .shift = 0,447 .width = 2,448 .parent_map = gcc_parent_map_14,449 .clkr = {450 .hw.init = &(struct clk_init_data){451 .name = "gcc_usb3_sec_phy_pipe_clk_src",452 .parent_data = gcc_parent_data_14,453 .num_parents = ARRAY_SIZE(gcc_parent_data_14),454 .ops = &clk_regmap_mux_closest_ops,455 },456 },457};458 459static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {460 F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),461 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),462 F(200000000, P_GCC_GPLL0_OUT_ODD, 1, 0, 0),463 { }464};465 466static struct clk_rcg2 gcc_gp1_clk_src = {467 .cmd_rcgr = 0x64004,468 .mnd_width = 16,469 .hid_width = 5,470 .parent_map = gcc_parent_map_4,471 .freq_tbl = ftbl_gcc_gp1_clk_src,472 .clkr.hw.init = &(struct clk_init_data){473 .name = "gcc_gp1_clk_src",474 .parent_data = gcc_parent_data_4,475 .num_parents = ARRAY_SIZE(gcc_parent_data_4),476 .ops = &clk_rcg2_ops,477 },478};479 480static struct clk_rcg2 gcc_gp2_clk_src = {481 .cmd_rcgr = 0x65004,482 .mnd_width = 16,483 .hid_width = 5,484 .parent_map = gcc_parent_map_4,485 .freq_tbl = ftbl_gcc_gp1_clk_src,486 .clkr.hw.init = &(struct clk_init_data){487 .name = "gcc_gp2_clk_src",488 .parent_data = gcc_parent_data_4,489 .num_parents = ARRAY_SIZE(gcc_parent_data_4),490 .ops = &clk_rcg2_ops,491 },492};493 494static struct clk_rcg2 gcc_gp3_clk_src = {495 .cmd_rcgr = 0x66004,496 .mnd_width = 16,497 .hid_width = 5,498 .parent_map = gcc_parent_map_4,499 .freq_tbl = ftbl_gcc_gp1_clk_src,500 .clkr.hw.init = &(struct clk_init_data){501 .name = "gcc_gp3_clk_src",502 .parent_data = gcc_parent_data_4,503 .num_parents = ARRAY_SIZE(gcc_parent_data_4),504 .ops = &clk_rcg2_ops,505 },506};507 508static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {509 F(9600000, P_BI_TCXO, 2, 0, 0),510 F(19200000, P_BI_TCXO, 1, 0, 0),511 { }512};513 514static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {515 .cmd_rcgr = 0x6b058,516 .mnd_width = 16,517 .hid_width = 5,518 .parent_map = gcc_parent_map_2,519 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,520 .clkr.hw.init = &(struct clk_init_data){521 .name = "gcc_pcie_0_aux_clk_src",522 .parent_data = gcc_parent_data_2,523 .num_parents = ARRAY_SIZE(gcc_parent_data_2),524 .ops = &clk_rcg2_ops,525 },526};527 528static const struct freq_tbl ftbl_gcc_pcie_0_phy_rchng_clk_src[] = {529 F(19200000, P_BI_TCXO, 1, 0, 0),530 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),531 { }532};533 534static struct clk_rcg2 gcc_pcie_0_phy_rchng_clk_src = {535 .cmd_rcgr = 0x6b03c,536 .mnd_width = 0,537 .hid_width = 5,538 .parent_map = gcc_parent_map_0,539 .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,540 .clkr.hw.init = &(struct clk_init_data){541 .name = "gcc_pcie_0_phy_rchng_clk_src",542 .parent_data = gcc_parent_data_0,543 .num_parents = ARRAY_SIZE(gcc_parent_data_0),544 .ops = &clk_rcg2_ops,545 },546};547 548static struct clk_rcg2 gcc_pcie_1_aux_clk_src = {549 .cmd_rcgr = 0x8d058,550 .mnd_width = 16,551 .hid_width = 5,552 .parent_map = gcc_parent_map_2,553 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,554 .clkr.hw.init = &(struct clk_init_data){555 .name = "gcc_pcie_1_aux_clk_src",556 .parent_data = gcc_parent_data_2,557 .num_parents = ARRAY_SIZE(gcc_parent_data_2),558 .ops = &clk_rcg2_ops,559 },560};561 562static struct clk_rcg2 gcc_pcie_1_phy_rchng_clk_src = {563 .cmd_rcgr = 0x8d03c,564 .mnd_width = 0,565 .hid_width = 5,566 .parent_map = gcc_parent_map_0,567 .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,568 .clkr.hw.init = &(struct clk_init_data){569 .name = "gcc_pcie_1_phy_rchng_clk_src",570 .parent_data = gcc_parent_data_0,571 .num_parents = ARRAY_SIZE(gcc_parent_data_0),572 .flags = CLK_SET_RATE_PARENT,573 .ops = &clk_rcg2_ops,574 },575};576 577static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {578 F(60000000, P_GCC_GPLL0_OUT_EVEN, 5, 0, 0),579 { }580};581 582static struct clk_rcg2 gcc_pdm2_clk_src = {583 .cmd_rcgr = 0x33010,584 .mnd_width = 0,585 .hid_width = 5,586 .parent_map = gcc_parent_map_0,587 .freq_tbl = ftbl_gcc_pdm2_clk_src,588 .clkr.hw.init = &(struct clk_init_data){589 .name = "gcc_pdm2_clk_src",590 .parent_data = gcc_parent_data_0,591 .num_parents = ARRAY_SIZE(gcc_parent_data_0),592 .flags = CLK_SET_RATE_PARENT,593 .ops = &clk_rcg2_ops,594 },595};596 597static const struct freq_tbl ftbl_gcc_qspi_core_clk_src[] = {598 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),599 F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0),600 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),601 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),602 { }603};604 605static struct clk_rcg2 gcc_qspi_core_clk_src = {606 .cmd_rcgr = 0x4b00c,607 .mnd_width = 0,608 .hid_width = 5,609 .parent_map = gcc_parent_map_0,610 .freq_tbl = ftbl_gcc_qspi_core_clk_src,611 .clkr.hw.init = &(struct clk_init_data){612 .name = "gcc_qspi_core_clk_src",613 .parent_data = gcc_parent_data_0,614 .num_parents = ARRAY_SIZE(gcc_parent_data_0),615 .ops = &clk_rcg2_floor_ops,616 },617};618 619static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {620 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),621 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),622 F(19200000, P_BI_TCXO, 1, 0, 0),623 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),624 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),625 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),626 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),627 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),628 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),629 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),630 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),631 F(102400000, P_GCC_GPLL0_OUT_EVEN, 1, 128, 375),632 F(112000000, P_GCC_GPLL0_OUT_EVEN, 1, 28, 75),633 F(117964800, P_GCC_GPLL0_OUT_EVEN, 1, 6144, 15625),634 F(120000000, P_GCC_GPLL0_OUT_EVEN, 2.5, 0, 0),635 { }636};637 638static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {639 .name = "gcc_qupv3_wrap0_s0_clk_src",640 .parent_data = gcc_parent_data_0,641 .num_parents = ARRAY_SIZE(gcc_parent_data_0),642 .ops = &clk_rcg2_ops,643};644 645static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {646 .cmd_rcgr = 0x17010,647 .mnd_width = 16,648 .hid_width = 5,649 .parent_map = gcc_parent_map_0,650 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,651 .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,652};653 654static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {655 .name = "gcc_qupv3_wrap0_s1_clk_src",656 .parent_data = gcc_parent_data_0,657 .num_parents = ARRAY_SIZE(gcc_parent_data_0),658 .ops = &clk_rcg2_ops,659};660 661static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {662 .cmd_rcgr = 0x17140,663 .mnd_width = 16,664 .hid_width = 5,665 .parent_map = gcc_parent_map_0,666 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,667 .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,668};669 670static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s2_clk_src[] = {671 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),672 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),673 F(19200000, P_BI_TCXO, 1, 0, 0),674 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),675 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),676 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),677 F(52174000, P_GCC_GPLL0_OUT_MAIN, 1, 2, 23),678 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),679 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),680 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),681 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),682 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),683 { }684};685 686static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {687 .name = "gcc_qupv3_wrap0_s2_clk_src",688 .parent_data = gcc_parent_data_0,689 .num_parents = ARRAY_SIZE(gcc_parent_data_0),690 .ops = &clk_rcg2_ops,691};692 693static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {694 .cmd_rcgr = 0x17270,695 .mnd_width = 16,696 .hid_width = 5,697 .parent_map = gcc_parent_map_0,698 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,699 .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,700};701 702static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {703 .name = "gcc_qupv3_wrap0_s3_clk_src",704 .parent_data = gcc_parent_data_0,705 .num_parents = ARRAY_SIZE(gcc_parent_data_0),706 .ops = &clk_rcg2_ops,707};708 709static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {710 .cmd_rcgr = 0x173a0,711 .mnd_width = 16,712 .hid_width = 5,713 .parent_map = gcc_parent_map_0,714 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,715 .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,716};717 718static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {719 .name = "gcc_qupv3_wrap0_s4_clk_src",720 .parent_data = gcc_parent_data_0,721 .num_parents = ARRAY_SIZE(gcc_parent_data_0),722 .ops = &clk_rcg2_ops,723};724 725static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {726 .cmd_rcgr = 0x174d0,727 .mnd_width = 16,728 .hid_width = 5,729 .parent_map = gcc_parent_map_0,730 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,731 .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,732};733 734static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {735 .name = "gcc_qupv3_wrap0_s5_clk_src",736 .parent_data = gcc_parent_data_0,737 .num_parents = ARRAY_SIZE(gcc_parent_data_0),738 .ops = &clk_rcg2_ops,739};740 741static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {742 .cmd_rcgr = 0x17600,743 .mnd_width = 16,744 .hid_width = 5,745 .parent_map = gcc_parent_map_0,746 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,747 .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,748};749 750static struct clk_init_data gcc_qupv3_wrap0_s6_clk_src_init = {751 .name = "gcc_qupv3_wrap0_s6_clk_src",752 .parent_data = gcc_parent_data_0,753 .num_parents = ARRAY_SIZE(gcc_parent_data_0),754 .ops = &clk_rcg2_ops,755};756 757static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {758 .cmd_rcgr = 0x17730,759 .mnd_width = 16,760 .hid_width = 5,761 .parent_map = gcc_parent_map_0,762 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,763 .clkr.hw.init = &gcc_qupv3_wrap0_s6_clk_src_init,764};765 766static struct clk_init_data gcc_qupv3_wrap0_s7_clk_src_init = {767 .name = "gcc_qupv3_wrap0_s7_clk_src",768 .parent_data = gcc_parent_data_0,769 .num_parents = ARRAY_SIZE(gcc_parent_data_0),770 .ops = &clk_rcg2_ops,771};772 773static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = {774 .cmd_rcgr = 0x17860,775 .mnd_width = 16,776 .hid_width = 5,777 .parent_map = gcc_parent_map_0,778 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,779 .clkr.hw.init = &gcc_qupv3_wrap0_s7_clk_src_init,780};781 782static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {783 .name = "gcc_qupv3_wrap1_s0_clk_src",784 .parent_data = gcc_parent_data_0,785 .num_parents = ARRAY_SIZE(gcc_parent_data_0),786 .ops = &clk_rcg2_ops,787};788 789static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {790 .cmd_rcgr = 0x18010,791 .mnd_width = 16,792 .hid_width = 5,793 .parent_map = gcc_parent_map_0,794 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,795 .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,796};797 798static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {799 .name = "gcc_qupv3_wrap1_s1_clk_src",800 .parent_data = gcc_parent_data_0,801 .num_parents = ARRAY_SIZE(gcc_parent_data_0),802 .ops = &clk_rcg2_ops,803};804 805static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {806 .cmd_rcgr = 0x18140,807 .mnd_width = 16,808 .hid_width = 5,809 .parent_map = gcc_parent_map_0,810 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,811 .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,812};813 814static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {815 .name = "gcc_qupv3_wrap1_s2_clk_src",816 .parent_data = gcc_parent_data_0,817 .num_parents = ARRAY_SIZE(gcc_parent_data_0),818 .ops = &clk_rcg2_ops,819};820 821static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {822 .cmd_rcgr = 0x18270,823 .mnd_width = 16,824 .hid_width = 5,825 .parent_map = gcc_parent_map_0,826 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,827 .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,828};829 830static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {831 .name = "gcc_qupv3_wrap1_s3_clk_src",832 .parent_data = gcc_parent_data_0,833 .num_parents = ARRAY_SIZE(gcc_parent_data_0),834 .ops = &clk_rcg2_ops,835};836 837static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {838 .cmd_rcgr = 0x183a0,839 .mnd_width = 16,840 .hid_width = 5,841 .parent_map = gcc_parent_map_0,842 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,843 .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,844};845 846static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {847 .name = "gcc_qupv3_wrap1_s4_clk_src",848 .parent_data = gcc_parent_data_0,849 .num_parents = ARRAY_SIZE(gcc_parent_data_0),850 .ops = &clk_rcg2_ops,851};852 853static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {854 .cmd_rcgr = 0x184d0,855 .mnd_width = 16,856 .hid_width = 5,857 .parent_map = gcc_parent_map_0,858 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,859 .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,860};861 862static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {863 .name = "gcc_qupv3_wrap1_s5_clk_src",864 .parent_data = gcc_parent_data_0,865 .num_parents = ARRAY_SIZE(gcc_parent_data_0),866 .ops = &clk_rcg2_ops,867};868 869static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {870 .cmd_rcgr = 0x18600,871 .mnd_width = 16,872 .hid_width = 5,873 .parent_map = gcc_parent_map_0,874 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,875 .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,876};877 878static struct clk_init_data gcc_qupv3_wrap1_s6_clk_src_init = {879 .name = "gcc_qupv3_wrap1_s6_clk_src",880 .parent_data = gcc_parent_data_0,881 .num_parents = ARRAY_SIZE(gcc_parent_data_0),882 .ops = &clk_rcg2_ops,883};884 885static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = {886 .cmd_rcgr = 0x18730,887 .mnd_width = 16,888 .hid_width = 5,889 .parent_map = gcc_parent_map_0,890 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,891 .clkr.hw.init = &gcc_qupv3_wrap1_s6_clk_src_init,892};893 894static struct clk_init_data gcc_qupv3_wrap1_s7_clk_src_init = {895 .name = "gcc_qupv3_wrap1_s7_clk_src",896 .parent_data = gcc_parent_data_0,897 .num_parents = ARRAY_SIZE(gcc_parent_data_0),898 .ops = &clk_rcg2_ops,899};900 901static struct clk_rcg2 gcc_qupv3_wrap1_s7_clk_src = {902 .cmd_rcgr = 0x18860,903 .mnd_width = 16,904 .hid_width = 5,905 .parent_map = gcc_parent_map_0,906 .freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,907 .clkr.hw.init = &gcc_qupv3_wrap1_s7_clk_src_init,908};909 910static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {911 F(144000, P_BI_TCXO, 16, 3, 25),912 F(400000, P_BI_TCXO, 12, 1, 4),913 F(19200000, P_BI_TCXO, 1, 0, 0),914 F(20000000, P_GCC_GPLL0_OUT_EVEN, 5, 1, 3),915 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),916 F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),917 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),918 F(192000000, P_GCC_GPLL10_OUT_MAIN, 2, 0, 0),919 F(384000000, P_GCC_GPLL10_OUT_MAIN, 1, 0, 0),920 { }921};922 923static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {924 .cmd_rcgr = 0x7500c,925 .mnd_width = 8,926 .hid_width = 5,927 .parent_map = gcc_parent_map_8,928 .freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,929 .clkr.hw.init = &(struct clk_init_data){930 .name = "gcc_sdcc1_apps_clk_src",931 .parent_data = gcc_parent_data_8,932 .num_parents = ARRAY_SIZE(gcc_parent_data_8),933 .ops = &clk_rcg2_floor_ops,934 },935};936 937static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = {938 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),939 F(150000000, P_GCC_GPLL0_OUT_EVEN, 2, 0, 0),940 F(300000000, P_GCC_GPLL0_OUT_EVEN, 1, 0, 0),941 { }942};943 944static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = {945 .cmd_rcgr = 0x7502c,946 .mnd_width = 0,947 .hid_width = 5,948 .parent_map = gcc_parent_map_1,949 .freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src,950 .clkr.hw.init = &(struct clk_init_data){951 .name = "gcc_sdcc1_ice_core_clk_src",952 .parent_data = gcc_parent_data_1,953 .num_parents = ARRAY_SIZE(gcc_parent_data_1),954 .ops = &clk_rcg2_floor_ops,955 },956};957 958static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {959 F(400000, P_BI_TCXO, 12, 1, 4),960 F(19200000, P_BI_TCXO, 1, 0, 0),961 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),962 F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),963 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),964 F(202000000, P_GCC_GPLL9_OUT_MAIN, 4, 0, 0),965 { }966};967 968static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {969 .cmd_rcgr = 0x1400c,970 .mnd_width = 8,971 .hid_width = 5,972 .parent_map = gcc_parent_map_9,973 .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,974 .clkr.hw.init = &(struct clk_init_data){975 .name = "gcc_sdcc2_apps_clk_src",976 .parent_data = gcc_parent_data_9,977 .num_parents = ARRAY_SIZE(gcc_parent_data_9),978 .flags = CLK_OPS_PARENT_ENABLE,979 .ops = &clk_rcg2_floor_ops,980 },981};982 983static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = {984 F(400000, P_BI_TCXO, 12, 1, 4),985 F(19200000, P_BI_TCXO, 1, 0, 0),986 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),987 F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),988 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),989 { }990};991 992static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {993 .cmd_rcgr = 0x1600c,994 .mnd_width = 8,995 .hid_width = 5,996 .parent_map = gcc_parent_map_1,997 .freq_tbl = ftbl_gcc_sdcc4_apps_clk_src,998 .clkr.hw.init = &(struct clk_init_data){999 .name = "gcc_sdcc4_apps_clk_src",1000 .parent_data = gcc_parent_data_1,1001 .num_parents = ARRAY_SIZE(gcc_parent_data_1),1002 .ops = &clk_rcg2_floor_ops,1003 },1004};1005 1006static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {1007 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),1008 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),1009 F(150000000, P_GCC_GPLL0_OUT_EVEN, 2, 0, 0),1010 F(300000000, P_GCC_GPLL0_OUT_EVEN, 1, 0, 0),1011 { }1012};1013 1014static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {1015 .cmd_rcgr = 0x77024,1016 .mnd_width = 8,1017 .hid_width = 5,1018 .parent_map = gcc_parent_map_0,1019 .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,1020 .clkr.hw.init = &(struct clk_init_data){1021 .name = "gcc_ufs_phy_axi_clk_src",1022 .parent_data = gcc_parent_data_0,1023 .num_parents = ARRAY_SIZE(gcc_parent_data_0),1024 .ops = &clk_rcg2_ops,1025 },1026};1027 1028static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {1029 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),1030 F(150000000, P_GCC_GPLL0_OUT_EVEN, 2, 0, 0),1031 F(300000000, P_GCC_GPLL0_OUT_EVEN, 1, 0, 0),1032 { }1033};1034 1035static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {1036 .cmd_rcgr = 0x7706c,1037 .mnd_width = 0,1038 .hid_width = 5,1039 .parent_map = gcc_parent_map_0,1040 .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,1041 .clkr.hw.init = &(struct clk_init_data){1042 .name = "gcc_ufs_phy_ice_core_clk_src",1043 .parent_data = gcc_parent_data_0,1044 .num_parents = ARRAY_SIZE(gcc_parent_data_0),1045 .ops = &clk_rcg2_ops,1046 },1047};1048 1049static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {1050 .cmd_rcgr = 0x770a0,1051 .mnd_width = 0,1052 .hid_width = 5,1053 .parent_map = gcc_parent_map_3,1054 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,1055 .clkr.hw.init = &(struct clk_init_data){1056 .name = "gcc_ufs_phy_phy_aux_clk_src",1057 .parent_data = gcc_parent_data_3,1058 .num_parents = ARRAY_SIZE(gcc_parent_data_3),1059 .ops = &clk_rcg2_ops,1060 },1061};1062 1063static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {1064 .cmd_rcgr = 0x77084,1065 .mnd_width = 0,1066 .hid_width = 5,1067 .parent_map = gcc_parent_map_0,1068 .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,1069 .clkr.hw.init = &(struct clk_init_data){1070 .name = "gcc_ufs_phy_unipro_core_clk_src",1071 .parent_data = gcc_parent_data_0,1072 .num_parents = ARRAY_SIZE(gcc_parent_data_0),1073 .ops = &clk_rcg2_ops,1074 },1075};1076 1077static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {1078 F(66666667, P_GCC_GPLL0_OUT_EVEN, 4.5, 0, 0),1079 F(133333333, P_GCC_GPLL0_OUT_MAIN, 4.5, 0, 0),1080 F(200000000, P_GCC_GPLL0_OUT_ODD, 1, 0, 0),1081 F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0),1082 { }1083};1084 1085static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {1086 .cmd_rcgr = 0xf020,1087 .mnd_width = 8,1088 .hid_width = 5,1089 .parent_map = gcc_parent_map_1,1090 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,1091 .clkr.hw.init = &(struct clk_init_data){1092 .name = "gcc_usb30_prim_master_clk_src",1093 .parent_data = gcc_parent_data_1,1094 .num_parents = ARRAY_SIZE(gcc_parent_data_1),1095 .ops = &clk_rcg2_ops,1096 },1097};1098 1099static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {1100 F(19200000, P_BI_TCXO, 1, 0, 0),1101 { }1102};1103 1104static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {1105 .cmd_rcgr = 0xf038,1106 .mnd_width = 0,1107 .hid_width = 5,1108 .parent_map = gcc_parent_map_3,1109 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,1110 .clkr.hw.init = &(struct clk_init_data){1111 .name = "gcc_usb30_prim_mock_utmi_clk_src",1112 .parent_data = gcc_parent_data_3,1113 .num_parents = ARRAY_SIZE(gcc_parent_data_3),1114 .ops = &clk_rcg2_ops,1115 },1116};1117 1118static const struct freq_tbl ftbl_gcc_usb30_sec_master_clk_src[] = {1119 F(60000000, P_GCC_GPLL0_OUT_EVEN, 5, 0, 0),1120 F(120000000, P_GCC_GPLL0_OUT_EVEN, 2.5, 0, 0),1121 { }1122};1123 1124static struct clk_rcg2 gcc_usb30_sec_master_clk_src = {1125 .cmd_rcgr = 0x9e020,1126 .mnd_width = 8,1127 .hid_width = 5,1128 .parent_map = gcc_parent_map_5,1129 .freq_tbl = ftbl_gcc_usb30_sec_master_clk_src,1130 .clkr.hw.init = &(struct clk_init_data){1131 .name = "gcc_usb30_sec_master_clk_src",1132 .parent_data = gcc_parent_data_5,1133 .num_parents = ARRAY_SIZE(gcc_parent_data_5),1134 .ops = &clk_rcg2_ops,1135 },1136};1137 1138static struct clk_rcg2 gcc_usb30_sec_mock_utmi_clk_src = {1139 .cmd_rcgr = 0x9e038,1140 .mnd_width = 0,1141 .hid_width = 5,1142 .parent_map = gcc_parent_map_3,1143 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,1144 .clkr.hw.init = &(struct clk_init_data){1145 .name = "gcc_usb30_sec_mock_utmi_clk_src",1146 .parent_data = gcc_parent_data_3,1147 .num_parents = ARRAY_SIZE(gcc_parent_data_3),1148 .ops = &clk_rcg2_ops,1149 },1150};1151 1152static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {1153 .cmd_rcgr = 0xf064,1154 .mnd_width = 0,1155 .hid_width = 5,1156 .parent_map = gcc_parent_map_2,1157 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,1158 .clkr.hw.init = &(struct clk_init_data){1159 .name = "gcc_usb3_prim_phy_aux_clk_src",1160 .parent_data = gcc_parent_data_2,1161 .num_parents = ARRAY_SIZE(gcc_parent_data_2),1162 .ops = &clk_rcg2_ops,1163 },1164};1165 1166static struct clk_rcg2 gcc_usb3_sec_phy_aux_clk_src = {1167 .cmd_rcgr = 0x9e064,1168 .mnd_width = 0,1169 .hid_width = 5,1170 .parent_map = gcc_parent_map_2,1171 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,1172 .clkr.hw.init = &(struct clk_init_data){1173 .name = "gcc_usb3_sec_phy_aux_clk_src",1174 .parent_data = gcc_parent_data_2,1175 .num_parents = ARRAY_SIZE(gcc_parent_data_2),1176 .ops = &clk_rcg2_ops,1177 },1178};1179 1180static const struct freq_tbl ftbl_gcc_sec_ctrl_clk_src[] = {1181 F(4800000, P_BI_TCXO, 4, 0, 0),1182 F(19200000, P_BI_TCXO, 1, 0, 0),1183 { }1184};1185 1186static struct clk_rcg2 gcc_sec_ctrl_clk_src = {1187 .cmd_rcgr = 0x3d02c,1188 .mnd_width = 0,1189 .hid_width = 5,1190 .parent_map = gcc_parent_map_3,1191 .freq_tbl = ftbl_gcc_sec_ctrl_clk_src,1192 .clkr.hw.init = &(struct clk_init_data){1193 .name = "gcc_sec_ctrl_clk_src",1194 .parent_data = gcc_parent_data_3,1195 .num_parents = ARRAY_SIZE(gcc_parent_data_3),1196 .ops = &clk_rcg2_ops,1197 },1198};1199 1200static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {1201 .reg = 0xf050,1202 .shift = 0,1203 .width = 4,1204 .clkr.hw.init = &(struct clk_init_data) {1205 .name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",1206 .parent_hws = (const struct clk_hw*[]){1207 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,1208 },1209 .num_parents = 1,1210 .flags = CLK_SET_RATE_PARENT,1211 .ops = &clk_regmap_div_ro_ops,1212 },1213};1214 1215static struct clk_regmap_div gcc_usb30_sec_mock_utmi_postdiv_clk_src = {1216 .reg = 0x9e050,1217 .shift = 0,1218 .width = 4,1219 .clkr.hw.init = &(struct clk_init_data) {1220 .name = "gcc_usb30_sec_mock_utmi_postdiv_clk_src",1221 .parent_hws = (const struct clk_hw*[]){1222 &gcc_usb30_sec_mock_utmi_clk_src.clkr.hw,1223 },1224 .num_parents = 1,1225 .flags = CLK_SET_RATE_PARENT,1226 .ops = &clk_regmap_div_ro_ops,1227 },1228};1229 1230static struct clk_branch gcc_pcie_clkref_en = {1231 .halt_reg = 0x8c004,1232 .halt_check = BRANCH_HALT,1233 .clkr = {1234 .enable_reg = 0x8c004,1235 .enable_mask = BIT(0),1236 .hw.init = &(struct clk_init_data){1237 .name = "gcc_pcie_clkref_en",1238 .ops = &clk_branch2_ops,1239 },1240 },1241};1242 1243static struct clk_branch gcc_edp_clkref_en = {1244 .halt_reg = 0x8c008,1245 .halt_check = BRANCH_HALT,1246 .clkr = {1247 .enable_reg = 0x8c008,1248 .enable_mask = BIT(0),1249 .hw.init = &(struct clk_init_data){1250 .name = "gcc_edp_clkref_en",1251 .ops = &clk_branch2_ops,1252 },1253 },1254};1255 1256static struct clk_branch gcc_aggre_noc_pcie_0_axi_clk = {1257 .halt_reg = 0x6b080,1258 .halt_check = BRANCH_HALT_SKIP,1259 .hwcg_reg = 0x6b080,1260 .hwcg_bit = 1,1261 .clkr = {1262 .enable_reg = 0x52000,1263 .enable_mask = BIT(12),1264 .hw.init = &(struct clk_init_data){1265 .name = "gcc_aggre_noc_pcie_0_axi_clk",1266 .ops = &clk_branch2_ops,1267 },1268 },1269};1270 1271static struct clk_branch gcc_aggre_noc_pcie_1_axi_clk = {1272 .halt_reg = 0x8d084,1273 .halt_check = BRANCH_HALT_SKIP,1274 .hwcg_reg = 0x8d084,1275 .hwcg_bit = 1,1276 .clkr = {1277 .enable_reg = 0x52000,1278 .enable_mask = BIT(11),1279 .hw.init = &(struct clk_init_data){1280 .name = "gcc_aggre_noc_pcie_1_axi_clk",1281 .ops = &clk_branch2_ops,1282 },1283 },1284};1285 1286static struct clk_branch gcc_aggre_noc_pcie_tbu_clk = {1287 .halt_reg = 0x90010,1288 .halt_check = BRANCH_HALT_VOTED,1289 .hwcg_reg = 0x90010,1290 .hwcg_bit = 1,1291 .clkr = {1292 .enable_reg = 0x52000,1293 .enable_mask = BIT(18),1294 .hw.init = &(struct clk_init_data){1295 .name = "gcc_aggre_noc_pcie_tbu_clk",1296 .ops = &clk_branch2_ops,1297 },1298 },1299};1300 1301static struct clk_branch gcc_aggre_noc_pcie_center_sf_axi_clk = {1302 .halt_reg = 0x8d088,1303 .halt_check = BRANCH_HALT_VOTED,1304 .hwcg_reg = 0x8d088,1305 .hwcg_bit = 1,1306 .clkr = {1307 .enable_reg = 0x52008,1308 .enable_mask = BIT(28),1309 .hw.init = &(struct clk_init_data){1310 .name = "gcc_aggre_noc_pcie_center_sf_axi_clk",1311 .ops = &clk_branch2_ops,1312 },1313 },1314};1315 1316static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {1317 .halt_reg = 0x770cc,1318 .halt_check = BRANCH_HALT_VOTED,1319 .hwcg_reg = 0x770cc,1320 .hwcg_bit = 1,1321 .clkr = {1322 .enable_reg = 0x770cc,1323 .enable_mask = BIT(0),1324 .hw.init = &(struct clk_init_data){1325 .name = "gcc_aggre_ufs_phy_axi_clk",1326 .parent_hws = (const struct clk_hw*[]){1327 &gcc_ufs_phy_axi_clk_src.clkr.hw,1328 },1329 .num_parents = 1,1330 .flags = CLK_SET_RATE_PARENT,1331 .ops = &clk_branch2_ops,1332 },1333 },1334};1335 1336static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {1337 .halt_reg = 0xf080,1338 .halt_check = BRANCH_HALT_VOTED,1339 .hwcg_reg = 0xf080,1340 .hwcg_bit = 1,1341 .clkr = {1342 .enable_reg = 0xf080,1343 .enable_mask = BIT(0),1344 .hw.init = &(struct clk_init_data){1345 .name = "gcc_aggre_usb3_prim_axi_clk",1346 .parent_hws = (const struct clk_hw*[]){1347 &gcc_usb30_prim_master_clk_src.clkr.hw,1348 },1349 .num_parents = 1,1350 .flags = CLK_SET_RATE_PARENT,1351 .ops = &clk_branch2_ops,1352 },1353 },1354};1355 1356static struct clk_branch gcc_aggre_usb3_sec_axi_clk = {1357 .halt_reg = 0x9e080,1358 .halt_check = BRANCH_HALT_VOTED,1359 .hwcg_reg = 0x9e080,1360 .hwcg_bit = 1,1361 .clkr = {1362 .enable_reg = 0x9e080,1363 .enable_mask = BIT(0),1364 .hw.init = &(struct clk_init_data){1365 .name = "gcc_aggre_usb3_sec_axi_clk",1366 .parent_hws = (const struct clk_hw*[]){1367 &gcc_usb30_sec_master_clk_src.clkr.hw,1368 },1369 .num_parents = 1,1370 .flags = CLK_SET_RATE_PARENT,1371 .ops = &clk_branch2_ops,1372 },1373 },1374};1375 1376static struct clk_branch gcc_camera_hf_axi_clk = {1377 .halt_reg = 0x26010,1378 .halt_check = BRANCH_HALT_SKIP,1379 .hwcg_reg = 0x26010,1380 .hwcg_bit = 1,1381 .clkr = {1382 .enable_reg = 0x26010,1383 .enable_mask = BIT(0),1384 .hw.init = &(struct clk_init_data){1385 .name = "gcc_camera_hf_axi_clk",1386 .ops = &clk_branch2_ops,1387 },1388 },1389};1390 1391static struct clk_branch gcc_camera_sf_axi_clk = {1392 .halt_reg = 0x2601c,1393 .halt_check = BRANCH_HALT_SKIP,1394 .hwcg_reg = 0x2601c,1395 .hwcg_bit = 1,1396 .clkr = {1397 .enable_reg = 0x2601c,1398 .enable_mask = BIT(0),1399 .hw.init = &(struct clk_init_data){1400 .name = "gcc_camera_sf_axi_clk",1401 .ops = &clk_branch2_ops,1402 },1403 },1404};1405 1406static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {1407 .halt_reg = 0xf07c,1408 .halt_check = BRANCH_HALT_VOTED,1409 .hwcg_reg = 0xf07c,1410 .hwcg_bit = 1,1411 .clkr = {1412 .enable_reg = 0xf07c,1413 .enable_mask = BIT(0),1414 .hw.init = &(struct clk_init_data){1415 .name = "gcc_cfg_noc_usb3_prim_axi_clk",1416 .parent_hws = (const struct clk_hw*[]){1417 &gcc_usb30_prim_master_clk_src.clkr.hw,1418 },1419 .num_parents = 1,1420 .flags = CLK_SET_RATE_PARENT,1421 .ops = &clk_branch2_ops,1422 },1423 },1424};1425 1426static struct clk_branch gcc_cfg_noc_usb3_sec_axi_clk = {1427 .halt_reg = 0x9e07c,1428 .halt_check = BRANCH_HALT_VOTED,1429 .hwcg_reg = 0x9e07c,1430 .hwcg_bit = 1,1431 .clkr = {1432 .enable_reg = 0x9e07c,1433 .enable_mask = BIT(0),1434 .hw.init = &(struct clk_init_data){1435 .name = "gcc_cfg_noc_usb3_sec_axi_clk",1436 .parent_hws = (const struct clk_hw*[]){1437 &gcc_usb30_sec_master_clk_src.clkr.hw,1438 },1439 .num_parents = 1,1440 .flags = CLK_SET_RATE_PARENT,1441 .ops = &clk_branch2_ops,1442 },1443 },1444};1445 1446static struct clk_branch gcc_ddrss_gpu_axi_clk = {1447 .halt_reg = 0x71154,1448 .halt_check = BRANCH_HALT_SKIP,1449 .hwcg_reg = 0x71154,1450 .hwcg_bit = 1,1451 .clkr = {1452 .enable_reg = 0x71154,1453 .enable_mask = BIT(0),1454 .hw.init = &(struct clk_init_data){1455 .name = "gcc_ddrss_gpu_axi_clk",1456 .ops = &clk_branch2_aon_ops,1457 },1458 },1459};1460 1461static struct clk_branch gcc_ddrss_pcie_sf_clk = {1462 .halt_reg = 0x8d080,1463 .halt_check = BRANCH_HALT_SKIP,1464 .hwcg_reg = 0x8d080,1465 .hwcg_bit = 1,1466 .clkr = {1467 .enable_reg = 0x52000,1468 .enable_mask = BIT(19),1469 .hw.init = &(struct clk_init_data){1470 .name = "gcc_ddrss_pcie_sf_clk",1471 .ops = &clk_branch2_ops,1472 },1473 },1474};1475 1476static struct clk_branch gcc_disp_gpll0_clk_src = {1477 .halt_check = BRANCH_HALT_DELAY,1478 .clkr = {1479 .enable_reg = 0x52000,1480 .enable_mask = BIT(7),1481 .hw.init = &(struct clk_init_data){1482 .name = "gcc_disp_gpll0_clk_src",1483 .parent_hws = (const struct clk_hw*[]){1484 &gcc_gpll0.clkr.hw,1485 },1486 .num_parents = 1,1487 .flags = CLK_SET_RATE_PARENT,1488 .ops = &clk_branch2_ops,1489 },1490 },1491};1492 1493static struct clk_branch gcc_disp_hf_axi_clk = {1494 .halt_reg = 0x2700c,1495 .halt_check = BRANCH_HALT_SKIP,1496 .hwcg_reg = 0x2700c,1497 .hwcg_bit = 1,1498 .clkr = {1499 .enable_reg = 0x2700c,1500 .enable_mask = BIT(0),1501 .hw.init = &(struct clk_init_data){1502 .name = "gcc_disp_hf_axi_clk",1503 .ops = &clk_branch2_ops,1504 },1505 },1506};1507 1508static struct clk_branch gcc_disp_sf_axi_clk = {1509 .halt_reg = 0x27014,1510 .halt_check = BRANCH_HALT_SKIP,1511 .hwcg_reg = 0x27014,1512 .hwcg_bit = 1,1513 .clkr = {1514 .enable_reg = 0x27014,1515 .enable_mask = BIT(0),1516 .hw.init = &(struct clk_init_data){1517 .name = "gcc_disp_sf_axi_clk",1518 .ops = &clk_branch2_ops,1519 },1520 },1521};1522 1523static struct clk_branch gcc_gp1_clk = {1524 .halt_reg = 0x64000,1525 .halt_check = BRANCH_HALT,1526 .clkr = {1527 .enable_reg = 0x64000,1528 .enable_mask = BIT(0),1529 .hw.init = &(struct clk_init_data){1530 .name = "gcc_gp1_clk",1531 .parent_hws = (const struct clk_hw*[]){1532 &gcc_gp1_clk_src.clkr.hw,1533 },1534 .num_parents = 1,1535 .flags = CLK_SET_RATE_PARENT,1536 .ops = &clk_branch2_ops,1537 },1538 },1539};1540 1541static struct clk_branch gcc_gp2_clk = {1542 .halt_reg = 0x65000,1543 .halt_check = BRANCH_HALT,1544 .clkr = {1545 .enable_reg = 0x65000,1546 .enable_mask = BIT(0),1547 .hw.init = &(struct clk_init_data){1548 .name = "gcc_gp2_clk",1549 .parent_hws = (const struct clk_hw*[]){1550 &gcc_gp2_clk_src.clkr.hw,1551 },1552 .num_parents = 1,1553 .flags = CLK_SET_RATE_PARENT,1554 .ops = &clk_branch2_ops,1555 },1556 },1557};1558 1559static struct clk_branch gcc_gp3_clk = {1560 .halt_reg = 0x66000,1561 .halt_check = BRANCH_HALT,1562 .clkr = {1563 .enable_reg = 0x66000,1564 .enable_mask = BIT(0),1565 .hw.init = &(struct clk_init_data){1566 .name = "gcc_gp3_clk",1567 .parent_hws = (const struct clk_hw*[]){1568 &gcc_gp3_clk_src.clkr.hw,1569 },1570 .num_parents = 1,1571 .flags = CLK_SET_RATE_PARENT,1572 .ops = &clk_branch2_ops,1573 },1574 },1575};1576 1577static struct clk_branch gcc_gpu_gpll0_clk_src = {1578 .halt_check = BRANCH_HALT_DELAY,1579 .clkr = {1580 .enable_reg = 0x52000,1581 .enable_mask = BIT(15),1582 .hw.init = &(struct clk_init_data){1583 .name = "gcc_gpu_gpll0_clk_src",1584 .parent_hws = (const struct clk_hw*[]){1585 &gcc_gpll0.clkr.hw,1586 },1587 .num_parents = 1,1588 .flags = CLK_SET_RATE_PARENT,1589 .ops = &clk_branch2_ops,1590 },1591 },1592};1593 1594static struct clk_branch gcc_gpu_gpll0_div_clk_src = {1595 .halt_check = BRANCH_HALT_DELAY,1596 .clkr = {1597 .enable_reg = 0x52000,1598 .enable_mask = BIT(16),1599 .hw.init = &(struct clk_init_data){1600 .name = "gcc_gpu_gpll0_div_clk_src",1601 .parent_hws = (const struct clk_hw*[]){1602 &gcc_gpll0_out_even.clkr.hw,1603 },1604 .num_parents = 1,1605 .flags = CLK_SET_RATE_PARENT,1606 .ops = &clk_branch2_ops,1607 },1608 },1609};1610 1611static struct clk_branch gcc_gpu_iref_en = {1612 .halt_reg = 0x8c014,1613 .halt_check = BRANCH_HALT,1614 .clkr = {1615 .enable_reg = 0x8c014,1616 .enable_mask = BIT(0),1617 .hw.init = &(struct clk_init_data){1618 .name = "gcc_gpu_iref_en",1619 .ops = &clk_branch2_ops,1620 },1621 },1622};1623 1624static struct clk_branch gcc_gpu_memnoc_gfx_clk = {1625 .halt_reg = 0x7100c,1626 .halt_check = BRANCH_HALT_VOTED,1627 .hwcg_reg = 0x7100c,1628 .hwcg_bit = 1,1629 .clkr = {1630 .enable_reg = 0x7100c,1631 .enable_mask = BIT(0),1632 .hw.init = &(struct clk_init_data){1633 .name = "gcc_gpu_memnoc_gfx_clk",1634 .ops = &clk_branch2_aon_ops,1635 },1636 },1637};1638 1639static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {1640 .halt_reg = 0x71018,1641 .halt_check = BRANCH_HALT,1642 .clkr = {1643 .enable_reg = 0x71018,1644 .enable_mask = BIT(0),1645 .hw.init = &(struct clk_init_data){1646 .name = "gcc_gpu_snoc_dvm_gfx_clk",1647 .ops = &clk_branch2_aon_ops,1648 },1649 },1650};1651 1652static struct clk_branch gcc_pcie0_phy_rchng_clk = {1653 .halt_reg = 0x6b038,1654 .halt_check = BRANCH_HALT_VOTED,1655 .clkr = {1656 .enable_reg = 0x52000,1657 .enable_mask = BIT(22),1658 .hw.init = &(struct clk_init_data){1659 .name = "gcc_pcie0_phy_rchng_clk",1660 .parent_hws = (const struct clk_hw*[]){1661 &gcc_pcie_0_phy_rchng_clk_src.clkr.hw,1662 },1663 .num_parents = 1,1664 .flags = CLK_SET_RATE_PARENT,1665 .ops = &clk_branch2_ops,1666 },1667 },1668};1669 1670static struct clk_branch gcc_pcie1_phy_rchng_clk = {1671 .halt_reg = 0x8d038,1672 .halt_check = BRANCH_HALT_VOTED,1673 .clkr = {1674 .enable_reg = 0x52000,1675 .enable_mask = BIT(23),1676 .hw.init = &(struct clk_init_data){1677 .name = "gcc_pcie1_phy_rchng_clk",1678 .parent_hws = (const struct clk_hw*[]){1679 &gcc_pcie_1_phy_rchng_clk_src.clkr.hw,1680 },1681 .num_parents = 1,1682 .flags = CLK_SET_RATE_PARENT,1683 .ops = &clk_branch2_ops,1684 },1685 },1686};1687 1688static struct clk_branch gcc_pcie_0_aux_clk = {1689 .halt_reg = 0x6b028,1690 .halt_check = BRANCH_HALT_VOTED,1691 .clkr = {1692 .enable_reg = 0x52008,1693 .enable_mask = BIT(3),1694 .hw.init = &(struct clk_init_data){1695 .name = "gcc_pcie_0_aux_clk",1696 .parent_hws = (const struct clk_hw*[]){1697 &gcc_pcie_0_aux_clk_src.clkr.hw,1698 },1699 .num_parents = 1,1700 .flags = CLK_SET_RATE_PARENT,1701 .ops = &clk_branch2_ops,1702 },1703 },1704};1705 1706static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {1707 .halt_reg = 0x6b024,1708 .halt_check = BRANCH_HALT_VOTED,1709 .hwcg_reg = 0x6b024,1710 .hwcg_bit = 1,1711 .clkr = {1712 .enable_reg = 0x52008,1713 .enable_mask = BIT(2),1714 .hw.init = &(struct clk_init_data){1715 .name = "gcc_pcie_0_cfg_ahb_clk",1716 .ops = &clk_branch2_ops,1717 },1718 },1719};1720 1721static struct clk_branch gcc_pcie_0_mstr_axi_clk = {1722 .halt_reg = 0x6b01c,1723 .halt_check = BRANCH_HALT_SKIP,1724 .clkr = {1725 .enable_reg = 0x52008,1726 .enable_mask = BIT(1),1727 .hw.init = &(struct clk_init_data){1728 .name = "gcc_pcie_0_mstr_axi_clk",1729 .ops = &clk_branch2_ops,1730 },1731 },1732};1733 1734static struct clk_branch gcc_pcie_0_pipe_clk = {1735 .halt_reg = 0x6b030,1736 .halt_check = BRANCH_HALT_SKIP,1737 .clkr = {1738 .enable_reg = 0x52008,1739 .enable_mask = BIT(4),1740 .hw.init = &(struct clk_init_data){1741 .name = "gcc_pcie_0_pipe_clk",1742 .parent_hws = (const struct clk_hw*[]){1743 &gcc_pcie_0_pipe_clk_src.clkr.hw,1744 },1745 .num_parents = 1,1746 .flags = CLK_SET_RATE_PARENT,1747 .ops = &clk_branch2_ops,1748 },1749 },1750};1751 1752static struct clk_branch gcc_pcie_0_slv_axi_clk = {1753 .halt_reg = 0x6b014,1754 .halt_check = BRANCH_HALT_VOTED,1755 .clkr = {1756 .enable_reg = 0x52008,1757 .enable_mask = BIT(0),1758 .hw.init = &(struct clk_init_data){1759 .name = "gcc_pcie_0_slv_axi_clk",1760 .ops = &clk_branch2_ops,1761 },1762 },1763};1764 1765static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {1766 .halt_reg = 0x6b010,1767 .halt_check = BRANCH_HALT_VOTED,1768 .clkr = {1769 .enable_reg = 0x52008,1770 .enable_mask = BIT(5),1771 .hw.init = &(struct clk_init_data){1772 .name = "gcc_pcie_0_slv_q2a_axi_clk",1773 .ops = &clk_branch2_ops,1774 },1775 },1776};1777 1778static struct clk_branch gcc_pcie_1_aux_clk = {1779 .halt_reg = 0x8d028,1780 .halt_check = BRANCH_HALT_VOTED,1781 .clkr = {1782 .enable_reg = 0x52000,1783 .enable_mask = BIT(29),1784 .hw.init = &(struct clk_init_data){1785 .name = "gcc_pcie_1_aux_clk",1786 .parent_hws = (const struct clk_hw*[]){1787 &gcc_pcie_1_aux_clk_src.clkr.hw,1788 },1789 .num_parents = 1,1790 .flags = CLK_SET_RATE_PARENT,1791 .ops = &clk_branch2_ops,1792 },1793 },1794};1795 1796static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {1797 .halt_reg = 0x8d024,1798 .halt_check = BRANCH_HALT_VOTED,1799 .hwcg_reg = 0x8d024,1800 .hwcg_bit = 1,1801 .clkr = {1802 .enable_reg = 0x52000,1803 .enable_mask = BIT(28),1804 .hw.init = &(struct clk_init_data){1805 .name = "gcc_pcie_1_cfg_ahb_clk",1806 .ops = &clk_branch2_ops,1807 },1808 },1809};1810 1811static struct clk_branch gcc_pcie_1_mstr_axi_clk = {1812 .halt_reg = 0x8d01c,1813 .halt_check = BRANCH_HALT_SKIP,1814 .clkr = {1815 .enable_reg = 0x52000,1816 .enable_mask = BIT(27),1817 .hw.init = &(struct clk_init_data){1818 .name = "gcc_pcie_1_mstr_axi_clk",1819 .ops = &clk_branch2_ops,1820 },1821 },1822};1823 1824static struct clk_branch gcc_pcie_1_pipe_clk = {1825 .halt_reg = 0x8d030,1826 .halt_check = BRANCH_HALT_SKIP,1827 .clkr = {1828 .enable_reg = 0x52000,1829 .enable_mask = BIT(30),1830 .hw.init = &(struct clk_init_data){1831 .name = "gcc_pcie_1_pipe_clk",1832 .parent_hws = (const struct clk_hw*[]){1833 &gcc_pcie_1_pipe_clk_src.clkr.hw,1834 },1835 .num_parents = 1,1836 .flags = CLK_SET_RATE_PARENT,1837 .ops = &clk_branch2_ops,1838 },1839 },1840};1841 1842static struct clk_branch gcc_pcie_1_slv_axi_clk = {1843 .halt_reg = 0x8d014,1844 .halt_check = BRANCH_HALT_VOTED,1845 .clkr = {1846 .enable_reg = 0x52000,1847 .enable_mask = BIT(26),1848 .hw.init = &(struct clk_init_data){1849 .name = "gcc_pcie_1_slv_axi_clk",1850 .ops = &clk_branch2_ops,1851 },1852 },1853};1854 1855static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = {1856 .halt_reg = 0x8d010,1857 .halt_check = BRANCH_HALT_VOTED,1858 .clkr = {1859 .enable_reg = 0x52000,1860 .enable_mask = BIT(25),1861 .hw.init = &(struct clk_init_data){1862 .name = "gcc_pcie_1_slv_q2a_axi_clk",1863 .ops = &clk_branch2_ops,1864 },1865 },1866};1867 1868static struct clk_branch gcc_pcie_throttle_core_clk = {1869 .halt_reg = 0x90018,1870 .halt_check = BRANCH_HALT_SKIP,1871 .hwcg_reg = 0x90018,1872 .hwcg_bit = 1,1873 .clkr = {1874 .enable_reg = 0x52000,1875 .enable_mask = BIT(20),1876 .hw.init = &(struct clk_init_data){1877 .name = "gcc_pcie_throttle_core_clk",1878 .ops = &clk_branch2_ops,1879 },1880 },1881};1882 1883static struct clk_branch gcc_pdm2_clk = {1884 .halt_reg = 0x3300c,1885 .halt_check = BRANCH_HALT,1886 .clkr = {1887 .enable_reg = 0x3300c,1888 .enable_mask = BIT(0),1889 .hw.init = &(struct clk_init_data){1890 .name = "gcc_pdm2_clk",1891 .parent_hws = (const struct clk_hw*[]){1892 &gcc_pdm2_clk_src.clkr.hw,1893 },1894 .num_parents = 1,1895 .flags = CLK_SET_RATE_PARENT,1896 .ops = &clk_branch2_ops,1897 },1898 },1899};1900 1901static struct clk_branch gcc_pdm_ahb_clk = {1902 .halt_reg = 0x33004,1903 .halt_check = BRANCH_HALT_VOTED,1904 .hwcg_reg = 0x33004,1905 .hwcg_bit = 1,1906 .clkr = {1907 .enable_reg = 0x33004,1908 .enable_mask = BIT(0),1909 .hw.init = &(struct clk_init_data){1910 .name = "gcc_pdm_ahb_clk",1911 .ops = &clk_branch2_ops,1912 },1913 },1914};1915 1916static struct clk_branch gcc_pdm_xo4_clk = {1917 .halt_reg = 0x33008,1918 .halt_check = BRANCH_HALT,1919 .clkr = {1920 .enable_reg = 0x33008,1921 .enable_mask = BIT(0),1922 .hw.init = &(struct clk_init_data){1923 .name = "gcc_pdm_xo4_clk",1924 .ops = &clk_branch2_ops,1925 },1926 },1927};1928 1929static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {1930 .halt_reg = 0x26008,1931 .halt_check = BRANCH_HALT_VOTED,1932 .hwcg_reg = 0x26008,1933 .hwcg_bit = 1,1934 .clkr = {1935 .enable_reg = 0x26008,1936 .enable_mask = BIT(0),1937 .hw.init = &(struct clk_init_data){1938 .name = "gcc_qmip_camera_nrt_ahb_clk",1939 .ops = &clk_branch2_ops,1940 },1941 },1942};1943 1944static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {1945 .halt_reg = 0x2600c,1946 .halt_check = BRANCH_HALT_VOTED,1947 .hwcg_reg = 0x2600c,1948 .hwcg_bit = 1,1949 .clkr = {1950 .enable_reg = 0x2600c,1951 .enable_mask = BIT(0),1952 .hw.init = &(struct clk_init_data){1953 .name = "gcc_qmip_camera_rt_ahb_clk",1954 .ops = &clk_branch2_ops,1955 },1956 },1957};1958 1959static struct clk_branch gcc_qmip_disp_ahb_clk = {1960 .halt_reg = 0x27008,1961 .halt_check = BRANCH_HALT_VOTED,1962 .clkr = {1963 .enable_reg = 0x27008,1964 .enable_mask = BIT(0),1965 .hw.init = &(struct clk_init_data){1966 .name = "gcc_qmip_disp_ahb_clk",1967 .ops = &clk_branch2_ops,1968 },1969 },1970};1971 1972static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {1973 .halt_reg = 0x28008,1974 .halt_check = BRANCH_HALT_VOTED,1975 .hwcg_reg = 0x28008,1976 .hwcg_bit = 1,1977 .clkr = {1978 .enable_reg = 0x28008,1979 .enable_mask = BIT(0),1980 .hw.init = &(struct clk_init_data){1981 .name = "gcc_qmip_video_vcodec_ahb_clk",1982 .ops = &clk_branch2_ops,1983 },1984 },1985};1986 1987static struct clk_branch gcc_qspi_cnoc_periph_ahb_clk = {1988 .halt_reg = 0x4b004,1989 .halt_check = BRANCH_HALT,1990 .hwcg_reg = 0x4b004,1991 .hwcg_bit = 1,1992 .clkr = {1993 .enable_reg = 0x4b004,1994 .enable_mask = BIT(0),1995 .hw.init = &(struct clk_init_data){1996 .name = "gcc_qspi_cnoc_periph_ahb_clk",1997 .ops = &clk_branch2_ops,1998 },1999 },2000};2001 2002static struct clk_branch gcc_qspi_core_clk = {2003 .halt_reg = 0x4b008,2004 .halt_check = BRANCH_HALT,2005 .clkr = {2006 .enable_reg = 0x4b008,2007 .enable_mask = BIT(0),2008 .hw.init = &(struct clk_init_data){2009 .name = "gcc_qspi_core_clk",2010 .parent_hws = (const struct clk_hw*[]){2011 &gcc_qspi_core_clk_src.clkr.hw,2012 },2013 .num_parents = 1,2014 .flags = CLK_SET_RATE_PARENT,2015 .ops = &clk_branch2_ops,2016 },2017 },2018};2019 2020static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {2021 .halt_reg = 0x23008,2022 .halt_check = BRANCH_HALT_VOTED,2023 .clkr = {2024 .enable_reg = 0x52008,2025 .enable_mask = BIT(9),2026 .hw.init = &(struct clk_init_data){2027 .name = "gcc_qupv3_wrap0_core_2x_clk",2028 .ops = &clk_branch2_ops,2029 },2030 },2031};2032 2033static struct clk_branch gcc_qupv3_wrap0_core_clk = {2034 .halt_reg = 0x23000,2035 .halt_check = BRANCH_HALT_VOTED,2036 .clkr = {2037 .enable_reg = 0x52008,2038 .enable_mask = BIT(8),2039 .hw.init = &(struct clk_init_data){2040 .name = "gcc_qupv3_wrap0_core_clk",2041 .ops = &clk_branch2_ops,2042 },2043 },2044};2045 2046static struct clk_branch gcc_qupv3_wrap0_s0_clk = {2047 .halt_reg = 0x1700c,2048 .halt_check = BRANCH_HALT_VOTED,2049 .clkr = {2050 .enable_reg = 0x52008,2051 .enable_mask = BIT(10),2052 .hw.init = &(struct clk_init_data){2053 .name = "gcc_qupv3_wrap0_s0_clk",2054 .parent_hws = (const struct clk_hw*[]){2055 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw,2056 },2057 .num_parents = 1,2058 .flags = CLK_SET_RATE_PARENT,2059 .ops = &clk_branch2_ops,2060 },2061 },2062};2063 2064static struct clk_branch gcc_qupv3_wrap0_s1_clk = {2065 .halt_reg = 0x1713c,2066 .halt_check = BRANCH_HALT_VOTED,2067 .clkr = {2068 .enable_reg = 0x52008,2069 .enable_mask = BIT(11),2070 .hw.init = &(struct clk_init_data){2071 .name = "gcc_qupv3_wrap0_s1_clk",2072 .parent_hws = (const struct clk_hw*[]){2073 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw,2074 },2075 .num_parents = 1,2076 .flags = CLK_SET_RATE_PARENT,2077 .ops = &clk_branch2_ops,2078 },2079 },2080};2081 2082static struct clk_branch gcc_qupv3_wrap0_s2_clk = {2083 .halt_reg = 0x1726c,2084 .halt_check = BRANCH_HALT_VOTED,2085 .clkr = {2086 .enable_reg = 0x52008,2087 .enable_mask = BIT(12),2088 .hw.init = &(struct clk_init_data){2089 .name = "gcc_qupv3_wrap0_s2_clk",2090 .parent_hws = (const struct clk_hw*[]){2091 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw,2092 },2093 .num_parents = 1,2094 .flags = CLK_SET_RATE_PARENT,2095 .ops = &clk_branch2_ops,2096 },2097 },2098};2099 2100static struct clk_branch gcc_qupv3_wrap0_s3_clk = {2101 .halt_reg = 0x1739c,2102 .halt_check = BRANCH_HALT_VOTED,2103 .clkr = {2104 .enable_reg = 0x52008,2105 .enable_mask = BIT(13),2106 .hw.init = &(struct clk_init_data){2107 .name = "gcc_qupv3_wrap0_s3_clk",2108 .parent_hws = (const struct clk_hw*[]){2109 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw,2110 },2111 .num_parents = 1,2112 .flags = CLK_SET_RATE_PARENT,2113 .ops = &clk_branch2_ops,2114 },2115 },2116};2117 2118static struct clk_branch gcc_qupv3_wrap0_s4_clk = {2119 .halt_reg = 0x174cc,2120 .halt_check = BRANCH_HALT_VOTED,2121 .clkr = {2122 .enable_reg = 0x52008,2123 .enable_mask = BIT(14),2124 .hw.init = &(struct clk_init_data){2125 .name = "gcc_qupv3_wrap0_s4_clk",2126 .parent_hws = (const struct clk_hw*[]){2127 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw,2128 },2129 .num_parents = 1,2130 .flags = CLK_SET_RATE_PARENT,2131 .ops = &clk_branch2_ops,2132 },2133 },2134};2135 2136static struct clk_branch gcc_qupv3_wrap0_s5_clk = {2137 .halt_reg = 0x175fc,2138 .halt_check = BRANCH_HALT_VOTED,2139 .clkr = {2140 .enable_reg = 0x52008,2141 .enable_mask = BIT(15),2142 .hw.init = &(struct clk_init_data){2143 .name = "gcc_qupv3_wrap0_s5_clk",2144 .parent_hws = (const struct clk_hw*[]){2145 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw,2146 },2147 .num_parents = 1,2148 .flags = CLK_SET_RATE_PARENT,2149 .ops = &clk_branch2_ops,2150 },2151 },2152};2153 2154static struct clk_branch gcc_qupv3_wrap0_s6_clk = {2155 .halt_reg = 0x1772c,2156 .halt_check = BRANCH_HALT_VOTED,2157 .clkr = {2158 .enable_reg = 0x52008,2159 .enable_mask = BIT(16),2160 .hw.init = &(struct clk_init_data){2161 .name = "gcc_qupv3_wrap0_s6_clk",2162 .parent_hws = (const struct clk_hw*[]){2163 &gcc_qupv3_wrap0_s6_clk_src.clkr.hw,2164 },2165 .num_parents = 1,2166 .flags = CLK_SET_RATE_PARENT,2167 .ops = &clk_branch2_ops,2168 },2169 },2170};2171 2172static struct clk_branch gcc_qupv3_wrap0_s7_clk = {2173 .halt_reg = 0x1785c,2174 .halt_check = BRANCH_HALT_VOTED,2175 .clkr = {2176 .enable_reg = 0x52008,2177 .enable_mask = BIT(17),2178 .hw.init = &(struct clk_init_data){2179 .name = "gcc_qupv3_wrap0_s7_clk",2180 .parent_hws = (const struct clk_hw*[]){2181 &gcc_qupv3_wrap0_s7_clk_src.clkr.hw,2182 },2183 .num_parents = 1,2184 .flags = CLK_SET_RATE_PARENT,2185 .ops = &clk_branch2_ops,2186 },2187 },2188};2189 2190static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {2191 .halt_reg = 0x23140,2192 .halt_check = BRANCH_HALT_VOTED,2193 .clkr = {2194 .enable_reg = 0x52008,2195 .enable_mask = BIT(18),2196 .hw.init = &(struct clk_init_data){2197 .name = "gcc_qupv3_wrap1_core_2x_clk",2198 .ops = &clk_branch2_ops,2199 },2200 },2201};2202 2203static struct clk_branch gcc_qupv3_wrap1_core_clk = {2204 .halt_reg = 0x23138,2205 .halt_check = BRANCH_HALT_VOTED,2206 .clkr = {2207 .enable_reg = 0x52008,2208 .enable_mask = BIT(19),2209 .hw.init = &(struct clk_init_data){2210 .name = "gcc_qupv3_wrap1_core_clk",2211 .ops = &clk_branch2_ops,2212 },2213 },2214};2215 2216static struct clk_branch gcc_qupv3_wrap1_s0_clk = {2217 .halt_reg = 0x1800c,2218 .halt_check = BRANCH_HALT_VOTED,2219 .clkr = {2220 .enable_reg = 0x52008,2221 .enable_mask = BIT(22),2222 .hw.init = &(struct clk_init_data){2223 .name = "gcc_qupv3_wrap1_s0_clk",2224 .parent_hws = (const struct clk_hw*[]){2225 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw,2226 },2227 .num_parents = 1,2228 .flags = CLK_SET_RATE_PARENT,2229 .ops = &clk_branch2_ops,2230 },2231 },2232};2233 2234static struct clk_branch gcc_qupv3_wrap1_s1_clk = {2235 .halt_reg = 0x1813c,2236 .halt_check = BRANCH_HALT_VOTED,2237 .clkr = {2238 .enable_reg = 0x52008,2239 .enable_mask = BIT(23),2240 .hw.init = &(struct clk_init_data){2241 .name = "gcc_qupv3_wrap1_s1_clk",2242 .parent_hws = (const struct clk_hw*[]){2243 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw,2244 },2245 .num_parents = 1,2246 .flags = CLK_SET_RATE_PARENT,2247 .ops = &clk_branch2_ops,2248 },2249 },2250};2251 2252static struct clk_branch gcc_qupv3_wrap1_s2_clk = {2253 .halt_reg = 0x1826c,2254 .halt_check = BRANCH_HALT_VOTED,2255 .clkr = {2256 .enable_reg = 0x52008,2257 .enable_mask = BIT(24),2258 .hw.init = &(struct clk_init_data){2259 .name = "gcc_qupv3_wrap1_s2_clk",2260 .parent_hws = (const struct clk_hw*[]){2261 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw,2262 },2263 .num_parents = 1,2264 .flags = CLK_SET_RATE_PARENT,2265 .ops = &clk_branch2_ops,2266 },2267 },2268};2269 2270static struct clk_branch gcc_qupv3_wrap1_s3_clk = {2271 .halt_reg = 0x1839c,2272 .halt_check = BRANCH_HALT_VOTED,2273 .clkr = {2274 .enable_reg = 0x52008,2275 .enable_mask = BIT(25),2276 .hw.init = &(struct clk_init_data){2277 .name = "gcc_qupv3_wrap1_s3_clk",2278 .parent_hws = (const struct clk_hw*[]){2279 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw,2280 },2281 .num_parents = 1,2282 .flags = CLK_SET_RATE_PARENT,2283 .ops = &clk_branch2_ops,2284 },2285 },2286};2287 2288static struct clk_branch gcc_qupv3_wrap1_s4_clk = {2289 .halt_reg = 0x184cc,2290 .halt_check = BRANCH_HALT_VOTED,2291 .clkr = {2292 .enable_reg = 0x52008,2293 .enable_mask = BIT(26),2294 .hw.init = &(struct clk_init_data){2295 .name = "gcc_qupv3_wrap1_s4_clk",2296 .parent_hws = (const struct clk_hw*[]){2297 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw,2298 },2299 .num_parents = 1,2300 .flags = CLK_SET_RATE_PARENT,2301 .ops = &clk_branch2_ops,2302 },2303 },2304};2305 2306static struct clk_branch gcc_qupv3_wrap1_s5_clk = {2307 .halt_reg = 0x185fc,2308 .halt_check = BRANCH_HALT_VOTED,2309 .clkr = {2310 .enable_reg = 0x52008,2311 .enable_mask = BIT(27),2312 .hw.init = &(struct clk_init_data){2313 .name = "gcc_qupv3_wrap1_s5_clk",2314 .parent_hws = (const struct clk_hw*[]){2315 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw,2316 },2317 .num_parents = 1,2318 .flags = CLK_SET_RATE_PARENT,2319 .ops = &clk_branch2_ops,2320 },2321 },2322};2323 2324static struct clk_branch gcc_qupv3_wrap1_s6_clk = {2325 .halt_reg = 0x1872c,2326 .halt_check = BRANCH_HALT_VOTED,2327 .clkr = {2328 .enable_reg = 0x52000,2329 .enable_mask = BIT(13),2330 .hw.init = &(struct clk_init_data){2331 .name = "gcc_qupv3_wrap1_s6_clk",2332 .parent_hws = (const struct clk_hw*[]){2333 &gcc_qupv3_wrap1_s6_clk_src.clkr.hw,2334 },2335 .num_parents = 1,2336 .flags = CLK_SET_RATE_PARENT,2337 .ops = &clk_branch2_ops,2338 },2339 },2340};2341 2342static struct clk_branch gcc_qupv3_wrap1_s7_clk = {2343 .halt_reg = 0x1885c,2344 .halt_check = BRANCH_HALT_VOTED,2345 .clkr = {2346 .enable_reg = 0x52000,2347 .enable_mask = BIT(14),2348 .hw.init = &(struct clk_init_data){2349 .name = "gcc_qupv3_wrap1_s7_clk",2350 .parent_hws = (const struct clk_hw*[]){2351 &gcc_qupv3_wrap1_s7_clk_src.clkr.hw,2352 },2353 .num_parents = 1,2354 .flags = CLK_SET_RATE_PARENT,2355 .ops = &clk_branch2_ops,2356 },2357 },2358};2359 2360static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {2361 .halt_reg = 0x17004,2362 .halt_check = BRANCH_HALT_VOTED,2363 .hwcg_reg = 0x17004,2364 .hwcg_bit = 1,2365 .clkr = {2366 .enable_reg = 0x52008,2367 .enable_mask = BIT(6),2368 .hw.init = &(struct clk_init_data){2369 .name = "gcc_qupv3_wrap_0_m_ahb_clk",2370 .ops = &clk_branch2_ops,2371 },2372 },2373};2374 2375static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {2376 .halt_reg = 0x17008,2377 .halt_check = BRANCH_HALT_VOTED,2378 .hwcg_reg = 0x17008,2379 .hwcg_bit = 1,2380 .clkr = {2381 .enable_reg = 0x52008,2382 .enable_mask = BIT(7),2383 .hw.init = &(struct clk_init_data){2384 .name = "gcc_qupv3_wrap_0_s_ahb_clk",2385 .ops = &clk_branch2_ops,2386 },2387 },2388};2389 2390static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {2391 .halt_reg = 0x18004,2392 .halt_check = BRANCH_HALT_VOTED,2393 .hwcg_reg = 0x18004,2394 .hwcg_bit = 1,2395 .clkr = {2396 .enable_reg = 0x52008,2397 .enable_mask = BIT(20),2398 .hw.init = &(struct clk_init_data){2399 .name = "gcc_qupv3_wrap_1_m_ahb_clk",2400 .ops = &clk_branch2_ops,2401 },2402 },2403};2404 2405static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {2406 .halt_reg = 0x18008,2407 .halt_check = BRANCH_HALT_VOTED,2408 .hwcg_reg = 0x18008,2409 .hwcg_bit = 1,2410 .clkr = {2411 .enable_reg = 0x52008,2412 .enable_mask = BIT(21),2413 .hw.init = &(struct clk_init_data){2414 .name = "gcc_qupv3_wrap_1_s_ahb_clk",2415 .ops = &clk_branch2_ops,2416 },2417 },2418};2419 2420static struct clk_branch gcc_sdcc1_ahb_clk = {2421 .halt_reg = 0x75004,2422 .halt_check = BRANCH_HALT,2423 .clkr = {2424 .enable_reg = 0x75004,2425 .enable_mask = BIT(0),2426 .hw.init = &(struct clk_init_data){2427 .name = "gcc_sdcc1_ahb_clk",2428 .ops = &clk_branch2_ops,2429 },2430 },2431};2432 2433static struct clk_branch gcc_sdcc1_apps_clk = {2434 .halt_reg = 0x75008,2435 .halt_check = BRANCH_HALT,2436 .clkr = {2437 .enable_reg = 0x75008,2438 .enable_mask = BIT(0),2439 .hw.init = &(struct clk_init_data){2440 .name = "gcc_sdcc1_apps_clk",2441 .parent_hws = (const struct clk_hw*[]){2442 &gcc_sdcc1_apps_clk_src.clkr.hw,2443 },2444 .num_parents = 1,2445 .flags = CLK_SET_RATE_PARENT,2446 .ops = &clk_branch2_ops,2447 },2448 },2449};2450 2451static struct clk_branch gcc_sdcc1_ice_core_clk = {2452 .halt_reg = 0x75024,2453 .halt_check = BRANCH_HALT_VOTED,2454 .hwcg_reg = 0x75024,2455 .hwcg_bit = 1,2456 .clkr = {2457 .enable_reg = 0x75024,2458 .enable_mask = BIT(0),2459 .hw.init = &(struct clk_init_data){2460 .name = "gcc_sdcc1_ice_core_clk",2461 .parent_hws = (const struct clk_hw*[]){2462 &gcc_sdcc1_ice_core_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_sdcc2_ahb_clk = {2472 .halt_reg = 0x14008,2473 .halt_check = BRANCH_HALT,2474 .clkr = {2475 .enable_reg = 0x14008,2476 .enable_mask = BIT(0),2477 .hw.init = &(struct clk_init_data){2478 .name = "gcc_sdcc2_ahb_clk",2479 .ops = &clk_branch2_ops,2480 },2481 },2482};2483 2484static struct clk_branch gcc_sdcc2_apps_clk = {2485 .halt_reg = 0x14004,2486 .halt_check = BRANCH_HALT,2487 .clkr = {2488 .enable_reg = 0x14004,2489 .enable_mask = BIT(0),2490 .hw.init = &(struct clk_init_data){2491 .name = "gcc_sdcc2_apps_clk",2492 .parent_hws = (const struct clk_hw*[]){2493 &gcc_sdcc2_apps_clk_src.clkr.hw,2494 },2495 .num_parents = 1,2496 .flags = CLK_SET_RATE_PARENT,2497 .ops = &clk_branch2_ops,2498 },2499 },2500};2501 2502static struct clk_branch gcc_sdcc4_ahb_clk = {2503 .halt_reg = 0x16008,2504 .halt_check = BRANCH_HALT,2505 .clkr = {2506 .enable_reg = 0x16008,2507 .enable_mask = BIT(0),2508 .hw.init = &(struct clk_init_data){2509 .name = "gcc_sdcc4_ahb_clk",2510 .ops = &clk_branch2_ops,2511 },2512 },2513};2514 2515static struct clk_branch gcc_sdcc4_apps_clk = {2516 .halt_reg = 0x16004,2517 .halt_check = BRANCH_HALT,2518 .clkr = {2519 .enable_reg = 0x16004,2520 .enable_mask = BIT(0),2521 .hw.init = &(struct clk_init_data){2522 .name = "gcc_sdcc4_apps_clk",2523 .parent_hws = (const struct clk_hw*[]){2524 &gcc_sdcc4_apps_clk_src.clkr.hw,2525 },2526 .num_parents = 1,2527 .flags = CLK_SET_RATE_PARENT,2528 .ops = &clk_branch2_ops,2529 },2530 },2531};2532 2533static struct clk_branch gcc_throttle_pcie_ahb_clk = {2534 .halt_reg = 0x9001c,2535 .halt_check = BRANCH_HALT,2536 .clkr = {2537 .enable_reg = 0x9001c,2538 .enable_mask = BIT(0),2539 .hw.init = &(struct clk_init_data){2540 .name = "gcc_throttle_pcie_ahb_clk",2541 .ops = &clk_branch2_ops,2542 },2543 },2544};2545 2546static struct clk_branch gcc_titan_nrt_throttle_core_clk = {2547 .halt_reg = 0x26024,2548 .halt_check = BRANCH_HALT_SKIP,2549 .hwcg_reg = 0x26024,2550 .hwcg_bit = 1,2551 .clkr = {2552 .enable_reg = 0x26024,2553 .enable_mask = BIT(0),2554 .hw.init = &(struct clk_init_data){2555 .name = "gcc_titan_nrt_throttle_core_clk",2556 .ops = &clk_branch2_ops,2557 },2558 },2559};2560 2561static struct clk_branch gcc_titan_rt_throttle_core_clk = {2562 .halt_reg = 0x26018,2563 .halt_check = BRANCH_HALT_SKIP,2564 .hwcg_reg = 0x26018,2565 .hwcg_bit = 1,2566 .clkr = {2567 .enable_reg = 0x26018,2568 .enable_mask = BIT(0),2569 .hw.init = &(struct clk_init_data){2570 .name = "gcc_titan_rt_throttle_core_clk",2571 .ops = &clk_branch2_ops,2572 },2573 },2574};2575 2576static struct clk_branch gcc_ufs_1_clkref_en = {2577 .halt_reg = 0x8c000,2578 .halt_check = BRANCH_HALT,2579 .clkr = {2580 .enable_reg = 0x8c000,2581 .enable_mask = BIT(0),2582 .hw.init = &(struct clk_init_data){2583 .name = "gcc_ufs_1_clkref_en",2584 .ops = &clk_branch2_ops,2585 },2586 },2587};2588 2589static struct clk_branch gcc_ufs_phy_ahb_clk = {2590 .halt_reg = 0x77018,2591 .halt_check = BRANCH_HALT_VOTED,2592 .hwcg_reg = 0x77018,2593 .hwcg_bit = 1,2594 .clkr = {2595 .enable_reg = 0x77018,2596 .enable_mask = BIT(0),2597 .hw.init = &(struct clk_init_data){2598 .name = "gcc_ufs_phy_ahb_clk",2599 .ops = &clk_branch2_ops,2600 },2601 },2602};2603 2604static struct clk_branch gcc_ufs_phy_axi_clk = {2605 .halt_reg = 0x77010,2606 .halt_check = BRANCH_HALT_VOTED,2607 .hwcg_reg = 0x77010,2608 .hwcg_bit = 1,2609 .clkr = {2610 .enable_reg = 0x77010,2611 .enable_mask = BIT(0),2612 .hw.init = &(struct clk_init_data){2613 .name = "gcc_ufs_phy_axi_clk",2614 .parent_hws = (const struct clk_hw*[]){2615 &gcc_ufs_phy_axi_clk_src.clkr.hw,2616 },2617 .num_parents = 1,2618 .flags = CLK_SET_RATE_PARENT,2619 .ops = &clk_branch2_ops,2620 },2621 },2622};2623 2624static struct clk_branch gcc_ufs_phy_ice_core_clk = {2625 .halt_reg = 0x77064,2626 .halt_check = BRANCH_HALT_VOTED,2627 .hwcg_reg = 0x77064,2628 .hwcg_bit = 1,2629 .clkr = {2630 .enable_reg = 0x77064,2631 .enable_mask = BIT(0),2632 .hw.init = &(struct clk_init_data){2633 .name = "gcc_ufs_phy_ice_core_clk",2634 .parent_hws = (const struct clk_hw*[]){2635 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,2636 },2637 .num_parents = 1,2638 .flags = CLK_SET_RATE_PARENT,2639 .ops = &clk_branch2_ops,2640 },2641 },2642};2643 2644static struct clk_branch gcc_ufs_phy_phy_aux_clk = {2645 .halt_reg = 0x7709c,2646 .halt_check = BRANCH_HALT_VOTED,2647 .hwcg_reg = 0x7709c,2648 .hwcg_bit = 1,2649 .clkr = {2650 .enable_reg = 0x7709c,2651 .enable_mask = BIT(0),2652 .hw.init = &(struct clk_init_data){2653 .name = "gcc_ufs_phy_phy_aux_clk",2654 .parent_hws = (const struct clk_hw*[]){2655 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,2656 },2657 .num_parents = 1,2658 .flags = CLK_SET_RATE_PARENT,2659 .ops = &clk_branch2_ops,2660 },2661 },2662};2663 2664static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {2665 .halt_reg = 0x77020,2666 .halt_check = BRANCH_HALT_DELAY,2667 .clkr = {2668 .enable_reg = 0x77020,2669 .enable_mask = BIT(0),2670 .hw.init = &(struct clk_init_data){2671 .name = "gcc_ufs_phy_rx_symbol_0_clk",2672 .parent_hws = (const struct clk_hw*[]){2673 &gcc_ufs_phy_rx_symbol_0_clk_src.clkr.hw,2674 },2675 .num_parents = 1,2676 .flags = CLK_SET_RATE_PARENT,2677 .ops = &clk_branch2_ops,2678 },2679 },2680};2681 2682static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {2683 .halt_reg = 0x770b8,2684 .halt_check = BRANCH_HALT_DELAY,2685 .clkr = {2686 .enable_reg = 0x770b8,2687 .enable_mask = BIT(0),2688 .hw.init = &(struct clk_init_data){2689 .name = "gcc_ufs_phy_rx_symbol_1_clk",2690 .parent_hws = (const struct clk_hw*[]){2691 &gcc_ufs_phy_rx_symbol_1_clk_src.clkr.hw,2692 },2693 .num_parents = 1,2694 .flags = CLK_SET_RATE_PARENT,2695 .ops = &clk_branch2_ops,2696 },2697 },2698};2699 2700static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {2701 .halt_reg = 0x7701c,2702 .halt_check = BRANCH_HALT_DELAY,2703 .clkr = {2704 .enable_reg = 0x7701c,2705 .enable_mask = BIT(0),2706 .hw.init = &(struct clk_init_data){2707 .name = "gcc_ufs_phy_tx_symbol_0_clk",2708 .parent_hws = (const struct clk_hw*[]){2709 &gcc_ufs_phy_tx_symbol_0_clk_src.clkr.hw,2710 },2711 .num_parents = 1,2712 .flags = CLK_SET_RATE_PARENT,2713 .ops = &clk_branch2_ops,2714 },2715 },2716};2717 2718static struct clk_branch gcc_ufs_phy_unipro_core_clk = {2719 .halt_reg = 0x7705c,2720 .halt_check = BRANCH_HALT_VOTED,2721 .hwcg_reg = 0x7705c,2722 .hwcg_bit = 1,2723 .clkr = {2724 .enable_reg = 0x7705c,2725 .enable_mask = BIT(0),2726 .hw.init = &(struct clk_init_data){2727 .name = "gcc_ufs_phy_unipro_core_clk",2728 .parent_hws = (const struct clk_hw*[]){2729 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,2730 },2731 .num_parents = 1,2732 .flags = CLK_SET_RATE_PARENT,2733 .ops = &clk_branch2_ops,2734 },2735 },2736};2737 2738static struct clk_branch gcc_usb30_prim_master_clk = {2739 .halt_reg = 0xf010,2740 .halt_check = BRANCH_HALT,2741 .clkr = {2742 .enable_reg = 0xf010,2743 .enable_mask = BIT(0),2744 .hw.init = &(struct clk_init_data){2745 .name = "gcc_usb30_prim_master_clk",2746 .parent_hws = (const struct clk_hw*[]){2747 &gcc_usb30_prim_master_clk_src.clkr.hw,2748 },2749 .num_parents = 1,2750 .flags = CLK_SET_RATE_PARENT,2751 .ops = &clk_branch2_ops,2752 },2753 },2754};2755 2756static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {2757 .halt_reg = 0xf01c,2758 .halt_check = BRANCH_HALT,2759 .clkr = {2760 .enable_reg = 0xf01c,2761 .enable_mask = BIT(0),2762 .hw.init = &(struct clk_init_data){2763 .name = "gcc_usb30_prim_mock_utmi_clk",2764 .parent_hws = (const struct clk_hw*[]) {2765 &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,2766 },2767 .num_parents = 1,2768 .flags = CLK_SET_RATE_PARENT,2769 .ops = &clk_branch2_ops,2770 },2771 },2772};2773 2774static struct clk_branch gcc_usb30_prim_sleep_clk = {2775 .halt_reg = 0xf018,2776 .halt_check = BRANCH_HALT,2777 .clkr = {2778 .enable_reg = 0xf018,2779 .enable_mask = BIT(0),2780 .hw.init = &(struct clk_init_data){2781 .name = "gcc_usb30_prim_sleep_clk",2782 .ops = &clk_branch2_ops,2783 },2784 },2785};2786 2787static struct clk_branch gcc_usb30_sec_master_clk = {2788 .halt_reg = 0x9e010,2789 .halt_check = BRANCH_HALT,2790 .clkr = {2791 .enable_reg = 0x9e010,2792 .enable_mask = BIT(0),2793 .hw.init = &(struct clk_init_data){2794 .name = "gcc_usb30_sec_master_clk",2795 .parent_hws = (const struct clk_hw*[]){2796 &gcc_usb30_sec_master_clk_src.clkr.hw,2797 },2798 .num_parents = 1,2799 .flags = CLK_SET_RATE_PARENT,2800 .ops = &clk_branch2_ops,2801 },2802 },2803};2804 2805static struct clk_branch gcc_usb30_sec_mock_utmi_clk = {2806 .halt_reg = 0x9e01c,2807 .halt_check = BRANCH_HALT,2808 .clkr = {2809 .enable_reg = 0x9e01c,2810 .enable_mask = BIT(0),2811 .hw.init = &(struct clk_init_data){2812 .name = "gcc_usb30_sec_mock_utmi_clk",2813 .parent_hws = (const struct clk_hw*[]) {2814 &gcc_usb30_sec_mock_utmi_postdiv_clk_src.clkr.hw,2815 },2816 .num_parents = 1,2817 .flags = CLK_SET_RATE_PARENT,2818 .ops = &clk_branch2_ops,2819 },2820 },2821};2822 2823static struct clk_branch gcc_usb30_sec_sleep_clk = {2824 .halt_reg = 0x9e018,2825 .halt_check = BRANCH_HALT,2826 .clkr = {2827 .enable_reg = 0x9e018,2828 .enable_mask = BIT(0),2829 .hw.init = &(struct clk_init_data){2830 .name = "gcc_usb30_sec_sleep_clk",2831 .ops = &clk_branch2_ops,2832 },2833 },2834};2835 2836static struct clk_branch gcc_usb3_prim_phy_aux_clk = {2837 .halt_reg = 0xf054,2838 .halt_check = BRANCH_HALT,2839 .clkr = {2840 .enable_reg = 0xf054,2841 .enable_mask = BIT(0),2842 .hw.init = &(struct clk_init_data){2843 .name = "gcc_usb3_prim_phy_aux_clk",2844 .parent_hws = (const struct clk_hw*[]){2845 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,2846 },2847 .num_parents = 1,2848 .flags = CLK_SET_RATE_PARENT,2849 .ops = &clk_branch2_ops,2850 },2851 },2852};2853 2854static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {2855 .halt_reg = 0xf058,2856 .halt_check = BRANCH_HALT,2857 .clkr = {2858 .enable_reg = 0xf058,2859 .enable_mask = BIT(0),2860 .hw.init = &(struct clk_init_data){2861 .name = "gcc_usb3_prim_phy_com_aux_clk",2862 .parent_hws = (const struct clk_hw*[]){2863 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,2864 },2865 .num_parents = 1,2866 .flags = CLK_SET_RATE_PARENT,2867 .ops = &clk_branch2_ops,2868 },2869 },2870};2871 2872static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {2873 .halt_reg = 0xf05c,2874 .halt_check = BRANCH_HALT_DELAY,2875 .hwcg_reg = 0xf05c,2876 .hwcg_bit = 1,2877 .clkr = {2878 .enable_reg = 0xf05c,2879 .enable_mask = BIT(0),2880 .hw.init = &(struct clk_init_data){2881 .name = "gcc_usb3_prim_phy_pipe_clk",2882 .parent_hws = (const struct clk_hw*[]){2883 &gcc_usb3_prim_phy_pipe_clk_src.clkr.hw,2884 },2885 .num_parents = 1,2886 .flags = CLK_SET_RATE_PARENT,2887 .ops = &clk_branch2_ops,2888 },2889 },2890};2891 2892static struct clk_branch gcc_cfg_noc_lpass_clk = {2893 .halt_reg = 0x47020,2894 .halt_check = BRANCH_HALT,2895 .clkr = {2896 .enable_reg = 0x47020,2897 .enable_mask = BIT(0),2898 .hw.init = &(struct clk_init_data){2899 .name = "gcc_cfg_noc_lpass_clk",2900 .ops = &clk_branch2_aon_ops,2901 },2902 },2903};2904static struct clk_branch gcc_mss_cfg_ahb_clk = {2905 .halt_reg = 0x8a000,2906 .halt_check = BRANCH_HALT,2907 .clkr = {2908 .enable_reg = 0x8a000,2909 .enable_mask = BIT(0),2910 .hw.init = &(struct clk_init_data){2911 .name = "gcc_mss_cfg_ahb_clk",2912 .ops = &clk_branch2_ops,2913 },2914 },2915};2916 2917static struct clk_branch gcc_mss_offline_axi_clk = {2918 .halt_reg = 0x8a004,2919 .halt_check = BRANCH_HALT_DELAY,2920 .clkr = {2921 .enable_reg = 0x8a004,2922 .enable_mask = BIT(0),2923 .hw.init = &(struct clk_init_data){2924 .name = "gcc_mss_offline_axi_clk",2925 .ops = &clk_branch2_ops,2926 },2927 },2928};2929 2930static struct clk_branch gcc_mss_snoc_axi_clk = {2931 .halt_reg = 0x8a154,2932 .halt_check = BRANCH_HALT_DELAY,2933 .clkr = {2934 .enable_reg = 0x8a154,2935 .enable_mask = BIT(0),2936 .hw.init = &(struct clk_init_data){2937 .name = "gcc_mss_snoc_axi_clk",2938 .ops = &clk_branch2_ops,2939 },2940 },2941};2942 2943static struct clk_branch gcc_mss_q6_memnoc_axi_clk = {2944 .halt_reg = 0x8a158,2945 .halt_check = BRANCH_HALT,2946 .clkr = {2947 .enable_reg = 0x8a158,2948 .enable_mask = BIT(0),2949 .hw.init = &(struct clk_init_data){2950 .name = "gcc_mss_q6_memnoc_axi_clk",2951 .ops = &clk_branch2_ops,2952 },2953 },2954};2955 2956static struct clk_regmap_mux gcc_mss_q6ss_boot_clk_src = {2957 .reg = 0x8a2a4,2958 .shift = 0,2959 .width = 1,2960 .parent_map = gcc_parent_map_15,2961 .clkr = {2962 .hw.init = &(struct clk_init_data){2963 .name = "gcc_mss_q6ss_boot_clk_src",2964 .parent_data = gcc_parent_data_15,2965 .num_parents = ARRAY_SIZE(gcc_parent_data_15),2966 .ops = &clk_regmap_mux_closest_ops,2967 },2968 },2969};2970 2971static struct clk_branch gcc_usb3_sec_phy_aux_clk = {2972 .halt_reg = 0x9e054,2973 .halt_check = BRANCH_HALT,2974 .clkr = {2975 .enable_reg = 0x9e054,2976 .enable_mask = BIT(0),2977 .hw.init = &(struct clk_init_data){2978 .name = "gcc_usb3_sec_phy_aux_clk",2979 .parent_hws = (const struct clk_hw*[]){2980 &gcc_usb3_sec_phy_aux_clk_src.clkr.hw,2981 },2982 .num_parents = 1,2983 .flags = CLK_SET_RATE_PARENT,2984 .ops = &clk_branch2_ops,2985 },2986 },2987};2988 2989static struct clk_branch gcc_usb3_sec_phy_com_aux_clk = {2990 .halt_reg = 0x9e058,2991 .halt_check = BRANCH_HALT,2992 .clkr = {2993 .enable_reg = 0x9e058,2994 .enable_mask = BIT(0),2995 .hw.init = &(struct clk_init_data){2996 .name = "gcc_usb3_sec_phy_com_aux_clk",2997 .parent_hws = (const struct clk_hw*[]){2998 &gcc_usb3_sec_phy_aux_clk_src.clkr.hw,2999 },3000 .num_parents = 1,3001 .flags = CLK_SET_RATE_PARENT,3002 .ops = &clk_branch2_ops,3003 },3004 },3005};3006 3007static struct clk_branch gcc_usb3_sec_phy_pipe_clk = {3008 .halt_reg = 0x9e05c,3009 .halt_check = BRANCH_HALT_SKIP,3010 .hwcg_reg = 0x9e05c,3011 .hwcg_bit = 1,3012 .clkr = {3013 .enable_reg = 0x9e05c,3014 .enable_mask = BIT(0),3015 .hw.init = &(struct clk_init_data){3016 .name = "gcc_usb3_sec_phy_pipe_clk",3017 .parent_hws = (const struct clk_hw*[]){3018 &gcc_usb3_sec_phy_pipe_clk_src.clkr.hw,3019 },3020 .num_parents = 1,3021 .flags = CLK_SET_RATE_PARENT,3022 .ops = &clk_branch2_ops,3023 },3024 },3025};3026 3027static struct clk_branch gcc_video_axi0_clk = {3028 .halt_reg = 0x2800c,3029 .halt_check = BRANCH_HALT_SKIP,3030 .hwcg_reg = 0x2800c,3031 .hwcg_bit = 1,3032 .clkr = {3033 .enable_reg = 0x2800c,3034 .enable_mask = BIT(0),3035 .hw.init = &(struct clk_init_data){3036 .name = "gcc_video_axi0_clk",3037 .ops = &clk_branch2_ops,3038 },3039 },3040};3041 3042static struct clk_branch gcc_video_mvp_throttle_core_clk = {3043 .halt_reg = 0x28010,3044 .halt_check = BRANCH_HALT_SKIP,3045 .hwcg_reg = 0x28010,3046 .hwcg_bit = 1,3047 .clkr = {3048 .enable_reg = 0x28010,3049 .enable_mask = BIT(0),3050 .hw.init = &(struct clk_init_data){3051 .name = "gcc_video_mvp_throttle_core_clk",3052 .ops = &clk_branch2_ops,3053 },3054 },3055};3056 3057static struct clk_branch gcc_wpss_ahb_clk = {3058 .halt_reg = 0x9d154,3059 .halt_check = BRANCH_HALT,3060 .clkr = {3061 .enable_reg = 0x9d154,3062 .enable_mask = BIT(0),3063 .hw.init = &(struct clk_init_data){3064 .name = "gcc_wpss_ahb_clk",3065 .ops = &clk_branch2_ops,3066 },3067 },3068};3069 3070static struct clk_branch gcc_wpss_ahb_bdg_mst_clk = {3071 .halt_reg = 0x9d158,3072 .halt_check = BRANCH_HALT,3073 .clkr = {3074 .enable_reg = 0x9d158,3075 .enable_mask = BIT(0),3076 .hw.init = &(struct clk_init_data){3077 .name = "gcc_wpss_ahb_bdg_mst_clk",3078 .ops = &clk_branch2_ops,3079 },3080 },3081};3082 3083static struct clk_branch gcc_wpss_rscp_clk = {3084 .halt_reg = 0x9d16c,3085 .halt_check = BRANCH_HALT,3086 .clkr = {3087 .enable_reg = 0x9d16c,3088 .enable_mask = BIT(0),3089 .hw.init = &(struct clk_init_data){3090 .name = "gcc_wpss_rscp_clk",3091 .ops = &clk_branch2_ops,3092 },3093 },3094};3095 3096static struct gdsc gcc_pcie_0_gdsc = {3097 .gdscr = 0x6b004,3098 .en_rest_wait_val = 0x2,3099 .en_few_wait_val = 0x2,3100 .clk_dis_wait_val = 0xf,3101 .pd = {3102 .name = "gcc_pcie_0_gdsc",3103 },3104 .pwrsts = PWRSTS_OFF_ON,3105 .flags = VOTABLE,3106};3107 3108static struct gdsc gcc_pcie_1_gdsc = {3109 .gdscr = 0x8d004,3110 .pd = {3111 .name = "gcc_pcie_1_gdsc",3112 },3113 .pwrsts = PWRSTS_RET_ON,3114 .flags = VOTABLE,3115};3116 3117static struct gdsc gcc_ufs_phy_gdsc = {3118 .gdscr = 0x77004,3119 .en_rest_wait_val = 0x2,3120 .en_few_wait_val = 0x2,3121 .clk_dis_wait_val = 0xf,3122 .pd = {3123 .name = "gcc_ufs_phy_gdsc",3124 },3125 .pwrsts = PWRSTS_OFF_ON,3126 .flags = VOTABLE,3127};3128 3129static struct gdsc gcc_usb30_prim_gdsc = {3130 .gdscr = 0xf004,3131 .en_rest_wait_val = 0x2,3132 .en_few_wait_val = 0x2,3133 .clk_dis_wait_val = 0xf,3134 .pd = {3135 .name = "gcc_usb30_prim_gdsc",3136 },3137 .pwrsts = PWRSTS_RET_ON,3138 .flags = VOTABLE,3139};3140 3141static struct gdsc gcc_usb30_sec_gdsc = {3142 .gdscr = 0x9e004,3143 .pd = {3144 .name = "gcc_usb30_sec_gdsc",3145 },3146 .pwrsts = PWRSTS_RET_ON,3147 .flags = VOTABLE,3148};3149 3150static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc = {3151 .gdscr = 0x7d050,3152 .pd = {3153 .name = "hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc",3154 },3155 .pwrsts = PWRSTS_OFF_ON,3156 .flags = VOTABLE,3157};3158 3159static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc = {3160 .gdscr = 0x7d058,3161 .pd = {3162 .name = "hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc",3163 },3164 .pwrsts = PWRSTS_OFF_ON,3165 .flags = VOTABLE,3166};3167 3168static struct gdsc hlos1_vote_mmnoc_mmu_tbu_sf0_gdsc = {3169 .gdscr = 0x7d054,3170 .pd = {3171 .name = "hlos1_vote_mmnoc_mmu_tbu_sf0_gdsc",3172 },3173 .pwrsts = PWRSTS_OFF_ON,3174 .flags = VOTABLE,3175};3176 3177static struct gdsc hlos1_vote_turing_mmu_tbu0_gdsc = {3178 .gdscr = 0x7d05c,3179 .pd = {3180 .name = "hlos1_vote_turing_mmu_tbu0_gdsc",3181 },3182 .pwrsts = PWRSTS_OFF_ON,3183 .flags = VOTABLE,3184};3185 3186static struct gdsc hlos1_vote_turing_mmu_tbu1_gdsc = {3187 .gdscr = 0x7d060,3188 .pd = {3189 .name = "hlos1_vote_turing_mmu_tbu1_gdsc",3190 },3191 .pwrsts = PWRSTS_OFF_ON,3192 .flags = VOTABLE,3193};3194 3195static struct clk_regmap *gcc_sc7280_clocks[] = {3196 [GCC_AGGRE_NOC_PCIE_0_AXI_CLK] = &gcc_aggre_noc_pcie_0_axi_clk.clkr,3197 [GCC_AGGRE_NOC_PCIE_1_AXI_CLK] = &gcc_aggre_noc_pcie_1_axi_clk.clkr,3198 [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,3199 [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,3200 [GCC_AGGRE_USB3_SEC_AXI_CLK] = &gcc_aggre_usb3_sec_axi_clk.clkr,3201 [GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,3202 [GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr,3203 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,3204 [GCC_CFG_NOC_USB3_SEC_AXI_CLK] = &gcc_cfg_noc_usb3_sec_axi_clk.clkr,3205 [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,3206 [GCC_DDRSS_PCIE_SF_CLK] = &gcc_ddrss_pcie_sf_clk.clkr,3207 [GCC_DISP_GPLL0_CLK_SRC] = &gcc_disp_gpll0_clk_src.clkr,3208 [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,3209 [GCC_DISP_SF_AXI_CLK] = &gcc_disp_sf_axi_clk.clkr,3210 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,3211 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,3212 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,3213 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,3214 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,3215 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,3216 [GCC_GPLL0] = &gcc_gpll0.clkr,3217 [GCC_GPLL0_OUT_EVEN] = &gcc_gpll0_out_even.clkr,3218 [GCC_GPLL0_OUT_ODD] = &gcc_gpll0_out_odd.clkr,3219 [GCC_GPLL1] = &gcc_gpll1.clkr,3220 [GCC_GPLL10] = &gcc_gpll10.clkr,3221 [GCC_GPLL4] = &gcc_gpll4.clkr,3222 [GCC_GPLL9] = &gcc_gpll9.clkr,3223 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,3224 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,3225 [GCC_GPU_IREF_EN] = &gcc_gpu_iref_en.clkr,3226 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,3227 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,3228 [GCC_PCIE0_PHY_RCHNG_CLK] = &gcc_pcie0_phy_rchng_clk.clkr,3229 [GCC_PCIE1_PHY_RCHNG_CLK] = &gcc_pcie1_phy_rchng_clk.clkr,3230 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,3231 [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,3232 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,3233 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,3234 [GCC_PCIE_0_PHY_RCHNG_CLK_SRC] = &gcc_pcie_0_phy_rchng_clk_src.clkr,3235 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,3236 [GCC_PCIE_0_PIPE_CLK_SRC] = &gcc_pcie_0_pipe_clk_src.clkr,3237 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,3238 [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,3239 [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,3240 [GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr,3241 [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,3242 [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,3243 [GCC_PCIE_1_PHY_RCHNG_CLK_SRC] = &gcc_pcie_1_phy_rchng_clk_src.clkr,3244 [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,3245 [GCC_PCIE_1_PIPE_CLK_SRC] = &gcc_pcie_1_pipe_clk_src.clkr,3246 [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,3247 [GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr,3248 [GCC_PCIE_THROTTLE_CORE_CLK] = &gcc_pcie_throttle_core_clk.clkr,3249 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,3250 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,3251 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,3252 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,3253 [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,3254 [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,3255 [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,3256 [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,3257 [GCC_QSPI_CNOC_PERIPH_AHB_CLK] = &gcc_qspi_cnoc_periph_ahb_clk.clkr,3258 [GCC_QSPI_CORE_CLK] = &gcc_qspi_core_clk.clkr,3259 [GCC_QSPI_CORE_CLK_SRC] = &gcc_qspi_core_clk_src.clkr,3260 [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,3261 [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,3262 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,3263 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,3264 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,3265 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,3266 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,3267 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,3268 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,3269 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,3270 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,3271 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,3272 [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,3273 [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,3274 [GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr,3275 [GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr,3276 [GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr,3277 [GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr,3278 [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,3279 [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,3280 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,3281 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,3282 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,3283 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,3284 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,3285 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,3286 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,3287 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,3288 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,3289 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,3290 [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,3291 [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,3292 [GCC_QUPV3_WRAP1_S6_CLK] = &gcc_qupv3_wrap1_s6_clk.clkr,3293 [GCC_QUPV3_WRAP1_S6_CLK_SRC] = &gcc_qupv3_wrap1_s6_clk_src.clkr,3294 [GCC_QUPV3_WRAP1_S7_CLK] = &gcc_qupv3_wrap1_s7_clk.clkr,3295 [GCC_QUPV3_WRAP1_S7_CLK_SRC] = &gcc_qupv3_wrap1_s7_clk_src.clkr,3296 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,3297 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,3298 [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,3299 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,3300 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,3301 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,3302 [GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,3303 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,3304 [GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr,3305 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,3306 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,3307 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,3308 [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,3309 [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,3310 [GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr,3311 [GCC_THROTTLE_PCIE_AHB_CLK] = &gcc_throttle_pcie_ahb_clk.clkr,3312 [GCC_TITAN_NRT_THROTTLE_CORE_CLK] =3313 &gcc_titan_nrt_throttle_core_clk.clkr,3314 [GCC_TITAN_RT_THROTTLE_CORE_CLK] = &gcc_titan_rt_throttle_core_clk.clkr,3315 [GCC_UFS_1_CLKREF_EN] = &gcc_ufs_1_clkref_en.clkr,3316 [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,3317 [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,3318 [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,3319 [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,3320 [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,3321 [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,3322 [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,3323 [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,3324 [GCC_UFS_PHY_RX_SYMBOL_0_CLK_SRC] =3325 &gcc_ufs_phy_rx_symbol_0_clk_src.clkr,3326 [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,3327 [GCC_UFS_PHY_RX_SYMBOL_1_CLK_SRC] =3328 &gcc_ufs_phy_rx_symbol_1_clk_src.clkr,3329 [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,3330 [GCC_UFS_PHY_TX_SYMBOL_0_CLK_SRC] =3331 &gcc_ufs_phy_tx_symbol_0_clk_src.clkr,3332 [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,3333 [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] =3334 &gcc_ufs_phy_unipro_core_clk_src.clkr,3335 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,3336 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,3337 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,3338 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] =3339 &gcc_usb30_prim_mock_utmi_clk_src.clkr,3340 [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] =3341 &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,3342 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,3343 [GCC_USB30_SEC_MASTER_CLK] = &gcc_usb30_sec_master_clk.clkr,3344 [GCC_USB30_SEC_MASTER_CLK_SRC] = &gcc_usb30_sec_master_clk_src.clkr,3345 [GCC_USB30_SEC_MOCK_UTMI_CLK] = &gcc_usb30_sec_mock_utmi_clk.clkr,3346 [GCC_USB30_SEC_MOCK_UTMI_CLK_SRC] =3347 &gcc_usb30_sec_mock_utmi_clk_src.clkr,3348 [GCC_USB30_SEC_MOCK_UTMI_POSTDIV_CLK_SRC] =3349 &gcc_usb30_sec_mock_utmi_postdiv_clk_src.clkr,3350 [GCC_USB30_SEC_SLEEP_CLK] = &gcc_usb30_sec_sleep_clk.clkr,3351 [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,3352 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,3353 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,3354 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,3355 [GCC_USB3_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb3_prim_phy_pipe_clk_src.clkr,3356 [GCC_USB3_SEC_PHY_AUX_CLK] = &gcc_usb3_sec_phy_aux_clk.clkr,3357 [GCC_USB3_SEC_PHY_AUX_CLK_SRC] = &gcc_usb3_sec_phy_aux_clk_src.clkr,3358 [GCC_USB3_SEC_PHY_COM_AUX_CLK] = &gcc_usb3_sec_phy_com_aux_clk.clkr,3359 [GCC_USB3_SEC_PHY_PIPE_CLK] = &gcc_usb3_sec_phy_pipe_clk.clkr,3360 [GCC_USB3_SEC_PHY_PIPE_CLK_SRC] = &gcc_usb3_sec_phy_pipe_clk_src.clkr,3361 [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,3362 [GCC_VIDEO_MVP_THROTTLE_CORE_CLK] =3363 &gcc_video_mvp_throttle_core_clk.clkr,3364 [GCC_CFG_NOC_LPASS_CLK] = &gcc_cfg_noc_lpass_clk.clkr,3365 [GCC_MSS_GPLL0_MAIN_DIV_CLK_SRC] = &gcc_mss_gpll0_main_div_clk_src.clkr,3366 [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,3367 [GCC_MSS_OFFLINE_AXI_CLK] = &gcc_mss_offline_axi_clk.clkr,3368 [GCC_MSS_SNOC_AXI_CLK] = &gcc_mss_snoc_axi_clk.clkr,3369 [GCC_MSS_Q6_MEMNOC_AXI_CLK] = &gcc_mss_q6_memnoc_axi_clk.clkr,3370 [GCC_MSS_Q6SS_BOOT_CLK_SRC] = &gcc_mss_q6ss_boot_clk_src.clkr,3371 [GCC_AGGRE_NOC_PCIE_TBU_CLK] = &gcc_aggre_noc_pcie_tbu_clk.clkr,3372 [GCC_AGGRE_NOC_PCIE_CENTER_SF_AXI_CLK] =3373 &gcc_aggre_noc_pcie_center_sf_axi_clk.clkr,3374 [GCC_PCIE_CLKREF_EN] = &gcc_pcie_clkref_en.clkr,3375 [GCC_EDP_CLKREF_EN] = &gcc_edp_clkref_en.clkr,3376 [GCC_SEC_CTRL_CLK_SRC] = &gcc_sec_ctrl_clk_src.clkr,3377 [GCC_WPSS_AHB_CLK] = &gcc_wpss_ahb_clk.clkr,3378 [GCC_WPSS_AHB_BDG_MST_CLK] = &gcc_wpss_ahb_bdg_mst_clk.clkr,3379 [GCC_WPSS_RSCP_CLK] = &gcc_wpss_rscp_clk.clkr,3380};3381 3382static struct gdsc *gcc_sc7280_gdscs[] = {3383 [GCC_PCIE_0_GDSC] = &gcc_pcie_0_gdsc,3384 [GCC_PCIE_1_GDSC] = &gcc_pcie_1_gdsc,3385 [GCC_UFS_PHY_GDSC] = &gcc_ufs_phy_gdsc,3386 [GCC_USB30_PRIM_GDSC] = &gcc_usb30_prim_gdsc,3387 [GCC_USB30_SEC_GDSC] = &gcc_usb30_sec_gdsc,3388 [HLOS1_VOTE_MMNOC_MMU_TBU_HF0_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc,3389 [HLOS1_VOTE_MMNOC_MMU_TBU_HF1_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc,3390 [HLOS1_VOTE_MMNOC_MMU_TBU_SF0_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_sf0_gdsc,3391 [HLOS1_VOTE_TURING_MMU_TBU0_GDSC] = &hlos1_vote_turing_mmu_tbu0_gdsc,3392 [HLOS1_VOTE_TURING_MMU_TBU1_GDSC] = &hlos1_vote_turing_mmu_tbu1_gdsc,3393};3394 3395static const struct qcom_reset_map gcc_sc7280_resets[] = {3396 [GCC_PCIE_0_BCR] = { 0x6b000 },3397 [GCC_PCIE_0_PHY_BCR] = { 0x6c01c },3398 [GCC_PCIE_1_BCR] = { 0x8d000 },3399 [GCC_PCIE_1_PHY_BCR] = { 0x8e01c },3400 [GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 },3401 [GCC_QUSB2PHY_SEC_BCR] = { 0x12004 },3402 [GCC_SDCC1_BCR] = { 0x75000 },3403 [GCC_SDCC2_BCR] = { 0x14000 },3404 [GCC_SDCC4_BCR] = { 0x16000 },3405 [GCC_UFS_PHY_BCR] = { 0x77000 },3406 [GCC_USB30_PRIM_BCR] = { 0xf000 },3407 [GCC_USB30_SEC_BCR] = { 0x9e000 },3408 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x50008 },3409 [GCC_USB3_PHY_PRIM_BCR] = { 0x50000 },3410 [GCC_USB3PHY_PHY_PRIM_BCR] = { 0x50004 },3411 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 },3412};3413 3414static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {3415 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),3416 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),3417 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),3418 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),3419 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),3420 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),3421 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s6_clk_src),3422 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s7_clk_src),3423 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),3424 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),3425 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),3426 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),3427 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),3428 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),3429 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src),3430 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s7_clk_src),3431};3432 3433static const struct regmap_config gcc_sc7280_regmap_config = {3434 .reg_bits = 32,3435 .reg_stride = 4,3436 .val_bits = 32,3437 .max_register = 0x9f128,3438 .fast_io = true,3439};3440 3441static const struct qcom_cc_desc gcc_sc7280_desc = {3442 .config = &gcc_sc7280_regmap_config,3443 .clks = gcc_sc7280_clocks,3444 .num_clks = ARRAY_SIZE(gcc_sc7280_clocks),3445 .resets = gcc_sc7280_resets,3446 .num_resets = ARRAY_SIZE(gcc_sc7280_resets),3447 .gdscs = gcc_sc7280_gdscs,3448 .num_gdscs = ARRAY_SIZE(gcc_sc7280_gdscs),3449};3450 3451static const struct of_device_id gcc_sc7280_match_table[] = {3452 { .compatible = "qcom,gcc-sc7280" },3453 { }3454};3455MODULE_DEVICE_TABLE(of, gcc_sc7280_match_table);3456 3457static int gcc_sc7280_probe(struct platform_device *pdev)3458{3459 struct regmap *regmap;3460 int ret;3461 3462 regmap = qcom_cc_map(pdev, &gcc_sc7280_desc);3463 if (IS_ERR(regmap))3464 return PTR_ERR(regmap);3465 3466 /* Keep some clocks always-on */3467 qcom_branch_set_clk_en(regmap, 0x26004);/* GCC_CAMERA_AHB_CLK */3468 qcom_branch_set_clk_en(regmap, 0x26028);/* GCC_CAMERA_XO_CLK */3469 qcom_branch_set_clk_en(regmap, 0x27004);/* GCC_DISP_AHB_CLK */3470 qcom_branch_set_clk_en(regmap, 0x2701c);/* GCC_DISP_XO_CLK */3471 qcom_branch_set_clk_en(regmap, 0x28004);/* GCC_VIDEO_AHB_CLK */3472 qcom_branch_set_clk_en(regmap, 0x28014);/* GCC_VIDEO_XO_CLK */3473 qcom_branch_set_clk_en(regmap, 0x71004);/* GCC_GPU_CFG_AHB_CLK */3474 regmap_update_bits(regmap, 0x7100C, BIT(13), BIT(13));3475 3476 /* FORCE_MEM_CORE_ON for ufs phy ice core clocks */3477 qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_ice_core_clk, true);3478 3479 ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,3480 ARRAY_SIZE(gcc_dfs_clocks));3481 if (ret)3482 return ret;3483 3484 return qcom_cc_really_probe(&pdev->dev, &gcc_sc7280_desc, regmap);3485}3486 3487static struct platform_driver gcc_sc7280_driver = {3488 .probe = gcc_sc7280_probe,3489 .driver = {3490 .name = "gcc-sc7280",3491 .of_match_table = gcc_sc7280_match_table,3492 },3493};3494 3495static int __init gcc_sc7280_init(void)3496{3497 return platform_driver_register(&gcc_sc7280_driver);3498}3499subsys_initcall(gcc_sc7280_init);3500 3501static void __exit gcc_sc7280_exit(void)3502{3503 platform_driver_unregister(&gcc_sc7280_driver);3504}3505module_exit(gcc_sc7280_exit);3506 3507MODULE_DESCRIPTION("QTI GCC SC7280 Driver");3508MODULE_LICENSE("GPL v2");3509