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