Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

clk: qcom: Add QDU1000 and QRU1000 GCC support

Add Global Clock Controller (GCC) support for QDU1000 and QRU1000 SoCs.

Signed-off-by: Taniya Das <quic_tdas@quicinc.com>
Signed-off-by: Melody Olvera <quic_molvera@quicinc.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
[bjorn: Made gcc_pcie_0_pipe_clk_src use clk_regmap_phy_mux_ops]
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
Link: https://lore.kernel.org/r/20230112204446.30236-3-quic_molvera@quicinc.com

authored by

Taniya Das and committed by
Bjorn Andersson
1c9efb0b f0a67021

+2662
+8
drivers/clk/qcom/Kconfig
··· 578 578 Say Y if you want to use the Q6SSTOP branch clocks of the WCSS clock 579 579 controller to reset the Q6SSTOP subsystem. 580 580 581 + config QDU_GCC_1000 582 + tristate "QDU1000/QRU1000 Global Clock Controller" 583 + select QCOM_GDSC 584 + help 585 + Support for the global clock controller on QDU1000 and 586 + QRU1000 devices. Say Y if you want to use peripheral 587 + devices such as UART, SPI, I2C, USB, SD, PCIe, etc. 588 + 581 589 config SDM_GCC_845 582 590 tristate "SDM845/SDM670 Global Clock Controller" 583 591 select QCOM_GDSC
+1
drivers/clk/qcom/Makefile
··· 62 62 obj-$(CONFIG_QCS_GCC_404) += gcc-qcs404.o 63 63 obj-$(CONFIG_QCS_Q6SSTOP_404) += q6sstop-qcs404.o 64 64 obj-$(CONFIG_QCS_TURING_404) += turingcc-qcs404.o 65 + obj-$(CONFIG_QDU_GCC_1000) += gcc-qdu1000.o 65 66 obj-$(CONFIG_SC_CAMCC_7180) += camcc-sc7180.o 66 67 obj-$(CONFIG_SC_CAMCC_7280) += camcc-sc7280.o 67 68 obj-$(CONFIG_SC_DISPCC_7180) += dispcc-sc7180.o
+2653
drivers/clk/qcom/gcc-qdu1000.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + /* 3 + * Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved. 4 + */ 5 + 6 + #include <linux/clk-provider.h> 7 + #include <linux/module.h> 8 + #include <linux/of_device.h> 9 + #include <linux/regmap.h> 10 + 11 + #include <dt-bindings/clock/qcom,qdu1000-gcc.h> 12 + 13 + #include "clk-alpha-pll.h" 14 + #include "clk-branch.h" 15 + #include "clk-rcg.h" 16 + #include "clk-regmap.h" 17 + #include "clk-regmap-divider.h" 18 + #include "clk-regmap-mux.h" 19 + #include "clk-regmap-phy-mux.h" 20 + #include "reset.h" 21 + 22 + enum { 23 + P_BI_TCXO, 24 + P_GCC_GPLL0_OUT_EVEN, 25 + P_GCC_GPLL0_OUT_MAIN, 26 + P_GCC_GPLL1_OUT_MAIN, 27 + P_GCC_GPLL2_OUT_MAIN, 28 + P_GCC_GPLL3_OUT_MAIN, 29 + P_GCC_GPLL4_OUT_MAIN, 30 + P_GCC_GPLL5_OUT_MAIN, 31 + P_GCC_GPLL6_OUT_MAIN, 32 + P_GCC_GPLL7_OUT_MAIN, 33 + P_GCC_GPLL8_OUT_MAIN, 34 + P_PCIE_0_PHY_AUX_CLK, 35 + P_PCIE_0_PIPE_CLK, 36 + P_SLEEP_CLK, 37 + P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 38 + }; 39 + 40 + enum { 41 + DT_TCXO_IDX, 42 + DT_SLEEP_CLK_IDX, 43 + DT_PCIE_0_PIPE_CLK_IDX, 44 + DT_PCIE_0_PHY_AUX_CLK_IDX, 45 + DT_USB3_PHY_WRAPPER_PIPE_CLK_IDX, 46 + }; 47 + 48 + static struct clk_alpha_pll gcc_gpll0 = { 49 + .offset = 0x0, 50 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 51 + .clkr = { 52 + .enable_reg = 0x62018, 53 + .enable_mask = BIT(0), 54 + .hw.init = &(const struct clk_init_data) { 55 + .name = "gcc_gpll0", 56 + .parent_data = &(const struct clk_parent_data) { 57 + .index = DT_TCXO_IDX, 58 + }, 59 + .num_parents = 1, 60 + .ops = &clk_alpha_pll_fixed_lucid_evo_ops, 61 + }, 62 + }, 63 + }; 64 + 65 + static const struct clk_div_table post_div_table_gcc_gpll0_out_even[] = { 66 + { 0x1, 2 } 67 + }; 68 + 69 + static struct clk_alpha_pll_postdiv gcc_gpll0_out_even = { 70 + .offset = 0x0, 71 + .post_div_shift = 10, 72 + .post_div_table = post_div_table_gcc_gpll0_out_even, 73 + .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even), 74 + .width = 4, 75 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 76 + .clkr.hw.init = &(const struct clk_init_data) { 77 + .name = "gcc_gpll0_out_even", 78 + .parent_hws = (const struct clk_hw*[]) { 79 + &gcc_gpll0.clkr.hw, 80 + }, 81 + .num_parents = 1, 82 + .ops = &clk_alpha_pll_postdiv_lucid_evo_ops, 83 + }, 84 + }; 85 + 86 + static struct clk_alpha_pll gcc_gpll1 = { 87 + .offset = 0x1000, 88 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 89 + .clkr = { 90 + .enable_reg = 0x62018, 91 + .enable_mask = BIT(1), 92 + .hw.init = &(const struct clk_init_data) { 93 + .name = "gcc_gpll1", 94 + .parent_data = &(const struct clk_parent_data) { 95 + .index = DT_TCXO_IDX, 96 + }, 97 + .num_parents = 1, 98 + .ops = &clk_alpha_pll_fixed_lucid_evo_ops, 99 + }, 100 + }, 101 + }; 102 + 103 + static struct clk_alpha_pll_postdiv gcc_gpll1_out_even = { 104 + .offset = 0x1000, 105 + .post_div_shift = 10, 106 + .post_div_table = post_div_table_gcc_gpll0_out_even, 107 + .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even), 108 + .width = 4, 109 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 110 + .clkr.hw.init = &(const struct clk_init_data) { 111 + .name = "gcc_gpll1_out_even", 112 + .parent_hws = (const struct clk_hw*[]) { 113 + &gcc_gpll1.clkr.hw, 114 + }, 115 + .num_parents = 1, 116 + .ops = &clk_alpha_pll_postdiv_lucid_evo_ops, 117 + }, 118 + }; 119 + 120 + static struct clk_alpha_pll gcc_gpll2 = { 121 + .offset = 0x2000, 122 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 123 + .clkr = { 124 + .enable_reg = 0x62018, 125 + .enable_mask = BIT(2), 126 + .hw.init = &(const struct clk_init_data) { 127 + .name = "gcc_gpll2", 128 + .parent_data = &(const struct clk_parent_data) { 129 + .index = DT_TCXO_IDX, 130 + }, 131 + .num_parents = 1, 132 + .ops = &clk_alpha_pll_fixed_lucid_evo_ops, 133 + }, 134 + }, 135 + }; 136 + 137 + static struct clk_alpha_pll_postdiv gcc_gpll2_out_even = { 138 + .offset = 0x2000, 139 + .post_div_shift = 10, 140 + .post_div_table = post_div_table_gcc_gpll0_out_even, 141 + .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even), 142 + .width = 4, 143 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 144 + .clkr.hw.init = &(const struct clk_init_data) { 145 + .name = "gcc_gpll2_out_even", 146 + .parent_hws = (const struct clk_hw*[]) { 147 + &gcc_gpll2.clkr.hw, 148 + }, 149 + .num_parents = 1, 150 + .ops = &clk_alpha_pll_postdiv_lucid_evo_ops, 151 + }, 152 + }; 153 + 154 + static struct clk_alpha_pll gcc_gpll3 = { 155 + .offset = 0x3000, 156 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 157 + .clkr = { 158 + .enable_reg = 0x62018, 159 + .enable_mask = BIT(3), 160 + .hw.init = &(const struct clk_init_data) { 161 + .name = "gcc_gpll3", 162 + .parent_data = &(const struct clk_parent_data) { 163 + .index = DT_TCXO_IDX, 164 + }, 165 + .num_parents = 1, 166 + .ops = &clk_alpha_pll_fixed_lucid_evo_ops, 167 + }, 168 + }, 169 + }; 170 + 171 + static struct clk_alpha_pll gcc_gpll4 = { 172 + .offset = 0x4000, 173 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 174 + .clkr = { 175 + .enable_reg = 0x62018, 176 + .enable_mask = BIT(4), 177 + .hw.init = &(const struct clk_init_data) { 178 + .name = "gcc_gpll4", 179 + .parent_data = &(const struct clk_parent_data) { 180 + .index = DT_TCXO_IDX, 181 + }, 182 + .num_parents = 1, 183 + .ops = &clk_alpha_pll_fixed_lucid_evo_ops, 184 + }, 185 + }, 186 + }; 187 + 188 + static struct clk_alpha_pll gcc_gpll5 = { 189 + .offset = 0x5000, 190 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 191 + .clkr = { 192 + .enable_reg = 0x62018, 193 + .enable_mask = BIT(5), 194 + .hw.init = &(const struct clk_init_data) { 195 + .name = "gcc_gpll5", 196 + .parent_data = &(const struct clk_parent_data) { 197 + .index = DT_TCXO_IDX, 198 + }, 199 + .num_parents = 1, 200 + .ops = &clk_alpha_pll_fixed_lucid_evo_ops, 201 + }, 202 + }, 203 + }; 204 + 205 + static struct clk_alpha_pll_postdiv gcc_gpll5_out_even = { 206 + .offset = 0x5000, 207 + .post_div_shift = 10, 208 + .post_div_table = post_div_table_gcc_gpll0_out_even, 209 + .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even), 210 + .width = 4, 211 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 212 + .clkr.hw.init = &(const struct clk_init_data) { 213 + .name = "gcc_gpll5_out_even", 214 + .parent_hws = (const struct clk_hw*[]) { 215 + &gcc_gpll5.clkr.hw, 216 + }, 217 + .num_parents = 1, 218 + .ops = &clk_alpha_pll_postdiv_lucid_evo_ops, 219 + }, 220 + }; 221 + 222 + static struct clk_alpha_pll gcc_gpll6 = { 223 + .offset = 0x6000, 224 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 225 + .clkr = { 226 + .enable_reg = 0x62018, 227 + .enable_mask = BIT(6), 228 + .hw.init = &(const struct clk_init_data) { 229 + .name = "gcc_gpll6", 230 + .parent_data = &(const struct clk_parent_data) { 231 + .index = DT_TCXO_IDX, 232 + }, 233 + .num_parents = 1, 234 + .ops = &clk_alpha_pll_fixed_lucid_evo_ops, 235 + }, 236 + }, 237 + }; 238 + 239 + static struct clk_alpha_pll gcc_gpll7 = { 240 + .offset = 0x7000, 241 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 242 + .clkr = { 243 + .enable_reg = 0x62018, 244 + .enable_mask = BIT(7), 245 + .hw.init = &(const struct clk_init_data) { 246 + .name = "gcc_gpll7", 247 + .parent_data = &(const struct clk_parent_data) { 248 + .index = DT_TCXO_IDX, 249 + }, 250 + .num_parents = 1, 251 + .ops = &clk_alpha_pll_fixed_lucid_evo_ops, 252 + }, 253 + }, 254 + }; 255 + 256 + static struct clk_alpha_pll gcc_gpll8 = { 257 + .offset = 0x8000, 258 + .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO], 259 + .clkr = { 260 + .enable_reg = 0x62018, 261 + .enable_mask = BIT(8), 262 + .hw.init = &(const struct clk_init_data) { 263 + .name = "gcc_gpll8", 264 + .parent_data = &(const struct clk_parent_data) { 265 + .index = DT_TCXO_IDX, 266 + }, 267 + .num_parents = 1, 268 + .ops = &clk_alpha_pll_fixed_lucid_evo_ops, 269 + }, 270 + }, 271 + }; 272 + 273 + static const struct parent_map gcc_parent_map_0[] = { 274 + { P_BI_TCXO, 0 }, 275 + { P_GCC_GPLL0_OUT_MAIN, 1 }, 276 + { P_GCC_GPLL0_OUT_EVEN, 6 }, 277 + }; 278 + 279 + static const struct clk_parent_data gcc_parent_data_0[] = { 280 + { .index = DT_TCXO_IDX }, 281 + { .hw = &gcc_gpll0.clkr.hw }, 282 + { .hw = &gcc_gpll0_out_even.clkr.hw }, 283 + }; 284 + 285 + static const struct parent_map gcc_parent_map_1[] = { 286 + { P_BI_TCXO, 0 }, 287 + { P_GCC_GPLL0_OUT_MAIN, 1 }, 288 + { P_SLEEP_CLK, 5 }, 289 + { P_GCC_GPLL0_OUT_EVEN, 6 }, 290 + }; 291 + 292 + static const struct clk_parent_data gcc_parent_data_1[] = { 293 + { .index = DT_TCXO_IDX }, 294 + { .hw = &gcc_gpll0.clkr.hw }, 295 + { .index = DT_SLEEP_CLK_IDX }, 296 + { .hw = &gcc_gpll0_out_even.clkr.hw }, 297 + }; 298 + 299 + static const struct parent_map gcc_parent_map_2[] = { 300 + { P_BI_TCXO, 0 }, 301 + { P_GCC_GPLL0_OUT_MAIN, 1 }, 302 + { P_GCC_GPLL5_OUT_MAIN, 3 }, 303 + { P_GCC_GPLL4_OUT_MAIN, 5 }, 304 + }; 305 + 306 + static const struct clk_parent_data gcc_parent_data_2[] = { 307 + { .index = DT_TCXO_IDX }, 308 + { .hw = &gcc_gpll0.clkr.hw }, 309 + { .hw = &gcc_gpll5.clkr.hw }, 310 + { .hw = &gcc_gpll4.clkr.hw }, 311 + }; 312 + 313 + static const struct parent_map gcc_parent_map_3[] = { 314 + { P_BI_TCXO, 0 }, 315 + { P_SLEEP_CLK, 5 }, 316 + }; 317 + 318 + static const struct clk_parent_data gcc_parent_data_3[] = { 319 + { .index = DT_TCXO_IDX }, 320 + { .index = DT_SLEEP_CLK_IDX }, 321 + }; 322 + 323 + static const struct parent_map gcc_parent_map_4[] = { 324 + { P_BI_TCXO, 0 }, 325 + { P_GCC_GPLL0_OUT_MAIN, 1 }, 326 + { P_GCC_GPLL2_OUT_MAIN, 2 }, 327 + { P_GCC_GPLL5_OUT_MAIN, 3 }, 328 + { P_GCC_GPLL1_OUT_MAIN, 4 }, 329 + { P_GCC_GPLL4_OUT_MAIN, 5 }, 330 + { P_GCC_GPLL3_OUT_MAIN, 6 }, 331 + }; 332 + 333 + static const struct clk_parent_data gcc_parent_data_4[] = { 334 + { .index = DT_TCXO_IDX }, 335 + { .hw = &gcc_gpll0.clkr.hw }, 336 + { .hw = &gcc_gpll2.clkr.hw }, 337 + { .hw = &gcc_gpll5.clkr.hw }, 338 + { .hw = &gcc_gpll1.clkr.hw }, 339 + { .hw = &gcc_gpll4.clkr.hw }, 340 + { .hw = &gcc_gpll3.clkr.hw }, 341 + }; 342 + 343 + static const struct parent_map gcc_parent_map_5[] = { 344 + { P_BI_TCXO, 0 }, 345 + { P_GCC_GPLL0_OUT_MAIN, 1 }, 346 + { P_GCC_GPLL2_OUT_MAIN, 2 }, 347 + { P_GCC_GPLL6_OUT_MAIN, 3 }, 348 + { P_GCC_GPLL1_OUT_MAIN, 4 }, 349 + { P_GCC_GPLL4_OUT_MAIN, 5 }, 350 + { P_GCC_GPLL3_OUT_MAIN, 6 }, 351 + }; 352 + 353 + static const struct clk_parent_data gcc_parent_data_5[] = { 354 + { .index = DT_TCXO_IDX }, 355 + { .hw = &gcc_gpll0.clkr.hw }, 356 + { .hw = &gcc_gpll2.clkr.hw }, 357 + { .hw = &gcc_gpll6.clkr.hw }, 358 + { .hw = &gcc_gpll1.clkr.hw }, 359 + { .hw = &gcc_gpll4.clkr.hw }, 360 + { .hw = &gcc_gpll3.clkr.hw }, 361 + }; 362 + 363 + static const struct parent_map gcc_parent_map_6[] = { 364 + { P_PCIE_0_PHY_AUX_CLK, 0 }, 365 + { P_BI_TCXO, 2 }, 366 + }; 367 + 368 + static const struct clk_parent_data gcc_parent_data_6[] = { 369 + { .index = DT_PCIE_0_PHY_AUX_CLK_IDX }, 370 + { .index = DT_TCXO_IDX }, 371 + }; 372 + 373 + static const struct parent_map gcc_parent_map_7[] = { 374 + { P_PCIE_0_PIPE_CLK, 0 }, 375 + { P_BI_TCXO, 2 }, 376 + }; 377 + 378 + static const struct clk_parent_data gcc_parent_data_7[] = { 379 + { .index = DT_PCIE_0_PIPE_CLK_IDX }, 380 + { .index = DT_TCXO_IDX }, 381 + }; 382 + 383 + static const struct parent_map gcc_parent_map_8[] = { 384 + { P_BI_TCXO, 0 }, 385 + { P_GCC_GPLL0_OUT_MAIN, 1 }, 386 + { P_GCC_GPLL8_OUT_MAIN, 2 }, 387 + { P_GCC_GPLL5_OUT_MAIN, 3 }, 388 + { P_GCC_GPLL4_OUT_MAIN, 5 }, 389 + }; 390 + 391 + static const struct clk_parent_data gcc_parent_data_8[] = { 392 + { .index = DT_TCXO_IDX }, 393 + { .hw = &gcc_gpll0.clkr.hw }, 394 + { .hw = &gcc_gpll8.clkr.hw }, 395 + { .hw = &gcc_gpll5.clkr.hw }, 396 + { .hw = &gcc_gpll4.clkr.hw }, 397 + }; 398 + 399 + static const struct parent_map gcc_parent_map_9[] = { 400 + { P_BI_TCXO, 0 }, 401 + { P_GCC_GPLL0_OUT_MAIN, 1 }, 402 + { P_GCC_GPLL2_OUT_MAIN, 2 }, 403 + { P_GCC_GPLL5_OUT_MAIN, 3 }, 404 + { P_GCC_GPLL7_OUT_MAIN, 4 }, 405 + { P_GCC_GPLL4_OUT_MAIN, 5 }, 406 + }; 407 + 408 + static const struct clk_parent_data gcc_parent_data_9[] = { 409 + { .index = DT_TCXO_IDX }, 410 + { .hw = &gcc_gpll0.clkr.hw }, 411 + { .hw = &gcc_gpll2.clkr.hw }, 412 + { .hw = &gcc_gpll5.clkr.hw }, 413 + { .hw = &gcc_gpll7.clkr.hw }, 414 + { .hw = &gcc_gpll4.clkr.hw }, 415 + }; 416 + 417 + static const struct parent_map gcc_parent_map_10[] = { 418 + { P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 0 }, 419 + { P_BI_TCXO, 2 }, 420 + }; 421 + 422 + static const struct clk_parent_data gcc_parent_data_10[] = { 423 + { .index = DT_USB3_PHY_WRAPPER_PIPE_CLK_IDX }, 424 + { .index = DT_TCXO_IDX }, 425 + }; 426 + 427 + static struct clk_regmap_mux gcc_pcie_0_phy_aux_clk_src = { 428 + .reg = 0x9d080, 429 + .shift = 0, 430 + .width = 2, 431 + .parent_map = gcc_parent_map_6, 432 + .clkr = { 433 + .hw.init = &(const struct clk_init_data) { 434 + .name = "gcc_pcie_0_phy_aux_clk_src", 435 + .parent_data = gcc_parent_data_6, 436 + .num_parents = ARRAY_SIZE(gcc_parent_data_6), 437 + .ops = &clk_regmap_mux_closest_ops, 438 + }, 439 + }, 440 + }; 441 + 442 + static struct clk_regmap_mux gcc_pcie_0_pipe_clk_src = { 443 + .reg = 0x9d064, 444 + .shift = 0, 445 + .width = 2, 446 + .parent_map = gcc_parent_map_7, 447 + .clkr = { 448 + .hw.init = &(const struct clk_init_data) { 449 + .name = "gcc_pcie_0_pipe_clk_src", 450 + .parent_data = gcc_parent_data_7, 451 + .num_parents = ARRAY_SIZE(gcc_parent_data_7), 452 + .ops = &clk_regmap_phy_mux_ops, 453 + }, 454 + }, 455 + }; 456 + 457 + static struct clk_regmap_mux gcc_usb3_prim_phy_pipe_clk_src = { 458 + .reg = 0x4906c, 459 + .shift = 0, 460 + .width = 2, 461 + .parent_map = gcc_parent_map_10, 462 + .clkr = { 463 + .hw.init = &(const struct clk_init_data) { 464 + .name = "gcc_usb3_prim_phy_pipe_clk_src", 465 + .parent_data = gcc_parent_data_10, 466 + .num_parents = ARRAY_SIZE(gcc_parent_data_10), 467 + .ops = &clk_regmap_mux_closest_ops, 468 + }, 469 + }, 470 + }; 471 + 472 + static const struct freq_tbl ftbl_gcc_aggre_noc_ecpri_dma_clk_src[] = { 473 + F(466500000, P_GCC_GPLL5_OUT_MAIN, 2, 0, 0), 474 + F(500000000, P_GCC_GPLL2_OUT_MAIN, 2, 0, 0), 475 + { } 476 + }; 477 + 478 + static struct clk_rcg2 gcc_aggre_noc_ecpri_dma_clk_src = { 479 + .cmd_rcgr = 0x92020, 480 + .mnd_width = 0, 481 + .hid_width = 5, 482 + .parent_map = gcc_parent_map_4, 483 + .freq_tbl = ftbl_gcc_aggre_noc_ecpri_dma_clk_src, 484 + .clkr.hw.init = &(const struct clk_init_data) { 485 + .name = "gcc_aggre_noc_ecpri_dma_clk_src", 486 + .parent_data = gcc_parent_data_4, 487 + .num_parents = ARRAY_SIZE(gcc_parent_data_4), 488 + .ops = &clk_rcg2_ops, 489 + }, 490 + }; 491 + 492 + static const struct freq_tbl ftbl_gcc_aggre_noc_ecpri_gsi_clk_src[] = { 493 + F(250000000, P_GCC_GPLL2_OUT_MAIN, 4, 0, 0), 494 + F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0), 495 + { } 496 + }; 497 + 498 + static struct clk_rcg2 gcc_aggre_noc_ecpri_gsi_clk_src = { 499 + .cmd_rcgr = 0x92038, 500 + .mnd_width = 0, 501 + .hid_width = 5, 502 + .parent_map = gcc_parent_map_5, 503 + .freq_tbl = ftbl_gcc_aggre_noc_ecpri_gsi_clk_src, 504 + .clkr.hw.init = &(const struct clk_init_data) { 505 + .name = "gcc_aggre_noc_ecpri_gsi_clk_src", 506 + .parent_data = gcc_parent_data_5, 507 + .num_parents = ARRAY_SIZE(gcc_parent_data_5), 508 + .ops = &clk_rcg2_ops, 509 + }, 510 + }; 511 + 512 + static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = { 513 + F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0), 514 + { } 515 + }; 516 + 517 + static struct clk_rcg2 gcc_gp1_clk_src = { 518 + .cmd_rcgr = 0x74004, 519 + .mnd_width = 16, 520 + .hid_width = 5, 521 + .parent_map = gcc_parent_map_1, 522 + .freq_tbl = ftbl_gcc_gp1_clk_src, 523 + .clkr.hw.init = &(const struct clk_init_data) { 524 + .name = "gcc_gp1_clk_src", 525 + .parent_data = gcc_parent_data_1, 526 + .num_parents = ARRAY_SIZE(gcc_parent_data_1), 527 + .ops = &clk_rcg2_ops, 528 + }, 529 + }; 530 + 531 + static struct clk_rcg2 gcc_gp2_clk_src = { 532 + .cmd_rcgr = 0x75004, 533 + .mnd_width = 16, 534 + .hid_width = 5, 535 + .parent_map = gcc_parent_map_1, 536 + .freq_tbl = ftbl_gcc_gp1_clk_src, 537 + .clkr.hw.init = &(const struct clk_init_data) { 538 + .name = "gcc_gp2_clk_src", 539 + .parent_data = gcc_parent_data_1, 540 + .num_parents = ARRAY_SIZE(gcc_parent_data_1), 541 + .ops = &clk_rcg2_ops, 542 + }, 543 + }; 544 + 545 + static struct clk_rcg2 gcc_gp3_clk_src = { 546 + .cmd_rcgr = 0x76004, 547 + .mnd_width = 16, 548 + .hid_width = 5, 549 + .parent_map = gcc_parent_map_1, 550 + .freq_tbl = ftbl_gcc_gp1_clk_src, 551 + .clkr.hw.init = &(const struct clk_init_data) { 552 + .name = "gcc_gp3_clk_src", 553 + .parent_data = gcc_parent_data_1, 554 + .num_parents = ARRAY_SIZE(gcc_parent_data_1), 555 + .ops = &clk_rcg2_ops, 556 + }, 557 + }; 558 + 559 + static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = { 560 + F(19200000, P_BI_TCXO, 1, 0, 0), 561 + { } 562 + }; 563 + 564 + static struct clk_rcg2 gcc_pcie_0_aux_clk_src = { 565 + .cmd_rcgr = 0x9d068, 566 + .mnd_width = 16, 567 + .hid_width = 5, 568 + .parent_map = gcc_parent_map_3, 569 + .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 570 + .clkr.hw.init = &(const struct clk_init_data) { 571 + .name = "gcc_pcie_0_aux_clk_src", 572 + .parent_data = gcc_parent_data_3, 573 + .num_parents = ARRAY_SIZE(gcc_parent_data_3), 574 + .ops = &clk_rcg2_ops, 575 + }, 576 + }; 577 + 578 + static const struct freq_tbl ftbl_gcc_pcie_0_phy_rchng_clk_src[] = { 579 + F(19200000, P_BI_TCXO, 1, 0, 0), 580 + F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0), 581 + { } 582 + }; 583 + 584 + static struct clk_rcg2 gcc_pcie_0_phy_rchng_clk_src = { 585 + .cmd_rcgr = 0x9d04c, 586 + .mnd_width = 0, 587 + .hid_width = 5, 588 + .parent_map = gcc_parent_map_0, 589 + .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src, 590 + .clkr.hw.init = &(const struct clk_init_data) { 591 + .name = "gcc_pcie_0_phy_rchng_clk_src", 592 + .parent_data = gcc_parent_data_0, 593 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 594 + .ops = &clk_rcg2_ops, 595 + }, 596 + }; 597 + 598 + static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = { 599 + F(60000000, P_GCC_GPLL0_OUT_MAIN, 10, 0, 0), 600 + { } 601 + }; 602 + 603 + static struct clk_rcg2 gcc_pdm2_clk_src = { 604 + .cmd_rcgr = 0x43010, 605 + .mnd_width = 0, 606 + .hid_width = 5, 607 + .parent_map = gcc_parent_map_0, 608 + .freq_tbl = ftbl_gcc_pdm2_clk_src, 609 + .clkr.hw.init = &(const struct clk_init_data) { 610 + .name = "gcc_pdm2_clk_src", 611 + .parent_data = gcc_parent_data_0, 612 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 613 + .ops = &clk_rcg2_ops, 614 + }, 615 + }; 616 + 617 + static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = { 618 + F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625), 619 + F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625), 620 + F(19200000, P_BI_TCXO, 1, 0, 0), 621 + F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625), 622 + F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75), 623 + F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25), 624 + F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75), 625 + F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15), 626 + F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25), 627 + F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0), 628 + { } 629 + }; 630 + 631 + static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = { 632 + .name = "gcc_qupv3_wrap0_s0_clk_src", 633 + .parent_data = gcc_parent_data_0, 634 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 635 + .ops = &clk_rcg2_ops, 636 + }; 637 + 638 + static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = { 639 + .cmd_rcgr = 0x27154, 640 + .mnd_width = 16, 641 + .hid_width = 5, 642 + .parent_map = gcc_parent_map_0, 643 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 644 + .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init, 645 + }; 646 + 647 + static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = { 648 + .name = "gcc_qupv3_wrap0_s1_clk_src", 649 + .parent_data = gcc_parent_data_0, 650 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 651 + .ops = &clk_rcg2_ops, 652 + }; 653 + 654 + static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = { 655 + .cmd_rcgr = 0x27288, 656 + .mnd_width = 16, 657 + .hid_width = 5, 658 + .parent_map = gcc_parent_map_0, 659 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 660 + .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init, 661 + }; 662 + 663 + static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = { 664 + .name = "gcc_qupv3_wrap0_s2_clk_src", 665 + .parent_data = gcc_parent_data_0, 666 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 667 + .ops = &clk_rcg2_ops, 668 + }; 669 + 670 + static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = { 671 + .cmd_rcgr = 0x273bc, 672 + .mnd_width = 16, 673 + .hid_width = 5, 674 + .parent_map = gcc_parent_map_0, 675 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 676 + .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init, 677 + }; 678 + 679 + static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = { 680 + .name = "gcc_qupv3_wrap0_s3_clk_src", 681 + .parent_data = gcc_parent_data_0, 682 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 683 + .ops = &clk_rcg2_ops, 684 + }; 685 + 686 + static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = { 687 + .cmd_rcgr = 0x274f0, 688 + .mnd_width = 16, 689 + .hid_width = 5, 690 + .parent_map = gcc_parent_map_0, 691 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 692 + .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init, 693 + }; 694 + 695 + static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = { 696 + .name = "gcc_qupv3_wrap0_s4_clk_src", 697 + .parent_data = gcc_parent_data_0, 698 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 699 + .ops = &clk_rcg2_ops, 700 + }; 701 + 702 + static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = { 703 + .cmd_rcgr = 0x27624, 704 + .mnd_width = 16, 705 + .hid_width = 5, 706 + .parent_map = gcc_parent_map_0, 707 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 708 + .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init, 709 + }; 710 + 711 + static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s5_clk_src[] = { 712 + F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0), 713 + { } 714 + }; 715 + 716 + static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = { 717 + .name = "gcc_qupv3_wrap0_s5_clk_src", 718 + .parent_data = gcc_parent_data_0, 719 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 720 + .ops = &clk_rcg2_ops, 721 + }; 722 + 723 + static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = { 724 + .cmd_rcgr = 0x27758, 725 + .mnd_width = 16, 726 + .hid_width = 5, 727 + .parent_map = gcc_parent_map_0, 728 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s5_clk_src, 729 + .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init, 730 + }; 731 + 732 + static struct clk_init_data gcc_qupv3_wrap0_s6_clk_src_init = { 733 + .name = "gcc_qupv3_wrap0_s6_clk_src", 734 + .parent_data = gcc_parent_data_0, 735 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 736 + .ops = &clk_rcg2_ops, 737 + }; 738 + 739 + static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = { 740 + .cmd_rcgr = 0x2788c, 741 + .mnd_width = 16, 742 + .hid_width = 5, 743 + .parent_map = gcc_parent_map_0, 744 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 745 + .clkr.hw.init = &gcc_qupv3_wrap0_s6_clk_src_init, 746 + }; 747 + 748 + static struct clk_init_data gcc_qupv3_wrap0_s7_clk_src_init = { 749 + .name = "gcc_qupv3_wrap0_s7_clk_src", 750 + .parent_data = gcc_parent_data_0, 751 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 752 + .ops = &clk_rcg2_ops, 753 + }; 754 + 755 + static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = { 756 + .cmd_rcgr = 0x279c0, 757 + .mnd_width = 16, 758 + .hid_width = 5, 759 + .parent_map = gcc_parent_map_0, 760 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 761 + .clkr.hw.init = &gcc_qupv3_wrap0_s7_clk_src_init, 762 + }; 763 + 764 + static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = { 765 + .name = "gcc_qupv3_wrap1_s0_clk_src", 766 + .parent_data = gcc_parent_data_0, 767 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 768 + .ops = &clk_rcg2_ops, 769 + }; 770 + 771 + static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = { 772 + .cmd_rcgr = 0x28154, 773 + .mnd_width = 16, 774 + .hid_width = 5, 775 + .parent_map = gcc_parent_map_0, 776 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 777 + .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init, 778 + }; 779 + 780 + static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = { 781 + .name = "gcc_qupv3_wrap1_s1_clk_src", 782 + .parent_data = gcc_parent_data_0, 783 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 784 + .ops = &clk_rcg2_ops, 785 + }; 786 + 787 + static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = { 788 + .cmd_rcgr = 0x28288, 789 + .mnd_width = 16, 790 + .hid_width = 5, 791 + .parent_map = gcc_parent_map_0, 792 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 793 + .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init, 794 + }; 795 + 796 + static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = { 797 + .name = "gcc_qupv3_wrap1_s2_clk_src", 798 + .parent_data = gcc_parent_data_0, 799 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 800 + .ops = &clk_rcg2_ops, 801 + }; 802 + 803 + static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = { 804 + .cmd_rcgr = 0x283bc, 805 + .mnd_width = 16, 806 + .hid_width = 5, 807 + .parent_map = gcc_parent_map_0, 808 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 809 + .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init, 810 + }; 811 + 812 + static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = { 813 + .name = "gcc_qupv3_wrap1_s3_clk_src", 814 + .parent_data = gcc_parent_data_0, 815 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 816 + .ops = &clk_rcg2_ops, 817 + }; 818 + 819 + static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = { 820 + .cmd_rcgr = 0x284f0, 821 + .mnd_width = 16, 822 + .hid_width = 5, 823 + .parent_map = gcc_parent_map_0, 824 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 825 + .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init, 826 + }; 827 + 828 + static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = { 829 + .name = "gcc_qupv3_wrap1_s4_clk_src", 830 + .parent_data = gcc_parent_data_0, 831 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 832 + .ops = &clk_rcg2_ops, 833 + }; 834 + 835 + static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = { 836 + .cmd_rcgr = 0x28624, 837 + .mnd_width = 16, 838 + .hid_width = 5, 839 + .parent_map = gcc_parent_map_0, 840 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 841 + .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init, 842 + }; 843 + 844 + static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = { 845 + .name = "gcc_qupv3_wrap1_s5_clk_src", 846 + .parent_data = gcc_parent_data_0, 847 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 848 + .ops = &clk_rcg2_ops, 849 + }; 850 + 851 + static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = { 852 + .cmd_rcgr = 0x28758, 853 + .mnd_width = 16, 854 + .hid_width = 5, 855 + .parent_map = gcc_parent_map_0, 856 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 857 + .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init, 858 + }; 859 + 860 + static struct clk_init_data gcc_qupv3_wrap1_s6_clk_src_init = { 861 + .name = "gcc_qupv3_wrap1_s6_clk_src", 862 + .parent_data = gcc_parent_data_0, 863 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 864 + .ops = &clk_rcg2_ops, 865 + }; 866 + 867 + static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = { 868 + .cmd_rcgr = 0x2888c, 869 + .mnd_width = 16, 870 + .hid_width = 5, 871 + .parent_map = gcc_parent_map_0, 872 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 873 + .clkr.hw.init = &gcc_qupv3_wrap1_s6_clk_src_init, 874 + }; 875 + 876 + static struct clk_init_data gcc_qupv3_wrap1_s7_clk_src_init = { 877 + .name = "gcc_qupv3_wrap1_s7_clk_src", 878 + .parent_data = gcc_parent_data_0, 879 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 880 + .ops = &clk_rcg2_ops, 881 + }; 882 + 883 + static struct clk_rcg2 gcc_qupv3_wrap1_s7_clk_src = { 884 + .cmd_rcgr = 0x289c0, 885 + .mnd_width = 16, 886 + .hid_width = 5, 887 + .parent_map = gcc_parent_map_0, 888 + .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src, 889 + .clkr.hw.init = &gcc_qupv3_wrap1_s7_clk_src_init, 890 + }; 891 + 892 + static const struct freq_tbl ftbl_gcc_sdcc5_apps_clk_src[] = { 893 + F(144000, P_BI_TCXO, 16, 3, 25), 894 + F(400000, P_BI_TCXO, 12, 1, 4), 895 + F(19200000, P_BI_TCXO, 1, 0, 0), 896 + F(20000000, P_GCC_GPLL0_OUT_MAIN, 10, 1, 3), 897 + F(25000000, P_GCC_GPLL0_OUT_MAIN, 12, 1, 2), 898 + F(50000000, P_GCC_GPLL0_OUT_MAIN, 12, 0, 0), 899 + F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0), 900 + F(192000000, P_GCC_GPLL8_OUT_MAIN, 4, 0, 0), 901 + F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0), 902 + F(384000000, P_GCC_GPLL8_OUT_MAIN, 2, 0, 0), 903 + { } 904 + }; 905 + 906 + static struct clk_rcg2 gcc_sdcc5_apps_clk_src = { 907 + .cmd_rcgr = 0x3b034, 908 + .mnd_width = 8, 909 + .hid_width = 5, 910 + .parent_map = gcc_parent_map_8, 911 + .freq_tbl = ftbl_gcc_sdcc5_apps_clk_src, 912 + .clkr.hw.init = &(const struct clk_init_data) { 913 + .name = "gcc_sdcc5_apps_clk_src", 914 + .parent_data = gcc_parent_data_8, 915 + .num_parents = ARRAY_SIZE(gcc_parent_data_8), 916 + .ops = &clk_rcg2_ops, 917 + }, 918 + }; 919 + 920 + static const struct freq_tbl ftbl_gcc_sdcc5_ice_core_clk_src[] = { 921 + F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0), 922 + { } 923 + }; 924 + 925 + static struct clk_rcg2 gcc_sdcc5_ice_core_clk_src = { 926 + .cmd_rcgr = 0x3b01c, 927 + .mnd_width = 0, 928 + .hid_width = 5, 929 + .parent_map = gcc_parent_map_2, 930 + .freq_tbl = ftbl_gcc_sdcc5_ice_core_clk_src, 931 + .clkr.hw.init = &(const struct clk_init_data) { 932 + .name = "gcc_sdcc5_ice_core_clk_src", 933 + .parent_data = gcc_parent_data_2, 934 + .num_parents = ARRAY_SIZE(gcc_parent_data_2), 935 + .ops = &clk_rcg2_ops, 936 + }, 937 + }; 938 + 939 + static struct clk_rcg2 gcc_sm_bus_xo_clk_src = { 940 + .cmd_rcgr = 0x5b00c, 941 + .mnd_width = 0, 942 + .hid_width = 5, 943 + .parent_map = gcc_parent_map_2, 944 + .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 945 + .clkr.hw.init = &(const struct clk_init_data) { 946 + .name = "gcc_sm_bus_xo_clk_src", 947 + .parent_data = gcc_parent_data_2, 948 + .num_parents = ARRAY_SIZE(gcc_parent_data_2), 949 + .ops = &clk_rcg2_ops, 950 + }, 951 + }; 952 + 953 + static const struct freq_tbl ftbl_gcc_tsc_clk_src[] = { 954 + F(500000000, P_GCC_GPLL7_OUT_MAIN, 2, 0, 0), 955 + { } 956 + }; 957 + 958 + static struct clk_rcg2 gcc_tsc_clk_src = { 959 + .cmd_rcgr = 0x57010, 960 + .mnd_width = 0, 961 + .hid_width = 5, 962 + .parent_map = gcc_parent_map_9, 963 + .freq_tbl = ftbl_gcc_tsc_clk_src, 964 + .clkr.hw.init = &(const struct clk_init_data) { 965 + .name = "gcc_tsc_clk_src", 966 + .parent_data = gcc_parent_data_9, 967 + .num_parents = ARRAY_SIZE(gcc_parent_data_9), 968 + .ops = &clk_rcg2_ops, 969 + }, 970 + }; 971 + 972 + static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = { 973 + F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0), 974 + F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0), 975 + { } 976 + }; 977 + 978 + static struct clk_rcg2 gcc_usb30_prim_master_clk_src = { 979 + .cmd_rcgr = 0x49028, 980 + .mnd_width = 8, 981 + .hid_width = 5, 982 + .parent_map = gcc_parent_map_0, 983 + .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src, 984 + .clkr.hw.init = &(const struct clk_init_data) { 985 + .name = "gcc_usb30_prim_master_clk_src", 986 + .parent_data = gcc_parent_data_0, 987 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 988 + .ops = &clk_rcg2_ops, 989 + }, 990 + }; 991 + 992 + static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = { 993 + .cmd_rcgr = 0x49044, 994 + .mnd_width = 0, 995 + .hid_width = 5, 996 + .parent_map = gcc_parent_map_0, 997 + .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 998 + .clkr.hw.init = &(const struct clk_init_data) { 999 + .name = "gcc_usb30_prim_mock_utmi_clk_src", 1000 + .parent_data = gcc_parent_data_0, 1001 + .num_parents = ARRAY_SIZE(gcc_parent_data_0), 1002 + .ops = &clk_rcg2_ops, 1003 + }, 1004 + }; 1005 + 1006 + static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = { 1007 + .cmd_rcgr = 0x49070, 1008 + .mnd_width = 0, 1009 + .hid_width = 5, 1010 + .parent_map = gcc_parent_map_3, 1011 + .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src, 1012 + .clkr.hw.init = &(const struct clk_init_data) { 1013 + .name = "gcc_usb3_prim_phy_aux_clk_src", 1014 + .parent_data = gcc_parent_data_3, 1015 + .num_parents = ARRAY_SIZE(gcc_parent_data_3), 1016 + .ops = &clk_rcg2_ops, 1017 + }, 1018 + }; 1019 + 1020 + static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = { 1021 + .reg = 0x4905c, 1022 + .shift = 0, 1023 + .width = 4, 1024 + .clkr.hw.init = &(const struct clk_init_data) { 1025 + .name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src", 1026 + .parent_hws = (const struct clk_hw*[]) { 1027 + &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw, 1028 + }, 1029 + .num_parents = 1, 1030 + .flags = CLK_SET_RATE_PARENT, 1031 + .ops = &clk_regmap_div_ro_ops, 1032 + }, 1033 + }; 1034 + 1035 + static struct clk_branch gcc_aggre_noc_ecpri_dma_clk = { 1036 + .halt_reg = 0x92008, 1037 + .halt_check = BRANCH_HALT_VOTED, 1038 + .hwcg_reg = 0x92008, 1039 + .hwcg_bit = 1, 1040 + .clkr = { 1041 + .enable_reg = 0x92008, 1042 + .enable_mask = BIT(0), 1043 + .hw.init = &(const struct clk_init_data) { 1044 + .name = "gcc_aggre_noc_ecpri_dma_clk", 1045 + .parent_hws = (const struct clk_hw*[]) { 1046 + &gcc_aggre_noc_ecpri_dma_clk_src.clkr.hw, 1047 + }, 1048 + .num_parents = 1, 1049 + .flags = CLK_SET_RATE_PARENT, 1050 + .ops = &clk_branch2_ops, 1051 + }, 1052 + }, 1053 + }; 1054 + 1055 + static struct clk_branch gcc_aggre_noc_ecpri_gsi_clk = { 1056 + .halt_reg = 0x9201c, 1057 + .halt_check = BRANCH_HALT_VOTED, 1058 + .hwcg_reg = 0x9201c, 1059 + .hwcg_bit = 1, 1060 + .clkr = { 1061 + .enable_reg = 0x9201c, 1062 + .enable_mask = BIT(0), 1063 + .hw.init = &(const struct clk_init_data) { 1064 + .name = "gcc_aggre_noc_ecpri_gsi_clk", 1065 + .parent_hws = (const struct clk_hw*[]) { 1066 + &gcc_aggre_noc_ecpri_gsi_clk_src.clkr.hw, 1067 + }, 1068 + .num_parents = 1, 1069 + .flags = CLK_SET_RATE_PARENT, 1070 + .ops = &clk_branch2_ops, 1071 + }, 1072 + }, 1073 + }; 1074 + 1075 + static struct clk_branch gcc_boot_rom_ahb_clk = { 1076 + .halt_reg = 0x48004, 1077 + .halt_check = BRANCH_HALT_VOTED, 1078 + .hwcg_reg = 0x48004, 1079 + .hwcg_bit = 1, 1080 + .clkr = { 1081 + .enable_reg = 0x62000, 1082 + .enable_mask = BIT(10), 1083 + .hw.init = &(const struct clk_init_data) { 1084 + .name = "gcc_boot_rom_ahb_clk", 1085 + .ops = &clk_branch2_ops, 1086 + }, 1087 + }, 1088 + }; 1089 + 1090 + static struct clk_branch gcc_cfg_noc_ecpri_cc_ahb_clk = { 1091 + .halt_reg = 0x3e004, 1092 + .halt_check = BRANCH_HALT_VOTED, 1093 + .hwcg_reg = 0x3e004, 1094 + .hwcg_bit = 1, 1095 + .clkr = { 1096 + .enable_reg = 0x3e004, 1097 + .enable_mask = BIT(0), 1098 + .hw.init = &(const struct clk_init_data) { 1099 + .name = "gcc_cfg_noc_ecpri_cc_ahb_clk", 1100 + .ops = &clk_branch2_ops, 1101 + }, 1102 + }, 1103 + }; 1104 + 1105 + static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = { 1106 + .halt_reg = 0x8401c, 1107 + .halt_check = BRANCH_HALT_VOTED, 1108 + .hwcg_reg = 0x8401c, 1109 + .hwcg_bit = 1, 1110 + .clkr = { 1111 + .enable_reg = 0x8401c, 1112 + .enable_mask = BIT(0), 1113 + .hw.init = &(const struct clk_init_data) { 1114 + .name = "gcc_cfg_noc_usb3_prim_axi_clk", 1115 + .parent_hws = (const struct clk_hw*[]) { 1116 + &gcc_usb30_prim_master_clk_src.clkr.hw, 1117 + }, 1118 + .num_parents = 1, 1119 + .flags = CLK_SET_RATE_PARENT, 1120 + .ops = &clk_branch2_ops, 1121 + }, 1122 + }, 1123 + }; 1124 + 1125 + static struct clk_branch gcc_ddrss_ecpri_dma_clk = { 1126 + .halt_reg = 0x54030, 1127 + .halt_check = BRANCH_HALT_VOTED, 1128 + .hwcg_reg = 0x54030, 1129 + .hwcg_bit = 1, 1130 + .clkr = { 1131 + .enable_reg = 0x54030, 1132 + .enable_mask = BIT(0), 1133 + .hw.init = &(const struct clk_init_data) { 1134 + .name = "gcc_ddrss_ecpri_dma_clk", 1135 + .parent_hws = (const struct clk_hw*[]) { 1136 + &gcc_aggre_noc_ecpri_dma_clk_src.clkr.hw, 1137 + }, 1138 + .num_parents = 1, 1139 + .flags = CLK_SET_RATE_PARENT, 1140 + .ops = &clk_branch2_aon_ops, 1141 + }, 1142 + }, 1143 + }; 1144 + 1145 + static struct clk_branch gcc_ecpri_ahb_clk = { 1146 + .halt_reg = 0x3a008, 1147 + .halt_check = BRANCH_HALT_VOTED, 1148 + .hwcg_reg = 0x3a008, 1149 + .hwcg_bit = 1, 1150 + .clkr = { 1151 + .enable_reg = 0x3a008, 1152 + .enable_mask = BIT(0), 1153 + .hw.init = &(const struct clk_init_data) { 1154 + .name = "gcc_ecpri_ahb_clk", 1155 + .ops = &clk_branch2_ops, 1156 + }, 1157 + }, 1158 + }; 1159 + 1160 + static struct clk_branch gcc_ecpri_cc_gpll0_clk_src = { 1161 + .halt_check = BRANCH_HALT_DELAY, 1162 + .clkr = { 1163 + .enable_reg = 0x62010, 1164 + .enable_mask = BIT(0), 1165 + .hw.init = &(const struct clk_init_data) { 1166 + .name = "gcc_ecpri_cc_gpll0_clk_src", 1167 + .parent_hws = (const struct clk_hw*[]) { 1168 + &gcc_gpll0.clkr.hw, 1169 + }, 1170 + .num_parents = 1, 1171 + .flags = CLK_SET_RATE_PARENT, 1172 + .ops = &clk_branch2_ops, 1173 + }, 1174 + }, 1175 + }; 1176 + 1177 + static struct clk_branch gcc_ecpri_cc_gpll1_even_clk_src = { 1178 + .halt_check = BRANCH_HALT_DELAY, 1179 + .clkr = { 1180 + .enable_reg = 0x62010, 1181 + .enable_mask = BIT(1), 1182 + .hw.init = &(const struct clk_init_data) { 1183 + .name = "gcc_ecpri_cc_gpll1_even_clk_src", 1184 + .parent_hws = (const struct clk_hw*[]) { 1185 + &gcc_gpll1_out_even.clkr.hw, 1186 + }, 1187 + .num_parents = 1, 1188 + .flags = CLK_SET_RATE_PARENT, 1189 + .ops = &clk_branch2_ops, 1190 + }, 1191 + }, 1192 + }; 1193 + 1194 + static struct clk_branch gcc_ecpri_cc_gpll2_even_clk_src = { 1195 + .halt_check = BRANCH_HALT_DELAY, 1196 + .clkr = { 1197 + .enable_reg = 0x62010, 1198 + .enable_mask = BIT(2), 1199 + .hw.init = &(const struct clk_init_data) { 1200 + .name = "gcc_ecpri_cc_gpll2_even_clk_src", 1201 + .parent_hws = (const struct clk_hw*[]) { 1202 + &gcc_gpll2_out_even.clkr.hw, 1203 + }, 1204 + .num_parents = 1, 1205 + .flags = CLK_SET_RATE_PARENT, 1206 + .ops = &clk_branch2_ops, 1207 + }, 1208 + }, 1209 + }; 1210 + 1211 + static struct clk_branch gcc_ecpri_cc_gpll3_clk_src = { 1212 + .halt_check = BRANCH_HALT_DELAY, 1213 + .clkr = { 1214 + .enable_reg = 0x62010, 1215 + .enable_mask = BIT(3), 1216 + .hw.init = &(const struct clk_init_data) { 1217 + .name = "gcc_ecpri_cc_gpll3_clk_src", 1218 + .parent_hws = (const struct clk_hw*[]) { 1219 + &gcc_gpll3.clkr.hw, 1220 + }, 1221 + .num_parents = 1, 1222 + .flags = CLK_SET_RATE_PARENT, 1223 + .ops = &clk_branch2_ops, 1224 + }, 1225 + }, 1226 + }; 1227 + 1228 + static struct clk_branch gcc_ecpri_cc_gpll4_clk_src = { 1229 + .halt_check = BRANCH_HALT_DELAY, 1230 + .clkr = { 1231 + .enable_reg = 0x62010, 1232 + .enable_mask = BIT(4), 1233 + .hw.init = &(const struct clk_init_data) { 1234 + .name = "gcc_ecpri_cc_gpll4_clk_src", 1235 + .parent_hws = (const struct clk_hw*[]) { 1236 + &gcc_gpll4.clkr.hw, 1237 + }, 1238 + .num_parents = 1, 1239 + .flags = CLK_SET_RATE_PARENT, 1240 + .ops = &clk_branch2_ops, 1241 + }, 1242 + }, 1243 + }; 1244 + 1245 + static struct clk_branch gcc_ecpri_cc_gpll5_even_clk_src = { 1246 + .halt_check = BRANCH_HALT_DELAY, 1247 + .clkr = { 1248 + .enable_reg = 0x62010, 1249 + .enable_mask = BIT(5), 1250 + .hw.init = &(const struct clk_init_data) { 1251 + .name = "gcc_ecpri_cc_gpll5_even_clk_src", 1252 + .parent_hws = (const struct clk_hw*[]) { 1253 + &gcc_gpll5_out_even.clkr.hw, 1254 + }, 1255 + .num_parents = 1, 1256 + .flags = CLK_SET_RATE_PARENT, 1257 + .ops = &clk_branch2_ops, 1258 + }, 1259 + }, 1260 + }; 1261 + 1262 + static struct clk_branch gcc_ecpri_xo_clk = { 1263 + .halt_reg = 0x3a004, 1264 + .halt_check = BRANCH_HALT, 1265 + .clkr = { 1266 + .enable_reg = 0x3a004, 1267 + .enable_mask = BIT(0), 1268 + .hw.init = &(const struct clk_init_data) { 1269 + .name = "gcc_ecpri_xo_clk", 1270 + .ops = &clk_branch2_ops, 1271 + }, 1272 + }, 1273 + }; 1274 + 1275 + static struct clk_branch gcc_eth_100g_c2c_hm_apb_clk = { 1276 + .halt_reg = 0x39010, 1277 + .halt_check = BRANCH_HALT, 1278 + .clkr = { 1279 + .enable_reg = 0x39010, 1280 + .enable_mask = BIT(0), 1281 + .hw.init = &(const struct clk_init_data) { 1282 + .name = "gcc_eth_100g_c2c_hm_apb_clk", 1283 + .ops = &clk_branch2_ops, 1284 + }, 1285 + }, 1286 + }; 1287 + 1288 + static struct clk_branch gcc_eth_100g_fh_hm_apb_0_clk = { 1289 + .halt_reg = 0x39004, 1290 + .halt_check = BRANCH_HALT, 1291 + .clkr = { 1292 + .enable_reg = 0x39004, 1293 + .enable_mask = BIT(0), 1294 + .hw.init = &(const struct clk_init_data) { 1295 + .name = "gcc_eth_100g_fh_hm_apb_0_clk", 1296 + .ops = &clk_branch2_ops, 1297 + }, 1298 + }, 1299 + }; 1300 + 1301 + static struct clk_branch gcc_eth_100g_fh_hm_apb_1_clk = { 1302 + .halt_reg = 0x39008, 1303 + .halt_check = BRANCH_HALT, 1304 + .clkr = { 1305 + .enable_reg = 0x39008, 1306 + .enable_mask = BIT(0), 1307 + .hw.init = &(const struct clk_init_data) { 1308 + .name = "gcc_eth_100g_fh_hm_apb_1_clk", 1309 + .ops = &clk_branch2_ops, 1310 + }, 1311 + }, 1312 + }; 1313 + 1314 + static struct clk_branch gcc_eth_100g_fh_hm_apb_2_clk = { 1315 + .halt_reg = 0x3900c, 1316 + .halt_check = BRANCH_HALT, 1317 + .clkr = { 1318 + .enable_reg = 0x3900c, 1319 + .enable_mask = BIT(0), 1320 + .hw.init = &(const struct clk_init_data) { 1321 + .name = "gcc_eth_100g_fh_hm_apb_2_clk", 1322 + .ops = &clk_branch2_ops, 1323 + }, 1324 + }, 1325 + }; 1326 + 1327 + static struct clk_branch gcc_eth_dbg_c2c_hm_apb_clk = { 1328 + .halt_reg = 0x39014, 1329 + .halt_check = BRANCH_HALT, 1330 + .clkr = { 1331 + .enable_reg = 0x39014, 1332 + .enable_mask = BIT(0), 1333 + .hw.init = &(const struct clk_init_data) { 1334 + .name = "gcc_eth_dbg_c2c_hm_apb_clk", 1335 + .ops = &clk_branch2_ops, 1336 + }, 1337 + }, 1338 + }; 1339 + 1340 + static struct clk_branch gcc_eth_dbg_snoc_axi_clk = { 1341 + .halt_reg = 0x3901c, 1342 + .halt_check = BRANCH_HALT_VOTED, 1343 + .hwcg_reg = 0x3901c, 1344 + .hwcg_bit = 1, 1345 + .clkr = { 1346 + .enable_reg = 0x3901c, 1347 + .enable_mask = BIT(0), 1348 + .hw.init = &(const struct clk_init_data) { 1349 + .name = "gcc_eth_dbg_snoc_axi_clk", 1350 + .ops = &clk_branch2_ops, 1351 + }, 1352 + }, 1353 + }; 1354 + 1355 + static struct clk_branch gcc_gemnoc_pcie_qx_clk = { 1356 + .halt_reg = 0x5402c, 1357 + .halt_check = BRANCH_HALT_VOTED, 1358 + .hwcg_reg = 0x5402c, 1359 + .hwcg_bit = 1, 1360 + .clkr = { 1361 + .enable_reg = 0x62008, 1362 + .enable_mask = BIT(0), 1363 + .hw.init = &(const struct clk_init_data) { 1364 + .name = "gcc_gemnoc_pcie_qx_clk", 1365 + .ops = &clk_branch2_aon_ops, 1366 + }, 1367 + }, 1368 + }; 1369 + 1370 + static struct clk_branch gcc_gp1_clk = { 1371 + .halt_reg = 0x74000, 1372 + .halt_check = BRANCH_HALT, 1373 + .clkr = { 1374 + .enable_reg = 0x74000, 1375 + .enable_mask = BIT(0), 1376 + .hw.init = &(const struct clk_init_data) { 1377 + .name = "gcc_gp1_clk", 1378 + .parent_hws = (const struct clk_hw*[]) { 1379 + &gcc_gp1_clk_src.clkr.hw, 1380 + }, 1381 + .num_parents = 1, 1382 + .flags = CLK_SET_RATE_PARENT, 1383 + .ops = &clk_branch2_ops, 1384 + }, 1385 + }, 1386 + }; 1387 + 1388 + static struct clk_branch gcc_gp2_clk = { 1389 + .halt_reg = 0x75000, 1390 + .halt_check = BRANCH_HALT, 1391 + .clkr = { 1392 + .enable_reg = 0x75000, 1393 + .enable_mask = BIT(0), 1394 + .hw.init = &(const struct clk_init_data) { 1395 + .name = "gcc_gp2_clk", 1396 + .parent_hws = (const struct clk_hw*[]) { 1397 + &gcc_gp2_clk_src.clkr.hw, 1398 + }, 1399 + .num_parents = 1, 1400 + .flags = CLK_SET_RATE_PARENT, 1401 + .ops = &clk_branch2_ops, 1402 + }, 1403 + }, 1404 + }; 1405 + 1406 + static struct clk_branch gcc_gp3_clk = { 1407 + .halt_reg = 0x76000, 1408 + .halt_check = BRANCH_HALT, 1409 + .clkr = { 1410 + .enable_reg = 0x76000, 1411 + .enable_mask = BIT(0), 1412 + .hw.init = &(const struct clk_init_data) { 1413 + .name = "gcc_gp3_clk", 1414 + .parent_hws = (const struct clk_hw*[]) { 1415 + &gcc_gp3_clk_src.clkr.hw, 1416 + }, 1417 + .num_parents = 1, 1418 + .flags = CLK_SET_RATE_PARENT, 1419 + .ops = &clk_branch2_ops, 1420 + }, 1421 + }, 1422 + }; 1423 + 1424 + static struct clk_branch gcc_pcie_0_aux_clk = { 1425 + .halt_reg = 0x9d030, 1426 + .halt_check = BRANCH_HALT_VOTED, 1427 + .hwcg_reg = 0x9d030, 1428 + .hwcg_bit = 1, 1429 + .clkr = { 1430 + .enable_reg = 0x62000, 1431 + .enable_mask = BIT(29), 1432 + .hw.init = &(const struct clk_init_data) { 1433 + .name = "gcc_pcie_0_aux_clk", 1434 + .parent_hws = (const struct clk_hw*[]) { 1435 + &gcc_pcie_0_aux_clk_src.clkr.hw, 1436 + }, 1437 + .num_parents = 1, 1438 + .flags = CLK_SET_RATE_PARENT, 1439 + .ops = &clk_branch2_ops, 1440 + }, 1441 + }, 1442 + }; 1443 + 1444 + static struct clk_branch gcc_pcie_0_cfg_ahb_clk = { 1445 + .halt_reg = 0x9d02c, 1446 + .halt_check = BRANCH_HALT_VOTED, 1447 + .hwcg_reg = 0x9d02c, 1448 + .hwcg_bit = 1, 1449 + .clkr = { 1450 + .enable_reg = 0x62000, 1451 + .enable_mask = BIT(28), 1452 + .hw.init = &(const struct clk_init_data) { 1453 + .name = "gcc_pcie_0_cfg_ahb_clk", 1454 + .ops = &clk_branch2_ops, 1455 + }, 1456 + }, 1457 + }; 1458 + 1459 + static struct clk_branch gcc_pcie_0_clkref_en = { 1460 + .halt_reg = 0x9c004, 1461 + .halt_bit = 31, 1462 + .halt_check = BRANCH_HALT_ENABLE, 1463 + .clkr = { 1464 + .enable_reg = 0x9c004, 1465 + .enable_mask = BIT(0), 1466 + .hw.init = &(const struct clk_init_data) { 1467 + .name = "gcc_pcie_0_clkref_en", 1468 + .ops = &clk_branch_ops, 1469 + }, 1470 + }, 1471 + }; 1472 + 1473 + static struct clk_branch gcc_pcie_0_mstr_axi_clk = { 1474 + .halt_reg = 0x9d024, 1475 + .halt_check = BRANCH_HALT_SKIP, 1476 + .hwcg_reg = 0x9d024, 1477 + .hwcg_bit = 1, 1478 + .clkr = { 1479 + .enable_reg = 0x62000, 1480 + .enable_mask = BIT(27), 1481 + .hw.init = &(const struct clk_init_data) { 1482 + .name = "gcc_pcie_0_mstr_axi_clk", 1483 + .ops = &clk_branch2_ops, 1484 + }, 1485 + }, 1486 + }; 1487 + 1488 + static struct clk_branch gcc_pcie_0_phy_aux_clk = { 1489 + .halt_reg = 0x9d038, 1490 + .halt_check = BRANCH_HALT_VOTED, 1491 + .hwcg_reg = 0x9d038, 1492 + .hwcg_bit = 1, 1493 + .clkr = { 1494 + .enable_reg = 0x62000, 1495 + .enable_mask = BIT(24), 1496 + .hw.init = &(const struct clk_init_data) { 1497 + .name = "gcc_pcie_0_phy_aux_clk", 1498 + .parent_hws = (const struct clk_hw*[]) { 1499 + &gcc_pcie_0_phy_aux_clk_src.clkr.hw, 1500 + }, 1501 + .num_parents = 1, 1502 + .flags = CLK_SET_RATE_PARENT, 1503 + .ops = &clk_branch2_ops, 1504 + }, 1505 + }, 1506 + }; 1507 + 1508 + static struct clk_branch gcc_pcie_0_phy_rchng_clk = { 1509 + .halt_reg = 0x9d048, 1510 + .halt_check = BRANCH_HALT_VOTED, 1511 + .hwcg_reg = 0x9d048, 1512 + .hwcg_bit = 1, 1513 + .clkr = { 1514 + .enable_reg = 0x62000, 1515 + .enable_mask = BIT(23), 1516 + .hw.init = &(const struct clk_init_data) { 1517 + .name = "gcc_pcie_0_phy_rchng_clk", 1518 + .parent_hws = (const struct clk_hw*[]) { 1519 + &gcc_pcie_0_phy_rchng_clk_src.clkr.hw, 1520 + }, 1521 + .num_parents = 1, 1522 + .flags = CLK_SET_RATE_PARENT, 1523 + .ops = &clk_branch2_ops, 1524 + }, 1525 + }, 1526 + }; 1527 + 1528 + static struct clk_branch gcc_pcie_0_pipe_clk = { 1529 + .halt_reg = 0x9d040, 1530 + .halt_check = BRANCH_HALT_VOTED, 1531 + .hwcg_reg = 0x9d040, 1532 + .hwcg_bit = 1, 1533 + .clkr = { 1534 + .enable_reg = 0x62000, 1535 + .enable_mask = BIT(30), 1536 + .hw.init = &(const struct clk_init_data) { 1537 + .name = "gcc_pcie_0_pipe_clk", 1538 + .parent_hws = (const struct clk_hw*[]) { 1539 + &gcc_pcie_0_pipe_clk_src.clkr.hw, 1540 + }, 1541 + .num_parents = 1, 1542 + .flags = CLK_SET_RATE_PARENT, 1543 + .ops = &clk_branch2_ops, 1544 + }, 1545 + }, 1546 + }; 1547 + 1548 + static struct clk_branch gcc_pcie_0_slv_axi_clk = { 1549 + .halt_reg = 0x9d01c, 1550 + .halt_check = BRANCH_HALT_VOTED, 1551 + .hwcg_reg = 0x9d01c, 1552 + .hwcg_bit = 1, 1553 + .clkr = { 1554 + .enable_reg = 0x62000, 1555 + .enable_mask = BIT(26), 1556 + .hw.init = &(const struct clk_init_data) { 1557 + .name = "gcc_pcie_0_slv_axi_clk", 1558 + .ops = &clk_branch2_ops, 1559 + }, 1560 + }, 1561 + }; 1562 + 1563 + static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = { 1564 + .halt_reg = 0x9d018, 1565 + .halt_check = BRANCH_HALT_VOTED, 1566 + .hwcg_reg = 0x9d018, 1567 + .hwcg_bit = 1, 1568 + .clkr = { 1569 + .enable_reg = 0x62000, 1570 + .enable_mask = BIT(25), 1571 + .hw.init = &(const struct clk_init_data) { 1572 + .name = "gcc_pcie_0_slv_q2a_axi_clk", 1573 + .ops = &clk_branch2_ops, 1574 + }, 1575 + }, 1576 + }; 1577 + 1578 + static struct clk_branch gcc_pdm2_clk = { 1579 + .halt_reg = 0x4300c, 1580 + .halt_check = BRANCH_HALT, 1581 + .clkr = { 1582 + .enable_reg = 0x4300c, 1583 + .enable_mask = BIT(0), 1584 + .hw.init = &(const struct clk_init_data) { 1585 + .name = "gcc_pdm2_clk", 1586 + .parent_hws = (const struct clk_hw*[]) { 1587 + &gcc_pdm2_clk_src.clkr.hw, 1588 + }, 1589 + .num_parents = 1, 1590 + .flags = CLK_SET_RATE_PARENT, 1591 + .ops = &clk_branch2_ops, 1592 + }, 1593 + }, 1594 + }; 1595 + 1596 + static struct clk_branch gcc_pdm_ahb_clk = { 1597 + .halt_reg = 0x43004, 1598 + .halt_check = BRANCH_HALT_VOTED, 1599 + .hwcg_reg = 0x43004, 1600 + .hwcg_bit = 1, 1601 + .clkr = { 1602 + .enable_reg = 0x43004, 1603 + .enable_mask = BIT(0), 1604 + .hw.init = &(const struct clk_init_data) { 1605 + .name = "gcc_pdm_ahb_clk", 1606 + .ops = &clk_branch2_ops, 1607 + }, 1608 + }, 1609 + }; 1610 + 1611 + static struct clk_branch gcc_pdm_xo4_clk = { 1612 + .halt_reg = 0x43008, 1613 + .halt_check = BRANCH_HALT, 1614 + .clkr = { 1615 + .enable_reg = 0x43008, 1616 + .enable_mask = BIT(0), 1617 + .hw.init = &(const struct clk_init_data) { 1618 + .name = "gcc_pdm_xo4_clk", 1619 + .ops = &clk_branch2_ops, 1620 + }, 1621 + }, 1622 + }; 1623 + 1624 + static struct clk_branch gcc_qmip_anoc_pcie_clk = { 1625 + .halt_reg = 0x84044, 1626 + .halt_check = BRANCH_HALT_VOTED, 1627 + .hwcg_reg = 0x84044, 1628 + .hwcg_bit = 1, 1629 + .clkr = { 1630 + .enable_reg = 0x84044, 1631 + .enable_mask = BIT(0), 1632 + .hw.init = &(const struct clk_init_data) { 1633 + .name = "gcc_qmip_anoc_pcie_clk", 1634 + .ops = &clk_branch2_ops, 1635 + }, 1636 + }, 1637 + }; 1638 + 1639 + static struct clk_branch gcc_qmip_ecpri_dma0_clk = { 1640 + .halt_reg = 0x84038, 1641 + .halt_check = BRANCH_HALT_VOTED, 1642 + .hwcg_reg = 0x84038, 1643 + .hwcg_bit = 1, 1644 + .clkr = { 1645 + .enable_reg = 0x84038, 1646 + .enable_mask = BIT(0), 1647 + .hw.init = &(const struct clk_init_data) { 1648 + .name = "gcc_qmip_ecpri_dma0_clk", 1649 + .ops = &clk_branch2_ops, 1650 + }, 1651 + }, 1652 + }; 1653 + 1654 + static struct clk_branch gcc_qmip_ecpri_dma1_clk = { 1655 + .halt_reg = 0x8403c, 1656 + .halt_check = BRANCH_HALT_VOTED, 1657 + .hwcg_reg = 0x8403c, 1658 + .hwcg_bit = 1, 1659 + .clkr = { 1660 + .enable_reg = 0x8403c, 1661 + .enable_mask = BIT(0), 1662 + .hw.init = &(const struct clk_init_data) { 1663 + .name = "gcc_qmip_ecpri_dma1_clk", 1664 + .ops = &clk_branch2_ops, 1665 + }, 1666 + }, 1667 + }; 1668 + 1669 + static struct clk_branch gcc_qmip_ecpri_gsi_clk = { 1670 + .halt_reg = 0x84040, 1671 + .halt_check = BRANCH_HALT_VOTED, 1672 + .hwcg_reg = 0x84040, 1673 + .hwcg_bit = 1, 1674 + .clkr = { 1675 + .enable_reg = 0x84040, 1676 + .enable_mask = BIT(0), 1677 + .hw.init = &(const struct clk_init_data) { 1678 + .name = "gcc_qmip_ecpri_gsi_clk", 1679 + .ops = &clk_branch2_ops, 1680 + }, 1681 + }, 1682 + }; 1683 + 1684 + static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = { 1685 + .halt_reg = 0x27018, 1686 + .halt_check = BRANCH_HALT_VOTED, 1687 + .clkr = { 1688 + .enable_reg = 0x62008, 1689 + .enable_mask = BIT(9), 1690 + .hw.init = &(const struct clk_init_data) { 1691 + .name = "gcc_qupv3_wrap0_core_2x_clk", 1692 + .ops = &clk_branch2_ops, 1693 + }, 1694 + }, 1695 + }; 1696 + 1697 + static struct clk_branch gcc_qupv3_wrap0_core_clk = { 1698 + .halt_reg = 0x2700c, 1699 + .halt_check = BRANCH_HALT_VOTED, 1700 + .clkr = { 1701 + .enable_reg = 0x62008, 1702 + .enable_mask = BIT(8), 1703 + .hw.init = &(const struct clk_init_data) { 1704 + .name = "gcc_qupv3_wrap0_core_clk", 1705 + .ops = &clk_branch2_ops, 1706 + }, 1707 + }, 1708 + }; 1709 + 1710 + static struct clk_branch gcc_qupv3_wrap0_s0_clk = { 1711 + .halt_reg = 0x2714c, 1712 + .halt_check = BRANCH_HALT_VOTED, 1713 + .clkr = { 1714 + .enable_reg = 0x62008, 1715 + .enable_mask = BIT(10), 1716 + .hw.init = &(const struct clk_init_data) { 1717 + .name = "gcc_qupv3_wrap0_s0_clk", 1718 + .parent_hws = (const struct clk_hw*[]) { 1719 + &gcc_qupv3_wrap0_s0_clk_src.clkr.hw, 1720 + }, 1721 + .num_parents = 1, 1722 + .flags = CLK_SET_RATE_PARENT, 1723 + .ops = &clk_branch2_ops, 1724 + }, 1725 + }, 1726 + }; 1727 + 1728 + static struct clk_branch gcc_qupv3_wrap0_s1_clk = { 1729 + .halt_reg = 0x27280, 1730 + .halt_check = BRANCH_HALT_VOTED, 1731 + .clkr = { 1732 + .enable_reg = 0x62008, 1733 + .enable_mask = BIT(11), 1734 + .hw.init = &(const struct clk_init_data) { 1735 + .name = "gcc_qupv3_wrap0_s1_clk", 1736 + .parent_hws = (const struct clk_hw*[]) { 1737 + &gcc_qupv3_wrap0_s1_clk_src.clkr.hw, 1738 + }, 1739 + .num_parents = 1, 1740 + .flags = CLK_SET_RATE_PARENT, 1741 + .ops = &clk_branch2_ops, 1742 + }, 1743 + }, 1744 + }; 1745 + 1746 + static struct clk_branch gcc_qupv3_wrap0_s2_clk = { 1747 + .halt_reg = 0x273b4, 1748 + .halt_check = BRANCH_HALT_VOTED, 1749 + .clkr = { 1750 + .enable_reg = 0x62008, 1751 + .enable_mask = BIT(12), 1752 + .hw.init = &(const struct clk_init_data) { 1753 + .name = "gcc_qupv3_wrap0_s2_clk", 1754 + .parent_hws = (const struct clk_hw*[]) { 1755 + &gcc_qupv3_wrap0_s2_clk_src.clkr.hw, 1756 + }, 1757 + .num_parents = 1, 1758 + .flags = CLK_SET_RATE_PARENT, 1759 + .ops = &clk_branch2_ops, 1760 + }, 1761 + }, 1762 + }; 1763 + 1764 + static struct clk_branch gcc_qupv3_wrap0_s3_clk = { 1765 + .halt_reg = 0x274e8, 1766 + .halt_check = BRANCH_HALT_VOTED, 1767 + .clkr = { 1768 + .enable_reg = 0x62008, 1769 + .enable_mask = BIT(13), 1770 + .hw.init = &(const struct clk_init_data) { 1771 + .name = "gcc_qupv3_wrap0_s3_clk", 1772 + .parent_hws = (const struct clk_hw*[]) { 1773 + &gcc_qupv3_wrap0_s3_clk_src.clkr.hw, 1774 + }, 1775 + .num_parents = 1, 1776 + .flags = CLK_SET_RATE_PARENT, 1777 + .ops = &clk_branch2_ops, 1778 + }, 1779 + }, 1780 + }; 1781 + 1782 + static struct clk_branch gcc_qupv3_wrap0_s4_clk = { 1783 + .halt_reg = 0x2761c, 1784 + .halt_check = BRANCH_HALT_VOTED, 1785 + .clkr = { 1786 + .enable_reg = 0x62008, 1787 + .enable_mask = BIT(14), 1788 + .hw.init = &(const struct clk_init_data) { 1789 + .name = "gcc_qupv3_wrap0_s4_clk", 1790 + .parent_hws = (const struct clk_hw*[]) { 1791 + &gcc_qupv3_wrap0_s4_clk_src.clkr.hw, 1792 + }, 1793 + .num_parents = 1, 1794 + .flags = CLK_SET_RATE_PARENT, 1795 + .ops = &clk_branch2_ops, 1796 + }, 1797 + }, 1798 + }; 1799 + 1800 + static struct clk_branch gcc_qupv3_wrap0_s5_clk = { 1801 + .halt_reg = 0x27750, 1802 + .halt_check = BRANCH_HALT_VOTED, 1803 + .clkr = { 1804 + .enable_reg = 0x62008, 1805 + .enable_mask = BIT(15), 1806 + .hw.init = &(const struct clk_init_data) { 1807 + .name = "gcc_qupv3_wrap0_s5_clk", 1808 + .parent_hws = (const struct clk_hw*[]) { 1809 + &gcc_qupv3_wrap0_s5_clk_src.clkr.hw, 1810 + }, 1811 + .num_parents = 1, 1812 + .flags = CLK_SET_RATE_PARENT, 1813 + .ops = &clk_branch2_ops, 1814 + }, 1815 + }, 1816 + }; 1817 + 1818 + static struct clk_branch gcc_qupv3_wrap0_s6_clk = { 1819 + .halt_reg = 0x27884, 1820 + .halt_check = BRANCH_HALT_VOTED, 1821 + .clkr = { 1822 + .enable_reg = 0x62008, 1823 + .enable_mask = BIT(16), 1824 + .hw.init = &(const struct clk_init_data) { 1825 + .name = "gcc_qupv3_wrap0_s6_clk", 1826 + .parent_hws = (const struct clk_hw*[]) { 1827 + &gcc_qupv3_wrap0_s6_clk_src.clkr.hw, 1828 + }, 1829 + .num_parents = 1, 1830 + .flags = CLK_SET_RATE_PARENT, 1831 + .ops = &clk_branch2_ops, 1832 + }, 1833 + }, 1834 + }; 1835 + 1836 + static struct clk_branch gcc_qupv3_wrap0_s7_clk = { 1837 + .halt_reg = 0x279b8, 1838 + .halt_check = BRANCH_HALT_VOTED, 1839 + .clkr = { 1840 + .enable_reg = 0x62008, 1841 + .enable_mask = BIT(17), 1842 + .hw.init = &(const struct clk_init_data) { 1843 + .name = "gcc_qupv3_wrap0_s7_clk", 1844 + .parent_hws = (const struct clk_hw*[]) { 1845 + &gcc_qupv3_wrap0_s7_clk_src.clkr.hw, 1846 + }, 1847 + .num_parents = 1, 1848 + .flags = CLK_SET_RATE_PARENT, 1849 + .ops = &clk_branch2_ops, 1850 + }, 1851 + }, 1852 + }; 1853 + 1854 + static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = { 1855 + .halt_reg = 0x28018, 1856 + .halt_check = BRANCH_HALT_VOTED, 1857 + .clkr = { 1858 + .enable_reg = 0x62008, 1859 + .enable_mask = BIT(18), 1860 + .hw.init = &(const struct clk_init_data) { 1861 + .name = "gcc_qupv3_wrap1_core_2x_clk", 1862 + .ops = &clk_branch2_ops, 1863 + }, 1864 + }, 1865 + }; 1866 + 1867 + static struct clk_branch gcc_qupv3_wrap1_core_clk = { 1868 + .halt_reg = 0x2800c, 1869 + .halt_check = BRANCH_HALT_VOTED, 1870 + .clkr = { 1871 + .enable_reg = 0x62008, 1872 + .enable_mask = BIT(19), 1873 + .hw.init = &(const struct clk_init_data) { 1874 + .name = "gcc_qupv3_wrap1_core_clk", 1875 + .ops = &clk_branch2_ops, 1876 + }, 1877 + }, 1878 + }; 1879 + 1880 + static struct clk_branch gcc_qupv3_wrap1_s0_clk = { 1881 + .halt_reg = 0x2814c, 1882 + .halt_check = BRANCH_HALT_VOTED, 1883 + .clkr = { 1884 + .enable_reg = 0x62008, 1885 + .enable_mask = BIT(22), 1886 + .hw.init = &(const struct clk_init_data) { 1887 + .name = "gcc_qupv3_wrap1_s0_clk", 1888 + .parent_hws = (const struct clk_hw*[]) { 1889 + &gcc_qupv3_wrap1_s0_clk_src.clkr.hw, 1890 + }, 1891 + .num_parents = 1, 1892 + .flags = CLK_SET_RATE_PARENT, 1893 + .ops = &clk_branch2_ops, 1894 + }, 1895 + }, 1896 + }; 1897 + 1898 + static struct clk_branch gcc_qupv3_wrap1_s1_clk = { 1899 + .halt_reg = 0x28280, 1900 + .halt_check = BRANCH_HALT_VOTED, 1901 + .clkr = { 1902 + .enable_reg = 0x62008, 1903 + .enable_mask = BIT(23), 1904 + .hw.init = &(const struct clk_init_data) { 1905 + .name = "gcc_qupv3_wrap1_s1_clk", 1906 + .parent_hws = (const struct clk_hw*[]) { 1907 + &gcc_qupv3_wrap1_s1_clk_src.clkr.hw, 1908 + }, 1909 + .num_parents = 1, 1910 + .flags = CLK_SET_RATE_PARENT, 1911 + .ops = &clk_branch2_ops, 1912 + }, 1913 + }, 1914 + }; 1915 + 1916 + static struct clk_branch gcc_qupv3_wrap1_s2_clk = { 1917 + .halt_reg = 0x283b4, 1918 + .halt_check = BRANCH_HALT_VOTED, 1919 + .clkr = { 1920 + .enable_reg = 0x62008, 1921 + .enable_mask = BIT(24), 1922 + .hw.init = &(const struct clk_init_data) { 1923 + .name = "gcc_qupv3_wrap1_s2_clk", 1924 + .parent_hws = (const struct clk_hw*[]) { 1925 + &gcc_qupv3_wrap1_s2_clk_src.clkr.hw, 1926 + }, 1927 + .num_parents = 1, 1928 + .flags = CLK_SET_RATE_PARENT, 1929 + .ops = &clk_branch2_ops, 1930 + }, 1931 + }, 1932 + }; 1933 + 1934 + static struct clk_branch gcc_qupv3_wrap1_s3_clk = { 1935 + .halt_reg = 0x284e8, 1936 + .halt_check = BRANCH_HALT_VOTED, 1937 + .clkr = { 1938 + .enable_reg = 0x62008, 1939 + .enable_mask = BIT(25), 1940 + .hw.init = &(const struct clk_init_data) { 1941 + .name = "gcc_qupv3_wrap1_s3_clk", 1942 + .parent_hws = (const struct clk_hw*[]) { 1943 + &gcc_qupv3_wrap1_s3_clk_src.clkr.hw, 1944 + }, 1945 + .num_parents = 1, 1946 + .flags = CLK_SET_RATE_PARENT, 1947 + .ops = &clk_branch2_ops, 1948 + }, 1949 + }, 1950 + }; 1951 + 1952 + static struct clk_branch gcc_qupv3_wrap1_s4_clk = { 1953 + .halt_reg = 0x2861c, 1954 + .halt_check = BRANCH_HALT_VOTED, 1955 + .clkr = { 1956 + .enable_reg = 0x62008, 1957 + .enable_mask = BIT(26), 1958 + .hw.init = &(const struct clk_init_data) { 1959 + .name = "gcc_qupv3_wrap1_s4_clk", 1960 + .parent_hws = (const struct clk_hw*[]) { 1961 + &gcc_qupv3_wrap1_s4_clk_src.clkr.hw, 1962 + }, 1963 + .num_parents = 1, 1964 + .flags = CLK_SET_RATE_PARENT, 1965 + .ops = &clk_branch2_ops, 1966 + }, 1967 + }, 1968 + }; 1969 + 1970 + static struct clk_branch gcc_qupv3_wrap1_s5_clk = { 1971 + .halt_reg = 0x28750, 1972 + .halt_check = BRANCH_HALT_VOTED, 1973 + .clkr = { 1974 + .enable_reg = 0x62008, 1975 + .enable_mask = BIT(27), 1976 + .hw.init = &(const struct clk_init_data) { 1977 + .name = "gcc_qupv3_wrap1_s5_clk", 1978 + .parent_hws = (const struct clk_hw*[]) { 1979 + &gcc_qupv3_wrap1_s5_clk_src.clkr.hw, 1980 + }, 1981 + .num_parents = 1, 1982 + .flags = CLK_SET_RATE_PARENT, 1983 + .ops = &clk_branch2_ops, 1984 + }, 1985 + }, 1986 + }; 1987 + 1988 + static struct clk_branch gcc_qupv3_wrap1_s6_clk = { 1989 + .halt_reg = 0x28884, 1990 + .halt_check = BRANCH_HALT_VOTED, 1991 + .clkr = { 1992 + .enable_reg = 0x62008, 1993 + .enable_mask = BIT(28), 1994 + .hw.init = &(const struct clk_init_data) { 1995 + .name = "gcc_qupv3_wrap1_s6_clk", 1996 + .parent_hws = (const struct clk_hw*[]) { 1997 + &gcc_qupv3_wrap1_s6_clk_src.clkr.hw, 1998 + }, 1999 + .num_parents = 1, 2000 + .flags = CLK_SET_RATE_PARENT, 2001 + .ops = &clk_branch2_ops, 2002 + }, 2003 + }, 2004 + }; 2005 + 2006 + static struct clk_branch gcc_qupv3_wrap1_s7_clk = { 2007 + .halt_reg = 0x289b8, 2008 + .halt_check = BRANCH_HALT_VOTED, 2009 + .clkr = { 2010 + .enable_reg = 0x62008, 2011 + .enable_mask = BIT(29), 2012 + .hw.init = &(const struct clk_init_data) { 2013 + .name = "gcc_qupv3_wrap1_s7_clk", 2014 + .parent_hws = (const struct clk_hw*[]) { 2015 + &gcc_qupv3_wrap1_s7_clk_src.clkr.hw, 2016 + }, 2017 + .num_parents = 1, 2018 + .flags = CLK_SET_RATE_PARENT, 2019 + .ops = &clk_branch2_ops, 2020 + }, 2021 + }, 2022 + }; 2023 + 2024 + static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = { 2025 + .halt_reg = 0x27004, 2026 + .halt_check = BRANCH_HALT_VOTED, 2027 + .hwcg_reg = 0x27004, 2028 + .hwcg_bit = 1, 2029 + .clkr = { 2030 + .enable_reg = 0x62008, 2031 + .enable_mask = BIT(6), 2032 + .hw.init = &(const struct clk_init_data) { 2033 + .name = "gcc_qupv3_wrap_0_m_ahb_clk", 2034 + .ops = &clk_branch2_ops, 2035 + }, 2036 + }, 2037 + }; 2038 + 2039 + static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = { 2040 + .halt_reg = 0x27008, 2041 + .halt_check = BRANCH_HALT_VOTED, 2042 + .hwcg_reg = 0x27008, 2043 + .hwcg_bit = 1, 2044 + .clkr = { 2045 + .enable_reg = 0x62008, 2046 + .enable_mask = BIT(7), 2047 + .hw.init = &(const struct clk_init_data) { 2048 + .name = "gcc_qupv3_wrap_0_s_ahb_clk", 2049 + .ops = &clk_branch2_ops, 2050 + }, 2051 + }, 2052 + }; 2053 + 2054 + static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = { 2055 + .halt_reg = 0x28004, 2056 + .halt_check = BRANCH_HALT_VOTED, 2057 + .hwcg_reg = 0x28004, 2058 + .hwcg_bit = 1, 2059 + .clkr = { 2060 + .enable_reg = 0x62008, 2061 + .enable_mask = BIT(20), 2062 + .hw.init = &(const struct clk_init_data) { 2063 + .name = "gcc_qupv3_wrap_1_m_ahb_clk", 2064 + .ops = &clk_branch2_ops, 2065 + }, 2066 + }, 2067 + }; 2068 + 2069 + static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = { 2070 + .halt_reg = 0x28008, 2071 + .halt_check = BRANCH_HALT_VOTED, 2072 + .hwcg_reg = 0x28008, 2073 + .hwcg_bit = 1, 2074 + .clkr = { 2075 + .enable_reg = 0x62008, 2076 + .enable_mask = BIT(21), 2077 + .hw.init = &(const struct clk_init_data) { 2078 + .name = "gcc_qupv3_wrap_1_s_ahb_clk", 2079 + .ops = &clk_branch2_ops, 2080 + }, 2081 + }, 2082 + }; 2083 + 2084 + static struct clk_branch gcc_sdcc5_ahb_clk = { 2085 + .halt_reg = 0x3b00c, 2086 + .halt_check = BRANCH_HALT, 2087 + .clkr = { 2088 + .enable_reg = 0x3b00c, 2089 + .enable_mask = BIT(0), 2090 + .hw.init = &(const struct clk_init_data) { 2091 + .name = "gcc_sdcc5_ahb_clk", 2092 + .ops = &clk_branch2_ops, 2093 + }, 2094 + }, 2095 + }; 2096 + 2097 + static struct clk_branch gcc_sdcc5_apps_clk = { 2098 + .halt_reg = 0x3b004, 2099 + .halt_check = BRANCH_HALT, 2100 + .clkr = { 2101 + .enable_reg = 0x3b004, 2102 + .enable_mask = BIT(0), 2103 + .hw.init = &(const struct clk_init_data) { 2104 + .name = "gcc_sdcc5_apps_clk", 2105 + .parent_hws = (const struct clk_hw*[]) { 2106 + &gcc_sdcc5_apps_clk_src.clkr.hw, 2107 + }, 2108 + .num_parents = 1, 2109 + .flags = CLK_SET_RATE_PARENT, 2110 + .ops = &clk_branch2_ops, 2111 + }, 2112 + }, 2113 + }; 2114 + 2115 + static struct clk_branch gcc_sdcc5_ice_core_clk = { 2116 + .halt_reg = 0x3b010, 2117 + .halt_check = BRANCH_HALT, 2118 + .clkr = { 2119 + .enable_reg = 0x3b010, 2120 + .enable_mask = BIT(0), 2121 + .hw.init = &(const struct clk_init_data) { 2122 + .name = "gcc_sdcc5_ice_core_clk", 2123 + .parent_hws = (const struct clk_hw*[]) { 2124 + &gcc_sdcc5_ice_core_clk_src.clkr.hw, 2125 + }, 2126 + .num_parents = 1, 2127 + .flags = CLK_SET_RATE_PARENT, 2128 + .ops = &clk_branch2_ops, 2129 + }, 2130 + }, 2131 + }; 2132 + 2133 + static struct clk_branch gcc_sm_bus_ahb_clk = { 2134 + .halt_reg = 0x5b004, 2135 + .halt_check = BRANCH_HALT, 2136 + .clkr = { 2137 + .enable_reg = 0x5b004, 2138 + .enable_mask = BIT(0), 2139 + .hw.init = &(const struct clk_init_data) { 2140 + .name = "gcc_sm_bus_ahb_clk", 2141 + .ops = &clk_branch2_ops, 2142 + }, 2143 + }, 2144 + }; 2145 + 2146 + static struct clk_branch gcc_sm_bus_xo_clk = { 2147 + .halt_reg = 0x5b008, 2148 + .halt_check = BRANCH_HALT, 2149 + .clkr = { 2150 + .enable_reg = 0x5b008, 2151 + .enable_mask = BIT(0), 2152 + .hw.init = &(const struct clk_init_data) { 2153 + .name = "gcc_sm_bus_xo_clk", 2154 + .parent_hws = (const struct clk_hw*[]) { 2155 + &gcc_sm_bus_xo_clk_src.clkr.hw, 2156 + }, 2157 + .num_parents = 1, 2158 + .flags = CLK_SET_RATE_PARENT, 2159 + .ops = &clk_branch2_ops, 2160 + }, 2161 + }, 2162 + }; 2163 + 2164 + static struct clk_branch gcc_snoc_cnoc_gemnoc_pcie_qx_clk = { 2165 + .halt_reg = 0x9200c, 2166 + .halt_check = BRANCH_HALT_SKIP, 2167 + .hwcg_reg = 0x9200c, 2168 + .hwcg_bit = 1, 2169 + .clkr = { 2170 + .enable_reg = 0x62000, 2171 + .enable_mask = BIT(11), 2172 + .hw.init = &(const struct clk_init_data) { 2173 + .name = "gcc_snoc_cnoc_gemnoc_pcie_qx_clk", 2174 + .ops = &clk_branch2_ops, 2175 + }, 2176 + }, 2177 + }; 2178 + 2179 + static struct clk_branch gcc_snoc_cnoc_gemnoc_pcie_south_qx_clk = { 2180 + .halt_reg = 0x92010, 2181 + .halt_check = BRANCH_HALT_SKIP, 2182 + .hwcg_reg = 0x92010, 2183 + .hwcg_bit = 1, 2184 + .clkr = { 2185 + .enable_reg = 0x62000, 2186 + .enable_mask = BIT(12), 2187 + .hw.init = &(const struct clk_init_data) { 2188 + .name = "gcc_snoc_cnoc_gemnoc_pcie_south_qx_clk", 2189 + .ops = &clk_branch2_ops, 2190 + }, 2191 + }, 2192 + }; 2193 + 2194 + static struct clk_branch gcc_snoc_cnoc_pcie_qx_clk = { 2195 + .halt_reg = 0x84030, 2196 + .halt_check = BRANCH_HALT, 2197 + .clkr = { 2198 + .enable_reg = 0x84030, 2199 + .enable_mask = BIT(0), 2200 + .hw.init = &(const struct clk_init_data) { 2201 + .name = "gcc_snoc_cnoc_pcie_qx_clk", 2202 + .ops = &clk_branch2_ops, 2203 + }, 2204 + }, 2205 + }; 2206 + 2207 + static struct clk_branch gcc_snoc_pcie_sf_center_qx_clk = { 2208 + .halt_reg = 0x92014, 2209 + .halt_check = BRANCH_HALT_SKIP, 2210 + .hwcg_reg = 0x92014, 2211 + .hwcg_bit = 1, 2212 + .clkr = { 2213 + .enable_reg = 0x62000, 2214 + .enable_mask = BIT(19), 2215 + .hw.init = &(const struct clk_init_data) { 2216 + .name = "gcc_snoc_pcie_sf_center_qx_clk", 2217 + .ops = &clk_branch2_ops, 2218 + }, 2219 + }, 2220 + }; 2221 + 2222 + static struct clk_branch gcc_snoc_pcie_sf_south_qx_clk = { 2223 + .halt_reg = 0x92018, 2224 + .halt_check = BRANCH_HALT_SKIP, 2225 + .hwcg_reg = 0x92018, 2226 + .hwcg_bit = 1, 2227 + .clkr = { 2228 + .enable_reg = 0x62000, 2229 + .enable_mask = BIT(22), 2230 + .hw.init = &(const struct clk_init_data) { 2231 + .name = "gcc_snoc_pcie_sf_south_qx_clk", 2232 + .ops = &clk_branch2_ops, 2233 + }, 2234 + }, 2235 + }; 2236 + 2237 + static struct clk_branch gcc_tsc_cfg_ahb_clk = { 2238 + .halt_reg = 0x5700c, 2239 + .halt_check = BRANCH_HALT, 2240 + .clkr = { 2241 + .enable_reg = 0x5700c, 2242 + .enable_mask = BIT(0), 2243 + .hw.init = &(const struct clk_init_data) { 2244 + .name = "gcc_tsc_cfg_ahb_clk", 2245 + .ops = &clk_branch2_ops, 2246 + }, 2247 + }, 2248 + }; 2249 + 2250 + static struct clk_branch gcc_tsc_cntr_clk = { 2251 + .halt_reg = 0x57004, 2252 + .halt_check = BRANCH_HALT, 2253 + .clkr = { 2254 + .enable_reg = 0x57004, 2255 + .enable_mask = BIT(0), 2256 + .hw.init = &(const struct clk_init_data) { 2257 + .name = "gcc_tsc_cntr_clk", 2258 + .parent_hws = (const struct clk_hw*[]) { 2259 + &gcc_tsc_clk_src.clkr.hw, 2260 + }, 2261 + .num_parents = 1, 2262 + .flags = CLK_SET_RATE_PARENT, 2263 + .ops = &clk_branch2_ops, 2264 + }, 2265 + }, 2266 + }; 2267 + 2268 + static struct clk_branch gcc_tsc_etu_clk = { 2269 + .halt_reg = 0x57008, 2270 + .halt_check = BRANCH_HALT, 2271 + .clkr = { 2272 + .enable_reg = 0x57008, 2273 + .enable_mask = BIT(0), 2274 + .hw.init = &(const struct clk_init_data) { 2275 + .name = "gcc_tsc_etu_clk", 2276 + .parent_hws = (const struct clk_hw*[]) { 2277 + &gcc_tsc_clk_src.clkr.hw, 2278 + }, 2279 + .num_parents = 1, 2280 + .flags = CLK_SET_RATE_PARENT, 2281 + .ops = &clk_branch2_ops, 2282 + }, 2283 + }, 2284 + }; 2285 + 2286 + static struct clk_branch gcc_usb2_clkref_en = { 2287 + .halt_reg = 0x9c008, 2288 + .halt_bit = 31, 2289 + .halt_check = BRANCH_HALT_ENABLE, 2290 + .clkr = { 2291 + .enable_reg = 0x9c008, 2292 + .enable_mask = BIT(0), 2293 + .hw.init = &(const struct clk_init_data) { 2294 + .name = "gcc_usb2_clkref_en", 2295 + .ops = &clk_branch_ops, 2296 + }, 2297 + }, 2298 + }; 2299 + 2300 + static struct clk_branch gcc_usb30_prim_master_clk = { 2301 + .halt_reg = 0x49018, 2302 + .halt_check = BRANCH_HALT, 2303 + .clkr = { 2304 + .enable_reg = 0x49018, 2305 + .enable_mask = BIT(0), 2306 + .hw.init = &(const struct clk_init_data) { 2307 + .name = "gcc_usb30_prim_master_clk", 2308 + .parent_hws = (const struct clk_hw*[]) { 2309 + &gcc_usb30_prim_master_clk_src.clkr.hw, 2310 + }, 2311 + .num_parents = 1, 2312 + .flags = CLK_SET_RATE_PARENT, 2313 + .ops = &clk_branch2_ops, 2314 + }, 2315 + }, 2316 + }; 2317 + 2318 + static struct clk_branch gcc_usb30_prim_mock_utmi_clk = { 2319 + .halt_reg = 0x49024, 2320 + .halt_check = BRANCH_HALT, 2321 + .clkr = { 2322 + .enable_reg = 0x49024, 2323 + .enable_mask = BIT(0), 2324 + .hw.init = &(const struct clk_init_data) { 2325 + .name = "gcc_usb30_prim_mock_utmi_clk", 2326 + .parent_hws = (const struct clk_hw*[]) { 2327 + &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw, 2328 + }, 2329 + .num_parents = 1, 2330 + .flags = CLK_SET_RATE_PARENT, 2331 + .ops = &clk_branch2_ops, 2332 + }, 2333 + }, 2334 + }; 2335 + 2336 + static struct clk_branch gcc_usb30_prim_sleep_clk = { 2337 + .halt_reg = 0x49020, 2338 + .halt_check = BRANCH_HALT, 2339 + .clkr = { 2340 + .enable_reg = 0x49020, 2341 + .enable_mask = BIT(0), 2342 + .hw.init = &(const struct clk_init_data) { 2343 + .name = "gcc_usb30_prim_sleep_clk", 2344 + .ops = &clk_branch2_ops, 2345 + }, 2346 + }, 2347 + }; 2348 + 2349 + static struct clk_branch gcc_usb3_prim_phy_aux_clk = { 2350 + .halt_reg = 0x49060, 2351 + .halt_check = BRANCH_HALT, 2352 + .clkr = { 2353 + .enable_reg = 0x49060, 2354 + .enable_mask = BIT(0), 2355 + .hw.init = &(const struct clk_init_data) { 2356 + .name = "gcc_usb3_prim_phy_aux_clk", 2357 + .parent_hws = (const struct clk_hw*[]) { 2358 + &gcc_usb3_prim_phy_aux_clk_src.clkr.hw, 2359 + }, 2360 + .num_parents = 1, 2361 + .flags = CLK_SET_RATE_PARENT, 2362 + .ops = &clk_branch2_ops, 2363 + }, 2364 + }, 2365 + }; 2366 + 2367 + static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = { 2368 + .halt_reg = 0x49064, 2369 + .halt_check = BRANCH_HALT, 2370 + .clkr = { 2371 + .enable_reg = 0x49064, 2372 + .enable_mask = BIT(0), 2373 + .hw.init = &(const struct clk_init_data) { 2374 + .name = "gcc_usb3_prim_phy_com_aux_clk", 2375 + .parent_hws = (const struct clk_hw*[]) { 2376 + &gcc_usb3_prim_phy_aux_clk_src.clkr.hw, 2377 + }, 2378 + .num_parents = 1, 2379 + .flags = CLK_SET_RATE_PARENT, 2380 + .ops = &clk_branch2_ops, 2381 + }, 2382 + }, 2383 + }; 2384 + 2385 + static struct clk_branch gcc_usb3_prim_phy_pipe_clk = { 2386 + .halt_reg = 0x49068, 2387 + .halt_check = BRANCH_HALT_DELAY, 2388 + .hwcg_reg = 0x49068, 2389 + .hwcg_bit = 1, 2390 + .clkr = { 2391 + .enable_reg = 0x49068, 2392 + .enable_mask = BIT(0), 2393 + .hw.init = &(const struct clk_init_data) { 2394 + .name = "gcc_usb3_prim_phy_pipe_clk", 2395 + .parent_hws = (const struct clk_hw*[]) { 2396 + &gcc_usb3_prim_phy_pipe_clk_src.clkr.hw, 2397 + }, 2398 + .num_parents = 1, 2399 + .flags = CLK_SET_RATE_PARENT, 2400 + .ops = &clk_branch2_ops, 2401 + }, 2402 + }, 2403 + }; 2404 + 2405 + static struct clk_regmap *gcc_qdu1000_clocks[] = { 2406 + [GCC_AGGRE_NOC_ECPRI_DMA_CLK] = &gcc_aggre_noc_ecpri_dma_clk.clkr, 2407 + [GCC_AGGRE_NOC_ECPRI_DMA_CLK_SRC] = &gcc_aggre_noc_ecpri_dma_clk_src.clkr, 2408 + [GCC_AGGRE_NOC_ECPRI_GSI_CLK_SRC] = &gcc_aggre_noc_ecpri_gsi_clk_src.clkr, 2409 + [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr, 2410 + [GCC_CFG_NOC_ECPRI_CC_AHB_CLK] = &gcc_cfg_noc_ecpri_cc_ahb_clk.clkr, 2411 + [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr, 2412 + [GCC_DDRSS_ECPRI_DMA_CLK] = &gcc_ddrss_ecpri_dma_clk.clkr, 2413 + [GCC_ECPRI_AHB_CLK] = &gcc_ecpri_ahb_clk.clkr, 2414 + [GCC_ECPRI_CC_GPLL0_CLK_SRC] = &gcc_ecpri_cc_gpll0_clk_src.clkr, 2415 + [GCC_ECPRI_CC_GPLL1_EVEN_CLK_SRC] = &gcc_ecpri_cc_gpll1_even_clk_src.clkr, 2416 + [GCC_ECPRI_CC_GPLL2_EVEN_CLK_SRC] = &gcc_ecpri_cc_gpll2_even_clk_src.clkr, 2417 + [GCC_ECPRI_CC_GPLL3_CLK_SRC] = &gcc_ecpri_cc_gpll3_clk_src.clkr, 2418 + [GCC_ECPRI_CC_GPLL4_CLK_SRC] = &gcc_ecpri_cc_gpll4_clk_src.clkr, 2419 + [GCC_ECPRI_CC_GPLL5_EVEN_CLK_SRC] = &gcc_ecpri_cc_gpll5_even_clk_src.clkr, 2420 + [GCC_ECPRI_XO_CLK] = &gcc_ecpri_xo_clk.clkr, 2421 + [GCC_ETH_DBG_SNOC_AXI_CLK] = &gcc_eth_dbg_snoc_axi_clk.clkr, 2422 + [GCC_GEMNOC_PCIE_QX_CLK] = &gcc_gemnoc_pcie_qx_clk.clkr, 2423 + [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 2424 + [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr, 2425 + [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 2426 + [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr, 2427 + [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 2428 + [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr, 2429 + [GCC_GPLL0] = &gcc_gpll0.clkr, 2430 + [GCC_GPLL0_OUT_EVEN] = &gcc_gpll0_out_even.clkr, 2431 + [GCC_GPLL1] = &gcc_gpll1.clkr, 2432 + [GCC_GPLL2] = &gcc_gpll2.clkr, 2433 + [GCC_GPLL2_OUT_EVEN] = &gcc_gpll2_out_even.clkr, 2434 + [GCC_GPLL3] = &gcc_gpll3.clkr, 2435 + [GCC_GPLL4] = &gcc_gpll4.clkr, 2436 + [GCC_GPLL5] = &gcc_gpll5.clkr, 2437 + [GCC_GPLL5_OUT_EVEN] = &gcc_gpll5_out_even.clkr, 2438 + [GCC_GPLL6] = &gcc_gpll6.clkr, 2439 + [GCC_GPLL7] = &gcc_gpll7.clkr, 2440 + [GCC_GPLL8] = &gcc_gpll8.clkr, 2441 + [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr, 2442 + [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr, 2443 + [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr, 2444 + [GCC_PCIE_0_CLKREF_EN] = &gcc_pcie_0_clkref_en.clkr, 2445 + [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr, 2446 + [GCC_PCIE_0_PHY_AUX_CLK] = &gcc_pcie_0_phy_aux_clk.clkr, 2447 + [GCC_PCIE_0_PHY_RCHNG_CLK] = &gcc_pcie_0_phy_rchng_clk.clkr, 2448 + [GCC_PCIE_0_PHY_RCHNG_CLK_SRC] = &gcc_pcie_0_phy_rchng_clk_src.clkr, 2449 + [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr, 2450 + [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr, 2451 + [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr, 2452 + [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr, 2453 + [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr, 2454 + [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr, 2455 + [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr, 2456 + [GCC_QMIP_ANOC_PCIE_CLK] = &gcc_qmip_anoc_pcie_clk.clkr, 2457 + [GCC_QMIP_ECPRI_DMA0_CLK] = &gcc_qmip_ecpri_dma0_clk.clkr, 2458 + [GCC_QMIP_ECPRI_DMA1_CLK] = &gcc_qmip_ecpri_dma1_clk.clkr, 2459 + [GCC_QMIP_ECPRI_GSI_CLK] = &gcc_qmip_ecpri_gsi_clk.clkr, 2460 + [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr, 2461 + [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr, 2462 + [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr, 2463 + [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr, 2464 + [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr, 2465 + [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr, 2466 + [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr, 2467 + [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr, 2468 + [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr, 2469 + [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr, 2470 + [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr, 2471 + [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr, 2472 + [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr, 2473 + [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr, 2474 + [GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr, 2475 + [GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr, 2476 + [GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr, 2477 + [GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr, 2478 + [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr, 2479 + [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr, 2480 + [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr, 2481 + [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr, 2482 + [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr, 2483 + [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr, 2484 + [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr, 2485 + [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr, 2486 + [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr, 2487 + [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr, 2488 + [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr, 2489 + [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr, 2490 + [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr, 2491 + [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr, 2492 + [GCC_QUPV3_WRAP1_S6_CLK] = &gcc_qupv3_wrap1_s6_clk.clkr, 2493 + [GCC_QUPV3_WRAP1_S6_CLK_SRC] = &gcc_qupv3_wrap1_s6_clk_src.clkr, 2494 + [GCC_QUPV3_WRAP1_S7_CLK] = &gcc_qupv3_wrap1_s7_clk.clkr, 2495 + [GCC_QUPV3_WRAP1_S7_CLK_SRC] = &gcc_qupv3_wrap1_s7_clk_src.clkr, 2496 + [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr, 2497 + [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr, 2498 + [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr, 2499 + [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr, 2500 + [GCC_SDCC5_AHB_CLK] = &gcc_sdcc5_ahb_clk.clkr, 2501 + [GCC_SDCC5_APPS_CLK] = &gcc_sdcc5_apps_clk.clkr, 2502 + [GCC_SDCC5_APPS_CLK_SRC] = &gcc_sdcc5_apps_clk_src.clkr, 2503 + [GCC_SDCC5_ICE_CORE_CLK] = &gcc_sdcc5_ice_core_clk.clkr, 2504 + [GCC_SDCC5_ICE_CORE_CLK_SRC] = &gcc_sdcc5_ice_core_clk_src.clkr, 2505 + [GCC_SM_BUS_AHB_CLK] = &gcc_sm_bus_ahb_clk.clkr, 2506 + [GCC_SM_BUS_XO_CLK] = &gcc_sm_bus_xo_clk.clkr, 2507 + [GCC_SM_BUS_XO_CLK_SRC] = &gcc_sm_bus_xo_clk_src.clkr, 2508 + [GCC_SNOC_CNOC_GEMNOC_PCIE_QX_CLK] = &gcc_snoc_cnoc_gemnoc_pcie_qx_clk.clkr, 2509 + [GCC_SNOC_CNOC_GEMNOC_PCIE_SOUTH_QX_CLK] = &gcc_snoc_cnoc_gemnoc_pcie_south_qx_clk.clkr, 2510 + [GCC_SNOC_CNOC_PCIE_QX_CLK] = &gcc_snoc_cnoc_pcie_qx_clk.clkr, 2511 + [GCC_SNOC_PCIE_SF_CENTER_QX_CLK] = &gcc_snoc_pcie_sf_center_qx_clk.clkr, 2512 + [GCC_SNOC_PCIE_SF_SOUTH_QX_CLK] = &gcc_snoc_pcie_sf_south_qx_clk.clkr, 2513 + [GCC_TSC_CFG_AHB_CLK] = &gcc_tsc_cfg_ahb_clk.clkr, 2514 + [GCC_TSC_CLK_SRC] = &gcc_tsc_clk_src.clkr, 2515 + [GCC_TSC_CNTR_CLK] = &gcc_tsc_cntr_clk.clkr, 2516 + [GCC_TSC_ETU_CLK] = &gcc_tsc_etu_clk.clkr, 2517 + [GCC_USB2_CLKREF_EN] = &gcc_usb2_clkref_en.clkr, 2518 + [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr, 2519 + [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr, 2520 + [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr, 2521 + [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr, 2522 + [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr, 2523 + [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr, 2524 + [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr, 2525 + [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr, 2526 + [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr, 2527 + [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr, 2528 + [GCC_USB3_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb3_prim_phy_pipe_clk_src.clkr, 2529 + [GCC_ETH_100G_C2C_HM_APB_CLK] = &gcc_eth_100g_c2c_hm_apb_clk.clkr, 2530 + [GCC_ETH_100G_FH_HM_APB_0_CLK] = &gcc_eth_100g_fh_hm_apb_0_clk.clkr, 2531 + [GCC_ETH_100G_FH_HM_APB_1_CLK] = &gcc_eth_100g_fh_hm_apb_1_clk.clkr, 2532 + [GCC_ETH_100G_FH_HM_APB_2_CLK] = &gcc_eth_100g_fh_hm_apb_2_clk.clkr, 2533 + [GCC_ETH_DBG_C2C_HM_APB_CLK] = &gcc_eth_dbg_c2c_hm_apb_clk.clkr, 2534 + [GCC_AGGRE_NOC_ECPRI_GSI_CLK] = &gcc_aggre_noc_ecpri_gsi_clk.clkr, 2535 + [GCC_PCIE_0_PHY_AUX_CLK_SRC] = &gcc_pcie_0_phy_aux_clk_src.clkr, 2536 + [GCC_PCIE_0_PIPE_CLK_SRC] = &gcc_pcie_0_pipe_clk_src.clkr, 2537 + }; 2538 + 2539 + static const struct qcom_reset_map gcc_qdu1000_resets[] = { 2540 + [GCC_ECPRI_CC_BCR] = { 0x3e000 }, 2541 + [GCC_ECPRI_SS_BCR] = { 0x3a000 }, 2542 + [GCC_ETH_WRAPPER_BCR] = { 0x39000 }, 2543 + [GCC_PCIE_0_BCR] = { 0x9d000 }, 2544 + [GCC_PCIE_0_LINK_DOWN_BCR] = { 0x9e014 }, 2545 + [GCC_PCIE_0_NOCSR_COM_PHY_BCR] = { 0x9e020 }, 2546 + [GCC_PCIE_0_PHY_BCR] = { 0x7c000 }, 2547 + [GCC_PCIE_0_PHY_NOCSR_COM_PHY_BCR] = { 0x9e000 }, 2548 + [GCC_PCIE_PHY_CFG_AHB_BCR] = { 0x7f00c }, 2549 + [GCC_PCIE_PHY_COM_BCR] = { 0x7f010 }, 2550 + [GCC_PDM_BCR] = { 0x43000 }, 2551 + [GCC_QUPV3_WRAPPER_0_BCR] = { 0x27000 }, 2552 + [GCC_QUPV3_WRAPPER_1_BCR] = { 0x28000 }, 2553 + [GCC_QUSB2PHY_PRIM_BCR] = { 0x22000 }, 2554 + [GCC_QUSB2PHY_SEC_BCR] = { 0x22004 }, 2555 + [GCC_SDCC5_BCR] = { 0x3b000 }, 2556 + [GCC_TSC_BCR] = { 0x57000 }, 2557 + [GCC_USB30_PRIM_BCR] = { 0x49000 }, 2558 + [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x60008 }, 2559 + [GCC_USB3_DP_PHY_SEC_BCR] = { 0x60014 }, 2560 + [GCC_USB3_PHY_PRIM_BCR] = { 0x60000 }, 2561 + [GCC_USB3_PHY_SEC_BCR] = { 0x6000c }, 2562 + [GCC_USB3PHY_PHY_PRIM_BCR] = { 0x60004 }, 2563 + [GCC_USB3PHY_PHY_SEC_BCR] = { 0x60010 }, 2564 + [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x7a000 }, 2565 + }; 2566 + 2567 + static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = { 2568 + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src), 2569 + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src), 2570 + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src), 2571 + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src), 2572 + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src), 2573 + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src), 2574 + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s6_clk_src), 2575 + DEFINE_RCG_DFS(gcc_qupv3_wrap0_s7_clk_src), 2576 + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src), 2577 + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src), 2578 + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src), 2579 + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src), 2580 + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src), 2581 + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src), 2582 + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src), 2583 + DEFINE_RCG_DFS(gcc_qupv3_wrap1_s7_clk_src), 2584 + }; 2585 + 2586 + static const struct regmap_config gcc_qdu1000_regmap_config = { 2587 + .reg_bits = 32, 2588 + .reg_stride = 4, 2589 + .val_bits = 32, 2590 + .max_register = 0x1f41f0, 2591 + .fast_io = true, 2592 + }; 2593 + 2594 + static const struct qcom_cc_desc gcc_qdu1000_desc = { 2595 + .config = &gcc_qdu1000_regmap_config, 2596 + .clks = gcc_qdu1000_clocks, 2597 + .num_clks = ARRAY_SIZE(gcc_qdu1000_clocks), 2598 + .resets = gcc_qdu1000_resets, 2599 + .num_resets = ARRAY_SIZE(gcc_qdu1000_resets), 2600 + }; 2601 + 2602 + static const struct of_device_id gcc_qdu1000_match_table[] = { 2603 + { .compatible = "qcom,qdu1000-gcc" }, 2604 + { } 2605 + }; 2606 + MODULE_DEVICE_TABLE(of, gcc_qdu1000_match_table); 2607 + 2608 + static int gcc_qdu1000_probe(struct platform_device *pdev) 2609 + { 2610 + struct regmap *regmap; 2611 + int ret; 2612 + 2613 + regmap = qcom_cc_map(pdev, &gcc_qdu1000_desc); 2614 + if (IS_ERR(regmap)) 2615 + return PTR_ERR(regmap); 2616 + 2617 + /* Update FORCE_MEM_CORE_ON for gcc_pcie_0_mstr_axi_clk */ 2618 + regmap_update_bits(regmap, 0x9d024, BIT(14), BIT(14)); 2619 + 2620 + ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks, 2621 + ARRAY_SIZE(gcc_dfs_clocks)); 2622 + if (ret) 2623 + return ret; 2624 + 2625 + ret = qcom_cc_really_probe(pdev, &gcc_qdu1000_desc, regmap); 2626 + if (ret) 2627 + return dev_err_probe(&pdev->dev, ret, "Failed to register GCC clocks\n"); 2628 + 2629 + return ret; 2630 + } 2631 + 2632 + static struct platform_driver gcc_qdu1000_driver = { 2633 + .probe = gcc_qdu1000_probe, 2634 + .driver = { 2635 + .name = "gcc-qdu1000", 2636 + .of_match_table = gcc_qdu1000_match_table, 2637 + }, 2638 + }; 2639 + 2640 + static int __init gcc_qdu1000_init(void) 2641 + { 2642 + return platform_driver_register(&gcc_qdu1000_driver); 2643 + } 2644 + subsys_initcall(gcc_qdu1000_init); 2645 + 2646 + static void __exit gcc_qdu1000_exit(void) 2647 + { 2648 + platform_driver_unregister(&gcc_qdu1000_driver); 2649 + } 2650 + module_exit(gcc_qdu1000_exit); 2651 + 2652 + MODULE_DESCRIPTION("QTI GCC QDU1000 Driver"); 2653 + MODULE_LICENSE("GPL");