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