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