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